now filling the form with the fucking data. currently, unidentified
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ progs.db
|
|||||||
tmpdir/
|
tmpdir/
|
||||||
.vscode/
|
.vscode/
|
||||||
data/
|
data/
|
||||||
|
Data/
|
10
html/lastob.json
Normal file
10
html/lastob.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{{define "main"}}
|
||||||
|
{
|
||||||
|
"Identifier" :"{{.Identifier}}",
|
||||||
|
"Version" :"{{.Version}}",
|
||||||
|
"Type" : "{{.Type}}",
|
||||||
|
"Location": "{{.Location}}",
|
||||||
|
"Checksum": "{{.Checksum}}",
|
||||||
|
"Url" : "{{.Url}}"
|
||||||
|
}
|
||||||
|
{{end}}
|
@@ -11,29 +11,29 @@
|
|||||||
</form>
|
</form>
|
||||||
<button type="button" onclick="showContainer('form-container')" >fubarus</button>
|
<button type="button" onclick="showContainer('form-container')" >fubarus</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-container" oncontextmenu="showContainer('form-container')">
|
<div class="form-container" oncontextmenu="showContainer('form-container')" onclick="updateForm('/pkg')">
|
||||||
<form>
|
<form>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="PackageIdentifier">PackageIdentifier</label>
|
<label for="PackageIdentifier">PackageIdentifier</label>
|
||||||
<input type="text" id="PackageIdentifier" name="PackageIdentifier">
|
<input type="text" id="PackageIdentifier" name="PackageIdentifier" onclick="updateForm('/pkg','PackageIdentifier')">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="PackageVersion">PackageVersion</label>
|
<label for="PackageVersion">PackageVersion</label>
|
||||||
<input type="text" id="PackageVersion" name="PackageVersion">
|
<input type="text" id="PackageVersion" name="PackageVersion" onclick="updateForm('/pkg','PackageVersion')">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="InstallerType">InstallerType</label>
|
<label for="InstallerType">InstallerType</label>
|
||||||
<input type="text" id="InstallerType" name="InstallerType">
|
<input type="text" id="InstallerType" name="InstallerType" onclick="updateForm('/pkg','InstallerType')">
|
||||||
</div>
|
</div>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Installers</legend>
|
<legend>Installers</legend>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="InstallerUrl">InstallerUrl</label>
|
<label for="InstallerUrl">InstallerUrl</label>
|
||||||
<input type="url" id="InstallerUrl" name="InstallerUrl">
|
<input type="url" id="InstallerUrl" name="InstallerUrl" onclick="updateForm('/pkg','InstallerUrl')">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="InstallerSha256">InstallerSha256</label>
|
<label for="InstallerSha256">InstallerSha256</label>
|
||||||
<input type="text" id="InstallerSha256" name="InstallerSha256">
|
<input type="text" id="InstallerSha256" name="InstallerSha256" onclick="updateForm('/pkg','InstallerSha256')">
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
76
main.go
76
main.go
@@ -7,7 +7,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -15,22 +15,24 @@ import (
|
|||||||
|
|
||||||
_ "modernc.org/sqlite" // Importing SQLite driver for database interaction.
|
_ "modernc.org/sqlite" // Importing SQLite driver for database interaction.
|
||||||
)
|
)
|
||||||
|
var c chan bool
|
||||||
// readHtml function reads an HTML file and applies a CSS template to it before sending it to the client.
|
// readHtml function reads an HTML file and applies a CSS template to it before sending it to the client.
|
||||||
func readHtml(res http.ResponseWriter, req *http.Request) {
|
func readHtml(res http.ResponseWriter, _ *http.Request) {
|
||||||
g := template.CSS("./html/public/mod.css") // Define the CSS path.
|
g := template.CSS("./html/public/mod.css") // Define the CSS path.
|
||||||
f, err := template.ParseFiles("./html/wsb.html") // Parse the HTML file.
|
f, err := template.ParseFiles("./html/wsb.html") // Parse the HTML file.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err) // Log any errors encountered.
|
slog.Error(err.Error())
|
||||||
|
// Log any errors encountered.
|
||||||
}
|
}
|
||||||
err = f.Execute(res, g) // Execute the template with the CSS and send it to the client.
|
err = f.Execute(res, g) // Execute the template with the CSS and send it to the client.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err) // Log any errors encountered.
|
slog.Error(err.Error())
|
||||||
|
// Log any errors encountered.
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// simpRequestResp sends a simple response to the client.
|
// simpRequestResp sends a simple response to the client.
|
||||||
func simpRequestResp(res http.ResponseWriter, req *http.Request) {
|
func simpRequestResp(res http.ResponseWriter, _ *http.Request) {
|
||||||
fmt.Fprint(res, "Hello, M'Lord", 153*4, " I'm here to serveè") // Print a formatted string to the client.
|
fmt.Fprint(res, "Hello, M'Lord", 153*4, " I'm here to serveè") // Print a formatted string to the client.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,13 +60,13 @@ func queryPacks(sqldb *sql.DB, element *elements) []packages {
|
|||||||
defer res.Close() // Ensure the result set is closed after the function returns.
|
defer res.Close() // Ensure the result set is closed after the function returns.
|
||||||
err = res.Err() // Check for any errors during query execution.
|
err = res.Err() // Check for any errors during query execution.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panicln(err) // Log and panic on any errors.
|
slog.Error(err.Error()) // Log and panic on any errors.
|
||||||
}
|
}
|
||||||
for res.Next() {
|
for res.Next() {
|
||||||
npkg := packages{} // Create a new package instance.
|
npkg := packages{} // Create a new package instance.
|
||||||
err := res.Scan(&npkg.Id, &npkg.Name, &npkg.Version, &npkg.ExtraCommand, &npkg.Tag, &npkg.Warning) // Scan the result into the package instance.
|
err := res.Scan(&npkg.Id, &npkg.Name, &npkg.Version, &npkg.ExtraCommand, &npkg.Tag, &npkg.Warning) // Scan the result into the package instance.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err) // Log and exit on any errors.
|
slog.Error(err.Error()) // Log and exit on any errors.
|
||||||
}
|
}
|
||||||
npkg.Element = element // Associate the element with the package.
|
npkg.Element = element // Associate the element with the package.
|
||||||
pkgs = append(pkgs, npkg) // Append the package to the slice.
|
pkgs = append(pkgs, npkg) // Append the package to the slice.
|
||||||
@@ -82,7 +84,8 @@ func queryDatabase(sqldb *sql.DB, queryRow string) []string {
|
|||||||
var values []string
|
var values []string
|
||||||
err := res.Scan(&values)
|
err := res.Scan(&values)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
|
|
||||||
}
|
}
|
||||||
return values
|
return values
|
||||||
}
|
}
|
||||||
@@ -118,7 +121,7 @@ func searchDownloads(sqldb *sql.DB, table string, columns ...string) []DownloadE
|
|||||||
defer runquery.Close()
|
defer runquery.Close()
|
||||||
err = runquery.Err()
|
err = runquery.Err()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
var elems []DownloadElements
|
var elems []DownloadElements
|
||||||
var e DownloadElements
|
var e DownloadElements
|
||||||
@@ -163,11 +166,13 @@ func stats(sqldb *sql.DB, lang string) http.Handler {
|
|||||||
}
|
}
|
||||||
templates, err := template.ParseFiles("html/master.html", "html/statsitics.html")
|
templates, err := template.ParseFiles("html/master.html", "html/statsitics.html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
|
|
||||||
}
|
}
|
||||||
err = templates.ExecuteTemplate(res, "master", Counter)
|
err = templates.ExecuteTemplate(res, "master", Counter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
|
|
||||||
}
|
}
|
||||||
res.WriteHeader(http.StatusOK)
|
res.WriteHeader(http.StatusOK)
|
||||||
})
|
})
|
||||||
@@ -181,20 +186,21 @@ func getPkgIdFromDB(sqldb *sql.DB) []string {
|
|||||||
defer query.Close()
|
defer query.Close()
|
||||||
err = query.Err()
|
err = query.Err()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
var pkgs []string
|
var pkgs []string
|
||||||
var tmpstr string
|
var tmpstr string
|
||||||
for query.Next() {
|
for query.Next() {
|
||||||
err = query.Scan(&tmpstr)
|
err = query.Scan(&tmpstr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
|
|
||||||
}
|
}
|
||||||
pkgs = append(pkgs, tmpstr)
|
pkgs = append(pkgs, tmpstr)
|
||||||
}
|
}
|
||||||
// query.Scan(&pkgs)
|
// query.Scan(&pkgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
return pkgs
|
return pkgs
|
||||||
}
|
}
|
||||||
@@ -238,11 +244,11 @@ func uploadFileForServer(sqldb *sql.DB, lang string) http.Handler{
|
|||||||
}
|
}
|
||||||
templates, err := template.ParseFiles("html/master.html", "html/uploadfile.html")
|
templates, err := template.ParseFiles("html/master.html", "html/uploadfile.html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
err = templates.ExecuteTemplate(res, "master", data)
|
err = templates.ExecuteTemplate(res, "master", data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
// upload(res, req)
|
// upload(res, req)
|
||||||
res.WriteHeader(http.StatusOK)
|
res.WriteHeader(http.StatusOK)
|
||||||
@@ -261,7 +267,7 @@ func upload() http.Handler {
|
|||||||
fn,_:=os.OpenFile("Data/"+filename, os.O_WRONLY|os.O_CREATE, 0666)
|
fn,_:=os.OpenFile("Data/"+filename, os.O_WRONLY|os.O_CREATE, 0666)
|
||||||
defer fn.Close()
|
defer fn.Close()
|
||||||
fn.Write(fileBytes)
|
fn.Write(fileBytes)
|
||||||
log.Println(getDataFromFile("Data/"+filename))
|
slog.Info(fmt.Sprint(getDataFromFile("Data/"+filename)))
|
||||||
})}
|
})}
|
||||||
|
|
||||||
// index creates an HTTP handler that serves the main page with data from the database.
|
// index creates an HTTP handler that serves the main page with data from the database.
|
||||||
@@ -294,11 +300,11 @@ func index(sqldb *sql.DB, lang string) http.Handler {
|
|||||||
templates, err := template.ParseFiles("html/master.html", "html/main.html")
|
templates, err := template.ParseFiles("html/master.html", "html/main.html")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
err = templates.ExecuteTemplate(res, "master", data)
|
err = templates.ExecuteTemplate(res, "master", data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
slog.Error(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
res.WriteHeader(http.StatusOK)
|
res.WriteHeader(http.StatusOK)
|
||||||
@@ -315,13 +321,30 @@ func public() http.Handler {
|
|||||||
|
|
||||||
// main initializes the application, sets up logging, database connection, HTTP routing, and starts the server.
|
// main initializes the application, sets up logging, database connection, HTTP routing, and starts the server.
|
||||||
func main() {
|
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)
|
// Check if the directory exists
|
||||||
|
if _, err := os.Stat("Logs/"); os.IsNotExist(err) {
|
||||||
|
// Create your directory if it does not exist
|
||||||
|
err = os.Mkdir("Logs/", 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Exit(12)
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handlerOpts := &slog.HandlerOptions{
|
||||||
|
Level: slog.LevelDebug,
|
||||||
|
}
|
||||||
|
logfilename := "Logs/" + time.Now().Format("2006-01-02--15-04-05") + ".log"
|
||||||
|
file, err := os.OpenFile(logfilename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0777)
|
||||||
|
defer file.Close()
|
||||||
|
log:=slog.New(slog.NewTextHandler(file,handlerOpts ))
|
||||||
|
slog.SetDefault(log)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.SetOutput(file)
|
|
||||||
|
// Write a log entry
|
||||||
|
slog.Info("This is a test log entry")
|
||||||
db, _ := sql.Open("sqlite", "file:progs.db")
|
db, _ := sql.Open("sqlite", "file:progs.db")
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
mux.Handle("/public/", public())
|
mux.Handle("/public/", public())
|
||||||
@@ -330,6 +353,7 @@ func main() {
|
|||||||
mux.Handle("/stats", stats(db,"eng"))
|
mux.Handle("/stats", stats(db,"eng"))
|
||||||
mux.Handle("/up", uploadFileForServer(db,"eng"))
|
mux.Handle("/up", uploadFileForServer(db,"eng"))
|
||||||
mux.Handle("/upload",upload())
|
mux.Handle("/upload",upload())
|
||||||
|
mux.Handle("/pkg",getJson(db))
|
||||||
addr := fmt.Sprintf(":%s", "12312")
|
addr := fmt.Sprintf(":%s", "12312")
|
||||||
server := http.Server{
|
server := http.Server{
|
||||||
Addr: addr,
|
Addr: addr,
|
||||||
@@ -340,9 +364,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := server.ListenAndServe(); err != nil {
|
if err := server.ListenAndServe(); err != nil {
|
||||||
log.Fatalf("main: couldn't start simple server: %v\n", err)
|
log.Error("main: couldn't start simple server: %v\n", err)
|
||||||
}
|
}
|
||||||
lang := "heb"
|
lang := "heb"
|
||||||
|
|
||||||
log.Println(getMsgFromDB(db, "title", lang))
|
log.Info(getMsgFromDB(db, "title", lang))
|
||||||
}
|
}
|
||||||
|
179
packages.go
179
packages.go
@@ -1,15 +1,32 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"encoding/hex"
|
||||||
"regexp"
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"html/template"
|
||||||
|
|
||||||
|
_ "modernc.org/sqlite"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type jsonStruct struct {
|
||||||
|
Identifier string
|
||||||
|
Version string
|
||||||
|
Type string
|
||||||
|
Location string
|
||||||
|
Checksum string
|
||||||
|
Url string
|
||||||
|
}
|
||||||
|
|
||||||
// packages struct represents a package with its details.
|
// packages struct represents a package with its details.
|
||||||
type packages struct {
|
type packages struct {
|
||||||
Id string
|
Id string
|
||||||
@@ -66,8 +83,8 @@ type DownloadElements struct {
|
|||||||
// Printer struct is an empty struct. Its purpose is not clear from the provided code.
|
// Printer struct is an empty struct. Its purpose is not clear from the provided code.
|
||||||
type Printer struct{}
|
type Printer struct{}
|
||||||
|
|
||||||
func getDataFromFile(path string) map[string]string {
|
func getDataFromFile(path string) jsonStruct {
|
||||||
log.Println(regexp.MustCompile(`\.\w+$`).FindString(path))
|
slog.Debug(regexp.MustCompile(`\.\w+$`).FindString(path))
|
||||||
switch extention := regexp.MustCompile(`\.\w+$`).FindString(path); extention {
|
switch extention := regexp.MustCompile(`\.\w+$`).FindString(path); extention {
|
||||||
case ".exe":
|
case ".exe":
|
||||||
return getParamsFromExif(path)
|
return getParamsFromExif(path)
|
||||||
@@ -75,32 +92,35 @@ func getDataFromFile(path string) map[string]string {
|
|||||||
case ".msi":
|
case ".msi":
|
||||||
return getParamsFromMsi(path)
|
return getParamsFromMsi(path)
|
||||||
}
|
}
|
||||||
return make(map[string]string)
|
return jsonStruct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getParamsFromExif extracts EXIF parameters from a file at the given path using the exiftool command.
|
// getParamsFromExif extracts EXIF parameters from a file at the given path using the exiftool command.
|
||||||
// It returns a map where the keys are the EXIF parameter names and the values are the corresponding EXIF parameter values.
|
// It returns a map where the keys are the EXIF parameter names and the values are the corresponding EXIF parameter values.
|
||||||
func getParamsFromExif(path string) map[string]string {
|
func getParamsFromExif(path string) jsonStruct {
|
||||||
exiftool := os.Getenv("exiftool")
|
exiftool := os.Getenv("exiftool")
|
||||||
e, _ := exec.Command(exiftool, "-f", path).Output()
|
e, _ := exec.Command(exiftool, "-f", path).Output()
|
||||||
return splitData(e)
|
data := splitData(e)
|
||||||
|
data["Extention"] = data["File Type Extension"]
|
||||||
|
data["Path"] = path
|
||||||
|
return createObject(data)
|
||||||
}
|
}
|
||||||
func splitData(commandOutput []byte) map[string]string {
|
func splitData(commandOutput []byte) map[string]string {
|
||||||
tags := make(map[string]string)
|
tags := make(map[string]string)
|
||||||
spliter := regexp.MustCompile(`\r?\n`)
|
spliter := regexp.MustCompile(`\r?\n`)
|
||||||
crop := spliter.Split(string(commandOutput), -1)
|
crop := spliter.Split(string(commandOutput), -1)
|
||||||
head := regexp.MustCompile(`\s+(:\s)?`)
|
head := regexp.MustCompile(`\t|(\s+:\s?)`)
|
||||||
for _, c := range crop {
|
for _, c := range crop {
|
||||||
if len(c) > 1 {
|
if len(c) > 1 {
|
||||||
data := head.Split(c, -1)
|
data := head.Split(c, -1)
|
||||||
log.Println("My Raw Data: ", c)
|
slog.Debug("My Raw Data: ", c)
|
||||||
tags[data[0]] = data[1]
|
tags[data[0]] = data[1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.Println(tags)
|
slog.Debug(fmt.Sprint(tags))
|
||||||
return tags
|
return tags
|
||||||
}
|
}
|
||||||
func getParamsFromMsi(path string) map[string]string {
|
func getParamsFromMsi(path string) jsonStruct {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
|
|
||||||
// orca :=os.Getenv("orca")
|
// orca :=os.Getenv("orca")
|
||||||
@@ -113,8 +133,143 @@ func getParamsFromMsi(path string) map[string]string {
|
|||||||
} else {
|
} else {
|
||||||
msiinfo := os.Getenv("msiinfo")
|
msiinfo := os.Getenv("msiinfo")
|
||||||
e, _ := exec.Command(msiinfo, "export", path, "Property").Output()
|
e, _ := exec.Command(msiinfo, "export", path, "Property").Output()
|
||||||
return splitData(e)
|
data := splitData(e)
|
||||||
|
data["Extention"] = "msi"
|
||||||
|
data["Path"] = path
|
||||||
|
return createObject(data)
|
||||||
}
|
}
|
||||||
return make(map[string]string)
|
return jsonStruct{}
|
||||||
|
}
|
||||||
|
func getVendor(data map[string]string) string {
|
||||||
|
for key, val := range data {
|
||||||
|
switch key {
|
||||||
|
case "Author":
|
||||||
|
return strings.ToLower(strings.Replace(val," ","",-1))
|
||||||
|
|
||||||
|
case "Company Name":
|
||||||
|
return strings.ToLower(strings.Replace(val," ","",-1))
|
||||||
|
|
||||||
|
case "Publisher":
|
||||||
|
return strings.ToLower(strings.Replace(val," ","",-1))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
func getProgram(data map[string]string) string {
|
||||||
|
for key, val := range data {
|
||||||
|
switch key {
|
||||||
|
case "Title":
|
||||||
|
return strings.ToLower(strings.Replace(val," ","",-1))
|
||||||
|
|
||||||
|
case "Product Name":
|
||||||
|
return strings.ToLower(strings.Replace(val," ","",-1))
|
||||||
|
|
||||||
|
case "Subject":
|
||||||
|
return strings.ToLower(strings.Replace(val," ","",-1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
func getVersion(data map[string]string) string {
|
||||||
|
replacer:=regexp.MustCompile(`[, ]+`)
|
||||||
|
for key, val := range data {
|
||||||
|
switch key {
|
||||||
|
case "Version":
|
||||||
|
return replacer.ReplaceAllString(val,".")
|
||||||
|
case "Product Version":
|
||||||
|
return replacer.ReplaceAllString(val,".")
|
||||||
|
case "ProductVersion":
|
||||||
|
return replacer.ReplaceAllString(val,".")
|
||||||
|
case "File Version":
|
||||||
|
return replacer.ReplaceAllString(val,".")
|
||||||
|
case "FileVersion":
|
||||||
|
return replacer.ReplaceAllString(val,".")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
func detectProblems(data map[string]string) bool {
|
||||||
|
exe, err := data["Extention"]
|
||||||
|
mime, _ := data["MIME Type"]
|
||||||
|
if !err || (exe == "exe" && !(mime == "application/octet-stream")) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (exe != "msi" && exe != "exe" && exe != "zip") {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
func getInstallerType(data map[string]string) string {
|
||||||
|
for _, val := range data {
|
||||||
|
if val == "msi" {
|
||||||
|
return "msi"
|
||||||
|
}
|
||||||
|
if strings.Contains(strings.ToLower(val), "nullsoft") {
|
||||||
|
return "nullsoft"
|
||||||
|
}
|
||||||
|
if strings.Contains(strings.ToLower(val), "inno") {
|
||||||
|
return "inno"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "exe"
|
||||||
|
}
|
||||||
|
func moveToNewLocationAndName(data map[string]string) string {
|
||||||
|
newLoc := os.Getenv("installationDirectory") + "/"
|
||||||
|
newFileLoc := getVendor(data) + "." + getProgram(data) + ".v."
|
||||||
|
newFileLoc += getVersion(data) + "."
|
||||||
|
newFileLoc += data["Extention"]
|
||||||
|
newLoc += newFileLoc
|
||||||
|
file, _ := os.OpenFile(newLoc, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
|
||||||
|
defer file.Close()
|
||||||
|
oldFile, _ := os.ReadFile(data["Path"])
|
||||||
|
file.Write(oldFile)
|
||||||
|
return newFileLoc
|
||||||
|
}
|
||||||
|
func createObject(object map[string]string) jsonStruct {
|
||||||
|
if detectProblems(object) {
|
||||||
|
prop := jsonStruct{
|
||||||
|
Identifier: getVendor(object) + "." + getProgram(object),
|
||||||
|
Version: getVersion(object),
|
||||||
|
Type: getInstallerType(object),
|
||||||
|
}
|
||||||
|
|
||||||
|
loc, _ := os.ReadFile(object["Directory"] + "/" + object["File Name"])
|
||||||
|
chksum:=sha256.Sum256(loc)
|
||||||
|
prop.Checksum = hex.EncodeToString(chksum[:])
|
||||||
|
lc := moveToNewLocationAndName(object)
|
||||||
|
prop.Url = os.Getenv("uri") + lc
|
||||||
|
prop.Location = os.Getenv("installationDirectory") + "/" + lc
|
||||||
|
newJson(prop)
|
||||||
|
return prop
|
||||||
|
}
|
||||||
|
return jsonStruct{}
|
||||||
|
}
|
||||||
|
func newJson(object jsonStruct) {
|
||||||
|
|
||||||
|
sqldb, err := sql.Open("sqlite", "file:progs.db")
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(err.Error())
|
||||||
|
}
|
||||||
|
sqldb.Exec("INSERT OR IGNORE INTO newapps(identifier, version, type, location, checksum, url) values (?,?,?,?,?,?)", object.Identifier, object.Version, object.Type, object.Location, object.Checksum, object.Url)
|
||||||
|
|
||||||
|
}
|
||||||
|
func getJson(sqldb *sql.DB) http.Handler {
|
||||||
|
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
||||||
|
quer := generateSQL("newapps", []string{"identifier", "version", "type", "location", "checksum", "url"}) + " ORDER BY ROWID DESC LIMIT 1"
|
||||||
|
data := sqldb.QueryRow(quer)
|
||||||
|
jsonelement := jsonStruct{}
|
||||||
|
err := data.Scan(&jsonelement.Identifier, &jsonelement.Version, &jsonelement.Type, &jsonelement.Location, &jsonelement.Checksum, &jsonelement.Url)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(err.Error())
|
||||||
|
}
|
||||||
|
temp,err:=template.ParseFiles("html/lastob.json")
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(err.Error())
|
||||||
|
}
|
||||||
|
err=temp.ExecuteTemplate(res, "main", jsonelement)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(err.Error())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -121,3 +121,45 @@ function showContainer(className){
|
|||||||
classShow = document.getElementsByClassName(className)[0];
|
classShow = document.getElementsByClassName(className)[0];
|
||||||
classShow.style.display = classShow.style.display=="flex"?"none":"flex";
|
classShow.style.display = classShow.style.display=="flex"?"none":"flex";
|
||||||
}
|
}
|
||||||
|
function runme(data){
|
||||||
|
alert(data)
|
||||||
|
}
|
||||||
|
async function fetchContent(uri) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(uri);
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
|
}
|
||||||
|
const content = await response.text();
|
||||||
|
return content;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`There was a problem with the fetch operation: ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function updateForm(uri, eid){
|
||||||
|
fetchContent(uri).then(content => {
|
||||||
|
switch(eid){
|
||||||
|
case "PackageIdentifier":{
|
||||||
|
document.getElementById("PackageIdentifier").value=content.Identifier
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case "PackageVersion":{
|
||||||
|
document.getElementById("PackageVersion").value=content.Version
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case "InstallerType":{
|
||||||
|
document.getElementById("InstallerType").value=content.Type
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case "InstallerUrl":{
|
||||||
|
document.getElementById("InstallerUrl").value=content.Url
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case "InstallerSha256":{
|
||||||
|
document.getElementById("InstallerSha256").value=content.Checksum
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(content)
|
||||||
|
})
|
||||||
|
}
|
Reference in New Issue
Block a user