1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package middleware
-
- import (
- "fmt"
- "net/http"
-
- "git.links123.net/links123.com/skeleton/config"
- "github.com/dgrijalva/jwt-go"
- "github.com/wpajqz/linker"
- )
-
- // headers
- const (
- CtxRequestHeaderUserId = "user_id"
- CtxRequestHeaderAuthorization = "Authorization"
- )
-
- // Auth empty struct for middleware interface
- type Auth struct{}
-
- // Handle middleware process
- func (a *Auth) Handle(ctx linker.Context) linker.Context {
- tk := ctx.GetRequestProperty(CtxRequestHeaderAuthorization)
- if len(tk) < 8 {
- ctx.Error(http.StatusUnauthorized, "Auth failed")
- }
-
- token, err := jwt.Parse(tk[7:], 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(config.C.App.Secret), nil
- })
-
- if err != nil || !token.Valid {
- ctx.Error(http.StatusUnauthorized, "Auth failed")
- }
-
- ctx.Set(CtxRequestHeaderUserId, int(token.Claims.(jwt.MapClaims)[CtxRequestHeaderUserId].(float64)))
-
- return ctx
- }
|