63 lines
2.5 KiB
TypeScript
63 lines
2.5 KiB
TypeScript
|
import { HttpErrorResponse } from '@angular/common/http';
|
||
|
import { Component, NgZone, OnInit } from '@angular/core';
|
||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||
|
import { BaseComponent } from '@common/base/base.component';
|
||
|
import { LoggingService } from '@app/core/services/logging/logging-service';
|
||
|
import { SamlLoginService } from '@app/core/services/saml-login.service';
|
||
|
import { TranslateService } from '@ngx-translate/core';
|
||
|
import { takeUntil } from 'rxjs/operators';
|
||
|
import { AuthService } from '@app/core/services/auth/auth.service';
|
||
|
import { AuthProvider } from '@app/core/common/enum/auth-provider';
|
||
|
import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service';
|
||
|
|
||
|
@Component({
|
||
|
template: ''
|
||
|
})
|
||
|
export class SamlResponseLoginComponent extends BaseComponent implements OnInit {
|
||
|
|
||
|
constructor(
|
||
|
private route: ActivatedRoute,
|
||
|
private samlLoginService: SamlLoginService,
|
||
|
private router: Router,
|
||
|
private uiNotificationService: UiNotificationService,
|
||
|
private loggingService: LoggingService,
|
||
|
private zone: NgZone,
|
||
|
private language: TranslateService,
|
||
|
private authService: AuthService,
|
||
|
) { super(); }
|
||
|
|
||
|
ngOnInit() {
|
||
|
this.route.queryParams
|
||
|
.pipe(takeUntil(this._destroyed))
|
||
|
.subscribe(routeParams => {
|
||
|
let samlResponse = null;
|
||
|
if (routeParams.SAMLart) {
|
||
|
samlResponse = routeParams.SAMLart;
|
||
|
} else if (routeParams.SAMLResponse) {
|
||
|
samlResponse = routeParams.SAMLResponse;
|
||
|
}
|
||
|
|
||
|
if (samlResponse == null) return;
|
||
|
|
||
|
const spId = this.samlLoginService.resolveSpId(routeParams.RelayState);
|
||
|
const configurableLoginId = this.samlLoginService.resolveConfigurableLoginId(routeParams.RelayState);
|
||
|
|
||
|
this.authService.login({ ticket: samlResponse, provider: AuthProvider.Configurable, data: { configurableLoginId: configurableLoginId } })
|
||
|
.pipe(takeUntil(this._destroyed))
|
||
|
.subscribe((result) => this.onAuthenticateSuccess(), (error) => this.onAuthenticateError(error));
|
||
|
|
||
|
});
|
||
|
}
|
||
|
|
||
|
onAuthenticateSuccess(): void {
|
||
|
this.loggingService.info('Successful Login');
|
||
|
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-LOGIN'), SnackBarNotificationLevel.Success);
|
||
|
this.zone.run(() => this.router.navigate(['/']));
|
||
|
}
|
||
|
|
||
|
onAuthenticateError(errorResponse: HttpErrorResponse) {
|
||
|
this.uiNotificationService.snackBarNotification(errorResponse.error.message, SnackBarNotificationLevel.Warning);
|
||
|
this.zone.run(() => this.router.navigate(['/']));
|
||
|
}
|
||
|
|
||
|
}
|