Add Go rewrite with Postgres 17 and Dokploy Docker Compose
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"amnezia-share/internal/models"
|
||||
"amnezia-share/internal/web"
|
||||
)
|
||||
|
||||
type configRow struct {
|
||||
models.ShareCreation
|
||||
LinkID int
|
||||
LinkToken string
|
||||
}
|
||||
|
||||
type adminConfigsView struct {
|
||||
adminLayout
|
||||
Rows []configRow
|
||||
LinkIDFilter int
|
||||
ServerIDFilter int
|
||||
Truncated bool
|
||||
}
|
||||
|
||||
const adminConfigsMax = 300
|
||||
|
||||
// AdminConfigsGet lists guest-created panel connections (optionally scoped to
|
||||
// one link or server) with a delete action (admin/server_configs.php).
|
||||
func AdminConfigsGet(a *web.App) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
ok, errText := flashFromQuery(r)
|
||||
view := adminConfigsView{
|
||||
adminLayout: newAdminLayout(a, r, "configs"),
|
||||
LinkIDFilter: queryInt(r, "link_id", 0),
|
||||
ServerIDFilter: queryInt(r, "server_id", 0),
|
||||
}
|
||||
view.OK, view.Error = ok, errText
|
||||
|
||||
add := func(linkID int, token string, creations []models.ShareCreation) {
|
||||
for _, c := range creations {
|
||||
if view.ServerIDFilter > 0 && c.ServerID != view.ServerIDFilter {
|
||||
continue
|
||||
}
|
||||
if len(view.Rows) >= adminConfigsMax {
|
||||
view.Truncated = true
|
||||
return
|
||||
}
|
||||
view.Rows = append(view.Rows, configRow{ShareCreation: c, LinkID: linkID, LinkToken: token})
|
||||
}
|
||||
}
|
||||
|
||||
if view.LinkIDFilter > 0 {
|
||||
if link, err := a.Share.LinkByID(ctx, view.LinkIDFilter); err == nil && link != nil {
|
||||
creations, _ := a.Share.ListCreationsForLink(ctx, link.ID)
|
||||
add(link.ID, link.Token, creations)
|
||||
}
|
||||
} else {
|
||||
links, err := a.Share.ListLinks(ctx, 1, 50, "")
|
||||
if err != nil {
|
||||
view.Error = err.Error()
|
||||
}
|
||||
for _, l := range links {
|
||||
creations, _ := a.Share.ListCreationsForLink(ctx, l.ID)
|
||||
add(l.ID, l.Token, creations)
|
||||
if view.Truncated {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a.Render(w, r, "page_admin_configs", view)
|
||||
}
|
||||
}
|
||||
|
||||
// AdminConfigsPost deletes a single guest connection (from the panel, then the
|
||||
// DB).
|
||||
func AdminConfigsPost(a *web.App) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
var err error
|
||||
var okMsg string
|
||||
|
||||
switch r.FormValue("action") {
|
||||
case "delete_creation":
|
||||
linkID := formInt(r, "link_id", 0)
|
||||
creationID := formInt64(r, "creation_id", 0)
|
||||
err = a.Share.SoftDeleteCreation(ctx, a.Panel, a.Settings, linkID, creationID)
|
||||
if err == nil {
|
||||
okMsg = "Конфигурация удалена."
|
||||
}
|
||||
default:
|
||||
err = errUnknownAction
|
||||
}
|
||||
|
||||
back := "admin/configs"
|
||||
q := url.Values{}
|
||||
if v := r.FormValue("link_id"); v != "" {
|
||||
q.Set("link_id", v)
|
||||
}
|
||||
if v := r.FormValue("server_id_filter"); v != "" {
|
||||
q.Set("server_id", v)
|
||||
}
|
||||
if len(q) > 0 {
|
||||
back += "?" + q.Encode()
|
||||
}
|
||||
|
||||
errText := ""
|
||||
if err != nil {
|
||||
errText = err.Error()
|
||||
}
|
||||
redirectWithFlash(w, r, a, back, okMsg, errText)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user