99 "strings"
1010 "time"
1111
12+ auth_model "code.gitea.io/gitea/models/auth"
1213 user_model "code.gitea.io/gitea/models/user"
1314 "code.gitea.io/gitea/modules/log"
1415 "code.gitea.io/gitea/modules/setting"
@@ -18,18 +19,25 @@ import (
1819
1920type packageClaims struct {
2021 jwt.RegisteredClaims
22+ PackageMeta
23+ }
24+ type PackageMeta struct {
2125 UserID int64
26+ Scope auth_model.AccessTokenScope
2227}
2328
24- func CreateAuthorizationToken (u * user_model.User ) (string , error ) {
29+ func CreateAuthorizationToken (u * user_model.User , packageScope auth_model. AccessTokenScope ) (string , error ) {
2530 now := time .Now ()
2631
2732 claims := packageClaims {
2833 RegisteredClaims : jwt.RegisteredClaims {
2934 ExpiresAt : jwt .NewNumericDate (now .Add (24 * time .Hour )),
3035 NotBefore : jwt .NewNumericDate (now ),
3136 },
32- UserID : u .ID ,
37+ PackageMeta : PackageMeta {
38+ UserID : u .ID ,
39+ Scope : packageScope ,
40+ },
3341 }
3442 token := jwt .NewWithClaims (jwt .SigningMethodHS256 , claims )
3543
@@ -41,32 +49,36 @@ func CreateAuthorizationToken(u *user_model.User) (string, error) {
4149 return tokenString , nil
4250}
4351
44- func ParseAuthorizationToken (req * http.Request ) (int64 , error ) {
52+ func ParseAuthorizationRequest (req * http.Request ) (* PackageMeta , error ) {
4553 h := req .Header .Get ("Authorization" )
4654 if h == "" {
47- return 0 , nil
55+ return nil , nil
4856 }
4957
5058 parts := strings .SplitN (h , " " , 2 )
5159 if len (parts ) != 2 {
5260 log .Error ("split token failed: %s" , h )
53- return 0 , fmt .Errorf ("split token failed" )
61+ return nil , fmt .Errorf ("split token failed" )
5462 }
5563
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 ) {
5769 if _ , ok := t .Method .(* jwt.SigningMethodHMAC ); ! ok {
5870 return nil , fmt .Errorf ("unexpected signing method: %v" , t .Header ["alg" ])
5971 }
6072 return setting .GetGeneralTokenSigningSecret (), nil
6173 })
6274 if err != nil {
63- return 0 , err
75+ return nil , err
6476 }
6577
6678 c , ok := token .Claims .(* packageClaims )
6779 if ! token .Valid || ! ok {
68- return 0 , fmt .Errorf ("invalid token claim" )
80+ return nil , fmt .Errorf ("invalid token claim" )
6981 }
7082
71- return c . UserID , nil
83+ return & c . PackageMeta , nil
7284}
0 commit comments