From d5c62539c5c1c188bcf0d5bb341358d89392d59c Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Fri, 13 Oct 2023 18:11:46 +0300 Subject: [PATCH] task #9086 public urls support --- .../controllers/DashBoardController.java | 6 - .../eudat/controllers/LanguageController.java | 23 +-- .../PublicDashBoardController.java | 42 +++++ .../controllers/PublicLanguageController.java | 44 ++++++ dmp-frontend/src/app/app-routing.module.ts | 7 - .../src/app/core/model/auth/credential.ts | 4 - .../configurableProvider.ts | 6 - .../oauth2ConfigurableProvider.ts | 9 -- .../saml2ConfigurableProvider.ts | 8 - .../src/app/core/model/orcid/orcidUser.ts | 5 - .../app/core/model/saml2/AuthnRequestModel.ts | 6 - .../app/core/services/auth/auth.service.ts | 14 +- .../services/dashboard/dashboard.service.ts | 11 +- .../services/language/language.service.ts | 16 +- .../core/services/language/server.loader.ts | 13 +- .../app/core/services/saml-login.service.ts | 35 ----- .../admin-login/admin-login.component.html | 34 ---- .../admin-login/admin-login.component.scss | 148 ------------------ .../auth/admin-login/admin-login.component.ts | 63 -------- .../ui/auth/admin-login/admin-login.module.ts | 17 -- .../auth/admin-login/admin-login.routing.ts | 16 -- .../src/app/ui/auth/login/login.module.ts | 3 +- dmp-frontend/src/assets/config/config.json | 8 +- dmp-frontend/src/assets/silent-check-sso.html | 7 + 24 files changed, 131 insertions(+), 414 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/controllers/PublicDashBoardController.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/controllers/PublicLanguageController.java delete mode 100644 dmp-frontend/src/app/core/model/auth/credential.ts delete mode 100644 dmp-frontend/src/app/core/model/configurable-provider/configurableProvider.ts delete mode 100644 dmp-frontend/src/app/core/model/configurable-provider/oauth2ConfigurableProvider.ts delete mode 100644 dmp-frontend/src/app/core/model/configurable-provider/saml2ConfigurableProvider.ts delete mode 100644 dmp-frontend/src/app/core/model/orcid/orcidUser.ts delete mode 100644 dmp-frontend/src/app/core/model/saml2/AuthnRequestModel.ts delete mode 100644 dmp-frontend/src/app/core/services/saml-login.service.ts delete mode 100644 dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.html delete mode 100644 dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.scss delete mode 100644 dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts delete mode 100644 dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts delete mode 100644 dmp-frontend/src/app/ui/auth/admin-login/admin-login.routing.ts create mode 100644 dmp-frontend/src/assets/silent-check-sso.html diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java index ae69957d5..5e7aedd6d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java @@ -33,12 +33,6 @@ public class DashBoardController extends BaseController { this.dashBoardManager = dashBoardManager; } - @RequestMapping(method = RequestMethod.GET, value = {"/dashboard/getStatistics"}, produces = "application/json") - public ResponseEntity> getStatistics() { - DashBoardStatistics statistics = dashBoardManager.getStatistics(); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(statistics)); - } - @RequestMapping(method = RequestMethod.GET, value = {"/dashboard/me/getStatistics"}, produces = "application/json") public ResponseEntity> getStatistics(Principal principal) throws IOException { DashBoardStatistics statistics = dashBoardManager.getMeStatistics(principal); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java index c7b76cc23..bf958e2c6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java @@ -14,7 +14,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.*; -import java.util.UUID; @RestController @CrossOrigin @@ -27,27 +26,7 @@ public class LanguageController { public LanguageController(Environment environment) { this.environment = environment; } - - @RequestMapping(value = "{lang}", method = RequestMethod.GET) - public ResponseEntity getLanguage(@PathVariable String lang) throws IOException { - - String fileName = this.environment.getProperty("language.path") + lang + ".json"; - InputStream is = new FileInputStream(fileName); - - HttpHeaders responseHeaders = new HttpHeaders(); - responseHeaders.setContentLength(is.available()); - responseHeaders.setContentType(MediaType.APPLICATION_JSON); - responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName); - responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition"); - responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type"); - - byte[] content = new byte[is.available()]; - is.read(content); - is.close(); - - return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK); - } - + @RequestMapping(value = "update/{lang}", method = RequestMethod.POST) public @ResponseBody ResponseEntity> updateLang(@PathVariable String lang, @RequestBody String json, @ClaimedAuthorities(claims = {Authorities.ADMIN}) Principal principal) throws Exception { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicDashBoardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicDashBoardController.java new file mode 100644 index 000000000..3c72134da --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicDashBoardController.java @@ -0,0 +1,42 @@ +package eu.eudat.controllers; + +import eu.eudat.controllers.BaseController; +import eu.eudat.logic.managers.DashBoardManager; +import eu.eudat.logic.security.claims.ClaimedAuthorities; +import eu.eudat.logic.services.ApiContext; +import eu.eudat.models.data.dashboard.recent.RecentActivity; +import eu.eudat.models.data.dashboard.recent.model.RecentActivityModel; +import eu.eudat.models.data.dashboard.recent.tablerequest.RecentActivityTableRequest; +import eu.eudat.models.data.dashboard.searchbar.SearchBarItem; +import eu.eudat.models.data.dashboard.statistics.DashBoardStatistics; +import eu.eudat.models.data.helpers.responses.ResponseItem; +import eu.eudat.models.data.security.Principal; +import eu.eudat.types.ApiMessageCode; +import eu.eudat.types.Authorities; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +@RestController +@CrossOrigin +@RequestMapping(value = {"/api/public/dashboard/"}) +public class PublicDashBoardController extends BaseController { + + private DashBoardManager dashBoardManager; + @Autowired + public PublicDashBoardController(ApiContext apiContext, DashBoardManager dashBoardManager) { + super(apiContext); + this.dashBoardManager = dashBoardManager; + } + + @RequestMapping(method = RequestMethod.GET, value = {"getStatistics"}, produces = "application/json") + public ResponseEntity> getStatistics() { + DashBoardStatistics statistics = dashBoardManager.getStatistics(); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(statistics)); + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicLanguageController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicLanguageController.java new file mode 100644 index 000000000..1f62ba879 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicLanguageController.java @@ -0,0 +1,44 @@ +package eu.eudat.controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.*; + +@RestController +@CrossOrigin +@RequestMapping(value = {"/api/public/language/"}) +public class PublicLanguageController { + + private Environment environment; + + @Autowired + public PublicLanguageController(Environment environment) { + this.environment = environment; + } + + @RequestMapping(value = "{lang}", method = RequestMethod.GET) + public ResponseEntity getLanguage(@PathVariable String lang) throws IOException { + + String fileName = this.environment.getProperty("language.path") + lang + ".json"; + InputStream is = new FileInputStream(fileName); + + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.setContentLength(is.available()); + responseHeaders.setContentType(MediaType.APPLICATION_JSON); + responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName); + responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition"); + responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type"); + + byte[] content = new byte[is.available()]; + is.read(content); + is.close(); + + return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK); + } +} diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 62d9578cd..392d3b73c 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -237,13 +237,6 @@ const appRoutes: Routes = [ breadcrumb: true }, }, - { - path: 'login/admin', - loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule), - data: { - breadcrumb: true - }, - }, { path: 'login', loadChildren: () => import('./ui/auth/login/login.module').then(m => m.LoginModule), diff --git a/dmp-frontend/src/app/core/model/auth/credential.ts b/dmp-frontend/src/app/core/model/auth/credential.ts deleted file mode 100644 index a8c5d4f6b..000000000 --- a/dmp-frontend/src/app/core/model/auth/credential.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface Credential { - username: string; - secret: string; -} diff --git a/dmp-frontend/src/app/core/model/configurable-provider/configurableProvider.ts b/dmp-frontend/src/app/core/model/configurable-provider/configurableProvider.ts deleted file mode 100644 index d69525c1c..000000000 --- a/dmp-frontend/src/app/core/model/configurable-provider/configurableProvider.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class ConfigurableProvider { - configurableLoginId: string; - type: string; - name: string; - logoUrl: string; -} diff --git a/dmp-frontend/src/app/core/model/configurable-provider/oauth2ConfigurableProvider.ts b/dmp-frontend/src/app/core/model/configurable-provider/oauth2ConfigurableProvider.ts deleted file mode 100644 index 7080cbccc..000000000 --- a/dmp-frontend/src/app/core/model/configurable-provider/oauth2ConfigurableProvider.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ConfigurableProvider } from "./configurableProvider"; - -export class Oauth2ConfigurableProvider extends ConfigurableProvider{ - clientId: string; - redirect_uri: string; - oauthUrl: string; - scope: string; - state: string; -} \ No newline at end of file diff --git a/dmp-frontend/src/app/core/model/configurable-provider/saml2ConfigurableProvider.ts b/dmp-frontend/src/app/core/model/configurable-provider/saml2ConfigurableProvider.ts deleted file mode 100644 index 997e62466..000000000 --- a/dmp-frontend/src/app/core/model/configurable-provider/saml2ConfigurableProvider.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ConfigurableProvider } from "./configurableProvider"; - -export class Saml2ConfigurableProvider extends ConfigurableProvider{ - spEntityId: string; - idpUrl: string; - binding: string; - assertionConsumerServiceUrl: string; -} \ No newline at end of file diff --git a/dmp-frontend/src/app/core/model/orcid/orcidUser.ts b/dmp-frontend/src/app/core/model/orcid/orcidUser.ts deleted file mode 100644 index 5642ee8fb..000000000 --- a/dmp-frontend/src/app/core/model/orcid/orcidUser.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class OrcidUser { - orcidId: string; - name: string; - email: string; -} diff --git a/dmp-frontend/src/app/core/model/saml2/AuthnRequestModel.ts b/dmp-frontend/src/app/core/model/saml2/AuthnRequestModel.ts deleted file mode 100644 index 683dba6fa..000000000 --- a/dmp-frontend/src/app/core/model/saml2/AuthnRequestModel.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AuthnRequestModel { - authnRequestXml: string; - relayState: string; - algorithm: string; - signature: string; -} \ No newline at end of file diff --git a/dmp-frontend/src/app/core/services/auth/auth.service.ts b/dmp-frontend/src/app/core/services/auth/auth.service.ts index 7d0e55a77..ee4ad8e11 100644 --- a/dmp-frontend/src/app/core/services/auth/auth.service.ts +++ b/dmp-frontend/src/app/core/services/auth/auth.service.ts @@ -1,23 +1,17 @@ -import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http'; +import { HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { Router } from '@angular/router'; -import { Credential } from '@app/core/model/auth/credential'; -import { LoginInfo } from '@app/core/model/auth/login-info'; import { AppAccount } from '@app/core/model/auth/principal'; -import { ConfigurableProvider } from '@app/core/model/configurable-provider/configurableProvider'; import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; import { BaseService } from '@common/base/base.service'; import { TranslateService } from '@ngx-translate/core'; -import { Observable, Subject, forkJoin, from, of as observableOf, throwError as observableThrowError } from 'rxjs'; -import { catchError, exhaustMap, map, takeUntil } from 'rxjs/operators'; +import { Observable, Subject, forkJoin, from, of } from 'rxjs'; +import { exhaustMap, map, takeUntil } from 'rxjs/operators'; import { ConfigurationService } from '../configuration/configuration.service'; -import { CookieService } from 'ngx-cookie-service'; import { Guid } from '@common/types/guid'; import { KeycloakEventType, KeycloakService } from 'keycloak-angular'; import { NgZone } from '@angular/core'; -import { HttpError, HttpErrorHandlingService } from '@common/modules/errors/error-handling/http-error-handling.service'; import { PrincipalService } from '../http/principal.service'; import { AppRole } from '@app/core/common/enum/app-role'; @@ -141,7 +135,7 @@ export class AuthService extends BaseService { return observable.pipe( map((x) => this.currentAuthenticationToken(x)), exhaustMap(() => forkJoin([ - this.principalService.me(httpParams) + this.accessToken ? this.principalService.me(httpParams) : of(null) ])), map((item) => { this.currentAccount(item[0]); diff --git a/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts b/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts index 07c43eb1f..c215246f2 100644 --- a/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts +++ b/dmp-frontend/src/app/core/services/dashboard/dashboard.service.ts @@ -12,24 +12,25 @@ import { DataTableRequest, DataTableMultiTypeRequest } from '@app/core/model/dat @Injectable() export class DashboardService { - private actionUrl: string; private headers: HttpHeaders; + private get apiBase(): string { return `${this.configurationService.server}dashboard`; } + private get publicApiBase(): string { return `${this.configurationService.server}public/dashboard`; } + constructor(private http: BaseHttpService, private configurationService: ConfigurationService) { - this.actionUrl = configurationService.server + 'dashboard/'; } getStatistics(): Observable { - return this.http.get(this.actionUrl + 'getStatistics', { headers: this.headers }); + return this.http.get(`${this.publicApiBase}/getStatistics`, { headers: this.headers }); } getUserStatistics(): Observable { - return this.http.get(this.actionUrl + 'me/getStatistics', { headers: this.headers }); + return this.http.get(`${this.apiBase}/me/getStatistics`, { headers: this.headers }); } getRecentActivity(request: DataTableMultiTypeRequest): Observable { - return this.http.post(this.actionUrl + 'recentActivity', request, {headers: this.headers}); + return this.http.post(`${this.apiBase}/recentActivity`, request, {headers: this.headers}); } // getRecentActivity(request: DataTableRequest): Observable> { diff --git a/dmp-frontend/src/app/core/services/language/language.service.ts b/dmp-frontend/src/app/core/services/language/language.service.ts index 4b343591d..c1342d312 100644 --- a/dmp-frontend/src/app/core/services/language/language.service.ts +++ b/dmp-frontend/src/app/core/services/language/language.service.ts @@ -6,11 +6,14 @@ import { HttpResponse, HttpClient } from '@angular/common/http'; import { BaseHttpService } from '../http/base-http.service'; import { Language } from '@app/models/language/Language'; import { ConfigurationService } from '../configuration/configuration.service'; +import { BaseHttpParams } from '@common/http/base-http-params'; +import { InterceptorType } from '@common/http/interceptors/interceptor-type'; @Injectable() export class LanguageService { private currentLanguage: string; - private languageUrl : string; + private get apiBase(): string { return `${this.configurationService.server}language`; } + private get publicApiBase(): string { return `${this.configurationService.server}public/language`; } constructor( private translate: TranslateService, @@ -18,7 +21,6 @@ export class LanguageService { private baseHttp: BaseHttpService, private configurationService: ConfigurationService ) { - this.languageUrl = `${configurationService.server}language`; this.currentLanguage = this.configurationService.defaultLanguage || 'en'; } @@ -32,11 +34,17 @@ export class LanguageService { } public getCurrentLanguageJSON(): Observable> { - return this.http.get(`${this.languageUrl}/${this.currentLanguage}`, { responseType: 'blob', observe: 'response' }); + const params = new BaseHttpParams(); + params.interceptorContext = { + excludedInterceptors: [ + InterceptorType.AuthToken, + ] + }; + return this.http.get(`${this.publicApiBase}/${this.currentLanguage}`, { params: params, responseType: 'blob', observe: 'response' }); } public updateLanguage(json: string): Observable { - return this.baseHttp.post(`${this.languageUrl}/update/${this.currentLanguage}`, json); + return this.baseHttp.post(`${this.apiBase}/update/${this.currentLanguage}`, json); } public getCurrentLanguageName() { diff --git a/dmp-frontend/src/app/core/services/language/server.loader.ts b/dmp-frontend/src/app/core/services/language/server.loader.ts index f97d19433..2df3cce10 100644 --- a/dmp-frontend/src/app/core/services/language/server.loader.ts +++ b/dmp-frontend/src/app/core/services/language/server.loader.ts @@ -3,9 +3,11 @@ import { Observable } from 'rxjs'; import { environment } from 'environments/environment'; import { HttpClient } from '@angular/common/http'; import { ConfigurationService } from '../configuration/configuration.service'; +import { BaseHttpParams } from '@common/http/base-http-params'; +import { InterceptorType } from '@common/http/interceptors/interceptor-type'; export class TranslateServerLoader implements TranslateLoader{ - private languageUrl: string; + private get apiBase(): string { return `${this.configurationService.server}public/language`; } constructor( private http: HttpClient, @@ -14,7 +16,12 @@ export class TranslateServerLoader implements TranslateLoader{ } getTranslation(lang: string): Observable { - this.languageUrl = `${this.configurationService.server}language`; - return this.http.get(`${this.languageUrl}/${lang}`); + const params = new BaseHttpParams(); + params.interceptorContext = { + excludedInterceptors: [ + InterceptorType.AuthToken, + ] + }; + return this.http.get(`${this.apiBase}/${lang}`, { params: params }); } } diff --git a/dmp-frontend/src/app/core/services/saml-login.service.ts b/dmp-frontend/src/app/core/services/saml-login.service.ts deleted file mode 100644 index d052205d6..000000000 --- a/dmp-frontend/src/app/core/services/saml-login.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { HttpHeaders, HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { ConfigurationService } from './configuration/configuration.service'; -import { BaseHttpService } from './http/base-http.service'; -import { Observable } from 'rxjs'; -import { BaseComponent } from '@common/base/base.component'; -import { AuthnRequestModel } from '../model/saml2/AuthnRequestModel'; - -@Injectable() -export class SamlLoginService extends BaseComponent { - - private actionUrl: string; - private headers = new HttpHeaders(); - - constructor(private http: BaseHttpService, private httpClient: HttpClient, private configurationService: ConfigurationService) { - super(); - this.actionUrl = configurationService.server + 'saml2/'; - } - - resolveConfigurableLoginId(relayState: string): string { - const decoded = decodeURIComponent(relayState); - const routeParams = new URLSearchParams(decoded); - return routeParams.has('configurableLoginId') ? routeParams.get('configurableLoginId') : undefined; - } - resolveSpId(relayState: string): string { - const decoded = decodeURIComponent(relayState); - const routeParams = new URLSearchParams(decoded); - return routeParams.has('spId') ? routeParams.get('spId') : ''; - } - - getAuthnRequest(configurableLoginId: string): Observable { - return this.http.get(this.actionUrl + 'authnRequest/' + configurableLoginId, { headers: this.headers }); - } - -} \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.html b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.html deleted file mode 100644 index e3c581728..000000000 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
-
-
-
-
-
-

