Skip to content

Commit 4ebbcee

Browse files
committed
fix: add /admin/check route, check isAdmin on login response, bump cache v8
1 parent a161c21 commit 4ebbcee

3 files changed

Lines changed: 16 additions & 2 deletions

File tree

internal/embed/public/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</div>
2525
</div>
2626

27-
<script src="/js/app.js?v=7"></script>
28-
<script src="/js/admin.js?v=7"></script>
27+
<script src="/js/app.js?v=8"></script>
28+
<script src="/js/admin.js?v=8"></script>
2929
</body>
3030
</html>

internal/embed/public/js/admin.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ async function handleAdminLogin(e) {
321321
let data;
322322
try { data = JSON.parse(text); } catch { throw new Error('Server error.'); }
323323
if (!res.ok) throw new Error(data.error || 'Invalid credentials.');
324+
if (!data.user?.isAdmin) throw new Error('Admin access required.');
324325
adminState.token = data.token;
325326
adminState.user = data.user;
326327
localStorage.setItem(ADMIN_STORAGE_KEY, data.token);

internal/routes/admin.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func RegisterAdminRoutes(r chi.Router) {
2020
h := &AdminHandler{}
2121

2222
r.Post("/admin/login", http.HandlerFunc(h.AdminLogin))
23+
r.Get("/admin/check", middleware.RequireAdmin(http.HandlerFunc(h.AdminCheck)))
2324
r.Get("/admin/servers", middleware.RequireAdmin(http.HandlerFunc(h.ListAdminServers)))
2425
r.Get("/admin/servers/{id}", middleware.RequireAdmin(http.HandlerFunc(h.GetAdminServer)))
2526
r.Delete("/admin/servers/{id}", middleware.RequireAdmin(http.HandlerFunc(h.DeleteAdminServer)))
@@ -184,6 +185,18 @@ func (h *AdminHandler) AdminLogin(w http.ResponseWriter, r *http.Request) {
184185
})
185186
}
186187

188+
func (h *AdminHandler) AdminCheck(w http.ResponseWriter, r *http.Request) {
189+
user := middleware.GetUser(r)
190+
writeJSON(w, http.StatusOK, map[string]interface{}{
191+
"user": map[string]interface{}{
192+
"id": user.UserID,
193+
"email": user.Email,
194+
"username": user.Username,
195+
"isAdmin": user.IsAdmin,
196+
},
197+
})
198+
}
199+
187200
func (h *AdminHandler) ListAdminServers(w http.ResponseWriter, r *http.Request) {
188201
rows, err := database.DB.Query(`
189202
SELECT sm.id, sm.ptero_server_id, sm.status, sm.created_at, sm.expires_at, sm.suspend_reason,

0 commit comments

Comments
 (0)