Skip to content

Commit 82f7b0b

Browse files
committed
chore: refactoring ready for review
- Unit tests passing - Regenerated many mocks which caused file deletes - Strategy providers in place - Unit test rework (heavy & surgical)
1 parent dfdec8e commit 82f7b0b

File tree

98 files changed

+3244
-1481
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+3244
-1481
lines changed

compose/compose.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ func ComposeAllEnabled(config *fosite.Config, storage fosite.Storage, key interf
7070
config,
7171
storage,
7272
&CommonStrategy{
73-
CoreStrategy: NewOAuth2HMACStrategy(config),
74-
RFC8628CodeStrategy: NewDeviceStrategy(config),
75-
OpenIDConnectTokenStrategy: NewOpenIDConnectStrategy(keyGetter, config),
73+
coreStrategy: NewOAuth2HMACStrategy(config),
74+
rfc8628CodeStrategy: NewDeviceStrategy(config),
75+
openIDConnectTokenStrategy: NewOpenIDConnectStrategy(keyGetter, config),
7676
Signer: &jwt.DefaultSigner{GetPrivateKey: keyGetter},
7777
},
7878
OAuth2AuthorizeExplicitFactory,

compose/compose_oauth2.go

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ func OAuth2RefreshTokenGrantFactory(config fosite.Configurator, storage fosite.S
5959
// an access token, refresh token and authorize code validator.
6060
func OAuth2AuthorizeImplicitFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
6161
return &oauth2.AuthorizeImplicitGrantHandler{
62-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategyProvider),
63-
AccessTokenStorage: storage.(oauth2.AccessTokenStorageProvider),
64-
Config: config,
62+
Strategy: strategy.(oauth2.AccessTokenStrategyProvider),
63+
Storage: storage.(oauth2.AccessTokenStorageProvider),
64+
Config: config,
6565
}
6666
}
6767

@@ -73,33 +73,43 @@ func OAuth2AuthorizeImplicitFactory(config fosite.Configurator, storage fosite.S
7373
// is discouraged see: https://www.scottbrady91.com/oauth/why-the-resource-owner-password-credentials-grant-type-is-not-authentication-nor-suitable-for-modern-applications
7474
func OAuth2ResourceOwnerPasswordCredentialsFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
7575
return &oauth2.ResourceOwnerPasswordCredentialsGrantHandler{
76-
ResourceOwnerPasswordCredentialsGrantStorage: storage.(oauth2.ResourceOwnerPasswordCredentialsGrantStorage),
77-
HandleHelper: &oauth2.HandleHelper{
78-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
79-
Storage: storage.(oauth2.AccessTokenStorageProvider),
80-
Config: config,
81-
},
82-
RefreshTokenStrategy: strategy.(oauth2.RefreshTokenStrategy),
83-
Config: config,
76+
Strategy: strategy.(interface {
77+
oauth2.AccessTokenStrategyProvider
78+
oauth2.RefreshTokenStrategyProvider
79+
}),
80+
Storage: storage.(oauth2.ResourceOwnerPasswordCredentialsGrantStorage),
81+
Config: config,
8482
}
8583
}
8684

8785
// OAuth2TokenRevocationFactory creates an OAuth2 token revocation handler.
8886
func OAuth2TokenRevocationFactory(_ fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
8987
return &oauth2.TokenRevocationHandler{
90-
TokenRevocationStorage: storage.(oauth2.TokenRevocationStorageProvider),
91-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
92-
RefreshTokenStrategy: strategy.(oauth2.RefreshTokenStrategy),
88+
Strategy: strategy.(interface {
89+
oauth2.AccessTokenStrategyProvider
90+
oauth2.RefreshTokenStrategyProvider
91+
}),
92+
Storage: storage.(interface {
93+
oauth2.AccessTokenStorageProvider
94+
oauth2.RefreshTokenStorageProvider
95+
oauth2.TokenRevocationStorageProvider
96+
}),
9397
}
9498
}
9599

96100
// OAuth2TokenIntrospectionFactory creates an OAuth2 token introspection handler and registers
97101
// an access token and refresh token validator.
98102
func OAuth2TokenIntrospectionFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
99103
return &oauth2.CoreValidator{
100-
CoreStrategy: strategy.(oauth2.CoreStrategy),
101-
CoreStorage: storage.(oauth2.CoreStorage),
102-
Config: config,
104+
Strategy: strategy.(interface {
105+
oauth2.AccessTokenStrategyProvider
106+
oauth2.RefreshTokenStrategyProvider
107+
}),
108+
Storage: storage.(interface {
109+
oauth2.AccessTokenStorageProvider
110+
oauth2.RefreshTokenStorageProvider
111+
}),
112+
Config: config,
103113
}
104114
}
105115

