@magda/typescript-common 2.0.0-alpha.0 → 2.0.0-alpha.3
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/dist/BaseApiClient.d.ts +41 -0
- package/dist/BaseApiClient.js +63 -0
- package/dist/BaseApiClient.js.map +1 -0
- package/dist/IndexerApiClient.d.ts +16 -0
- package/dist/IndexerApiClient.js +39 -0
- package/dist/IndexerApiClient.js.map +1 -0
- package/dist/JsonTransformer.js +1 -2
- package/dist/JsonTransformer.js.map +1 -1
- package/dist/OpaCompileResponseParser.d.ts +115 -4
- package/dist/OpaCompileResponseParser.js +233 -19
- package/dist/OpaCompileResponseParser.js.map +1 -1
- package/dist/SQLUtils.d.ts +2 -2
- package/dist/SQLUtils.js +1 -1
- package/dist/SQLUtils.js.map +1 -1
- package/dist/Try.d.ts +17 -0
- package/dist/Try.js +68 -0
- package/dist/Try.js.map +1 -0
- package/dist/authorization-api/ApiClient.d.ts +9 -13
- package/dist/authorization-api/ApiClient.js +88 -31
- package/dist/authorization-api/ApiClient.js.map +1 -1
- package/dist/authorization-api/authMiddleware.d.ts +7 -7
- package/dist/authorization-api/authMiddleware.js +54 -52
- package/dist/authorization-api/authMiddleware.js.map +1 -1
- package/dist/authorization-api/constants.d.ts +1 -0
- package/dist/authorization-api/constants.js +2 -1
- package/dist/authorization-api/constants.js.map +1 -1
- package/dist/authorization-api/model.d.ts +61 -23
- package/dist/createNoCacheFetchOptions.d.ts +15 -0
- package/dist/createNoCacheFetchOptions.js +20 -0
- package/dist/createNoCacheFetchOptions.js.map +1 -0
- package/dist/fetchRequest.d.ts +11 -0
- package/dist/fetchRequest.js +62 -0
- package/dist/fetchRequest.js.map +1 -0
- package/dist/generated/registry/api.d.ts +12 -5
- package/dist/generated/registry/api.js +57 -0
- package/dist/generated/registry/api.js.map +1 -1
- package/dist/getAbsoluteUrl.d.ts +7 -7
- package/dist/getAbsoluteUrl.js +22 -19
- package/dist/getAbsoluteUrl.js.map +1 -1
- package/dist/getRequest.d.ts +1 -0
- package/dist/getRequest.js +28 -0
- package/dist/getRequest.js.map +1 -0
- package/dist/getRequestNoCache.d.ts +1 -0
- package/dist/getRequestNoCache.js +23 -0
- package/dist/getRequestNoCache.js.map +1 -0
- package/dist/getStorageUrl.d.ts +34 -0
- package/dist/getStorageUrl.js +138 -0
- package/dist/getStorageUrl.js.map +1 -0
- package/dist/handleServerError.d.ts +2 -0
- package/dist/handleServerError.js +17 -0
- package/dist/handleServerError.js.map +1 -0
- package/dist/opa/AspectQuery.js +3 -0
- package/dist/opa/AspectQuery.js.map +1 -1
- package/dist/opa/AuthDecision.js +1 -1
- package/dist/opa/AuthDecision.js.map +1 -1
- package/dist/opa/AuthDecisionQueryClient.js +8 -5
- package/dist/opa/AuthDecisionQueryClient.js.map +1 -1
- package/dist/registry/AuthorizedRegistryClient.d.ts +7 -11
- package/dist/registry/AuthorizedRegistryClient.js +56 -21
- package/dist/registry/AuthorizedRegistryClient.js.map +1 -1
- package/dist/registry/RegistryClient.d.ts +5 -7
- package/dist/registry/RegistryClient.js +34 -15
- package/dist/registry/RegistryClient.js.map +1 -1
- package/dist/registry/model.d.ts +5 -0
- package/dist/registry/model.js +3 -0
- package/dist/registry/model.js.map +1 -0
- package/dist/test/arbitraries.js +2 -4
- package/dist/test/arbitraries.js.map +1 -1
- package/dist/test/buildApiClient.spec.js +2 -41
- package/dist/test/buildApiClient.spec.js.map +1 -1
- package/dist/test/db/getTestDBConfig.js +1 -1
- package/dist/test/db/getTestDBConfig.js.map +1 -1
- package/dist/test/getStorageUrl.spec.d.ts +1 -0
- package/dist/test/getStorageUrl.spec.js +95 -0
- package/dist/test/getStorageUrl.spec.js.map +1 -0
- package/dist/test/mockAuthApiHost.js +2 -26
- package/dist/test/mockAuthApiHost.js.map +1 -1
- package/dist/test/mockAuthorization.js +2 -2
- package/dist/test/mockAuthorization.js.map +1 -1
- package/dist/test/registry/buildAuthorizedClient.spec.js +9 -7
- package/dist/test/registry/buildAuthorizedClient.spec.js.map +1 -1
- package/dist/test/sampleAuthDecisions/datasetPermissionWithOrgUnitConstraint.json +2 -2
- package/dist/test/sampleAuthDecisions/extraLargeResponse.json +2519 -0
- package/dist/test/sampleOpaResponses/datasetPermissionWithOrgUnitConstraint.json +2 -2
- package/dist/test/sampleOpaResponses/extraLargeResponse.json +104869 -0
- package/dist/test/testOpaCompileResponseParser.spec.js +19 -2
- package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -1
- package/package.json +10 -11
package/dist/Try.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Failure = exports.Success = exports.TryResult = void 0;
|
|
13
|
+
class TryResult {
|
|
14
|
+
constructor(v, e) {
|
|
15
|
+
this.value = v;
|
|
16
|
+
this.error = e;
|
|
17
|
+
}
|
|
18
|
+
get() {
|
|
19
|
+
if (this.isSuccessful) {
|
|
20
|
+
return this.value;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw new Error("Cannot retrieve value from a Failure");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
getOr(v) {
|
|
27
|
+
if (this.isSuccessful) {
|
|
28
|
+
return this.value;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return v;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.TryResult = TryResult;
|
|
36
|
+
class Success extends TryResult {
|
|
37
|
+
constructor(v) {
|
|
38
|
+
super(v);
|
|
39
|
+
this.isSuccessful = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.Success = Success;
|
|
43
|
+
class Failure extends TryResult {
|
|
44
|
+
constructor(e) {
|
|
45
|
+
super(undefined, e);
|
|
46
|
+
this.isSuccessful = false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.Failure = Failure;
|
|
50
|
+
function Try(func) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
try {
|
|
53
|
+
if (typeof func === "function") {
|
|
54
|
+
const r = yield func();
|
|
55
|
+
return new Success(r);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const r = yield func;
|
|
59
|
+
return new Success(r);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
return new Failure(e);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
exports.default = Try;
|
|
68
|
+
//# sourceMappingURL=Try.js.map
|
package/dist/Try.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Try.js","sourceRoot":"","sources":["../src/Try.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAsB,SAAS;IAI3B,YAAY,CAAK,EAAE,CAAS;QACxB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,GAAG;QACC,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SAC3D;IACL,CAAC;IACD,KAAK,CAAC,CAAI;QACN,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;aAAM;YACH,OAAO,CAAC,CAAC;SACZ;IACL,CAAC;CACJ;AAvBD,8BAuBC;AAED,MAAa,OAAiB,SAAQ,SAAY;IAE9C,YAAY,CAAI;QACZ,KAAK,CAAC,CAAC,CAAC,CAAC;QAFG,iBAAY,GAAG,IAAI,CAAC;IAGpC,CAAC;CACJ;AALD,0BAKC;AAED,MAAa,OAAiB,SAAQ,SAAY;IAG9C,YAAY,CAAQ;QAChB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAHR,iBAAY,GAAG,KAAK,CAAC;IAIrC,CAAC;CACJ;AAND,0BAMC;AAED,SAA8B,GAAG,CAC7B,IAAiD;;QAEjD,IAAI;YACA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;gBAC5B,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;gBACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;aACzB;iBAAM;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC;gBACrB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;aACzB;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;SACzB;IACL,CAAC;CAAA;AAdD,sBAcC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { User, Role, Permission, OrgUnit } from "./model";
|
|
1
|
+
import { User, CreateUserData, UserRecord, Role, Permission, OrgUnit, OrgUnitRecord, CreateRolePermissionInputData, PermissionRecord, OperationRecord, ResourceRecord } from "./model";
|
|
2
2
|
import { Maybe } from "tsmonad";
|
|
3
3
|
import { RequiredKeys } from "../utilityTypes";
|
|
4
4
|
export default class ApiClient {
|
|
@@ -16,15 +16,6 @@ export default class ApiClient {
|
|
|
16
16
|
* @memberof ApiClient
|
|
17
17
|
*/
|
|
18
18
|
getUser(userId: string): Promise<Maybe<RequiredKeys<User, "id">>>;
|
|
19
|
-
/**
|
|
20
|
-
* Get the data of a user.
|
|
21
|
-
* (Deprecated) This is the public facing API and will return less fields.
|
|
22
|
-
*
|
|
23
|
-
* @param {string} userId
|
|
24
|
-
* @returns {Promise<Maybe<User>>}
|
|
25
|
-
* @memberof ApiClient
|
|
26
|
-
*/
|
|
27
|
-
getUserPublic(userId: string): Promise<Maybe<RequiredKeys<User, "id">>>;
|
|
28
19
|
/**
|
|
29
20
|
* Lookup user by source (identity provider) & sourceId (identity ID)
|
|
30
21
|
*
|
|
@@ -37,11 +28,11 @@ export default class ApiClient {
|
|
|
37
28
|
/**
|
|
38
29
|
* create a user
|
|
39
30
|
*
|
|
40
|
-
* @param {
|
|
41
|
-
* @returns {Promise<
|
|
31
|
+
* @param {CreateUserData} user
|
|
32
|
+
* @returns {Promise<UserRecord>}
|
|
42
33
|
* @memberof ApiClient
|
|
43
34
|
*/
|
|
44
|
-
createUser(user:
|
|
35
|
+
createUser(user: CreateUserData): Promise<UserRecord>;
|
|
45
36
|
/**
|
|
46
37
|
* Add Roles to a user.
|
|
47
38
|
* Returns a list of current role ids of the user.
|
|
@@ -137,5 +128,10 @@ export default class ApiClient {
|
|
|
137
128
|
* @memberof ApiClient
|
|
138
129
|
*/
|
|
139
130
|
getAllOrgUnitChildren(nodeId: string): Promise<OrgUnit[]>;
|
|
131
|
+
createOrgNode(parentNodeId: string, node: Partial<Omit<OrgUnitRecord, "id" | "createBy" | "createTime" | "editBy" | "editTime" | "left" | "right">>): Promise<OrgUnit>;
|
|
132
|
+
createRole(name: string, desc?: string): Promise<Role>;
|
|
133
|
+
createRolePermission(roleId: string, permissionData: CreateRolePermissionInputData): Promise<PermissionRecord>;
|
|
134
|
+
getOperationByUri(opUri: string): Promise<OperationRecord>;
|
|
135
|
+
getResourceByUri(resUri: string): Promise<ResourceRecord>;
|
|
140
136
|
private handleGetResult;
|
|
141
137
|
}
|
|
@@ -16,9 +16,10 @@ const isomorphic_fetch_1 = __importDefault(require("isomorphic-fetch"));
|
|
|
16
16
|
const tsmonad_1 = require("tsmonad");
|
|
17
17
|
const lodash_1 = __importDefault(require("lodash"));
|
|
18
18
|
const buildJwt_1 = __importDefault(require("../session/buildJwt"));
|
|
19
|
-
const GenericError_1 = __importDefault(require("./GenericError"));
|
|
20
19
|
const addTrailingSlash_1 = __importDefault(require("../addTrailingSlash"));
|
|
21
20
|
const urijs_1 = __importDefault(require("urijs"));
|
|
21
|
+
const ServerError_1 = __importDefault(require("../ServerError"));
|
|
22
|
+
const isUuid_1 = __importDefault(require("../util/isUuid"));
|
|
22
23
|
class ApiClient {
|
|
23
24
|
constructor(
|
|
24
25
|
// e.g. http://authorization-api/v0
|
|
@@ -30,14 +31,29 @@ class ApiClient {
|
|
|
30
31
|
if (jwtSecret && userId) {
|
|
31
32
|
this.jwt = buildJwt_1.default(jwtSecret, userId);
|
|
32
33
|
}
|
|
33
|
-
this.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
if (this.jwt) {
|
|
35
|
+
this.requestInitOption = {
|
|
36
|
+
headers: {
|
|
37
|
+
"X-Magda-Session": this.jwt
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
38
41
|
}
|
|
39
42
|
getMergeRequestInitOption(extraOptions = null) {
|
|
40
|
-
|
|
43
|
+
let defaultContentTypeCfg = {};
|
|
44
|
+
if ((extraOptions === null || extraOptions === void 0 ? void 0 : extraOptions.body) &&
|
|
45
|
+
(!(extraOptions === null || extraOptions === void 0 ? void 0 : extraOptions.headers) ||
|
|
46
|
+
(typeof extraOptions.headers === "object" &&
|
|
47
|
+
Object.keys(extraOptions.headers)
|
|
48
|
+
.map((key) => key.toLowerCase())
|
|
49
|
+
.indexOf("content-type") == -1))) {
|
|
50
|
+
defaultContentTypeCfg = {
|
|
51
|
+
headers: {
|
|
52
|
+
"Content-Type": "application/json"
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return lodash_1.default.merge({}, this.requestInitOption, extraOptions, defaultContentTypeCfg);
|
|
41
57
|
}
|
|
42
58
|
processJsonResponse(res) {
|
|
43
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -45,8 +61,8 @@ class ApiClient {
|
|
|
45
61
|
return (yield res.json());
|
|
46
62
|
}
|
|
47
63
|
else {
|
|
48
|
-
const responseText =
|
|
49
|
-
throw new
|
|
64
|
+
const responseText = yield res.text();
|
|
65
|
+
throw new ServerError_1.default(`Error: ${res.statusText}. ${responseText.replace(/<(.|\n)*?>/g, "")}`, res.status);
|
|
50
66
|
}
|
|
51
67
|
});
|
|
52
68
|
}
|
|
@@ -58,19 +74,6 @@ class ApiClient {
|
|
|
58
74
|
* @memberof ApiClient
|
|
59
75
|
*/
|
|
60
76
|
getUser(userId) {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
return yield this.handleGetResult(isomorphic_fetch_1.default(`${this.baseUrl}private/users/${userId}`, this.getMergeRequestInitOption()));
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get the data of a user.
|
|
67
|
-
* (Deprecated) This is the public facing API and will return less fields.
|
|
68
|
-
*
|
|
69
|
-
* @param {string} userId
|
|
70
|
-
* @returns {Promise<Maybe<User>>}
|
|
71
|
-
* @memberof ApiClient
|
|
72
|
-
*/
|
|
73
|
-
getUserPublic(userId) {
|
|
74
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
75
78
|
return yield this.handleGetResult(isomorphic_fetch_1.default(`${this.baseUrl}public/users/${userId}`, this.getMergeRequestInitOption()));
|
|
76
79
|
});
|
|
@@ -91,14 +94,14 @@ class ApiClient {
|
|
|
91
94
|
/**
|
|
92
95
|
* create a user
|
|
93
96
|
*
|
|
94
|
-
* @param {
|
|
95
|
-
* @returns {Promise<
|
|
97
|
+
* @param {CreateUserData} user
|
|
98
|
+
* @returns {Promise<UserRecord>}
|
|
96
99
|
* @memberof ApiClient
|
|
97
100
|
*/
|
|
98
101
|
createUser(user) {
|
|
99
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
103
|
try {
|
|
101
|
-
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}
|
|
104
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/users`, this.getMergeRequestInitOption({
|
|
102
105
|
method: "POST",
|
|
103
106
|
headers: {
|
|
104
107
|
"Content-Type": "application/json"
|
|
@@ -106,10 +109,10 @@ class ApiClient {
|
|
|
106
109
|
body: JSON.stringify(user)
|
|
107
110
|
}));
|
|
108
111
|
if (res.status >= 400) {
|
|
109
|
-
throw new Error(`Encountered error ${res.status} when
|
|
112
|
+
throw new Error(`Encountered error ${res.status}: ${yield res.text()} when creating new user to ${this.baseUrl}public/users`);
|
|
110
113
|
}
|
|
111
114
|
const resData = yield res.json();
|
|
112
|
-
return
|
|
115
|
+
return resData;
|
|
113
116
|
}
|
|
114
117
|
catch (e) {
|
|
115
118
|
console.error(e);
|
|
@@ -128,7 +131,7 @@ class ApiClient {
|
|
|
128
131
|
*/
|
|
129
132
|
addUserRoles(userId, roleIds) {
|
|
130
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
-
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/
|
|
134
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/users/${userId}/roles`, this.getMergeRequestInitOption({
|
|
132
135
|
method: "POST",
|
|
133
136
|
headers: {
|
|
134
137
|
"Content-Type": "application/json"
|
|
@@ -167,7 +170,7 @@ class ApiClient {
|
|
|
167
170
|
*/
|
|
168
171
|
getUserRoles(userId) {
|
|
169
172
|
return __awaiter(this, void 0, void 0, function* () {
|
|
170
|
-
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/
|
|
173
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/users/${userId}/roles`, this.getMergeRequestInitOption());
|
|
171
174
|
return yield this.processJsonResponse(res);
|
|
172
175
|
});
|
|
173
176
|
}
|
|
@@ -180,7 +183,7 @@ class ApiClient {
|
|
|
180
183
|
*/
|
|
181
184
|
getUserPermissions(userId) {
|
|
182
185
|
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
-
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/
|
|
186
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/users/${userId}/permissions`, this.getMergeRequestInitOption());
|
|
184
187
|
return yield this.processJsonResponse(res);
|
|
185
188
|
});
|
|
186
189
|
}
|
|
@@ -193,7 +196,7 @@ class ApiClient {
|
|
|
193
196
|
*/
|
|
194
197
|
getRolePermissions(roleId) {
|
|
195
198
|
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
-
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/
|
|
199
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/roles/${roleId}/permissions`, this.getMergeRequestInitOption());
|
|
197
200
|
return yield this.processJsonResponse(res);
|
|
198
201
|
});
|
|
199
202
|
}
|
|
@@ -303,6 +306,60 @@ class ApiClient {
|
|
|
303
306
|
return yield this.processJsonResponse(res);
|
|
304
307
|
});
|
|
305
308
|
}
|
|
309
|
+
createOrgNode(parentNodeId, node) {
|
|
310
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
+
const uri = urijs_1.default(`${this.baseUrl}public/orgunits`)
|
|
312
|
+
.segmentCoded(parentNodeId)
|
|
313
|
+
.segmentCoded("insert");
|
|
314
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption({
|
|
315
|
+
method: "post",
|
|
316
|
+
body: JSON.stringify(node)
|
|
317
|
+
}));
|
|
318
|
+
return yield this.processJsonResponse(res);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
createRole(name, desc) {
|
|
322
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
323
|
+
const uri = urijs_1.default(`${this.baseUrl}public/roles`);
|
|
324
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption({
|
|
325
|
+
method: "post",
|
|
326
|
+
body: JSON.stringify({
|
|
327
|
+
name,
|
|
328
|
+
description: desc ? desc : ""
|
|
329
|
+
})
|
|
330
|
+
}));
|
|
331
|
+
return yield this.processJsonResponse(res);
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
createRolePermission(roleId, permissionData) {
|
|
335
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
336
|
+
if (!isUuid_1.default(roleId)) {
|
|
337
|
+
throw new ServerError_1.default(`roleId: ${roleId} is not a valid UUID.`);
|
|
338
|
+
}
|
|
339
|
+
const uri = urijs_1.default(`${this.baseUrl}public/roles`)
|
|
340
|
+
.segmentCoded(roleId)
|
|
341
|
+
.segmentCoded("permissions");
|
|
342
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption({
|
|
343
|
+
method: "post",
|
|
344
|
+
body: JSON.stringify(permissionData)
|
|
345
|
+
}));
|
|
346
|
+
return yield this.processJsonResponse(res);
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
getOperationByUri(opUri) {
|
|
350
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
351
|
+
const uri = urijs_1.default(`${this.baseUrl}public/operations/byUri/${opUri}`);
|
|
352
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption());
|
|
353
|
+
return yield this.processJsonResponse(res);
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
getResourceByUri(resUri) {
|
|
357
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
358
|
+
const uri = urijs_1.default(`${this.baseUrl}public/resources/byUri/${resUri}`);
|
|
359
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption());
|
|
360
|
+
return yield this.processJsonResponse(res);
|
|
361
|
+
});
|
|
362
|
+
}
|
|
306
363
|
handleGetResult(promise) {
|
|
307
364
|
return __awaiter(this, void 0, void 0, function* () {
|
|
308
365
|
return promise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../src/authorization-api/ApiClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,wEAAqC;
|
|
1
|
+
{"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../src/authorization-api/ApiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Request, Response } from "express";
|
|
2
2
|
import AuthDecisionQueryClient, { AuthDecisionReqConfig } from "../opa/AuthDecisionQueryClient";
|
|
3
|
-
export declare const mustBeLoggedIn: (jwtSecret: string) => (this: any, req: Request, res: Response, next: () => void) => void;
|
|
4
3
|
/**
|
|
5
4
|
* Find the user making the request. Assign it to req passport style.
|
|
5
|
+
* !deprecated! should use middleware `getUserId` or `requireUserId` instead.
|
|
6
6
|
*/
|
|
7
7
|
export declare const getUser: (baseAuthUrl: string, jwtSecret: string, actionUserId?: string) => (req: Request, res: Response, next: () => void) => void;
|
|
8
8
|
export declare const mustBeAdmin: (baseAuthUrl: string, jwtSecret: string) => (req: Request, res: Response, next: () => void) => void;
|
|
@@ -29,6 +29,7 @@ export declare function withAuthDecision(authDecisionClient: AuthDecisionQueryCl
|
|
|
29
29
|
* @return {*}
|
|
30
30
|
*/
|
|
31
31
|
export declare function requireUnconditionalAuthDecision(authDecisionClient: AuthDecisionQueryClient, config: AuthDecisionReqConfig, requiredDecision?: boolean): (req: Request, res: Response, next: () => void) => void;
|
|
32
|
+
declare type InputDataOrFuncType = ((req: Request, res: Response) => Record<string, any>) | Record<string, any>;
|
|
32
33
|
/**
|
|
33
34
|
* require permission based on input data provided.
|
|
34
35
|
* Different from withAuthDecision, its method always set `unknowns` = Nil i.e. it will always attempt to make unconditional decision.
|
|
@@ -37,12 +38,10 @@ export declare function requireUnconditionalAuthDecision(authDecisionClient: Aut
|
|
|
37
38
|
* @export
|
|
38
39
|
* @param {AuthDecisionQueryClient} authDecisionClient
|
|
39
40
|
* @param {string} operationUri
|
|
40
|
-
* @param {(
|
|
41
|
+
* @param {InputDataOrFuncType} [inputDataFunc] either a function that produce input data (auth decision context data) from `req` & `req` or a plain object
|
|
41
42
|
* @return {*}
|
|
42
43
|
*/
|
|
43
|
-
export declare function requirePermission(authDecisionClient: AuthDecisionQueryClient, operationUri: string,
|
|
44
|
-
[key: string]: any;
|
|
45
|
-
}): (req: Request, res: Response, next: () => void) => void;
|
|
44
|
+
export declare function requirePermission(authDecisionClient: AuthDecisionQueryClient, operationUri: string, inputDataOrFunc?: InputDataOrFuncType): (req: Request, res: Response, next: () => void) => void;
|
|
46
45
|
/**
|
|
47
46
|
* Try to locate userId from JwtToken.
|
|
48
47
|
* If can't find JWT token, return undefined via `res.locals.userId`
|
|
@@ -52,7 +51,7 @@ export declare function requirePermission(authDecisionClient: AuthDecisionQueryC
|
|
|
52
51
|
* @param {Response} res
|
|
53
52
|
* @param {() => void} next
|
|
54
53
|
*/
|
|
55
|
-
export declare function getUserId(req: Request, res: Response, next: () => void)
|
|
54
|
+
export declare function getUserId(jwtSecret: string): (req: Request, res: Response, next: () => void) => void;
|
|
56
55
|
/**
|
|
57
56
|
* get current user ID from JWT token
|
|
58
57
|
* If can't locate userId, response 403 error
|
|
@@ -62,4 +61,5 @@ export declare function getUserId(req: Request, res: Response, next: () => void)
|
|
|
62
61
|
* @param {Response} res
|
|
63
62
|
* @param {() => void} next
|
|
64
63
|
*/
|
|
65
|
-
export declare
|
|
64
|
+
export declare const requireUserId: (jwtSecret: string) => (req: Request, res: Response, next: () => void) => void;
|
|
65
|
+
export {};
|
|
@@ -12,19 +12,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.requireUserId = exports.getUserId = exports.requirePermission = exports.requireUnconditionalAuthDecision = exports.withAuthDecision = exports.mustBeAdmin = exports.getUser =
|
|
15
|
+
exports.requireUserId = exports.getUserId = exports.requirePermission = exports.requireUnconditionalAuthDecision = exports.withAuthDecision = exports.mustBeAdmin = exports.getUser = void 0;
|
|
16
16
|
const GetUserId_1 = require("../session/GetUserId");
|
|
17
17
|
const ApiClient_1 = __importDefault(require("./ApiClient"));
|
|
18
18
|
const AuthDecision_1 = require("../opa/AuthDecision");
|
|
19
19
|
const constants_1 = require("./constants");
|
|
20
|
-
|
|
21
|
-
GetUserId_1.getUserIdHandling(req, res, jwtSecret, (userId) => {
|
|
22
|
-
this.userId = userId;
|
|
23
|
-
next();
|
|
24
|
-
});
|
|
25
|
-
};
|
|
20
|
+
const ServerError_1 = __importDefault(require("../ServerError"));
|
|
26
21
|
/**
|
|
27
22
|
* Find the user making the request. Assign it to req passport style.
|
|
23
|
+
* !deprecated! should use middleware `getUserId` or `requireUserId` instead.
|
|
28
24
|
*/
|
|
29
25
|
exports.getUser = (baseAuthUrl, jwtSecret, actionUserId) => (req, res, next) => {
|
|
30
26
|
GetUserId_1.getUserId(req, jwtSecret).caseOf({
|
|
@@ -46,6 +42,7 @@ exports.getUser = (baseAuthUrl, jwtSecret, actionUserId) => (req, res, next) =>
|
|
|
46
42
|
nothing: next
|
|
47
43
|
});
|
|
48
44
|
};
|
|
45
|
+
// deprecated middleware. To be removed after all code is secured with new model
|
|
49
46
|
exports.mustBeAdmin = (baseAuthUrl, jwtSecret) => {
|
|
50
47
|
const getUserInstance = exports.getUser(baseAuthUrl, jwtSecret);
|
|
51
48
|
return (req, res, next) => {
|
|
@@ -79,8 +76,13 @@ function withAuthDecision(authDecisionClient, config) {
|
|
|
79
76
|
next();
|
|
80
77
|
}
|
|
81
78
|
catch (e) {
|
|
82
|
-
console.error(`
|
|
83
|
-
|
|
79
|
+
console.error(`withAuthDecision middleware error: ${e}`);
|
|
80
|
+
if (e instanceof ServerError_1.default) {
|
|
81
|
+
res.status(e.statusCode).send(e.message);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
res.status(500).send(`An error occurred while retrieving auth decision for the request: ${e}`);
|
|
85
|
+
}
|
|
84
86
|
}
|
|
85
87
|
});
|
|
86
88
|
}
|
|
@@ -119,34 +121,35 @@ exports.requireUnconditionalAuthDecision = requireUnconditionalAuthDecision;
|
|
|
119
121
|
* @export
|
|
120
122
|
* @param {AuthDecisionQueryClient} authDecisionClient
|
|
121
123
|
* @param {string} operationUri
|
|
122
|
-
* @param {(
|
|
124
|
+
* @param {InputDataOrFuncType} [inputDataFunc] either a function that produce input data (auth decision context data) from `req` & `req` or a plain object
|
|
123
125
|
* @return {*}
|
|
124
126
|
*/
|
|
125
|
-
function requirePermission(authDecisionClient, operationUri,
|
|
127
|
+
function requirePermission(authDecisionClient, operationUri, inputDataOrFunc) {
|
|
126
128
|
return (req, res, next) => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const authDecision = res.locals.authDecision;
|
|
136
|
-
if (authDecision === null || authDecision === void 0 ? void 0 : authDecision.hasResidualRules) {
|
|
137
|
-
console.warn(`Failed to make unconditional auth decision for operation '${operationUri}'.
|
|
138
|
-
"Input: ${config === null || config === void 0 ? void 0 : config.input}. `);
|
|
139
|
-
res.status(403).send(`you are not permitted to perform '${operationUri}': no unconditional decision can be made.`);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
if (AuthDecision_1.isTrueEquivalent(authDecision === null || authDecision === void 0 ? void 0 : authDecision.result)) {
|
|
143
|
-
return next();
|
|
129
|
+
try {
|
|
130
|
+
const config = {
|
|
131
|
+
operationUri,
|
|
132
|
+
unknowns: []
|
|
133
|
+
};
|
|
134
|
+
if (inputDataOrFunc) {
|
|
135
|
+
if (typeof inputDataOrFunc === "function") {
|
|
136
|
+
config.input = inputDataOrFunc(req, res);
|
|
144
137
|
}
|
|
145
138
|
else {
|
|
146
|
-
|
|
139
|
+
config.input = inputDataOrFunc;
|
|
147
140
|
}
|
|
148
141
|
}
|
|
149
|
-
|
|
142
|
+
requireUnconditionalAuthDecision(authDecisionClient, config, true)(req, res, next);
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
console.error(`requirePermission middleware error: ${e}`);
|
|
146
|
+
if (e instanceof ServerError_1.default) {
|
|
147
|
+
res.status(e.statusCode).send(e.message);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
res.status(500).send(`requirePermission middleware error: ${e}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
150
153
|
};
|
|
151
154
|
}
|
|
152
155
|
exports.requirePermission = requirePermission;
|
|
@@ -159,17 +162,19 @@ exports.requirePermission = requirePermission;
|
|
|
159
162
|
* @param {Response} res
|
|
160
163
|
* @param {() => void} next
|
|
161
164
|
*/
|
|
162
|
-
function getUserId(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
function getUserId(jwtSecret) {
|
|
166
|
+
return (req, res, next) => {
|
|
167
|
+
GetUserId_1.getUserId(req, jwtSecret).caseOf({
|
|
168
|
+
just: (userId) => {
|
|
169
|
+
res.locals.userId = userId;
|
|
170
|
+
next();
|
|
171
|
+
},
|
|
172
|
+
nothing: () => {
|
|
173
|
+
res.locals.userId = undefined;
|
|
174
|
+
next();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
};
|
|
173
178
|
}
|
|
174
179
|
exports.getUserId = getUserId;
|
|
175
180
|
/**
|
|
@@ -181,15 +186,12 @@ exports.getUserId = getUserId;
|
|
|
181
186
|
* @param {Response} res
|
|
182
187
|
* @param {() => void} next
|
|
183
188
|
*/
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
exports.requireUserId = requireUserId;
|
|
189
|
+
exports.requireUserId = (jwtSecret) => (req, res, next) => getUserId(jwtSecret)(req, res, () => {
|
|
190
|
+
if (!res.locals.userId) {
|
|
191
|
+
res.status(403).send("Anonymous users access are not permitted: userId is required.");
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return next();
|
|
195
|
+
}
|
|
196
|
+
});
|
|
195
197
|
//# sourceMappingURL=authMiddleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/authorization-api/authMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/authorization-api/authMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,5 @@ export declare const ANONYMOUS_USERS_ROLE_ID = "00000000-0000-0001-0000-00000000
|
|
|
2
2
|
export declare const AUTHENTICATED_USERS_ROLE_ID = "00000000-0000-0002-0000-000000000000";
|
|
3
3
|
export declare const ADMIN_USERS_ROLE_ID = "00000000-0000-0003-0000-000000000000";
|
|
4
4
|
export declare const DEFAULT_ADMIN_USER_ID = "00000000-0000-4000-8000-000000000000";
|
|
5
|
+
export declare const DATA_STEWARDS_ROLE_ID = "4154bf84-d36e-4551-9734-4666f5b1e1c0";
|
|
5
6
|
export declare const SYSTEM_ROLES: string[];
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SYSTEM_ROLES = exports.DEFAULT_ADMIN_USER_ID = exports.ADMIN_USERS_ROLE_ID = exports.AUTHENTICATED_USERS_ROLE_ID = exports.ANONYMOUS_USERS_ROLE_ID = void 0;
|
|
3
|
+
exports.SYSTEM_ROLES = exports.DATA_STEWARDS_ROLE_ID = exports.DEFAULT_ADMIN_USER_ID = exports.ADMIN_USERS_ROLE_ID = exports.AUTHENTICATED_USERS_ROLE_ID = exports.ANONYMOUS_USERS_ROLE_ID = void 0;
|
|
4
4
|
exports.ANONYMOUS_USERS_ROLE_ID = "00000000-0000-0001-0000-000000000000";
|
|
5
5
|
exports.AUTHENTICATED_USERS_ROLE_ID = "00000000-0000-0002-0000-000000000000";
|
|
6
6
|
exports.ADMIN_USERS_ROLE_ID = "00000000-0000-0003-0000-000000000000";
|
|
7
7
|
exports.DEFAULT_ADMIN_USER_ID = "00000000-0000-4000-8000-000000000000";
|
|
8
|
+
exports.DATA_STEWARDS_ROLE_ID = "4154bf84-d36e-4551-9734-4666f5b1e1c0";
|
|
8
9
|
exports.SYSTEM_ROLES = [
|
|
9
10
|
exports.ANONYMOUS_USERS_ROLE_ID,
|
|
10
11
|
exports.AUTHENTICATED_USERS_ROLE_ID,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/authorization-api/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,uBAAuB,GAAG,sCAAsC,CAAC;AACjE,QAAA,2BAA2B,GACpC,sCAAsC,CAAC;AAC9B,QAAA,mBAAmB,GAAG,sCAAsC,CAAC;AAC7D,QAAA,qBAAqB,GAAG,sCAAsC,CAAC;AAE/D,QAAA,YAAY,GAAG;IACxB,+BAAuB;IACvB,mCAA2B;IAC3B,2BAAmB;CACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/authorization-api/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,uBAAuB,GAAG,sCAAsC,CAAC;AACjE,QAAA,2BAA2B,GACpC,sCAAsC,CAAC;AAC9B,QAAA,mBAAmB,GAAG,sCAAsC,CAAC;AAC7D,QAAA,qBAAqB,GAAG,sCAAsC,CAAC;AAC/D,QAAA,qBAAqB,GAAG,sCAAsC,CAAC;AAE/D,QAAA,YAAY,GAAG;IACxB,+BAAuB;IACvB,mCAA2B;IAC3B,2BAAmB;CACtB,CAAC"}
|