{{ 'IDP.CREATE.DESCRIPTION' | translate }}
- -{{ 'IDP.OIDC.DESCRIPTION' | translate }}
- - -{{ 'IDP.JWT.DESCRIPTION' | translate }}
- - -
- |
-
- |
-
{{ 'IDP.AVAILABILITY' | translate }}
@@ -129,8 +37,21 @@
{{ 'IDP.TYPE' | translate }} |
- {{ 'IDP.TYPES.1' | translate }}
- {{ 'IDP.TYPES.3' | translate }}
+ |
+
+
+ Google
+
+
+
+
+
+ coming soon
+ {{ 'IDP.CREATIONDATE' | translate }} |
-
+ |
{{ idp.details.creationDate | timestampToDate | localizedDate : 'dd. MMM, HH:mm' }}
|
{{ 'IDP.CHANGEDATE' | translate }} |
-
+ |
{{ idp.details.changeDate | timestampToDate | localizedDate : 'dd. MMM, HH:mm' }}
|
{{ 'IDP.OWNER' | translate }} |
-
+ |
{{ 'IDP.OWNERTYPES.' + idp.owner | translate }}
|
-
diff --git a/console/src/app/modules/idp/idp.component.scss b/console/src/app/modules/idp/idp.component.scss
deleted file mode 100644
index 1856affae6..0000000000
--- a/console/src/app/modules/idp/idp.component.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-.idp-wrapper {
- margin-top: 2rem;
-
- .idp-desc {
- font-size: 14px;
- }
-
- .idp-content {
- .idp-desc {
- margin-bottom: 1rem;
- }
-
- .idp-formfield {
- display: block;
- max-width: 400px;
-
- .chip {
- border-radius: 0.5rem;
- height: 40px;
- }
-
- .mat-chip-input {
- width: 100%;
- margin: 0;
- }
-
- @media only screen and (max-width: 450px) {
- max-width: none;
- }
- }
-
- .auto-reg-info {
- margin: 0 0 1rem 0;
- display: block;
- width: 100%;
- max-width: 400px;
-
- .auto-reg-desc {
- margin: 0 0 1rem 0;
- }
- }
-
- .scope-card {
- max-width: 400px;
- display: block;
-
- .scope-card-content {
- display: block;
-
- .flex-line {
- display: flex;
- align-items: flex-end;
- width: 100%;
-
- .idp-formfield {
- flex: 1;
-
- input {
- margin: 0;
- }
- }
-
- button {
- margin-bottom: 12px;
- }
- }
- }
- }
- }
-
- .btn-wrapper {
- display: flex;
- margin-top: 1rem;
-
- .continue-button {
- margin-bottom: 2rem;
- display: block;
-
- @media only screen and (max-width: 450px) {
- margin-top: 1rem;
- margin-bottom: 2rem;
- }
- }
- }
-}
diff --git a/console/src/app/modules/idp/idp.component.ts b/console/src/app/modules/idp/idp.component.ts
deleted file mode 100644
index f018afc9ce..0000000000
--- a/console/src/app/modules/idp/idp.component.ts
+++ /dev/null
@@ -1,472 +0,0 @@
-import { COMMA, ENTER, SPACE } from '@angular/cdk/keycodes';
-import { Location } from '@angular/common';
-import { Component, Injector, OnDestroy, Type } from '@angular/core';
-import { AbstractControl, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
-import { MatLegacyChipInputEvent as MatChipInputEvent } from '@angular/material/legacy-chips';
-import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog';
-import { ActivatedRoute, Router } from '@angular/router';
-import { Observable, Subject } from 'rxjs';
-import { take } from 'rxjs/operators';
-import {
- UpdateIDPJWTConfigRequest,
- UpdateIDPOIDCConfigRequest,
- UpdateIDPRequest,
-} from 'src/app/proto/generated/zitadel/admin_pb';
-import { IDP, IDPState, IDPStylingType, OIDCMappingField } from 'src/app/proto/generated/zitadel/idp_pb';
-import {
- UpdateOrgIDPJWTConfigRequest,
- UpdateOrgIDPOIDCConfigRequest,
- UpdateOrgIDPRequest,
-} from 'src/app/proto/generated/zitadel/management_pb';
-import { AdminService } from 'src/app/services/admin.service';
-import { Breadcrumb, BreadcrumbService, BreadcrumbType } from 'src/app/services/breadcrumb.service';
-import { GrpcAuthService } from 'src/app/services/grpc-auth.service';
-import { ManagementService } from 'src/app/services/mgmt.service';
-import { ToastService } from 'src/app/services/toast.service';
-
-import { PolicyComponentServiceType } from '../policies/policy-component-types.enum';
-import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
-
-@Component({
- selector: 'cnsl-idp',
- templateUrl: './idp.component.html',
- styleUrls: ['./idp.component.scss'],
-})
-export class IdpComponent implements OnDestroy {
- public mappingFields: OIDCMappingField[] = [];
- public styleFields: IDPStylingType[] = [];
-
- public showIdSecretSection: boolean = false;
- public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;
- private service!: ManagementService | AdminService;
- public PolicyComponentServiceType: any = PolicyComponentServiceType;
- public readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE];
-
- public idp?: IDP.AsObject;
- private destroy$: Subject
-
-{{ 'IDP.OIDC.GENERAL' | translate }}- - - -{{ 'IDP.OIDC.TITLE' | translate }}-{{ 'IDP.OIDC.DESCRIPTION' | translate }} - - -{{ 'IDP.JWT.TITLE' | translate }}-{{ 'IDP.JWT.DESCRIPTION' | translate }} - - -{{ 'IDP.CREATE.TITLE' | translate }}+{{ 'IDP.CREATE.DESCRIPTION' | translate }} + +
+
+
+
diff --git a/console/src/app/modules/policies/idp-settings/idp-settings.component.scss b/console/src/app/modules/policies/idp-settings/idp-settings.component.scss
index fec6398999..25e055dfe4 100644
--- a/console/src/app/modules/policies/idp-settings/idp-settings.component.scss
+++ b/console/src/app/modules/policies/idp-settings/idp-settings.component.scss
@@ -1,3 +1,109 @@
-.cnsl-idp-table-wrapper {
- display: block;
+@use '@angular/material' as mat;
+
+@mixin idp-settings-theme($theme) {
+ $primary: map-get($theme, primary);
+ $primary-color: mat.get-color-from-palette($primary, 500);
+ $is-dark-theme: map-get($theme, is-dark);
+ $background: map-get($theme, background);
+ $foreground: map-get($theme, foreground);
+
+ .cnsl-idp-table-wrapper {
+ display: block;
+ }
+
+ .new-idp-wrapper {
+ display: grid;
+ row-gap: 1.5rem;
+ column-gap: 1.5rem;
+ box-sizing: border-box;
+ width: 100%;
+ grid-template-columns: 1fr;
+
+ @media only screen and (min-width: 700px) {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ @media only screen and (min-width: 1000px) {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+
+ @media only screen and (min-width: 1300px) {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+
+ .item {
+ position: relative;
+ z-index: 100;
+ display: flex;
+ text-decoration: none;
+ cursor: pointer;
+ padding-top: 1rem;
+ padding-right: 1rem;
+ padding-bottom: 1rem;
+ padding-left: 1rem;
+ border-radius: 0.5rem;
+ box-sizing: border-box;
+ transition: box-shadow 0.1s ease-in;
+ align-items: center;
+ color: map-get($foreground, text);
+
+ .coming-soon-label {
+ position: absolute;
+ top: 0;
+ right: 1rem;
+ transform: translateY(-50%);
+ width: fit-content;
+ }
+
+ &:hover {
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.12);
+ }
+
+ .idp-logo {
+ margin-right: 1rem;
+ height: 36px;
+ width: 36px;
+
+ &.dark {
+ display: if($is-dark-theme, block, none);
+ }
+
+ &.light {
+ display: if($is-dark-theme, none, block);
+ }
+ }
+
+ .idp-icon {
+ margin-right: 1rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 36px;
+ width: 36px;
+
+ .icon {
+ font-size: 2.25rem;
+ height: 2.25rem;
+ width: 2.25rem;
+ }
+ }
+
+ .text-container {
+ display: flex;
+ flex-direction: column;
+
+ .title {
+ }
+ }
+
+ &.coming-soon {
+ filter: grayscale(1);
+ cursor: not-allowed;
+
+ &:hover {
+ box-shadow: none;
+ }
+ }
+ }
+ }
}
diff --git a/console/src/app/modules/policies/idp-settings/idp-settings.component.ts b/console/src/app/modules/policies/idp-settings/idp-settings.component.ts
index a3ec92e3e0..cb17288612 100644
--- a/console/src/app/modules/policies/idp-settings/idp-settings.component.ts
+++ b/console/src/app/modules/policies/idp-settings/idp-settings.component.ts
@@ -26,4 +26,6 @@ export class IdpSettingsComponent implements OnInit {
break;
}
}
+
+ public createGoogle() {}
}
diff --git a/console/src/app/modules/policies/idp-settings/idp-settings.module.ts b/console/src/app/modules/policies/idp-settings/idp-settings.module.ts
index fe98a30da5..79264fbe3c 100644
--- a/console/src/app/modules/policies/idp-settings/idp-settings.module.ts
+++ b/console/src/app/modules/policies/idp-settings/idp-settings.module.ts
@@ -1,7 +1,11 @@
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
+import { MatIconModule } from '@angular/material/icon';
+import { MatLegacyButtonModule } from '@angular/material/legacy-button';
import { MatLegacyProgressSpinnerModule as MatProgressSpinnerModule } from '@angular/material/legacy-progress-spinner';
+import { RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
+import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module';
import { CardModule } from '../../card/card.module';
import { IdpTableModule } from '../../idp-table/idp-table.module';
@@ -9,7 +13,17 @@ import { IdpSettingsComponent } from './idp-settings.component';
@NgModule({
declarations: [IdpSettingsComponent],
- imports: [CommonModule, CardModule, IdpTableModule, MatProgressSpinnerModule, TranslateModule],
+ imports: [
+ CommonModule,
+ MatLegacyButtonModule,
+ CardModule,
+ MatIconModule,
+ IdpTableModule,
+ RouterModule,
+ HasRolePipeModule,
+ MatProgressSpinnerModule,
+ TranslateModule,
+ ],
exports: [IdpSettingsComponent],
})
export class IdpSettingsModule {}
diff --git a/console/src/app/modules/provider-options/provider-options.component.html b/console/src/app/modules/provider-options/provider-options.component.html
new file mode 100644
index 0000000000..4991eee7ae
--- /dev/null
+++ b/console/src/app/modules/provider-options/provider-options.component.html
@@ -0,0 +1,26 @@
+
diff --git a/console/src/app/modules/provider-options/provider-options.component.scss b/console/src/app/modules/provider-options/provider-options.component.scss
new file mode 100644
index 0000000000..5363ea02da
--- /dev/null
+++ b/console/src/app/modules/provider-options/provider-options.component.scss
@@ -0,0 +1,11 @@
+.option-form {
+ display: grid;
+ grid-template-columns: 1fr;
+ max-width: 400px;
+ padding-bottom: 1rem;
+
+ .checkbox-desc {
+ margin-top: 0;
+ margin-bottom: 0.5rem;
+ }
+}
diff --git a/console/src/app/modules/provider-options/provider-options.component.spec.ts b/console/src/app/modules/provider-options/provider-options.component.spec.ts
new file mode 100644
index 0000000000..76ec0e2081
--- /dev/null
+++ b/console/src/app/modules/provider-options/provider-options.component.spec.ts
@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProviderOptionsComponent } from './provider-options.component';
+
+describe('ProviderOptionsComponent', () => {
+ let component: ProviderOptionsComponent;
+ let fixture: ComponentFixture
+ Google
+
+
+
+
+ {{ 'ACTIONS.COMINGSOON' | translate }}
+
+
+
+
+ Microsoft
+
+
+ {{ 'ACTIONS.COMINGSOON' | translate }}
+
+
+
+
+
+
+ GitHub
+
+
+ {{ 'ACTIONS.COMINGSOON' | translate }}
+
+
+
+
+
+ GitLab
+
+
+ Generic OIDC
+
+
+
+
+
+
+ Generic JWT
+
+
+
+
+
+
+
+
+
+ {{ 'IDP.CREATE.GOOGLE.TITLE' | translate }}++ {{ !provider ? ('IDP.CREATE.GOOGLE.DESCRIPTION' | translate) : ('IDP.DETAIL.DESCRIPTION' | translate) }} + + + +
+
+
+
+
+ {{ 'IDP.CREATE.JWT.TITLE' | translate }}+{{ 'IDP.CREATE.JWT.DESCRIPTION' | translate }} + + +
+
+
+
+
+ {{ 'IDP.CREATE.OIDC.TITLE' | translate }}+{{ 'IDP.CREATE.OIDC.DESCRIPTION' | translate }} + + + |
---|