feat(console): Active Directory / LDAP, cleanup idp component routing (#5506)

feat(console): LDAP
This commit is contained in:
Max Peintner
2023-03-28 07:38:17 +00:00
committed by GitHub
parent a14bfff0bb
commit 542271b467
74 changed files with 1542 additions and 865 deletions
@@ -110,10 +110,9 @@
<cnsl-redirect-uris
class="redirect-section"
[canWrite]="true"
[disabled]="false"
[isNative]="appType?.value.oidcAppType === OIDCAppType.OIDC_APP_TYPE_NATIVE"
(changedUris)="oidcAppRequest.setRedirectUrisList($any($event))"
[urisList]="oidcAppRequest.toObject().redirectUrisList"
[(ngModel)]="redirectUris"
[getValues]="requestRedirectValuesSubject$"
title="{{ 'APP.OIDC.REDIRECT' | translate }}"
data-e2e="redirect-uris"
@@ -139,11 +138,10 @@
<cnsl-redirect-uris
class="redirect-section"
[canWrite]="true"
(changedUris)="oidcAppRequest.setPostLogoutRedirectUrisList($any($event))"
[urisList]="oidcAppRequest.toObject().postLogoutRedirectUrisList"
title="{{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }}"
[disabled]="false"
[(ngModel)]="postLogoutUrisList"
[getValues]="requestRedirectValuesSubject$"
title="{{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }}"
[isNative]="appType?.value.oidcAppType === OIDCAppType.OIDC_APP_TYPE_NATIVE"
data-e2e="postlogout-uris"
>
@@ -431,20 +429,18 @@
<div class="formfield full-width">
<cnsl-redirect-uris
class="redirect-section"
[canWrite]="true"
(changedUris)="oidcAppRequest.setRedirectUrisList($any($event))"
[urisList]="oidcAppRequest.toObject().redirectUrisList"
title="{{ 'APP.OIDC.REDIRECT' | translate }}"
[disabled]="false"
[(ngModel)]="redirectUris"
[getValues]="requestRedirectValuesSubject$"
title="{{ 'APP.OIDC.REDIRECT' | translate }}"
[isNative]="appType?.value.oidcAppType === OIDCAppType.OIDC_APP_TYPE_NATIVE"
>
</cnsl-redirect-uris>
<cnsl-redirect-uris
class="redirect-section"
[canWrite]="true"
(changedUris)="oidcAppRequest.setPostLogoutRedirectUrisList($any($event))"
[urisList]="oidcAppRequest.toObject().postLogoutRedirectUrisList"
[disabled]="false"
[(ngModel)]="postLogoutUrisList"
title="{{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }}"
[getValues]="requestRedirectValuesSubject$"
[isNative]="appType?.value.oidcAppType === OIDCAppType.OIDC_APP_TYPE_NATIVE"
@@ -221,6 +221,22 @@ export class AppCreateComponent implements OnInit, OnDestroy {
});
}
public get redirectUris() {
return this.oidcAppRequest.toObject().redirectUrisList;
}
public set redirectUris(value: string[]) {
this.oidcAppRequest.setRedirectUrisList(value);
}
public get postLogoutUrisList() {
return this.oidcAppRequest.toObject().postLogoutRedirectUrisList;
}
public set postLogoutUrisList(value: string[]) {
this.oidcAppRequest.setPostLogoutRedirectUrisList(value);
}
public ngOnInit(): void {
this.subscription = this.route.params.subscribe((params) => this.getData(params));
@@ -334,11 +334,9 @@
<cnsl-redirect-uris
*ngIf="appType?.value !== undefined"
class="redirect-section"
[canWrite]="canWrite"
[disabled]="!canWrite"
[devMode]="devMode?.value"
[getValues]="requestRedirectValuesSubject$"
(changedUris)="redirectUrisList = $any($event)"
[urisList]="redirectUrisList"
[(ngModel)]="redirectUrisList"
title="{{ 'APP.OIDC.REDIRECT' | translate }}"
[isNative]="appType?.value === OIDCAppType.OIDC_APP_TYPE_NATIVE"
>
@@ -347,11 +345,9 @@
<cnsl-redirect-uris
*ngIf="appType?.value !== undefined"
class="redirect-section"
[canWrite]="canWrite"
[disabled]="!canWrite"
[devMode]="devMode?.value"
(changedUris)="postLogoutRedirectUrisList = $any($event)"
[urisList]="postLogoutRedirectUrisList"
[getValues]="requestRedirectValuesSubject$"
[(ngModel)]="postLogoutRedirectUrisList"
title="{{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }}"
[isNative]="appType?.value === OIDCAppType.OIDC_APP_TYPE_NATIVE"
>
@@ -268,12 +268,6 @@
margin-bottom: 1.5rem;
}
.error {
font-size: 13px;
color: var(--warn);
margin: 0 0.5rem 1.5rem 0.5rem;
}
.btn-container {
display: flex;
justify-content: flex-end;
@@ -8,14 +8,14 @@
matTooltip="{{ 'ACTIONS.ADD' | translate }}"
type="submit"
mat-icon-button
[disabled]="redirectControl.invalid || !canWrite"
[disabled]="redirectControl.invalid || redirectControl.disabled"
>
<mat-icon>add</mat-icon>
</button>
</form>
<div class="redirect-uris-list">
<div *ngFor="let uri of urisList" class="uri-line" [ngClass]="{ alert: !devMode && !(uri | redirect : isNative) }">
<div *ngFor="let uri of value" class="uri-line" [ngClass]="{ alert: !devMode && !(uri | redirect : isNative) }">
<span
class="uri"
[ngClass]="{ green: !devMode && uri?.startsWith('https://'), red: !devMode && !uri?.startsWith('https://') }"
@@ -29,7 +29,13 @@
"
></i>
<button matTooltip="{{ 'ACTIONS.DELETE' | translate }}" mat-icon-button (click)="remove(uri)" class="icon-button">
<button
type="button"
matTooltip="{{ 'ACTIONS.DELETE' | translate }}"
mat-icon-button
(click)="remove(uri)"
class="icon-button"
>
<mat-icon class="icon">cancel</mat-icon>
</button>
</div>
@@ -1,44 +1,83 @@
import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
import { UntypedFormControl } from '@angular/forms';
import { Observable, Subscription } from 'rxjs';
import { Component, forwardRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
import { Observable, Subject, takeUntil } from 'rxjs';
@Component({
selector: 'cnsl-redirect-uris',
templateUrl: './redirect-uris.component.html',
styleUrls: ['./redirect-uris.component.scss'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RedirectUrisComponent),
multi: true,
},
],
})
export class RedirectUrisComponent implements OnInit, OnDestroy {
export class RedirectUrisComponent implements ControlValueAccessor, OnInit, OnDestroy {
@Input() title: string = '';
@Input() devMode: boolean = false;
@Input() canWrite: boolean = false;
@Input() isNative!: boolean;
@Input() public urisList: string[] = [];
@Input() public redirectControl: UntypedFormControl = new UntypedFormControl({ value: '', disabled: true });
@Output() public changedUris: EventEmitter<string[]> = new EventEmitter();
@Input() public getValues: Observable<void> = new Observable();
@Input() public getValues: Observable<void> = new Observable(); // adds formfieldinput to array on emission
public redirectControl: FormControl = new FormControl<string>({ value: '', disabled: true });
private destroy$: Subject<void> = new Subject();
@ViewChild('redInput') input!: any;
private sub: Subscription = new Subscription();
constructor() {}
ngOnInit(): void {
if (this.canWrite) {
this.redirectControl.enable();
}
this.sub = this.getValues.subscribe(() => {
this.getValues.pipe(takeUntil(this.destroy$)).subscribe(() => {
this.add(this.input.nativeElement);
});
}
ngOnDestroy(): void {
this.sub.unsubscribe();
this.destroy$.next();
this.destroy$.complete();
}
onChange: any = () => {};
onTouch: any = () => {};
private val: string[] = [];
set value(val: string[]) {
if (val !== undefined && this.val !== val) {
this.val = val;
this.onChange(val);
this.onTouch(val);
}
}
get value() {
return this.val;
}
writeValue(value: string[]) {
this.value = value;
}
registerOnChange(fn: any) {
this.onChange = fn;
}
registerOnTouched(fn: any) {
this.onTouch = fn;
}
public setDisabledState(isDisabled: boolean): void {
if (isDisabled) {
this.redirectControl.disable();
} else {
this.redirectControl.enable();
}
}
public add(input: any): void {
if (this.redirectControl.valid) {
if (input.value !== '' && input.value !== ' ' && input.value !== '/') {
this.urisList.push(input.value);
this.val.push(input.value);
this.onChange(this.val);
this.onTouch(this.val);
}
if (input) {
input.value = '';
@@ -47,10 +86,12 @@ export class RedirectUrisComponent implements OnInit, OnDestroy {
}
public remove(redirect: any): void {
const index = this.urisList.indexOf(redirect);
const index = this.value.indexOf(redirect);
if (index >= 0) {
this.urisList.splice(index, 1);
this.value.splice(index, 1);
this.onChange(this.value);
this.onTouch(this.value);
}
}
}