@@ -6,13 +6,13 @@ package auth
66
77import (
88 "crypto/sha256"
9+ "encoding/base32"
910 "encoding/base64"
1011 "fmt"
1112 "net/url"
1213 "strings"
1314
1415 "code.gitea.io/gitea/models/db"
15- "code.gitea.io/gitea/modules/secret"
1616 "code.gitea.io/gitea/modules/timeutil"
1717 "code.gitea.io/gitea/modules/util"
1818
@@ -57,12 +57,22 @@ func (app *OAuth2Application) ContainsRedirectURI(redirectURI string) bool {
5757 return util .IsStringInSlice (redirectURI , app .RedirectURIs , true )
5858}
5959
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+
6066// GenerateClientSecret will generate the client secret and returns the plaintext and saves the hash at the database
6167func (app * OAuth2Application ) GenerateClientSecret () (string , error ) {
62- clientSecret , err := secret . New ( )
68+ rBytes , err := util . CryptoRandomBytes ( 32 )
6369 if err != nil {
6470 return "" , err
6571 }
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+
6676 hashedSecret , err := bcrypt .GenerateFromPassword ([]byte (clientSecret ), bcrypt .DefaultCost )
6777 if err != nil {
6878 return "" , err
@@ -394,10 +404,14 @@ func (grant *OAuth2Grant) GenerateNewAuthorizationCode(redirectURI, codeChalleng
394404}
395405
396406func (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 {
399409 return & OAuth2AuthorizationCode {}, err
400410 }
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+
401415 code = & OAuth2AuthorizationCode {
402416 Grant : grant ,
403417 GrantID : grant .ID ,
0 commit comments