argos/dmp-frontend/src/app/ui/auth/login/saml/saml-login-response/saml-login-response.compone...

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(['/']));
}
}