80 lines
1.9 KiB
Go
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})
|
|
}
|
|
}
|