diff --git a/console/src/app/modules/card/card.component.scss b/console/src/app/modules/card/card.component.scss index a7b2d7eb1e..97beb36b84 100644 --- a/console/src/app/modules/card/card.component.scss +++ b/console/src/app/modules/card/card.component.scss @@ -1,6 +1,6 @@ .card { margin: 1rem 0; - padding: 1.5rem; + padding: 1rem 1.5rem; border-radius: 0.5rem; padding-top: 1rem; min-width: 300px; diff --git a/console/src/app/modules/idp-create/idp-create.component.html b/console/src/app/modules/idp-create/idp-create.component.html index 7538be8a48..7b3eee5af6 100644 --- a/console/src/app/modules/idp-create/idp-create.component.html +++ b/console/src/app/modules/idp-create/idp-create.component.html @@ -1,156 +1,179 @@ -
-
- - {{ 'IDP.CREATE.TITLE' | translate }}Step - {{ currentCreateStep }} of - {{ createSteps }} -
- -

{{'IDP.CREATE.TITLE' | translate}}

- - - - -

{{'IDP.CREATE.DESCRIPTION' | translate}}

- - - - -
- +
+
+
+ + {{ 'IDP.CREATE.TITLE' | translate }}Step {{ currentCreateStep }} of {{ createSteps }}
- - -

{{'IDP.OIDC.DESCRIPTION' | translate}}

+
+

{{ 'IDP.CREATE.TITLE' | translate }}

-
-
- - {{ 'IDP.NAME' | translate }} - - - - {{ 'IDP.ISSUER' | translate }} - - -
+ - -
-

{{'IDP.AUTOREGISTER_DESC' | translate}}

- - {{'IDP.AUTOREGISTER' | translate}} - + +

{{ 'IDP.CREATE.DESCRIPTION' | translate }}

+ + + + +
+
- +
-
- - {{ 'IDP.CLIENTID' | translate }} - - - - {{ 'IDP.CLIENTSECRET' | translate }} - - -
-
- - {{ 'IDP.SCOPESLIST' | translate }} - - - {{scope}} cancel - - - - -
-
- - {{ 'IDP.IDPDISPLAYNAMMAPPING' | translate }} - - - {{ 'IDP.MAPPINGFIELD.'+field | translate }} - - - - - {{ 'IDP.USERNAMEMAPPING' | translate }} - - - {{ 'IDP.MAPPINGFIELD.'+field | translate }} - - - -
+ +

{{ 'IDP.OIDC.DESCRIPTION' | translate }}

-
- - -
- -
+
+
+ + {{ 'IDP.NAME' | translate }} + + + + {{ 'IDP.ISSUER' | translate }} + + +
- -

{{'IDP.JWT.DESCRIPTION' | translate}}

+ +
+

{{ 'IDP.AUTOREGISTER_DESC' | translate }}

+ + {{ 'IDP.AUTOREGISTER' | translate }} + +
+
- -
- - {{ 'IDP.NAME' | translate }} - - - - {{ 'IDP.JWT.HEADERNAME' | translate }} - - - - {{ 'IDP.ISSUER' | translate }} - - -
+
+ + {{ 'IDP.CLIENTID' | translate }} + + + + {{ 'IDP.CLIENTSECRET' | translate }} + + +
+
+ + {{ 'IDP.SCOPESLIST' | translate }} + + + {{ scope }} cancel + + + + +
+
+ + {{ 'IDP.IDPDISPLAYNAMMAPPING' | translate }} + + + {{ 'IDP.MAPPINGFIELD.' + field | translate }} + + + + + {{ 'IDP.USERNAMEMAPPING' | translate }} + + + {{ 'IDP.MAPPINGFIELD.' + field | translate }} + + + +
- -
-

{{'IDP.AUTOREGISTER_DESC' | translate}}

- - {{'IDP.AUTOREGISTER' | translate}} - -
-
+
+ + +
+ +
-
- - {{ 'IDP.JWT.JWTENDPOINT' | translate }} - - - - {{ 'IDP.JWT.JWTKEYSENDPOINT' | translate }} - - -
+ +

{{ 'IDP.JWT.DESCRIPTION' | translate }}

-
- - -
- -
+
+
+ + {{ 'IDP.NAME' | translate }} + + + + {{ 'IDP.JWT.HEADERNAME' | translate }} + + + + {{ 'IDP.ISSUER' | translate }} + + +
-
\ No newline at end of file + +
+

{{ 'IDP.AUTOREGISTER_DESC' | translate }}

+ + {{ 'IDP.AUTOREGISTER' | translate }} + +
+
+ +
+ + {{ 'IDP.JWT.JWTENDPOINT' | translate }} + + + + {{ 'IDP.JWT.JWTKEYSENDPOINT' | translate }} + + +
+ +
+ + +
+ + +
+
+
diff --git a/console/src/app/modules/idp-create/idp-create.component.scss b/console/src/app/modules/idp-create/idp-create.component.scss index 58b489ff1d..d60eec7887 100644 --- a/console/src/app/modules/idp-create/idp-create.component.scss +++ b/console/src/app/modules/idp-create/idp-create.component.scss @@ -2,75 +2,75 @@ font-size: 14px; } -.container { - padding: 4rem 4rem 2rem 4rem; +.abort-container { + display: flex; + align-items: center; + margin-bottom: 2rem; - @media only screen and (max-width: 450px) { - padding: 4rem 1rem 2rem 1rem; + .abort { + font-size: 1.2rem; + margin-left: 2rem; } - .abort-container { + .abort-2 { + font-size: 1.2rem; + margin-left: 2rem; + white-space: nowrap; + } +} + +.add-line-btn { + margin-bottom: 1rem; +} + +.idp-create-content { + padding: 0 0 0 72px; + + .first-step-actions { + margin-top: 1rem; + } + + .auto-reg-info { + display: block; + width: 100%; + + .auto-reg-desc { + margin: 0 0 1rem 0; + } + } + + .idp-content { display: flex; - align-items: center; - margin-bottom: 2rem; + margin: 0 -0.5rem; + flex-wrap: wrap; - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } - } - - .add-line-btn { - margin-bottom: 1rem; - } -} - -.auto-reg-info { - display: block; - width: 100%; - - .auto-reg-desc { - margin: 0 0 1rem 0; - } -} - -.idp-content { - display: flex; - margin: 0 -0.5rem; - flex-wrap: wrap; - - .desc { - flex-basis: 100%; - margin: 0 0.5rem; - margin-bottom: 1rem; - } - - .formfield { - flex: 1; - margin: 0 0.5rem; - - @media only screen and (max-width: 450px) { + .desc { flex-basis: 100%; + margin: 0 0.5rem; + margin-bottom: 1rem; + } + + .formfield { + flex: 1; + margin: 0 0.5rem; + + @media only screen and (max-width: 450px) { + flex-basis: 100%; + } + } + } + + .idp-create-actions { + display: flex; + justify-content: space-between; + margin-top: 1rem; + + button[mat-stroked-button] { + border-radius: 0.5rem; + } + + button[mat-raised-button] { + border-radius: 0.5rem; } } } - -.idp-create-actions { - display: flex; - justify-content: space-between; - margin-top: 1rem; - - button[mat-stroked-button] { - border-radius: 0.5rem; - } - - button[mat-raised-button] { - border-radius: 0.5rem; - } -} diff --git a/console/src/app/modules/idp-create/idp-create.component.ts b/console/src/app/modules/idp-create/idp-create.component.ts index e48f05bddb..bbd5bc9096 100644 --- a/console/src/app/modules/idp-create/idp-create.component.ts +++ b/console/src/app/modules/idp-create/idp-create.component.ts @@ -83,13 +83,12 @@ export class IdpCreateComponent implements OnInit, OnDestroy { OIDCMappingField.OIDC_MAPPING_FIELD_PREFERRED_USERNAME, OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL, ]; + const bread: Breadcrumb = { + type: BreadcrumbType.ORG, + routerLink: ['/org'], + }; - const iamBread = new Breadcrumb({ - type: BreadcrumbType.INSTANCE, - name: 'Instance', - routerLink: ['/instance'], - }); - breadcrumbService.setBreadcrumb([iamBread]); + breadcrumbService.setBreadcrumb([bread]); break; case PolicyComponentServiceType.ADMIN: this.service = this.injector.get(AdminService as Type); @@ -98,11 +97,12 @@ export class IdpCreateComponent implements OnInit, OnDestroy { OIDCMappingField.OIDC_MAPPING_FIELD_EMAIL, ]; - const bread: Breadcrumb = { + const iamBread = new Breadcrumb({ type: BreadcrumbType.ORG, - routerLink: ['/org'], - }; - breadcrumbService.setBreadcrumb([bread]); + name: 'Instance', + routerLink: ['/instance'], + }); + breadcrumbService.setBreadcrumb([iamBread]); break; } }); @@ -139,15 +139,16 @@ export class IdpCreateComponent implements OnInit, OnDestroy { .then((idp) => { setTimeout(() => { this.loading = false; - this.router.navigate([ - this.serviceType === PolicyComponentServiceType.MGMT - ? 'org' - : this.serviceType === PolicyComponentServiceType.ADMIN - ? 'iam' - : '', - 'policy', - 'login', - ]); + this.router.navigate( + [ + this.serviceType === PolicyComponentServiceType.MGMT + ? '/org-settings' + : this.serviceType === PolicyComponentServiceType.ADMIN + ? '/settings' + : '', + ], + { queryParams: { id: 'idp' } }, + ); }, 2000); }) .catch((error) => { diff --git a/console/src/app/modules/idp/idp.component.html b/console/src/app/modules/idp/idp.component.html index a883919593..c14a11ee38 100644 --- a/console/src/app/modules/idp/idp.component.html +++ b/console/src/app/modules/idp/idp.component.html @@ -1,20 +1,33 @@ - - - - - @@ -24,8 +37,7 @@
- - + {{ 'IDP.NAME' | translate }} @@ -33,16 +45,16 @@ {{ 'IDP.STYLE' | translate }} - {{ 'IDP.STYLEFIELD.'+field | translate }} + {{ 'IDP.STYLEFIELD.' + field | translate }}
-

{{'IDP.AUTOREGISTER_DESC' | translate}}

+

{{ 'IDP.AUTOREGISTER_DESC' | translate }}

- {{'IDP.AUTOREGISTER' | translate}} + {{ 'IDP.AUTOREGISTER' | translate }}
@@ -50,52 +62,72 @@
-
-

{{'IDP.OIDC.TITLE' | translate}}

-

{{'IDP.OIDC.DESCRIPTION' | translate}}

+

{{ 'IDP.OIDC.TITLE' | translate }}

+

{{ 'IDP.OIDC.DESCRIPTION' | translate }}

- + {{ 'IDP.ISSUER' | translate }} - + {{ 'IDP.CLIENTID' | translate }} - + Update Client Secret - + {{ 'IDP.CLIENTSECRET' | translate }}
- + {{ 'IDP.SCOPESLIST' | translate }} - +
- + - - {{scope}} cancel + + {{ scope }} cancel @@ -104,7 +136,7 @@ {{ 'IDP.IDPDISPLAYNAMMAPPING' | translate }} - {{ 'IDP.MAPPINGFIELD.'+field | translate }} + {{ 'IDP.MAPPINGFIELD.' + field | translate }} @@ -112,7 +144,7 @@ {{ 'IDP.USERNAMEMAPPING' | translate }} - {{ 'IDP.MAPPINGFIELD.'+field | translate }} + {{ 'IDP.MAPPINGFIELD.' + field | translate }}
@@ -120,8 +152,13 @@
-
@@ -129,28 +166,28 @@ -

{{'IDP.JWT.TITLE' | translate}}

-

{{'IDP.JWT.DESCRIPTION' | translate}}

+

{{ 'IDP.JWT.TITLE' | translate }}

+

{{ 'IDP.JWT.DESCRIPTION' | translate }}

- + {{ 'IDP.ISSUER' | translate }} - + {{ 'IDP.JWT.HEADERNAME' | translate }} - + {{ 'IDP.JWT.JWTENDPOINT' | translate }} - + {{ 'IDP.JWT.JWTKEYSENDPOINT' | translate }} @@ -158,11 +195,16 @@
-
-
\ No newline at end of file +
diff --git a/console/src/app/modules/policies/general-settings/general-settings.component.scss b/console/src/app/modules/policies/general-settings/general-settings.component.scss index d10152fb9c..1e41e2908a 100644 --- a/console/src/app/modules/policies/general-settings/general-settings.component.scss +++ b/console/src/app/modules/policies/general-settings/general-settings.component.scss @@ -10,6 +10,7 @@ .general-btn-container { display: flex; justify-content: flex-start; + margin-top: 1rem; .save-button { display: block; diff --git a/console/src/app/modules/policies/general-settings/general-settings.component.ts b/console/src/app/modules/policies/general-settings/general-settings.component.ts index 864c7a6dc8..ef77365a5b 100644 --- a/console/src/app/modules/policies/general-settings/general-settings.component.ts +++ b/console/src/app/modules/policies/general-settings/general-settings.component.ts @@ -1,55 +1,35 @@ -import { Component, Injector, Input, OnInit, Type } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { SetDefaultLanguageResponse } from 'src/app/proto/generated/zitadel/admin_pb'; import { AdminService } from 'src/app/services/admin.service'; -import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; -import { PolicyComponentServiceType } from '../policy-component-types.enum'; - @Component({ selector: 'cnsl-general-settings', templateUrl: './general-settings.component.html', styleUrls: ['./general-settings.component.scss'], }) export class GeneralSettingsComponent implements OnInit { - @Input() public serviceType!: PolicyComponentServiceType; - public service!: ManagementService | AdminService; - public defaultLanguage: string = ''; public defaultLanguageOptions: string[] = []; public loading: boolean = false; - constructor(private injector: Injector, private toast: ToastService) {} + constructor(private service: AdminService, private toast: ToastService) {} ngOnInit(): void { - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - this.service = this.injector.get(ManagementService as Type); - break; - case PolicyComponentServiceType.ADMIN: - this.service = this.injector.get(AdminService as Type); - break; - } this.fetchData(); } private fetchData(): void { - if (this.serviceType === PolicyComponentServiceType.ADMIN) { - (this.service as AdminService).getDefaultLanguage().then((langResp) => { - this.defaultLanguage = langResp.language; - }); - (this.service as AdminService).getSupportedLanguages().then((supportedResp) => { - this.defaultLanguageOptions = supportedResp.languagesList; - }); - } + this.service.getDefaultLanguage().then((langResp) => { + this.defaultLanguage = langResp.language; + }); + this.service.getSupportedLanguages().then((supportedResp) => { + this.defaultLanguageOptions = supportedResp.languagesList; + }); } - private updateData(): Promise | void { - if (this.serviceType === PolicyComponentServiceType.ADMIN) { - return (this.service as AdminService).setDefaultLanguage(this.defaultLanguage); - } else { - return; - } + private updateData(): Promise { + return (this.service as AdminService).setDefaultLanguage(this.defaultLanguage); } public savePolicy(): void { @@ -68,21 +48,4 @@ export class GeneralSettingsComponent implements OnInit { }); } } - - public removePolicy(): void { - if (this.serviceType === PolicyComponentServiceType.MGMT) { - (this.service as ManagementService) - .resetLoginPolicyToDefault() - .then(() => { - this.toast.showInfo('POLICY.TOAST.RESETSUCCESS', true); - this.loading = true; - setTimeout(() => { - this.fetchData(); - }, 2000); - }) - .catch((error) => { - this.toast.showError(error); - }); - } - } } diff --git a/console/src/app/modules/policies/login-policy/mfa-table/dialog-add-type/dialog-add-type.component.scss b/console/src/app/modules/policies/login-policy/mfa-table/dialog-add-type/dialog-add-type.component.scss index ae80510797..8192f76685 100644 --- a/console/src/app/modules/policies/login-policy/mfa-table/dialog-add-type/dialog-add-type.component.scss +++ b/console/src/app/modules/policies/login-policy/mfa-table/dialog-add-type/dialog-add-type.component.scss @@ -15,7 +15,6 @@ justify-content: space-between; button { - margin-left: 0.5rem; border-radius: 0.5rem; } } diff --git a/console/src/app/modules/policies/login-policy/mfa-table/mfa-table.component.html b/console/src/app/modules/policies/login-policy/mfa-table/mfa-table.component.html index 35416a706b..c8d858dcfa 100644 --- a/console/src/app/modules/policies/login-policy/mfa-table/mfa-table.component.html +++ b/console/src/app/modules/policies/login-policy/mfa-table/mfa-table.component.html @@ -21,7 +21,6 @@
+ +
diff --git a/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.scss b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.scss new file mode 100644 index 0000000000..8192f76685 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.scss @@ -0,0 +1,20 @@ +.title { + font-size: 1.5rem; +} + +.desc { + font-size: 14px; +} + +.form-field { + width: 100%; +} + +.action { + display: flex; + justify-content: space-between; + + button { + border-radius: 0.5rem; + } +} diff --git a/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts new file mode 100644 index 0000000000..dec6df7a57 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts @@ -0,0 +1,58 @@ +import { Component, Inject } from '@angular/core'; +import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { AddSMSProviderTwilioRequest } from 'src/app/proto/generated/zitadel/admin_pb'; + +enum SMSProviderType { + Twilio = 1, +} + +@Component({ + selector: 'cnsl-dialog-add-sms-provider', + templateUrl: './dialog-add-sms-provider.component.html', + styleUrls: ['./dialog-add-sms-provider.component.scss'], +}) +export class DialogAddSMSProviderComponent { + public SMSProviderType: any = SMSProviderType; + public availableSMSProviders: SMSProviderType[] = [SMSProviderType.Twilio]; + public provider: SMSProviderType = SMSProviderType.Twilio; + public req: AddSMSProviderTwilioRequest = new AddSMSProviderTwilioRequest(); + + public twilioForm!: FormGroup; + + constructor( + private fb: FormBuilder, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any, + ) { + this.twilioForm = this.fb.group({ + sid: ['', [Validators.required]], + token: ['', [Validators.required]], + senderNumber: ['', [Validators.required]], + }); + } + + public closeDialog(): void { + this.dialogRef.close(); + } + + public closeDialogWithRequest(): void { + this.req.setSid(this.sid?.value); + this.req.setToken(this.token?.value); + this.req.setSenderNumber(this.senderNumber?.value); + + this.dialogRef.close(this.req); + } + + public get senderNumber(): AbstractControl | null { + return this.twilioForm.get('senderNumber'); + } + + public get token(): AbstractControl | null { + return this.twilioForm.get('token'); + } + + public get sid(): AbstractControl | null { + return this.twilioForm.get('sid'); + } +} diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.html b/console/src/app/modules/policies/notification-settings/notification-settings.component.html new file mode 100644 index 0000000000..a5bd417780 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.html @@ -0,0 +1,75 @@ +
+ +
+ +

{{ 'SETTING.SMTP.TITLE' | translate }}

+ +
+ + {{ 'SETTING.SMTP.SENDERADDRESS' | translate }} + + + + + {{ 'SETTING.SMTP.SENDERNAME' | translate }} + + + + + {{ 'SETTING.SMTP.TLS' | translate }} + + + + {{ 'SETTING.SMTP.HOST' | translate }} + + + + + {{ 'SETTING.SMTP.USER' | translate }} + + + + + {{ 'SETTING.SMTP.PASSWORD' | translate }} + + + +
+ +
+
+ +
+

{{ 'SETTING.SMS.TITLE' | translate }}

+

{{ 'SETTING.SMS.PROVIDERS' | translate }}

+
+ +
+

Twilio

+ {{ 'SETTING.SMS.PROVIDER' | translate }} + + +
+
+ +
diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.scss b/console/src/app/modules/policies/notification-settings/notification-settings.component.scss new file mode 100644 index 0000000000..28ad4930b9 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.scss @@ -0,0 +1,55 @@ +.spinner-wr { + margin: 0.5rem 0; +} + +.smtp-form-field { + max-width: 400px; + display: block; +} + +.smtp-checkbox { + max-width: 400px; + display: block; + margin: 1rem 0; +} + +.general-btn-container { + display: flex; + justify-content: flex-start; + + .save-button { + display: block; + } +} + +.sms-providers { + display: flex; + align-items: center; + + .sms-card { + margin-right: 1rem; + + &.add { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + } + + .sms-provider { + display: flex; + flex-direction: row; + align-items: center; + margin-bottom: -0.5rem; + + .title { + font-size: 16px; + margin: 0 1rem 0 0; + } + + .fill-space { + flex: 1; + } + } + } +} diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.spec.ts b/console/src/app/modules/policies/notification-settings/notification-settings.component.spec.ts new file mode 100644 index 0000000000..cd48a053f7 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NotificationSettingsComponent } from './notification-settings.component'; + +describe('NotificationSettingsComponent', () => { + let component: NotificationSettingsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [NotificationSettingsComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(NotificationSettingsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.ts b/console/src/app/modules/policies/notification-settings/notification-settings.component.ts new file mode 100644 index 0000000000..c97418bbe7 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.ts @@ -0,0 +1,158 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { + AddSMSProviderTwilioRequest, + UpdateSMTPConfigPasswordResponse, + UpdateSMTPConfigRequest, +} from 'src/app/proto/generated/zitadel/admin_pb'; +import { SMSProvider, SMSProviderConfigState } from 'src/app/proto/generated/zitadel/settings_pb'; +import { AdminService } from 'src/app/services/admin.service'; +import { ToastService } from 'src/app/services/toast.service'; + +import { PolicyComponentServiceType } from '../policy-component-types.enum'; +import { DialogAddSMSProviderComponent } from './dialog-add-sms-provider/dialog-add-sms-provider.component'; + +@Component({ + selector: 'cnsl-notification-settings', + templateUrl: './notification-settings.component.html', + styleUrls: ['./notification-settings.component.scss'], +}) +export class NotificationSettingsComponent implements OnInit { + @Input() public serviceType!: PolicyComponentServiceType; + public smsProviders: SMSProvider.AsObject[] = []; + + public loading: boolean = false; + public form!: FormGroup; + + public SMSProviderConfigState: any = SMSProviderConfigState; + constructor( + private service: AdminService, + private dialog: MatDialog, + private toast: ToastService, + private fb: FormBuilder, + ) { + this.form = this.fb.group({ + senderAddress: ['', [Validators.required]], + senderName: ['', [Validators.required]], + tls: [true, [Validators.required]], + host: ['', [Validators.required]], + user: ['', [Validators.required]], + password: ['', [Validators.required]], + }); + } + + ngOnInit(): void { + this.fetchData(); + } + + private fetchData(): void { + this.service + .getSMTPConfig() + .then((smtpConfig) => { + if (smtpConfig.smtpConfig) { + this.form.patchValue(smtpConfig.smtpConfig); + } + }) + .catch((error) => { + if (error && error.code === 5) { + console.log(error); + } + }); + + this.service.listSMSProviders().then((smsProviders) => { + if (smsProviders.resultList) { + this.smsProviders = smsProviders.resultList; + console.log(this.smsProviders); + } + }); + } + + private updateData(): Promise | any { + const req = new UpdateSMTPConfigRequest(); + req.setHost(this.host?.value ?? ''); + req.setSenderAddress(this.senderAddress?.value ?? ''); + req.setSenderName(this.senderName?.value ?? ''); + req.setTls(this.tls?.value ?? false); + req.setUser(this.user?.value ?? ''); + + console.log(req.toObject()); + + // return this.service.updateSMTPConfig(req).then(() => { + // let passwordReq: UpdateSMTPConfigPasswordRequest; + // if (this.password) { + // passwordReq = new UpdateSMTPConfigPasswordRequest(); + // passwordReq.setPassword(this.password.value); + // return this.service.updateSMTPConfigPassword(passwordReq); + // } else { + // return; + // } + // }); + } + + public savePolicy(): void { + const prom = this.updateData(); + if (prom) { + prom + .then(() => { + this.toast.showInfo('SETTING.SMTP.SAVED', true); + this.loading = true; + setTimeout(() => { + this.fetchData(); + }, 2000); + }) + .catch((error: unknown) => { + this.toast.showError(error); + }); + } + } + + public addSMSProvider(): void { + const dialogRef = this.dialog.open(DialogAddSMSProviderComponent, { + data: { + confirmKey: 'ACTIONS.DELETE', + cancelKey: 'ACTIONS.CANCEL', + titleKey: 'IDP.DELETE_TITLE', + descriptionKey: 'IDP.DELETE_DESCRIPTION', + }, + width: '400px', + }); + + dialogRef.afterClosed().subscribe((req: AddSMSProviderTwilioRequest) => { + if (req) { + this.service + .addSMSProviderTwilio(req) + .then(() => { + this.toast.showInfo('SETTING.SMS.TWILIO.ADDED', true); + }) + .catch((error) => { + this.toast.showError(error); + }); + } + }); + } + + public get senderAddress(): AbstractControl | null { + return this.form.get('senderAddress'); + } + + public get senderName(): AbstractControl | null { + return this.form.get('senderName'); + } + + public get tls(): AbstractControl | null { + return this.form.get('tls'); + } + + public get user(): AbstractControl | null { + return this.form.get('user'); + } + + public get host(): AbstractControl | null { + return this.form.get('host'); + } + + public get password(): AbstractControl | null { + return this.form.get('password'); + } +} diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.module.ts b/console/src/app/modules/policies/notification-settings/notification-settings.module.ts new file mode 100644 index 0000000000..559d9b0467 --- /dev/null +++ b/console/src/app/modules/policies/notification-settings/notification-settings.module.ts @@ -0,0 +1,36 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatSelectModule } from '@angular/material/select'; +import { TranslateModule } from '@ngx-translate/core'; + +import { CardModule } from '../../card/card.module'; +import { FormFieldModule } from '../../form-field/form-field.module'; +import { InputModule } from '../../input/input.module'; +import { DialogAddSMSProviderComponent } from './dialog-add-sms-provider/dialog-add-sms-provider.component'; +import { NotificationSettingsComponent } from './notification-settings.component'; + +@NgModule({ + declarations: [NotificationSettingsComponent, DialogAddSMSProviderComponent], + imports: [ + CommonModule, + CardModule, + FormsModule, + ReactiveFormsModule, + MatButtonModule, + MatCheckboxModule, + InputModule, + MatIconModule, + FormFieldModule, + MatSelectModule, + MatProgressSpinnerModule, + MatSelectModule, + TranslateModule, + ], + exports: [NotificationSettingsComponent], +}) +export class NotificationSettingsModule {} diff --git a/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.html b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.html new file mode 100644 index 0000000000..4fa34007d0 --- /dev/null +++ b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.html @@ -0,0 +1,45 @@ +
+ +
+

{{ 'SETTING.OIDC.TITLE' | translate }}

+
+ + {{ 'SETTING.OIDC.ACCESSTOKENLIFETIME' | translate }} ({{ 'SETTING.OIDC.INHOURS' | translate }}) + + + + + {{ 'SETTING.OIDC.IDTOKENLIFETIME' | translate }} ({{ 'SETTING.OIDC.INHOURS' | translate }}) + + + + + {{ 'SETTING.OIDC.REFRESHTOKENEXPIRATION' | translate }} ({{ 'SETTING.OIDC.INDAYS' | translate }}) + + + + + {{ 'SETTING.OIDC.REFRESHTOKENIDLEEXPIRATION' | translate }}  + ({{ 'SETTING.OIDC.INDAYS' | translate }}) + + +
+
+ +
diff --git a/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.scss b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.scss new file mode 100644 index 0000000000..39a467afe8 --- /dev/null +++ b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.scss @@ -0,0 +1,18 @@ +.spinner-wr { + margin: 0.5rem 0; +} + +.oidc-form-field { + max-width: 400px; + display: block; +} + +.oidc-btn-container { + display: flex; + justify-content: flex-start; + margin-top: 1rem; + + .save-button { + display: block; + } +} diff --git a/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.spec.ts b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.spec.ts new file mode 100644 index 0000000000..f3a71c8df4 --- /dev/null +++ b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { OIDCConfigurationComponent } from './oidc-configuration.component'; + +describe('OIDCConfigurationComponent', () => { + let component: OIDCConfigurationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [OIDCConfigurationComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(OIDCConfigurationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.ts b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.ts new file mode 100644 index 0000000000..f58905341a --- /dev/null +++ b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.component.ts @@ -0,0 +1,119 @@ +import { Component, OnInit } from '@angular/core'; +import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Duration } from 'google-protobuf/google/protobuf/duration_pb'; +import { SetDefaultLanguageResponse, UpdateOIDCSettingsRequest } from 'src/app/proto/generated/zitadel/admin_pb'; +import { OIDCSettings } from 'src/app/proto/generated/zitadel/settings_pb'; +import { AdminService } from 'src/app/services/admin.service'; +import { ToastService } from 'src/app/services/toast.service'; + +@Component({ + selector: 'cnsl-oidc-configuration', + templateUrl: './oidc-configuration.component.html', + styleUrls: ['./oidc-configuration.component.scss'], +}) +export class OIDCConfigurationComponent implements OnInit { + public oidcSettings!: OIDCSettings.AsObject; + + public loading: boolean = false; + public form!: FormGroup; + constructor(private service: AdminService, private fb: FormBuilder, private toast: ToastService) { + this.form = this.fb.group({ + accessTokenLifetime: [12, [Validators.required]], + idTokenLifetime: [12, [Validators.required]], + refreshTokenExpiration: [30, [Validators.required]], + refreshTokenIdleExpiration: [90, [Validators.required]], + }); + } + + ngOnInit(): void { + this.fetchData(); + } + + private fetchData(): void { + this.service + .getOIDCSettings() + .then((oidcConfiguration) => { + if (oidcConfiguration.settings) { + this.oidcSettings = oidcConfiguration.settings; + + this.accessTokenLifetime?.setValue( + oidcConfiguration.settings.accessTokenLifetime?.seconds + ? oidcConfiguration.settings.accessTokenLifetime?.seconds / 60 / 60 + : 12, + ); + this.idTokenLifetime?.setValue( + oidcConfiguration.settings.idTokenLifetime?.seconds + ? oidcConfiguration.settings.idTokenLifetime?.seconds / 60 / 60 + : 12, + ); + this.refreshTokenExpiration?.setValue( + oidcConfiguration.settings.refreshTokenExpiration?.seconds + ? oidcConfiguration.settings.refreshTokenExpiration?.seconds / 60 / 60 / 24 + : 30, + ); + this.refreshTokenIdleExpiration?.setValue( + oidcConfiguration.settings.refreshTokenIdleExpiration?.seconds + ? oidcConfiguration.settings.refreshTokenIdleExpiration?.seconds / 60 / 60 / 24 + : 90, + ); + } + }) + .catch((error) => { + if (error.code === 5) { + } else { + this.toast.showError(error); + } + }); + } + + private updateData(): Promise { + const req = new UpdateOIDCSettingsRequest(); + + const accessToken = new Duration().setSeconds((this.accessTokenLifetime?.value ?? 12) * 60 * 60); + req.setAccessTokenLifetime(accessToken); + + const idToken = new Duration().setSeconds((this.idTokenLifetime?.value ?? 12) * 60 * 60); + req.setIdTokenLifetime(idToken); + + const refreshToken = new Duration().setSeconds((this.refreshTokenExpiration?.value ?? 30) * 60 * 60 * 24); + req.setRefreshTokenExpiration(refreshToken); + + const refreshIdleToken = new Duration().setSeconds((this.refreshTokenIdleExpiration?.value ?? 90) * 60 * 60 * 24); + req.setRefreshTokenIdleExpiration(refreshIdleToken); + + return (this.service as AdminService).updateOIDCSettings(req); + } + + public savePolicy(): void { + const prom = this.updateData(); + if (prom) { + prom + .then(() => { + this.toast.showInfo('SETTING.SMTP.SAVED', true); + this.loading = true; + setTimeout(() => { + this.fetchData(); + }, 2000); + }) + .catch((error) => { + this.toast.showError(error); + }); + } + } + + public get accessTokenLifetime(): AbstractControl | null { + return this.form.get('accessTokenLifetime'); + } + + public get idTokenLifetime(): AbstractControl | null { + return this.form.get('idTokenLifetime'); + } + + public get refreshTokenExpiration(): AbstractControl | null { + return this.form.get('refreshTokenExpiration'); + } + + public get refreshTokenIdleExpiration(): AbstractControl | null { + return this.form.get('refreshTokenIdleExpiration'); + } +} diff --git a/console/src/app/modules/policies/oidc-configuration/oidc-configuration.module.ts b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.module.ts new file mode 100644 index 0000000000..fe78fe0932 --- /dev/null +++ b/console/src/app/modules/policies/oidc-configuration/oidc-configuration.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatButtonModule } from '@angular/material/button'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatSelectModule } from '@angular/material/select'; +import { TranslateModule } from '@ngx-translate/core'; + +import { CardModule } from '../../card/card.module'; +import { FormFieldModule } from '../../form-field/form-field.module'; +import { InputModule } from '../../input/input.module'; +import { OIDCConfigurationComponent } from './oidc-configuration.component'; + +@NgModule({ + declarations: [OIDCConfigurationComponent], + imports: [ + CommonModule, + CardModule, + FormsModule, + MatButtonModule, + FormFieldModule, + ReactiveFormsModule, + InputModule, + MatProgressSpinnerModule, + MatSelectModule, + TranslateModule, + ], + exports: [OIDCConfigurationComponent], +}) +export class OIDCConfigurationModule {} diff --git a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts index ba5c57af60..18feae7eec 100644 --- a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts +++ b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts @@ -42,9 +42,7 @@ export class PasswordLockoutPolicyComponent implements OnInit { } private fetchData(): void { - console.log(this.serviceType); this.getData().then((resp) => { - console.log(resp); if (resp.policy) { this.lockoutData = resp.policy; } diff --git a/console/src/app/modules/settings-list/settings-list.component.html b/console/src/app/modules/settings-list/settings-list.component.html index 5a0f413a13..7e7414ff41 100644 --- a/console/src/app/modules/settings-list/settings-list.component.html +++ b/console/src/app/modules/settings-list/settings-list.component.html @@ -7,7 +7,7 @@ queryParam="id" > - + @@ -22,6 +22,14 @@ + + + + + + + + diff --git a/console/src/app/modules/settings-list/settings-list.module.ts b/console/src/app/modules/settings-list/settings-list.module.ts index 9ca6401e83..2f839906cc 100644 --- a/console/src/app/modules/settings-list/settings-list.module.ts +++ b/console/src/app/modules/settings-list/settings-list.module.ts @@ -10,6 +10,8 @@ import { IdpSettingsModule } from '../policies/idp-settings/idp-settings.module' import { LoginPolicyModule } from '../policies/login-policy/login-policy.module'; import { LoginTextsPolicyModule } from '../policies/login-texts/login-texts.module'; import { MessageTextsPolicyModule } from '../policies/message-texts/message-texts.module'; +import { NotificationSettingsModule } from '../policies/notification-settings/notification-settings.module'; +import { OIDCConfigurationModule } from '../policies/oidc-configuration/oidc-configuration.module'; import { OrgIamPolicyModule } from '../policies/org-iam-policy/org-iam-policy.module'; import { PasswordComplexityPolicyModule } from '../policies/password-complexity-policy/password-complexity-policy.module'; import { PasswordLockoutPolicyModule } from '../policies/password-lockout-policy/password-lockout-policy.module'; @@ -37,6 +39,8 @@ import { SettingsListComponent } from './settings-list.component'; OrgIamPolicyModule, TranslateModule, HasRolePipeModule, + NotificationSettingsModule, + OIDCConfigurationModule, ], exports: [SettingsListComponent], }) diff --git a/console/src/app/modules/settings-list/settings.ts b/console/src/app/modules/settings-list/settings.ts index ace486776d..011ada8d79 100644 --- a/console/src/app/modules/settings-list/settings.ts +++ b/console/src/app/modules/settings-list/settings.ts @@ -5,6 +5,11 @@ export const GENERAL: SidenavSetting = { i18nKey: 'SETTINGS.LIST.GENERAL', }; +export const OIDC: SidenavSetting = { + id: 'oidc', + i18nKey: 'SETTINGS.LIST.OIDC', +}; + export const LOGIN: SidenavSetting = { id: 'login', i18nKey: 'SETTINGS.LIST.LOGIN', @@ -29,12 +34,6 @@ export const COMPLEXITY: SidenavSetting = { export const IDP: SidenavSetting = { id: 'idp', i18nKey: 'SETTINGS.LIST.IDP', groupI18nKey: 'SETTINGS.GROUPS.LOGIN' }; -export const NOTIFICATIONPROVIDERS: SidenavSetting = { - id: 'notificationproviders', - i18nKey: 'SETTINGS.LIST.NOTIFICATIONPROVIDERS', - groupI18nKey: 'SETTINGS.GROUPS.NOTIFICATIONS', -}; - export const NOTIFICATIONS: SidenavSetting = { id: 'notifications', i18nKey: 'SETTINGS.LIST.NOTIFICATIONS', diff --git a/console/src/app/pages/instance-settings/instance-settings.component.ts b/console/src/app/pages/instance-settings/instance-settings.component.ts index 01fab1cd09..1eeecbe88b 100644 --- a/console/src/app/pages/instance-settings/instance-settings.component.ts +++ b/console/src/app/pages/instance-settings/instance-settings.component.ts @@ -14,8 +14,8 @@ import { LOGIN, LOGINTEXTS, MESSAGETEXTS, - NOTIFICATIONPROVIDERS, NOTIFICATIONS, + OIDC, PRIVACYPOLICY, } from '../../modules/settings-list/settings'; @@ -29,16 +29,20 @@ export class InstanceSettingsComponent { public PolicyComponentServiceType: any = PolicyComponentServiceType; public settingsList: SidenavSetting[] = [ GENERAL, + // notifications + NOTIFICATIONS, + // login LOGIN, COMPLEXITY, LOCKOUT, IDP, - NOTIFICATIONS, - NOTIFICATIONPROVIDERS, + // appearance BRANDING, MESSAGETEXTS, LOGINTEXTS, + // others PRIVACYPOLICY, + OIDC, ]; constructor(breadcrumbService: BreadcrumbService, activatedRoute: ActivatedRoute) { const breadcrumbs = [ diff --git a/console/src/app/pages/org-settings/org-settings.component.ts b/console/src/app/pages/org-settings/org-settings.component.ts index abf82577e3..4e5a54f874 100644 --- a/console/src/app/pages/org-settings/org-settings.component.ts +++ b/console/src/app/pages/org-settings/org-settings.component.ts @@ -13,8 +13,6 @@ import { LOGIN, LOGINTEXTS, MESSAGETEXTS, - NOTIFICATIONPROVIDERS, - NOTIFICATIONS, PRIVACYPOLICY, } from '../../modules/settings-list/settings'; @@ -31,8 +29,6 @@ export class OrgSettingsComponent { COMPLEXITY, LOCKOUT, IDP, - NOTIFICATIONS, - NOTIFICATIONPROVIDERS, BRANDING, MESSAGETEXTS, LOGINTEXTS, diff --git a/console/src/app/services/admin.service.ts b/console/src/app/services/admin.service.ts index 1b7e71c3a0..fded3b3da8 100644 --- a/console/src/app/services/admin.service.ts +++ b/console/src/app/services/admin.service.ts @@ -17,6 +17,8 @@ import { AddOIDCIDPResponse, AddSecondFactorToLoginPolicyRequest, AddSecondFactorToLoginPolicyResponse, + AddSMSProviderTwilioRequest, + AddSMSProviderTwilioResponse, DeactivateIDPRequest, DeactivateIDPResponse, GetCustomDomainClaimedMessageTextRequest, @@ -51,6 +53,8 @@ import { GetDefaultVerifyEmailMessageTextResponse, GetDefaultVerifyPhoneMessageTextRequest, GetDefaultVerifyPhoneMessageTextResponse, + GetFileSystemNotificationProviderRequest, + GetFileSystemNotificationProviderResponse, GetIDPByIDRequest, GetIDPByIDResponse, GetLabelPolicyRequest, @@ -59,6 +63,10 @@ import { GetLockoutPolicyResponse, GetLoginPolicyRequest, GetLoginPolicyResponse, + GetLogNotificationProviderRequest, + GetLogNotificationProviderResponse, + GetOIDCSettingsRequest, + GetOIDCSettingsResponse, GetOrgIAMPolicyRequest, GetOrgIAMPolicyResponse, GetPasswordAgePolicyRequest, @@ -69,6 +77,10 @@ import { GetPreviewLabelPolicyResponse, GetPrivacyPolicyRequest, GetPrivacyPolicyResponse, + GetSMSProviderRequest, + GetSMSProviderResponse, + GetSMTPConfigRequest, + GetSMTPConfigResponse, GetSupportedLanguagesRequest, GetSupportedLanguagesResponse, IDPQuery, @@ -86,6 +98,8 @@ import { ListLoginPolicyMultiFactorsResponse, ListLoginPolicySecondFactorsRequest, ListLoginPolicySecondFactorsResponse, + ListSMSProvidersRequest, + ListSMSProvidersResponse, ListViewsRequest, ListViewsResponse, ReactivateIDPRequest, @@ -150,6 +164,8 @@ import { UpdateLockoutPolicyResponse, UpdateLoginPolicyRequest, UpdateLoginPolicyResponse, + UpdateOIDCSettingsRequest, + UpdateOIDCSettingsResponse, UpdateOrgIAMPolicyRequest, UpdateOrgIAMPolicyResponse, UpdatePasswordAgePolicyRequest, @@ -158,6 +174,10 @@ import { UpdatePasswordComplexityPolicyResponse, UpdatePrivacyPolicyRequest, UpdatePrivacyPolicyResponse, + UpdateSMTPConfigPasswordRequest, + UpdateSMTPConfigPasswordResponse, + UpdateSMTPConfigRequest, + UpdateSMTPConfigResponse, } from '../proto/generated/zitadel/admin_pb'; import { SearchQuery } from '../proto/generated/zitadel/member_pb'; import { ListQuery } from '../proto/generated/zitadel/object_pb'; @@ -433,6 +453,37 @@ export class AdminService { return this.grpcService.admin.setDefaultLanguage(req, null).then((resp) => resp.toObject()); } + /* notification settings */ + + public getSMTPConfig(): Promise { + const req = new GetSMTPConfigRequest(); + return this.grpcService.admin.getSMTPConfig(req, null).then((resp) => resp.toObject()); + } + + public updateSMTPConfig(req: UpdateSMTPConfigRequest): Promise { + return this.grpcService.admin.updateSMTPConfig(req, null).then((resp) => resp.toObject()); + } + + public updateSMTPConfigPassword(req: UpdateSMTPConfigPasswordRequest): Promise { + return this.grpcService.admin.updateSMTPConfigPassword(req, null).then((resp) => resp.toObject()); + } + + /* sms */ + + public listSMSProviders(): Promise { + const req = new ListSMSProvidersRequest(); + return this.grpcService.admin.listSMSProviders(req, null).then((resp) => resp.toObject()); + } + + public getSMSProvider(): Promise { + const req = new GetSMSProviderRequest(); + return this.grpcService.admin.getSMSProvider(req, null).then((resp) => resp.toObject()); + } + + public addSMSProviderTwilio(req: AddSMSProviderTwilioRequest): Promise { + return this.grpcService.admin.addSMSProviderTwilio(req, null).then((resp) => resp.toObject()); + } + /* lockout */ public getLockoutPolicy(): Promise { @@ -504,6 +555,30 @@ export class AdminService { return this.grpcService.admin.updateLoginPolicy(req, null).then((resp) => resp.toObject()); } + /* OIDC Configuration */ + + public getOIDCSettings(): Promise { + const req = new GetOIDCSettingsRequest(); + return this.grpcService.admin.getOIDCSettings(req, null).then((resp) => resp.toObject()); + } + + public updateOIDCSettings(req: UpdateOIDCSettingsRequest): Promise { + return this.grpcService.admin.updateOIDCSettings(req, null).then((resp) => resp.toObject()); + } + + /* LOG and FILE Notifications */ + + public getLogNotificationProvider(): Promise { + const req = new GetLogNotificationProviderRequest(); + return this.grpcService.admin.getLogNotificationProvider(req, null).then((resp) => resp.toObject()); + } + + public getFileSystemNotificationProvider( + req: GetFileSystemNotificationProviderRequest, + ): Promise { + return this.grpcService.admin.getFileSystemNotificationProvider(req, null).then((resp) => resp.toObject()); + } + /* org iam */ public getCustomOrgIAMPolicy(orgId: string): Promise { diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index c121a5c1a9..31ac3d2630 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -816,12 +816,12 @@ "LOCKOUT": "Sperrmechanismen", "COMPLEXITY": "Passwordkomplexität", "NOTIFICATIONS": "Benachrichtigungen", - "NOTIFICATIONPROVIDERS": "Anbieter und SMTP", "MESSAGETEXTS": "Benachrichtigungstexte", "IDP": "Identity Provider", "LOGINTEXTS": "Login Interface Texte", "BRANDING": "Branding", - "PRIVACYPOLICY": "Datenschutzrichtlinie" + "PRIVACYPOLICY": "Datenschutzrichtlinie", + "OIDC": "OIDC Konfiguration" }, "GROUPS": { "NOTIFICATIONS": "Benachrichtigungen", @@ -837,6 +837,38 @@ "de": "Deutsch", "it": "Italiano", "en": "English" + }, + "SMTP": { + "TITLE": "SMTP Einstellungen", + "SENDERADDRESS": "Sender Email-Adresse", + "SENDERNAME": "Sender Name", + "HOST": "Host", + "USER": "Benutzer", + "PASSWORD": "Passwort", + "TLS": "Transport Layer Security (TLS)", + "SAVED": "Erfolgreich gespeichert." + }, + "SMS": { + "TITLE": "SMS Einstellungen", + "PROVIDERS": "Anbieter", + "PROVIDER": "SMS Anbieter", + "ADDPROVIDER": "Anbieter hinzufügen", + "ADDPROVIDERDESCRIPTION": "Wählen Sie einen der verfügbaren Anbieter und geben Sie die erforderlichen Daten ein.", + "TWILIO": { + "SID": "Sid", + "TOKEN": "Token", + "SENDERNUMBER": "Sender Number", + "ADDED": "Twilio erfolgreich hinzugefügt." + } + }, + "OIDC": { + "TITLE": "OIDC Einstellungen", + "ACCESSTOKENLIFETIME": "Access Token Lifetime", + "IDTOKENLIFETIME": "Id Token Lifetime", + "REFRESHTOKENEXPIRATION": "Refresh Token Expiration", + "REFRESHTOKENIDLEEXPIRATION": "Refresh Token Idle Expiration", + "INHOURS": "Stunden", + "INDAYS": "Tage" } }, "POLICY": { diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 6be2cae2c2..b3e32db4a8 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -815,13 +815,13 @@ "LOGIN": "Login Behaviour and Security", "LOCKOUT": "Lockout", "COMPLEXITY": "Password complexity", - "NOTIFICATIONS": "Notifications", - "NOTIFICATIONPROVIDERS": "Notification providers and SMTP", + "NOTIFICATIONS": "Notification providers and SMTP", "MESSAGETEXTS": "Message Texts", "IDP": "Identity Providers", "LOGINTEXTS": "Login Interface Texts", "BRANDING": "Branding", - "PRIVACYPOLICY": "Privacy Policy" + "PRIVACYPOLICY": "Privacy Policy", + "OIDC": "OIDC Configuration" }, "GROUPS": { "NOTIFICATIONS": "Notifications", @@ -837,6 +837,38 @@ "de": "Deutsch", "it": "Italiano", "en": "English" + }, + "SMTP": { + "TITLE": "SMTP Settings", + "SENDERADDRESS": "Sender Email address", + "SENDERNAME": "Sender Name", + "HOST": "Host", + "USER": "User", + "PASSWORD": "Password", + "TLS": "Transport Layer Security (TLS)", + "SAVED": "Saved successfully!" + }, + "SMS": { + "TITLE": "SMS Settings", + "PROVIDERS": "Providers", + "PROVIDER": "SMS Provider", + "ADDPROVIDER": "Add SMS Provider", + "ADDPROVIDERDESCRIPTION": "Choose one of the available providers and enter the required data.", + "TWILIO": { + "SID": "Sid", + "TOKEN": "Token", + "SENDERNUMBER": "Sender Number", + "ADDED": "Twilio added successfully." + } + }, + "OIDC": { + "TITLE": "OIDC Settings", + "ACCESSTOKENLIFETIME": "Access Token Lifetime", + "IDTOKENLIFETIME": "Id Token Lifetime", + "REFRESHTOKENEXPIRATION": "Refresh Token Expiration", + "REFRESHTOKENIDLEEXPIRATION": "Refresh Token Idle Expiration", + "INHOURS": "hours", + "INDAYS": "Days" } }, "POLICY": { diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 6909f15e16..c168652f0f 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -806,18 +806,22 @@ "TITLE": "Impostazioni dell'istanza", "DESCRIPTION": "Queste impostazioni si applicheranno a tutte le tue organizzazioni a meno che l'impostazione non venga sovrascritta." }, + "ORG": { + "TITLE": "Impostazioni dell'organizzazione", + "DESCRIPTION": "Queste impostazioni si applicheranno alla organizzazione corrente." + }, "LIST": { "GENERAL": "Generale", "LOGIN": "Comportamento login e sicurezza", "LOCKOUT": "Meccanismi di bloccaggio", "COMPLEXITY": "complessità della password", "NOTIFICATIONS": "Notifiche", - "NOTIFICATIONPROVIDERS": "Fornitori e SMTP", "MESSAGETEXTS": "Testi di notifica", "IDP": "Identity Providers", "LOGINTEXTS": "Testi dell'interfaccia login", "BRANDING": "Branding", - "PRIVACYPOLICY": "Informativa sulla privacy e TOS" + "PRIVACYPOLICY": "Informativa sulla privacy e TOS", + "OIDC": "OIDC Configuration" }, "GROUPS": { "NOTIFICATIONS": "Notifiche", @@ -833,6 +837,38 @@ "de": "Deutsch", "it": "Italiano", "en": "English" + }, + "SMTP": { + "TITLE": "Impostazioni SMTP", + "SENDERADDRESS": "Indirizzo email del mittente", + "SENDERNAME": "Nome del mittente", + "HOST": "Host", + "USER": "Utente", + "PASSWORD": "Password", + "TLS": "Transport Layer Security (TLS)", + "SAVED": "Salvato con successo!" + }, + "SMS": { + "TITLE": "Impostazioni SMS", + "PROVIDERS": "Fornitori", + "PROVIDER": "Fornitore SMS", + "ADDPROVIDER": "Aggiungi fornitore SMS", + "ADDPROVIDERDESCRIPTION": "Scegli uno dei provider disponibili e inserisci i dati richiesti.", + "TWILIO": { + "SID": "Sid", + "TOKEN": "Token", + "SENDERNUMBER": "Sender Number", + "ADDED": "Twilio aggiunto con successo." + } + }, + "OIDC": { + "TITLE": "OIDC Einstellungen", + "ACCESSTOKENLIFETIME": "Access Token Lifetime", + "IDTOKENLIFETIME": "Id Token Lifetime", + "REFRESHTOKENEXPIRATION": "Refresh Token Expiration", + "REFRESHTOKENIDLEEXPIRATION": "Refresh Token Idle Expiration", + "INHOURS": "ore", + "INDAYS": "giorni" } }, "POLICY": { diff --git a/internal/api/ui/login/static/resources/scripts/avatar.js b/internal/api/ui/login/static/resources/scripts/avatar.js index 34bf684805..af67f88ab7 100644 --- a/internal/api/ui/login/static/resources/scripts/avatar.js +++ b/internal/api/ui/login/static/resources/scripts/avatar.js @@ -1,62 +1,195 @@ -const avatars = document.getElementsByClassName('lgn-avatar'); -for (let i = 0; i < avatars.length; i++) { - const displayName = avatars[i].getAttribute('loginname'); - if (displayName) { - const username = displayName.split('@')[0]; - let separator = '_'; - if (username.includes('-')) { - separator = '-'; - } - if (username.includes('.')) { - separator = '.'; - } - const split = username.split(separator); - const initials = split[0].charAt(0) + (split[1] ? split[1].charAt(0) : ''); - avatars[i].getElementsByClassName('initials')[0].innerHTML = initials; - - avatars[i].style.background = this.getColor(displayName); - // set default white text instead of contrast text mode - avatars[i].style.color = '#ffffff'; - } -} - -function getColor(userName) { - const colors = [ - 'linear-gradient(40deg, #B44D51 30%, rgb(241,138,138))', - 'linear-gradient(40deg, #B75073 30%, rgb(234,96,143))', - 'linear-gradient(40deg, #84498E 30%, rgb(214,116,230))', - 'linear-gradient(40deg, #705998 30%, rgb(163,131,220))', - 'linear-gradient(40deg, #5C6598 30%, rgb(135,148,222))', - 'linear-gradient(40deg, #7F90D3 30%, rgb(181,196,247))', - 'linear-gradient(40deg, #3E93B9 30%, rgb(150,215,245))', - 'linear-gradient(40deg, #3494A0 30%, rgb(71,205,222))', - 'linear-gradient(40deg, #25716A 30%, rgb(58,185,173))', - 'linear-gradient(40deg, #427E41 30%, rgb(97,185,96))', - 'linear-gradient(40deg, #89A568 30%, rgb(176,212,133))', - 'linear-gradient(40deg, #90924D 30%, rgb(187,189,98))', - 'linear-gradient(40deg, #E2B032 30%, rgb(245,203,99))', - 'linear-gradient(40deg, #C97358 30%, rgb(245,148,118))', - 'linear-gradient(40deg, #6D5B54 30%, rgb(152,121,108))', - 'linear-gradient(40deg, #6B7980 30%, rgb(134,163,177))', - ]; - - let hash = 0; - if (userName.length === 0) { - return colors[hash]; - } - - hash = this.hashCode(userName); - return colors[hash % colors.length]; -} +const COLORS = [ + { + 500: "#ef4444", + 200: "#fecaca", + 300: "#fca5a5", + 600: "#dc2626", + 700: "#b91c1c", + 900: "#7f1d1d", + }, + { + 500: "#f97316", + 200: "#fed7aa", + 300: "#fdba74", + 600: "#ea580c", + 700: "#c2410c", + 900: "#7c2d12", + }, + { + 500: "#f59e0b", + 200: "#fde68a", + 300: "#fcd34d", + 600: "#d97706", + 700: "#b45309", + 900: "#78350f", + }, + { + 500: "#eab308", + 200: "#fef08a", + 300: "#fde047", + 600: "#ca8a04", + 700: "#a16207", + 900: "#713f12", + }, + { + 500: "#84cc16", + 200: "#d9f99d", + 300: "#bef264", + 600: "#65a30d", + 700: "#4d7c0f", + 900: "#365314", + }, + { + 500: "#22c55e", + 200: "#bbf7d0", + 300: "#86efac", + 600: "#16a34a", + 700: "#15803d", + 900: "#14532d", + }, + { + 500: "#10b981", + 200: "#a7f3d0", + 300: "#6ee7b7", + 600: "#059669", + 700: "#047857", + 900: "#064e3b", + }, + { + 500: "#14b8a6", + 200: "#99f6e4", + 300: "#5eead4", + 600: "#0d9488", + 700: "#0f766e", + 900: "#134e4a", + }, + { + 500: "#06b6d4", + 200: "#a5f3fc", + 300: "#67e8f9", + 600: "#0891b2", + 700: "#0e7490", + 900: "#164e63", + }, + { + 500: "#0ea5e9", + 200: "#bae6fd", + 300: "#7dd3fc", + 600: "#0284c7", + 700: "#0369a1", + 900: "#0c4a6e", + }, + { + 500: "#3b82f6", + 200: "#bfdbfe", + 300: "#93c5fd", + 600: "#2563eb", + 700: "#1d4ed8", + 900: "#1e3a8a", + }, + { + 500: "#6366f1", + 200: "#c7d2fe", + 300: "#a5b4fc", + 600: "#4f46e5", + 700: "#4338ca", + 900: "#312e81", + }, + { + 500: "#8b5cf6", + 200: "#ddd6fe", + 300: "#c4b5fd", + 600: "#7c3aed", + 700: "#6d28d9", + 900: "#4c1d95", + }, + { + 500: "#a855f7", + 200: "#e9d5ff", + 300: "#d8b4fe", + 600: "#9333ea", + 700: "#7e22ce", + 900: "#581c87", + }, + { + 500: "#d946ef", + 200: "#f5d0fe", + 300: "#f0abfc", + 600: "#c026d3", + 700: "#a21caf", + 900: "#701a75", + }, + { + 500: "#ec4899", + 200: "#fbcfe8", + 300: "#f9a8d4", + 600: "#db2777", + 700: "#be185d", + 900: "#831843", + }, + { + 500: "#f43f5e", + 200: "#fecdd3", + 300: "#fda4af", + 600: "#e11d48", + 700: "#be123c", + 900: "#881337", + }, +]; function hashCode(str, seed = 0) { - let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; + let h1 = 0xdeadbeef ^ seed, + h2 = 0x41c6ce57 ^ seed; for (let i = 0, ch; i < str.length; i++) { ch = str.charCodeAt(i); h1 = Math.imul(h1 ^ ch, 2654435761); h2 = Math.imul(h2 ^ ch, 1597334677); } - h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909); - h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909); + h1 = + Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ + Math.imul(h2 ^ (h2 >>> 13), 3266489909); + h2 = + Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ + Math.imul(h1 ^ (h1 >>> 13), 3266489909); return 4294967296 * (2097151 & h2) + (h1 >>> 0); -} \ No newline at end of file +} + +function getColor(value) { + let hash = 0; + + if (value.length === 0) { + return COLORS[hash]; + } + + hash = hashCode(value); + return COLORS[hash % COLORS.length]; +} + +const avatars = document.getElementsByClassName("lgn-avatar"); +for (let i = 0; i < avatars.length; i++) { + const displayName = avatars[i].getAttribute("loginname"); + if (displayName) { + const username = displayName.split("@")[0]; + let separator = "_"; + if (username.includes("-")) { + separator = "-"; + } + if (username.includes(".")) { + separator = "."; + } + const split = username.split(separator); + const initials = split[0].charAt(0) + (split[1] ? split[1].charAt(0) : ""); + avatars[i].getElementsByClassName("initials")[0].innerHTML = initials; + + const colorPalette = this.getColor(displayName); + + const isDark = + document.documentElement.classList.includes("lgn-dark-theme"); + + const backgroundShade = isDark ? 900 : 300; + const foregroundShade = isDark ? 200 : 900; + + avatars[i].style.background = colorPalette[backgroundShade]; + avatars[i].style.color = colorPalette[foregroundShade]; + } +} diff --git a/internal/api/ui/login/static/resources/themes/scss/styles/avatar/avatar_theme.scss b/internal/api/ui/login/static/resources/themes/scss/styles/avatar/avatar_theme.scss index d2a78cfdd3..60e862ce42 100644 --- a/internal/api/ui/login/static/resources/themes/scss/styles/avatar/avatar_theme.scss +++ b/internal/api/ui/login/static/resources/themes/scss/styles/avatar/avatar_theme.scss @@ -1,45 +1,53 @@ -@import 'avatar'; +@import "avatar"; @import "../elevation/elevation"; @mixin lgn-avatar-theme() { - @include lgn-avatar-color(); + @include lgn-avatar-color(); } @mixin lgn-avatar-color() { - .lgn-avatar:not(.transparent) { - @include _lgn-avatar-theme-property("background-color", false); - @include lgn-avatar-elevation(2); - } + .lgn-avatar:not(.transparent) { + @include _lgn-avatar-theme-property("background-color", false); + // @include lgn-avatar-elevation(2); + } - .lgn-avatar .initials{ - @include _lgn-avatar-theme-property("color", true); - } + // .lgn-avatar .initials { + // @include _lgn-avatar-theme-property("color", true); + // } } @mixin _lgn-avatar-theme-property($property, $contrast) { - $color: if($contrast, var(--zitadel-color-primary-contrast), var(--zitadel-color-primary)); + $color: if( + $contrast, + var(--zitadel-color-primary-contrast), + var(--zitadel-color-primary) + ); - &.lgn-primary { - #{$property}: $color; - } - &.lgn-accent { - #{$property}: $color; - } - &.lgn-warn { - #{$property}: $color; - } - - &.lgn-primary, - &.lgn-accent, - &.lgn-warn, + &.lgn-primary { + #{$property}: $color; + } + &.lgn-accent { + #{$property}: $color; + } + &.lgn-warn { + #{$property}: $color; + } + + &.lgn-primary, + &.lgn-accent, + &.lgn-warn, + &[disabled] { &[disabled] { - &[disabled] { - $btn-color: if($property == "color", var(--zitadel-color-button-disabled), var(--itadel-color-button-disabled-background)); - #{$property}: $btn-color; - } + $btn-color: if( + $property == "color", + var(--zitadel-color-button-disabled), + var(--itadel-color-button-disabled-background) + ); + #{$property}: $btn-color; } + } } @mixin lgn-avatar-elevation($zValue, $opacity: $lgn-elevation-opacity) { - @include lgn-elevation($zValue, rgb(0, 0, 0), $opacity); - } + @include lgn-elevation($zValue, rgb(0, 0, 0), $opacity); +} diff --git a/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css b/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css index ce000daed3..579117dd4c 100644 --- a/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css +++ b/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css @@ -2798,9 +2798,6 @@ a:hover, a:active { color: var(--zitadel-color-warn); } -.lgn-avatar:not(.transparent) { - box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); -} .lgn-avatar:not(.transparent).lgn-primary { background-color: var(--zitadel-color-primary); } @@ -2814,19 +2811,6 @@ a:hover, a:active { background-color: var(--itadel-color-button-disabled-background); } -.lgn-avatar .initials.lgn-primary { - color: var(--zitadel-color-primary-contrast); -} -.lgn-avatar .initials.lgn-accent { - color: var(--zitadel-color-primary-contrast); -} -.lgn-avatar .initials.lgn-warn { - color: var(--zitadel-color-primary-contrast); -} -.lgn-avatar .initials.lgn-primary[disabled], .lgn-avatar .initials.lgn-accent[disabled], .lgn-avatar .initials.lgn-warn[disabled], .lgn-avatar .initials[disabled][disabled] { - color: var(--zitadel-color-button-disabled); -} - .lgn-select, select { background-image: var(--zitadel-icon-select); } diff --git a/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css.map b/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css.map index 41a02c690a..fc187df67c 100644 --- a/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css.map +++ b/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/styles/vars.scss","../../scss/main.scss","../../scss/styles/footer/footer.scss","../../scss/styles/header/header.scss","../../scss/styles/button/button.scss","../../scss/styles/button/button_base.scss","../../scss/styles/input/input.scss","../../scss/styles/input/input_base.scss","../../scss/styles/label/label.scss","../../scss/styles/label/label_base.scss","../../scss/styles/radio/radio_base.scss","../../scss/styles/radio/radio.scss","../../scss/styles/a/a.scss","../../scss/styles/identity_provider/identity_provider.scss","../../scss/styles/identity_provider/identity_provider_base.scss","../../scss/styles/error/error.scss","../../scss/styles/qrcode/qrcode.scss","../../scss/styles/container/container.scss","../../scss/styles/account_selection/account_selection.scss","../../scss/styles/avatar/avatar.scss","../../scss/styles/checkbox/checkbox.scss","../../scss/styles/checkbox/checkbox_base.scss","../../scss/styles/select/select.scss","../../scss/styles/select/select_base.scss","../../scss/styles/list/list_base.scss","../../scss/styles/typography/faces/ailerons_font_faces.scss","../../scss/styles/typography/faces/lato_font_faces.scss","../../scss/styles/typography/faces/roboto_font_faces.scss","../../scss/styles/typography/faces/raleway_font_faces.scss","../../scss/styles/typography/faces/pt_sans_font_faces.scss","../../scss/styles/success_label/success_label.scss","../../scss/styles/register/register.scss","../../scss/styles/animations.scss","../../scss/styles/typography/typography.scss","../../scss/styles/core/core.scss","../../scss/styles/header/header_theme.scss","../../scss/styles/button/button_theme.scss","../../scss/styles/elevation/elevation.scss","../../scss/styles/input/input_theme.scss","../../scss/styles/radio/radio_theme.scss","../../scss/styles/checkbox/checkbox_theme.scss","../../scss/styles/label/label_theme.scss","../../scss/styles/footer/footer_theme.scss","../../scss/styles/a/a_theme.scss","../../scss/styles/error/error_theme.scss","../../scss/styles/qrcode/qrcode_theme.scss","../../scss/styles/container/container_theme.scss","../../scss/styles/account_selection/account_selection_theme.scss","../../scss/styles/avatar/avatar_theme.scss","../../scss/styles/select/select_theme.scss","../../scss/styles/list/list_theme.scss","../../scss/styles/identity_provider/identity_provider_theme.scss","../../scss/styles/success_label/success_label_theme.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAGA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;AAGA;EACA;EACA;EAGA;EACA;;;AC9MF;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AChBJ;EACI;EACA;EACA;EACA,YAPY;EAQZ;EACA;EACA,SATa;;AAWb;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EAnBJ;IAoBQ;IACA;IACA;IACA;;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;;ACtCZ;EACE;EACA;EACA,QALkB;EAMlB,SAPmB;EAQnB;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACjBJ;ECkBE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;;AAEA;EACE;;AAGF;EACE;;;AD1CJ;ECcE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;EAgBA;;AAdA;EACE;;AAGF;EACE;;;ADtCJ;EACE;EACA;EACA,OCCqB;EDArB;EACA;EACA,aCFqB;EDGrB,eCF8B;;ADI9B;EACE,aCJ0B;;;ADQ9B;EACE;EACA,SCf2B;EDgB3B,aCjB+B;;;ADoBjC;EACE;EACA,YC3B4B;;;AD+B5B;EACE;;;AEnCJ;AAAA;ECOI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;AAAA;EACI,WAtB0B;EAuB1B;;;ADrBR;ECCI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;EACI,WAtB0B;EAuB1B;;;ADjBR;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AElBR;ECGI;EACA,WANkB;EAOlB;EACA,QAPe;EAQf,aAPoB;;;ACMxB;EACI;IACE;;EAGF;IACE;;EAGF;IACE;;;AChBN;EDqBI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA,QA9BS;EA+BT;EACA,SA7BkB;EA8BlB;EACA;EACA;EACA;EACA;EACA,WAzCc;EA0Cd;;AAEA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA,OArDK;EAsDL,QAtDK;EAuDL;EACA;;AAGJ;EACI;EACA;EACA,OA7Da;EA8Db,QA9Da;EA+Db;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAOA;EACI;EACA;;AAGJ;EACI;;AAKZ;AAAA;AAAA;EAGI;;;AE5GR;EACI;EACA;EACA;EACA;;AAEA;EACI;;;ACLR;ECKI;EACA,QARa;EASb;EACA;EACA;EACA;EACA,SAZc;EAad,eAXoB;EAYpB;EACA;;AAEA;EACI;EACA;;AAGJ;EACI,aAtB4B;EAuB5B;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtCZ;EACI;EACA;EACA;;AACA;EACI;EACA;;;AAIR;EACI;;;ACXJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;;ACHR;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACvHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;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I;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACvHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;ACtBJ;EACI;EACA;EACA;EACA;;;ALNJ;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AZlBJ;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EAC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","file":"zitadel.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/styles/vars.scss","../../scss/main.scss","../../scss/styles/footer/footer.scss","../../scss/styles/header/header.scss","../../scss/styles/button/button.scss","../../scss/styles/button/button_base.scss","../../scss/styles/input/input.scss","../../scss/styles/input/input_base.scss","../../scss/styles/label/label.scss","../../scss/styles/label/label_base.scss","../../scss/styles/radio/radio_base.scss","../../scss/styles/radio/radio.scss","../../scss/styles/a/a.scss","../../scss/styles/identity_provider/identity_provider.scss","../../scss/styles/identity_provider/identity_provider_base.scss","../../scss/styles/error/error.scss","../../scss/styles/qrcode/qrcode.scss","../../scss/styles/container/container.scss","../../scss/styles/account_selection/account_selection.scss","../../scss/styles/avatar/avatar.scss","../../scss/styles/checkbox/checkbox.scss","../../scss/styles/checkbox/checkbox_base.scss","../../scss/styles/select/select.scss","../../scss/styles/select/select_base.scss","../../scss/styles/list/list_base.scss","../../scss/styles/typography/faces/ailerons_font_faces.scss","../../scss/styles/typography/faces/lato_font_faces.scss","../../scss/styles/typography/faces/roboto_font_faces.scss","../../scss/styles/typography/faces/raleway_font_faces.scss","../../scss/styles/typography/faces/pt_sans_font_faces.scss","../../scss/styles/success_label/success_label.scss","../../scss/styles/register/register.scss","../../scss/styles/animations.scss","../../scss/styles/typography/typography.scss","../../scss/styles/core/core.scss","../../scss/styles/header/header_theme.scss","../../scss/styles/button/button_theme.scss","../../scss/styles/elevation/elevation.scss","../../scss/styles/input/input_theme.scss","../../scss/styles/radio/radio_theme.scss","../../scss/styles/checkbox/checkbox_theme.scss","../../scss/styles/label/label_theme.scss","../../scss/styles/footer/footer_theme.scss","../../scss/styles/a/a_theme.scss","../../scss/styles/error/error_theme.scss","../../scss/styles/qrcode/qrcode_theme.scss","../../scss/styles/container/container_theme.scss","../../scss/styles/account_selection/account_selection_theme.scss","../../scss/styles/avatar/avatar_theme.scss","../../scss/styles/select/select_theme.scss","../../scss/styles/list/list_theme.scss","../../scss/styles/identity_provider/identity_provider_theme.scss","../../scss/styles/success_label/success_label_theme.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAGA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;AAGA;EACA;EACA;EAGA;EACA;;;AC9MF;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AChBJ;EACI;EACA;EACA;EACA,YAPY;EAQZ;EACA;EACA,SATa;;AAWb;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EAnBJ;IAoBQ;IACA;IACA;IACA;;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;;ACtCZ;EACE;EACA;EACA,QALkB;EAMlB,SAPmB;EAQnB;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACjBJ;ECkBE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;;AAEA;EACE;;AAGF;EACE;;;AD1CJ;ECcE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA,QAjCkB;EAkClB,WAnCqB;EAoCrB,aAlCuB;EAmCvB,SAtCmB;EAuCnB,eAnCyB;EAqCzB;EAgBA;;AAdA;EACE;;AAGF;EACE;;;ADtCJ;EACE;EACA;EACA,OCCqB;EDArB;EACA;EACA,aCFqB;EDGrB,eCF8B;;ADI9B;EACE,aCJ0B;;;ADQ9B;EACE;EACA,SCf2B;EDgB3B,aCjB+B;;;ADoBjC;EACE;EACA,YC3B4B;;;AD+B5B;EACE;;;AEnCJ;AAAA;ECOI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;AAAA;EACI,WAtB0B;EAuB1B;;;ADrBR;ECCI;EACA;EACA,sBAXsB;EAYtB;EACA;EACA;EACA;EACA,eAZsB;EAatB;EACA;EACA;EACA,cAfqB;EAgBrB,QAlBoB;EAmBpB,SArBgB;EAsBhB;EACA;EACA,QAvBe;;AAyBf;EACI,WAtB0B;EAuB1B;;;ADjBR;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AElBR;ECGI;EACA,WANkB;EAOlB;EACA,QAPe;EAQf,aAPoB;;;ACMxB;EACI;IACE;;EAGF;IACE;;EAGF;IACE;;;AChBN;EDqBI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA,QA9BS;EA+BT;EACA,SA7BkB;EA8BlB;EACA;EACA;EACA;EACA;EACA,WAzCc;EA0Cd;;AAEA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA,OArDK;EAsDL,QAtDK;EAuDL;EACA;;AAGJ;EACI;EACA;EACA,OA7Da;EA8Db,QA9Da;EA+Db;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAOA;EACI;EACA;;AAGJ;EACI;;AAKZ;AAAA;AAAA;EAGI;;;AE5GR;EACI;EACA;EACA;EACA;;AAEA;EACI;;;ACLR;ECKI;EACA,QARa;EASb;EACA;EACA;EACA;EACA,SAZc;EAad,eAXoB;EAYpB;EACA;;AAEA;EACI;EACA;;AAGJ;EACI,aAtB4B;EAuB5B;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtCZ;EACI;EACA;EACA;;AACA;EACI;EACA;;;AAIR;EACI;;;ACXJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;;ACHR;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACvHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;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I;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGA;EACI;;AAMhB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;;ACvHJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;;ACrDZ;EACI,QAHc;EAId,OAJc;EAKd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACrBJ;ECCI;EACA;EACA;EACA,WANqB;EAOrB;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA,WA3BiB;EA4BjB;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AChDZ;ECCI;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI;;;ACVJ;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;;;ACpCR;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;ACtBJ;EACI;EACA;EACA;EACA;;;ALNJ;EACI;EACA;;ACFJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC7DJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;ACzEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AC9GJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AZlBJ;EACI,WAPsB;EAQtB;EACA;EACA,eAN0B;EAO1B;;AAEA;EAPJ;IAQQ,YAXmB;;;;AAe3B;EACI;EACA;EACA,QAnBmB;EAoBnB,SArBoB;EAsBpB;EACA;;AAGI;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EAC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","file":"zitadel.css"} \ No newline at end of file