compose/compose_openid.go

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import (
1616
// **Important note:** You must add this handler *after* you have added an OAuth2 authorize code handler!
1717
func OpenIDConnectExplicitFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
1818
return &openid.ExplicitHandler{
19-
Storage: storage.(openid.OIDCRequestStorageProvider),
19+
Storage: storage.(openid.OpenIDConnectRequestStorageProvider),
2020
IDTokenHandleHelper: &openid.IDTokenHandleHelper{
21-
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategy),
21+
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategyProvider),
2222
},
2323
OpenIDConnectRequestValidator: openid.NewOpenIDConnectRequestValidator(strategy.(jwt.Signer), config),
2424
Config: config,
@@ -31,7 +31,7 @@ func OpenIDConnectExplicitFactory(config fosite.Configurator, storage fosite.Sto
3131
func OpenIDConnectRefreshFactory(config fosite.Configurator, _ fosite.Storage, strategy interface{}) interface{} {
3232
return &openid.OpenIDConnectRefreshHandler{
3333
IDTokenHandleHelper: &openid.IDTokenHandleHelper{
34-
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategy),
34+
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategyProvider),
3535
},
3636
Config: config,
3737
}
@@ -43,13 +43,13 @@ func OpenIDConnectRefreshFactory(config fosite.Configurator, _ fosite.Storage, s
4343
func OpenIDConnectImplicitFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
4444
return &openid.OpenIDConnectImplicitHandler{
4545
AuthorizeImplicitGrantTypeHandler: &oauth2.AuthorizeImplicitGrantHandler{
46-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
47-
AccessTokenStorage: storage.(oauth2.AccessTokenStorageProvider),
48-
Config: config,
46+
Strategy: strategy.(oauth2.AccessTokenStrategyProvider),
47+
Storage: storage.(oauth2.AccessTokenStorageProvider),
48+
Config: config,
4949
},
5050
Config: config,
5151
IDTokenHandleHelper: &openid.IDTokenHandleHelper{
52-
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategy),
52+
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategyProvider),
5353
},
5454
OpenIDConnectRequestValidator: openid.NewOpenIDConnectRequestValidator(strategy.(jwt.Signer), config),
5555
}
@@ -61,22 +61,29 @@ func OpenIDConnectImplicitFactory(config fosite.Configurator, storage fosite.Sto
6161
func OpenIDConnectHybridFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
6262
return &openid.OpenIDConnectHybridHandler{
6363
AuthorizeExplicitGrantHandler: &oauth2.AuthorizeExplicitGrantHandler{
64-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
65-
RefreshTokenStrategy: strategy.(oauth2.RefreshTokenStrategy),
66-
AuthorizeCodeStrategy: strategy.(oauth2.AuthorizeCodeStrategy),
67-
Storage: storage.(oauth2.CoreStorage),
68-
Config: config,
64+
Strategy: strategy.(interface {
65+
oauth2.AuthorizeCodeStrategyProvider
66+
oauth2.AccessTokenStrategyProvider
67+
oauth2.RefreshTokenStrategyProvider
68+
}),
69+
Storage: storage.(interface {
70+
oauth2.AuthorizeCodeStorageProvider
71+
oauth2.AccessTokenStorageProvider
72+
oauth2.RefreshTokenStorageProvider
73+
oauth2.TokenRevocationStorageProvider
74+
}),
75+
Config: config,
6976
},
7077
Config: config,
7178
AuthorizeImplicitGrantHandler: &oauth2.AuthorizeImplicitGrantHandler{
72-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
73-
AccessTokenStorage: storage.(oauth2.AccessTokenStorageProvider),
74-
Config: config,
79+
Strategy: strategy.(oauth2.AccessTokenStrategyProvider),
80+
Storage: storage.(oauth2.AccessTokenStorageProvider),
81+
Config: config,
7582
},
7683
IDTokenHandleHelper: &openid.IDTokenHandleHelper{
77-
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategy),
84+
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategyProvider),
7885
},
79-
OpenIDConnectRequestStorage: storage.(openid.OIDCRequestStorageProvider),
86+
OpenIDConnectRequestStorage: storage.(openid.OpenIDConnectRequestStorageProvider),
8087
OpenIDConnectRequestValidator: openid.NewOpenIDConnectRequestValidator(strategy.(jwt.Signer), config),
8188
}
8289
}
@@ -86,11 +93,11 @@ func OpenIDConnectHybridFactory(config fosite.Configurator, storage fosite.Stora
8693
// **Important note:** You must add this handler *after* you have added an OAuth2 device authorization handler!
8794
func OpenIDConnectDeviceFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
8895
return &openid.OpenIDConnectDeviceHandler{
89-
OpenIDConnectRequestStorage: storage.(openid.OIDCRequestStorageProvider),
96+
Storage: storage.(openid.OpenIDConnectRequestStorageProvider),
9097
IDTokenHandleHelper: &openid.IDTokenHandleHelper{
91-
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategy),
98+
IDTokenStrategy: strategy.(openid.OpenIDConnectTokenStrategyProvider),
9299
},
93-
DeviceCodeStrategy: strategy.(rfc8628.DeviceCodeStrategy),
94-
Config: config,
100+
Strategy: strategy.(rfc8628.DeviceCodeStrategyProvider),
101+
Config: config,
95102
}
96103
}

