mirror of
https://github.com/andwati/zitadel.git
synced 2026-11-15 18:25:13 +00:00
* chore(deps): bump flag-icons from 6.9.3 to 7.1.0 in /console (#7092) Bumps [flag-icons](https://github.com/lipis/flag-icons) from 6.9.3 to 7.1.0. - [Release notes](https://github.com/lipis/flag-icons/releases) - [Changelog](https://github.com/lipis/flag-icons/blob/main/CHANGELOG.md) - [Commits](https://github.com/lipis/flag-icons/compare/v6.9.3...v7.1.0) --- updated-dependencies: - dependency-name: flag-icons dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump prettier from 3.0.3 to 3.1.1 in /console (#7058) Bumps [prettier](https://github.com/prettier/prettier) from 3.0.3 to 3.1.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.0.3...3.1.1) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump uuid and @types/uuid in /console (#6993) Bumps [uuid](https://github.com/uuidjs/uuid) and [@types/uuid](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/uuid). These dependencies needed to be updated together. Updates `uuid` from 9.0.0 to 9.0.1 - [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md) - [Commits](https://github.com/uuidjs/uuid/compare/v9.0.0...v9.0.1) Updates `@types/uuid` from 9.0.2 to 9.0.7 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/uuid) --- updated-dependencies: - dependency-name: uuid dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: "@types/uuid" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * zonejs * chore(deps-dev): bump @types/jasmine from 4.3.6 to 5.1.4 in /console (#6991) Bumps [@types/jasmine](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jasmine) from 4.3.6 to 5.1.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jasmine) --- updated-dependencies: - dependency-name: "@types/jasmine" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump i18n-iso-countries from 7.6.0 to 7.7.0 in /console (#6990) Bumps [i18n-iso-countries](https://github.com/michaelwittig/node-i18n-iso-countries) from 7.6.0 to 7.7.0. - [Release notes](https://github.com/michaelwittig/node-i18n-iso-countries/releases) - [Commits](https://github.com/michaelwittig/node-i18n-iso-countries/compare/v7.6.0...v7.7.0) --- updated-dependencies: - dependency-name: i18n-iso-countries dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * jasmine * prettier plugin * chore(deps-dev): bump @types/opentype.js from 1.3.4 to 1.3.8 in /console (#6985) Bumps [@types/opentype.js](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/opentype.js) from 1.3.4 to 1.3.8. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/opentype.js) --- updated-dependencies: - dependency-name: "@types/opentype.js" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump postcss from 8.4.21 to 8.4.31 in /docs (#6674) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.21 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.21...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump axios and wait-on in /e2e (#7073) Bumps [axios](https://github.com/axios/axios) to 1.6.2 and updates ancestor dependency [wait-on](https://github.com/jeffbski/wait-on). These dependencies need to be updated together. Updates `axios` from 0.25.0 to 1.6.2 - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.25.0...v1.6.2) Updates `wait-on` from 6.0.1 to 7.2.0 - [Release notes](https://github.com/jeffbski/wait-on/releases) - [Commits](https://github.com/jeffbski/wait-on/compare/v6.0.1...v7.2.0) --- updated-dependencies: - dependency-name: axios dependency-type: indirect - dependency-name: wait-on dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * lint changes * lint --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
308 lines
9.6 KiB
TypeScript
308 lines
9.6 KiB
TypeScript
import { COMMA, ENTER, SPACE } from '@angular/cdk/keycodes';
|
|
import { Location } from '@angular/common';
|
|
import { Component, Injector, Type } from '@angular/core';
|
|
import { AbstractControl, FormControl, FormGroup } from '@angular/forms';
|
|
import { MatChipInputEvent } from '@angular/material/chips';
|
|
import { ActivatedRoute } from '@angular/router';
|
|
import { take } from 'rxjs';
|
|
import {
|
|
AddAzureADProviderRequest as AdminAddAzureADProviderRequest,
|
|
GetProviderByIDRequest as AdminGetProviderByIDRequest,
|
|
UpdateAzureADProviderRequest as AdminUpdateAzureADProviderRequest,
|
|
} from 'src/app/proto/generated/zitadel/admin_pb';
|
|
import { AzureADTenant, AzureADTenantType, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
|
|
import {
|
|
AddAzureADProviderRequest as MgmtAddAzureADProviderRequest,
|
|
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
|
|
UpdateAzureADProviderRequest as MgmtUpdateAzureADProviderRequest,
|
|
} 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 { requiredValidator } from '../../form-field/validators/validators';
|
|
|
|
import { PolicyComponentServiceType } from '../../policies/policy-component-types.enum';
|
|
|
|
@Component({
|
|
selector: 'cnsl-provider-azure-ad',
|
|
templateUrl: './provider-azure-ad.component.html',
|
|
})
|
|
export class ProviderAzureADComponent {
|
|
public showOptional: boolean = false;
|
|
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
|
|
public id: string | null = '';
|
|
public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;
|
|
private service!: ManagementService | AdminService;
|
|
|
|
public readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE];
|
|
|
|
public form!: FormGroup;
|
|
|
|
public loading: boolean = false;
|
|
|
|
public provider?: Provider.AsObject;
|
|
public updateClientSecret: boolean = false;
|
|
|
|
public AzureTenantIDType: number = 3;
|
|
public tenantTypes = [
|
|
this.AzureTenantIDType,
|
|
AzureADTenantType.AZURE_AD_TENANT_TYPE_COMMON,
|
|
AzureADTenantType.AZURE_AD_TENANT_TYPE_ORGANISATIONS,
|
|
AzureADTenantType.AZURE_AD_TENANT_TYPE_CONSUMERS,
|
|
];
|
|
|
|
constructor(
|
|
private authService: GrpcAuthService,
|
|
private route: ActivatedRoute,
|
|
private toast: ToastService,
|
|
private injector: Injector,
|
|
private _location: Location,
|
|
private breadcrumbService: BreadcrumbService,
|
|
) {
|
|
this.form = new FormGroup({
|
|
name: new FormControl('', []),
|
|
clientId: new FormControl('', [requiredValidator]),
|
|
clientSecret: new FormControl('', [requiredValidator]),
|
|
scopesList: new FormControl(['openid', 'profile', 'email'], []),
|
|
tenantType: new FormControl<AzureADTenantType>(AzureADTenantType.AZURE_AD_TENANT_TYPE_COMMON),
|
|
tenantId: new FormControl<string>(''),
|
|
emailVerified: new FormControl(false),
|
|
});
|
|
|
|
this.authService
|
|
.isAllowed(
|
|
this.serviceType === PolicyComponentServiceType.ADMIN
|
|
? ['iam.idp.write']
|
|
: this.serviceType === PolicyComponentServiceType.MGMT
|
|
? ['org.idp.write']
|
|
: [],
|
|
)
|
|
.pipe(take(1))
|
|
.subscribe((allowed) => {
|
|
if (allowed) {
|
|
this.form.enable();
|
|
} else {
|
|
this.form.disable();
|
|
}
|
|
});
|
|
|
|
this.route.data.pipe(take(1)).subscribe((data) => {
|
|
this.serviceType = data['serviceType'];
|
|
|
|
switch (this.serviceType) {
|
|
case PolicyComponentServiceType.MGMT:
|
|
this.service = this.injector.get(ManagementService as Type<ManagementService>);
|
|
|
|
const bread: Breadcrumb = {
|
|
type: BreadcrumbType.ORG,
|
|
routerLink: ['/org'],
|
|
};
|
|
|
|
this.breadcrumbService.setBreadcrumb([bread]);
|
|
break;
|
|
case PolicyComponentServiceType.ADMIN:
|
|
this.service = this.injector.get(AdminService as Type<AdminService>);
|
|
|
|
const iamBread = new Breadcrumb({
|
|
type: BreadcrumbType.ORG,
|
|
name: 'Instance',
|
|
routerLink: ['/instance'],
|
|
});
|
|
this.breadcrumbService.setBreadcrumb([iamBread]);
|
|
break;
|
|
}
|
|
|
|
this.id = this.route.snapshot.paramMap.get('id');
|
|
if (this.id) {
|
|
this.clientSecret?.setValidators([]);
|
|
this.getData(this.id);
|
|
}
|
|
});
|
|
}
|
|
|
|
private getData(id: string): void {
|
|
const req =
|
|
this.serviceType === PolicyComponentServiceType.ADMIN
|
|
? new AdminGetProviderByIDRequest()
|
|
: new MgmtGetProviderByIDRequest();
|
|
req.setId(id);
|
|
this.service
|
|
.getProviderID(req)
|
|
.then((resp) => {
|
|
const object = resp.toObject();
|
|
this.provider = object.idp;
|
|
this.loading = false;
|
|
if (this.provider?.config?.azureAd) {
|
|
this.form.patchValue(this.provider.config.azureAd);
|
|
this.name?.setValue(this.provider.name);
|
|
this.tenantId?.setValue(this.provider.config.azureAd.tenant?.tenantId);
|
|
this.tenantType?.setValue(this.provider.config.azureAd.tenant?.tenantType);
|
|
|
|
const tenant = resp.getIdp()?.getConfig()?.getAzureAd()?.getTenant();
|
|
|
|
if (tenant) {
|
|
switch (tenant.getTypeCase()) {
|
|
case AzureADTenant.TypeCase.TENANT_ID:
|
|
this.tenantId?.setValue(tenant.getTenantId());
|
|
this.tenantType?.setValue(this.AzureTenantIDType);
|
|
break;
|
|
case AzureADTenant.TypeCase.TENANT_TYPE:
|
|
this.tenantType?.setValue(tenant.getTenantType());
|
|
this.tenantId?.setValue('');
|
|
break;
|
|
case AzureADTenant.TypeCase.TYPE_NOT_SET:
|
|
this.tenantType?.setValue(this.AzureTenantIDType);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
this.toast.showError(error);
|
|
this.loading = false;
|
|
});
|
|
}
|
|
|
|
public submitForm(): void {
|
|
this.provider ? this.updateAzureADProvider() : this.addAzureADProvider();
|
|
}
|
|
|
|
public addAzureADProvider(): void {
|
|
const req =
|
|
this.serviceType === PolicyComponentServiceType.MGMT
|
|
? new MgmtAddAzureADProviderRequest()
|
|
: new AdminAddAzureADProviderRequest();
|
|
|
|
req.setName(this.name?.value);
|
|
req.setClientId(this.clientId?.value);
|
|
req.setClientSecret(this.clientSecret?.value);
|
|
req.setEmailVerified(this.emailVerified?.value);
|
|
|
|
const tenant = new AzureADTenant();
|
|
if (this.tenantType?.value === this.AzureTenantIDType) {
|
|
tenant.setTenantId(this.tenantId?.value);
|
|
} else {
|
|
tenant.setTenantType(this.tenantType?.value);
|
|
}
|
|
req.setTenant(tenant);
|
|
|
|
req.setScopesList(this.scopesList?.value);
|
|
req.setProviderOptions(this.options);
|
|
|
|
this.loading = true;
|
|
this.service
|
|
.addAzureADProvider(req)
|
|
.then((idp) => {
|
|
setTimeout(() => {
|
|
this.loading = false;
|
|
this.close();
|
|
}, 2000);
|
|
})
|
|
.catch((error) => {
|
|
this.toast.showError(error);
|
|
this.loading = false;
|
|
});
|
|
}
|
|
|
|
public updateAzureADProvider(): void {
|
|
if (this.provider) {
|
|
const req =
|
|
this.serviceType === PolicyComponentServiceType.MGMT
|
|
? new MgmtUpdateAzureADProviderRequest()
|
|
: new AdminUpdateAzureADProviderRequest();
|
|
|
|
req.setId(this.provider.id);
|
|
req.setName(this.name?.value);
|
|
req.setClientId(this.clientId?.value);
|
|
req.setEmailVerified(this.emailVerified?.value);
|
|
|
|
const tenant = new AzureADTenant();
|
|
if (this.tenantType?.value === this.AzureTenantIDType) {
|
|
tenant.setTenantId(this.tenantId?.value);
|
|
} else {
|
|
tenant.setTenantType(this.tenantType?.value);
|
|
}
|
|
req.setTenant(tenant);
|
|
|
|
req.setScopesList(this.scopesList?.value);
|
|
req.setProviderOptions(this.options);
|
|
|
|
if (this.updateClientSecret) {
|
|
req.setClientSecret(this.clientSecret?.value);
|
|
}
|
|
|
|
this.loading = true;
|
|
this.service
|
|
.updateAzureADProvider(req)
|
|
.then((idp) => {
|
|
setTimeout(() => {
|
|
this.loading = false;
|
|
this.close();
|
|
}, 2000);
|
|
})
|
|
.catch((error) => {
|
|
this.toast.showError(error);
|
|
this.loading = false;
|
|
});
|
|
}
|
|
}
|
|
|
|
public close(): void {
|
|
this._location.back();
|
|
}
|
|
|
|
public addScope(event: MatChipInputEvent): void {
|
|
const input = event.chipInput?.inputElement;
|
|
const value = event.value.trim();
|
|
|
|
if (value !== '') {
|
|
if (this.scopesList?.value) {
|
|
this.scopesList.value.push(value);
|
|
if (input) {
|
|
input.value = '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public removeScope(uri: string): void {
|
|
if (this.scopesList?.value) {
|
|
const index = this.scopesList.value.indexOf(uri);
|
|
|
|
if (index !== undefined && index >= 0) {
|
|
this.scopesList.value.splice(index, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
public get name(): AbstractControl | null {
|
|
return this.form.get('name');
|
|
}
|
|
|
|
public get clientId(): AbstractControl | null {
|
|
return this.form.get('clientId');
|
|
}
|
|
|
|
public get clientSecret(): AbstractControl | null {
|
|
return this.form.get('clientSecret');
|
|
}
|
|
|
|
public get scopesList(): AbstractControl | null {
|
|
return this.form.get('scopesList');
|
|
}
|
|
|
|
public get emailVerified(): AbstractControl | null {
|
|
return this.form.get('emailVerified');
|
|
}
|
|
|
|
public get tenantId(): AbstractControl | null {
|
|
return this.form.get('tenantId');
|
|
}
|
|
|
|
public get tenantType(): AbstractControl | null {
|
|
return this.form.get('tenantType');
|
|
}
|
|
}
|