Files

80 lines
1.9 KiB
Go

package handlers
import (
"net/http"
"amnezia-share/internal/i18n"
"amnezia-share/internal/models"
"amnezia-share/internal/share"
"amnezia-share/internal/web"
)
func registerFAQ(a *web.App, mux *http.ServeMux) {
mux.HandleFunc("GET /faq", FAQ(a))
mux.HandleFunc("GET /rules", Rules(a))
mux.HandleFunc("GET /status", Status(a))
}
type faqEntry struct {
Question string
Answer string
}
type faqView struct {
Items []faqEntry
}
// FAQ renders the guest-facing FAQ page (faq.php).
func FAQ(a *web.App) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
lang := i18n.Resolve(r, a.Sessions)
items := make([]faqEntry, 0, len(i18n.FAQItems))
for _, it := range i18n.FAQItems {
items = append(items, faqEntry{
Question: i18n.T(lang, it.QuestionKey, nil),
Answer: i18n.T(lang, it.AnswerKey, nil),
})
}
a.Render(w, r, "page_faq", faqView{Items: items})
}
}
// Rules renders the acceptable-use rules page (rules.php).
func Rules(a *web.App) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
a.Render(w, r, "page_rules", nil)
}
}
type serverStatus struct {
models.ServerInfo
Alive bool
Ms int
Err string
}
type statusView struct {
Servers []serverStatus
}
// Status pings every configured server and reports online/offline (status.php).
func Status(a *web.App) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
labels := a.Settings.ServerLabels(ctx)
servers := share.BuildGuestServers(ctx, a.Settings, labels)
baseURL := a.Settings.PanelURL(ctx)
token := a.Settings.PanelToken(ctx)
list := make([]serverStatus, 0, len(servers))
for _, s := range servers {
st := serverStatus{ServerInfo: s}
if baseURL != "" && token != "" {
st.Alive, st.Ms, st.Err = a.Panel.Ping(ctx, baseURL, token, s.ID)
}
list = append(list, st)
}
a.Render(w, r, "page_status", statusView{Servers: list})
}
}