rewrite using net/http
tronnet/workflows: Static Analysis -- Golang / static-go (push) Failing after 6s

This commit is contained in:
alu committed 2026-10-22 18:58:14 +00:00
1 parent db8ed2e830
commit 9b3ec1221e
8 files changed
+268 -148

No files matched your search

+17 -6
View File
@@ -1,6 +1,7 @@
package routes
import (
"bytes"
"fmt"
"net/http"
paas "proxmoxaas-common-lib"
@@ -40,29 +41,39 @@ var Green = color.RGB{
B: 0,
}
func HandleGETAccount(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETAccount(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
user, err := GetUserBasic(auth)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
pools, err := GetUserPools(auth)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
c.HTML(http.StatusOK, "html/account.html", gin.H{
w.Header().Set("Content-Type", "text/html")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/account.html", gin.H{
"global": common.Global,
"page": "account",
"user": user,
"pools": pools,
})
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
} else {
w.Write(body.Bytes())
return
}
} else {
c.Redirect(http.StatusFound, "/login") // if user is not authed, redirect user to login page
http.Redirect(w, r, "/login", http.StatusFound) // if user is not authed, redirect user to login page
return
}
}
+36 -18
View File
@@ -1,6 +1,7 @@
package routes
import (
"bytes"
"fmt"
"net/http"
paas "proxmoxaas-common-lib"
@@ -20,61 +21,78 @@ type InstanceBackup struct {
TimeFormatted string
}
func HandleGETBackups(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETBackups(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
backups, err := GetInstanceBackups(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance backups: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance backups: %s", err.Error()))
return
}
config, err := GetInstanceConfig(vm_path, auth) // only used for the VM's name
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
return
}
c.HTML(http.StatusOK, "html/backups.html", gin.H{
w.Header().Set("Content-Type", "text/html")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/index.html", gin.H{
"global": common.Global,
"page": "backups",
"backups": backups,
"config": config,
})
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
} else {
w.Write(body.Bytes())
return
}
} else {
c.Redirect(http.StatusFound, "/login")
http.Redirect(w, r, "/login", http.StatusFound)
return
}
}
func HandleGETBackupsFragment(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETBackupsFragment(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil { // user should be authed, try to return index with population
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
backups, err := GetInstanceBackups(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance backups: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance backups: %s", err.Error()))
return
}
c.Header("Content-Type", "text/plain")
err = common.TMPL.ExecuteTemplate(c.Writer, "html/backups-backups.go.tmpl", gin.H{
w.Header().Set("Content-Type", "text/plain")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/backups-backups.go.tmpl", gin.H{
"backups": backups,
})
if err != nil {
c.Status(http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
} else {
c.Status(http.StatusOK)
w.Write(body.Bytes())
return
}
} else { // return 401
c.Status(http.StatusUnauthorized)
w.WriteHeader(http.StatusUnauthorized)
return
}
}
+84 -51
View File
@@ -1,6 +1,7 @@
package routes
import (
"bytes"
"fmt"
"net/http"
paas "proxmoxaas-common-lib"
@@ -31,24 +32,26 @@ type PoolConfig struct {
}
}
func HandleGETConfig(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETConfig(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
config, err := GetInstanceConfig(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
return
}
if config.Type == "VM" { // if VM, fetch CPU types from node
config.ProctypeSelect, err = GetCPUTypes(vm_path, config.Pool, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting proctypes: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting proctypes: %s", err.Error()))
return
}
}
for i, cpu := range config.ProctypeSelect.Options {
@@ -57,125 +60,155 @@ func HandleGETConfig(c *gin.Context) {
}
}
c.HTML(http.StatusOK, "html/config.html", gin.H{
w.Header().Set("Content-Type", "text/html")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/config.html", gin.H{
"global": common.Global,
"page": "config",
"config": config,
})
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
} else {
w.Write(body.Bytes())
return
}
} else {
c.Redirect(http.StatusFound, "/login")
http.Redirect(w, r, "/login", http.StatusFound)
return
}
}
func HandleGETConfigVolumesFragment(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETConfigVolumesFragment(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
config, err := GetInstanceConfig(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
return
}
c.Header("Content-Type", "text/plain")
err = common.TMPL.ExecuteTemplate(c.Writer, "html/config-volumes.go.tmpl", gin.H{
w.Header().Set("Content-Type", "text/plain")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/config-volumes.go.tmpl", gin.H{
"config": config,
})
if err != nil {
c.Status(http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
} else {
c.Status(http.StatusOK)
w.Write(body.Bytes())
return
}
} else {
c.Status(http.StatusUnauthorized)
w.WriteHeader(http.StatusUnauthorized)
return
}
}
func HandleGETConfigNetsFragment(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETConfigNetsFragment(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
config, err := GetInstanceConfig(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
return
}
c.Header("Content-Type", "text/plain")
err = common.TMPL.ExecuteTemplate(c.Writer, "html/config-nets.go.tmpl", gin.H{
w.Header().Set("Content-Type", "text/plain")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/config-nets.go.tmpl", gin.H{
"config": config,
})
if err != nil {
c.Status(http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
} else {
c.Status(http.StatusOK)
w.Write(body.Bytes())
return
}
} else {
c.Status(http.StatusUnauthorized)
} else { // return 401
w.WriteHeader(http.StatusUnauthorized)
return
}
}
func HandleGETConfigDevicesFragment(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETConfigDevicesFragment(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
config, err := GetInstanceConfig(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
return
}
c.Header("Content-Type", "text/plain")
err = common.TMPL.ExecuteTemplate(c.Writer, "html/config-devices.go.tmpl", gin.H{
w.Header().Set("Content-Type", "text/plain")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/config-devices.go.tmpl", gin.H{
"config": config,
})
if err != nil {
c.Status(http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
} else {
c.Status(http.StatusOK)
w.Write(body.Bytes())
return
}
} else {
c.Status(http.StatusUnauthorized)
} else { // return 401
w.WriteHeader(http.StatusUnauthorized)
return
}
}
func HandleGETConfigBootFragment(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETConfigBootFragment(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
vm_path, err := common.GetInstancePathFromRequest(c)
vm_path, err := common.GetInstancePathFromRequest(r)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
config, err := GetInstanceConfig(vm_path, auth)
if err != nil {
common.HandleNonFatalError(c, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
common.HandleNonFatalError(w, fmt.Errorf("error encountered getting instance config: %s", err.Error()))
return
}
c.Header("Content-Type", "text/plain")
err = common.TMPL.ExecuteTemplate(c.Writer, "html/config-boot.go.tmpl", gin.H{
w.Header().Set("Content-Type", "text/plain")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/config-boot.go.tmpl", gin.H{
"config": config,
})
if err != nil {
c.Status(http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
} else {
c.Status(http.StatusOK)
w.Write(body.Bytes())
return
}
} else {
c.Status(http.StatusUnauthorized)
} else { // return 401
w.WriteHeader(http.StatusUnauthorized)
return
}
}
+30 -14
View File
@@ -1,6 +1,7 @@
package routes
import (
"bytes"
"fmt"
"net/http"
paas "proxmoxaas-common-lib"
@@ -45,12 +46,12 @@ type InstanceStatus struct {
Status string
}
func HandleGETIndex(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETIndex(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil { // user should be authed, try to return index with population
instances, _, err := GetClusterResources(auth)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
page := gin.H{
@@ -58,33 +59,48 @@ func HandleGETIndex(c *gin.Context) {
"page": "index",
"instances": instances,
}
c.HTML(http.StatusOK, "html/index.html", page)
w.Header().Set("Content-Type", "text/html")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/index.html", page)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
} else {
w.Write(body.Bytes())
return
}
} else { // return index without populating
c.Redirect(http.StatusFound, "/login") // if user is not authed, redirect user to login page
http.Redirect(w, r, "/login", http.StatusFound)
return
}
}
func HandleGETInstancesFragment(c *gin.Context) {
auth, err := common.GetAuthFromRequest(c)
func HandleGETInstancesFragment(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil { // user should be authed, try to return index with population
instances, _, err := GetClusterResources(auth)
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
c.Header("Content-Type", "text/plain")
err = common.TMPL.ExecuteTemplate(c.Writer, "html/index-instances.go.tmpl", gin.H{
w.Header().Set("Content-Type", "text/plain")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/index-instances.go.tmpl", gin.H{
"instances": instances,
})
if err != nil {
c.Status(http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
} else {
c.Status(http.StatusOK)
w.Write(body.Bytes())
return
}
} else { // return 401
c.Status(http.StatusUnauthorized)
w.WriteHeader(http.StatusUnauthorized)
return
}
}
func GetClusterResources(auth paas.Auth) (map[uint]InstanceCard, map[string]Node, error) {
+14 -3
View File
@@ -1,6 +1,7 @@
package routes
import (
"bytes"
"fmt"
"net/http"
"proxmoxaas-dashboard/app/common"
@@ -41,10 +42,11 @@ func GetLoginRealms() ([]Realm, error) {
return realms, nil
}
func HandleGETLogin(c *gin.Context) {
func HandleGETLogin(w http.ResponseWriter, r *http.Request) {
realms, err := GetLoginRealms()
if err != nil {
common.HandleNonFatalError(c, err)
common.HandleNonFatalError(w, err)
return
}
sel := common.Select{
@@ -60,9 +62,18 @@ func HandleGETLogin(c *gin.Context) {
})
}
c.HTML(http.StatusOK, "html/login.html", gin.H{
w.Header().Set("Content-Type", "text/html")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/login.html", gin.H{
"global": common.Global,
"page": "login",
"realms": sel,
})
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
} else {
w.Write(body.Bytes())
return
}
}
+21 -4
View File
@@ -1,20 +1,37 @@
package routes
import (
"bytes"
"net/http"
"proxmoxaas-dashboard/app/common"
"github.com/gin-gonic/gin"
)
func HandleGETSettings(c *gin.Context) {
_, err := common.GetAuthFromRequest(c)
func HandleGETSettings(w http.ResponseWriter, r *http.Request) {
auth, err := common.GetAuthFromRequest(r)
if err == nil {
c.HTML(http.StatusOK, "html/settings.html", gin.H{
_, err := GetUserBasic(auth)
if err != nil {
common.HandleNonFatalError(w, err)
return
}
w.Header().Set("Content-Type", "text/html")
body := bytes.Buffer{}
err = common.TMPL.ExecuteTemplate(&body, "html/settings.html", gin.H{
"global": common.Global,
"page": "settings",
})
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
} else {
w.Write(body.Bytes())
return
}
} else {
c.Redirect(http.StatusFound, "/login")
http.Redirect(w, r, "/login", http.StatusFound)
return
}
}