[Library | Trunk]: Fix redirect from login logout. Add fragment

git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@60653 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
k.triantafyllou 2021-03-17 09:21:37 +00:00
parent 50dda276c6
commit 10090b685c
7 changed files with 79 additions and 111 deletions

View File

@ -1,6 +1,9 @@
<div>
<div [id]="(mainComponent)?'tm-main':''" [class]="(mainComponent)?'uk-section uk-padding-remove-top tm-middle':''">
<div uk-grid uk-grid>
<div [id]="(mainComponent)?'tm-main':''" [class]="(mainComponent)?'uk-section tm-middle':''">
<div *ngIf="loading" class="uk-flex uk-flex-center">
<loading></loading>
</div>
<div *ngIf="!loading" class="uk-grid" uk-grid>
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
<div *ngIf="!server" class="uk-container uk-container-small uk-position-relative">

View File

@ -18,6 +18,7 @@ import {StringUtils} from "../utils/string-utils.class";
export class UserComponent {
public user: User;
public loading: boolean = true;
public loggedIn: boolean = false;
public server: boolean = true;
public errorMessage: string = "";
@ -27,7 +28,7 @@ export class UserComponent {
public redirectUrl: string = "";
public routerHelper: RouterHelper = new RouterHelper();
public loginUrl;
properties: EnvProperties;
public properties: EnvProperties = properties;
@Input() mainComponent = true;
constructor(private router: Router,
@ -35,35 +36,32 @@ export class UserComponent {
private _meta: Meta,
private _title: Title,
private userManagementsService: UserManagementService) {
var title = "OpenAIRE | Login";
this._title.setTitle(title);
this._title.setTitle("OpenAIRE | Login");
}
ngOnInit() {
this.properties = properties;
this.loginUrl = this.properties.loginUrl;
if (typeof document !== 'undefined') {
this.server = false;
this.subscriptions.push(this.userManagementsService.getUserInfo().subscribe(user => {
this.subscriptions.push(this.userManagementsService.getUserInfo(false).subscribe(user => {
this.user = user;
this.loggedIn = !!this.user;
this.errorMessage = "";
this.loading = true;
this.subscriptions.push(this.route.queryParams.subscribe(params => {
this.errorCode = params["errorCode"];
this.redirectUrl = params["redirectUrl"];
this.errorMessage = "";
if (this.loggedIn && this.errorCode == '1') {
this.redirect();
} else {
this.loading = false;
}
}));
}));
}
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
@ -75,49 +73,13 @@ export class UserComponent {
redirect() {
if (this.redirectUrl && this.redirectUrl != "") {
this.redirectUrl = decodeURIComponent(this.redirectUrl);
var route = this.redirectUrl;
var queryParams = "";
var paramsArray = [];
var valuesArray = [];
if (this.redirectUrl.indexOf('?') != -1) {
route = this.redirectUrl.split('?')[0];
queryParams = this.redirectUrl.split('?')[1];
}
if (queryParams != "") {
var queryParamsArray = queryParams.split('&');
for (var i = 0; i < queryParamsArray.length; i++) {
paramsArray.push(queryParamsArray[i].split("=")[0]);
valuesArray.push(queryParamsArray[i].split("=")[1]);
}
console.debug('here');
this.router.navigate([route], {queryParams: this.routerHelper.createQueryParams(paramsArray, valuesArray)});
} else {
this.router.navigate([route]);
}
this.userManagementsService.setRedirectUrl(this.redirectUrl);
this.router.navigate(['/reload']);
}
// else{
// this.router.navigate(['/']);
// }
}
logIn() {
if (this.redirectUrl && this.redirectUrl != "") {
this.redirectUrl = decodeURIComponent(this.redirectUrl);
var route = this.redirectUrl;
var queryParams = "";
if (this.redirectUrl.indexOf('?') != -1) {
var splits = this.redirectUrl.split('?');
if (splits.length > 0) {
route = splits[0];
}
if (splits.length > 1) {
queryParams = splits[1];
}
}
Session.setReloadUrl(location.protocol + "//" + location.host,properties.baseLink + route, queryParams);
}
console.log(Session.getReloadUrl());
window.location.href = this.properties.loginUrl;
this.userManagementsService.login();
}
getTheRolesFormatted(roles: string[]) {

View File

@ -8,10 +8,11 @@ import {UserRoutingModule} from './user-routing.module';
import {UserComponent} from './user.component';
import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard';
import {LoadingModule} from "../utils/loading/loading.module";
@NgModule({
imports: [
CommonModule, FormsModule, UserRoutingModule, RouterModule
CommonModule, FormsModule, UserRoutingModule, RouterModule, LoadingModule
],
providers: [
PreviousRouteRecorder

View File

@ -1,11 +1,10 @@
import {Component, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';
import {ActivatedRoute, NavigationStart, Router} from '@angular/router';
import {User, Session} from './utils/helper.class';
import {ActivatedRoute, Router} from '@angular/router';
import {Session, User} from './utils/helper.class';
import {RouterHelper} from '../utils/routerHelper.class';
import {StringUtils} from '../utils/string-utils.class';
import {properties} from "../../../environments/environment";
import {Subscriber} from "rxjs";
import {MenuItem} from "../sharedComponents/menu";
import {UserManagementService} from "../services/user-management.service";
// declare var logoutClicked;
@Component({
@ -161,7 +160,6 @@ import {MenuItem} from "../sharedComponents/menu";
<div id="logout2"></div>
`
})
export class UserMiniComponent implements OnInit, OnChanges {
@Input() user: User;
public loggedIn: boolean = false;
@ -176,31 +174,22 @@ export class UserMiniComponent implements OnInit, OnChanges {
@Input() logOutUrl;
@Input() cookieDomain;
@Input() fixRedirectUrl: string;
@Input() redirectUrl: string;
@Input() dark: boolean = false;
search: string = '';
subscriptions = [];
constructor(private router: Router, private route: ActivatedRoute) {
this.subscriptions.push(this.router.events.forEach(event => {
if (event instanceof NavigationStart) {
this.initialize(event.url);
}
}));
constructor(private router: Router, private route: ActivatedRoute, private userManagementService: UserManagementService) {
}
ngOnInit() {
if (typeof document !== 'undefined') {
this.server = false;
}
this.subscriptions.push(this.route.queryParams.subscribe(params => {
this.initialize();
}));
this.initUser();
}
ngOnChanges(changes: SimpleChanges): void {
if (changes.user) {
this.initialize();
this.initUser();
}
}
@ -212,42 +201,21 @@ export class UserMiniComponent implements OnInit, OnChanges {
});
}
initialize(url: string = null) {
if (url) {
let parts = StringUtils.split(url, ['?']);
this.redirectUrl = properties.baseLink + parts[0];
if (parts.length == 2) {
this.search = parts[1];
} else {
this.search = null;
}
} else if (typeof location !== 'undefined') {
this.redirectUrl = location.pathname;
this.search = location.search;
}
initUser() {
if (this.user) {
this.loggedIn = true;
this.parseName();
this.isAuthorized = Session.isClaimsCurator(this.user) || Session.isPortalAdministrator(this.user);
} else {
this.loggedIn = false;
this.isAuthorized = false;
this.user = null;
}
}
logOut() {
if (this.user) {
Session.removeUser();
// New method
if (properties.logoutUrl.includes('openid_logout')) {
Session.setReloadUrl(location.protocol + "//" + location.host, this.redirectUrl, this.search);
window.location.href = this.logOutUrl;
} else {
window.location.href = this.logOutUrl + StringUtils.URIEncode(location.href);
}
this.userManagementService.logout();
}
this.loggedIn = false;
this.isAuthorized = false;
@ -255,9 +223,7 @@ export class UserMiniComponent implements OnInit, OnChanges {
}
logIn() {
Session.setReloadUrl(location.protocol + "//" + location.host,
this.fixRedirectUrl ? (properties.baseLink + this.fixRedirectUrl) : this.redirectUrl, this.search);
window.location.href = this.logInUrl;
this.userManagementService.login();
}
isTheActiveSubMenu(menuItem: MenuItem): boolean {

View File

@ -24,11 +24,12 @@ export class Session {
return (cookie != null && cookie != "");
}
public static setReloadUrl(host: string, path: string, params: string) {
public static setReloadUrl(host: string, path: string, params: string, fragment: string) {
var URL = {};
URL["host"] = host;
URL["path"] = path;
URL["params"] = params;
URL["fragment"] = fragment;
COOKIE.setCookie("reloadURL", JSON.stringify(URL), -1);
}

View File

@ -17,42 +17,36 @@ export class ReloadComponent {
public ngOnInit() {
HelperFunctions.scroll();
let URL = Session.getReloadUrl();
if (URL && URL["path"] && URL["path"] != null && URL["path"] != "") {
if (URL && URL["path"] && URL["path"] != "") {
let url: string = URL["path"];
let host = URL["host"];
let paramsObject = ((URL["params"] && URL["params"] != null) ? Session.getParamsObj(URL["params"]) : null);
let hash = url.indexOf("#");
if (host == (location.protocol + "//" + location.host)) {
let fragment = (hash !== -1)?url.slice(hash + 1):null;
if(fragment) {
url = url.slice(0, hash);
}
let baseUrl = (document && document.getElementsByTagName('base')) ? document.getElementsByTagName('base')[0].href.split(document.location.host)[1] : "/";
url = (baseUrl.length > 1 && url.indexOf(baseUrl) != -1) ? ("/" + url.split(baseUrl)[1]) : url;
if (paramsObject) {
Session.setReloadUrl("", "", "")
if(fragment) {
this._router.navigate([url], {queryParams: paramsObject, fragment: fragment});
Session.setReloadUrl("", "", "", "");
if(URL['fragment'] && URL['fragment'] !== '') {
this._router.navigate([url], {queryParams: paramsObject, fragment: URL['fragment']});
} else {
this._router.navigate([url], {queryParams: paramsObject});
}
} else {
Session.setReloadUrl("", "", "")
if(fragment) {
this._router.navigate([url], {fragment: fragment});
Session.setReloadUrl("", "", "", "");
if(URL['fragment'] && URL['fragment'] !== '') {
this._router.navigate([url], {fragment: URL['fragment']});
} else {
this._router.navigate([url]);
}
}
} else {
Session.setReloadUrl("", "", "")
Session.setReloadUrl("", "", "", "");
window.location.href = host + url + ((URL["params"] && URL["params"] != null) ? ((URL["params"].indexOf("?") == -1 ? "?" : "") + URL["params"]) : "");
}
} else {
Session.setReloadUrl("", "", "")
Session.setReloadUrl("", "", "", "");
this._router.navigate(['/']);
}
}

View File

@ -1,10 +1,12 @@
import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {BehaviorSubject, from, Observable, of} from "rxjs";
import {COOKIE, User} from "../login/utils/helper.class";
import {COOKIE, Session, User} from "../login/utils/helper.class";
import {map} from "rxjs/operators";
import {NavigationEnd, Router} from "@angular/router";
import {properties} from "../../../environments/environment";
import {el} from "@angular/platform-browser/testing/src/browser_util";
import {StringUtils} from "../utils/string-utils.class";
@Injectable({
providedIn: 'root'
@ -15,6 +17,7 @@ export class UserManagementService{
private readonly promise: Promise<User>;
sub;
routeSub;
constructor(private http: HttpClient,
private router: Router) {
this.promise = new Promise<any>((resolve => {
@ -110,4 +113,42 @@ export class UserManagementService{
user.expirationDate = info.exp_date;
return user;
}
public setRedirectUrl(url: string = null) {
if(url) {
let parts = url.split('?');
let path = properties.baseLink + parts[0];
let params = null;
if (parts.length == 2) {
params = parts[1];
}
let hash = path.indexOf("#");
let fragment = (hash !== -1)?path.slice(hash + 1):null;
if(fragment) {
path = path.slice(0, hash);
} else {
fragment = "";
}
if(!path.includes('/reload')) {
Session.setReloadUrl(location.protocol + "//" + location.host, path, params, fragment);
}
} else {
Session.setReloadUrl(location.protocol + "//" + location.host, location.pathname, location.search, location.hash);
}
}
public login() {
this.setRedirectUrl();
window.location.href = properties.loginUrl;
}
public logout() {
this.setRedirectUrl();
Session.removeUser();
if (properties.logoutUrl.includes('openid_logout')) {
window.location.href = properties.logoutUrl;
} else {
window.location.href = properties.logoutUrl + StringUtils.URIEncode(location.href);
}
}
}