-
Notifications
You must be signed in to change notification settings - Fork 82
/
auth.go
40 lines (31 loc) · 838 Bytes
/
auth.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package auth
import (
"errors"
"github.com/dgrijalva/jwt-go"
"github.com/spf13/viper"
"gitlab.com/leanlabsio/kanban/models"
"gopkg.in/macaron.v1"
)
// SignedInUser returns models.User instance if user exists
func SignedInUser(ctx *macaron.Context) (*models.User, error) {
h := ctx.Req.Header.Get("X-KB-Access-Token")
if len(h) == 0 {
return nil, errors.New("X-KB-Access-Token header missed")
}
jwtToken, err := jwt.Parse(h, func(token *jwt.Token) (interface{}, error) {
return []byte(viper.GetString("security.secret_key")), nil
})
if err != nil {
return nil, err
}
if !jwtToken.Valid {
return nil, errors.New("Invalid jwt token")
}
uname, _ := jwtToken.Claims["name"].(string)
user, err := models.LoadUserByUsername(uname)
if err != nil {
return nil, err
}
user.Token = jwtToken
return user, nil
}