openaire-library/error-interceptor.service.ts

58 lines
1.8 KiB
TypeScript
Raw Normal View History

import {Injectable} from "@angular/core";
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from "@angular/common/http";
import {Observable, throwError} from "rxjs";
import {catchError} from "rxjs/operators";
import {Session} from "./login/utils/helper.class";
import {Router} from "@angular/router";
import {LoginErrorCodes} from "./login/utils/guardHelper.class";
import {properties} from "../../environments/environment";
import {isArray} from "util";
@Injectable()
export class ErrorInterceptorService implements HttpInterceptor {
[Trunk | Library]: 1. error-interceptor.service.ts: Add "properties.orcidAPIURL" in UNAUTHORIZED_WHITELIST. 2. resultLanding.component.html: If result has identifiers and user is logged in, call <orcid-work>. 3. resultLanding.module.ts: Import OrcidModule. 4. searchResult.component.ts: If user is logged in, call "orcidService.getPutCodes()" and set orcidPutCodes of previewResults. 5. searchResults.module.ts: Add "OrcidService" in providers. 6. searchResearchResults.service.ts: In method "parseResults()", call "this.parsingFunctions.parseIdentifiers(resData['pid'])" to set identifiers. 7. customOptions.class.ts: Change method return type: "public static registryOptions(): any" --> public static registryOptions(): {}". (caused problem in return type of services (e.g. HttpEvent<string> instead of string). 8. searchResult.ts: Add field "identifiers: Map<string, string[]>". 9. env-properties.ts: Add field "orcidAPIURL". 10. result-preview.component.html: a. If result has identifiers and user is logged in, call <orcid-work>. b. In bottom line with impact factors and orcid, add class "result-preview-bottom" (set color to #747474 (like muted text) when not on hover). 11. result-preview.component.ts: Add field "loggedIn" and check on init if user is logged in (via Session). 12. result-preview.module.ts: Import OrcidModule. 13. result-preview.ts: Add field "orcidPutCodes" | In method "searchResultConvert()", set resultPreview.identifiers with all identifiers (not only dois). git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@60231 d315682c-612b-4755-9ff5-7f18f6832af3
2021-01-13 19:30:25 +01:00
private static UNAUTHORIZED_WHITELIST = [properties.userInfoUrl, properties.orcidAPIURL];
constructor(private router: Router) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(catchError(err => {
if ((err.status === 0 && properties.registryUrl && this.isService(req, properties.registryUrl)) ||
(err.status === 401 && !this.isService(req, ErrorInterceptorService.UNAUTHORIZED_WHITELIST))) {
this.logOut();
} else if(err.status === 403) {
this.unauthorized();
}
return throwError(err);
}));
}
isService(req: HttpRequest<any>, service: string | string[]):boolean {
if(isArray(service)) {
return !!service.find(element => req.url.indexOf(element) !== -1);
} else {
return req.url.indexOf(service) !== -1;
}
}
logOut() {
Session.removeUser();
this.router.navigate(['/user-info'], {
queryParams: {
'errorCode': LoginErrorCodes.NOT_LOGIN,
'redirectUrl': this.router.url
}
});
}
unauthorized() {
this.router.navigate(['/user-info'], {
queryParams: {
'errorCode': LoginErrorCodes.NOT_AUTHORIZED,
'redirectUrl': this.router.url
}
});
}
}