Skip to content

Commit 9b50176

Browse files
authored
fix: add support for dynamic config url (#1565)
1 parent b5b2c4c commit 9b50176

File tree

12 files changed

+148
-31
lines changed

12 files changed

+148
-31
lines changed

.vscode/launch.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,5 +274,17 @@
274274
"--dir", "./docs/commands"
275275
]
276276
},
277+
{
278+
"name": "request",
279+
"type": "go",
280+
"request": "launch",
281+
"mode": "auto",
282+
"program": "${workspaceFolder}/cmd/rhoas",
283+
"env": {},
284+
"args": [
285+
"request",
286+
"--path", "/api/kafkas_mgmt/v1/sso_providers",
287+
]
288+
},
277289
]
278290
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ require (
2626
github.com/redhat-developer/app-services-sdk-go/accountmgmt v0.1.0
2727
github.com/redhat-developer/app-services-sdk-go/connectormgmt v0.5.0
2828
github.com/redhat-developer/app-services-sdk-go/kafkainstance v0.6.0
29-
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.11.2
29+
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.11.4
3030
github.com/redhat-developer/app-services-sdk-go/registryinstance v0.3.1
3131
github.com/redhat-developer/app-services-sdk-go/registrymgmt v0.6.1
3232
github.com/redhat-developer/service-binding-operator v0.9.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -640,8 +640,8 @@ github.com/redhat-developer/app-services-sdk-go/connectormgmt v0.5.0 h1:cf+K96kW
640640
github.com/redhat-developer/app-services-sdk-go/connectormgmt v0.5.0/go.mod h1:JAedrXf/qLHd7lpOS+bOFh8nrOpp2j0sg4/VG/1um6c=
641641
github.com/redhat-developer/app-services-sdk-go/kafkainstance v0.6.0 h1:ExEHQaihnPNxN2nKXB0q5nrmSv4p8b3Idzt7TChxv+Q=
642642
github.com/redhat-developer/app-services-sdk-go/kafkainstance v0.6.0/go.mod h1:hMpejngP3BFnifCDH1gKRG9cU9Q4lr0WiQaW7A1LYo4=
643-
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.11.2 h1:NhvRB9amMDp/iGOlqcf5KdIUebIre7Vgv79xLPDZ7BA=
644-
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.11.2/go.mod h1:NvNM4Gnw3dPMY6H+fsc1GHWev0ydSGsgjiCP10Bj2/M=
643+
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.11.4 h1:piT2sSsH+gLDYLObUqRtm5Yd8LYDZ/Fl+nCHv5dIvw0=
644+
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.11.4/go.mod h1:NvNM4Gnw3dPMY6H+fsc1GHWev0ydSGsgjiCP10Bj2/M=
645645
github.com/redhat-developer/app-services-sdk-go/registryinstance v0.3.1 h1:xRq5XJzRDs/Z7e/9SDt6zbNRIyesC4LTqN9ajHKwjHo=
646646
github.com/redhat-developer/app-services-sdk-go/registryinstance v0.3.1/go.mod h1:Z/gr/snlpsqYg4vftmcx97vCR3qMQJhALGelDHx4pMA=
647647
github.com/redhat-developer/app-services-sdk-go/registrymgmt v0.6.1 h1:3sUmQ3nAawsYWg7ZCO2Q8HF2J7MW6YA38h/YFL3ao6o=

pkg/cmd/generate/build-configs.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"time"
66

7+
"github.com/redhat-developer/app-services-cli/pkg/cmd/serviceaccount/svcaccountcmdutil"
78
"github.com/redhat-developer/app-services-cli/pkg/core/ioutil/icon"
89
"github.com/redhat-developer/app-services-cli/pkg/core/localize"
910
"github.com/redhat-developer/app-services-cli/pkg/core/servicecontext"
@@ -26,12 +27,10 @@ type configValues struct {
2627
}
2728

2829
func createServiceAccount(opts *options, shortDescription string) (*kafkamgmtclient.ServiceAccount, error) {
29-
3030
conn, err := opts.Connection(connection.DefaultConfigSkipMasAuth)
3131
if err != nil {
3232
return nil, err
3333
}
34-
3534
serviceAccountPayload := kafkamgmtclient.ServiceAccountRequest{Name: shortDescription}
3635

3736
serviceacct, httpRes, err := conn.API().
@@ -63,11 +62,6 @@ func BuildConfiguration(svcConfig *servicecontext.ServiceConfig, opts *options)
6362
ServiceContext: opts.ServiceContext,
6463
}
6564

66-
cfg, err := opts.Config.Load()
67-
if err != nil {
68-
return err
69-
}
70-
7165
configurations := &configValues{}
7266

7367
var serviceAvailable bool
@@ -106,9 +100,19 @@ func BuildConfiguration(svcConfig *servicecontext.ServiceConfig, opts *options)
106100
opts.localizer.MustLocalize("serviceAccount.create.log.info.createdSuccessfully", localize.NewEntry("ID", serviceAccount.GetId())),
107101
)
108102

