Skip to content

Commit 9291efb

Browse files
authored
Add R6 Screens of ACUL and use list Rendering API (#1225)
1 parent ae5c668 commit 9291efb

7 files changed

+89
-42
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/AlecAivazis/survey/v2 v2.3.7
1010
github.com/PuerkitoBio/rehttp v1.4.0
1111
github.com/atotto/clipboard v0.1.4
12-
github.com/auth0/go-auth0 v1.20.0
12+
github.com/auth0/go-auth0 v1.20.1-0.20250514112557-200204cf984b
1313
github.com/briandowns/spinner v1.23.2
1414
github.com/charmbracelet/glamour v0.10.0
1515
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
@@ -40,7 +40,7 @@ require (
4040
github.com/zalando/go-keyring v0.2.6
4141
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
4242
golang.org/x/net v0.40.0
43-
golang.org/x/oauth2 v0.29.0
43+
golang.org/x/oauth2 v0.30.0
4444
golang.org/x/sync v0.14.0
4545
golang.org/x/sys v0.33.0
4646
golang.org/x/term v0.32.0

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew
2727
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
2828
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
2929
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
30-
github.com/auth0/go-auth0 v1.20.0 h1:qCp5e2Jyeo7Z6vSTAgZqT8kYI6fVFzvT7rUBOtgSrIM=
31-
github.com/auth0/go-auth0 v1.20.0/go.mod h1:inNY8nV/wANajcJ8B/93CLlmXgyMgyuyPXXI4kgd2qY=
30+
github.com/auth0/go-auth0 v1.20.1-0.20250514112557-200204cf984b h1:G4wYJ00EHV6Cu89/rafMKz8FdHN/asnD/REaYINIHWk=
31+
github.com/auth0/go-auth0 v1.20.1-0.20250514112557-200204cf984b/go.mod h1:g9S/4ImupKFx1gSLqeQO0v1yV91Oo5J5bYobLCAL+J4=
3232
github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0 h1:0NmehRCgyk5rljDQLKUO+cRJCnduDyn11+zGZIc9Z48=
3333
github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0/go.mod h1:6L7zgvqo0idzI7IO8de6ZC051AfXb5ipkIJ7bIA2tGA=
3434
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
@@ -297,8 +297,8 @@ golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qx
297297
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
298298
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
299299
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
300-
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
301-
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
300+
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
301+
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
302302
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
303303
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
304304
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

internal/auth0/branding_prompt.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,8 @@ type PromptAPI interface {
4848
//
4949
// See: https://auth0.com/docs/api/management/v2/prompts/patch-rendering
5050
UpdateRendering(ctx context.Context, prompt management.PromptType, screen management.ScreenName, c *management.PromptRendering, opts ...management.RequestOption) error
51+
52+
// ListRendering retrieves the settings for the ACUL.
53+
//
54+
ListRendering(ctx context.Context, opts ...management.RequestOption) (c *management.PromptRenderingList, err error)
5155
}

internal/auth0/mock/branding_prompt_mock.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/cli/terraform_fetcher.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -509,20 +509,18 @@ func (f *promptCustomTextResourceFetcherResourceFetcher) FetchData(ctx context.C
509509
}
510510

511511
func (f *promptScreenRendererResourceFetcher) FetchData(ctx context.Context) (importDataList, error) {
512-
var data importDataList
513-
514-
_, err := f.api.Prompt.ReadRendering(ctx, "login-id", "login-id")
512+
screenSettingList, err := f.api.Prompt.ListRendering(ctx)
515513
if err != nil {
516514
return nil, err
517515
}
518516

519-
for promptType, screenNames := range ScreenPromptMap {
520-
for _, screenName := range screenNames {
521-
data = append(data, importDataItem{
522-
ResourceName: "auth0_prompt_screen_renderer." + sanitizeResourceName(promptType+"_"+screenName),
523-
ImportID: promptType + ":" + screenName,
524-
})
525-
}
517+
var data importDataList
518+
519+
for _, screenSetting := range screenSettingList.PromptRenderings {
520+
data = append(data, importDataItem{
521+
ResourceName: "auth0_prompt_screen_renderer." + sanitizeResourceName(string(*screenSetting.Prompt)+"_"+string(*screenSetting.Screen)),
522+
ImportID: string(*screenSetting.Prompt) + ":" + string(*screenSetting.Screen),
523+
})
526524
}
527525

528526
return data, nil

internal/cli/terraform_fetcher_test.go

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,13 +1486,26 @@ func TestPromptProviderResourceFetcher_FetchData(t *testing.T) {
14861486
}
14871487

14881488
func TestPromptScreenRendererResourceFetcher_FetchData(t *testing.T) {
1489+
var settingList = &management.PromptRenderingList{
1490+
PromptRenderings: []*management.PromptRendering{
1491+
{
1492+
Prompt: (*management.PromptType)(auth0.String("login")),
1493+
Screen: (*management.ScreenName)(auth0.String("login")),
1494+
},
1495+
{
1496+
Prompt: (*management.PromptType)(auth0.String("login-password")),
1497+
Screen: (*management.ScreenName)(auth0.String("login-password")),
1498+
},
1499+
},
1500+
}
1501+
14891502
t.Run("it successfully renders the prompts & screen settings import data", func(t *testing.T) {
14901503
ctrl := gomock.NewController(t)
14911504
defer ctrl.Finish()
14921505

14931506
promptAPI := mock.NewMockPromptAPI(ctrl)
1494-
promptAPI.EXPECT().ReadRendering(gomock.Any(), management.PromptType("login-id"), management.ScreenName("login-id")).
1495-
Return(&management.PromptRendering{}, nil)
1507+
promptAPI.EXPECT().ListRendering(gomock.Any()).
1508+
Return(settingList, nil)
14961509

14971510
fetcher := promptScreenRendererResourceFetcher{
14981511
api: &auth0.API{
@@ -1501,13 +1514,13 @@ func TestPromptScreenRendererResourceFetcher_FetchData(t *testing.T) {
15011514
}
15021515

15031516
expectedData := importDataList{}
1504-
for promptType, screenNames := range ScreenPromptMap {
1505-
for _, screenName := range screenNames {
1506-
expectedData = append(expectedData, importDataItem{
1507-
ResourceName: "auth0_prompt_screen_renderer." + sanitizeResourceName(promptType+"_"+screenName),
1508-
ImportID: promptType + ":" + screenName,
1509-
})
1510-
}
1517+
for _, settings := range settingList.PromptRenderings {
1518+
promptType := string(*settings.Prompt)
1519+
screenName := string(*settings.Screen)
1520+
expectedData = append(expectedData, importDataItem{
1521+
ResourceName: "auth0_prompt_screen_renderer." + sanitizeResourceName(promptType+"_"+screenName),
1522+
ImportID: promptType + ":" + screenName,
1523+
})
15111524
}
15121525

15131526
data, err := fetcher.FetchData(context.Background())
@@ -1519,8 +1532,8 @@ func TestPromptScreenRendererResourceFetcher_FetchData(t *testing.T) {
15191532
defer ctrl.Finish()
15201533

15211534
promptAPI := mock.NewMockPromptAPI(ctrl)
1522-
promptAPI.EXPECT().ReadRendering(gomock.Any(), management.PromptType("login-id"), management.ScreenName("login-id")).
1523-
Return(&management.PromptRendering{}, fmt.Errorf("403 Forbidden: This tenant does not have Advanced Customizations enabled"))
1535+
promptAPI.EXPECT().ListRendering(gomock.Any()).
1536+
Return(nil, fmt.Errorf("403 Forbidden: This tenant does not have Advanced Customizations enabled"))
15241537

15251538
fetcher := promptScreenRendererResourceFetcher{
15261539
api: &auth0.API{
@@ -1537,8 +1550,8 @@ func TestPromptScreenRendererResourceFetcher_FetchData(t *testing.T) {
15371550
defer ctrl.Finish()
15381551

15391552
promptAPI := mock.NewMockPromptAPI(ctrl)
1540-
promptAPI.EXPECT().ReadRendering(gomock.Any(), management.PromptType("login-id"), management.ScreenName("login-id")).
1541-
Return(&management.PromptRendering{}, fmt.Errorf("failed to read rendering settings"))
1553+
promptAPI.EXPECT().ListRendering(gomock.Any()).
1554+
Return(nil, fmt.Errorf("failed to read rendering settings"))
15421555

15431556
fetcher := promptScreenRendererResourceFetcher{
15441557
api: &auth0.API{

internal/cli/universal_login_customize.go

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,19 +118,31 @@ var ScreenPromptMap = map[string][]string{
118118
"captcha": {"interstitial-captcha"},
119119
"login": {"login"},
120120
"signup": {"signup"},
121-
"reset-password": {"reset-password-request", "reset-password-email", "reset-password", "reset-password-success", "reset-password-error", "reset-password-mfa-email-challenge", "reset-password-mfa-otp-challenge", "reset-password-mfa-push-challenge-push", "reset-password-mfa-sms-challenge", "reset-password-mfa-phone-challenge", "reset-password-mfa-voice-challenge", "reset-password-mfa-recovery-code-challenge"},
122-
"mfa": {"mfa-detect-browser-capabilities", "mfa-enroll-result", "mfa-begin-enroll-options", "mfa-login-options"},
123-
"mfa-email": {"mfa-email-challenge", "mfa-email-list"},
124-
"mfa-sms": {"mfa-country-codes", "mfa-sms-challenge", "mfa-sms-enrollment", "mfa-sms-list"},
125-
"mfa-push": {"mfa-push-challenge-push", "mfa-push-enrollment-qr", "mfa-push-list", "mfa-push-welcome"},
126-
"invitation": {"accept-invitation"},
127-
"organizations": {"organization-selection", "organization-picker"},
128-
"mfa-otp": {"mfa-otp-challenge", "mfa-otp-enrollment-code", "mfa-otp-enrollment-qr"},
129-
"device-flow": {"device-code-activation", "device-code-activation-allowed", "device-code-activation-denied", "device-code-confirmation"},
130-
"mfa-phone": {"mfa-phone-challenge", "mfa-phone-enrollment"},
131-
"mfa-voice": {"mfa-voice-challenge", "mfa-voice-enrollment"},
132-
"mfa-recovery-code": {"mfa-recovery-code-challenge", "mfa-recovery-code-enrollment"},
133-
"common": {"redeem-ticket"},
121+
"reset-password": {"reset-password-request", "reset-password-email", "reset-password", "reset-password-success", "reset-password-error",
122+
"reset-password-mfa-email-challenge", "reset-password-mfa-otp-challenge", "reset-password-mfa-push-challenge-push",
123+
"reset-password-mfa-sms-challenge", "reset-password-mfa-phone-challenge", "reset-password-mfa-voice-challenge",
124+
"reset-password-mfa-recovery-code-challenge", "reset-password-mfa-webauthn-platform-challenge", "reset-password-mfa-webauthn-roaming-challenge"},
125+
"mfa": {"mfa-detect-browser-capabilities", "mfa-enroll-result", "mfa-begin-enroll-options", "mfa-login-options"},
126+
"mfa-email": {"mfa-email-challenge", "mfa-email-list"},
127+
"mfa-sms": {"mfa-country-codes", "mfa-sms-challenge", "mfa-sms-enrollment", "mfa-sms-list"},
128+
"mfa-push": {"mfa-push-challenge-push", "mfa-push-enrollment-qr", "mfa-push-list", "mfa-push-welcome"},
129+
"invitation": {"accept-invitation"},
130+
"organizations": {"organization-selection", "organization-picker"},
131+
"mfa-otp": {"mfa-otp-challenge", "mfa-otp-enrollment-code", "mfa-otp-enrollment-qr"},
132+
"device-flow": {"device-code-activation", "device-code-activation-allowed", "device-code-activation-denied", "device-code-confirmation"},
133+
"mfa-phone": {"mfa-phone-challenge", "mfa-phone-enrollment"},
134+
"mfa-voice": {"mfa-voice-challenge", "mfa-voice-enrollment"},
135+
"mfa-recovery-code": {"mfa-recovery-code-challenge", "mfa-recovery-code-enrollment", "mfa-recovery-code-challenge-new-code"},
136+
"common": {"redeem-ticket"},
137+
"consent": {"consent"},
138+
"customized-consent": {"customized-consent"},
139+
"email-otp-challenge": {"email-otp-challenge"},
140+
"email-verification": {"email-verification-result"},
141+
"login-email-verification": {"login-email-verification"},
142+
"logout": {"logout", "logout-aborted", "logout-complete"},
143+
"mfa-webauthn": {"mfa-webauthn-change-key-nickname", "mfa-webauthn-enrollment-success", "mfa-webauthn-error", "mfa-webauthn-not-available-error",
144+
"mfa-webauthn-platform-challenge", "mfa-webauthn-platform-enrollment", "mfa-webauthn-roaming-challenge", "mfa-webauthn-roaming-enrollment"},
145+
"brute-force-protection": {"brute-force-protection-unblock", "brute-force-protection-unblock-failure", "brute-force-protection-unblock-success"},
134146
}
135147

136148
type partialsData map[string]*management.PromptScreenPartials

0 commit comments

Comments
 (0)