http urls monitor.

auth.go 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package middleware
  2. import (
  3. "fmt"
  4. "net/http"
  5. "git.links123.net/links123.com/skeleton/config"
  6. "github.com/dgrijalva/jwt-go"
  7. "github.com/wpajqz/linker"
  8. )
  9. // headers
  10. const (
  11. CtxRequestHeaderUserId = "user_id"
  12. CtxRequestHeaderAuthorization = "Authorization"
  13. )
  14. // Auth empty struct for middleware interface
  15. type Auth struct{}
  16. // Handle middleware process
  17. func (a *Auth) Handle(ctx linker.Context) linker.Context {
  18. tk := ctx.GetRequestProperty(CtxRequestHeaderAuthorization)
  19. if len(tk) < 8 {
  20. ctx.Error(http.StatusUnauthorized, "Auth failed")
  21. }
  22. token, err := jwt.Parse(tk[7:], func(token *jwt.Token) (interface{}, error) {
  23. if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
  24. return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
  25. }
  26. return []byte(config.C.App.Secret), nil
  27. })
  28. if err != nil || !token.Valid {
  29. ctx.Error(http.StatusUnauthorized, "Auth failed")
  30. }
  31. ctx.Set(CtxRequestHeaderUserId, int(token.Claims.(jwt.MapClaims)[CtxRequestHeaderUserId].(float64)))
  32. return ctx
  33. }