init
This commit is contained in:
57
internal/server/middleware.go
Normal file
57
internal/server/middleware.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"madsky.ru/go-tracker/internal/model/user"
|
||||
"madsky.ru/go-tracker/internal/server/helpers"
|
||||
"madsky.ru/go-tracker/internal/server/response"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type UserContext struct {
|
||||
}
|
||||
|
||||
func (app *Application) AuthMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
cookie, err := r.Cookie("token")
|
||||
if err != nil {
|
||||
switch {
|
||||
case errors.Is(err, http.ErrNoCookie):
|
||||
response.Error(w, errors.New("no authentication token"), http.StatusForbidden)
|
||||
default:
|
||||
response.Error(w, errors.New("unknown error"), http.StatusForbidden)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
claims, err := helpers.VerifyToken(cookie.Value)
|
||||
if err != nil {
|
||||
response.Error(w, errors.New("invalid authentication token"), http.StatusForbidden)
|
||||
return
|
||||
}
|
||||
|
||||
u, err := app.Storage.User.FindById(app.Ctx, claims.UserId)
|
||||
if err != nil {
|
||||
response.Error(w, errors.New("user not found"), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
ctx := context.WithValue(r.Context(), UserContext{}, u)
|
||||
next.ServeHTTP(w, r.WithContext(ctx))
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func (app *Application) LogRole(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
u := ctx.Value(UserContext{}).(*user.User)
|
||||
|
||||
isAdmin := u.Role == "admin"
|
||||
|
||||
fmt.Println(fmt.Sprintf("is admin: %v", isAdmin))
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user