Added i18n label and fixes

This commit is contained in:
Giuseppe Digilio
2018-04-04 17:01:49 +02:00
parent 934bb603f5
commit 26a743322e
4 changed files with 37 additions and 10 deletions

View File

@@ -165,5 +165,13 @@
"header": "Log out from DSpace", "header": "Log out from DSpace",
"submit": "Log out" "submit": "Log out"
} }
},
"auth": {
"messages": {
"expired": "Your session has expired. Please log in again."
},
"errors": {
"invalid-user": "Invalid email or password."
}
} }
} }

View File

@@ -142,7 +142,7 @@ export class AuthInterceptor implements HttpInterceptor {
} else if (this.isUnauthorized(error)) { } else if (this.isUnauthorized(error)) {
// The access token provided is expired, revoked, malformed, or invalid for other reasons // The access token provided is expired, revoked, malformed, or invalid for other reasons
// Redirect to the login route // Redirect to the login route
this.store.dispatch(new RedirectWhenTokenExpiredAction('Your session has expired. Please log in again.')); this.store.dispatch(new RedirectWhenTokenExpiredAction('auth.messages.expired'));
} }
} }
// Return error response as is. // Return error response as is.

View File

@@ -49,7 +49,7 @@ export class AuthService {
// and is not the login route, clear redirect url and messages // and is not the login route, clear redirect url and messages
const routeUrlObs = this.store.select(routerStateSelector) const routeUrlObs = this.store.select(routerStateSelector)
.filter((routerState: RouterReducerState) => isNotUndefined(routerState) && isNotUndefined(routerState.state)) .filter((routerState: RouterReducerState) => isNotUndefined(routerState) && isNotUndefined(routerState.state))
.filter((routerState: RouterReducerState) => (routerState.state.url !== LOGIN_ROUTE)) .filter((routerState: RouterReducerState) => !this.isLoginRoute(routerState.state.url))
.map((routerState: RouterReducerState) => routerState.state.url); .map((routerState: RouterReducerState) => routerState.state.url);
const redirectUrlObs = this.getRedirectUrl(); const redirectUrlObs = this.getRedirectUrl();
routeUrlObs.pipe( routeUrlObs.pipe(
@@ -57,10 +57,23 @@ export class AuthService {
map(([routeUrl, redirectUrl]) => [routeUrl, redirectUrl]) map(([routeUrl, redirectUrl]) => [routeUrl, redirectUrl])
).filter(([routeUrl, redirectUrl]) => isNotEmpty(redirectUrl) && (routeUrl !== redirectUrl)) ).filter(([routeUrl, redirectUrl]) => isNotEmpty(redirectUrl) && (routeUrl !== redirectUrl))
.subscribe(() => { .subscribe(() => {
this.setRedirectUrl(undefined); this.clearRedirectUrl();
}); });
} }
/**
* Check if is a login page route
*
* @param {string} url
* @returns {Boolean}.
*/
protected isLoginRoute(url: string) {
const urlTree: UrlTree = this.router.parseUrl(url);
const g: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];
const segment = '/' + g.toString();
return segment === LOGIN_ROUTE;
}
/** /**
* Authenticate the user * Authenticate the user
* *
@@ -175,7 +188,7 @@ export class AuthService {
if (!status.authenticated) { if (!status.authenticated) {
return true; return true;
} else { } else {
throw(new Error('Invalid email or password')); throw(new Error('auth.errors.invalid-user'));
} }
}) })
@@ -264,7 +277,7 @@ export class AuthService {
*/ */
public redirectToLogin() { public redirectToLogin() {
// Hard redirect to login page, so that all state is definitely lost // Hard redirect to login page, so that all state is definitely lost
this._window.nativeWindow.location.href = LOGIN_ROUTE; this._window.nativeWindow.location.href = LOGIN_ROUTE + '?expired=true';
} }
/** /**
@@ -275,9 +288,7 @@ export class AuthService {
.first() .first()
.subscribe((redirectUrl) => { .subscribe((redirectUrl) => {
if (isNotEmpty(redirectUrl)) { if (isNotEmpty(redirectUrl)) {
// Clear redirect url this.clearRedirectUrl();
this.setRedirectUrl(undefined);
this.storage.remove(REDIRECT_COOKIE);
const urlTree: UrlTree = this.router.parseUrl(redirectUrl); const urlTree: UrlTree = this.router.parseUrl(redirectUrl);
const g: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET]; const g: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];
@@ -327,4 +338,12 @@ export class AuthService {
this.storage.set(REDIRECT_COOKIE, url); this.storage.set(REDIRECT_COOKIE, url);
this.store.dispatch(new SetRedirectUrlAction(isNotUndefined(url) ? url : '')); this.store.dispatch(new SetRedirectUrlAction(isNotUndefined(url) ? url : ''));
} }
/**
* Clear redirect url
*/
clearRedirectUrl() {
this.store.dispatch(new SetRedirectUrlAction(''));
this.storage.remove(REDIRECT_COOKIE);
}
} }

View File

@@ -17,8 +17,8 @@
formControlName="password" formControlName="password"
required required
type="password"> type="password">
<div *ngIf="platform.isBrowser && (error | async) && hasError" class="alert alert-danger" role="alert" @fadeOut>{{ error | async }}</div> <div *ngIf="platform.isBrowser && (error | async) && hasError" class="alert alert-danger" role="alert" @fadeOut>{{ (error | async) | translate }}</div>
<div *ngIf="(message | async) && hasMessage" class="alert alert-info" role="alert" @fadeOut>{{ message | async }}</div> <div *ngIf="(message | async) && hasMessage" class="alert alert-info" role="alert" @fadeOut>{{ (message | async) | translate }}</div>
<button class="btn btn-lg btn-primary btn-block mt-3" type="submit" [disabled]="!form.valid">{{"login.form.submit" | translate}}</button> <button class="btn btn-lg btn-primary btn-block mt-3" type="submit" [disabled]="!form.valid">{{"login.form.submit" | translate}}</button>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">{{"login.form.new-user" | translate}}</a> <a class="dropdown-item" href="#">{{"login.form.new-user" | translate}}</a>