@magda/typescript-common 1.1.0-alpha.2 → 1.1.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/AspectBuilder.d.ts +7 -0
- package/dist/AspectBuilder.js +3 -0
- package/dist/AspectBuilder.js.map +1 -0
- package/dist/AspectCreationFailure.d.ts +5 -0
- package/dist/AspectCreationFailure.js +10 -0
- package/dist/AspectCreationFailure.js.map +1 -0
- package/dist/AsyncPage.d.ts +18 -0
- package/dist/AsyncPage.js +140 -0
- package/dist/AsyncPage.js.map +1 -0
- package/dist/ConnectionResult.d.ts +16 -0
- package/dist/ConnectionResult.js +77 -0
- package/dist/ConnectionResult.js.map +1 -0
- package/dist/ConnectorRecordId.d.ts +15 -0
- package/dist/ConnectorRecordId.js +46 -0
- package/dist/ConnectorRecordId.js.map +1 -0
- package/dist/JsonConnector.d.ts +195 -0
- package/dist/JsonConnector.js +427 -0
- package/dist/JsonConnector.js.map +1 -0
- package/dist/JsonTransformer.d.ts +112 -0
- package/dist/JsonTransformer.js +225 -0
- package/dist/JsonTransformer.js.map +1 -0
- package/dist/OpaCompileResponseParser.d.ts +480 -0
- package/dist/OpaCompileResponseParser.js +1134 -0
- package/dist/OpaCompileResponseParser.js.map +1 -0
- package/dist/RecordCreationFailure.d.ts +7 -0
- package/dist/RecordCreationFailure.js +11 -0
- package/dist/RecordCreationFailure.js.map +1 -0
- package/dist/SimpleOpaSQLTranslator.d.ts +14 -0
- package/dist/SimpleOpaSQLTranslator.js +79 -0
- package/dist/SimpleOpaSQLTranslator.js.map +1 -0
- package/dist/addTrailingSlash.d.ts +1 -0
- package/dist/addTrailingSlash.js +15 -0
- package/dist/addTrailingSlash.js.map +1 -0
- package/dist/appendUrlSegments.d.ts +2 -0
- package/dist/appendUrlSegments.js +18 -0
- package/dist/appendUrlSegments.js.map +1 -0
- package/dist/authorization-api/AccessControlError.d.ts +4 -0
- package/dist/authorization-api/AccessControlError.js +13 -0
- package/dist/authorization-api/AccessControlError.js.map +1 -0
- package/dist/authorization-api/ApiClient.d.ts +141 -0
- package/dist/authorization-api/ApiClient.js +335 -0
- package/dist/authorization-api/ApiClient.js.map +1 -0
- package/dist/authorization-api/AuthError.d.ts +4 -0
- package/dist/authorization-api/AuthError.js +13 -0
- package/dist/authorization-api/AuthError.js.map +1 -0
- package/dist/authorization-api/GenericError.d.ts +9 -0
- package/dist/authorization-api/GenericError.js +17 -0
- package/dist/authorization-api/GenericError.js.map +1 -0
- package/dist/authorization-api/authMiddleware.d.ts +7 -0
- package/dist/authorization-api/authMiddleware.js +52 -0
- package/dist/authorization-api/authMiddleware.js.map +1 -0
- package/dist/authorization-api/model.d.ts +99 -0
- package/dist/authorization-api/model.js +3 -0
- package/dist/authorization-api/model.js.map +1 -0
- package/dist/coerceJson.d.ts +2 -0
- package/dist/coerceJson.js +13 -0
- package/dist/coerceJson.js.map +1 -0
- package/dist/createServiceError.d.ts +19 -0
- package/dist/createServiceError.js +45 -0
- package/dist/createServiceError.js.map +1 -0
- package/dist/delay.d.ts +2 -0
- package/dist/delay.js +9 -0
- package/dist/delay.js.map +1 -0
- package/dist/express/status.d.ts +30 -0
- package/dist/express/status.js +180 -0
- package/dist/express/status.js.map +1 -0
- package/dist/formatServiceError.d.ts +1 -0
- package/dist/formatServiceError.js +23 -0
- package/dist/formatServiceError.js.map +1 -0
- package/dist/generated/registry/api.d.ts +596 -0
- package/dist/generated/registry/api.js +2060 -0
- package/dist/generated/registry/api.js.map +1 -0
- package/dist/getAbsoluteUrl.d.ts +12 -0
- package/dist/getAbsoluteUrl.js +35 -0
- package/dist/getAbsoluteUrl.js.map +1 -0
- package/dist/getBasePathFromUrl.d.ts +10 -0
- package/dist/getBasePathFromUrl.js +27 -0
- package/dist/getBasePathFromUrl.js.map +1 -0
- package/dist/markdownToHtml.d.ts +3 -0
- package/dist/markdownToHtml.js +38 -0
- package/dist/markdownToHtml.js.map +1 -0
- package/dist/opa/OpaTypes.d.ts +41 -0
- package/dist/opa/OpaTypes.js +3 -0
- package/dist/opa/OpaTypes.js.map +1 -0
- package/dist/opa/getAuthDecision.d.ts +19 -0
- package/dist/opa/getAuthDecision.js +94 -0
- package/dist/opa/getAuthDecision.js.map +1 -0
- package/dist/opa/queryOpa.d.ts +1 -0
- package/dist/opa/queryOpa.js +41 -0
- package/dist/opa/queryOpa.js.map +1 -0
- package/dist/registry/AuthorizedRegistryClient.d.ts +29 -0
- package/dist/registry/AuthorizedRegistryClient.js +115 -0
- package/dist/registry/AuthorizedRegistryClient.js.map +1 -0
- package/dist/registry/RegistryClient.d.ts +36 -0
- package/dist/registry/RegistryClient.js +59 -0
- package/dist/registry/RegistryClient.js.map +1 -0
- package/dist/registry/TenantConsts.d.ts +31 -0
- package/dist/registry/TenantConsts.js +35 -0
- package/dist/registry/TenantConsts.js.map +1 -0
- package/dist/registry-manual/api.d.ts +9 -0
- package/dist/registry-manual/api.js +10 -0
- package/dist/registry-manual/api.js.map +1 -0
- package/dist/request.d.ts +3 -0
- package/dist/request.js +19 -0
- package/dist/request.js.map +1 -0
- package/dist/retry.d.ts +1 -0
- package/dist/retry.js +21 -0
- package/dist/retry.js.map +1 -0
- package/dist/retryBackoff.d.ts +1 -0
- package/dist/retryBackoff.js +21 -0
- package/dist/retryBackoff.js.map +1 -0
- package/dist/runLater.d.ts +1 -0
- package/dist/runLater.js +16 -0
- package/dist/runLater.js.map +1 -0
- package/dist/session/GetUserId.d.ts +5 -0
- package/dist/session/GetUserId.js +41 -0
- package/dist/session/GetUserId.js.map +1 -0
- package/dist/session/GetUserSession.d.ts +3 -0
- package/dist/session/GetUserSession.js +22 -0
- package/dist/session/GetUserSession.js.map +1 -0
- package/dist/session/addJwtSecretFromEnvVar.d.ts +14 -0
- package/dist/session/addJwtSecretFromEnvVar.js +23 -0
- package/dist/session/addJwtSecretFromEnvVar.js.map +1 -0
- package/dist/session/buildJwt.d.ts +1 -0
- package/dist/session/buildJwt.js +8 -0
- package/dist/session/buildJwt.js.map +1 -0
- package/dist/session/cookieUtils.d.ts +16 -0
- package/dist/session/cookieUtils.js +19 -0
- package/dist/session/cookieUtils.js.map +1 -0
- package/dist/session/destroySession.d.ts +10 -0
- package/dist/session/destroySession.js +44 -0
- package/dist/session/destroySession.js.map +1 -0
- package/dist/session/getSessionId.d.ts +2 -0
- package/dist/session/getSessionId.js +28 -0
- package/dist/session/getSessionId.js.map +1 -0
- package/dist/tenant-api/AuthorizedTenantClient.d.ts +25 -0
- package/dist/tenant-api/AuthorizedTenantClient.js +61 -0
- package/dist/tenant-api/AuthorizedTenantClient.js.map +1 -0
- package/dist/tenant-api/Tenant.d.ts +17 -0
- package/dist/tenant-api/Tenant.js +10 -0
- package/dist/tenant-api/Tenant.js.map +1 -0
- package/dist/test/JsonConnector.spec.d.ts +1 -0
- package/dist/test/JsonConnector.spec.js +352 -0
- package/dist/test/JsonConnector.spec.js.map +1 -0
- package/dist/test/JsonTransformer.spec.d.ts +1 -0
- package/dist/test/JsonTransformer.spec.js +98 -0
- package/dist/test/JsonTransformer.spec.js.map +1 -0
- package/dist/test/arbitraries.d.ts +98 -0
- package/dist/test/arbitraries.js +264 -0
- package/dist/test/arbitraries.js.map +1 -0
- package/dist/test/aspect-templates/organization-details.d.ts +4 -0
- package/dist/test/aspect-templates/organization-details.js +11 -0
- package/dist/test/aspect-templates/organization-details.js.map +1 -0
- package/dist/test/buildApiClient.spec.d.ts +1 -0
- package/dist/test/buildApiClient.spec.js +177 -0
- package/dist/test/buildApiClient.spec.js.map +1 -0
- package/dist/test/buildAuthorizedTenantClient.spec.d.ts +1 -0
- package/dist/test/buildAuthorizedTenantClient.spec.js +60 -0
- package/dist/test/buildAuthorizedTenantClient.spec.js.map +1 -0
- package/dist/test/connectors/MockExpressServer.d.ts +5 -0
- package/dist/test/connectors/MockExpressServer.js +28 -0
- package/dist/test/connectors/MockExpressServer.js.map +1 -0
- package/dist/test/connectors/MockRegistry.d.ts +7 -0
- package/dist/test/connectors/MockRegistry.js +93 -0
- package/dist/test/connectors/MockRegistry.js.map +1 -0
- package/dist/test/connectors/runConnectorTest.d.ts +5 -0
- package/dist/test/connectors/runConnectorTest.js +106 -0
- package/dist/test/connectors/runConnectorTest.js.map +1 -0
- package/dist/test/db/getTestDBConfig.d.ts +7 -0
- package/dist/test/db/getTestDBConfig.js +13 -0
- package/dist/test/db/getTestDBConfig.js.map +1 -0
- package/dist/test/db/runMigrationSql.d.ts +9 -0
- package/dist/test/db/runMigrationSql.js +82 -0
- package/dist/test/db/runMigrationSql.js.map +1 -0
- package/dist/test/express/status.spec.d.ts +1 -0
- package/dist/test/express/status.spec.js +160 -0
- package/dist/test/express/status.spec.js.map +1 -0
- package/dist/test/fakeArgv.d.ts +2 -0
- package/dist/test/fakeArgv.js +7 -0
- package/dist/test/fakeArgv.js.map +1 -0
- package/dist/test/getAuthDecision.spec.d.ts +1 -0
- package/dist/test/getAuthDecision.spec.js +22 -0
- package/dist/test/getAuthDecision.spec.js.map +1 -0
- package/dist/test/getBasePathFromUrl.spec.d.ts +1 -0
- package/dist/test/getBasePathFromUrl.spec.js +25 -0
- package/dist/test/getBasePathFromUrl.spec.js.map +1 -0
- package/dist/test/jsverify.d.ts +2 -0
- package/dist/test/jsverify.js +8 -0
- package/dist/test/jsverify.js.map +1 -0
- package/dist/test/mockAuthApiHost.d.ts +14 -0
- package/dist/test/mockAuthApiHost.js +174 -0
- package/dist/test/mockAuthApiHost.js.map +1 -0
- package/dist/test/mockAuthorization.d.ts +3 -0
- package/dist/test/mockAuthorization.js +24 -0
- package/dist/test/mockAuthorization.js.map +1 -0
- package/dist/test/mockTenantDataStore.d.ts +8 -0
- package/dist/test/mockTenantDataStore.js +41 -0
- package/dist/test/mockTenantDataStore.js.map +1 -0
- package/dist/test/mockUserDataStore.d.ts +11 -0
- package/dist/test/mockUserDataStore.js +56 -0
- package/dist/test/mockUserDataStore.js.map +1 -0
- package/dist/test/registry/buildAuthorizedClient.spec.d.ts +1 -0
- package/dist/test/registry/buildAuthorizedClient.spec.js +101 -0
- package/dist/test/registry/buildAuthorizedClient.spec.js.map +1 -0
- package/dist/test/sampleOpaResponse.json +480 -0
- package/dist/test/sampleOpaResponseSimple.json +173 -0
- package/dist/test/sampleOpaResponseUnconditionalTrue.json +193 -0
- package/dist/test/sampleOpaResponseUnconditionalTrueWithDefaultRule.json +303 -0
- package/dist/test/sampleOpaResponseWithDefaultRule.json +303 -0
- package/dist/test/session/buildJwt.spec.d.ts +1 -0
- package/dist/test/session/buildJwt.spec.js +50 -0
- package/dist/test/session/buildJwt.spec.js.map +1 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.d.ts +1 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js +64 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js.map +1 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.d.ts +1 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js +52 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js.map +1 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.d.ts +1 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js +36 -0
- package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js.map +1 -0
- package/dist/test/testAsyncPage.spec.d.ts +1 -0
- package/dist/test/testAsyncPage.spec.js +463 -0
- package/dist/test/testAsyncPage.spec.js.map +1 -0
- package/dist/test/testOpaCompileResponseParser.spec.d.ts +1 -0
- package/dist/test/testOpaCompileResponseParser.spec.js +148 -0
- package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -0
- package/dist/test/util.d.ts +1 -0
- package/dist/test/util.js +8 -0
- package/dist/test/util.js.map +1 -0
- package/dist/util/arrayToMaybe.d.ts +2 -0
- package/dist/util/arrayToMaybe.js +8 -0
- package/dist/util/arrayToMaybe.js.map +1 -0
- package/dist/util/cleanOrgTitle.d.ts +1 -0
- package/dist/util/cleanOrgTitle.js +13 -0
- package/dist/util/cleanOrgTitle.js.map +1 -0
- package/dist/util/getMinikubeIP.d.ts +1 -0
- package/dist/util/getMinikubeIP.js +13 -0
- package/dist/util/getMinikubeIP.js.map +1 -0
- package/dist/util/isUuid.d.ts +2 -0
- package/dist/util/isUuid.js +6 -0
- package/dist/util/isUuid.js.map +1 -0
- package/dist/util/unionToThrowable.d.ts +1 -0
- package/dist/util/unionToThrowable.js +12 -0
- package/dist/util/unionToThrowable.js.map +1 -0
- package/dist/utilityTypes.d.ts +1 -0
- package/dist/utilityTypes.js +3 -0
- package/dist/utilityTypes.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,335 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const isomorphic_fetch_1 = __importDefault(require("isomorphic-fetch"));
|
|
16
|
+
const tsmonad_1 = require("tsmonad");
|
|
17
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
18
|
+
const buildJwt_1 = __importDefault(require("../session/buildJwt"));
|
|
19
|
+
const GenericError_1 = __importDefault(require("./GenericError"));
|
|
20
|
+
const addTrailingSlash_1 = __importDefault(require("../addTrailingSlash"));
|
|
21
|
+
const urijs_1 = __importDefault(require("urijs"));
|
|
22
|
+
class ApiClient {
|
|
23
|
+
constructor(
|
|
24
|
+
// e.g. http://authorization-api/v0
|
|
25
|
+
baseUrl, jwtSecret = null, userId = null) {
|
|
26
|
+
this.jwt = null;
|
|
27
|
+
this.requestInitOption = null;
|
|
28
|
+
this.baseUrl = "";
|
|
29
|
+
this.baseUrl = addTrailingSlash_1.default(baseUrl);
|
|
30
|
+
if (jwtSecret && userId) {
|
|
31
|
+
this.jwt = buildJwt_1.default(jwtSecret, userId);
|
|
32
|
+
}
|
|
33
|
+
this.requestInitOption = {
|
|
34
|
+
headers: {
|
|
35
|
+
"X-Magda-Session": this.jwt
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
getMergeRequestInitOption(extraOptions = null) {
|
|
40
|
+
return lodash_1.default.merge({}, this.requestInitOption, extraOptions);
|
|
41
|
+
}
|
|
42
|
+
processJsonResponse(res) {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
if (res.status >= 200 && res.status < 300) {
|
|
45
|
+
return (yield res.json());
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const responseText = (yield res.text()).replace(/<(.|\n)*?>/g, "");
|
|
49
|
+
throw new GenericError_1.default(responseText, res.status);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the data of a user.
|
|
55
|
+
*
|
|
56
|
+
* @param {string} userId
|
|
57
|
+
* @returns {Promise<Maybe<User>>}
|
|
58
|
+
* @memberof ApiClient
|
|
59
|
+
*/
|
|
60
|
+
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
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
return yield this.handleGetResult(isomorphic_fetch_1.default(`${this.baseUrl}public/users/${userId}`, this.getMergeRequestInitOption()));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Lookup user by source (identity provider) & sourceId (identity ID)
|
|
80
|
+
*
|
|
81
|
+
* @param {string} source
|
|
82
|
+
* @param {string} sourceId
|
|
83
|
+
* @returns {Promise<Maybe<User>>}
|
|
84
|
+
* @memberof ApiClient
|
|
85
|
+
*/
|
|
86
|
+
lookupUser(source, sourceId) {
|
|
87
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
return this.handleGetResult(isomorphic_fetch_1.default(`${this.baseUrl}private/users/lookup?source=${source}&sourceId=${sourceId}`, this.getMergeRequestInitOption()));
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* create a user
|
|
93
|
+
*
|
|
94
|
+
* @param {User} user
|
|
95
|
+
* @returns {Promise<User>}
|
|
96
|
+
* @memberof ApiClient
|
|
97
|
+
*/
|
|
98
|
+
createUser(user) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
try {
|
|
101
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}private/users`, this.getMergeRequestInitOption({
|
|
102
|
+
method: "POST",
|
|
103
|
+
headers: {
|
|
104
|
+
"Content-Type": "application/json"
|
|
105
|
+
},
|
|
106
|
+
body: JSON.stringify(user)
|
|
107
|
+
}));
|
|
108
|
+
if (res.status >= 400) {
|
|
109
|
+
throw new Error(`Encountered error ${res.status} when POSTing new user to ${this.baseUrl}/private/users`);
|
|
110
|
+
}
|
|
111
|
+
const resData = yield res.json();
|
|
112
|
+
return Object.assign(Object.assign({}, user), resData);
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
console.error(e);
|
|
116
|
+
throw e;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Add Roles to a user.
|
|
122
|
+
* Returns a list of current role ids of the user.
|
|
123
|
+
*
|
|
124
|
+
* @param {string} userId
|
|
125
|
+
* @param {string[]} roleIds
|
|
126
|
+
* @returns {Promise<string[]>}
|
|
127
|
+
* @memberof ApiClient
|
|
128
|
+
*/
|
|
129
|
+
addUserRoles(userId, roleIds) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/user/${userId}/roles`, this.getMergeRequestInitOption({
|
|
132
|
+
method: "POST",
|
|
133
|
+
headers: {
|
|
134
|
+
"Content-Type": "application/json"
|
|
135
|
+
},
|
|
136
|
+
body: JSON.stringify(roleIds)
|
|
137
|
+
}));
|
|
138
|
+
return yield this.processJsonResponse(res);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Remove a list roles from a user.
|
|
143
|
+
*
|
|
144
|
+
* @param {string} userId
|
|
145
|
+
* @param {string[]} roleIds
|
|
146
|
+
* @returns {Promise<void>}
|
|
147
|
+
* @memberof ApiClient
|
|
148
|
+
*/
|
|
149
|
+
deleteUserRoles(userId, roleIds) {
|
|
150
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
151
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/user/${userId}/roles`, this.getMergeRequestInitOption({
|
|
152
|
+
method: "DELETE",
|
|
153
|
+
headers: {
|
|
154
|
+
"Content-Type": "application/json"
|
|
155
|
+
},
|
|
156
|
+
body: JSON.stringify(roleIds)
|
|
157
|
+
}));
|
|
158
|
+
yield this.processJsonResponse(res);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get all roles of a user
|
|
163
|
+
*
|
|
164
|
+
* @param {string} userId
|
|
165
|
+
* @returns {Promise<Role[]>}
|
|
166
|
+
* @memberof ApiClient
|
|
167
|
+
*/
|
|
168
|
+
getUserRoles(userId) {
|
|
169
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
170
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/user/${userId}/roles`, this.getMergeRequestInitOption());
|
|
171
|
+
return yield this.processJsonResponse(res);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get all permissions of a user
|
|
176
|
+
*
|
|
177
|
+
* @param {string} userId
|
|
178
|
+
* @returns {Promise<Permission[]>}
|
|
179
|
+
* @memberof ApiClient
|
|
180
|
+
*/
|
|
181
|
+
getUserPermissions(userId) {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/user/${userId}/permissions`, this.getMergeRequestInitOption());
|
|
184
|
+
return yield this.processJsonResponse(res);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get all permissions of a role
|
|
189
|
+
*
|
|
190
|
+
* @param {string} roleId
|
|
191
|
+
* @returns {Promise<Permission[]>}
|
|
192
|
+
* @memberof ApiClient
|
|
193
|
+
*/
|
|
194
|
+
getRolePermissions(roleId) {
|
|
195
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/role/${roleId}/permissions`, this.getMergeRequestInitOption());
|
|
197
|
+
return yield this.processJsonResponse(res);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* List OrgUnits at certain org tree level.
|
|
202
|
+
* Optionally provide a test Org Unit Id that will be used to test the relationship with each of returned orgUnit item.
|
|
203
|
+
* Possible Value: 'ancestor', 'descendant', 'equal', 'unrelated'
|
|
204
|
+
*
|
|
205
|
+
* @param {string} orgLevel The level number (starts from 1) where org Units of the tree are taken horizontally.
|
|
206
|
+
* @param {string} [relationshipOrgUnitId] Optional; The org unit id that is used to test the relationship with each of returned orgUnit item.
|
|
207
|
+
* @returns {Promise<OrgUnit[]>}
|
|
208
|
+
* @memberof ApiClient
|
|
209
|
+
*/
|
|
210
|
+
getOrgUnitsByLevel(orgLevel, relationshipOrgUnitId) {
|
|
211
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
212
|
+
const uri = urijs_1.default(`${this.baseUrl}public/orgunits/bylevel`).segmentCoded(`${orgLevel}`);
|
|
213
|
+
const queries = {};
|
|
214
|
+
if (relationshipOrgUnitId) {
|
|
215
|
+
queries["relationshipOrgUnitId"] = relationshipOrgUnitId;
|
|
216
|
+
}
|
|
217
|
+
const res = yield isomorphic_fetch_1.default(Object.keys(queries).length
|
|
218
|
+
? uri.search(queries).toString()
|
|
219
|
+
: uri.toString(), this.getMergeRequestInitOption());
|
|
220
|
+
return yield this.processJsonResponse(res);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get orgunits by name
|
|
225
|
+
*
|
|
226
|
+
* @param {string} nodeName
|
|
227
|
+
* @param {boolean} [leafNodesOnly=false] Whether only leaf nodes should be returned
|
|
228
|
+
* @param {string} [relationshipOrgUnitId] Optional; The org unit id that is used to test the relationship with each of returned orgUnit item.
|
|
229
|
+
* @returns {Promise<OrgUnit[]>}
|
|
230
|
+
* @memberof ApiClient
|
|
231
|
+
*/
|
|
232
|
+
getOrgUnitsByName(nodeName, leafNodesOnly = false, relationshipOrgUnitId) {
|
|
233
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
const uri = urijs_1.default(`${this.baseUrl}public/orgunits`);
|
|
235
|
+
const queries = {
|
|
236
|
+
nodeName,
|
|
237
|
+
leafNodesOnly
|
|
238
|
+
};
|
|
239
|
+
if (relationshipOrgUnitId) {
|
|
240
|
+
queries["relationshipOrgUnitId"] = relationshipOrgUnitId;
|
|
241
|
+
}
|
|
242
|
+
const res = yield isomorphic_fetch_1.default(uri.search(queries).toString(), this.getMergeRequestInitOption());
|
|
243
|
+
return yield this.processJsonResponse(res);
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Gets the root organisation unit (top of the tree).
|
|
248
|
+
*
|
|
249
|
+
* @returns {Promise<OrgUnit>}
|
|
250
|
+
* @memberof ApiClient
|
|
251
|
+
*/
|
|
252
|
+
getRootOrgUnit() {
|
|
253
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
254
|
+
const res = yield isomorphic_fetch_1.default(`${this.baseUrl}public/orgunits/root`, this.getMergeRequestInitOption());
|
|
255
|
+
return yield this.processJsonResponse(res);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Gets the details of the node with its id.
|
|
260
|
+
*
|
|
261
|
+
* @param {string} nodeId
|
|
262
|
+
* @returns {Promise<OrgUnit>}
|
|
263
|
+
* @memberof ApiClient
|
|
264
|
+
*/
|
|
265
|
+
getOrgUnitById(nodeId) {
|
|
266
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
+
const uri = urijs_1.default(`${this.baseUrl}public/orgunits`).segmentCoded(nodeId);
|
|
268
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption());
|
|
269
|
+
return yield this.processJsonResponse(res);
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Gets all the children immediately below the requested node. If the node doesn't exist, returns an empty list.
|
|
274
|
+
*
|
|
275
|
+
* @param {string} nodeId
|
|
276
|
+
* @returns {Promise<OrgUnit[]>}
|
|
277
|
+
* @memberof ApiClient
|
|
278
|
+
*/
|
|
279
|
+
getImmediateOrgUnitChildren(nodeId) {
|
|
280
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
281
|
+
const uri = urijs_1.default(`${this.baseUrl}public/orgunits`)
|
|
282
|
+
.segmentCoded(nodeId)
|
|
283
|
+
.segmentCoded("children")
|
|
284
|
+
.segmentCoded("immediate");
|
|
285
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption());
|
|
286
|
+
return yield this.processJsonResponse(res);
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Gets all the children below the requested node recursively. If node doesn't exist, returns an empty list.
|
|
291
|
+
*
|
|
292
|
+
* @param {string} nodeId
|
|
293
|
+
* @returns {Promise<OrgUnit[]>}
|
|
294
|
+
* @memberof ApiClient
|
|
295
|
+
*/
|
|
296
|
+
getAllOrgUnitChildren(nodeId) {
|
|
297
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
298
|
+
const uri = urijs_1.default(`${this.baseUrl}public/orgunits`)
|
|
299
|
+
.segmentCoded(nodeId)
|
|
300
|
+
.segmentCoded("children")
|
|
301
|
+
.segmentCoded("all");
|
|
302
|
+
const res = yield isomorphic_fetch_1.default(uri.toString(), this.getMergeRequestInitOption());
|
|
303
|
+
return yield this.processJsonResponse(res);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
handleGetResult(promise) {
|
|
307
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
308
|
+
return promise
|
|
309
|
+
.then((res) => {
|
|
310
|
+
if (res.status === 404) {
|
|
311
|
+
return Promise.resolve(tsmonad_1.Maybe.nothing());
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
return res
|
|
315
|
+
.text()
|
|
316
|
+
.then((resText) => {
|
|
317
|
+
try {
|
|
318
|
+
return JSON.parse(resText);
|
|
319
|
+
}
|
|
320
|
+
catch (e) {
|
|
321
|
+
throw new Error(resText);
|
|
322
|
+
}
|
|
323
|
+
})
|
|
324
|
+
.then((user) => tsmonad_1.Maybe.just(user));
|
|
325
|
+
}
|
|
326
|
+
})
|
|
327
|
+
.catch((e) => {
|
|
328
|
+
console.error(e);
|
|
329
|
+
throw e;
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
exports.default = ApiClient;
|
|
335
|
+
//# sourceMappingURL=ApiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../src/authorization-api/ApiClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,wEAAqC;AAErC,qCAAgC;AAChC,oDAA4B;AAC5B,mEAA2C;AAC3C,kEAA0C;AAC1C,2EAAmD;AACnD,kDAA0B;AAG1B,MAAqB,SAAS;IAK1B;IACI,mCAAmC;IACnC,OAAe,EACf,YAAoB,IAAI,EACxB,SAAiB,IAAI;QARjB,QAAG,GAAW,IAAI,CAAC;QACnB,sBAAiB,GAAgB,IAAI,CAAC;QACtC,YAAO,GAAW,EAAE,CAAC;QAQzB,IAAI,CAAC,OAAO,GAAG,0BAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,SAAS,IAAI,MAAM,EAAE;YACrB,IAAI,CAAC,GAAG,GAAG,kBAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,iBAAiB,GAAG;YACrB,OAAO,EAAE;gBACL,iBAAiB,EAAE,IAAI,CAAC,GAAG;aAC9B;SACJ,CAAC;IACN,CAAC;IAED,yBAAyB,CAAC,eAA4B,IAAI;QACtD,OAAO,gBAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAEK,mBAAmB,CAAU,GAAa;;YAC5C,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBACvC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;aAClC;iBAAM;gBACH,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBACnE,MAAM,IAAI,sBAAY,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;aACpD;QACL,CAAC;KAAA;IAED;;;;;;OAMG;IACG,OAAO,CAAC,MAAc;;YACxB,OAAO,MAAM,IAAI,CAAC,eAAe,CAC7B,0BAAK,CACD,GAAG,IAAI,CAAC,OAAO,iBAAiB,MAAM,EAAE,EACxC,IAAI,CAAC,yBAAyB,EAAE,CACnC,CACJ,CAAC;QACN,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,aAAa,CACf,MAAc;;YAEd,OAAO,MAAM,IAAI,CAAC,eAAe,CAC7B,0BAAK,CACD,GAAG,IAAI,CAAC,OAAO,gBAAgB,MAAM,EAAE,EACvC,IAAI,CAAC,yBAAyB,EAAE,CACnC,CACJ,CAAC;QACN,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,UAAU,CACZ,MAAc,EACd,QAAgB;;YAEhB,OAAO,IAAI,CAAC,eAAe,CACvB,0BAAK,CACD,GAAG,IAAI,CAAC,OAAO,+BAA+B,MAAM,aAAa,QAAQ,EAAE,EAC3E,IAAI,CAAC,yBAAyB,EAAE,CACnC,CACJ,CAAC;QACN,CAAC;KAAA;IAED;;;;;;OAMG;IACG,UAAU,CAAC,IAAU;;YACvB,IAAI;gBACA,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,eAAe,EAC9B,IAAI,CAAC,yBAAyB,CAAC;oBAC3B,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACL,cAAc,EAAE,kBAAkB;qBACrC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iBAC7B,CAAC,CACL,CAAC;gBACF,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;oBACnB,MAAM,IAAI,KAAK,CACX,qBAAqB,GAAG,CAAC,MAAM,6BAA6B,IAAI,CAAC,OAAO,gBAAgB,CAC3F,CAAC;iBACL;gBACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjC,uCAAY,IAAI,GAAK,OAAO,EAAG;aAClC;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC,CAAC;aACX;QACL,CAAC;KAAA;IAED;;;;;;;;OAQG;IACG,YAAY,CAAC,MAAc,EAAE,OAAiB;;YAChD,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,eAAe,MAAM,QAAQ,EAC5C,IAAI,CAAC,yBAAyB,CAAC;gBAC3B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAChC,CAAC,CACL,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAW,GAAG,CAAC,CAAC;QACzD,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,eAAe,CAAC,MAAc,EAAE,OAAiB;;YACnD,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,eAAe,MAAM,QAAQ,EAC5C,IAAI,CAAC,yBAAyB,CAAC;gBAC3B,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAChC,CAAC,CACL,CAAC;YACF,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;KAAA;IAED;;;;;;OAMG;IACG,YAAY,CAAC,MAAc;;YAC7B,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,eAAe,MAAM,QAAQ,EAC5C,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAS,GAAG,CAAC,CAAC;QACvD,CAAC;KAAA;IAED;;;;;;OAMG;IACG,kBAAkB,CAAC,MAAc;;YACnC,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,eAAe,MAAM,cAAc,EAClD,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAe,GAAG,CAAC,CAAC;QAC7D,CAAC;KAAA;IAED;;;;;;OAMG;IACG,kBAAkB,CAAC,MAAc;;YACnC,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,eAAe,MAAM,cAAc,EAClD,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAe,GAAG,CAAC,CAAC;QAC7D,CAAC;KAAA;IAED;;;;;;;;;OASG;IACG,kBAAkB,CACpB,QAAgB,EAChB,qBAA8B;;YAE9B,MAAM,GAAG,GAAG,eAAK,CACb,GAAG,IAAI,CAAC,OAAO,yBAAyB,CAC3C,CAAC,YAAY,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;YAE9B,MAAM,OAAO,GAAG,EAAS,CAAC;YAC1B,IAAI,qBAAqB,EAAE;gBACvB,OAAO,CAAC,uBAAuB,CAAC,GAAG,qBAAqB,CAAC;aAC5D;YAED,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;gBACvB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;gBAChC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EACpB,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAY,GAAG,CAAC,CAAC;QAC1D,CAAC;KAAA;IAED;;;;;;;;OAQG;IACG,iBAAiB,CACnB,QAAgB,EAChB,gBAAyB,KAAK,EAC9B,qBAA8B;;YAE9B,MAAM,GAAG,GAAG,eAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAC;YAEpD,MAAM,OAAO,GAAG;gBACZ,QAAQ;gBACR,aAAa;aACT,CAAC;YACT,IAAI,qBAAqB,EAAE;gBACvB,OAAO,CAAC,uBAAuB,CAAC,GAAG,qBAAqB,CAAC;aAC5D;YAED,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAC9B,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAY,GAAG,CAAC,CAAC;QAC1D,CAAC;KAAA;IAED;;;;;OAKG;IACG,cAAc;;YAChB,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,IAAI,CAAC,OAAO,sBAAsB,EACrC,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAU,GAAG,CAAC,CAAC;QACxD,CAAC;KAAA;IAED;;;;;;OAMG;IACG,cAAc,CAAC,MAAc;;YAC/B,MAAM,GAAG,GAAG,eAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAC,YAAY,CAC5D,MAAM,CACT,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,CAAC,QAAQ,EAAE,EACd,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAU,GAAG,CAAC,CAAC;QACxD,CAAC;KAAA;IAED;;;;;;OAMG;IACG,2BAA2B,CAAC,MAAc;;YAC5C,MAAM,GAAG,GAAG,eAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,CAAC;iBAC9C,YAAY,CAAC,MAAM,CAAC;iBACpB,YAAY,CAAC,UAAU,CAAC;iBACxB,YAAY,CAAC,WAAW,CAAC,CAAC;YAE/B,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,CAAC,QAAQ,EAAE,EACd,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAY,GAAG,CAAC,CAAC;QAC1D,CAAC;KAAA;IAED;;;;;;OAMG;IACG,qBAAqB,CAAC,MAAc;;YACtC,MAAM,GAAG,GAAG,eAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,CAAC;iBAC9C,YAAY,CAAC,MAAM,CAAC;iBACpB,YAAY,CAAC,UAAU,CAAC;iBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YAEzB,MAAM,GAAG,GAAG,MAAM,0BAAK,CACnB,GAAG,CAAC,QAAQ,EAAE,EACd,IAAI,CAAC,yBAAyB,EAAE,CACnC,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAY,GAAG,CAAC,CAAC;QAC1D,CAAC;KAAA;IAEa,eAAe,CACzB,OAA0B;;YAE1B,OAAO,OAAO;iBACT,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACV,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;oBACpB,OAAO,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,OAAO,EAAQ,CAAC,CAAC;iBACjD;qBAAM;oBACH,OAAO,GAAG;yBACL,IAAI,EAAE;yBACN,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;wBACd,IAAI;4BACA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;yBAC9B;wBAAC,OAAO,CAAC,EAAE;4BACR,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;yBAC5B;oBACL,CAAC,CAAC;yBACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;QACX,CAAC;KAAA;CACJ;AArXD,4BAqXC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const GenericError_1 = __importDefault(require("./GenericError"));
|
|
7
|
+
class AuthError extends GenericError_1.default {
|
|
8
|
+
constructor(message = "Not authorized", statusCode = 401) {
|
|
9
|
+
super(message, statusCode);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.default = AuthError;
|
|
13
|
+
//# sourceMappingURL=AuthError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthError.js","sourceRoot":"","sources":["../../src/authorization-api/AuthError.ts"],"names":[],"mappings":";;;;;AAAA,kEAA0C;AAC1C,MAAqB,SAAU,SAAQ,sBAAY;IAC/C,YAAY,UAAkB,gBAAgB,EAAE,aAAqB,GAAG;QACpE,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;CACJ;AAJD,4BAIC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class GenericError extends Error {
|
|
4
|
+
constructor(message = "Unknown Error", statusCode = 500) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.statusCode = statusCode;
|
|
7
|
+
}
|
|
8
|
+
toData() {
|
|
9
|
+
return {
|
|
10
|
+
isError: true,
|
|
11
|
+
errorCode: this.statusCode,
|
|
12
|
+
errorMessage: this.message
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.default = GenericError;
|
|
17
|
+
//# sourceMappingURL=GenericError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericError.js","sourceRoot":"","sources":["../../src/authorization-api/GenericError.ts"],"names":[],"mappings":";;AAAA,MAAqB,YAAa,SAAQ,KAAK;IAG3C,YAAY,UAAkB,eAAe,EAAE,aAAqB,GAAG;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,MAAM;QACF,OAAO;YACH,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,YAAY,EAAE,IAAI,CAAC,OAAO;SAC7B,CAAC;IACN,CAAC;CACJ;AAfD,+BAeC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Request, Response } from "express";
|
|
2
|
+
export declare const mustBeLoggedIn: (jwtSecret: string) => (this: any, req: Request, res: Response, next: () => void) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Find the user making the request. Assign it to req passport style.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getUser: (baseAuthUrl: string, jwtSecret: string) => (req: Request, res: Response, next: () => void) => void;
|
|
7
|
+
export declare const mustBeAdmin: (baseAuthUrl: string, jwtSecret: string) => (req: Request, res: Response, next: () => void) => void;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.mustBeAdmin = exports.getUser = exports.mustBeLoggedIn = void 0;
|
|
7
|
+
const GetUserId_1 = require("../session/GetUserId");
|
|
8
|
+
const ApiClient_1 = __importDefault(require("./ApiClient"));
|
|
9
|
+
exports.mustBeLoggedIn = (jwtSecret) => function (req, res, next) {
|
|
10
|
+
GetUserId_1.getUserIdHandling(req, res, jwtSecret, (userId) => {
|
|
11
|
+
this.userId = userId;
|
|
12
|
+
next();
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Find the user making the request. Assign it to req passport style.
|
|
17
|
+
*/
|
|
18
|
+
exports.getUser = (baseAuthUrl, jwtSecret) => (req, res, next) => {
|
|
19
|
+
GetUserId_1.getUserId(req, jwtSecret).caseOf({
|
|
20
|
+
just: (userId) => {
|
|
21
|
+
const apiClient = new ApiClient_1.default(baseAuthUrl, jwtSecret, userId);
|
|
22
|
+
apiClient
|
|
23
|
+
.getUser(userId)
|
|
24
|
+
.then((maybeUser) => {
|
|
25
|
+
maybeUser.caseOf({
|
|
26
|
+
just: (user) => {
|
|
27
|
+
req.user = Object.assign(Object.assign({}, (req.user ? req.user : {})), user);
|
|
28
|
+
next();
|
|
29
|
+
},
|
|
30
|
+
nothing: next
|
|
31
|
+
});
|
|
32
|
+
})
|
|
33
|
+
.catch(() => next());
|
|
34
|
+
},
|
|
35
|
+
nothing: next
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
exports.mustBeAdmin = (baseAuthUrl, jwtSecret) => {
|
|
39
|
+
const getUserInstance = exports.getUser(baseAuthUrl, jwtSecret);
|
|
40
|
+
return (req, res, next) => {
|
|
41
|
+
getUserInstance(req, res, () => {
|
|
42
|
+
if (req.user && req.user.isAdmin) {
|
|
43
|
+
next();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.warn("Rejecting because user is not an admin");
|
|
47
|
+
res.status(401).send("Not authorized.");
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=authMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/authorization-api/authMiddleware.ts"],"names":[],"mappings":";;;;;;AACA,oDAAoE;AACpE,4DAAoC;AAEvB,QAAA,cAAc,GAAG,CAAC,SAAiB,EAAE,EAAE,CAChD,UAAqB,GAAY,EAAE,GAAa,EAAE,IAAgB;IAC9D,6BAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEN;;GAEG;AACU,QAAA,OAAO,GAAG,CAAC,WAAmB,EAAE,SAAiB,EAAE,EAAE,CAAC,CAC/D,GAAY,EACZ,GAAa,EACb,IAAgB,EAClB,EAAE;IACA,qBAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC;QAC7B,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YACb,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAChE,SAAS;iBACJ,OAAO,CAAC,MAAM,CAAC;iBACf,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBAChB,SAAS,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;wBACX,GAAG,CAAC,IAAI,mCAID,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAC1B,IAAI,CACV,CAAC;wBACF,IAAI,EAAE,CAAC;oBACX,CAAC;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC,CAAC;YACP,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,EAAE,IAAI;KAChB,CAAC,CAAC;AACP,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG,CAAC,WAAmB,EAAE,SAAiB,EAAE,EAAE;IAClE,MAAM,eAAe,GAAG,eAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAgB,EAAE,EAAE;QACrD,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YAC3B,IAAI,GAAG,CAAC,IAAI,IAAK,GAAG,CAAC,IAAY,CAAC,OAAO,EAAE;gBACvC,IAAI,EAAE,CAAC;aACV;iBAAM;gBACH,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACvD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;aAC3C;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
namespace Express {
|
|
3
|
+
/**
|
|
4
|
+
* This defines magda session data type.
|
|
5
|
+
* the default session data type is `UserToken` (i.e. only user id field is available and is a compulsory field)
|
|
6
|
+
* But any auth plugin provider could choose to customise the session by adding more fields (e.g. `arcgis`).
|
|
7
|
+
* We also make sure it allows extra fields here.
|
|
8
|
+
*/
|
|
9
|
+
interface User extends UserToken {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export interface PublicUser {
|
|
15
|
+
id?: string;
|
|
16
|
+
displayName: string;
|
|
17
|
+
photoURL?: string;
|
|
18
|
+
isAdmin: boolean;
|
|
19
|
+
roles?: Role[];
|
|
20
|
+
permissions?: Permission[];
|
|
21
|
+
managingOrgUnitIds?: string[];
|
|
22
|
+
orgUnitId?: string;
|
|
23
|
+
orgUnit?: OrgUnit;
|
|
24
|
+
}
|
|
25
|
+
export declare type OrgUnitRelationshipType = "ancestor" | "descendant" | "equal" | "unrelated";
|
|
26
|
+
export interface OrgUnit {
|
|
27
|
+
id?: string;
|
|
28
|
+
name?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
relationship?: OrgUnitRelationshipType;
|
|
31
|
+
left?: number;
|
|
32
|
+
right?: number;
|
|
33
|
+
createBy?: string;
|
|
34
|
+
createTime?: Date;
|
|
35
|
+
editBy?: string;
|
|
36
|
+
editTime?: Date;
|
|
37
|
+
}
|
|
38
|
+
export interface User extends PublicUser {
|
|
39
|
+
email: string;
|
|
40
|
+
source: string;
|
|
41
|
+
sourceId: string;
|
|
42
|
+
}
|
|
43
|
+
export interface APIKeyRecord {
|
|
44
|
+
id: string;
|
|
45
|
+
user_id: string;
|
|
46
|
+
created_timestamp: string;
|
|
47
|
+
hash: string;
|
|
48
|
+
}
|
|
49
|
+
export interface Role {
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
permissionIds: string[];
|
|
53
|
+
description?: string;
|
|
54
|
+
createBy?: string;
|
|
55
|
+
createTime?: Date;
|
|
56
|
+
editBy?: string;
|
|
57
|
+
editTime?: Date;
|
|
58
|
+
}
|
|
59
|
+
export interface Operation {
|
|
60
|
+
id: string;
|
|
61
|
+
uri: string;
|
|
62
|
+
name: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface Permission {
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
resourceId: string;
|
|
70
|
+
resourceUri: string;
|
|
71
|
+
userOwnershipConstraint: boolean;
|
|
72
|
+
orgUnitOwnershipConstraint: boolean;
|
|
73
|
+
preAuthorisedConstraint: boolean;
|
|
74
|
+
operations: Operation[];
|
|
75
|
+
createBy?: string;
|
|
76
|
+
createTime?: Date;
|
|
77
|
+
editBy?: string;
|
|
78
|
+
editTime?: Date;
|
|
79
|
+
}
|
|
80
|
+
export interface UserToken {
|
|
81
|
+
id: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* This is the metadata model used by Opa policy
|
|
85
|
+
* You only need this when you try to figure out user characteristic (unknown) via Known information of a dataset.
|
|
86
|
+
* i.e. set `input.user` to unknown then calculate residual rules via partial evaluation.
|
|
87
|
+
*/
|
|
88
|
+
export interface DatasetAccessControlMetaData {
|
|
89
|
+
/**
|
|
90
|
+
* We do allow "archived" as defined in `publishing.schema.json`
|
|
91
|
+
* But we probably should avoid using it as there is no story behinds it.
|
|
92
|
+
*/
|
|
93
|
+
publishingState: "draft" | "published" | "archived";
|
|
94
|
+
accessControl?: {
|
|
95
|
+
ownerId?: string;
|
|
96
|
+
orgUnitOwnerId?: string;
|
|
97
|
+
preAuthorisedPermissionIds?: string[];
|
|
98
|
+
};
|
|
99
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/authorization-api/model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = (param) => (json) => {
|
|
4
|
+
if (typeof json !== "string") {
|
|
5
|
+
return json;
|
|
6
|
+
}
|
|
7
|
+
const data = JSON.parse(json);
|
|
8
|
+
if (!data || typeof data !== "object") {
|
|
9
|
+
throw new Error(`Invalid "${param}" parameter.`);
|
|
10
|
+
}
|
|
11
|
+
return data;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=coerceJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerceJson.js","sourceRoot":"","sources":["../src/coerceJson.ts"],"names":[],"mappings":";;AAAA,kBAAe,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,IAA8B,EAAE,EAAE;IACjE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,CAAC,CAAC;KACpD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ApiError } from "./generated/registry/api";
|
|
2
|
+
export declare class ServiceError extends Error {
|
|
3
|
+
e: any;
|
|
4
|
+
constructor(message: string, e: any);
|
|
5
|
+
}
|
|
6
|
+
export declare class BadRequestError extends ServiceError {
|
|
7
|
+
constructor(statusCode: number, errorResponse: ApiError, e: any);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a {@link ServiceError} from the result of a failed call to an API generated
|
|
11
|
+
* by swagger-codegen. The result typically includes `response` (with a status code) and
|
|
12
|
+
* a `body` (the JSON the server returned with the error), but may be other things if,
|
|
13
|
+
* e.g., an exception occurred while attempting to invoke the service.
|
|
14
|
+
*
|
|
15
|
+
* @export
|
|
16
|
+
* @param {*} e The result of the failed call.
|
|
17
|
+
* @returns {Error} An Error created from the failed result.
|
|
18
|
+
*/
|
|
19
|
+
export default function createServiceError(e: any): Error;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BadRequestError = exports.ServiceError = void 0;
|
|
4
|
+
class ServiceError extends Error {
|
|
5
|
+
constructor(message, e) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.e = e;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.ServiceError = ServiceError;
|
|
11
|
+
class BadRequestError extends ServiceError {
|
|
12
|
+
constructor(statusCode, errorResponse, e) {
|
|
13
|
+
super(`Status code: ${statusCode}, body:\n${JSON.stringify(errorResponse, null, " ")}`, e);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.BadRequestError = BadRequestError;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a {@link ServiceError} from the result of a failed call to an API generated
|
|
19
|
+
* by swagger-codegen. The result typically includes `response` (with a status code) and
|
|
20
|
+
* a `body` (the JSON the server returned with the error), but may be other things if,
|
|
21
|
+
* e.g., an exception occurred while attempting to invoke the service.
|
|
22
|
+
*
|
|
23
|
+
* @export
|
|
24
|
+
* @param {*} e The result of the failed call.
|
|
25
|
+
* @returns {Error} An Error created from the failed result.
|
|
26
|
+
*/
|
|
27
|
+
function createServiceError(e) {
|
|
28
|
+
if (e && e.response && e.response.statusCode && e.body) {
|
|
29
|
+
return new BadRequestError(e.response.statusCode, e.body, e);
|
|
30
|
+
}
|
|
31
|
+
else if (e && e instanceof Error) {
|
|
32
|
+
return e;
|
|
33
|
+
}
|
|
34
|
+
else if (e && e.toString() !== {}.toString()) {
|
|
35
|
+
return new ServiceError(e.toString(), e);
|
|
36
|
+
}
|
|
37
|
+
else if (e) {
|
|
38
|
+
return new ServiceError(`${JSON.stringify(e, null, " ")}`, e);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return new ServiceError("An undefined service error occurred.", undefined);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.default = createServiceError;
|
|
45
|
+
//# sourceMappingURL=createServiceError.js.map
|