summaryrefslogtreecommitdiff
path: root/vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-06-06 15:14:37 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-06-06 15:14:37 +0200
commit77eddea3aff27ffebf53d2341609221d4c1924e7 (patch)
tree27ca0c930f93c12d2e36ea083c6dbf1eef8521b1 /vendor/code.superseriousbusiness.org/oauth2/v4/manage/manager.go
parent[chore] blocklist -> allowlist config typo fix (#4242) (diff)
downloadgotosocial-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.go35
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()