@@ -313,13 +313,13 @@ func readAuthConfig(ctx context.Context, state *SettingsResourceModel, client *a
313313 return diag.Diagnostics {diag .NewErrorDiagnostic ("Client Error" , msg )}
314314 }
315315 // API treats sensitive fields as write-only
316- var body api. AuthConfigResponse
316+ var body LocalAuthConfig
317317 if ! state .Auth .IsNull () {
318318 if diags := state .Auth .Unmarshal (& body ); diags .HasError () {
319319 return diags
320320 }
321321 }
322- httpResp .JSON200 . SmtpPass = body . SmtpPass
322+ body . overrideSensitiveFields ( httpResp .JSON200 )
323323 if state .Auth , err = parseConfig (state .Auth , * httpResp .JSON200 ); err != nil {
324324 msg := fmt .Sprintf ("Unable to read auth settings, got error: %s" , err )
325325 return diag.Diagnostics {diag .NewErrorDiagnostic ("Client Error" , msg )}
@@ -343,7 +343,8 @@ func updateAuthConfig(ctx context.Context, plan *SettingsResourceModel, client *
343343 return diag.Diagnostics {diag .NewErrorDiagnostic ("Client Error" , msg )}
344344 }
345345 // Copy over sensitive fields from TF plan
346- httpResp .JSON200 .SmtpPass = body .SmtpPass
346+ local := LocalAuthConfig {UpdateAuthConfigBody : body }
347+ local .overrideSensitiveFields (httpResp .JSON200 )
347348
348349 if plan .Auth , err = parseConfig (plan .Auth , * httpResp .JSON200 ); err != nil {
349350 msg := fmt .Sprintf ("Unable to update auth settings, got error: %s" , err )
@@ -439,6 +440,50 @@ func copyConfig(source any, target map[string]interface{}) {
439440 }
440441}
441442
443+ type LocalAuthConfig struct {
444+ api.UpdateAuthConfigBody
445+ }
446+
447+ func (c LocalAuthConfig ) overrideSensitiveFields (resp * api.AuthConfigResponse ) {
448+ // Email provider secrets
449+ resp .SmtpPass = c .SmtpPass
450+ // SMS provider secrets
451+ resp .SmsTwilioAuthToken = c .SmsTwilioAuthToken
452+ resp .SmsTwilioVerifyAuthToken = c .SmsTwilioVerifyAuthToken
453+ resp .SmsMessagebirdAccessKey = c .SmsMessagebirdAccessKey
454+ resp .SmsTextlocalApiKey = c .SmsTextlocalApiKey
455+ resp .SmsVonageApiSecret = c .SmsVonageApiSecret
456+ // Captcha provider secrets
457+ resp .SecurityCaptchaSecret = c .SecurityCaptchaSecret
458+ // External provider secrets
459+ resp .ExternalAppleSecret = c .ExternalAppleSecret
460+ resp .ExternalAzureSecret = c .ExternalAzureSecret
461+ resp .ExternalBitbucketSecret = c .ExternalBitbucketSecret
462+ resp .ExternalDiscordSecret = c .ExternalDiscordSecret
463+ resp .ExternalFacebookSecret = c .ExternalFacebookSecret
464+ resp .ExternalFigmaSecret = c .ExternalFigmaSecret
465+ resp .ExternalGithubSecret = c .ExternalGithubSecret
466+ resp .ExternalGitlabSecret = c .ExternalGitlabSecret
467+ resp .ExternalGoogleSecret = c .ExternalGoogleSecret
468+ resp .ExternalKakaoSecret = c .ExternalKakaoSecret
469+ resp .ExternalKeycloakSecret = c .ExternalKeycloakSecret
470+ resp .ExternalLinkedinOidcSecret = c .ExternalLinkedinOidcSecret
471+ resp .ExternalNotionSecret = c .ExternalNotionSecret
472+ resp .ExternalSlackOidcSecret = c .ExternalSlackOidcSecret
473+ resp .ExternalSlackSecret = c .ExternalSlackSecret
474+ resp .ExternalSpotifySecret = c .ExternalSpotifySecret
475+ resp .ExternalTwitchSecret = c .ExternalTwitchSecret
476+ resp .ExternalTwitterSecret = c .ExternalTwitterSecret
477+ resp .ExternalWorkosSecret = c .ExternalWorkosSecret
478+ resp .ExternalZoomSecret = c .ExternalZoomSecret
479+ // Hook provider secrets
480+ resp .HookCustomAccessTokenSecrets = c .HookCustomAccessTokenSecrets
481+ resp .HookMfaVerificationAttemptSecrets = c .HookMfaVerificationAttemptSecrets
482+ resp .HookPasswordVerificationAttemptSecrets = c .HookPasswordVerificationAttemptSecrets
483+ resp .HookSendEmailSecrets = c .HookSendEmailSecrets
484+ resp .HookSendSmsSecrets = c .HookSendSmsSecrets
485+ }
486+
442487type NetworkConfig struct {
443488 Restrictions []string `json:"restrictions,omitempty"`
444489}
0 commit comments