From 29ac366916a84f18af42a894b02b068735df1866 Mon Sep 17 00:00:00 2001 From: kirby Date: Fri, 9 Aug 2024 15:31:27 +0200 Subject: [PATCH] Adding create/disable/delete packages --- Database/os.go | 1 - Database/package.go | 77 +++++++++++++++++++++++++++++++++++++++++++++ Database/server.go | 1 - Http/package.go | 75 +++++++++++++++++++++++++++++++++++++++++++ main.go | 3 ++ 5 files changed, 155 insertions(+), 2 deletions(-) diff --git a/Database/os.go b/Database/os.go index d108098..f8baefe 100644 --- a/Database/os.go +++ b/Database/os.go @@ -88,7 +88,6 @@ func checkIfOsExists(os OS, db *sql.DB) bool { row := db.QueryRow("Select distribution, version from dashboard_os where distribution = ? and version = ?", os.Distribution, os.Version) err := row.Scan(&os.Distribution, &os.Version) if !errors.Is(err, sql.ErrNoRows) { - log.Println("OS exists") return true } return false diff --git a/Database/package.go b/Database/package.go index 354667e..f34694e 100644 --- a/Database/package.go +++ b/Database/package.go @@ -43,3 +43,80 @@ func GetPackagebyID(db *sql.DB, id int64) (Package, error) { } return pkg, nil } + +func checkIfPackageExists(pkg Package, db *sql.DB) bool { + row := db.QueryRow("Select name from dashboard_package where name = ?", pkg.Name) + err := row.Scan(&pkg.Name) + if !errors.Is(err, sql.ErrNoRows) { + return true + } + return false +} + +func CreatePackage(pkg Package, db *sql.DB) error { + if checkIfPackageExists(pkg, db) { + /* If package exists but is not active we activate it */ + row := db.QueryRow("Select name, active from dashboard_package where name = ? and active = 1", pkg.Name) + err := row.Scan(&pkg.Name, &pkg.Active) + if errors.Is(err, sql.ErrNoRows) { + q, err := db.Prepare("UPDATE dashboard_package set active = 1 where name = ?") + if err != nil { + log.Println("Error creating query", err) + } + _, err = q.Exec(pkg.Name) + if err != nil { + log.Println("Error activating Package", err) + } + log.Println("Activating new package", pkg.Name) + return nil + } + return nil + } + q, err := db.Prepare("INSERT INTO dashboard_package (name, active) values (?, 1)") + if err != nil { + log.Println("Error creating query", err) + return err + } + _, err = q.Exec(pkg.Name) + if err != nil { + log.Println("Error creating Package", err) + return err + } + return nil +} + +func DisablePackage(pkg Package, db *sql.DB) (int, error) { + if !checkIfPackageExists(pkg, db) { + log.Println("Package does not exist", pkg.Name) + return 404, nil + } + q, err := db.Prepare("UPDATE dashboard_package set active = 0 where name = ?") + if err != nil { + log.Println("Error creating query", err) + return 500, err + } + _, err = q.Exec(pkg.Name) + if err != nil { + log.Println("Error disabling Package", err) + return 500, err + } + return 200, nil +} + +func DeletePackage(pkg Package, db *sql.DB) (int, error) { + if !checkIfPackageExists(pkg, db) { + log.Println("Package does not exist", pkg.Name) + return 404, nil + } + q, err := db.Prepare("DELETE FROM dashboard_package where name = ?") + if err != nil { + log.Println("Error creating query", err) + return 500, err + } + _, err = q.Exec(pkg.Name) + if err != nil { + log.Println("Error deleting Package", err) + return 500, err + } + return 200, nil +} diff --git a/Database/server.go b/Database/server.go index 2c6f075..5f09f5c 100644 --- a/Database/server.go +++ b/Database/server.go @@ -75,7 +75,6 @@ func checkIfServerExists(server Server, db *sql.DB) bool { row := db.QueryRow("Select hostname, os_id from dashboard_server where hostname = ? and os_id = ?", server.Hostname, server.OsId) err := row.Scan(&server.Hostname, &server.OsId) if !errors.Is(err, sql.ErrNoRows) { - log.Println("Server exists") return true } return false diff --git a/Http/package.go b/Http/package.go index ded1871..09b9bb7 100644 --- a/Http/package.go +++ b/Http/package.go @@ -2,7 +2,9 @@ package http import ( "encoding/json" + "gopkg.in/guregu/null.v4" db "infra-dashboard/Database" + "io/ioutil" "log" "net/http" "strconv" @@ -54,3 +56,76 @@ func GetPackagebyID(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(pkg) } + +func CreatePackage(w http.ResponseWriter, r *http.Request) { + var pkg db.Package + var err error + t := time.Now() + status := 200 + + body, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err.Error(), "Error reading request body") + } + + params := make(map[string]null.String) + json.Unmarshal(body, ¶ms) + pkg.Name = params["name"] + dbConn := db.GetDatabaseConnection() + defer dbConn.Close() + err = db.CreatePackage(pkg, dbConn) + if err != nil { + log.Println("Error creating package", pkg.Name) + status = 500 + } + logRequest(t, r, status) + w.WriteHeader(status) +} + +func DisablePackage(w http.ResponseWriter, r *http.Request) { + var pkg db.Package + var err error + var status int + t := time.Now() + + body, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err.Error(), "Error reading request body") + } + + params := make(map[string]null.String) + json.Unmarshal(body, ¶ms) + pkg.Name = params["name"] + dbConn := db.GetDatabaseConnection() + defer dbConn.Close() + status, err = db.DisablePackage(pkg, dbConn) + if err != nil { + log.Println(err.Error(), "Error disabling package", pkg.Name) + } + logRequest(t, r, status) + w.WriteHeader(status) +} + +func DeletePackage(w http.ResponseWriter, r *http.Request) { + var pkg db.Package + var err error + var status int + t := time.Now() + + body, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err.Error(), "Error reading request body") + } + + params := make(map[string]null.String) + json.Unmarshal(body, ¶ms) + pkg.Name = params["name"] + dbConn := db.GetDatabaseConnection() + defer dbConn.Close() + status, err = db.DeletePackage(pkg, dbConn) + if err != nil { + log.Println(err.Error(), "Error deleting package", pkg.Name) + } + logRequest(t, r, status) + w.WriteHeader(status) +} diff --git a/main.go b/main.go index ff67e37..ac335c2 100644 --- a/main.go +++ b/main.go @@ -43,6 +43,9 @@ func main() { router.HandleFunc("/server/delete", h.DeleteServer).Methods("DELETE") router.HandleFunc("/packages", h.GetAllPackages).Methods("GET") + router.HandleFunc("/packages/create", h.CreatePackage).Methods("POST") + router.HandleFunc("/packages/disable", h.DisablePackage).Methods("POST") + router.HandleFunc("/packages/delete", h.DeletePackage).Methods("DELETE") router.HandleFunc("/packages/{id:[0-9]+}", h.GetPackagebyID).Methods("GET") log.Fatal(http.ListenAndServe(":8080", router))