103+
conn, err := opts.Connection(connection.DefaultConfigSkipMasAuth)
104+
if err != nil {
105+
return err
106+
}
107+
108+
providerUrls, err := svcaccountcmdutil.GetProvidersDetails(conn, opts.Context)
109+
if err != nil {
110+
return err
111+
}
112+
109113
configurations.ClientID = serviceAccount.GetClientId()
110114
configurations.ClientSecret = serviceAccount.GetClientSecret()
111-
configurations.TokenURL = cfg.MasAuthURL + "/protocol/openid-connect/token"
115+
configurations.TokenURL = providerUrls.GetTokenUrl()
112116
configurations.Name = configInstanceName
113117

114118
if err = WriteConfig(opts.configType, opts.fileName, configurations); err != nil {

pkg/cmd/kafka/create/data.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,19 @@ func GetValidKafkaSizes(f *factory.Factory,
6060
if desiredInstanceType == DeveloperType {
6161
for _, instanceType := range instanceTypes.GetInstanceTypes() {
6262
if desiredInstanceType == instanceType.GetId() {
63-
for _, instanceSize := range instanceType.GetSizes() {
64-
validSizes = append(validSizes, instanceSize.GetId())
63+
instanceSizes := instanceType.GetSizes()
64+
for i := range instanceSizes {
65+
validSizes = append(validSizes, instanceSizes[i].GetId())
6566
}
6667
}
6768
}
6869
} else {
6970
for _, instanceType := range instanceTypes.GetInstanceTypes() {
7071
if desiredInstanceType == instanceType.GetId() {
71-
for _, instanceSize := range instanceType.GetSizes() {
72-
if instanceSize.GetQuotaConsumed() <= int32(amsType.Quota) {
73-
validSizes = append(validSizes, instanceSize.GetId())
72+
instanceSizes := instanceType.GetSizes()
73+
for i := range instanceSizes {
74+
if instanceSizes[i].GetQuotaConsumed() <= int32(amsType.Quota) {
75+
validSizes = append(validSizes, instanceSizes[i].GetId())
7476
}
7577
}
7678
}

pkg/cmd/login/login.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ func runLogin(opts *options) (err error) {
167167
ctx, cancel := context.WithTimeout(context.Background(), build.DefaultLoginTimeout)
168168
defer cancel()
169169

170-
if err = loginExec.Execute(ctx, ssoCfg, masSsoCfg); err != nil {
170+
if err = loginExec.Execute(ctx, ssoCfg, masSsoCfg, gatewayURL.String()); err != nil {
171171
spinner.Stop()
172172
opts.Logger.Info()
173173
if errors.Is(err, context.DeadlineExceeded) {

pkg/cmd/serviceaccount/create/create.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ func runCreate(opts *options) error {
105105
if err != nil {
106106
return err
107107
}
108-
cfg, err := opts.Config.Load()
109-
if err != nil {
110-
return err
111-
}
112108

113109
if opts.interactive {
114110
// run the create command interactively
@@ -134,6 +130,11 @@ func runCreate(opts *options) error {
134130
// create the service account
135131
serviceAccountPayload := kafkamgmtclient.ServiceAccountRequest{Name: opts.shortDescription}
136132

133+
providerUrls, err := svcaccountcmdutil.GetProvidersDetails(conn, opts.Context)
134+
if err != nil {
135+
return err
136+
}
137+
137138
serviceacct, httpRes, err := conn.API().
138139
ServiceAccountMgmt().
139140
CreateServiceAccount(opts.Context).
@@ -154,7 +155,7 @@ func runCreate(opts *options) error {
154155
creds := &credentials.Credentials{
155156
ClientID: serviceacct.GetClientId(),
156157
ClientSecret: serviceacct.GetClientSecret(),
157-
TokenURL: cfg.MasAuthURL + "/protocol/openid-connect/token",
158+
TokenURL: providerUrls.GetTokenUrl(),
158159
}
159160

160161
// save the credentials to a file

pkg/cmd/serviceaccount/resetcredentials/reset_credentials.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ func runResetCredentials(opts *options) (err error) {
116116
if err != nil {
117117
return err
118118
}
119+
119120
if opts.interactive {
120121
err = runInteractivePrompt(opts)
121122
if err != nil {
@@ -156,15 +157,12 @@ func runResetCredentials(opts *options) (err error) {
156157

157158
opts.Logger.Info(icon.SuccessPrefix(), opts.localizer.MustLocalize("serviceAccount.resetCredentials.log.info.resetSuccess", localize.NewEntry("ID", updatedServiceAccount.GetId())))
158159

159-
cfg, err := opts.Config.Load()
160-
if err != nil {
161-
return err
162-
}
160+
providerUrls, err := svcaccountcmdutil.GetProvidersDetails(conn, opts.Context)
163161

164162
creds := &credentials.Credentials{
165163
ClientID: updatedServiceAccount.GetClientId(),
166164
ClientSecret: updatedServiceAccount.GetClientSecret(),
167-
TokenURL: cfg.MasAuthURL + "/protocol/openid-connect/token",
165+
TokenURL: providerUrls.GetTokenUrl(),
168166
}
169167

170168
// save the credentials to a file
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,29 @@
11
package svcaccountcmdutil
22

3-
import "github.com/redhat-developer/app-services-cli/pkg/cmd/serviceaccount/svcaccountcmdutil/credentials"
3+
import (
4+
"context"
5+
6+
"github.com/redhat-developer/app-services-cli/pkg/cmd/serviceaccount/svcaccountcmdutil/credentials"
7+
"github.com/redhat-developer/app-services-cli/pkg/shared/connection"
8+
kafkamgmtclient "github.com/redhat-developer/app-services-sdk-go/kafkamgmt/apiv1/client"
9+
)
410

511
var (
612
CredentialsOutputFormats = []string{credentials.EnvFormat, credentials.JSONFormat, credentials.PropertiesFormat}
713
)
14+
15+
// Method fetches authentication details for providers
16+
func GetProvidersDetails(conn connection.Connection, context context.Context) (*kafkamgmtclient.SsoProvider, error) {
17+
providers, httpRes, err := conn.API().
18+
ServiceAccountMgmt().GetSsoProviders(context).Execute()
19+
20+
if httpRes != nil {
21+
defer httpRes.Body.Close()
22+
}
23+
24+
if err != nil {
25+
return nil, err
26+
}
27+
28+
return &providers, err
29+
}

pkg/core/auth/login/login.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/redhat-developer/app-services-cli/pkg/core/ioutil/iostreams"
1414
"github.com/redhat-developer/app-services-cli/pkg/core/localize"
1515
"github.com/redhat-developer/app-services-cli/pkg/core/logging"
16+
"github.com/redhat-developer/app-services-cli/pkg/shared/hacks"
1617

1718
"github.com/coreos/go-oidc/v3/oidc"
1819
"github.com/phayes/freeport"
@@ -39,11 +40,16 @@ type SSOConfig struct {
3940
// Execute runs an Authorization Code flow login
4041
// enabling the user to log in to SSO and MAS-SSO in succession
4142
// https://tools.ietf.org/html/rfc6749#section-4.1
42-
func (a *AuthorizationCodeGrant) Execute(ctx context.Context, ssoCfg *SSOConfig, masSSOCfg *SSOConfig) error {
43+
func (a *AuthorizationCodeGrant) Execute(ctx context.Context,
44+
ssoCfg *SSOConfig, masSSOCfg *SSOConfig, apiUrl string) error {
4345
if err := a.loginSSO(ctx, ssoCfg); err != nil {
4446
return err
4547
}
4648

49+
if !hacks.ShouldUseMasSSO(a.Logger, apiUrl) {
50+
return nil
51+
}
52+
4753
masSSOHost := masSSOCfg.AuthURL.Host
4854

4955
a.Logger.Debug(a.Localizer.MustLocalize("login.log.info.loggingInMAS", localize.NewEntry("Host", masSSOHost)))

0 commit comments

Comments
 (0)