9
9
"strings"
10
10
"time"
11
11
12
+ auth_model "code.gitea.io/gitea/models/auth"
12
13
user_model "code.gitea.io/gitea/models/user"
13
14
"code.gitea.io/gitea/modules/log"
14
15
"code.gitea.io/gitea/modules/setting"
@@ -18,18 +19,25 @@ import (
18
19
19
20
type packageClaims struct {
20
21
jwt.RegisteredClaims
22
+ PackageMeta
23
+ }
24
+ type PackageMeta struct {
21
25
UserID int64
26
+ Scope auth_model.AccessTokenScope
22
27
}
23
28
24
- func CreateAuthorizationToken (u * user_model.User ) (string , error ) {
29
+ func CreateAuthorizationToken (u * user_model.User , packageScope auth_model. AccessTokenScope ) (string , error ) {
25
30
now := time .Now ()
26
31
27
32
claims := packageClaims {
28
33
RegisteredClaims : jwt.RegisteredClaims {
29
34
ExpiresAt : jwt .NewNumericDate (now .Add (24 * time .Hour )),
30
35
NotBefore : jwt .NewNumericDate (now ),
31
36
},
32
- UserID : u .ID ,
37
+ PackageMeta : PackageMeta {
38
+ UserID : u .ID ,
39
+ Scope : packageScope ,
40
+ },
33
41
}
34
42
token := jwt .NewWithClaims (jwt .SigningMethodHS256 , claims )
35
43
@@ -41,32 +49,36 @@ func CreateAuthorizationToken(u *user_model.User) (string, error) {
41
49
return tokenString , nil
42
50
}
43
51
44
- func ParseAuthorizationToken (req * http.Request ) (int64 , error ) {
52
+ func ParseAuthorizationRequest (req * http.Request ) (* PackageMeta , error ) {
45
53
h := req .Header .Get ("Authorization" )
46
54
if h == "" {
47
- return 0 , nil
55
+ return nil , nil
48
56
}
49
57
50
58
parts := strings .SplitN (h , " " , 2 )
51
59
if len (parts ) != 2 {
52
60
log .Error ("split token failed: %s" , h )
53
- return 0 , fmt .Errorf ("split token failed" )
61
+ return nil , fmt .Errorf ("split token failed" )
54
62
}
55
63
56
- token , err := jwt .ParseWithClaims (parts [1 ], & packageClaims {}, func (t * jwt.Token ) (any , error ) {
64
+ return ParseAuthorizationToken (parts [1 ])
65
+ }
66
+
67
+ func ParseAuthorizationToken (tokenStr string ) (* PackageMeta , error ) {
68
+ token , err := jwt .ParseWithClaims (tokenStr , & packageClaims {}, func (t * jwt.Token ) (any , error ) {
57
69
if _ , ok := t .Method .(* jwt.SigningMethodHMAC ); ! ok {
58
70
return nil , fmt .Errorf ("unexpected signing method: %v" , t .Header ["alg" ])
59
71
}
60
72
return setting .GetGeneralTokenSigningSecret (), nil
61
73
})
62
74
if err != nil {
63
- return 0 , err
75
+ return nil , err
64
76
}
65
77
66
78
c , ok := token .Claims .(* packageClaims )
67
79
if ! token .Valid || ! ok {
68
- return 0 , fmt .Errorf ("invalid token claim" )
80
+ return nil , fmt .Errorf ("invalid token claim" )
69
81
}
70
82
71
- return c . UserID , nil
83
+ return & c . PackageMeta , nil
72
84
}
0 commit comments