79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"amnezia-share/internal/models"
|
|
"amnezia-share/internal/web"
|
|
)
|
|
|
|
type adminRenewalView struct {
|
|
adminLayout
|
|
Codes []models.RenewalCode
|
|
}
|
|
|
|
// AdminRenewalGet lists renewal codes (admin/renewal_codes.php GET).
|
|
func AdminRenewalGet(a *web.App) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
ok, errText := flashFromQuery(r)
|
|
view := adminRenewalView{adminLayout: newAdminLayout(a, r, "renewal")}
|
|
view.OK, view.Error = ok, errText
|
|
codes, err := a.Share.ListCodes(r.Context())
|
|
if err != nil {
|
|
view.Error = err.Error()
|
|
}
|
|
view.Codes = codes
|
|
a.Render(w, r, "page_admin_renewal", view)
|
|
}
|
|
}
|
|
|
|
// AdminRenewalPost handles renewal code create/delete (admin/renewal_codes.php
|
|
// POST).
|
|
func AdminRenewalPost(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 "create":
|
|
code := r.FormValue("code")
|
|
addDays := formInt(r, "add_days", 30)
|
|
maxUses := formInt(r, "max_uses", 1)
|
|
target := strings.TrimSpace(r.FormValue("code_target"))
|
|
note := r.FormValue("note")
|
|
expiresAt := parseFormDate(r.FormValue("code_expires_at"))
|
|
|
|
var linkID *int
|
|
if target != "member" {
|
|
if v := formInt(r, "share_link_id", 0); v > 0 {
|
|
linkID = &v
|
|
}
|
|
}
|
|
|
|
created, cerr := a.Share.CreateRenewalCode(ctx, code, addDays, maxUses, linkID, expiresAt, note, target)
|
|
err = cerr
|
|
if err == nil {
|
|
okMsg = "Код создан: " + created.Code
|
|
}
|
|
|
|
case "delete":
|
|
id := formInt(r, "code_id", 0)
|
|
err = a.Share.DeleteCode(ctx, id)
|
|
if err == nil {
|
|
okMsg = "Код удалён."
|
|
}
|
|
|
|
default:
|
|
err = errUnknownAction
|
|
}
|
|
|
|
errText := ""
|
|
if err != nil {
|
|
errText = err.Error()
|
|
}
|
|
redirectWithFlash(w, r, a, "admin/renewal", okMsg, errText)
|
|
}
|
|
}
|