Installer-Paket System: Backend speichert/served ZIP, Frontend Upload+Download, install.sh auto-download von Backend statt Git
This commit is contained in:
@@ -191,6 +191,17 @@ func (d *Database) migrate() error {
|
||||
last_used TIMESTAMPTZ
|
||||
)`)
|
||||
|
||||
// Installer-Pakete (install.sh + Plugin als ZIP pro Plattform)
|
||||
d.db.Exec(`CREATE TABLE IF NOT EXISTS installers (
|
||||
id SERIAL PRIMARY KEY,
|
||||
platform TEXT NOT NULL UNIQUE,
|
||||
filename TEXT NOT NULL,
|
||||
data BYTEA NOT NULL,
|
||||
sha256 TEXT NOT NULL,
|
||||
size INTEGER NOT NULL,
|
||||
uploaded_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
)`)
|
||||
|
||||
// Retention Policy (90 Tage)
|
||||
d.setupRetention()
|
||||
|
||||
@@ -604,6 +615,57 @@ func (d *Database) GetAllFirmwareInfo() ([]map[string]interface{}, error) {
|
||||
return results, nil
|
||||
}
|
||||
|
||||
// --- Installer ---
|
||||
|
||||
func (d *Database) SaveInstaller(platform, filename, sha256hash string, data []byte) error {
|
||||
_, err := d.db.Exec(`
|
||||
INSERT INTO installers (platform, filename, data, sha256, size, uploaded_at)
|
||||
VALUES ($1, $2, $3, $4, $5, NOW())
|
||||
ON CONFLICT (platform) DO UPDATE SET filename=$2, data=$3, sha256=$4, size=$5, uploaded_at=NOW()
|
||||
`, platform, filename, data, sha256hash, len(data))
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Database) GetInstaller(platform string) (string, string, []byte, error) {
|
||||
var filename, sha256hash string
|
||||
var data []byte
|
||||
err := d.db.QueryRow("SELECT filename, sha256, data FROM installers WHERE platform = $1", platform).Scan(&filename, &sha256hash, &data)
|
||||
return filename, sha256hash, data, err
|
||||
}
|
||||
|
||||
func (d *Database) GetInstallerInfo(platform string) (string, string, int, string, error) {
|
||||
var filename, sha256hash string
|
||||
var size int
|
||||
var uploadedAt time.Time
|
||||
err := d.db.QueryRow("SELECT filename, sha256, size, uploaded_at FROM installers WHERE platform = $1", platform).Scan(&filename, &sha256hash, &size, &uploadedAt)
|
||||
return filename, sha256hash, size, uploadedAt.Format(time.RFC3339), err
|
||||
}
|
||||
|
||||
func (d *Database) GetAllInstallerInfo() ([]map[string]interface{}, error) {
|
||||
rows, err := d.db.Query("SELECT platform, filename, sha256, size, uploaded_at FROM installers ORDER BY platform")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var results []map[string]interface{}
|
||||
for rows.Next() {
|
||||
var platform, filename, sha256hash string
|
||||
var size int
|
||||
var uploadedAt time.Time
|
||||
if err := rows.Scan(&platform, &filename, &sha256hash, &size, &uploadedAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, map[string]interface{}{
|
||||
"platform": platform,
|
||||
"filename": filename,
|
||||
"sha256": sha256hash,
|
||||
"size": size,
|
||||
"uploaded_at": uploadedAt,
|
||||
})
|
||||
}
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (d *Database) DeleteAgent(id string) (bool, error) {
|
||||
res, err := d.db.Exec("DELETE FROM agents WHERE id = $1", id)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user