compose/compose_par.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
// PushedAuthorizeHandlerFactory creates the basic PAR handler
1212
func PushedAuthorizeHandlerFactory(config fosite.Configurator, storage fosite.Storage, _ interface{}) interface{} {
1313
return &par.PushedAuthorizeHandler{
14-
Storage: storage.(par.StorageProvider),
14+
Storage: storage.(fosite.PARStorageProvider),
1515
Config: config,
1616
}
1717
}

compose/compose_pkce.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
// OAuth2PKCEFactory creates a PKCE handler.
1313
func OAuth2PKCEFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
1414
return &pkce.Handler{
15-
Strategy: strategy.(oauth2.AuthorizeCodeStrategy),
15+
Strategy: strategy.(oauth2.AuthorizeCodeStrategyProvider),
1616
Storage: storage.(pkce.PKCERequestStorageProvider),
1717
Config: config,
1818
}

compose/compose_rfc7523.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@ import (
1313
// and registers an access token, refresh token and authorize code validator.
1414
func RFC7523AssertionGrantFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
1515
return &rfc7523.Handler{
16-
Storage: storage.(rfc7523.RFC7523KeyStorage),
17-
HandleHelper: &oauth2.HandleHelper{
18-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
19-
Storage: storage.(oauth2.AccessTokenStorageProvider),
20-
Config: config,
21-
},
16+
Strategy: strategy.(oauth2.AccessTokenStrategyProvider),
17+
Storage: storage.(interface {
18+
oauth2.AccessTokenStorageProvider
19+
rfc7523.RFC7523KeyStorageProvider
20+
}),
2221
Config: config,
2322
}
2423
}

compose/compose_rfc8628.go

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,37 @@ import (
1515
// a user code, device code, access token and a refresh token validator.
1616
func RFC8628DeviceFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
1717
return &rfc8628.DeviceAuthHandler{
18-
Strategy: strategy.(rfc8628.RFC8628CodeStrategy),
19-
Storage: storage.(rfc8628.Storage),
20-
Config: config,
18+
Strategy: strategy.(interface {
19+
rfc8628.DeviceRateLimitStrategyProvider
20+
rfc8628.DeviceCodeStrategyProvider
21+
rfc8628.UserCodeStrategyProvider
22+
}),
23+
Storage: storage.(interface {
24+
rfc8628.DeviceAuthStorageProvider
25+
oauth2.AccessTokenStorageProvider
26+
oauth2.RefreshTokenStorageProvider
27+
}),
28+
Config: config,
2129
}
2230
}
2331

