@dereekb/dbx-core 9.14.2 → 9.15.1
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/esm2020/lib/router/auth/hook/index.mjs +2 -0
- package/esm2020/lib/router/auth/hook/uid.hook.mjs +55 -0
- package/esm2020/lib/router/auth/index.mjs +2 -0
- package/esm2020/lib/router/index.mjs +2 -1
- package/fesm2015/dereekb-dbx-core.mjs +54 -1
- package/fesm2015/dereekb-dbx-core.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-core.mjs +54 -1
- package/fesm2020/dereekb-dbx-core.mjs.map +1 -1
- package/lib/router/auth/hook/index.d.ts +1 -0
- package/lib/router/auth/hook/uid.hook.d.ts +36 -0
- package/lib/router/auth/index.d.ts +1 -0
- package/lib/router/index.d.ts +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './uid.hook';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2hvb2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3VpZC5ob29rJztcbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DbxAuthService } from '../../../auth/service/auth.service';
|
|
2
|
+
import { map, first, switchMap, firstValueFrom, of } from 'rxjs';
|
|
3
|
+
export const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE = '0';
|
|
4
|
+
export const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY = 'uid';
|
|
5
|
+
/**
|
|
6
|
+
* This hook asserts the user is allowed to view a route with a user identifier as a parameter.
|
|
7
|
+
*
|
|
8
|
+
* If not, or
|
|
9
|
+
*/
|
|
10
|
+
export function redirectForUserIdentifierParamHook(input) {
|
|
11
|
+
const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, transitionService, canViewUser } = input;
|
|
12
|
+
const criteria = typeof input.criteria === 'string' ? { entering: input.criteria } : input.criteria;
|
|
13
|
+
// https://ui-router.github.io/ng2/docs/latest/modules/transition.html#hookresult
|
|
14
|
+
const assertAllowedUid = (transition) => {
|
|
15
|
+
const $state = transition.router.stateService;
|
|
16
|
+
const injector = transition.injector();
|
|
17
|
+
const authService = injector.get(DbxAuthService);
|
|
18
|
+
const params = transition.params();
|
|
19
|
+
const transitionTargetUid = params[uidParam];
|
|
20
|
+
return firstValueFrom(authService.userIdentifier$.pipe(first(), switchMap((currentUserId) => {
|
|
21
|
+
let result = of(true);
|
|
22
|
+
let redirectToUid;
|
|
23
|
+
if (!transitionTargetUid || transitionTargetUid === DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE) {
|
|
24
|
+
// If uid isn't set, default to the current user.
|
|
25
|
+
redirectToUid = of(currentUserId);
|
|
26
|
+
}
|
|
27
|
+
else if (currentUserId !== transitionTargetUid) {
|
|
28
|
+
redirectToUid = canViewUser(transitionTargetUid, authService, injector).pipe(map((x) => {
|
|
29
|
+
if (typeof x === 'boolean') {
|
|
30
|
+
return x ? transitionTargetUid : currentUserId;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return x;
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
if (redirectToUid != null) {
|
|
38
|
+
result = redirectToUid.pipe(first(), map((targetUid) => {
|
|
39
|
+
if (targetUid !== transitionTargetUid) {
|
|
40
|
+
const target = transition.targetState();
|
|
41
|
+
const state = target.state();
|
|
42
|
+
return $state.target(state, { ...params, uid: targetUid }, { location: true });
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
})));
|
|
51
|
+
};
|
|
52
|
+
// Register the "requires auth" hook with the TransitionsService
|
|
53
|
+
transitionService.onBefore(criteria, assertAllowedUid, { priority: 100 });
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlkLmhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2hvb2svdWlkLmhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxjQUFjLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JGLE1BQU0sQ0FBQyxNQUFNLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FBRyxLQUFLLENBQUM7QUEwQnBFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0NBQWtDLENBQUMsS0FBOEM7SUFDL0YsTUFBTSxFQUFFLFFBQVEsR0FBRyw4Q0FBOEMsRUFBRSxpQkFBaUIsR0FBRyxnREFBZ0QsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEwsTUFBTSxRQUFRLEdBQXNCLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUV2SCxpRkFBaUY7SUFDakYsTUFBTSxnQkFBZ0IsR0FBcUIsQ0FBQyxVQUFzQixFQUFjLEVBQUU7UUFDaEYsTUFBTSxNQUFNLEdBQWlCLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBbUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFbkMsTUFBTSxtQkFBbUIsR0FBa0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELE9BQU8sY0FBYyxDQUNuQixXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDOUIsS0FBSyxFQUFFLEVBQ1AsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQTJCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5QyxJQUFJLGFBQTJELENBQUM7WUFFaEUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixLQUFLLGdEQUFnRCxFQUFFO2dCQUNwRyxpREFBaUQ7Z0JBQ2pELGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxhQUFhLEtBQUssbUJBQW1CLEVBQUU7Z0JBQ2hELGFBQWEsR0FBRyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDMUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1IsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUU7d0JBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO3FCQUNoRDt5QkFBTTt3QkFDTCxPQUFPLENBQUMsQ0FBQztxQkFDVjtnQkFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO2FBQ0g7WUFFRCxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUN6QixLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDaEIsSUFBSSxTQUFTLEtBQUssbUJBQW1CLEVBQUU7d0JBQ3JDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUM3QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ2hGO3lCQUFNO3dCQUNMLE9BQU8sSUFBSSxDQUFDO3FCQUNiO2dCQUNILENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQ1ksQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixnRUFBZ0U7SUFDaEUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoVXNlcklkZW50aWZpZXIgfSBmcm9tICcuLi8uLi8uLi9hdXRoL2F1dGgudXNlcic7XG5pbXBvcnQgeyBEYnhBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2F1dGgvc2VydmljZS9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNpdGlvblNlcnZpY2UsIFRyYW5zaXRpb25Ib29rRm4sIFRyYW5zaXRpb24sIEhvb2tSZXN1bHQsIFN0YXRlU2VydmljZSwgSG9va01hdGNoQ3JpdGVyaWEgfSBmcm9tICdAdWlyb3V0ZXIvY29yZSc7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgbWFwLCBmaXJzdCwgZmlsdGVyLCBzd2l0Y2hNYXAsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVESVJFQ1RfRk9SX1VTRVJfSURFTlRJRklFUl9QQVJBTV9WQUxVRSA9ICcwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fS0VZID0gJ3VpZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3RGb3JVc2VySWRlbnRpZmllclBhcmFtSG9va0lucHV0IHtcbiAgLyoqXG4gICAqIFJvdXRlIHBhcmFtZXRlciB0byB1c2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIFwidWlkXCJcbiAgICovXG4gIHJlYWRvbmx5IHVpZFBhcmFtPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcGFyYW0gdmFsdWUgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gMC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRQYXJhbVZhbHVlPzogc3RyaW5nO1xuICAvKipcbiAgICogQ3JpdGVyaWEgb3Igcm91dGUgdG8gd2F0Y2ggYW5kIGludGVyY2VwdC5cbiAgICovXG4gIHJlYWRvbmx5IGNyaXRlcmlhOiBIb29rTWF0Y2hDcml0ZXJpYSB8IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhbnNpdGlvblNlcnZpY2U6IFRyYW5zaXRpb25TZXJ2aWNlO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgdXNlciBjYW4gdmlldyB0aGUgdGFyZ2V0IHVzZXIuXG4gICAqL1xuICByZWFkb25seSBjYW5WaWV3VXNlcjogKHRhcmdldFVpZDogQXV0aFVzZXJJZGVudGlmaWVyLCBhdXRoU2VydmljZTogRGJ4QXV0aFNlcnZpY2UsIGluamVjdG9yOiBJbmplY3RvcikgPT4gT2JzZXJ2YWJsZTxib29sZWFuIHwgQXV0aFVzZXJJZGVudGlmaWVyPjtcbn1cblxuLyoqXG4gKiBUaGlzIGhvb2sgYXNzZXJ0cyB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHZpZXcgYSByb3V0ZSB3aXRoIGEgdXNlciBpZGVudGlmaWVyIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIElmIG5vdCwgb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGlyZWN0Rm9yVXNlcklkZW50aWZpZXJQYXJhbUhvb2soaW5wdXQ6IFJlZGlyZWN0Rm9yVXNlcklkZW50aWZpZXJQYXJhbUhvb2tJbnB1dCk6IHZvaWQge1xuICBjb25zdCB7IHVpZFBhcmFtID0gREVGQVVMVF9SRURJUkVDVF9GT1JfVVNFUl9JREVOVElGSUVSX1BBUkFNX0tFWSwgZGVmYXVsdFBhcmFtVmFsdWUgPSBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fVkFMVUUsIHRyYW5zaXRpb25TZXJ2aWNlLCBjYW5WaWV3VXNlciB9ID0gaW5wdXQ7XG4gIGNvbnN0IGNyaXRlcmlhOiBIb29rTWF0Y2hDcml0ZXJpYSA9IHR5cGVvZiBpbnB1dC5jcml0ZXJpYSA9PT0gJ3N0cmluZycgPyB7IGVudGVyaW5nOiBpbnB1dC5jcml0ZXJpYSB9IDogaW5wdXQuY3JpdGVyaWE7XG5cbiAgLy8gaHR0cHM6Ly91aS1yb3V0ZXIuZ2l0aHViLmlvL25nMi9kb2NzL2xhdGVzdC9tb2R1bGVzL3RyYW5zaXRpb24uaHRtbCNob29rcmVzdWx0XG4gIGNvbnN0IGFzc2VydEFsbG93ZWRVaWQ6IFRyYW5zaXRpb25Ib29rRm4gPSAodHJhbnNpdGlvbjogVHJhbnNpdGlvbik6IEhvb2tSZXN1bHQgPT4ge1xuICAgIGNvbnN0ICRzdGF0ZTogU3RhdGVTZXJ2aWNlID0gdHJhbnNpdGlvbi5yb3V0ZXIuc3RhdGVTZXJ2aWNlO1xuICAgIGNvbnN0IGluamVjdG9yID0gdHJhbnNpdGlvbi5pbmplY3RvcigpO1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlOiBEYnhBdXRoU2VydmljZSA9IGluamVjdG9yLmdldChEYnhBdXRoU2VydmljZSk7XG4gICAgY29uc3QgcGFyYW1zID0gdHJhbnNpdGlvbi5wYXJhbXMoKTtcblxuICAgIGNvbnN0IHRyYW5zaXRpb25UYXJnZXRVaWQ6IE1heWJlPHN0cmluZz4gPSBwYXJhbXNbdWlkUGFyYW1dO1xuXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgYXV0aFNlcnZpY2UudXNlcklkZW50aWZpZXIkLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIHN3aXRjaE1hcCgoY3VycmVudFVzZXJJZCkgPT4ge1xuICAgICAgICAgIGxldCByZXN1bHQ6IE9ic2VydmFibGU8SG9va1Jlc3VsdD4gPSBvZih0cnVlKTtcblxuICAgICAgICAgIGxldCByZWRpcmVjdFRvVWlkOiBNYXliZTxPYnNlcnZhYmxlPE1heWJlPEF1dGhVc2VySWRlbnRpZmllcj4+PjtcblxuICAgICAgICAgIGlmICghdHJhbnNpdGlvblRhcmdldFVpZCB8fCB0cmFuc2l0aW9uVGFyZ2V0VWlkID09PSBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fVkFMVUUpIHtcbiAgICAgICAgICAgIC8vIElmIHVpZCBpc24ndCBzZXQsIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgICAgICAgIHJlZGlyZWN0VG9VaWQgPSBvZihjdXJyZW50VXNlcklkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRVc2VySWQgIT09IHRyYW5zaXRpb25UYXJnZXRVaWQpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VG9VaWQgPSBjYW5WaWV3VXNlcih0cmFuc2l0aW9uVGFyZ2V0VWlkLCBhdXRoU2VydmljZSwgaW5qZWN0b3IpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geCA/IHRyYW5zaXRpb25UYXJnZXRVaWQgOiBjdXJyZW50VXNlcklkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWRpcmVjdFRvVWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlZGlyZWN0VG9VaWQucGlwZShcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgbWFwKCh0YXJnZXRVaWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VWlkICE9PSB0cmFuc2l0aW9uVGFyZ2V0VWlkKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0cmFuc2l0aW9uLnRhcmdldFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRhcmdldC5zdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICRzdGF0ZS50YXJnZXQoc3RhdGUsIHsgLi4ucGFyYW1zLCB1aWQ6IHRhcmdldFVpZCB9LCB7IGxvY2F0aW9uOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSBhcyBIb29rUmVzdWx0O1xuICB9O1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSBcInJlcXVpcmVzIGF1dGhcIiBob29rIHdpdGggdGhlIFRyYW5zaXRpb25zU2VydmljZVxuICB0cmFuc2l0aW9uU2VydmljZS5vbkJlZm9yZShjcml0ZXJpYSwgYXNzZXJ0QWxsb3dlZFVpZCwgeyBwcmlvcml0eTogMTAwIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './hook';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ob29rJztcbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './anchor';
|
|
2
|
+
export * from './auth';
|
|
2
3
|
export * from './router';
|
|
3
4
|
export * from './segue';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYW5jaG9yJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL3JvdXRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NlZ3VlJztcbiJdfQ==
|
|
@@ -2219,6 +2219,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
|
|
|
2219
2219
|
type: Input
|
|
2220
2220
|
}] } });
|
|
2221
2221
|
|
|
2222
|
+
const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE = '0';
|
|
2223
|
+
const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY = 'uid';
|
|
2224
|
+
/**
|
|
2225
|
+
* This hook asserts the user is allowed to view a route with a user identifier as a parameter.
|
|
2226
|
+
*
|
|
2227
|
+
* If not, or
|
|
2228
|
+
*/
|
|
2229
|
+
function redirectForUserIdentifierParamHook(input) {
|
|
2230
|
+
const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, transitionService, canViewUser } = input;
|
|
2231
|
+
const criteria = typeof input.criteria === 'string' ? { entering: input.criteria } : input.criteria;
|
|
2232
|
+
// https://ui-router.github.io/ng2/docs/latest/modules/transition.html#hookresult
|
|
2233
|
+
const assertAllowedUid = (transition) => {
|
|
2234
|
+
const $state = transition.router.stateService;
|
|
2235
|
+
const injector = transition.injector();
|
|
2236
|
+
const authService = injector.get(DbxAuthService);
|
|
2237
|
+
const params = transition.params();
|
|
2238
|
+
const transitionTargetUid = params[uidParam];
|
|
2239
|
+
return firstValueFrom(authService.userIdentifier$.pipe(first(), switchMap((currentUserId) => {
|
|
2240
|
+
let result = of(true);
|
|
2241
|
+
let redirectToUid;
|
|
2242
|
+
if (!transitionTargetUid || transitionTargetUid === DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE) {
|
|
2243
|
+
// If uid isn't set, default to the current user.
|
|
2244
|
+
redirectToUid = of(currentUserId);
|
|
2245
|
+
}
|
|
2246
|
+
else if (currentUserId !== transitionTargetUid) {
|
|
2247
|
+
redirectToUid = canViewUser(transitionTargetUid, authService, injector).pipe(map((x) => {
|
|
2248
|
+
if (typeof x === 'boolean') {
|
|
2249
|
+
return x ? transitionTargetUid : currentUserId;
|
|
2250
|
+
}
|
|
2251
|
+
else {
|
|
2252
|
+
return x;
|
|
2253
|
+
}
|
|
2254
|
+
}));
|
|
2255
|
+
}
|
|
2256
|
+
if (redirectToUid != null) {
|
|
2257
|
+
result = redirectToUid.pipe(first(), map((targetUid) => {
|
|
2258
|
+
if (targetUid !== transitionTargetUid) {
|
|
2259
|
+
const target = transition.targetState();
|
|
2260
|
+
const state = target.state();
|
|
2261
|
+
return $state.target(state, Object.assign(Object.assign({}, params), { uid: targetUid }), { location: true });
|
|
2262
|
+
}
|
|
2263
|
+
else {
|
|
2264
|
+
return true;
|
|
2265
|
+
}
|
|
2266
|
+
}));
|
|
2267
|
+
}
|
|
2268
|
+
return result;
|
|
2269
|
+
})));
|
|
2270
|
+
};
|
|
2271
|
+
// Register the "requires auth" hook with the TransitionsService
|
|
2272
|
+
transitionService.onBefore(criteria, assertAllowedUid, { priority: 100 });
|
|
2273
|
+
}
|
|
2274
|
+
|
|
2222
2275
|
var DbxRouterTransitionEventType;
|
|
2223
2276
|
(function (DbxRouterTransitionEventType) {
|
|
2224
2277
|
/**
|
|
@@ -4708,5 +4761,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
|
|
|
4708
4761
|
* Generated bundle index. Do not edit.
|
|
4709
4762
|
*/
|
|
4710
4763
|
|
|
4711
|
-
export { APP_ACTION_DISABLED_DIRECTIVE_KEY, APP_ACTION_ENFORCE_MODIFIED_DIRECTIVE_KEY, AbstractActionFilterSourceDirective, AbstractDbxActionValueOnTriggerDirective, AbstractDbxAnchorDirective, AbstractDbxButtonDirective, AbstractDbxFilterMapInstanceDirective, AbstractDbxInjectionDirective, AbstractFilterSourceConnectorDirective, AbstractFilterSourceDirective, AbstractForwardDbxInjectionContextDirective, AbstractIfDirective, AbstractLockSetSubscriptionDirective, AbstractSubscriptionDirective, AbstractTransitionDirective, AbstractTransitionWatcherDirective, ActionContextStore, ActionContextStoreSource, ActionContextStoreSourceMap, AnchorType, DBX_APP_APP_CONTEXT_STATE, DBX_APP_AUTH_ROUTER_EFFECTS_TOKEN, DBX_AUTH_APP_CONTEXT_STATE, DBX_INIT_APP_CONTEXT_STATE, DBX_INJECTION_COMPONENT_DATA, DBX_KNOWN_APP_CONTEXT_STATES, DBX_ONBOARDING_APP_CONTEXT_STATE, DBX_PUBLIC_APP_CONTEXT_STATE, DEFAULT_ACTION_DISABLED_KEY, DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN, DEFAULT_STORAGE_OBJECT_TOKEN, DateDistancePipe, DateFormatDistancePipe, DateFromToTimePipe, DbxActionAutoModifyDirective, DbxActionAutoTriggerDirective, DbxActionButtonDirective, DbxActionButtonTriggerDirective, DbxActionContextBaseSource, DbxActionContextLoggerDirective, DbxActionContextMachine, DbxActionContextMapDirective, DbxActionContextMapDirectiveSourceInstance, DbxActionContextStoreSourceInstance, DbxActionDirective, DbxActionDisabledDirective, DbxActionEnforceModifiedDirective, DbxActionFromMapDirective, DbxActionHandlerDirective, DbxActionHasSuccessDirective, DbxActionIsWorkingDirective, DbxActionMapSourceDirective, DbxActionMapWorkingDisableDirective, DbxActionSourceDirective, DbxActionState, DbxActionSuccessHandlerDirective, DbxActionValueDirective, DbxActionValueOnTriggerInstance, DbxActionValueTriggerDirective, DbxActionWorkInstanceDelegate, DbxAnchor, DbxAngularRouterService, DbxAppAuthRouterEffects, DbxAppAuthRouterModule, DbxAppAuthRouterService, DbxAppAuthRouterStateModule, DbxAppAuthRoutes, DbxAppAuthStateModule, DbxAppAuthStateService, DbxAppContextService, DbxAppContextStateDirective, DbxAppContextStateModule, DbxAuthHasAnyRoleDirective, DbxAuthHasRolesDirective, DbxAuthNotAnyRolesDirective, DbxAuthService, DbxButton, DbxButtonDirective, DbxButtonSegueDirective, DbxCoreActionModule, DbxCoreAngularRouterSegueModule, DbxCoreAuthModule, DbxCoreButtonModule, DbxCoreFilterModule, DbxCoreUIRouterSegueModule, DbxDatePipeModule, DbxFilterMapDirective, DbxFilterMapSourceConnectorDirective, DbxFilterMapSourceDirective, DbxFilterSourceConnectorDirective, DbxFilterSourceDirective, DbxInjectionComponent, DbxInjectionComponentModule, DbxInjectionContext, DbxInjectionContextDirective, DbxInjectionInstance, DbxLoadingButtonDirective, DbxMiscPipeModule, DbxPipesModule, DbxRouteParamDefaultRedirectInstance, DbxRouteParamReaderInstance, DbxRouterService, DbxRouterTransitionEventType, DbxRouterTransitionService, DbxStorageModule, DbxUIRouterService, FullLocalStorageObject, InstantStorageAccessor, LimitedStorageAccessor, LockSetComponentStore, MemoryStorageObject, MinutesStringPipe, NO_AUTH_USER_IDENTIFIER, PrettyJsonPipe, SecondaryActionContextStoreSource, SimpleStorageAccessor, SimpleStorageAccessorFactory, StorageAccessor, StringStorageAccessor, StringifySimpleStorageAccessorConverter, TimeDistanceCountdownPipe, TimeDistancePipe, ToJsDatePipe, ToMinutesPipe, WrapperSimpleStorageAccessorDelegate, actionContextHasNoErrorAndIsModifiedAndCanTrigger, actionContextIsModifiedAndCanTrigger, actionContextStoreSourceInstanceFactory, actionContextStoreSourcePipe, anchorTypeForAnchor, asSegueRef, asSegueRefString, authRolesSetContainsAllRolesFrom, authRolesSetContainsAnyRoleFrom, authRolesSetContainsNoRolesFrom, authUserIdentifier, canReadyValue, canTriggerAction, canTriggerActionState, checkNgContentWrapperHasContent, dbxActionValueStreamDirective, defaultStorageObjectFactory, enableHasAuthRoleHook, enableHasAuthStateHook, enableIsLoggedInHook, expandClickableAnchorLinkTree, expandClickableAnchorLinkTreeNode, expandClickableAnchorLinkTrees, filterTransitionEvent, filterTransitionSuccess, flattenExpandedClickableAnchorLinkTree, flattenExpandedClickableAnchorLinkTreeToLinks, index as fromDbxAppAuth, index$2 as fromDbxAppContext, goWithRouter, isActionContextDisabled, isActionContextEnabled, isDisabledActionContextState, isIdleActionState, isLatestSuccessfulRoute, isSegueRef, isWorkingActionState, loadingStateForActionContextState, loadingStateTypeForActionContextState, loadingStateTypeForActionState, loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, makeAuthTransitionHook, makeDbxActionContextSourceReference, mapRefStringObsToSegueRefObs, mergeDbxInjectionComponentConfigs, index$1 as onDbxAppAuth, index$3 as onDbxAppContext, pipeActionStore, provideActionStoreSource, provideDbxAnchor, provideDbxButton, provideDbxInjectionContext, provideFilterSource, provideFilterSourceConnector, provideSecondaryActionStoreSource, redirectBasedOnAuthUserState, refStringToSegueRef, safeDetectChanges, safeMarkForCheck, safeUseCdRef, successTransition, tapDetectChanges, tapSafeMarkForCheck, useActionStore };
|
|
4764
|
+
export { APP_ACTION_DISABLED_DIRECTIVE_KEY, APP_ACTION_ENFORCE_MODIFIED_DIRECTIVE_KEY, AbstractActionFilterSourceDirective, AbstractDbxActionValueOnTriggerDirective, AbstractDbxAnchorDirective, AbstractDbxButtonDirective, AbstractDbxFilterMapInstanceDirective, AbstractDbxInjectionDirective, AbstractFilterSourceConnectorDirective, AbstractFilterSourceDirective, AbstractForwardDbxInjectionContextDirective, AbstractIfDirective, AbstractLockSetSubscriptionDirective, AbstractSubscriptionDirective, AbstractTransitionDirective, AbstractTransitionWatcherDirective, ActionContextStore, ActionContextStoreSource, ActionContextStoreSourceMap, AnchorType, DBX_APP_APP_CONTEXT_STATE, DBX_APP_AUTH_ROUTER_EFFECTS_TOKEN, DBX_AUTH_APP_CONTEXT_STATE, DBX_INIT_APP_CONTEXT_STATE, DBX_INJECTION_COMPONENT_DATA, DBX_KNOWN_APP_CONTEXT_STATES, DBX_ONBOARDING_APP_CONTEXT_STATE, DBX_PUBLIC_APP_CONTEXT_STATE, DEFAULT_ACTION_DISABLED_KEY, DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN, DEFAULT_STORAGE_OBJECT_TOKEN, DateDistancePipe, DateFormatDistancePipe, DateFromToTimePipe, DbxActionAutoModifyDirective, DbxActionAutoTriggerDirective, DbxActionButtonDirective, DbxActionButtonTriggerDirective, DbxActionContextBaseSource, DbxActionContextLoggerDirective, DbxActionContextMachine, DbxActionContextMapDirective, DbxActionContextMapDirectiveSourceInstance, DbxActionContextStoreSourceInstance, DbxActionDirective, DbxActionDisabledDirective, DbxActionEnforceModifiedDirective, DbxActionFromMapDirective, DbxActionHandlerDirective, DbxActionHasSuccessDirective, DbxActionIsWorkingDirective, DbxActionMapSourceDirective, DbxActionMapWorkingDisableDirective, DbxActionSourceDirective, DbxActionState, DbxActionSuccessHandlerDirective, DbxActionValueDirective, DbxActionValueOnTriggerInstance, DbxActionValueTriggerDirective, DbxActionWorkInstanceDelegate, DbxAnchor, DbxAngularRouterService, DbxAppAuthRouterEffects, DbxAppAuthRouterModule, DbxAppAuthRouterService, DbxAppAuthRouterStateModule, DbxAppAuthRoutes, DbxAppAuthStateModule, DbxAppAuthStateService, DbxAppContextService, DbxAppContextStateDirective, DbxAppContextStateModule, DbxAuthHasAnyRoleDirective, DbxAuthHasRolesDirective, DbxAuthNotAnyRolesDirective, DbxAuthService, DbxButton, DbxButtonDirective, DbxButtonSegueDirective, DbxCoreActionModule, DbxCoreAngularRouterSegueModule, DbxCoreAuthModule, DbxCoreButtonModule, DbxCoreFilterModule, DbxCoreUIRouterSegueModule, DbxDatePipeModule, DbxFilterMapDirective, DbxFilterMapSourceConnectorDirective, DbxFilterMapSourceDirective, DbxFilterSourceConnectorDirective, DbxFilterSourceDirective, DbxInjectionComponent, DbxInjectionComponentModule, DbxInjectionContext, DbxInjectionContextDirective, DbxInjectionInstance, DbxLoadingButtonDirective, DbxMiscPipeModule, DbxPipesModule, DbxRouteParamDefaultRedirectInstance, DbxRouteParamReaderInstance, DbxRouterService, DbxRouterTransitionEventType, DbxRouterTransitionService, DbxStorageModule, DbxUIRouterService, FullLocalStorageObject, InstantStorageAccessor, LimitedStorageAccessor, LockSetComponentStore, MemoryStorageObject, MinutesStringPipe, NO_AUTH_USER_IDENTIFIER, PrettyJsonPipe, SecondaryActionContextStoreSource, SimpleStorageAccessor, SimpleStorageAccessorFactory, StorageAccessor, StringStorageAccessor, StringifySimpleStorageAccessorConverter, TimeDistanceCountdownPipe, TimeDistancePipe, ToJsDatePipe, ToMinutesPipe, WrapperSimpleStorageAccessorDelegate, actionContextHasNoErrorAndIsModifiedAndCanTrigger, actionContextIsModifiedAndCanTrigger, actionContextStoreSourceInstanceFactory, actionContextStoreSourcePipe, anchorTypeForAnchor, asSegueRef, asSegueRefString, authRolesSetContainsAllRolesFrom, authRolesSetContainsAnyRoleFrom, authRolesSetContainsNoRolesFrom, authUserIdentifier, canReadyValue, canTriggerAction, canTriggerActionState, checkNgContentWrapperHasContent, dbxActionValueStreamDirective, defaultStorageObjectFactory, enableHasAuthRoleHook, enableHasAuthStateHook, enableIsLoggedInHook, expandClickableAnchorLinkTree, expandClickableAnchorLinkTreeNode, expandClickableAnchorLinkTrees, filterTransitionEvent, filterTransitionSuccess, flattenExpandedClickableAnchorLinkTree, flattenExpandedClickableAnchorLinkTreeToLinks, index as fromDbxAppAuth, index$2 as fromDbxAppContext, goWithRouter, isActionContextDisabled, isActionContextEnabled, isDisabledActionContextState, isIdleActionState, isLatestSuccessfulRoute, isSegueRef, isWorkingActionState, loadingStateForActionContextState, loadingStateTypeForActionContextState, loadingStateTypeForActionState, loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, makeAuthTransitionHook, makeDbxActionContextSourceReference, mapRefStringObsToSegueRefObs, mergeDbxInjectionComponentConfigs, index$1 as onDbxAppAuth, index$3 as onDbxAppContext, pipeActionStore, provideActionStoreSource, provideDbxAnchor, provideDbxButton, provideDbxInjectionContext, provideFilterSource, provideFilterSourceConnector, provideSecondaryActionStoreSource, redirectBasedOnAuthUserState, redirectForUserIdentifierParamHook, refStringToSegueRef, safeDetectChanges, safeMarkForCheck, safeUseCdRef, successTransition, tapDetectChanges, tapSafeMarkForCheck, useActionStore };
|
|
4712
4765
|
//# sourceMappingURL=dereekb-dbx-core.mjs.map
|