package admin
import (
"Embalming_Girl_Server/db"
"encoding/json"
"fmt"
"net/http"
)
const AdminPassword = "admin123"
func Register(mux *http.ServeMux, getStats func() map[string]interface{}) {
mux.HandleFunc("/admin", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
fmt.Fprint(w, adminHTML)
})
mux.HandleFunc("/api/admin/login", func(w http.ResponseWriter, r *http.Request) {
var req struct {
Password string `json:"password"`
}
json.NewDecoder(r.Body).Decode(&req)
if req.Password != AdminPassword {
json.NewEncoder(w).Encode(map[string]interface{}{"ok": false})
return
}
json.NewEncoder(w).Encode(map[string]interface{}{"ok": true})
})
mux.HandleFunc("/api/admin/stats", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(getStats())
})
mux.HandleFunc("/api/admin/users", func(w http.ResponseWriter, r *http.Request) {
rows, err := db.DB.Query("SELECT id, username, nickname, bio, avatar, created_at, last_login FROM users ORDER BY id DESC")
if err != nil {
json.NewEncoder(w).Encode([]int{})
return
}
defer rows.Close()
var users []map[string]interface{}
for rows.Next() {
var id int64
var username, nickname, bio, avatar string
var created, login interface{}
rows.Scan(&id, &username, &nickname, &bio, &avatar, &created, &login)
users = append(users, map[string]interface{}{
"id": id, "username": username, "nickname": nickname,
"bio": bio, "avatar": avatar, "created_at": created, "last_login": login,
})
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
})
mux.HandleFunc("/api/admin/delete_user", func(w http.ResponseWriter, r *http.Request) {
var req struct {
ID int64 `json:"id"`
}
json.NewDecoder(r.Body).Decode(&req)
db.DB.Exec("DELETE FROM sessions WHERE user_id=?", req.ID)
db.DB.Exec("DELETE FROM users WHERE id=?", req.ID)
json.NewEncoder(w).Encode(map[string]interface{}{"ok": true})
})
}
const adminHTML = `
管理面板
管理面板
`