From 72d5bdf7966c29304e1db79c9664a569d238b74d Mon Sep 17 00:00:00 2001 From: Kunal Dawar Date: Wed, 6 Nov 2024 13:27:54 +0530 Subject: [PATCH] Add support for ACUL Endpoints in PromptManager --- management/prompt.go | 189 +++++++++++++ management/prompt_test.go | 68 +++++ .../TestPromptManager_ReadACULSettings.yaml | 216 +++++++++++++++ .../TestPromptManager_UpdateACULSettings.yaml | 252 ++++++++++++++++++ 4 files changed, 725 insertions(+) create mode 100644 test/data/recordings/TestPromptManager_ReadACULSettings.yaml create mode 100644 test/data/recordings/TestPromptManager_UpdateACULSettings.yaml diff --git a/management/prompt.go b/management/prompt.go index 45c68857..ea0049ee 100644 --- a/management/prompt.go +++ b/management/prompt.go @@ -27,6 +27,87 @@ const ( // PromptLoginPasswordLess represents the login-passwordless prompt. PromptLoginPasswordLess PromptType = "login-passwordless" + + // PromptLoginEmailVerification represents the login-email-verification prompt. + PromptLoginEmailVerification PromptType = "login-email-verification" + + // PromptPhoneIdentifierEnrollment represents the phone-identifier-enrollment prompt. + PromptPhoneIdentifierEnrollment PromptType = "phone-identifier-enrollment" + + // PromptPhoneIdentifierChallenge represents the phone-identifier-challenge prompt. + PromptPhoneIdentifierChallenge PromptType = "phone-identifier-challenge" + + // PromptEmailIdentifierChallenge represents the email-identifier-challenge prompt. + PromptEmailIdentifierChallenge PromptType = "email-identifier-challenge" + + // PromptResetPassword represents the reset-password prompt. + PromptResetPassword PromptType = "reset-password" + + // PromptCustomForm represents the custom-form prompt. + PromptCustomForm PromptType = "custom-form" + + // PromptConsent represents the consent prompt. + PromptConsent PromptType = "consent" + + // PromptCustomizedConsent represents the customized-consent prompt. + PromptCustomizedConsent PromptType = "customized-consent" + + // PromptLogout represents the logout prompt. + PromptLogout PromptType = "logout" + + // PromptMFAPush represents the mfa-push prompt. + PromptMFAPush PromptType = "mfa-push" + + // PromptMFAOTP represents the mfa-otp prompt. + PromptMFAOTP PromptType = "mfa-otp" + + // PromptMFAVoice represents the mfa-voice prompt. + PromptMFAVoice PromptType = "mfa-voice" + + // PromptMFAPhone represents the mfa-phone prompt. + PromptMFAPhone PromptType = "mfa-phone" + + // PromptMFAWebAuthn represents the mfa-webauthn prompt. + PromptMFAWebAuthn PromptType = "mfa-webauthn" + + // PromptMFASMS represents the mfa-sms prompt. + PromptMFASMS PromptType = "mfa-sms" + + // PromptMFAEmail represents the mfa-email prompt. + PromptMFAEmail PromptType = "mfa-email" + + // PromptMFARecoveryCode represents the mfa-recovery-code prompt. + PromptMFARecoveryCode PromptType = "mfa-recovery-code" + + // PromptMFA represents the mfa prompt. + PromptMFA PromptType = "mfa" + + // PromptStatus represents the status prompt. + PromptStatus PromptType = "status" + + // PromptDeviceFlow represents the device-flow prompt. + PromptDeviceFlow PromptType = "device-flow" + + // PromptEmailVerification represents the email-verification prompt. + PromptEmailVerification PromptType = "email-verification" + + // PromptEmailOTPChallenge represents the email-otp-challenge prompt. + PromptEmailOTPChallenge PromptType = "email-otp-challenge" + + // PromptOrganizations represents the organizations prompt. + PromptOrganizations PromptType = "organizations" + + // PromptInvitation represents the invitation prompt. + PromptInvitation PromptType = "invitation" + + // PromptCommon represents the common prompt. + PromptCommon PromptType = "common" + + // PromptPasskeys represents the passkeys prompt. + PromptPasskeys PromptType = "passkeys" + + // PromptCaptcha represents the captcha prompt. + PromptCaptcha PromptType = "captcha" ) var allowedPromptsWithPartials = []PromptType{ @@ -72,6 +153,72 @@ const ( // ScreenLoginPasswordlessEmailCode represents the login-passwordless-email-code screen. ScreenLoginPasswordlessEmailCode ScreenName = "login-passwordless-email-code" + + // ScreenLoginPasswordlessEmailLink represents the login-passwordless-email-link screen. + ScreenLoginPasswordlessEmailLink ScreenName = "login-passwordless-email-link" + + // ScreenLoginEmailVerification represents the login-email-verification screen. + ScreenLoginEmailVerification ScreenName = "login-email-verification" + + // ScreenPhoneIdentifierEnrollment represents the phone-identifier-enrollment screen. + ScreenPhoneIdentifierEnrollment ScreenName = "phone-identifier-enrollment" + + // ScreenPhoneIdentifierChallenge represents the phone-identifier-challenge screen. + ScreenPhoneIdentifierChallenge ScreenName = "phone-identifier-challenge" + + // ScreenEmailIdentifierChallenge represents the email-identifier-challenge screen. + ScreenEmailIdentifierChallenge ScreenName = "email-identifier-challenge" + + // ScreenResetPasswordRequest represents the reset-password-request screen. + ScreenResetPasswordRequest ScreenName = "reset-password-request" + + // ScreenResetPasswordEmail represents the reset-password-email screen. + ScreenResetPasswordEmail ScreenName = "reset-password-email" + + // ScreenResetPassword represents the reset-password screen. + ScreenResetPassword ScreenName = "reset-password" + + // ScreenResetPasswordSuccess represents the reset-password-success screen. + ScreenResetPasswordSuccess ScreenName = "reset-password-success" + + // ScreenResetPasswordError represents the reset-password-error screen. + ScreenResetPasswordError ScreenName = "reset-password-error" + + // ScreenCustomForm represents the custom-form screen. + ScreenCustomForm ScreenName = "custom-form" + + // ScreenConsent represents the consent screen. + ScreenConsent ScreenName = "consent" + + // ScreenCustomizedConsent represents the customized-consent screen. + ScreenCustomizedConsent ScreenName = "customized-consent" + + // ScreenLogout represents the logout screen. + ScreenLogout ScreenName = "logout" + + // ScreenMFAPushWelcome represents the mfa-push-welcome screen. + ScreenMFAPushWelcome ScreenName = "mfa-push-welcome" + + // ScreenMFAPushEnrollmentQR represents the mfa-push-enrollment-qr screen. + ScreenMFAPushEnrollmentQR ScreenName = "mfa-push-enrollment-qr" + + // ScreenMFAPushEnrollmentCode represents the mfa-push-enrollment-code screen. + ScreenMFAPushEnrollmentCode ScreenName = "mfa-push-enrollment-code" + + // ScreenMFAPushSuccess represents the mfa-push-success screen. + ScreenMFAPushSuccess ScreenName = "mfa-push-success" + + // ScreenMFAPushChallengePush represents the mfa-push-challenge-push screen. + ScreenMFAPushChallengePush ScreenName = "mfa-push-challenge-push" + + // ScreenMFAOTPChallenge represents the mfa-otp-challenge screen. + ScreenMFAOTPChallenge ScreenName = "mfa-otp-challenge" + + // ScreenDeviceCodeActivation represents the device-code-activation screen. + ScreenDeviceCodeActivation ScreenName = "device-code-activation" + + // ScreenPasskeyEnrollment represents the passkey-enrollment screen. + ScreenPasskeyEnrollment ScreenName = "passkey-enrollment" ) const ( @@ -133,6 +280,33 @@ type PromptPartials struct { Prompt PromptType `json:"-"` } +// PromptACULSettings is used to retrieve and set the settings for the ACUL. +type PromptACULSettings struct { + Tenant *string `json:"tenant,omitempty"` + Prompt *string `json:"prompt,omitempty"` + Screen *string `json:"screen,omitempty"` + RenderingMode *string `json:"rendering_mode,omitempty"` + ContextConfiguration *[]string `json:"context_configuration,omitempty"` + DefaultHeadTagsDisabled *bool `json:"default_head_tags_disabled,omitempty"` + HeadTags []interface{} `json:"head_tags,omitempty"` +} + +// MarshalJSON implements a custom [json.Marshaler]. +func (c *PromptACULSettings) MarshalJSON() ([]byte, error) { + type ACULSettingsSubSet struct { + RenderMode *string `json:"rendering_mode,omitempty"` + ContextConfiguration *[]string `json:"context_configuration,omitempty"` + DefaultHeadTagsDisabled *bool `json:"default_head_tags_disabled,omitempty"` + HeadTags []interface{} `json:"head_tags,omitempty"` + } + return json.Marshal(&ACULSettingsSubSet{ + RenderMode: c.RenderingMode, + ContextConfiguration: c.ContextConfiguration, + DefaultHeadTagsDisabled: c.DefaultHeadTagsDisabled, + HeadTags: c.HeadTags, + }) +} + // MarshalJSON implements a custom [json.Marshaler]. func (c *PromptPartials) MarshalJSON() ([]byte, error) { body := map[string]PromptPartials{ @@ -289,3 +463,18 @@ func guardAgainstPromptTypesWithNoPartials(prompt PromptType) error { return fmt.Errorf("cannot customize partials for prompt: %q", prompt) } + +// ReadACULSettings retrieves the settings for the ACUL. +// +// See: https://auth0.com/docs/api/management/v2#!/Prompts/get_acul +func (m *PromptManager) ReadACULSettings(ctx context.Context, prompt PromptType, screen ScreenName, opts ...RequestOption) (c *PromptACULSettings, err error) { + err = m.management.Request(ctx, "GET", m.management.URI("prompts", string(prompt), "screen", string(screen), "rendering"), &c, opts...) + return +} + +// UpdateACULSettings updates the settings for the ACUL. +// +// See: https://auth0.com/docs/api/management/v2#!/Prompts/patch_acul +func (m *PromptManager) UpdateACULSettings(ctx context.Context, prompt PromptType, screen ScreenName, c *PromptACULSettings, opts ...RequestOption) error { + return m.management.Request(ctx, "PATCH", m.management.URI("prompts", string(prompt), "screen", string(screen), "rendering"), c, opts...) +} diff --git a/management/prompt_test.go b/management/prompt_test.go index 95d9fe05..ec01579d 100644 --- a/management/prompt_test.go +++ b/management/prompt_test.go @@ -127,6 +127,45 @@ func TestPromptManager_SetPartials(t *testing.T) { assert.Equal(t, expected, actual) } +func TestPromptManager_ReadACULSettings(t *testing.T) { + configureHTTPTestRecordings(t) + + _ = givenACustomDomain(t) + _ = givenAUniversalLoginTemplate(t) + expected := givenAACULSettings(t) + actual, err := api.Prompt.ReadACULSettings(context.Background(), PromptSignup, ScreenSignup) + assert.NoError(t, err) + assert.Equal(t, expected.RenderingMode, actual.RenderingMode) + assert.Equal(t, expected.ContextConfiguration, actual.ContextConfiguration) + assert.Equal(t, expected.DefaultHeadTagsDisabled, actual.DefaultHeadTagsDisabled) + assert.Equal(t, expected.HeadTags, actual.HeadTags) + assert.Equal(t, string(PromptSignup), *actual.Prompt) + assert.Equal(t, string(ScreenSignup), *actual.Screen) +} + +func TestPromptManager_UpdateACULSettings(t *testing.T) { + configureHTTPTestRecordings(t) + + _ = givenACustomDomain(t) + _ = givenAUniversalLoginTemplate(t) + expected := givenAACULSettings(t) + expected.RenderingMode = auth0.String("standard") + expected.ContextConfiguration = &[]string{"branding.settings", "branding.themes.default", "client.logo_uri"} + expected.DefaultHeadTagsDisabled = auth0.Bool(true) + + err := api.Prompt.UpdateACULSettings(context.Background(), PromptSignup, ScreenSignup, expected) + assert.NoError(t, err) + + actual, err := api.Prompt.ReadACULSettings(context.Background(), PromptSignup, ScreenSignup) + assert.NoError(t, err) + assert.Equal(t, expected.RenderingMode, actual.RenderingMode) + assert.Equal(t, expected.ContextConfiguration, actual.ContextConfiguration) + assert.Equal(t, expected.DefaultHeadTagsDisabled, actual.DefaultHeadTagsDisabled) + assert.Equal(t, expected.HeadTags, actual.HeadTags) + assert.Equal(t, string(PromptSignup), *actual.Prompt) + assert.Equal(t, string(ScreenSignup), *actual.Screen) +} + func TestPromptManager_GetPartialsGuardGuardError(t *testing.T) { configureHTTPTestRecordings(t) @@ -293,6 +332,35 @@ func givenAPartialPrompt(t *testing.T, prompt PromptType) *PromptScreenPartials return partials } +func givenAACULSettings(t *testing.T) *PromptACULSettings { + t.Helper() + + settings := &PromptACULSettings{ + RenderingMode: auth0.String("advanced"), + ContextConfiguration: &[]string{"branding.settings", "branding.themes.default"}, + DefaultHeadTagsDisabled: auth0.Bool(false), + HeadTags: []interface{}{ + map[string]interface{}{ + "tag": "script", + "content": "", + "attributes": map[string]interface{}{ + "defer": true, + "src": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js", + "async": true, + "integrity": []string{ + "sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==", + }, + }, + }, + }, + } + + err := api.Prompt.UpdateACULSettings(context.Background(), PromptSignup, ScreenSignup, settings) + assert.NoError(t, err) + + return settings +} + func cleanupPromptPartials(t *testing.T, prompt PromptType) { t.Helper() diff --git a/test/data/recordings/TestPromptManager_ReadACULSettings.yaml b/test/data/recordings/TestPromptManager_ReadACULSettings.yaml new file mode 100644 index 00000000..2338c155 --- /dev/null +++ b/test/data/recordings/TestPromptManager_ReadACULSettings.yaml @@ -0,0 +1,216 @@ +--- +version: 2 +interactions: + - id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 93 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"domain":"1730879337.auth.uat.auth0.com","type":"auth0_managed_certs","tls_policy":"recommended"} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/custom-domains + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 328 + uncompressed: false + body: '{"custom_domain_id":"cd_DeGXfsUqhbchzKf5","domain":"1730879337.auth.uat.auth0.com","primary":true,"status":"pending_verification","type":"auth0_managed_certs","verification":{"methods":[{"name":"CNAME","record":"go-auth0-dev.eu.auth0.com-cd-degxfsuqhbchzkf5.edge.tenants.us.auth0.com","domain":"1730879337.auth.uat.auth0.com"}]},"tls_policy":"recommended"}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 201 Created + code: 201 + duration: 974.35075ms + - id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 165 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + "\u003c!DOCTYPE html\u003e\u003chtml\u003e\u003chead\u003e{%- auth0:head -%}\u003c/head\u003e\u003cbody\u003e{%- auth0:widget -%}\u003c/body\u003e\u003c/html\u003e" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/branding/templates/universal-login + method: PUT + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 2 + uncompressed: false + body: '{}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 201 Created + code: 201 + duration: 2.793827583s + - id: 2 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 408 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"rendering_mode":"advanced","context_configuration":["branding.settings","branding.themes.default"],"default_head_tags_disabled":false,"head_tags":[{"attributes":{"async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="],"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"},"content":"","tag":"script"}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/prompts/signup/screen/signup/rendering + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"rendering_mode":"advanced","context_configuration":["branding.settings","branding.themes.default"],"default_head_tags_disabled":false,"head_tags":[{"attributes":{"async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="],"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"},"content":"","tag":"script"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 353.726833ms + - id: 3 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/prompts/signup/screen/signup/rendering + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"tenant":"go-auth0-dev.eu.auth0.com","prompt":"signup","screen":"signup","rendering_mode":"advanced","context_configuration":["branding.settings","branding.themes.default"],"default_head_tags_disabled":false,"head_tags":[{"tag":"script","content":"","attributes":{"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js","async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="]}}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 348.886583ms + - id: 4 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/branding/templates/universal-login + method: DELETE + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 0 + uncompressed: false + body: "" + headers: + Content-Type: + - application/json; charset=utf-8 + status: 204 No Content + code: 204 + duration: 760.373ms + - id: 5 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/custom-domains/cd_DeGXfsUqhbchzKf5 + method: DELETE + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 0 + uncompressed: false + body: "" + headers: + Content-Type: + - application/json; charset=utf-8 + status: 204 No Content + code: 204 + duration: 370.957958ms diff --git a/test/data/recordings/TestPromptManager_UpdateACULSettings.yaml b/test/data/recordings/TestPromptManager_UpdateACULSettings.yaml new file mode 100644 index 00000000..9ed05789 --- /dev/null +++ b/test/data/recordings/TestPromptManager_UpdateACULSettings.yaml @@ -0,0 +1,252 @@ +--- +version: 2 +interactions: + - id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 93 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"domain":"1730879370.auth.uat.auth0.com","type":"auth0_managed_certs","tls_policy":"recommended"} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/custom-domains + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 328 + uncompressed: false + body: '{"custom_domain_id":"cd_rNXkRgJuAbM6W9fC","domain":"1730879370.auth.uat.auth0.com","primary":true,"status":"pending_verification","type":"auth0_managed_certs","verification":{"methods":[{"name":"CNAME","record":"go-auth0-dev.eu.auth0.com-cd-rnxkrgjuabm6w9fc.edge.tenants.us.auth0.com","domain":"1730879370.auth.uat.auth0.com"}]},"tls_policy":"recommended"}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 201 Created + code: 201 + duration: 1.414983666s + - id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 165 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + "\u003c!DOCTYPE html\u003e\u003chtml\u003e\u003chead\u003e{%- auth0:head -%}\u003c/head\u003e\u003cbody\u003e{%- auth0:widget -%}\u003c/body\u003e\u003c/html\u003e" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/branding/templates/universal-login + method: PUT + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 2 + uncompressed: false + body: '{}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 201 Created + code: 201 + duration: 2.783077583s + - id: 2 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 408 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"rendering_mode":"advanced","context_configuration":["branding.settings","branding.themes.default"],"default_head_tags_disabled":false,"head_tags":[{"attributes":{"async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="],"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"},"content":"","tag":"script"}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/prompts/signup/screen/signup/rendering + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"rendering_mode":"advanced","context_configuration":["branding.settings","branding.themes.default"],"default_head_tags_disabled":false,"head_tags":[{"attributes":{"async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="],"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"},"content":"","tag":"script"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 383.213625ms + - id: 3 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 425 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: | + {"rendering_mode":"standard","context_configuration":["branding.settings","branding.themes.default","client.logo_uri"],"default_head_tags_disabled":true,"head_tags":[{"attributes":{"async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="],"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"},"content":"","tag":"script"}]} + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/prompts/signup/screen/signup/rendering + method: PATCH + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"rendering_mode":"standard","context_configuration":["branding.settings","branding.themes.default","client.logo_uri"],"default_head_tags_disabled":true,"head_tags":[{"attributes":{"async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="],"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"},"content":"","tag":"script"}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 408.439167ms + - id: 4 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/prompts/signup/screen/signup/rendering + method: GET + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: -1 + uncompressed: true + body: '{"tenant":"go-auth0-dev.eu.auth0.com","prompt":"signup","screen":"signup","rendering_mode":"standard","context_configuration":["branding.settings","branding.themes.default","client.logo_uri"],"default_head_tags_disabled":true,"head_tags":[{"tag":"script","content":"","attributes":{"src":"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js","async":true,"defer":true,"integrity":["sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="]}}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 338.8935ms + - id: 5 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/branding/templates/universal-login + method: DELETE + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 0 + uncompressed: false + body: "" + headers: + Content-Type: + - application/json; charset=utf-8 + status: 204 No Content + code: 204 + duration: 426.412916ms + - id: 6 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: go-auth0-dev.eu.auth0.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Content-Type: + - application/json + User-Agent: + - Go-Auth0/1.11.2 + url: https://go-auth0-dev.eu.auth0.com/api/v2/custom-domains/cd_rNXkRgJuAbM6W9fC + method: DELETE + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + transfer_encoding: [] + trailer: {} + content_length: 0 + uncompressed: false + body: "" + headers: + Content-Type: + - application/json; charset=utf-8 + status: 204 No Content + code: 204 + duration: 458.251375ms