@@ -6,13 +6,13 @@ package auth
6
6
7
7
import (
8
8
"crypto/sha256"
9
+ "encoding/base32"
9
10
"encoding/base64"
10
11
"fmt"
11
12
"net/url"
12
13
"strings"
13
14
14
15
"code.gitea.io/gitea/models/db"
15
- "code.gitea.io/gitea/modules/secret"
16
16
"code.gitea.io/gitea/modules/timeutil"
17
17
"code.gitea.io/gitea/modules/util"
18
18
@@ -57,12 +57,22 @@ func (app *OAuth2Application) ContainsRedirectURI(redirectURI string) bool {
57
57
return util .IsStringInSlice (redirectURI , app .RedirectURIs , true )
58
58
}
59
59
60
+ // Base32 characters, but lowercased.
61
+ const lowerBase32Chars = "abcdefghijklmnopqrstuvwxyz234567"
62
+
63
+ // base32 encoder that uses lowered characters without padding.
64
+ var base32Lower = base32 .NewEncoding (lowerBase32Chars ).WithPadding (base32 .NoPadding )
65
+
60
66
// GenerateClientSecret will generate the client secret and returns the plaintext and saves the hash at the database
61
67
func (app * OAuth2Application ) GenerateClientSecret () (string , error ) {
62
- clientSecret , err := secret . New ( )
68
+ rBytes , err := util . CryptoRandomBytes ( 32 )
63
69
if err != nil {
64
70
return "" , err
65
71
}
72
+ // Add a prefix to the base32, this is in order to make it easier
73
+ // for code scanners to grab sensitive tokens.
74
+ clientSecret := "gto_" + base32Lower .EncodeToString (rBytes )
75
+
66
76
hashedSecret , err := bcrypt .GenerateFromPassword ([]byte (clientSecret ), bcrypt .DefaultCost )
67
77
if err != nil {
68
78
return "" , err
@@ -394,10 +404,14 @@ func (grant *OAuth2Grant) GenerateNewAuthorizationCode(redirectURI, codeChalleng
394
404
}
395
405
396
406
func (grant * OAuth2Grant ) generateNewAuthorizationCode (e db.Engine , redirectURI , codeChallenge , codeChallengeMethod string ) (code * OAuth2AuthorizationCode , err error ) {
397
- var codeSecret string
398
- if codeSecret , err = secret . New (); err != nil {
407
+ rBytes , err := util . CryptoRandomBytes ( 32 )
408
+ if err != nil {
399
409
return & OAuth2AuthorizationCode {}, err
400
410
}
411
+ // Add a prefix to the base32, this is in order to make it easier
412
+ // for code scanners to grab sensitive tokens.
413
+ codeSecret := "gta_" + base32Lower .EncodeToString (rBytes )
414
+
401
415
code = & OAuth2AuthorizationCode {
402
416
Grant : grant ,
403
417
GrantID : grant .ID ,
0 commit comments