From c5fb5e674ab84d772f8c713e738a750ebc696b84 Mon Sep 17 00:00:00 2001 From: LandaMm Date: Sun, 15 Jun 2025 19:40:54 +0200 Subject: [PATCH] feat: revoke service session --- internal/admin/routes.go | 1 + internal/admin/sessions.go | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/internal/admin/routes.go b/internal/admin/routes.go index 99b3a7c..bb679ff 100644 --- a/internal/admin/routes.go +++ b/internal/admin/routes.go @@ -40,6 +40,7 @@ func (h *AdminHandler) RegisterRoutes(router chi.Router) { r.Patch("/user-sessions/revoke/{id}", h.RevokeUserSession) r.Get("/service-sessions", h.GetServiceSessions) + r.Patch("/service-sessions/revoke/{id}", h.RevokeUserSession) }) router.Get("/api-services/client/{client_id}", h.GetApiServiceCID) diff --git a/internal/admin/sessions.go b/internal/admin/sessions.go index e47cd67..0a9bd1d 100644 --- a/internal/admin/sessions.go +++ b/internal/admin/sessions.go @@ -73,6 +73,8 @@ func (h *AdminHandler) GetUserSessions(w http.ResponseWriter, r *http.Request) { TotalPages: int(math.Ceil(float64(totalSessions) / float64(params.PageSize))), } + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(response); err != nil { log.Println("ERR: Failed to encode sessions in response:", err) web.Error(w, "failed to encode sessions", http.StatusInternalServerError) @@ -94,6 +96,8 @@ func (h *AdminHandler) RevokeUserSession(w http.ResponseWriter, r *http.Request) return } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) w.Write([]byte("{\"success\":true}")) } @@ -151,8 +155,28 @@ func (h *AdminHandler) GetServiceSessions(w http.ResponseWriter, r *http.Request TotalPages: int(math.Ceil(float64(totalSessions) / float64(params.PageSize))), } + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(response); err != nil { log.Println("ERR: Failed to encode sessions in response:", err) web.Error(w, "failed to encode sessions", http.StatusInternalServerError) } } + +func (h *AdminHandler) RevokeServiceSession(w http.ResponseWriter, r *http.Request) { + sessionId := chi.URLParam(r, "id") + parsed, err := uuid.Parse(sessionId) + if err != nil { + web.Error(w, "provided service id is not valid", http.StatusBadRequest) + return + } + + if err := h.repo.RevokeServiceSession(r.Context(), parsed); err != nil { + log.Println("ERR: Failed to revoke service session:", err) + web.Error(w, "failed to revoke service session", http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) + w.Write([]byte("{\"success\":true}")) +}