diff options
| author | 2025-06-06 15:14:37 +0200 | |
|---|---|---|
| committer | 2025-06-06 15:14:37 +0200 | |
| commit | 77eddea3aff27ffebf53d2341609221d4c1924e7 (patch) | |
| tree | 27ca0c930f93c12d2e36ea083c6dbf1eef8521b1 /vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go | |
| parent | [chore] blocklist -> allowlist config typo fix (#4242) (diff) | |
| download | gotosocial-77eddea3aff27ffebf53d2341609221d4c1924e7.tar.xz | |
[chore] updates code.superseriousbusiness.org/oauth2/v4 to ssb-v4.5.3-1 (#4245)
A brief note on the above change: Go does not seem to like version tagging outside of `v?[0-9\.]` formatting, so it translates `ssb-v4.5.3-1` to `v4.5.4-0.20250606121655-9d54ef189d42` and as such sees it as a "downgrade" compared to the previous `v4.9.0`. which functionally isn't a problem, everything still behaves as it should, but it means people can't just run `go get repo@latest` for this particular dependency.
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4245
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go')
| -rw-r--r-- | vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go b/vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go index db9aba614..0c2d8a48a 100644 --- a/vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go +++ b/vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go @@ -2,6 +2,7 @@ package manage import ( "context" + "net/url" "time" "code.superseriousbusiness.org/oauth2/v4" @@ -34,6 +35,7 @@ type Manager struct { gtcfg map[oauth2.GrantType]*Config rcfg *RefreshingConfig validateURI ValidateURIHandler + extractExtension ExtractExtensionHandler authorizeGenerate oauth2.AuthorizeGenerate accessGenerate oauth2.AccessGenerate tokenStore oauth2.TokenStore @@ -93,6 +95,11 @@ func (m *Manager) SetValidateURIHandler(handler ValidateURIHandler) { m.validateURI = handler } +// SetExtractExtensionHandler set the token extension extractor +func (m *Manager) SetExtractExtensionHandler(handler ExtractExtensionHandler) { + m.extractExtension = handler +} + // MapAuthorizeGenerate mapping the authorize code generate interface func (m *Manager) MapAuthorizeGenerate(gen oauth2.AuthorizeGenerate) { m.authorizeGenerate = gen @@ -152,6 +159,9 @@ func (m *Manager) GenerateAuthToken(ctx context.Context, rt oauth2.ResponseType, } ti := models.NewToken() + if m.extractExtension != nil { + m.extractExtension(tgr, ti) + } ti.SetClientID(tgr.ClientID) ti.SetUserID(tgr.UserID) ti.SetRedirectURI(tgr.RedirectURI) @@ -296,6 +306,12 @@ func (m *Manager) GenerateAccessToken(ctx context.Context, gt oauth2.GrantType, } } + if gt == oauth2.ClientCredentials && cli.IsPublic() == true { + return nil, errors.ErrInvalidClient + } + + var extension url.Values + if gt == oauth2.AuthorizationCode { ti, err := m.getAndDelAuthorizationCode(ctx, tgr) if err != nil { @@ -309,9 +325,16 @@ func (m *Manager) GenerateAccessToken(ctx context.Context, gt oauth2.GrantType, if exp := ti.GetAccessExpiresIn(); exp > 0 { tgr.AccessTokenExp = exp } + if eti, ok := ti.(oauth2.ExtendableTokenInfo); ok { + extension = eti.GetExtension() + } } ti := models.NewToken() + ti.SetExtension(extension) + if m.extractExtension != nil { + m.extractExtension(tgr, ti) + } ti.SetClientID(tgr.ClientID) ti.SetUserID(tgr.UserID) ti.SetRedirectURI(tgr.RedirectURI) @@ -360,22 +383,14 @@ func (m *Manager) GenerateAccessToken(ctx context.Context, gt oauth2.GrantType, // RefreshAccessToken refreshing an access token func (m *Manager) RefreshAccessToken(ctx context.Context, tgr *oauth2.TokenGenerateRequest) (oauth2.TokenInfo, error) { - cli, err := m.GetClient(ctx, tgr.ClientID) + ti, err := m.LoadRefreshToken(ctx, tgr.Refresh) if err != nil { return nil, err - } else if cliPass, ok := cli.(oauth2.ClientPasswordVerifier); ok { - if !cliPass.VerifyPassword(tgr.ClientSecret) { - return nil, errors.ErrInvalidClient - } - } else if tgr.ClientSecret != cli.GetSecret() { - return nil, errors.ErrInvalidClient } - ti, err := m.LoadRefreshToken(ctx, tgr.Refresh) + cli, err := m.GetClient(ctx, ti.GetClientID()) if err != nil { return nil, err - } else if ti.GetClientID() != tgr.ClientID { - return nil, errors.ErrInvalidRefreshToken } oldAccess, oldRefresh := ti.GetAccess(), ti.GetRefresh() |
