-
Notifications
You must be signed in to change notification settings - Fork 1
/
init.go
114 lines (104 loc) · 2.9 KB
/
init.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package gwt
import (
"github.com/gin-gonic/gin"
"time"
)
var (
userIdClaim = "user_id"
accessUuidClaim = "access_uuid"
refreshUuidClaim = "refresh_uuid"
expiredClaim = "exp"
authHeader = "Authorization"
userIdRequestParam = "user_id"
UserKey = "user"
)
var availSigningMethods = map[string]string{
"HS256": "true",
"HS384": "true",
"HS512": "true",
}
type DefaultLoginResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
AccessExpire int64 `json:"access_expire"`
RefreshExpire int64 `json:"refresh_expire"`
}
type DefaultErrResponse struct {
ErrorCode int `json:"error_code"`
ErrorMessage string `json:"error_message"`
}
type DefaultLogoutResponse struct{}
var (
defaultSigningMethod = "HS256"
defaultAccessLifetime = time.Minute * 10
defaultRefreshLifetime = time.Hour * 24
defaultAuthHeadName = "Bearer"
defaultLoginResponseFunc = func(c *gin.Context, code int, accessToken string,
accessExpire int64, refreshToken string, refreshExpire int64) {
c.JSON(code, DefaultLoginResponse{
AccessToken: accessToken,
RefreshToken: refreshToken,
AccessExpire: accessExpire,
RefreshExpire: refreshExpire,
})
}
defaultErrResponseFunc = func(c *gin.Context, code int, message string) {
c.JSON(code, DefaultErrResponse{ErrorCode: code, ErrorMessage: message})
c.Abort()
}
defaultLogoutResponseFunc = func(c *gin.Context, code int) {
c.JSON(code, DefaultLogoutResponse{})
}
)
type Gwt struct {
Service *Service
Handler *Handler
Middleware *Middleware
}
func Init(settings Settings) (*Gwt, error) {
if settings.Storage == nil {
return nil, ErrEmptyStorage
}
if settings.Authenticator == nil {
return nil, ErrEmptyAuthenticator
}
if settings.GetUserFunc == nil {
return nil, ErrEmptyGetUserFunc
}
if settings.AccessSecretKey == nil {
return nil, ErrEmptyAccessSecretKey
}
if settings.RefreshSecretKey == nil {
settings.RefreshSecretKey = settings.AccessSecretKey
}
if settings.SigningMethod == "" {
settings.SigningMethod = defaultSigningMethod
} else {
if availSigningMethods[settings.SigningMethod] == "" {
return nil, ErrUnknownSigningMethod
}
}
if settings.AccessLifetime == 0 {
settings.AccessLifetime = defaultAccessLifetime
}
if settings.RefreshLifetime == 0 {
settings.RefreshLifetime = defaultRefreshLifetime
}
if settings.AuthHeadName == "" {
settings.AuthHeadName = defaultAuthHeadName
}
if settings.LoginResponseFunc == nil {
settings.LoginResponseFunc = defaultLoginResponseFunc
}
if settings.ErrResponseFunc == nil {
settings.ErrResponseFunc = defaultErrResponseFunc
}
if settings.LogoutResponseFunc == nil {
settings.LogoutResponseFunc = defaultLogoutResponseFunc
}
return &Gwt{
Middleware: &Middleware{settings: &settings},
Handler: &Handler{settings: &settings},
Service: &Service{settings: &settings},
}, nil
}