@dsivd/prestations-ng 15.2.3-beta6 → 15.2.3-beta9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dsivd-prestations-ng-v15.2.3-beta9.tgz +0 -0
- package/esm2020/sdk-redirect/iam-expired-interceptor.service.mjs +21 -25
- package/esm2020/sdk-redirect/redirect.component.mjs +8 -8
- package/fesm2015/dsivd-prestations-ng.mjs +27 -31
- package/fesm2015/dsivd-prestations-ng.mjs.map +1 -1
- package/fesm2020/dsivd-prestations-ng.mjs +27 -31
- package/fesm2020/dsivd-prestations-ng.mjs.map +1 -1
- package/package.json +1 -1
- package/sdk-redirect/iam-expired-interceptor.service.d.ts +2 -2
- package/sdk-redirect/redirect.component.d.ts +1 -2
- package/dsivd-prestations-ng-v15.2.3-beta6.tgz +0 -0
|
Binary file
|
|
@@ -6,36 +6,30 @@ import { catchError, map } from 'rxjs/operators';
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
const IAM_SESSION_EXPIRED_HEADER = 'iam-session-expired';
|
|
8
8
|
const CYBER_LOGIN_PATH = '/100018/login';
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const isRedirectionToIamACV = (event) => {
|
|
13
|
-
const isRedirection = event.status === 302 /* Found */;
|
|
14
|
-
const location = event.headers.get('Location');
|
|
15
|
-
return (isRedirection &&
|
|
16
|
-
(location?.includes(PORTAIL_IAM_ACV_EXTRA_PATH) ||
|
|
17
|
-
location?.includes(PORTAIL_IAM_ACV_INTRA_PATH)));
|
|
9
|
+
const ACV_LOGIN_PATH = '/iamlogin';
|
|
10
|
+
const isIamExpiredHeader = (event) => {
|
|
11
|
+
return !!event.headers.get(IAM_SESSION_EXPIRED_HEADER);
|
|
18
12
|
};
|
|
19
|
-
const
|
|
13
|
+
const isRedirectionToLogin = (event) => {
|
|
20
14
|
const isRedirection = event.status === 302 /* Found */;
|
|
21
|
-
const
|
|
22
|
-
|
|
15
|
+
const locationHeader = event.headers.get('Location');
|
|
16
|
+
const isLocationCyberLogin = locationHeader?.includes(CYBER_LOGIN_PATH);
|
|
17
|
+
const isLocationAcvLogin = locationHeader?.includes(ACV_LOGIN_PATH);
|
|
18
|
+
return isRedirection && (isLocationCyberLogin || isLocationAcvLogin);
|
|
23
19
|
};
|
|
24
20
|
export class IamExpiredInterceptorService {
|
|
25
21
|
constructor() {
|
|
26
|
-
this.
|
|
22
|
+
this._isIamSessionExpired = new Subject();
|
|
27
23
|
}
|
|
28
|
-
get
|
|
29
|
-
return this.
|
|
24
|
+
get isIamSessionExpired() {
|
|
25
|
+
return this._isIamSessionExpired.asObservable();
|
|
30
26
|
}
|
|
31
27
|
intercept(req, next) {
|
|
32
28
|
return next.handle(req).pipe(map(event => {
|
|
33
|
-
console.log('event', event);
|
|
34
29
|
if (event instanceof HttpResponse) {
|
|
35
30
|
if (isIamExpiredHeader(event) ||
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this._iamExpirationHeaderPresence.next(true);
|
|
31
|
+
isRedirectionToLogin(event)) {
|
|
32
|
+
this._isIamSessionExpired.next(true);
|
|
39
33
|
}
|
|
40
34
|
}
|
|
41
35
|
return event;
|
|
@@ -43,11 +37,13 @@ export class IamExpiredInterceptorService {
|
|
|
43
37
|
}
|
|
44
38
|
handleError(err) {
|
|
45
39
|
if (err instanceof HttpErrorResponse) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
// status is 200, but still an error since
|
|
41
|
+
// login page is returned when xml/json is expected
|
|
42
|
+
const isStatusOk = err.status === 200 /* Ok */;
|
|
43
|
+
const isUrlCyberLogin = err.url.includes(CYBER_LOGIN_PATH);
|
|
44
|
+
const isUrlAcvLogin = err.url.includes(ACV_LOGIN_PATH);
|
|
45
|
+
if (isStatusOk && (isUrlCyberLogin || isUrlAcvLogin)) {
|
|
46
|
+
this._isIamSessionExpired.next(true);
|
|
51
47
|
}
|
|
52
48
|
}
|
|
53
49
|
return throwError(err);
|
|
@@ -61,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.5", ngImpor
|
|
|
61
57
|
providedIn: 'root'
|
|
62
58
|
}]
|
|
63
59
|
}] });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWV4cGlyZWQtaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9zZGstcmVkaXJlY3QvaWFtLWV4cGlyZWQtaW50ZXJjZXB0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFjLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsaUJBQWlCLEVBS2pCLFlBQVksRUFFZixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWpELE1BQU0sMEJBQTBCLEdBQUcscUJBQXFCLENBQUM7QUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFDekMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRW5DLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUF3QixFQUFXLEVBQUU7SUFDN0QsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBd0IsRUFBVyxFQUFFO0lBQy9ELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLG9CQUF5QixDQUFDO0lBQzVELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVwRSxPQUFPLGFBQWEsSUFBSSxDQUFDLG9CQUFvQixJQUFJLGtCQUFrQixDQUFDLENBQUM7QUFDekUsQ0FBQyxDQUFDO0FBS0YsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlZLHlCQUFvQixHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO0tBMkMzRTtJQXpDRyxJQUFJLG1CQUFtQjtRQUNuQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsU0FBUyxDQUNMLEdBQXFCLEVBQ3JCLElBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtnQkFDL0IsSUFDSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7b0JBQ3pCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUM3QjtvQkFDRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN4QzthQUNKO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzFDLENBQUM7SUFDTixDQUFDO0lBRU8sV0FBVyxDQUNmLEdBQXVDO1FBRXZDLElBQUksR0FBRyxZQUFZLGlCQUFpQixFQUFFO1lBQ2xDLDBDQUEwQztZQUMxQyxtREFBbUQ7WUFDbkQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0saUJBQXNCLENBQUM7WUFDcEQsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzRCxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV2RCxJQUFJLFVBQVUsSUFBSSxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztTQUNKO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7eUhBM0NRLDRCQUE0Qjs2SEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07MkZBRVQsNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgSHR0cEV2ZW50LFxuICAgIEh0dHBIYW5kbGVyLFxuICAgIEh0dHBJbnRlcmNlcHRvcixcbiAgICBIdHRwUmVxdWVzdCxcbiAgICBIdHRwUmVzcG9uc2UsXG4gICAgSHR0cFN0YXR1c0NvZGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBJQU1fU0VTU0lPTl9FWFBJUkVEX0hFQURFUiA9ICdpYW0tc2Vzc2lvbi1leHBpcmVkJztcbmNvbnN0IENZQkVSX0xPR0lOX1BBVEggPSAnLzEwMDAxOC9sb2dpbic7XG5jb25zdCBBQ1ZfTE9HSU5fUEFUSCA9ICcvaWFtbG9naW4nO1xuXG5jb25zdCBpc0lhbUV4cGlyZWRIZWFkZXIgPSAoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuICEhZXZlbnQuaGVhZGVycy5nZXQoSUFNX1NFU1NJT05fRVhQSVJFRF9IRUFERVIpO1xufTtcblxuY29uc3QgaXNSZWRpcmVjdGlvblRvTG9naW4gPSAoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgaXNSZWRpcmVjdGlvbiA9IGV2ZW50LnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuRm91bmQ7XG4gICAgY29uc3QgbG9jYXRpb25IZWFkZXIgPSBldmVudC5oZWFkZXJzLmdldCgnTG9jYXRpb24nKTtcblxuICAgIGNvbnN0IGlzTG9jYXRpb25DeWJlckxvZ2luID0gbG9jYXRpb25IZWFkZXI/LmluY2x1ZGVzKENZQkVSX0xPR0lOX1BBVEgpO1xuICAgIGNvbnN0IGlzTG9jYXRpb25BY3ZMb2dpbiA9IGxvY2F0aW9uSGVhZGVyPy5pbmNsdWRlcyhBQ1ZfTE9HSU5fUEFUSCk7XG5cbiAgICByZXR1cm4gaXNSZWRpcmVjdGlvbiAmJiAoaXNMb2NhdGlvbkN5YmVyTG9naW4gfHwgaXNMb2NhdGlvbkFjdkxvZ2luKTtcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSWFtRXhwaXJlZEludGVyY2VwdG9yU2VydmljZSBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gICAgcHJpdmF0ZSBfaXNJYW1TZXNzaW9uRXhwaXJlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBnZXQgaXNJYW1TZXNzaW9uRXhwaXJlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWFtU2Vzc2lvbkV4cGlyZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaW50ZXJjZXB0KFxuICAgICAgICByZXE6IEh0dHBSZXF1ZXN0PGFueT4sXG4gICAgICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55PiB8IGFueT4ge1xuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJYW1FeHBpcmVkSGVhZGVyKGV2ZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWRpcmVjdGlvblRvTG9naW4oZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJYW1TZXNzaW9uRXhwaXJlZC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihcbiAgICAgICAgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSB8IEh0dHBFdmVudDxhbnk+XG4gICAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIHN0YXR1cyBpcyAyMDAsIGJ1dCBzdGlsbCBhbiBlcnJvciBzaW5jZVxuICAgICAgICAgICAgLy8gbG9naW4gcGFnZSBpcyByZXR1cm5lZCB3aGVuIHhtbC9qc29uIGlzIGV4cGVjdGVkXG4gICAgICAgICAgICBjb25zdCBpc1N0YXR1c09rID0gZXJyLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuT2s7XG4gICAgICAgICAgICBjb25zdCBpc1VybEN5YmVyTG9naW4gPSBlcnIudXJsLmluY2x1ZGVzKENZQkVSX0xPR0lOX1BBVEgpO1xuICAgICAgICAgICAgY29uc3QgaXNVcmxBY3ZMb2dpbiA9IGVyci51cmwuaW5jbHVkZXMoQUNWX0xPR0lOX1BBVEgpO1xuXG4gICAgICAgICAgICBpZiAoaXNTdGF0dXNPayAmJiAoaXNVcmxDeWJlckxvZ2luIHx8IGlzVXJsQWN2TG9naW4pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJYW1TZXNzaW9uRXhwaXJlZC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -6,19 +6,19 @@ import * as i2 from "../foehn-modal/foehn-modal.component";
|
|
|
6
6
|
export class RedirectComponent {
|
|
7
7
|
constructor(iamInterceptor) {
|
|
8
8
|
this.iamInterceptor = iamInterceptor;
|
|
9
|
-
this.
|
|
10
|
-
this.modalBodyText = `<p>Votre session a expiré.</p>
|
|
11
|
-
<p>Vous pouvez vous connecter à nouveau pour continuer à utiliser nos services.</p>`;
|
|
12
|
-
this.iamInterceptor.iamExpirationHeaderPresence
|
|
9
|
+
this.iamInterceptor.isIamSessionExpired
|
|
13
10
|
.pipe(first())
|
|
14
11
|
.subscribe(() => this.showModal());
|
|
15
12
|
}
|
|
13
|
+
reloadPage() {
|
|
14
|
+
window.location.reload();
|
|
15
|
+
}
|
|
16
16
|
showModal() {
|
|
17
17
|
this.counter = 10;
|
|
18
18
|
this.isModalVisible = true;
|
|
19
19
|
setInterval(() => {
|
|
20
20
|
if (0 === this.counter) {
|
|
21
|
-
|
|
21
|
+
this.reloadPage();
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
this.counter--;
|
|
@@ -26,9 +26,9 @@ export class RedirectComponent {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
RedirectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.5", ngImport: i0, type: RedirectComponent, deps: [{ token: i1.IamExpiredInterceptorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
-
RedirectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.5", type: RedirectComponent, selector: "redirector", ngImport: i0, template: "<foehn-modal\n [
|
|
29
|
+
RedirectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.5", type: RedirectComponent, selector: "redirector", ngImport: i0, template: "<foehn-modal\n [modalHeaderText]=\"'Information'\"\n [isModalVisible]=\"isModalVisible\"\n [closeable]=\"false\"\n>\n <p>Votre session a expir\u00E9.</p>\n <p>Vous pouvez <a href=\"#\" (click)=\"$event.preventDefault(); reloadPage();\">vous connecter</a> \u00E0 nouveau pour continuer \u00E0 utiliser nos services.</p>\n\n <div modal-footer class=\"w-100 text-right font-weight-bold\">\n Vous allez \u00EAtre redirig\u00E9 dans {{ counter }} s.\n </div>\n</foehn-modal>\n", components: [{ type: i2.FoehnModalComponent, selector: "foehn-modal", inputs: ["id", "name", "modalSize", "modalBodyText", "modalHeaderText", "closeable", "modalTriggerHtmlElement", "isModalVisible"], outputs: ["isModalVisibleChange"] }] });
|
|
30
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.5", ngImport: i0, type: RedirectComponent, decorators: [{
|
|
31
31
|
type: Component,
|
|
32
|
-
args: [{ selector: 'redirector', template: "<foehn-modal\n [
|
|
32
|
+
args: [{ selector: 'redirector', template: "<foehn-modal\n [modalHeaderText]=\"'Information'\"\n [isModalVisible]=\"isModalVisible\"\n [closeable]=\"false\"\n>\n <p>Votre session a expir\u00E9.</p>\n <p>Vous pouvez <a href=\"#\" (click)=\"$event.preventDefault(); reloadPage();\">vous connecter</a> \u00E0 nouveau pour continuer \u00E0 utiliser nos services.</p>\n\n <div modal-footer class=\"w-100 text-right font-weight-bold\">\n Vous allez \u00EAtre redirig\u00E9 dans {{ counter }} s.\n </div>\n</foehn-modal>\n" }]
|
|
33
33
|
}], ctorParameters: function () { return [{ type: i1.IamExpiredInterceptorService }]; } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL3Nkay1yZWRpcmVjdC9yZWRpcmVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvc2RrLXJlZGlyZWN0L3JlZGlyZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBT3ZDLE1BQU0sT0FBTyxpQkFBaUI7SUFLMUIsWUFBb0IsY0FBNEM7UUFBNUMsbUJBQWMsR0FBZCxjQUFjLENBQThCO1FBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CO2FBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLFNBQVM7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7OEdBekJRLGlCQUFpQjtrR0FBakIsaUJBQWlCLGtEQ1Q5QixxZkFZQTsyRkRIYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBRUksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWFtRXhwaXJlZEludGVyY2VwdG9yU2VydmljZSB9IGZyb20gJy4vaWFtLWV4cGlyZWQtaW50ZXJjZXB0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdyZWRpcmVjdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVkaXJlY3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0Q29tcG9uZW50IHtcblxuICAgIGlzTW9kYWxWaXNpYmxlOiBib29sZWFuO1xuICAgIGNvdW50ZXI6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaWFtSW50ZXJjZXB0b3I6IElhbUV4cGlyZWRJbnRlcmNlcHRvclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5pYW1JbnRlcmNlcHRvci5pc0lhbVNlc3Npb25FeHBpcmVkXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNob3dNb2RhbCgpKTtcbiAgICB9XG5cbiAgICByZWxvYWRQYWdlKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93TW9kYWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY291bnRlciA9IDEwO1xuICAgICAgICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKDAgPT09IHRoaXMuY291bnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkUGFnZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY291bnRlci0tO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICB9XG59XG4iLCI8Zm9laG4tbW9kYWxcbiAgICBbbW9kYWxIZWFkZXJUZXh0XT1cIidJbmZvcm1hdGlvbidcIlxuICAgIFtpc01vZGFsVmlzaWJsZV09XCJpc01vZGFsVmlzaWJsZVwiXG4gICAgW2Nsb3NlYWJsZV09XCJmYWxzZVwiXG4+XG4gICAgPHA+Vm90cmUgc2Vzc2lvbiBhIGV4cGlyw6kuPC9wPlxuICAgIDxwPlZvdXMgcG91dmV6IDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyByZWxvYWRQYWdlKCk7XCI+dm91cyBjb25uZWN0ZXI8L2E+IMOgIG5vdXZlYXUgcG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbm9zIHNlcnZpY2VzLjwvcD5cblxuICAgIDxkaXYgbW9kYWwtZm9vdGVyIGNsYXNzPVwidy0xMDAgdGV4dC1yaWdodCBmb250LXdlaWdodC1ib2xkXCI+XG4gICAgICAgIFZvdXMgYWxsZXogw6p0cmUgcmVkaXJpZ8OpIGRhbnMge3sgY291bnRlciB9fSBzLlxuICAgIDwvZGl2PlxuPC9mb2Vobi1tb2RhbD5cbiJdfQ==
|
|
@@ -32,36 +32,30 @@ import weekOfYear from 'dayjs/plugin/weekOfYear';
|
|
|
32
32
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
33
33
|
const IAM_SESSION_EXPIRED_HEADER = 'iam-session-expired';
|
|
34
34
|
const CYBER_LOGIN_PATH = '/100018/login';
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
const isRedirectionToIamACV = (event) => {
|
|
39
|
-
const isRedirection = event.status === 302 /* Found */;
|
|
40
|
-
const location = event.headers.get('Location');
|
|
41
|
-
return (isRedirection &&
|
|
42
|
-
((location === null || location === void 0 ? void 0 : location.includes(PORTAIL_IAM_ACV_EXTRA_PATH)) ||
|
|
43
|
-
(location === null || location === void 0 ? void 0 : location.includes(PORTAIL_IAM_ACV_INTRA_PATH))));
|
|
35
|
+
const ACV_LOGIN_PATH = '/iamlogin';
|
|
36
|
+
const isIamExpiredHeader = (event) => {
|
|
37
|
+
return !!event.headers.get(IAM_SESSION_EXPIRED_HEADER);
|
|
44
38
|
};
|
|
45
|
-
const
|
|
39
|
+
const isRedirectionToLogin = (event) => {
|
|
46
40
|
const isRedirection = event.status === 302 /* Found */;
|
|
47
|
-
const
|
|
48
|
-
|
|
41
|
+
const locationHeader = event.headers.get('Location');
|
|
42
|
+
const isLocationCyberLogin = locationHeader === null || locationHeader === void 0 ? void 0 : locationHeader.includes(CYBER_LOGIN_PATH);
|
|
43
|
+
const isLocationAcvLogin = locationHeader === null || locationHeader === void 0 ? void 0 : locationHeader.includes(ACV_LOGIN_PATH);
|
|
44
|
+
return isRedirection && (isLocationCyberLogin || isLocationAcvLogin);
|
|
49
45
|
};
|
|
50
46
|
class IamExpiredInterceptorService {
|
|
51
47
|
constructor() {
|
|
52
|
-
this.
|
|
48
|
+
this._isIamSessionExpired = new Subject();
|
|
53
49
|
}
|
|
54
|
-
get
|
|
55
|
-
return this.
|
|
50
|
+
get isIamSessionExpired() {
|
|
51
|
+
return this._isIamSessionExpired.asObservable();
|
|
56
52
|
}
|
|
57
53
|
intercept(req, next) {
|
|
58
54
|
return next.handle(req).pipe(map(event => {
|
|
59
|
-
console.log('event', event);
|
|
60
55
|
if (event instanceof HttpResponse) {
|
|
61
56
|
if (isIamExpiredHeader(event) ||
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this._iamExpirationHeaderPresence.next(true);
|
|
57
|
+
isRedirectionToLogin(event)) {
|
|
58
|
+
this._isIamSessionExpired.next(true);
|
|
65
59
|
}
|
|
66
60
|
}
|
|
67
61
|
return event;
|
|
@@ -69,11 +63,13 @@ class IamExpiredInterceptorService {
|
|
|
69
63
|
}
|
|
70
64
|
handleError(err) {
|
|
71
65
|
if (err instanceof HttpErrorResponse) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
// status is 200, but still an error since
|
|
67
|
+
// login page is returned when xml/json is expected
|
|
68
|
+
const isStatusOk = err.status === 200 /* Ok */;
|
|
69
|
+
const isUrlCyberLogin = err.url.includes(CYBER_LOGIN_PATH);
|
|
70
|
+
const isUrlAcvLogin = err.url.includes(ACV_LOGIN_PATH);
|
|
71
|
+
if (isStatusOk && (isUrlCyberLogin || isUrlAcvLogin)) {
|
|
72
|
+
this._isIamSessionExpired.next(true);
|
|
77
73
|
}
|
|
78
74
|
}
|
|
79
75
|
return throwError(err);
|
|
@@ -9948,19 +9944,19 @@ class TableSort {
|
|
|
9948
9944
|
class RedirectComponent {
|
|
9949
9945
|
constructor(iamInterceptor) {
|
|
9950
9946
|
this.iamInterceptor = iamInterceptor;
|
|
9951
|
-
this.
|
|
9952
|
-
this.modalBodyText = `<p>Votre session a expiré.</p>
|
|
9953
|
-
<p>Vous pouvez vous connecter à nouveau pour continuer à utiliser nos services.</p>`;
|
|
9954
|
-
this.iamInterceptor.iamExpirationHeaderPresence
|
|
9947
|
+
this.iamInterceptor.isIamSessionExpired
|
|
9955
9948
|
.pipe(first())
|
|
9956
9949
|
.subscribe(() => this.showModal());
|
|
9957
9950
|
}
|
|
9951
|
+
reloadPage() {
|
|
9952
|
+
window.location.reload();
|
|
9953
|
+
}
|
|
9958
9954
|
showModal() {
|
|
9959
9955
|
this.counter = 10;
|
|
9960
9956
|
this.isModalVisible = true;
|
|
9961
9957
|
setInterval(() => {
|
|
9962
9958
|
if (0 === this.counter) {
|
|
9963
|
-
|
|
9959
|
+
this.reloadPage();
|
|
9964
9960
|
return;
|
|
9965
9961
|
}
|
|
9966
9962
|
this.counter--;
|
|
@@ -9968,10 +9964,10 @@ class RedirectComponent {
|
|
|
9968
9964
|
}
|
|
9969
9965
|
}
|
|
9970
9966
|
RedirectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.5", ngImport: i0, type: RedirectComponent, deps: [{ token: IamExpiredInterceptorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9971
|
-
RedirectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.5", type: RedirectComponent, selector: "redirector", ngImport: i0, template: "<foehn-modal\n [
|
|
9967
|
+
RedirectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.5", type: RedirectComponent, selector: "redirector", ngImport: i0, template: "<foehn-modal\n [modalHeaderText]=\"'Information'\"\n [isModalVisible]=\"isModalVisible\"\n [closeable]=\"false\"\n>\n <p>Votre session a expir\u00E9.</p>\n <p>Vous pouvez <a href=\"#\" (click)=\"$event.preventDefault(); reloadPage();\">vous connecter</a> \u00E0 nouveau pour continuer \u00E0 utiliser nos services.</p>\n\n <div modal-footer class=\"w-100 text-right font-weight-bold\">\n Vous allez \u00EAtre redirig\u00E9 dans {{ counter }} s.\n </div>\n</foehn-modal>\n", components: [{ type: FoehnModalComponent, selector: "foehn-modal", inputs: ["id", "name", "modalSize", "modalBodyText", "modalHeaderText", "closeable", "modalTriggerHtmlElement", "isModalVisible"], outputs: ["isModalVisibleChange"] }] });
|
|
9972
9968
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.5", ngImport: i0, type: RedirectComponent, decorators: [{
|
|
9973
9969
|
type: Component,
|
|
9974
|
-
args: [{ selector: 'redirector', template: "<foehn-modal\n [
|
|
9970
|
+
args: [{ selector: 'redirector', template: "<foehn-modal\n [modalHeaderText]=\"'Information'\"\n [isModalVisible]=\"isModalVisible\"\n [closeable]=\"false\"\n>\n <p>Votre session a expir\u00E9.</p>\n <p>Vous pouvez <a href=\"#\" (click)=\"$event.preventDefault(); reloadPage();\">vous connecter</a> \u00E0 nouveau pour continuer \u00E0 utiliser nos services.</p>\n\n <div modal-footer class=\"w-100 text-right font-weight-bold\">\n Vous allez \u00EAtre redirig\u00E9 dans {{ counter }} s.\n </div>\n</foehn-modal>\n" }]
|
|
9975
9971
|
}], ctorParameters: function () { return [{ type: IamExpiredInterceptorService }]; } });
|
|
9976
9972
|
|
|
9977
9973
|
class SdkRedirectModule {
|