Skip to content

Commit f978ad1

Browse files
committed
Make http client to not use resolver if request path is absolute.
Refactored custom token granter interface. Renamed tenancy loader's fx annotation name.
1 parent 986840e commit f978ad1

File tree

9 files changed

+23
-48
lines changed

9 files changed

+23
-48
lines changed

pkg/integrate/httpclient/client.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ import (
2121
"errors"
2222
"fmt"
2323
"github.com/cisco-open/go-lanai/pkg/discovery"
24+
"github.com/cisco-open/go-lanai/pkg/utils"
2425
"github.com/cisco-open/go-lanai/pkg/utils/order"
26+
"net/url"
2527
"time"
2628
)
2729

2830
var (
2931
insecureInstanceMatcher = discovery.InstanceWithTagKV("secure", "false", true)
32+
supportedSchemes = utils.NewStringSet("http", "https")
3033
)
3134

3235
type clientDefaults struct {
@@ -105,17 +108,6 @@ func (c *client) WithBaseUrl(baseUrl string) (Client, error) {
105108
return cp.WithConfig(defaultExtHostConfig()), nil
106109
}
107110

108-
func (c *client) WithNoTargetResolver() (Client, error) {
109-
endpointer, e := NewNoOpTargetResolver()
110-
if e != nil {
111-
return nil, NewNoEndpointFoundError(fmt.Errorf("cannot create client"), e)
112-
}
113-
114-
cp := c.shallowCopy()
115-
cp.resolver = endpointer
116-
return cp.WithConfig(defaultExtHostConfig()), nil
117-
}
118-
119111
func (c *client) WithConfig(config *ClientConfig) Client {
120112
mergeConfig(config, c.config)
121113
cp := c.shallowCopy()
@@ -214,9 +206,13 @@ func (c *client) shallowCopy() *client {
214206

215207
func (c *client) executor(request *Request, resolver TargetResolver, dec DecodeResponseFunc) Retryable {
216208
return func(ctx context.Context) (interface{}, error) {
217-
target, e := resolver.Resolve(ctx, request)
218-
if e != nil {
219-
return nil, e
209+
target, e := url.Parse(request.Path)
210+
// only need to resolve the target if the request.Path is not absolute
211+
if e != nil || !supportedSchemes.Has(target.Scheme) {
212+
target, e = resolver.Resolve(ctx, request)
213+
if e != nil {
214+
return nil, e
215+
}
220216
}
221217

222218
req, e := request.CreateFunc(ctx, request.Method, target)

pkg/integrate/httpclient/client_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,7 @@ func SubTestWithURLEncoded(di *TestDI) test.GomegaSubTestFunc {
394394

395395
func SubTestWithAbsoluteUrl(di *TestDI) test.GomegaSubTestFunc {
396396
return func(ctx context.Context, t *testing.T, g *gomega.WithT) {
397-
client, e := di.HttpClient.WithNoTargetResolver()
398-
g.Expect(e).To(Succeed(), "client without target resolver should be available")
397+
client := di.HttpClient
399398

400399
random := utils.RandomString(20)
401400
now := time.Now().Format(time.RFC3339)

pkg/integrate/httpclient/context.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,7 @@ type Client interface {
4444
// The returned client is responsible to perform retrying.
4545
// The returned client is goroutine-safe and can be reused
4646
WithBaseUrl(baseUrl string) (Client, error)
47-
48-
// WithNoTargetResolver expects the request to contain the absolute url
49-
WithNoTargetResolver() (Client, error)
50-
47+
5148
// WithConfig create a shallow copy of the client with specified config.
5249
// Service (with LB) or BaseURL cannot be changed with this method.
5350
// If any field of provided config is zero value, this value is not applied.

pkg/integrate/httpclient/resolver_static.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,3 @@ func NewStaticTargetResolver(baseUrl string) (TargetResolverFunc, error) {
2424
return &uri, nil
2525
}, nil
2626
}
27-
28-
func NewNoOpTargetResolver() (TargetResolverFunc, error) {
29-
return func(ctx context.Context, req *Request) (*url.URL, error) {
30-
uri, e := url.Parse(req.Path)
31-
return uri, e
32-
}, nil
33-
}

pkg/security/config/authserver/config.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,8 @@ func (c *Configuration) tokenGranter() auth.TokenGranter {
270270

271271
for _, custom := range c.CustomTokenGranter {
272272
switch v := custom.(type) {
273-
case auth.CustomizableTokenGranter:
274-
v.Customize(func(o *auth.TokenGranterOption) {
275-
o.AuthService = c.authorizationService()
276-
})
273+
case auth.AuthorizationServiceInjector:
274+
v.Inject(c.authorizationService())
277275
default:
278276
// do nothing
279277
}

pkg/security/config/testdata/custom_token_granter.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ type CustomTokenGranter struct {
3636
authService auth.AuthorizationService
3737
}
3838

39+
func (c *CustomTokenGranter) Inject(authService auth.AuthorizationService) {
40+
c.authService = authService
41+
}
42+
3943
func NewCustomTokenGranter() auth.TokenGranter {
4044
return &CustomTokenGranter{}
4145
}
@@ -61,11 +65,3 @@ func (c *CustomTokenGranter) Grant(ctx context.Context, request *auth.TokenReque
6165
})
6266
return c.authService.CreateAccessToken(ctx, oauth)
6367
}
64-
65-
func (c *CustomTokenGranter) Customize(options ...func(o *auth.TokenGranterOption)) {
66-
config := &auth.TokenGranterOption{}
67-
for _, opt := range options {
68-
opt(config)
69-
}
70-
c.authService = config.AuthService
71-
}

pkg/security/oauth2/auth/granter.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,8 @@ type TokenGranter interface {
3131
Grant(ctx context.Context, request *TokenRequest) (oauth2.AccessToken, error)
3232
}
3333

34-
type TokenGranterOption struct {
35-
AuthService AuthorizationService
36-
}
37-
38-
type CustomizableTokenGranter interface {
39-
Customize(options ...func(o *TokenGranterOption))
34+
type AuthorizationServiceInjector interface {
35+
Inject(authService AuthorizationService)
4036
}
4137

4238
// CompositeTokenGranter implements TokenGranter

pkg/tenancy/loader/loader_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func TestMain(m *testing.M) {
8383
type testDI struct {
8484
fx.In
8585
DB *gorm.DB `optional:"true"`
86-
InternalLoader Loader `name:"tenant_hierarchy/loader"`
86+
InternalLoader Loader `name:"tenant-hierarchy/loader"`
8787
ClientFactory redis.ClientFactory
8888
AppCtx *bootstrap.ApplicationContext
8989
TestTenantStore *TestTenantStore

pkg/tenancy/loader/package.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ var Module = &bootstrap.Module{
3838
}
3939

4040
const (
41-
fxNameLoader = "tenant_hierarchy/loader"
41+
fxNameLoader = "tenant-hierarchy/loader"
4242
)
4343

4444
func Use() {
@@ -81,7 +81,7 @@ func provideLoader(di loaderDI) Loader {
8181
type initDi struct {
8282
fx.In
8383
AppCtx *bootstrap.ApplicationContext
84-
EffectiveLoader Loader `name:"tenant_hierarchy/loader"`
84+
EffectiveLoader Loader `name:"tenant-hierarchy/loader"`
8585
}
8686

8787
func initializeTenantHierarchy(di initDi) error {

0 commit comments

Comments
 (0)