git init of winget repo statistics and manager
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Logs/
|
||||||
|
*.exe
|
15
.vscode/launch.json
vendored
Normal file
15
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch Package",
|
||||||
|
"type": "go",
|
||||||
|
"request": "launch",
|
||||||
|
"mode": "auto",
|
||||||
|
"program": "${fileDirname}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
21
go.mod
Normal file
21
go.mod
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
go 1.22.3
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.22 // indirect
|
||||||
|
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||||
|
golang.org/x/sys v0.19.0 // indirect
|
||||||
|
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
|
||||||
|
modernc.org/libc v1.50.9 // indirect
|
||||||
|
modernc.org/mathutil v1.6.0 // indirect
|
||||||
|
modernc.org/memory v1.8.0 // indirect
|
||||||
|
modernc.org/sqlite v1.30.0 // indirect
|
||||||
|
modernc.org/strutil v1.2.0 // indirect
|
||||||
|
modernc.org/token v1.1.0 // indirect
|
||||||
|
)
|
31
go.sum
Normal file
31
go.sum
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||||
|
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||||
|
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||||
|
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
|
||||||
|
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
|
||||||
|
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI=
|
||||||
|
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
||||||
|
modernc.org/libc v1.50.9 h1:hIWf1uz55lorXQhfoEoezdUHjxzuO6ceshET/yWjSjk=
|
||||||
|
modernc.org/libc v1.50.9/go.mod h1:15P6ublJ9FJR8YQCGy8DeQ2Uwur7iW9Hserr/T3OFZE=
|
||||||
|
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
|
||||||
|
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
|
||||||
|
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E=
|
||||||
|
modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU=
|
||||||
|
modernc.org/sqlite v1.30.0 h1:8YhPUs/HTnlEgErn/jSYQTwHN/ex8CjHHjg+K9iG7LM=
|
||||||
|
modernc.org/sqlite v1.30.0/go.mod h1:cgkTARJ9ugeXSNaLBPK3CqbOe7Ec7ZhWPoMFGldEYEw=
|
||||||
|
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
|
||||||
|
modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
|
||||||
|
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
|
||||||
|
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
26
html/ana.html
Normal file
26
html/ana.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="mod.css" type="text/css">
|
||||||
|
<title>HUJI Sap Analysis</title>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body dir="rtl">
|
||||||
|
<div class="header">
|
||||||
|
<h3>מנהל החבילות של האוניברסיטה העברית</h3>
|
||||||
|
<strong>הדרכה:</strong>
|
||||||
|
<h4>אפשרות א'</h4>
|
||||||
|
<p>יש לפתוח את חלון ההתחל או את שורת החיפוש ולהקליד <abbr title="יוצג גם כcommand prompt">CMD</abbr>. יש ללחוץ עליו בלחצן הימני, ולבחור "הפעל כמנהל". כשיפתח, יש להדביק את הטקסט הבא (לחיצה על הטקסט כדי להעתיק), </p>
|
||||||
|
<div id="source" class="copyme" onclick="copyValue('source')">winget source add -n huji -t "Microsoft.Rest"
|
||||||
|
https://winget.cc.huji.ac.il/api/ & rmdir /s /q "%appdata%\SAP AG" & winget install sap.analysis -s huji </div>
|
||||||
|
</div>
|
||||||
|
<h4 style="width: 100%;">אפשרות ב'</h4>
|
||||||
|
|
||||||
|
|
||||||
|
<a href="/installers/UpgradeAna.bat" class="acopyme" style="width: 100%;" download>להורדה קובץ ההרצה. יש ללחוץ על הלחצן הימני ולפתוח כמנהל. במידה וייפתח חלון כחול, יש ללחוץ על פרטים נוספים -> אפשר </a>
|
||||||
|
<p style="width: 100%;"><strong>הערה:</strong> בדפדפן מיקרוסופט אדג' יש ללחוץ על Keep על הקובץ.</p>
|
||||||
|
<br><br><br>
|
||||||
|
<p>במידה ובשגיאה נכתב כי הפקודה 'winget' אינה מוכרת למערכת, יש להדביק את הפקודה הבאה:</p>
|
||||||
|
<div class="copyme" onclick="copyValue('help')" id="help">powershell -executionPolicy bypass -command "$progressPreference = 'silentlyContinue'; Write-Information 'Downloading WinGet and its dependencies...'; Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle; Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.14.00.Desktop.appx; Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx -OutFile Microsoft.UI.Xaml.2.8.x64.appx; Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx; Add-AppxPackage Microsoft.UI.Xaml.2.8.x64.appx; Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle;"</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
58
html/index.html
Normal file
58
html/index.html
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>SQLite Data</title>
|
||||||
|
<link href="mod.css" rel="stylesheet" type="text/css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="m">
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<div class="column">
|
||||||
|
|
||||||
|
<h1>Download Statistics</h1>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Program</th>
|
||||||
|
<th>Version</th>
|
||||||
|
<th>Download Count</th>
|
||||||
|
</tr>
|
||||||
|
<% downloadData.forEach(function(row) { %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= row.program %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= row.version %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= row.download_count %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% }); %>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="column" id="totalus">
|
||||||
|
<h1>Total Download Statistics</h1>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Package</th>
|
||||||
|
<th>Search Count</th>
|
||||||
|
</tr>
|
||||||
|
<% searchData.forEach(function(row) { %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= row.program %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= row.download_count %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% }); %>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
34
html/main.html
Normal file
34
html/main.html
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{{define "body"}}
|
||||||
|
<body>
|
||||||
|
<a href="/" class="lang"><img src="/heb" width="20px" height="20px"></a>
|
||||||
|
<div>
|
||||||
|
<div class="header">
|
||||||
|
<h3>{{ .Header }}</h3>
|
||||||
|
<p style="font-size: 12;">{{ .Help }}</p>
|
||||||
|
<p>{{ .Explain }}</p>
|
||||||
|
<div id="source" class="copyme" onclick="copyValue('source')">winget source add -n huji -t "Microsoft.Rest"
|
||||||
|
https://winget.cc.huji.ac.il/api/</div>
|
||||||
|
</div>
|
||||||
|
<ul>
|
||||||
|
<% pkgs.forEach(function(row, i) { %>
|
||||||
|
<li id="<%= i %>">
|
||||||
|
<div id="program-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')">
|
||||||
|
Package Name: <strong>
|
||||||
|
<%= row.package %>
|
||||||
|
</strong>
|
||||||
|
</div>
|
||||||
|
<div id="version-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')">
|
||||||
|
Package Version: <%= row.version %>
|
||||||
|
</div>
|
||||||
|
<div id="tag-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')">Allowed use by <%= row.tag %>
|
||||||
|
</div>
|
||||||
|
<script>insertWarning("<%= row.warning %>","<%= i %>")</script>
|
||||||
|
<div class="copyme hiddencopy" id="id-<%= i %>" onclick="copyValue('id-<%= i %>')"><script>scriptPackage("<%= row.id %>", "<%= row.extra_commands %>", "<%= i %>")</script></div>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<% }); %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
{{end}}
|
14
html/master.html
Normal file
14
html/master.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{{define "master"}}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>{{ .Title }}</title>
|
||||||
|
<link href="/public/mod.css" rel="stylesheet" type="text/css">
|
||||||
|
<script src="/public/script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{{template "body" .}}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
{{end}}
|
42
html/mrkzi.html
Normal file
42
html/mrkzi.html
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>HUJI Packages</title>
|
||||||
|
<link href="mod.css" rel="stylesheet" type="text/css">
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body dir="rtl">
|
||||||
|
<a href="/en" class="lang"><img src="/eng" width="20px" height="20px"></a>
|
||||||
|
<div>
|
||||||
|
<div class="header">
|
||||||
|
|
||||||
|
<h3>מנהל החבילות של האוניברסיטה העברית</h3>
|
||||||
|
<p style="font-size: 12;">הדרכה:</p>
|
||||||
|
<p>יש לפתוח את חלון ההתחל או את שורת החיפוש ולהקליד<abbr title="יוצג גם כcommand prompt">CMD</abbr>. יש ללחוץ עליו בלחצן הימני, ולבחור "הפעל כמנהל". כשיפתח, יש להדביק את הטקסט הבא (לחיצה על הטקסט כדי להעתיק), </p>
|
||||||
|
<div id="source" class="copyme" onclick="copyValue('source')">winget source add -n huji -t "Microsoft.Rest"
|
||||||
|
https://winget.cc.huji.ac.il/api/</div>
|
||||||
|
</div>
|
||||||
|
<ul class="r">
|
||||||
|
<% pkgs.forEach(function(row, i) { %>
|
||||||
|
<li id="<%= i %>">
|
||||||
|
<div id="program-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')">
|
||||||
|
שם התוכנה: <strong>
|
||||||
|
<%= row.package %>
|
||||||
|
</strong>
|
||||||
|
</div>
|
||||||
|
<div id="version-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')">
|
||||||
|
גרסאת התוכנה <%= row.version %>
|
||||||
|
</div>
|
||||||
|
<div id="tag-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')"><script>replaceHebrew("tag-<%= i %>",'<%= row.tag %>')</script>
|
||||||
|
</div>
|
||||||
|
<script>insertWarning("<%= row.warning %>","<%= i %>",'he')</script>
|
||||||
|
<div class="copyme hiddencopy" id="id-<%= i %>" onclick="copyValue('id-<%= i %>')"><script>scriptPackage("<%= row.id %>", "<%= row.extra_commands %>", "<%= i %>")</script></div>
|
||||||
|
</li>
|
||||||
|
<% }); %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
26
html/sap.html
Normal file
26
html/sap.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="mod.css" type="text/css">
|
||||||
|
<title>HUJI Sap</title>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body dir="rtl">
|
||||||
|
<div class="header">
|
||||||
|
<h3>מנהל החבילות של האוניברסיטה העברית</h3>
|
||||||
|
<strong>הדרכה:</strong>
|
||||||
|
<h4>אפשרות א'</h4>
|
||||||
|
<p>יש לפתוח את חלון ההתחל או את שורת החיפוש ולהקליד <abbr title="יוצג גם כcommand prompt">CMD</abbr>. יש ללחוץ עליו בלחצן הימני, ולבחור "הפעל כמנהל". כשיפתח, יש להדביק את הטקסט הבא (לחיצה על הטקסט כדי להעתיק), </p>
|
||||||
|
<div id="source" class="copyme" onclick="copyValue('source')">winget source add -n huji -t "Microsoft.Rest"
|
||||||
|
https://winget.cc.huji.ac.il/api/ & winget install sap.gui.upgrade -s huji </div>
|
||||||
|
</div>
|
||||||
|
<h4 style="width: 100%;">אפשרות ב'</h4>
|
||||||
|
|
||||||
|
|
||||||
|
<a href="/installers/UpgradeSap.bat" class="acopyme" style="width: 100%;" download>להורדה קובץ ההרצה. יש ללחוץ על הלחצן הימני ולפתוח כמנהל. במידה וייפתח חלון כחול, יש ללחוץ על פרטים נוספים -> אפשר </a>
|
||||||
|
<p style="width: 100%;"><strong>הערה:</strong> בדפדפן מיקרוסופט אדג' יש ללחוץ על Keep על הקובץ.</p>
|
||||||
|
<br><br><br>
|
||||||
|
<p>במידה ובשגיאה נכתב כי הפקודה 'winget' אינה מוכרת למערכת, יש להדביק את הפקודה הבאה:</p>
|
||||||
|
<div class="copyme" onclick="copyValue('help')" id="help">powershell -executionPolicy bypass -command "$progressPreference = 'silentlyContinue'; Write-Information 'Downloading WinGet and its dependencies...'; Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle; Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.14.00.Desktop.appx; Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx -OutFile Microsoft.UI.Xaml.2.8.x64.appx; Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx; Add-AppxPackage Microsoft.UI.Xaml.2.8.x64.appx; Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle;"</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
33
html/up.html
Normal file
33
html/up.html
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>File Upload</title>
|
||||||
|
<link href="mod.css" rel="stylesheet" type="text/css">
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- <div> -->
|
||||||
|
|
||||||
|
<form action="/upload" method="post" enctype="multipart/form-data">
|
||||||
|
<input type="text" name="filename" placeholder="Selected file" readonly>
|
||||||
|
<input type="file" name="file" id="file" onchange="document.forms[0].filename.value = this.files[0].name">
|
||||||
|
<button class="btn" type="submit">Upload</button>
|
||||||
|
</form>
|
||||||
|
<!---
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Ensure the file input is not empty before submitting the form
|
||||||
|
document.forms[0].addEventListener('submit', function(event) {
|
||||||
|
var fileInput = document.getElementById('file');
|
||||||
|
if (fileInput.files.length === 0) {
|
||||||
|
alert('Please select a file to upload.');
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
26
html/wsb.html
Normal file
26
html/wsb.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>HUJI Packages</title>
|
||||||
|
<link href="/public/mod.css" rel="stylesheet" type="text/css">
|
||||||
|
<script src="/public/script.js"></script>
|
||||||
|
</head>
|
||||||
|
<div>
|
||||||
|
<div id='fubar' class="copyme" onclick="copyValue('fubar')">$progressPreference = 'silentlyContinue'<br>
|
||||||
|
Write-Information "Downloading WinGet and its dependencies..."<br>
|
||||||
|
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle<br>
|
||||||
|
Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.14.00.Desktop.appx <br>
|
||||||
|
Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx -OutFile Microsoft.UI.Xaml.2.8.x64.appx <br>
|
||||||
|
Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx <br>
|
||||||
|
Add-AppxPackage Microsoft.UI.Xaml.2.8.x64.appx<br>
|
||||||
|
Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle<br>
|
||||||
|
Set-ItemProperty -Path "Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name HideFileExt -Value 0<br>
|
||||||
|
Set-ItemProperty -Path "Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name Hidden -Value 1<br>
|
||||||
|
winget source add -n huji -t "Microsoft.Rest" https://winget.cc.huji.ac.il/api/<br>
|
||||||
|
if((Test-Path -LiteralPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\huji.ac.il\winget.cc") -ne $true) { New-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\huji.ac.il\winget.cc" -force -ea SilentlyContinue };<br>
|
||||||
|
New-ItemProperty -LiteralPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\huji.ac.il\winget.cc' -Name '*' -Value 1 -PropertyType DWord -Force -ea SilentlyContinue;<br>
|
||||||
|
New-ItemProperty -LiteralPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\huji.ac.il\winget.cc' -Name 'https' -Value 1 -PropertyType DWord -Force -ea SilentlyContinue;<br>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
110
main.go
Normal file
110
main.go
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"html/template"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
_ "modernc.org/sqlite"
|
||||||
|
)
|
||||||
|
|
||||||
|
func readHtml(res http.ResponseWriter, req *http.Request) {
|
||||||
|
g := template.CSS("./html/public/mod.css")
|
||||||
|
f, err := template.ParseFiles("./html/wsb.html")
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
err = f.Execute(res, g)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func simpRequestResp(res http.ResponseWriter, req *http.Request) {
|
||||||
|
fmt.Fprint(res, "Hello, M'Lord", 153*4, " I'm here to serveè")
|
||||||
|
}
|
||||||
|
func getMsgFromDB(sqldb *sql.DB, id string, lang string) string {
|
||||||
|
query := fmt.Sprintf("SELECT %s FROM msgs WHERE content=$1", lang)
|
||||||
|
res := sqldb.QueryRow(query, id)
|
||||||
|
lng := ""
|
||||||
|
dt := res.Scan(&lng)
|
||||||
|
if dt != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return lng
|
||||||
|
}
|
||||||
|
func getPkgIdFromDB(sqldb *sql.DB) []string {
|
||||||
|
query, err := sqldb.Query("SELECT id FROM packs_all")
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
var pkgs []string
|
||||||
|
query.Scan(&pkgs)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
return pkgs
|
||||||
|
}
|
||||||
|
// func fullSearchDB(sqldb *sql.DB) []string {
|
||||||
|
|
||||||
|
// }
|
||||||
|
func index(sqldb *sql.DB) http.Handler {
|
||||||
|
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
||||||
|
b := elements{
|
||||||
|
Title: getMsgFromDB(sqldb, "title", "heb"),
|
||||||
|
Header: getMsgFromDB(sqldb, "header", "heb"),
|
||||||
|
Help: getMsgFromDB(sqldb, "help", "heb"),
|
||||||
|
Packagename: getMsgFromDB(sqldb, "packagename", "heb"),
|
||||||
|
Packageversion: getMsgFromDB(sqldb, "packageversion", "heb"),
|
||||||
|
Allow: getMsgFromDB(sqldb, "allow", "heb"),
|
||||||
|
Warning: getMsgFromDB(sqldb, "warning", "heb"),
|
||||||
|
Explain: getMsgFromDB(sqldb, "explain", "heb"),
|
||||||
|
}
|
||||||
|
templates, err := template.ParseFiles("html/master.html", "html/main.html")
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
err = templates.ExecuteTemplate(res, "master", &b)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
res.WriteHeader(http.StatusOK)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
func public() http.Handler {
|
||||||
|
return http.StripPrefix("/public/", http.FileServer(http.Dir("./public")))
|
||||||
|
}
|
||||||
|
func main() {
|
||||||
|
logfilename := "Logs/" + time.Now().Format("2006-01-02--15-04-05") + ".log"
|
||||||
|
file, err := os.OpenFile(logfilename, os.O_APPEND|os.O_CREATE, 0777)
|
||||||
|
if err != nil {
|
||||||
|
os.Exit(12)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.SetOutput(file)
|
||||||
|
db, err := sql.Open("sqlite", "file:progs.db")
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
mux.Handle("/public/", public())
|
||||||
|
mux.Handle("/", index(db))
|
||||||
|
addr := fmt.Sprintf(":%s", "12312")
|
||||||
|
server := http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
Handler: mux,
|
||||||
|
ReadTimeout: 15 * time.Second,
|
||||||
|
WriteTimeout: 15 * time.Second,
|
||||||
|
IdleTimeout: 15 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := server.ListenAndServe(); err != nil {
|
||||||
|
log.Fatalf("main: couldn't start simple server: %v\n", err)
|
||||||
|
}
|
||||||
|
lang := "heb"
|
||||||
|
|
||||||
|
log.Println(getMsgFromDB(db, "title", lang))
|
||||||
|
}
|
19
packages.go
Normal file
19
packages.go
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
type packages struct{
|
||||||
|
name string
|
||||||
|
version string
|
||||||
|
extra_command string
|
||||||
|
tag string
|
||||||
|
warning bool
|
||||||
|
}
|
||||||
|
type elements struct {
|
||||||
|
Title string
|
||||||
|
Header string
|
||||||
|
Help string
|
||||||
|
Packagename string
|
||||||
|
Packageversion string
|
||||||
|
Allow string
|
||||||
|
Warning string
|
||||||
|
Explain string
|
||||||
|
}
|
239
public/mod.css
Normal file
239
public/mod.css
Normal file
@@ -0,0 +1,239 @@
|
|||||||
|
@import url("https://fonts.googleapis.com/css2?family=Alef:wght@400;700&display=swap");
|
||||||
|
|
||||||
|
abbr {
|
||||||
|
border: none;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Alef";
|
||||||
|
padding-left: 10px;
|
||||||
|
margin: auto;
|
||||||
|
display: flex;
|
||||||
|
font-size: 14pt;
|
||||||
|
width: 75%;
|
||||||
|
background-color: #000000;
|
||||||
|
background: #000000;
|
||||||
|
color: #ffffff;
|
||||||
|
height: 100vh;
|
||||||
|
-webkit-background-size: cover;
|
||||||
|
-moz-background-size: cover;
|
||||||
|
-o-background-size: cover;
|
||||||
|
background-size: cover;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-content: flex-start;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
body.m{
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
.copyme::before {
|
||||||
|
content: "Click here to copy: ";
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.acopyme {
|
||||||
|
direction: ltr;
|
||||||
|
background: #6a568b;
|
||||||
|
color: #ffffff;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 15px;
|
||||||
|
/* margin-left: -10px; */
|
||||||
|
transition: background 0.3s ease;
|
||||||
|
padding: inherit;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.acopyme:hover {
|
||||||
|
background: #7e7391;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copyme {
|
||||||
|
direction: ltr;
|
||||||
|
background: #6a568b;
|
||||||
|
color: #ffffff;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 15px;
|
||||||
|
/* margin-left: -10px; */
|
||||||
|
transition: background 0.3s ease;
|
||||||
|
padding: inherit;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copyme:hover {
|
||||||
|
background: #7e7391;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: none;
|
||||||
|
background-color: inherit;
|
||||||
|
color: inherit;
|
||||||
|
padding-left: 5px;
|
||||||
|
background: inherit;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.r {
|
||||||
|
list-style-type: none;
|
||||||
|
background-color: inherit;
|
||||||
|
color: inherit;
|
||||||
|
padding-right: 5px;
|
||||||
|
margin-left: -20px;
|
||||||
|
background: inherit;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
background-color: inherit;
|
||||||
|
color: inherit;
|
||||||
|
background: inherit;
|
||||||
|
padding: inherit;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
li:hover {
|
||||||
|
background: #1a1a1a;
|
||||||
|
border-color: #7e7391;
|
||||||
|
border-radius: 15px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
display: block;
|
||||||
|
background-color: inherit;
|
||||||
|
padding: inherit;
|
||||||
|
width: inherit;
|
||||||
|
color: inherit;
|
||||||
|
background: inherit;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
th,
|
||||||
|
td {
|
||||||
|
padding-right: 40px;
|
||||||
|
/* Adjust as needed */
|
||||||
|
text-align: left;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
overflow: hidden;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column {
|
||||||
|
float: left;
|
||||||
|
margin: 20px;
|
||||||
|
padding-bottom: 100%;
|
||||||
|
margin-bottom: -100%;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
width: 100%;
|
||||||
|
margin: auto;
|
||||||
|
padding: inherit;
|
||||||
|
justify-content: inherit;
|
||||||
|
align-items: inherit;
|
||||||
|
align-content: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
margin-bottom: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hiddencopy {
|
||||||
|
background: #6a568b;
|
||||||
|
color: #ffffff;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 15px;
|
||||||
|
margin-left: 10px;
|
||||||
|
transition: background 0.3s ease;
|
||||||
|
padding: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-size: 18pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.clicked:hover {
|
||||||
|
border-color: #3d3d3d;
|
||||||
|
background: #635b72;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
direction: ltr;
|
||||||
|
background: #6a568b;
|
||||||
|
background-color: #6a568b;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 10px;
|
||||||
|
height: inherit;
|
||||||
|
width: 15%;
|
||||||
|
/* margin-left: -10px; */
|
||||||
|
transition: background 0.3s ease;
|
||||||
|
padding: inherit;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
margin: auto;
|
||||||
|
width: 75%;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="file"] {
|
||||||
|
background-color: #6a568b;
|
||||||
|
border-color: #332150;
|
||||||
|
color: #ffffff;
|
||||||
|
width: 30%;
|
||||||
|
border-radius: 15px;
|
||||||
|
padding: auto;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::placeholder {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang {
|
||||||
|
position: fixed;
|
||||||
|
float: inline-start;
|
||||||
|
flex: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#totalus {
|
||||||
|
background-color: #6a568b;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
118
public/script.js
Normal file
118
public/script.js
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
function copyValue(elementId) {
|
||||||
|
/* Get the text field */
|
||||||
|
var copyText = document.getElementById(elementId).innerText;
|
||||||
|
|
||||||
|
/* Create a temporary input field */
|
||||||
|
var tempInput = document.createElement("input");
|
||||||
|
tempInput.value = copyText;
|
||||||
|
document.body.appendChild(tempInput);
|
||||||
|
|
||||||
|
/* Select the text field */
|
||||||
|
tempInput.select();
|
||||||
|
tempInput.setSelectionRange(0, 99999); /* For mobile devices */
|
||||||
|
console.log(copyText);
|
||||||
|
/* Copy the text inside the text field */
|
||||||
|
navigator.clipboard.writeText(copyText);
|
||||||
|
|
||||||
|
/* Remove the temporary input field */
|
||||||
|
document.body.removeChild(tempInput);
|
||||||
|
|
||||||
|
/* Show a toast message */
|
||||||
|
var toast = document.createElement("div");
|
||||||
|
toast.innerText = "Copied to clipboard!";
|
||||||
|
toast.style.position = "fixed";
|
||||||
|
toast.style.bottom = "20px";
|
||||||
|
toast.style.left = "50%";
|
||||||
|
toast.style.transform = "translateX(-50%)";
|
||||||
|
toast.style.background = "#673AB7";
|
||||||
|
toast.style.color = "#ffffff";
|
||||||
|
toast.style.padding = "10px";
|
||||||
|
toast.style.borderRadius = "5px";
|
||||||
|
document.body.appendChild(toast);
|
||||||
|
/* Remove the toast message after 3 seconds */
|
||||||
|
setTimeout(function () {
|
||||||
|
document.body.removeChild(toast);
|
||||||
|
}, 3000);
|
||||||
|
}
|
||||||
|
function showAndHide(elementId,liId){
|
||||||
|
let element = document.getElementById(elementId);
|
||||||
|
let li = document.getElementById(liId);
|
||||||
|
element.classList.contains('hiddencopy')? element.classList.remove('hiddencopy'):element.classList.add('hiddencopy');
|
||||||
|
element.classList.contains('hiddencopy')? li.classList.remove('clicked'):li.classList.add('clicked');
|
||||||
|
}
|
||||||
|
function replaceHebrew(elementId, stff){
|
||||||
|
let element = document.getElementById(elementId);
|
||||||
|
if (stff == 'Administrative staff'){
|
||||||
|
element.innerText = "מותר לשימוש בידי צוות מנהלי";
|
||||||
|
}
|
||||||
|
else if(stff == 'Students')
|
||||||
|
{
|
||||||
|
element.innerText = "מותר לשימוש בידי סטודנטים";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function insertWarning(elementId, before, lang="en"){
|
||||||
|
if (elementId == true){
|
||||||
|
if(lang == "he"){
|
||||||
|
console.log('fuck');
|
||||||
|
let elem = document.createElement("div");
|
||||||
|
elem.id = "התראה";
|
||||||
|
elem.innerText = "הבהרה: המסך החכם של מיקרוסופט ימנע את ריצת התוכנה. יש ללחוץ על פרטים נוספים -> אפשר";
|
||||||
|
elem.style.color="#ffffff";
|
||||||
|
let nodebefore = document.getElementById(before);
|
||||||
|
nodebefore.insertBefore(elem, nodebefore.children[7])
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
console.log('fuck');
|
||||||
|
let elem = document.createElement("div");
|
||||||
|
elem.id = "Warning";
|
||||||
|
elem.innerText = "Warning: Has Microsoft SmartScreen blue window of block from running. Press more details -> Allow Running";
|
||||||
|
elem.style.color="#ffffff";
|
||||||
|
let nodebefore = document.getElementById(before);
|
||||||
|
nodebefore.insertBefore(elem, nodebefore.children[7])
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function downloadValue(elementId, filename){
|
||||||
|
let text = document.getElementById(elementId).innerText;
|
||||||
|
var element = document.createElement('a');
|
||||||
|
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
|
||||||
|
element.setAttribute('download', filename);
|
||||||
|
|
||||||
|
element.style.display = 'none';
|
||||||
|
document.body.appendChild(element);
|
||||||
|
|
||||||
|
element.click();
|
||||||
|
|
||||||
|
document.body.removeChild(element);
|
||||||
|
|
||||||
|
}
|
||||||
|
function scriptPackage(rowid, extracommand, line){
|
||||||
|
let text = `winget install ${rowid} -s huji`;
|
||||||
|
console.log(extracommand)
|
||||||
|
let fub = extracommand.indexOf(' &&')
|
||||||
|
|
||||||
|
console.log(`${rowid}, ${fub}`)
|
||||||
|
console.log(`${rowid}, ${extracommand.length < 2}`)
|
||||||
|
try{
|
||||||
|
console.log(text)
|
||||||
|
if(fub == 0){
|
||||||
|
text += extracommand;
|
||||||
|
}
|
||||||
|
else if((extracommand.length > 2)){
|
||||||
|
text = extracommand + " && " + text;
|
||||||
|
}
|
||||||
|
else if ((fub == -1))
|
||||||
|
{
|
||||||
|
text = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch{
|
||||||
|
text = text;
|
||||||
|
}
|
||||||
|
document.getElementById(`id-${line}`).innerHTML = text;
|
||||||
|
}
|
||||||
|
function convertHtml(dt){
|
||||||
|
return dt.replace("")
|
||||||
|
}
|
Reference in New Issue
Block a user