Admin Login

-
- - - - - - - - - - -
- -
-
-
-
-
-
- diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.scss b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.scss deleted file mode 100644 index a3145a5cc..000000000 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.scss +++ /dev/null @@ -1,148 +0,0 @@ -.container { - padding: 15px 30px; -} - -.card { - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.14); - border-radius: 6px; - color: rgba(0, 0, 0, 0.87); - background: #fff; -} - -.card-raised { - box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); -} - -.page-title { - margin-top: 40px; -} - -@media (min-width: 1200px) { - .container { - width: 100%; - } -} - -@media (min-width: 992px) { - .container { - width: 100%; - } -} - -@media (min-width: 768px) { - .container { - width: 100%; - } -} - -.container { - height: 100%; - position: relative; - z-index: 1; -} - -.card { - position: relative; - padding: 20px; - display: flex; - flex-direction: column; - align-items: center; - margin-top: 90px; - top: -90px; - -webkit-animation-name: card; - -moz-animation-name: card; - -o-animation-name: card; - animation-name: card; - -webkit-animation-duration: 600ms; - -moz-animation-duration: 600ms; - -o-animation-duration: 600ms; - animation-duration: 600ms; - -webkit-animation-fill-mode: forwards; - -moz-animation-fill-mode: forwards; - -o-animation-fill-mode: forwards; - animation-fill-mode: forwards; -} - -@-webkit-keyframes card { - from { - top: -40px; - } - to { - top: 0; - } -} - -@keyframes card { - from { - top: -40px; - } - to { - top: 0; - } -} - -.card-header { - position: relative; - overflow: hidden; - top: -40px; - width: 100%; - padding: 25px; - border-radius: 3px; - background: linear-gradient(60deg, #ec407a, #d81b60); - box-shadow: 0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px rgba(49, 46, 47, 0.4); - display: flex; - flex-direction: column; - align-items: center; -} - -.card-header h4 { - font-weight: 400; - color: #fff; - margin-bottom: 25px; - margin-top: 5px; -} - -.social-btns i { - font-size: 21px; - color: #fff; -} - -.social-btns button { - margin: 0 8px; -} - -.tip { - margin-top: -20px; -} - -.form-row, -.card-form, -.mat-form-field { - width: 100%; -} - -.card-form { - padding: 5px; -} - -.form-row { - position: relative; - display: flex; - align-items: center; - margin-top: 13px; -} - -.form-row i { - position: relative; - top: -5px; - margin-right: 15px; - color: #555; -} - -.card-footer { - margin: 10px; -} - -.card-footer button { - color: #e91e63; -} diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts deleted file mode 100644 index b08b883df..000000000 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Component, OnInit, HostListener } from '@angular/core'; -import { Router } from '@angular/router'; -import { Credential } from '@app/core/model/auth/credential'; -import { AuthService } from '@app/core/services/auth/auth.service'; -import { CultureService } from '@app/core/services/culture/culture-service'; -import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; -import { BaseComponent } from '@common/base/base.component'; -import { TranslateService } from '@ngx-translate/core'; -import { takeUntil } from 'rxjs/operators'; -import { TranslateServerLoader } from '@app/core/services/language/server.loader'; -import { LanguageService } from '@app/core/services/language/language.service'; -@Component({ - selector: 'app-admin-login', - templateUrl: './admin-login.component.html', - styleUrls: ['./admin-login.component.scss'] -}) -export class AdminLoginComponent extends BaseComponent implements OnInit { - - public auth2: any; - public credential: Credential; - - @HostListener('document:keydown.enter', ['$event']) onKeydownHandler() { - this.nativeLogin(); - } - - constructor( - private authService: AuthService, - private uiNotificationService: UiNotificationService, - private translate: TranslateService, - private cultureService: CultureService, - private router: Router, - private language: LanguageService - ) { super(); } - - - - ngOnInit() { - this.credential = { - username: null, - secret: null - } - } - - public nativeLogin() { - // this.authService.nativeLogin(this.credential) - // .pipe(takeUntil(this._destroyed)) - // .subscribe( - // res => this.onLogInSuccess(res), - // error => this.onLogInError(error) - // ); - } - - public onLogInSuccess(loginResponse: any) { - this.uiNotificationService.snackBarNotification(this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-LOGIN'), SnackBarNotificationLevel.Success); - if (this.authService.currentAccountIsAuthenticated() && this.authService.getUserProfileCulture()) { this.cultureService.cultureSelected(this.authService.getUserProfileCulture()); } - if (this.authService.currentAccountIsAuthenticated() && this.authService.getUserProfileLanguage()) { this.language.changeLanguage(this.authService.getUserProfileLanguage()); } - this.router.navigate(['/']); - } - - public onLogInError(errorMessage: string) { - this.uiNotificationService.snackBarNotification(this.translate.instant('GENERAL.SNACK-BAR.UNSUCCESSFUL-LOGIN'), SnackBarNotificationLevel.Error); - } -} diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts deleted file mode 100644 index 766ca5e31..000000000 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { AdminLoginComponent } from '@app/ui/auth/admin-login/admin-login.component'; -import { AdminLoginRoutingModule } from '@app/ui/auth/admin-login/admin-login.routing'; -import { CommonFormsModule } from '@common/forms/common-forms.module'; -import { CommonUiModule } from '@common/ui/common-ui.module'; - -@NgModule({ - imports: [ - CommonUiModule, - CommonFormsModule, - AdminLoginRoutingModule - ], - declarations: [ - AdminLoginComponent - ] -}) -export class AdminLoginModule { } diff --git a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.routing.ts b/dmp-frontend/src/app/ui/auth/admin-login/admin-login.routing.ts deleted file mode 100644 index b3e6deae3..000000000 --- a/dmp-frontend/src/app/ui/auth/admin-login/admin-login.routing.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { AdminLoginComponent } from './admin-login.component'; - -const routes: Routes = [ - { - path: '', - component: AdminLoginComponent, - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class AdminLoginRoutingModule { } 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 9742360ef..a0aae9b78 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.module.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.module.ts @@ -8,7 +8,6 @@ import { CommonFormsModule } from '@common/forms/common-forms.module'; 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 { SamlLoginService } from '@app/core/services/saml-login.service'; import { UnlinkEmailConfirmation } from './unlink-email-confirmation/unlink-email-confirmation.component'; @NgModule({ @@ -27,6 +26,6 @@ import { UnlinkEmailConfirmation } from './unlink-email-confirmation/unlink-emai exports: [ LoginComponent ], - providers: [LoginService, MergeLoginService, SamlLoginService] + providers: [LoginService, MergeLoginService] }) export class LoginModule { } diff --git a/dmp-frontend/src/assets/config/config.json b/dmp-frontend/src/assets/config/config.json index aa1530c15..f2a80aa0b 100644 --- a/dmp-frontend/src/assets/config/config.json +++ b/dmp-frontend/src/assets/config/config.json @@ -52,12 +52,12 @@ ], "keycloak": { "enabled": true, - "address": null, - "realm": null, + "address": "http://dev03.local.cite.gr:60201/auth", + "realm": "dmp-development", "flow": "standard", - "clientId": null, + "clientId": "dmp_webapp", "silentCheckSsoRedirectUri": "http://localhost:4200/assets/silent-check-sso.html", - "scope": "openid profile email address phone", + "scope": "openid profile email address phone dmp_web", "clientSecret": null, "grantType": "code" }, diff --git a/dmp-frontend/src/assets/silent-check-sso.html b/dmp-frontend/src/assets/silent-check-sso.html new file mode 100644 index 000000000..b3bd540de --- /dev/null +++ b/dmp-frontend/src/assets/silent-check-sso.html @@ -0,0 +1,7 @@ + + + + +