+
+
diff --git a/dmp-frontend/src/app/ui/auth/login/login.component.scss b/dmp-frontend/src/app/ui/auth/login/login.component.scss
index 6756da047..8238f27d6 100644
--- a/dmp-frontend/src/app/ui/auth/login/login.component.scss
+++ b/dmp-frontend/src/app/ui/auth/login/login.component.scss
@@ -294,8 +294,9 @@ span.iconmedium {
span.configurableIcon {
float: right;
- width: 80px;
- height: 56px;
+ transform: scale(0.85);
+ width: 50px;
+ height: 50px;
}
span.zenodoIcon {
diff --git a/dmp-frontend/src/app/ui/auth/login/login.module.ts b/dmp-frontend/src/app/ui/auth/login/login.module.ts
index 1872a0035..1feb4f4dc 100644
--- a/dmp-frontend/src/app/ui/auth/login/login.module.ts
+++ b/dmp-frontend/src/app/ui/auth/login/login.module.ts
@@ -16,6 +16,8 @@ import { CommonUiModule } from '@common/ui/common-ui.module';
import { MergeEmailConfirmation } from './merge-email-confirmation/merge-email-confirmation.component';
import { MergeLoginService } from './utilities/merge-login.service';
import { ZenodoLoginComponent } from './zenodo-login/zenodo-login.component';
+import { SamlLoginService } from '@app/core/services/saml-login.service';
+import { SamlResponseLoginComponent } from './saml/saml-login-response/saml-login-response.component';
@NgModule({
imports: [
@@ -34,11 +36,12 @@ import { ZenodoLoginComponent } from './zenodo-login/zenodo-login.component';
OpenAireLoginComponent,
ConfigurableLoginComponent,
ZenodoLoginComponent,
- MergeEmailConfirmation
+ MergeEmailConfirmation,
+ SamlResponseLoginComponent
],
exports: [
LoginComponent
],
- providers: [LoginService, MergeLoginService, ConfigurableProvidersService]
+ providers: [LoginService, MergeLoginService, ConfigurableProvidersService, SamlLoginService]
})
export class LoginModule { }
diff --git a/dmp-frontend/src/app/ui/auth/login/login.routing.ts b/dmp-frontend/src/app/ui/auth/login/login.routing.ts
index f6e8070f6..68fc9e558 100644
--- a/dmp-frontend/src/app/ui/auth/login/login.routing.ts
+++ b/dmp-frontend/src/app/ui/auth/login/login.routing.ts
@@ -11,6 +11,7 @@ import { ConfigurableLoginComponent } from "./configurable-login/configurable-lo
import { ZenodoLoginComponent } from './zenodo-login/zenodo-login.component';
import { Oauth2DialogComponent } from '@app/ui/misc/oauth2-dialog/oauth2-dialog.component';
import { MergeEmailConfirmation } from './merge-email-confirmation/merge-email-confirmation.component';
+import { SamlResponseLoginComponent } from './saml/saml-login-response/saml-login-response.component';
const routes: Routes = [
{ path: '', component: LoginComponent },
@@ -23,7 +24,8 @@ const routes: Routes = [
{ path: 'confirmation', component: EmailConfirmation },
{ path: 'openaire', component: Oauth2DialogComponent},
{ path: 'configurable/:id', component: ConfigurableLoginComponent},
- { path: 'external/zenodo', component: Oauth2DialogComponent }
+ { path: 'external/zenodo', component: Oauth2DialogComponent },
+ { path: 'external/saml', component: SamlResponseLoginComponent }
];
@NgModule({
diff --git a/dmp-frontend/src/app/ui/auth/login/saml/saml-login-response/saml-login-response.component.ts b/dmp-frontend/src/app/ui/auth/login/saml/saml-login-response/saml-login-response.component.ts
new file mode 100644
index 000000000..0c2b4c0e7
--- /dev/null
+++ b/dmp-frontend/src/app/ui/auth/login/saml/saml-login-response/saml-login-response.component.ts
@@ -0,0 +1,63 @@
+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(['/']));
+ }
+
+}
\ No newline at end of file