summaryrefslogtreecommitdiff
path: root/internal/api/middleware.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-04 08:09:27 +0300
committerPaul Buetow <paul@buetow.org>2026-05-04 08:09:27 +0300
commitfd60df1a2861de0d622f89cc04d164cb60e3d930 (patch)
tree750b808b3b0d6e19778f1393cb540cb60a4c80c4 /internal/api/middleware.go
parent71e004fb4e53ee4ac5c8fb202bad5f5c00dd8dac (diff)
task 3: decouple API layer from repository with MediaQueryFilter and AuthService abstraction
Diffstat (limited to 'internal/api/middleware.go')
-rw-r--r--internal/api/middleware.go23
1 files changed, 11 insertions, 12 deletions
diff --git a/internal/api/middleware.go b/internal/api/middleware.go
index c6cc303..f341dc8 100644
--- a/internal/api/middleware.go
+++ b/internal/api/middleware.go
@@ -7,6 +7,7 @@ import (
"codeberg.org/snonux/player/internal/auth"
"codeberg.org/snonux/player/internal/model"
+ "codeberg.org/snonux/player/internal/service"
)
type ctxKey int
@@ -16,21 +17,15 @@ const (
userCtxKey
)
-// UserStore is the narrow interface Middleware needs for user lookups.
-type UserStore interface {
- CountUsers(ctx context.Context) (int, error)
- GetUserByID(ctx context.Context, id int64) (*model.User, error)
-}
-
// Middleware holds dependencies for middleware constructors.
type Middleware struct {
- store UserStore
- sm *auth.SessionManager
+ authSvc service.AuthService
+ sm *auth.SessionManager
}
// NewMiddleware creates middleware handlers.
-func NewMiddleware(store UserStore, sm *auth.SessionManager) *Middleware {
- return &Middleware{store: store, sm: sm}
+func NewMiddleware(authSvc service.AuthService, sm *auth.SessionManager) *Middleware {
+ return &Middleware{authSvc: authSvc, sm: sm}
}
// RequireSession validates the session cookie and injects the session into request context.
@@ -74,7 +69,7 @@ func (mw *Middleware) RequireAdmin(next http.Handler) http.Handler {
http.Error(w, "unauthorized", http.StatusUnauthorized)
return
}
- user, err := mw.store.GetUserByID(r.Context(), sess.UserID)
+ user, err := mw.authSvc.GetUserByID(r.Context(), sess.UserID)
if err != nil || user == nil || !user.IsAdmin {
http.Error(w, "forbidden", http.StatusForbidden)
return
@@ -91,7 +86,11 @@ func (mw *Middleware) BootstrapRedirect(next http.Handler) http.Handler {
next.ServeHTTP(w, r)
return
}
- count, err := mw.store.CountUsers(r.Context())
+ if mw.authSvc == nil {
+ http.Error(w, "internal server error", http.StatusInternalServerError)
+ return
+ }
+ count, err := mw.authSvc.CountUsers(r.Context())
if err != nil {
http.Error(w, "internal server error", http.StatusInternalServerError)
return