mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-15 22:13:02 +00:00
Branch update merge
This commit is contained in:
@@ -1,27 +1,28 @@
|
||||
import {Inject, Injectable, Optional} from '@angular/core';
|
||||
import {PRIMARY_OUTLET, Router, UrlSegmentGroup, UrlTree} from '@angular/router';
|
||||
import {HttpHeaders} from '@angular/common/http';
|
||||
import {REQUEST, RESPONSE} from '@nguniversal/express-engine/tokens';
|
||||
import { Inject, Injectable, Optional } from '@angular/core';
|
||||
import { PRIMARY_OUTLET, Router, UrlSegmentGroup, UrlTree } from '@angular/router';
|
||||
import { HttpHeaders } from '@angular/common/http';
|
||||
import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens';
|
||||
|
||||
import {Observable, of as observableOf} from 'rxjs';
|
||||
import {distinctUntilChanged, filter, map, startWith, switchMap, take, withLatestFrom} from 'rxjs/operators';
|
||||
import {RouterReducerState} from '@ngrx/router-store';
|
||||
import {select, Store} from '@ngrx/store';
|
||||
import {CookieAttributes} from 'js-cookie';
|
||||
import { Observable, of as observableOf } from 'rxjs';
|
||||
import { distinctUntilChanged, filter, map, startWith, switchMap, take, withLatestFrom } from 'rxjs/operators';
|
||||
import { RouterReducerState } from '@ngrx/router-store';
|
||||
import { select, Store } from '@ngrx/store';
|
||||
import { CookieAttributes } from 'js-cookie';
|
||||
|
||||
import {EPerson} from '../eperson/models/eperson.model';
|
||||
import {AuthRequestService} from './auth-request.service';
|
||||
import {HttpOptions} from '../dspace-rest-v2/dspace-rest-v2.service';
|
||||
import {AuthStatus} from './models/auth-status.model';
|
||||
import {AuthTokenInfo, TOKENITEM} from './models/auth-token-info.model';
|
||||
import {isEmpty, isNotEmpty, isNotNull, isNotUndefined} from '../../shared/empty.util';
|
||||
import {CookieService} from '../../shared/services/cookie.service';
|
||||
import {getAuthenticationToken, getRedirectUrl, isAuthenticated, isTokenRefreshing} from './selectors';
|
||||
import {AppState, routerStateSelector} from '../../app.reducer';
|
||||
import {ResetAuthenticationMessagesAction, SetRedirectUrlAction} from './auth.actions';
|
||||
import {NativeWindowRef, NativeWindowService} from '../../shared/services/window.service';
|
||||
import {Base64EncodeUrl} from '../../shared/utils/encode-decode.util';
|
||||
import {RemoteDataBuildService} from '../cache/builders/remote-data-build.service';
|
||||
import { EPerson } from '../eperson/models/eperson.model';
|
||||
import { AuthRequestService } from './auth-request.service';
|
||||
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
|
||||
import { AuthStatus } from './models/auth-status.model';
|
||||
import { AuthTokenInfo, TOKENITEM } from './models/auth-token-info.model';
|
||||
import { isEmpty, isNotEmpty, isNotNull, isNotUndefined } from '../../shared/empty.util';
|
||||
import { CookieService } from '../services/cookie.service';
|
||||
import { getAuthenticationToken, getRedirectUrl, isAuthenticated, isTokenRefreshing } from './selectors';
|
||||
import { AppState, routerStateSelector } from '../../app.reducer';
|
||||
import { ResetAuthenticationMessagesAction, SetRedirectUrlAction } from './auth.actions';
|
||||
import { NativeWindowRef, NativeWindowService } from '../services/window.service';
|
||||
import { Base64EncodeUrl } from '../../shared/utils/encode-decode.util';
|
||||
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
|
||||
import {RouteService} from '../services/route.service';
|
||||
import {GlobalConfig} from '../../../config/global-config.interface';
|
||||
import {GLOBAL_CONFIG} from '../../../config';
|
||||
import {AuthMethodModel} from './models/auth-method.model';
|
||||
@@ -43,16 +44,15 @@ export class AuthService {
|
||||
*/
|
||||
protected _authenticated: boolean;
|
||||
|
||||
constructor(
|
||||
@Inject(GLOBAL_CONFIG) public config: GlobalConfig,
|
||||
@Inject(REQUEST) protected req: any,
|
||||
@Inject(NativeWindowService) protected _window: NativeWindowRef,
|
||||
protected authRequestService: AuthRequestService,
|
||||
@Optional() @Inject(RESPONSE) private response: any,
|
||||
protected router: Router,
|
||||
protected storage: CookieService,
|
||||
protected store: Store<AppState>,
|
||||
protected rdbService: RemoteDataBuildService
|
||||
constructor(@Inject(REQUEST) protected req: any,
|
||||
@Inject(NativeWindowService) protected _window: NativeWindowRef,
|
||||
protected authRequestService: AuthRequestService,
|
||||
@Optional() @Inject(RESPONSE) private response: any,
|
||||
protected router: Router,
|
||||
protected routeService: RouteService,
|
||||
protected storage: CookieService,
|
||||
protected store: Store<AppState>,
|
||||
protected rdbService: RemoteDataBuildService
|
||||
) {
|
||||
this.store.pipe(
|
||||
select(isAuthenticated),
|
||||
@@ -115,19 +115,6 @@ export class AuthService {
|
||||
|
||||
}
|
||||
|
||||
shibbolethAuthenticate(location: string) {
|
||||
// implement a call to the backend here
|
||||
console.log('location: ', location);
|
||||
/*return this.authRequestService.postToEndpoint('login').pipe(
|
||||
map((status: AuthStatus) => {
|
||||
if (status.authenticated) {
|
||||
return status;
|
||||
} else {
|
||||
throw(new Error('Shibboleth login failed'));
|
||||
}
|
||||
}))*/
|
||||
}
|
||||
|
||||
public startShibbAuth(): Observable<AuthStatus> {
|
||||
|
||||
return this.authRequestService.postToEndpoint('login').pipe(
|
||||
@@ -260,7 +247,7 @@ export class AuthService {
|
||||
// Send a request that sign end the session
|
||||
let headers = new HttpHeaders();
|
||||
headers = headers.append('Content-Type', 'application/x-www-form-urlencoded');
|
||||
const options: HttpOptions = Object.create({headers, responseType: 'text'});
|
||||
const options: HttpOptions = Object.create({ headers, responseType: 'text' });
|
||||
return this.authRequestService.getRequest('logout', options).pipe(
|
||||
map((status: AuthStatus) => {
|
||||
if (!status.authenticated) {
|
||||
@@ -336,7 +323,7 @@ export class AuthService {
|
||||
|
||||
// Set the cookie expire date
|
||||
const expires = new Date(expireDate);
|
||||
const options: CookieAttributes = {expires: expires};
|
||||
const options: CookieAttributes = { expires: expires };
|
||||
|
||||
// Save cookie with the token
|
||||
return this.storage.set(TOKENITEM, token, options);
|
||||
@@ -384,7 +371,7 @@ export class AuthService {
|
||||
/**
|
||||
* Redirect to the route navigated before the login
|
||||
*/
|
||||
public redirectToPreviousUrl() {
|
||||
public redirectAfterLoginSuccess(isStandalonePage: boolean) {
|
||||
this.getRedirectUrl().pipe(
|
||||
take(1))
|
||||
.subscribe((redirectUrl) => {
|
||||
@@ -393,18 +380,39 @@ export class AuthService {
|
||||
this.clearRedirectUrl();
|
||||
this.router.onSameUrlNavigation = 'reload';
|
||||
const url = decodeURIComponent(redirectUrl);
|
||||
this.router.navigateByUrl(url);
|
||||
/* TODO Reenable hard redirect when REST API can handle x-forwarded-for, see https://github.com/DSpace/DSpace/pull/2207 */
|
||||
// this._window.nativeWindow.location.href = url;
|
||||
this.navigateToRedirectUrl(url);
|
||||
} else {
|
||||
this.router.navigate(['/']);
|
||||
/* TODO Reenable hard redirect when REST API can handle x-forwarded-for, see https://github.com/DSpace/DSpace/pull/2207 */
|
||||
// this._window.nativeWindow.location.href = '/';
|
||||
// If redirectUrl is empty use history.
|
||||
this.routeService.getHistory().pipe(
|
||||
take(1)
|
||||
).subscribe((history) => {
|
||||
let redirUrl;
|
||||
if (isStandalonePage) {
|
||||
// For standalone login pages, use the previous route.
|
||||
redirUrl = history[history.length - 2] || '';
|
||||
} else {
|
||||
redirUrl = history[history.length - 1] || '';
|
||||
}
|
||||
this.navigateToRedirectUrl(redirUrl);
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
protected navigateToRedirectUrl(url: string) {
|
||||
// in case the user navigates directly to /login (via bookmark, etc), or the route history is not found.
|
||||
if (isEmpty(url) || url.startsWith(LOGIN_ROUTE)) {
|
||||
this.router.navigate(['/']);
|
||||
/* TODO Reenable hard redirect when REST API can handle x-forwarded-for, see https://github.com/DSpace/DSpace/pull/2207 */
|
||||
// this._window.nativeWindow.location.href = '/';
|
||||
} else {
|
||||
/* TODO Reenable hard redirect when REST API can handle x-forwarded-for, see https://github.com/DSpace/DSpace/pull/2207 */
|
||||
// this._window.nativeWindow.location.href = url;
|
||||
this.router.navigate([url]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh route navigated
|
||||
*/
|
||||
@@ -435,7 +443,7 @@ export class AuthService {
|
||||
|
||||
// Set the cookie expire date
|
||||
const expires = new Date(expireDate);
|
||||
const options: CookieAttributes = {expires: expires};
|
||||
const options: CookieAttributes = { expires: expires };
|
||||
this.storage.set(REDIRECT_COOKIE, url, options);
|
||||
this.store.dispatch(new SetRedirectUrlAction(isNotUndefined(url) ? url : ''));
|
||||
}
|
||||
|
Reference in New Issue
Block a user