|
- package auth
-
- import (
- "fmt"
- "net/http"
- "strings"
-
- "github.com/golang-jwt/jwt/v4"
- "github.com/spf13/viper"
- )
-
- type Claims struct {
- Username string `json:"username"`
- Privileges uint `json:"privileges"`
- jwt.RegisteredClaims
- }
-
- func GetUserClaims(r *http.Request) (rights *Claims, err error) {
- var token *jwt.Token
- authHeader := r.Header.Get("Authorization")
- if authHeader == "" {
- return nil, nil
- }
-
- claims := &Claims{}
-
- _, t, _ := strings.Cut(r.Header.Get("Authorization"), "Bearer ")
- token, _ = jwt.ParseWithClaims(t, claims, func(token *jwt.Token) (interface{}, error) {
- if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
- return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
- }
-
- return []byte(viper.GetString("app.secretKey")), nil
- })
- if !token.Valid {
- return nil, nil
- }
- return claims, nil
- }
|