diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-04 08:09:27 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-04 08:09:27 +0300 |
| commit | fd60df1a2861de0d622f89cc04d164cb60e3d930 (patch) | |
| tree | 750b808b3b0d6e19778f1393cb540cb60a4c80c4 /internal/api/middleware.go | |
| parent | 71e004fb4e53ee4ac5c8fb202bad5f5c00dd8dac (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.go | 23 |
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 |
