Skip to content

Commit 553cd30

Browse files
Merge pull request #148 from sailpoint-oss/devrel-1394
Fix keyring issue, ensure keyring values are cleaned up when the envi…
2 parents 81e5c39 + c428163 commit 553cd30

File tree

4 files changed

+156
-61
lines changed

4 files changed

+156
-61
lines changed

cmd/environment/delete.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ func newDeleteCommand() *cobra.Command {
2828
delete(environments, environmentName)
2929
viper.Set("environments", environments)
3030

31+
config.DeleteOAuthToken(environmentName)
32+
config.DeleteOAuthTokenExpiry(environmentName)
33+
config.DeleteRefreshToken(environmentName)
34+
config.DeleteRefreshTokenExpiry(environmentName)
35+
config.DeletePatToken(environmentName)
36+
config.DeletePatTokenExpiry(environmentName)
37+
config.DeletePatClientID(environmentName)
38+
config.DeletePatClientSecret(environmentName)
39+
3140
if len(environments) == 0 {
3241
config.SetActiveEnvironment("")
3342
} else {
@@ -37,12 +46,6 @@ func newDeleteCommand() *cobra.Command {
3746
}
3847
}
3948

40-
config.DeleteOAuthToken()
41-
config.DeleteOAuthTokenExpiry()
42-
config.DeleteRefreshToken()
43-
config.DeleteRefreshTokenExpiry()
44-
config.DeletePatToken()
45-
config.DeletePatTokenExpiry()
4649
log.Info("Environment successfully deleted", "environment", environmentName)
4750
}
4851
} else {
@@ -62,6 +65,15 @@ func newDeleteCommand() *cobra.Command {
6265
delete(environments, env)
6366
viper.Set("environments", environments)
6467

68+
config.DeleteOAuthToken("")
69+
config.DeleteOAuthTokenExpiry("")
70+
config.DeleteRefreshToken("")
71+
config.DeleteRefreshTokenExpiry("")
72+
config.DeletePatToken("")
73+
config.DeletePatTokenExpiry("")
74+
config.DeletePatClientID("")
75+
config.DeletePatClientSecret("")
76+
6577
if len(environments) == 0 {
6678
config.SetActiveEnvironment("")
6779
} else {
@@ -70,14 +82,6 @@ func newDeleteCommand() *cobra.Command {
7082
break
7183
}
7284
}
73-
74-
config.DeleteOAuthToken()
75-
config.DeleteOAuthTokenExpiry()
76-
config.DeleteRefreshToken()
77-
config.DeleteRefreshTokenExpiry()
78-
config.DeletePatToken()
79-
config.DeletePatTokenExpiry()
80-
8185
}
8286
} else {
8387
log.Warn("No environments configured")

internal/config/oauth.go

Lines changed: 56 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,20 @@ type TokenSet struct {
4343
RefreshExpiry time.Time
4444
}
4545

46-
func DeleteOAuthToken() error {
47-
err := keyring.Delete("environments.auth.accesstoken", GetActiveEnvironment())
48-
if err != nil {
49-
return err
46+
func DeleteOAuthToken(env string) error {
47+
if env != "" {
48+
err := keyring.Delete("environments.oauth.accesstoken", env)
49+
if err != nil {
50+
return err
51+
}
52+
return nil
53+
} else {
54+
err := keyring.Delete("environments.oauth.accesstoken", GetActiveEnvironment())
55+
if err != nil {
56+
return err
57+
}
58+
return nil
5059
}
51-
return nil
5260
}
5361

5462
func GetOAuthToken() (string, error) {
@@ -67,12 +75,20 @@ func SetOAuthToken(token string) error {
6775
return nil
6876
}
6977

70-
func DeleteOAuthTokenExpiry() error {
71-
err := keyring.Delete("environments.oauth.expiry", GetActiveEnvironment())
72-
if err != nil {
73-
return err
78+
func DeleteOAuthTokenExpiry(env string) error {
79+
if env != "" {
80+
err := keyring.Delete("environments.oauth.expiry", env)
81+
if err != nil {
82+
return err
83+
}
84+
return nil
85+
} else {
86+
err := keyring.Delete("environments.oauth.expiry", GetActiveEnvironment())
87+
if err != nil {
88+
return err
89+
}
90+
return nil
7491
}
75-
return nil
7692
}
7793

7894
func GetOAuthTokenExpiry() (time.Time, error) {
@@ -98,12 +114,20 @@ func SetOAuthTokenExpiry(expiry time.Time) error {
98114
return nil
99115
}
100116

101-
func DeleteRefreshToken() error {
102-
err := keyring.Delete("environments.oauth.refreshtoken", GetActiveEnvironment())
103-
if err != nil {
104-
return err
117+
func DeleteRefreshToken(env string) error {
118+
if env != "" {
119+
err := keyring.Delete("environments.oauth.refreshtoken", env)
120+
if err != nil {
121+
return err
122+
}
123+
return nil
124+
} else {
125+
err := keyring.Delete("environments.oauth.refreshtoken", GetActiveEnvironment())
126+
if err != nil {
127+
return err
128+
}
129+
return nil
105130
}
106-
return nil
107131
}
108132

109133
func GetRefreshToken() (string, error) {
@@ -127,15 +151,20 @@ func SetRefreshToken(token string) error {
127151

128152
}
129153

130-
func DeleteRefreshTokenExpiry() error {
131-
132-
err := keyring.Delete("environments.oauth.refreshexpiry", GetActiveEnvironment())
133-
if err != nil {
134-
return err
154+
func DeleteRefreshTokenExpiry(env string) error {
155+
if env != "" {
156+
err := keyring.Delete("environments.oauth.refreshexpiry", env)
157+
if err != nil {
158+
return err
159+
}
160+
return nil
161+
} else {
162+
err := keyring.Delete("environments.oauth.refreshexpiry", GetActiveEnvironment())
163+
if err != nil {
164+
return err
165+
}
166+
return nil
135167
}
136-
137-
return nil
138-
139168
}
140169

141170
func GetOAuthRefreshExpiry() (time.Time, error) {
@@ -182,22 +211,22 @@ const (
182211
)
183212

184213
func ResetCacheOAuth() error {
185-
err := DeleteOAuthToken()
214+
err := DeleteOAuthToken("")
186215
if err != nil {
187216
return err
188217
}
189218

190-
err = DeleteOAuthTokenExpiry()
219+
err = DeleteOAuthTokenExpiry("")
191220
if err != nil {
192221
return err
193222
}
194223

195-
err = DeleteRefreshToken()
224+
err = DeleteRefreshToken("")
196225
if err != nil {
197226
return err
198227
}
199228

200-
err = DeleteRefreshTokenExpiry()
229+
err = DeleteRefreshTokenExpiry("")
201230
if err != nil {
202231
return err
203232
}

internal/config/pat.go

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ func ResetCachePAT() error {
3838
token, err := GetPatToken()
3939
if token != "" && err == nil {
4040

41-
err = DeletePatToken()
41+
err = DeletePatToken("")
4242
if err != nil {
4343
return err
4444
}
4545
}
4646

4747
expiry, err := GetPatTokenExpiry()
4848
if !expiry.IsZero() && err == nil {
49-
err = DeletePatTokenExpiry()
49+
err = DeletePatTokenExpiry("")
5050
if err != nil {
5151
return err
5252
}
@@ -71,12 +71,20 @@ func CachePAT(set PATSet) error {
7171
return nil
7272
}
7373

74-
func DeletePatToken() error {
75-
err := keyring.Delete("environments.pat.accesstoken", GetActiveEnvironment())
76-
if err != nil {
77-
return err
74+
func DeletePatToken(env string) error {
75+
if env != "" {
76+
err := keyring.Delete("environments.pat.accesstoken", env)
77+
if err != nil {
78+
return err
79+
}
80+
return nil
81+
} else {
82+
err := keyring.Delete("environments.pat.accesstoken", GetActiveEnvironment())
83+
if err != nil {
84+
return err
85+
}
86+
return nil
7887
}
79-
return nil
8088
}
8189

8290
func GetPatToken() (string, error) {
@@ -95,12 +103,20 @@ func SetPatToken(token string) error {
95103
return nil
96104
}
97105

98-
func DeletePatTokenExpiry() error {
99-
err := keyring.Delete("environments.pat.expiry", GetActiveEnvironment())
100-
if err != nil {
101-
return err
106+
func DeletePatTokenExpiry(env string) error {
107+
if env != "" {
108+
err := keyring.Delete("environments.pat.expiry", env)
109+
if err != nil {
110+
return err
111+
}
112+
return nil
113+
} else {
114+
err := keyring.Delete("environments.pat.expiry", GetActiveEnvironment())
115+
if err != nil {
116+
return err
117+
}
118+
return nil
102119
}
103-
return nil
104120
}
105121

106122
func GetPatTokenExpiry() (time.Time, error) {
@@ -147,6 +163,22 @@ func GetPatClientID() (string, error) {
147163
}
148164
}
149165

166+
func DeletePatClientID(env string) error {
167+
if env != "" {
168+
err := keyring.Delete("environments.pat.clientid", env)
169+
if err != nil {
170+
return err
171+
}
172+
return nil
173+
} else {
174+
err := keyring.Delete("environments.pat.clientid", GetActiveEnvironment())
175+
if err != nil {
176+
return err
177+
}
178+
return nil
179+
}
180+
}
181+
150182
func GetClientSecret(env string) (string, error) {
151183
value, err := keyring.Get("environments.pat.clientsecret", env)
152184
if err != nil {
@@ -156,6 +188,22 @@ func GetClientSecret(env string) (string, error) {
156188
return value, nil
157189
}
158190

191+
func DeletePatClientSecret(env string) error {
192+
if env != "" {
193+
err := keyring.Delete("environments.pat.clientsecret", env)
194+
if err != nil {
195+
return err
196+
}
197+
return nil
198+
} else {
199+
err := keyring.Delete("environments.pat.clientsecret", GetActiveEnvironment())
200+
if err != nil {
201+
return err
202+
}
203+
return nil
204+
}
205+
}
206+
159207
func GetPatClientSecret() (string, error) {
160208
envSecret := os.Getenv("SAIL_CLIENT_SECRET")
161209
if envSecret != "" {

internal/util/util.go

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,19 @@ func ParseHelp(help string) Help {
7575
return helpObj
7676
}
7777

78+
79+
func getTextBetween(url, start, end string) string {
80+
startIndex := strings.Index(url, start)
81+
if startIndex == -1 {
82+
return ""
83+
}
84+
endIndex := strings.Index(url[startIndex+len(start):], end)
85+
if endIndex == -1 {
86+
return ""
87+
}
88+
return url[startIndex+len(start) : startIndex+len(start)+endIndex]
89+
}
90+
7891
func CreateOrUpdateEnvironment(environmentName string, update bool) error {
7992
environments := config.GetEnvironments()
8093

@@ -93,10 +106,10 @@ func CreateOrUpdateEnvironment(environmentName string, update bool) error {
93106

94107
tenant := ""
95108

96-
if update && environmentName != "" {
109+
if update && environmentName == "" {
97110
tenant = terminal.InputPrompt("Tenant Name (ie: https://{tenant}.identitynow.com): (" + config.GetActiveEnvironment() + ")")
98111
} else if update {
99-
tenant = terminal.InputPrompt("Tenant Name (ie: https://{tenant}.identitynow.com): (" + viper.GetString("environments."+environmentName+".tenanturl") + ")")
112+
tenant = terminal.InputPrompt("Tenant Name (ie: https://{tenant}.identitynow.com): (" + getTextBetween(viper.GetString("environments."+environmentName+".tenanturl"), "//", ".") + ")")
100113
} else {
101114
tenant = terminal.InputPrompt("Tenant Name (ie: https://{tenant}.identitynow.com): (" + environmentName + ")")
102115
}
@@ -141,6 +154,13 @@ func CreateOrUpdateEnvironment(environmentName string, update bool) error {
141154
return err
142155
}
143156

157+
fmt.Print("\n\nEnvironment Name:" + environmentName + "\n\n")
158+
if environmentName != "" {
159+
config.SetActiveEnvironment(environmentName)
160+
} else {
161+
config.SetActiveEnvironment(tenant)
162+
}
163+
144164
err = config.SetPatClientSecret(ClientSecret)
145165
if err != nil {
146166
return err
@@ -151,12 +171,6 @@ func CreateOrUpdateEnvironment(environmentName string, update bool) error {
151171
return err
152172
}
153173

154-
if environmentName != "" {
155-
config.SetActiveEnvironment(environmentName)
156-
} else {
157-
config.SetActiveEnvironment(tenant)
158-
}
159-
160174
config.SetTenantUrl(tenantUrl)
161175
config.SetBaseUrl(baseUrl)
162176
config.SetAuthType(authType)

0 commit comments

Comments
 (0)