2432
// RFC8628DeviceAuthorizationTokenFactory creates an OAuth2 device authorization grant ("Device Authorization Grant") handler and registers
2533
// an access token, refresh token and authorize code validator.
2634
func RFC8628DeviceAuthorizationTokenFactory(config fosite.Configurator, storage fosite.Storage, strategy interface{}) interface{} {
2735
return &rfc8628.DeviceCodeTokenEndpointHandler{
28-
DeviceRateLimitStrategy: strategy.(rfc8628.DeviceRateLimitStrategy),
29-
DeviceCodeStrategy: strategy.(rfc8628.DeviceCodeStrategy),
30-
UserCodeStrategy: strategy.(rfc8628.UserCodeStrategy),
31-
AccessTokenStrategy: strategy.(oauth2.AccessTokenStrategy),
32-
RefreshTokenStrategy: strategy.(oauth2.RefreshTokenStrategy),
33-
CoreStorage: storage.(rfc8628.Storage),
34-
TokenRevocationStorage: storage.(oauth2.TokenRevocationStorageProvider),
35-
Config: config,
36+
Strategy: strategy.(interface {
37+
rfc8628.DeviceRateLimitStrategyProvider
38+
rfc8628.DeviceCodeStrategyProvider
39+
rfc8628.UserCodeStrategyProvider
40+
oauth2.AccessTokenStrategyProvider
41+
oauth2.RefreshTokenStrategyProvider
42+
}),
43+
Storage: storage.(interface {
44+
rfc8628.DeviceAuthStorageProvider
45+
oauth2.AccessTokenStorageProvider
46+
oauth2.RefreshTokenStorageProvider
47+
oauth2.TokenRevocationStorageProvider
48+
}),
49+
Config: config,
3650
}
3751
}

compose/compose_strategy.go

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,41 @@ import (
1515
)
1616

1717
type CommonStrategy struct {
18-
oauth2.AuthorizeCodeStrategyProvider
19-
oauth2.AccessTokenStrategyProvider
20-
oauth2.RefreshTokenStrategyProvider
18+
coreStrategy *oauth2.HMACSHAStrategy
19+
rfc8628CodeStrategy *rfc8628.DefaultDeviceStrategy
20+
openIDConnectTokenStrategy *openid.DefaultStrategy
21+
jwt.Signer
22+
}
23+
24+
// OAuth2 Strategy Providers
25+
func (s *CommonStrategy) AuthorizeCodeStrategy() oauth2.AuthorizeCodeStrategy {
26+
return s.coreStrategy
27+
}
2128

22-
openid.OpenIDConnectTokenStrategy
29+
func (s *CommonStrategy) AccessTokenStrategy() oauth2.AccessTokenStrategy {
30+
return s.coreStrategy
31+
}
2332

24-
rfc8628.DeviceRateLimitStrategyProvider
25-
rfc8628.DeviceCodeStrategyProvider
26-
rfc8628.UserCodeStrategyProvider
33+
func (s *CommonStrategy) RefreshTokenStrategy() oauth2.RefreshTokenStrategy {
34+
return s.coreStrategy
35+
}
2736

28-
jwt.Signer
37+
// OpenID Strategy Provider
38+
func (s *CommonStrategy) OpenIDConnectTokenStrategy() openid.OpenIDConnectTokenStrategy {
39+
return s.openIDConnectTokenStrategy
40+
}
41+
42+
// RFC8628 Device Strategy Providers
43+
func (s *CommonStrategy) DeviceRateLimitStrategy() rfc8628.DeviceRateLimitStrategy {
44+
return s.rfc8628CodeStrategy
45+
}
46+
47+
func (s *CommonStrategy) DeviceCodeStrategy() rfc8628.DeviceCodeStrategy {
48+
return s.rfc8628CodeStrategy
49+
}
50+
51+
func (s *CommonStrategy) UserCodeStrategy() rfc8628.UserCodeStrategy {
52+
return s.rfc8628CodeStrategy
2953
}
3054

3155
type HMACSHAStrategyConfigurator interface {
@@ -43,11 +67,14 @@ func NewOAuth2HMACStrategy(config HMACSHAStrategyConfigurator) *oauth2.HMACSHASt
4367
return oauth2.NewHMACSHAStrategy(&hmac.HMACStrategy{Config: config}, config)
4468
}
4569

46-
func NewOAuth2JWTStrategy(keyGetter func(context.Context) (interface{}, error), strategy oauth2.CoreStrategy, config fosite.Configurator) *oauth2.DefaultJWTStrategy {
70+
func NewOAuth2JWTStrategy(keyGetter func(context.Context) (interface{}, error), strategy interface{}, config fosite.Configurator) *oauth2.DefaultJWTStrategy {
4771
return &oauth2.DefaultJWTStrategy{
48-
Signer: &jwt.DefaultSigner{GetPrivateKey: keyGetter},
49-
Strategy: strategy,
50-
Config: config,
72+
Signer: &jwt.DefaultSigner{GetPrivateKey: keyGetter},
73+
Strategy: strategy.(interface {
74+
oauth2.AuthorizeCodeStrategyProvider
75+
oauth2.RefreshTokenStrategyProvider
76+
}),
77+
Config: config,
5178
}
5279
}
5380

0 commit comments

Comments
 (0)