@icure/api 8.3.5 → 8.4.0
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/icc-api/api/IccAuthApi.d.ts +10 -1
- package/icc-api/api/IccAuthApi.js +20 -3
- package/icc-api/api/IccAuthApi.js.map +1 -1
- package/icc-api/api/IccClassificationApi.d.ts +1 -0
- package/icc-api/api/IccClassificationApi.js +12 -0
- package/icc-api/api/IccClassificationApi.js.map +1 -1
- package/icc-api/api/IccMessageApi.d.ts +0 -6
- package/icc-api/api/IccMessageApi.js +0 -15
- package/icc-api/api/IccMessageApi.js.map +1 -1
- package/icc-x-api/auth/SmartAuthProvider.d.ts +37 -13
- package/icc-x-api/auth/SmartAuthProvider.js +105 -29
- package/icc-x-api/auth/SmartAuthProvider.js.map +1 -1
- package/icc-x-api/icc-bekmehr-x-api.js +2 -1
- package/icc-x-api/icc-bekmehr-x-api.js.map +1 -1
- package/icc-x-api/icc-document-x-api.d.ts +51 -6
- package/icc-x-api/icc-document-x-api.js +231 -69
- package/icc-x-api/icc-document-x-api.js.map +1 -1
- package/icc-x-api/icc-message-x-api.d.ts +45 -6
- package/icc-x-api/icc-message-x-api.js +202 -30
- package/icc-x-api/icc-message-x-api.js.map +1 -1
- package/icc-x-api/icc-patient-x-api.d.ts +9 -1
- package/icc-x-api/icc-patient-x-api.js +92 -100
- package/icc-x-api/icc-patient-x-api.js.map +1 -1
- package/icc-x-api/index.d.ts +14 -14
- package/icc-x-api/index.js +5 -4
- package/icc-x-api/index.js.map +1 -1
- package/package.json +1 -1
- package/test/icc-api/api/IccDocumentApi.js +27 -35
- package/test/icc-api/api/IccDocumentApi.js.map +1 -1
- package/test/icc-x-api/auth/group-switch-test.js +5 -5
- package/test/icc-x-api/auth/group-switch-test.js.map +1 -1
- package/test/icc-x-api/auth/jwt-provider-test.js +1 -1
- package/test/icc-x-api/auth/jwt-provider-test.js.map +1 -1
- package/test/icc-x-api/auth/smart-auth-provider-test.js +5 -5
- package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -1
- package/test/icc-x-api/icc-document-x-api.js +28 -4
- package/test/icc-x-api/icc-document-x-api.js.map +1 -1
- package/test/icc-x-api/icc-message-x-api.js +19 -293
- package/test/icc-x-api/icc-message-x-api.js.map +1 -1
- package/test/icc-x-api/icc-user-x-api-test.js +1 -1
- package/test/icc-x-api/icc-user-x-api-test.js.map +1 -1
- package/test/utils/test_utils.d.ts +4 -2
- package/test/utils/test_utils.js +4 -3
- package/test/utils/test_utils.js.map +1 -1
|
@@ -14,7 +14,6 @@ const chai_1 = require("chai");
|
|
|
14
14
|
const crypto_1 = require("crypto");
|
|
15
15
|
const test_utils_1 = require("../../utils/test_utils");
|
|
16
16
|
var initApi = test_utils_1.TestUtils.initApi;
|
|
17
|
-
const Delegation_1 = require("../../../icc-api/model/Delegation");
|
|
18
17
|
const types_1 = require("@icure/test-setup/types");
|
|
19
18
|
require("isomorphic-fetch");
|
|
20
19
|
(0, test_utils_1.setLocalStorage)(fetch);
|
|
@@ -54,6 +53,7 @@ function assertRequestFails(request, status) {
|
|
|
54
53
|
let env;
|
|
55
54
|
let documentApi;
|
|
56
55
|
let dataOwnerId;
|
|
56
|
+
let user;
|
|
57
57
|
describe('Document api', () => {
|
|
58
58
|
before(function () {
|
|
59
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -63,29 +63,21 @@ describe('Document api', () => {
|
|
|
63
63
|
const api = yield initApi(env, test_utils_1.hcp1Username);
|
|
64
64
|
documentApi = api.documentApi;
|
|
65
65
|
dataOwnerId = yield api.dataOwnerApi.getCurrentDataOwnerId();
|
|
66
|
+
user = yield api.userApi.getCurrentUser();
|
|
66
67
|
});
|
|
67
68
|
});
|
|
68
69
|
function createDocument() {
|
|
69
70
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
return yield documentApi.
|
|
71
|
+
return yield documentApi.createDocumentWithUser(undefined, yield documentApi.newInstance(user, undefined, new Document_1.Document({
|
|
71
72
|
id: (0, crypto_1.randomUUID)(),
|
|
72
|
-
|
|
73
|
-
[dataOwnerId]: [
|
|
74
|
-
new Delegation_1.Delegation({
|
|
75
|
-
owner: dataOwnerId,
|
|
76
|
-
delegatedTo: dataOwnerId,
|
|
77
|
-
key: 'fakekey',
|
|
78
|
-
}),
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
|
-
}));
|
|
73
|
+
})));
|
|
82
74
|
});
|
|
83
75
|
}
|
|
84
76
|
it('should allow to create and retrieve main attachments', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
85
77
|
const document = yield createDocument();
|
|
86
78
|
const data = (0, crypto_1.randomBytes)(32);
|
|
87
79
|
(0, chai_1.expect)(document.rev).to.not.be.undefined;
|
|
88
|
-
const updated = yield documentApi.
|
|
80
|
+
const updated = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, document.rev, data);
|
|
89
81
|
(0, chai_1.expect)(updated).to.not.be.undefined;
|
|
90
82
|
const retrievedData = yield documentApi.getMainDocumentAttachment(document.id);
|
|
91
83
|
(0, chai_1.assert)(bufferEquals(retrievedData, data));
|
|
@@ -94,11 +86,11 @@ describe('Document api', () => {
|
|
|
94
86
|
const document = yield createDocument();
|
|
95
87
|
const data1 = (0, crypto_1.randomBytes)(32);
|
|
96
88
|
const data2 = (0, crypto_1.randomBytes)(32);
|
|
97
|
-
const updated = yield documentApi.
|
|
89
|
+
const updated = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, document.rev, data1, sampleUti);
|
|
98
90
|
(0, chai_1.expect)(updated.mainUti).to.equal(sampleUti[0]);
|
|
99
91
|
(0, chai_1.assert)(arrayEquals(updated.otherUtis, sampleUti.slice(1)));
|
|
100
92
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), data1));
|
|
101
|
-
const updated2 = yield documentApi.
|
|
93
|
+
const updated2 = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, updated.rev, data2);
|
|
102
94
|
(0, chai_1.expect)(updated2.mainUti).to.equal(sampleUti[0]);
|
|
103
95
|
(0, chai_1.assert)(arrayEquals(updated2.otherUtis, sampleUti.slice(1)));
|
|
104
96
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), data2));
|
|
@@ -107,17 +99,17 @@ describe('Document api', () => {
|
|
|
107
99
|
var _a;
|
|
108
100
|
const document = yield createDocument();
|
|
109
101
|
const data = (0, crypto_1.randomBytes)(32);
|
|
110
|
-
const updated = yield documentApi.
|
|
102
|
+
const updated = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, document.rev, data, []);
|
|
111
103
|
(0, chai_1.expect)(updated.mainUti).to.be.undefined;
|
|
112
104
|
(0, chai_1.expect)((_a = updated.otherUtis) !== null && _a !== void 0 ? _a : []).to.be.empty;
|
|
113
|
-
const updated2 = yield documentApi.
|
|
105
|
+
const updated2 = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, updated.rev, data, sampleUti);
|
|
114
106
|
(0, chai_1.expect)(updated2.mainUti).to.equal(sampleUti[0]);
|
|
115
107
|
(0, chai_1.assert)(arrayEquals(updated2.otherUtis, sampleUti.slice(1)));
|
|
116
108
|
}));
|
|
117
109
|
it('should allow to create and retrieve secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
110
|
const document = yield createDocument();
|
|
119
111
|
const data = (0, crypto_1.randomBytes)(32);
|
|
120
|
-
const updated = yield documentApi.
|
|
112
|
+
const updated = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data);
|
|
121
113
|
(0, chai_1.expect)(updated.secondaryAttachments).to.contain.keys([sampleKey]);
|
|
122
114
|
(0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, []));
|
|
123
115
|
const retrievedData = yield documentApi.getSecondaryAttachment(document.id, sampleKey);
|
|
@@ -126,35 +118,35 @@ describe('Document api', () => {
|
|
|
126
118
|
it('should allow to initialise utis in secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
127
119
|
const document = yield createDocument();
|
|
128
120
|
const data = (0, crypto_1.randomBytes)(32);
|
|
129
|
-
const updated = yield documentApi.
|
|
121
|
+
const updated = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data, sampleUti);
|
|
130
122
|
(0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, sampleUti));
|
|
131
123
|
}));
|
|
132
124
|
it('should allow to update secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
125
|
const document = yield createDocument();
|
|
134
126
|
const data1 = (0, crypto_1.randomBytes)(32);
|
|
135
127
|
const data2 = (0, crypto_1.randomBytes)(32);
|
|
136
|
-
const updated = yield documentApi.
|
|
128
|
+
const updated = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data1, sampleUti);
|
|
137
129
|
(0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, sampleUti));
|
|
138
130
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data1));
|
|
139
|
-
const updated2 = yield documentApi.
|
|
131
|
+
const updated2 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, updated.rev, data2);
|
|
140
132
|
(0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, sampleUti));
|
|
141
133
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data2));
|
|
142
134
|
}));
|
|
143
135
|
it('should allow to update utis in secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
144
136
|
const document = yield createDocument();
|
|
145
137
|
const data = (0, crypto_1.randomBytes)(32);
|
|
146
|
-
const updated = yield documentApi.
|
|
138
|
+
const updated = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data);
|
|
147
139
|
(0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, []));
|
|
148
|
-
const updated2 = yield documentApi.
|
|
140
|
+
const updated2 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, updated.rev, data, sampleUti);
|
|
149
141
|
(0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, sampleUti));
|
|
150
142
|
}));
|
|
151
143
|
it('should allow to delete secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
152
144
|
const document = yield createDocument();
|
|
153
145
|
const data = (0, crypto_1.randomBytes)(32);
|
|
154
|
-
const updated = yield documentApi.
|
|
146
|
+
const updated = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data);
|
|
155
147
|
const originalAttachment = updated.secondaryAttachments[sampleKey];
|
|
156
148
|
const timeBeforeDelete = Date.now() - 100;
|
|
157
|
-
const deleted = yield documentApi.
|
|
149
|
+
const deleted = yield documentApi.deleteSecondaryAttachmentWithUser(undefined, document.id, sampleKey, updated.rev);
|
|
158
150
|
const timeAfterDelete = Date.now() + 100;
|
|
159
151
|
(0, chai_1.expect)(deleted.deletedAttachments).to.have.length(1);
|
|
160
152
|
const deletedAttachment = deleted.deletedAttachments[0];
|
|
@@ -170,21 +162,21 @@ describe('Document api', () => {
|
|
|
170
162
|
const data2 = (0, crypto_1.randomBytes)(32);
|
|
171
163
|
const data3 = (0, crypto_1.randomBytes)(32);
|
|
172
164
|
(0, chai_1.assert)(!bufferEquals(data1, data2));
|
|
173
|
-
const updated1 = yield documentApi.
|
|
174
|
-
const updated2 = yield documentApi.
|
|
165
|
+
const updated1 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data1);
|
|
166
|
+
const updated2 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey2, updated1.rev, data2, sampleUti);
|
|
175
167
|
(0, chai_1.expect)(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2]);
|
|
176
168
|
(0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, []));
|
|
177
169
|
(0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey2].utis, sampleUti));
|
|
178
170
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data1));
|
|
179
171
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), data2));
|
|
180
|
-
const updated3 = yield documentApi.
|
|
172
|
+
const updated3 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, updated2.rev, data3, sampleUti2);
|
|
181
173
|
(0, chai_1.expect)(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2]);
|
|
182
174
|
(0, chai_1.assert)(arrayEquals(updated3.secondaryAttachments[sampleKey].utis, sampleUti2));
|
|
183
175
|
(0, chai_1.assert)(arrayEquals(updated3.secondaryAttachments[sampleKey2].utis, sampleUti));
|
|
184
176
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data3));
|
|
185
177
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), data2));
|
|
186
178
|
(0, chai_1.expect)(updated3.deletedAttachments).to.have.length(1);
|
|
187
|
-
const updated4 = yield documentApi.
|
|
179
|
+
const updated4 = yield documentApi.deleteSecondaryAttachmentWithUser(undefined, document.id, sampleKey2, updated3.rev);
|
|
188
180
|
(0, chai_1.expect)(updated4.secondaryAttachments).to.have.keys([sampleKey]);
|
|
189
181
|
(0, chai_1.expect)(updated4.deletedAttachments).to.have.length(2);
|
|
190
182
|
(0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data3));
|
|
@@ -193,15 +185,15 @@ describe('Document api', () => {
|
|
|
193
185
|
it('should refuse update methods which do not provide the latest rev', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
194
186
|
const document = yield createDocument();
|
|
195
187
|
(0, chai_1.expect)(document.rev).to.not.be.undefined;
|
|
196
|
-
(0, chai_1.expect)((yield documentApi.
|
|
197
|
-
yield assertRequestFails(documentApi.
|
|
198
|
-
yield assertRequestFails(documentApi.
|
|
199
|
-
yield assertRequestFails(documentApi.
|
|
188
|
+
(0, chai_1.expect)((yield documentApi.modifyDocumentWithUser(undefined, Object.assign(Object.assign({}, document), { name: 'new name' }))).rev).to.not.equal(document.rev);
|
|
189
|
+
yield assertRequestFails(documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, document.rev, (0, crypto_1.randomBytes)(32)), 409);
|
|
190
|
+
yield assertRequestFails(documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, (0, crypto_1.randomBytes)(32)), 409);
|
|
191
|
+
yield assertRequestFails(documentApi.deleteSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev), 409);
|
|
200
192
|
}));
|
|
201
193
|
it('should prevent using the document id as an attachment key', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
202
194
|
const document = yield createDocument();
|
|
203
|
-
yield assertRequestFails(documentApi.
|
|
204
|
-
yield assertRequestFails(documentApi.
|
|
195
|
+
yield assertRequestFails(documentApi.setSecondaryAttachmentWithUser(undefined, document.id, document.id, document.rev, (0, crypto_1.randomBytes)(32)), 400);
|
|
196
|
+
yield assertRequestFails(documentApi.deleteSecondaryAttachmentWithUser(undefined, document.id, document.id, document.rev), 400);
|
|
205
197
|
yield assertRequestFails(documentApi.getSecondaryAttachment(document.id, document.id, document.rev), 400);
|
|
206
198
|
}));
|
|
207
199
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IccDocumentApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccDocumentApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccDocumentXApi } from '../../../icc-x-api'\nimport { Document } from '../../../icc-api/model/Document'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { Delegation } from '../../../icc-api/model/Delegation'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport 'isomorphic-fetch'\n\nsetLocalStorage(fetch)\nconst sampleKey = 'thumbnail'\nconst sampleKey2 = 'thumbnail2'\nconst sampleUti = ['uti2', 'uti1', 'uti3']\nconst sampleUti2 = ['uti4']\n\nfunction bufferEquals(buf1: ArrayBuffer, buf2: ArrayBuffer): Boolean {\n if (buf1.byteLength != buf2.byteLength) return false\n const dv1 = new Int8Array(buf1)\n const dv2 = new Int8Array(buf2)\n return arrayEquals(dv1, dv2)\n}\n\nfunction arrayEquals<T>(a1: ArrayLike<T>, a2: ArrayLike<T>): Boolean {\n if (a1.length != a2.length) return false\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] != a2[i]) return false\n }\n return true\n}\n\nasync function assertRequestFails(request: Promise<any>, status: number) {\n let succeeded = false\n try {\n await request\n succeeded = true\n } catch (e: any) {\n expect(e.statusCode).to.equal(status)\n }\n assert(!succeeded, 'Request should have not succeeded')\n}\n\nlet env: TestVars\nlet documentApi: IccDocumentXApi\nlet dataOwnerId: string\n\ndescribe('Document api', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n const api = await initApi(env!, hcp1Username)\n documentApi = api.documentApi\n dataOwnerId = await api.dataOwnerApi.getCurrentDataOwnerId()\n })\n\n async function createDocument(): Promise<Document> {\n return await documentApi.createDocument(\n new Document({\n id: randomUUID(),\n delegations: {\n [dataOwnerId]: [\n new Delegation({\n owner: dataOwnerId,\n delegatedTo: dataOwnerId,\n key: 'fakekey',\n }),\n ],\n },\n })\n )\n }\n\n it('should allow to create and retrieve main attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n expect(document.rev).to.not.be.undefined\n const updated = await documentApi!.setMainDocumentAttachment(document.id!, document.rev!, data)\n expect(updated).to.not.be.undefined\n const retrievedData = await documentApi!.getMainDocumentAttachment(document.id!)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to update main attachment', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachment(document.id!, document.rev!, data1, sampleUti)\n expect(updated.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data1))\n const updated2 = await documentApi!.setMainDocumentAttachment(document.id!, updated.rev!, data2)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data2))\n })\n\n it('should allow to update utis in main attachment', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachment(document.id!, document.rev!, data, [])\n expect(updated.mainUti).to.be.undefined\n expect(updated.otherUtis ?? []).to.be.empty\n const updated2 = await documentApi!.setMainDocumentAttachment(document.id!, updated.rev!, data, sampleUti)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n })\n\n it('should allow to create and retrieve secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data)\n expect(updated.secondaryAttachments).to.contain.keys([sampleKey])\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const retrievedData = await documentApi!.getSecondaryAttachment(document.id!, sampleKey)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to initialise utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to update secondary attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data1, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n const updated2 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, updated.rev!, data2)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data2))\n })\n\n it('should allow to update utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const updated2 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, updated.rev!, data, sampleUti)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to delete secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data)\n const originalAttachment = updated.secondaryAttachments![sampleKey]\n const timeBeforeDelete = Date.now() - 100\n const deleted = await documentApi!.deleteSecondaryAttachment(document.id!, sampleKey, updated.rev!)\n const timeAfterDelete = Date.now() + 100\n expect(deleted.deletedAttachments).to.have.length(1)\n const deletedAttachment = deleted.deletedAttachments![0]\n expect(deletedAttachment.couchDbAttachmentId).to.equal(originalAttachment.couchDbAttachmentId)\n expect(deletedAttachment.objectStoreAttachmentId).to.equal(originalAttachment.objectStoreAttachmentId)\n expect(deletedAttachment.key).to.equal(sampleKey)\n expect(deletedAttachment.deletionTime).to.be.above(timeBeforeDelete).and.below(timeAfterDelete)\n expect(Object.keys(deleted.secondaryAttachments!)).to.be.empty\n })\n\n it('should treat secondary attachments with different keys as different attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const data3 = randomBytes(32)\n assert(!bufferEquals(data1, data2))\n const updated1 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data1)\n const updated2 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey2, updated1.rev!, data2, sampleUti)\n expect(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, []))\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n const updated3 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, updated2.rev!, data3, sampleUti2)\n expect(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey].utis!, sampleUti2))\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n expect(updated3.deletedAttachments).to.have.length(1)\n const updated4 = await documentApi!.deleteSecondaryAttachment(document.id!, sampleKey2, updated3.rev!)\n expect(updated4.secondaryAttachments).to.have.keys([sampleKey])\n expect(updated4.deletedAttachments).to.have.length(2)\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, sampleKey2), 404)\n })\n\n it('should refuse update methods which do not provide the latest rev', async () => {\n const document = await createDocument()\n expect(document.rev).to.not.be.undefined\n expect((await documentApi.modifyDocument({ ...document, name: 'new name' })).rev).to.not.equal(document.rev)\n await assertRequestFails(documentApi!.setMainDocumentAttachment(document.id!, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.deleteSecondaryAttachment(document.id!, sampleKey, document.rev!), 409)\n })\n\n it('should prevent using the document id as an attachment key', async () => {\n const document = await createDocument()\n await assertRequestFails(documentApi!.setSecondaryAttachment(document.id!, document.id!, document.rev!, randomBytes(32)), 400)\n await assertRequestFails(documentApi!.deleteSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n })\n})\n"]}
|
|
1
|
+
{"version":3,"file":"IccDocumentApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccDocumentApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccDocumentXApi } from '../../../icc-x-api'\nimport { Document } from '../../../icc-api/model/Document'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { Delegation } from '../../../icc-api/model/Delegation'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport 'isomorphic-fetch'\nimport { User } from '../../../icc-api/model/User'\n\nsetLocalStorage(fetch)\nconst sampleKey = 'thumbnail'\nconst sampleKey2 = 'thumbnail2'\nconst sampleUti = ['uti2', 'uti1', 'uti3']\nconst sampleUti2 = ['uti4']\n\nfunction bufferEquals(buf1: ArrayBuffer, buf2: ArrayBuffer): Boolean {\n if (buf1.byteLength != buf2.byteLength) return false\n const dv1 = new Int8Array(buf1)\n const dv2 = new Int8Array(buf2)\n return arrayEquals(dv1, dv2)\n}\n\nfunction arrayEquals<T>(a1: ArrayLike<T>, a2: ArrayLike<T>): Boolean {\n if (a1.length != a2.length) return false\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] != a2[i]) return false\n }\n return true\n}\n\nasync function assertRequestFails(request: Promise<any>, status: number) {\n let succeeded = false\n try {\n await request\n succeeded = true\n } catch (e: any) {\n expect(e.statusCode).to.equal(status)\n }\n assert(!succeeded, 'Request should have not succeeded')\n}\n\nlet env: TestVars\nlet documentApi: IccDocumentXApi\nlet dataOwnerId: string\nlet user: User\n\ndescribe('Document api', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n const api = await initApi(env!, hcp1Username)\n documentApi = api.documentApi\n dataOwnerId = await api.dataOwnerApi.getCurrentDataOwnerId()\n user = await api.userApi.getCurrentUser()\n })\n\n async function createDocument(): Promise<Document> {\n return await documentApi.createDocumentWithUser(\n undefined,\n await documentApi.newInstance(\n user,\n undefined,\n new Document({\n id: randomUUID(),\n })\n )\n )\n }\n\n it('should allow to create and retrieve main attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n expect(document.rev).to.not.be.undefined\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data)\n expect(updated).to.not.be.undefined\n const retrievedData = await documentApi!.getMainDocumentAttachment(document.id!)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to update main attachment', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data1, sampleUti)\n expect(updated.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data1))\n const updated2 = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, updated.rev!, data2)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data2))\n })\n\n it('should allow to update utis in main attachment', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data, [])\n expect(updated.mainUti).to.be.undefined\n expect(updated.otherUtis ?? []).to.be.empty\n const updated2 = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, updated.rev!, data, sampleUti)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n })\n\n it('should allow to create and retrieve secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n expect(updated.secondaryAttachments).to.contain.keys([sampleKey])\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const retrievedData = await documentApi!.getSecondaryAttachment(document.id!, sampleKey)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to initialise utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to update secondary attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data1, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!, data2)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data2))\n })\n\n it('should allow to update utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!, data, sampleUti)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to delete secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n const originalAttachment = updated.secondaryAttachments![sampleKey]\n const timeBeforeDelete = Date.now() - 100\n const deleted = await documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!)\n const timeAfterDelete = Date.now() + 100\n expect(deleted.deletedAttachments).to.have.length(1)\n const deletedAttachment = deleted.deletedAttachments![0]\n expect(deletedAttachment.couchDbAttachmentId).to.equal(originalAttachment.couchDbAttachmentId)\n expect(deletedAttachment.objectStoreAttachmentId).to.equal(originalAttachment.objectStoreAttachmentId)\n expect(deletedAttachment.key).to.equal(sampleKey)\n expect(deletedAttachment.deletionTime).to.be.above(timeBeforeDelete).and.below(timeAfterDelete)\n expect(Object.keys(deleted.secondaryAttachments!)).to.be.empty\n })\n\n it('should treat secondary attachments with different keys as different attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const data3 = randomBytes(32)\n assert(!bufferEquals(data1, data2))\n const updated1 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data1)\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey2, updated1.rev!, data2, sampleUti)\n expect(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, []))\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n const updated3 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated2.rev!, data3, sampleUti2)\n expect(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey].utis!, sampleUti2))\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n expect(updated3.deletedAttachments).to.have.length(1)\n const updated4 = await documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey2, updated3.rev!)\n expect(updated4.secondaryAttachments).to.have.keys([sampleKey])\n expect(updated4.deletedAttachments).to.have.length(2)\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, sampleKey2), 404)\n })\n\n it('should refuse update methods which do not provide the latest rev', async () => {\n const document = await createDocument()\n expect(document.rev).to.not.be.undefined\n expect((await documentApi.modifyDocumentWithUser(undefined, { ...document, name: 'new name' })).rev).to.not.equal(document.rev)\n await assertRequestFails(documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!), 409)\n })\n\n it('should prevent using the document id as an attachment key', async () => {\n const document = await createDocument()\n await assertRequestFails(documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, document.id!, document.rev!, randomBytes(32)), 400)\n await assertRequestFails(documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, document.id!, document.rev!), 400)\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n })\n})\n"]}
|
|
@@ -33,14 +33,14 @@ let userDetails;
|
|
|
33
33
|
});
|
|
34
34
|
});
|
|
35
35
|
const authenticationProviders = [
|
|
36
|
-
['Basic', () => new AuthenticationProvider_1.BasicAuthenticationProvider(userDetails.userLogin, userDetails.userPw12)],
|
|
36
|
+
['Basic', () => Promise.resolve(new AuthenticationProvider_1.BasicAuthenticationProvider(userDetails.userLogin, userDetails.userPw12))],
|
|
37
37
|
[
|
|
38
38
|
'Jwt',
|
|
39
|
-
() => new AuthenticationProvider_1.JwtAuthenticationProvider(new icc_api_1.IccAuthApi(host, {}, new AuthenticationProvider_1.NoAuthenticationProvider(), fetch), userDetails.userLogin, userDetails.userPw12),
|
|
39
|
+
() => Promise.resolve(new AuthenticationProvider_1.JwtAuthenticationProvider(new icc_api_1.IccAuthApi(host, {}, new AuthenticationProvider_1.NoAuthenticationProvider(), fetch), userDetails.userLogin, userDetails.userPw12)),
|
|
40
40
|
],
|
|
41
41
|
[
|
|
42
42
|
'Ensemble',
|
|
43
|
-
() => new AuthenticationProvider_1.EnsembleAuthenticationProvider(new icc_api_1.IccAuthApi(host, {}, new AuthenticationProvider_1.NoAuthenticationProvider(), fetch), userDetails.userLogin, userDetails.userPw12),
|
|
43
|
+
() => Promise.resolve(new AuthenticationProvider_1.EnsembleAuthenticationProvider(new icc_api_1.IccAuthApi(host, {}, new AuthenticationProvider_1.NoAuthenticationProvider(), fetch), userDetails.userLogin, userDetails.userPw12)),
|
|
44
44
|
],
|
|
45
45
|
[
|
|
46
46
|
'Smart',
|
|
@@ -54,7 +54,7 @@ let userDetails;
|
|
|
54
54
|
];
|
|
55
55
|
for (const [providerType, providerFactory] of authenticationProviders) {
|
|
56
56
|
it(`should be able to switch to another group if the username-password is the same in the new group (${providerType})`, () => __awaiter(this, void 0, void 0, function* () {
|
|
57
|
-
const provider = providerFactory();
|
|
57
|
+
const provider = yield providerFactory();
|
|
58
58
|
const initialUserApi = new icc_api_1.IccUserApi(host, {}, provider, fetch);
|
|
59
59
|
const initialUser = yield initialUserApi.getCurrentUser();
|
|
60
60
|
(0, chai_1.expect)(initialUser.id).to.be.oneOf([userDetails.user1.id, userDetails.user2.id]);
|
|
@@ -70,7 +70,7 @@ let userDetails;
|
|
|
70
70
|
(0, chai_1.expect)(userGroup1.id).to.equal(userDetails.user1.id);
|
|
71
71
|
}));
|
|
72
72
|
it(`should not be able to switch to another group if the username-password is different in the new group (${providerType})`, () => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
const provider = providerFactory();
|
|
73
|
+
const provider = yield providerFactory();
|
|
74
74
|
const initialUserApi = new icc_api_1.IccUserApi(host, {}, provider, fetch);
|
|
75
75
|
const matches = yield initialUserApi.getMatchingUsers();
|
|
76
76
|
(0, chai_1.expect)(matches.map((x) => x.userId)).to.not.contain(userDetails.user3.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-switch-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/auth/group-switch-test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uDAM+B;AAC/B,mDAAyD;AACzD,4BAAyB;AACzB,8CAAyD;AACzD,2FAMuD;AACvD,+BAA6C;AAC7C,mDAAkD;AAClD,iFAAgH;AAEhH,IAAA,UAAO,EAAC,cAAc,CAAC,CAAA;AAEvB,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AAEtB,IAAI,IAAY,CAAA;AAChB,IAAI,WAAoC,CAAA;AAExC,IAAA,2BAAc,EAAC,yDAAyD,EAAE;IACxE,MAAM,CAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;YACxD,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAA;YACnB,WAAW,GAAG,MAAM,IAAA,uCAA0B,EAAC,GAAG,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC9B,CAAC;KAAA,CAAC,CAAA;IAEF,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"group-switch-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/auth/group-switch-test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createUserInMultipleGroups,\n describeNoLite,\n getEnvironmentInitializer,\n setLocalStorage,\n UserInManyGroupsDetails,\n} from '../../utils/test_utils'\nimport { getEnvVariables } from '@icure/test-setup/types'\nimport 'isomorphic-fetch'\nimport { IccAuthApi, IccUserApi } from '../../../icc-api'\nimport {\n AuthenticationProvider,\n BasicAuthenticationProvider,\n EnsembleAuthenticationProvider,\n JwtAuthenticationProvider,\n NoAuthenticationProvider,\n} from '../../../icc-x-api/auth/AuthenticationProvider'\nimport { expect, use as chaiUse } from 'chai'\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { AuthSecretDetails, AuthSecretType, SmartAuthProvider } from '../../../icc-x-api/auth/SmartAuthProvider'\n\nchaiUse(chaiAsPromised)\n\nsetLocalStorage(fetch)\n\nlet host: string\nlet userDetails: UserInManyGroupsDetails\n\ndescribeNoLite('Authentication providers should be able to switch group', function () {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n const env = await initializer.execute(getEnvVariables())\n host = env.iCureUrl\n userDetails = await createUserInMultipleGroups(env)\n console.log('Users created')\n })\n\n const authenticationProviders: [string, () => Promise<AuthenticationProvider>][] = [\n ['Basic', () => Promise.resolve(new BasicAuthenticationProvider(userDetails.userLogin, userDetails.userPw12))],\n [\n 'Jwt',\n () =>\n Promise.resolve(\n new JwtAuthenticationProvider(new IccAuthApi(host, {}, new NoAuthenticationProvider(), fetch), userDetails.userLogin, userDetails.userPw12)\n ),\n ],\n [\n 'Ensemble',\n () =>\n Promise.resolve(\n new EnsembleAuthenticationProvider(\n new IccAuthApi(host, {}, new NoAuthenticationProvider(), fetch),\n userDetails.userLogin,\n userDetails.userPw12\n )\n ),\n ],\n [\n 'Smart',\n () =>\n SmartAuthProvider.initialise(new IccAuthApi(host, {}, new NoAuthenticationProvider(), fetch), userDetails.userLogin, {\n getSecret(acceptedSecrets: AuthSecretType[], previousAttempts: AuthSecretDetails[]): Promise<AuthSecretDetails> {\n expect(acceptedSecrets).to.include(AuthSecretType.PASSWORD)\n return Promise.resolve({ value: userDetails.userPw12, secretType: AuthSecretType.PASSWORD })\n },\n }),\n ],\n ]\n\n for (const [providerType, providerFactory] of authenticationProviders) {\n it(`should be able to switch to another group if the username-password is the same in the new group (${providerType})`, async () => {\n const provider = await providerFactory()\n const initialUserApi = new IccUserApi(host, {}, provider, fetch)\n const initialUser = await initialUserApi.getCurrentUser()\n expect(initialUser.id).to.be.oneOf([userDetails.user1.id, userDetails.user2.id])\n const matches = await initialUserApi.getMatchingUsers()\n expect(matches.map((x) => x.userId)).to.have.members([userDetails.user1.id, userDetails.user2.id])\n const switchedToGroup2Provider = await provider.switchGroup(userDetails.group2.id!, matches)\n const userApiGroup2 = new IccUserApi(host, {}, switchedToGroup2Provider, fetch)\n const userGroup2 = await userApiGroup2.getCurrentUser()\n expect(userGroup2.id).to.equal(userDetails.user2.id)\n const switchedToGroup1Provider = await switchedToGroup2Provider.switchGroup(userDetails.group1.id!, matches)\n const userApiGroup1 = new IccUserApi(host, {}, switchedToGroup1Provider, fetch)\n const userGroup1 = await userApiGroup1.getCurrentUser()\n expect(userGroup1.id).to.equal(userDetails.user1.id)\n })\n\n it(`should not be able to switch to another group if the username-password is different in the new group (${providerType})`, async () => {\n const provider = await providerFactory()\n const initialUserApi = new IccUserApi(host, {}, provider, fetch)\n const matches = await initialUserApi.getMatchingUsers()\n expect(matches.map((x) => x.userId)).to.not.contain(userDetails.user3.id)\n await expect(provider.switchGroup(userDetails.group3.id!, matches)).to.be.rejected\n })\n }\n})\n"]}
|
|
@@ -181,7 +181,7 @@ describe('JWT provider resiliency test', () => {
|
|
|
181
181
|
}));
|
|
182
182
|
it('A SmartAuthService supports the jwtGetter', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
183
183
|
const authApi = new FakeAuthApi();
|
|
184
|
-
const authProvider = SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, 'username', {
|
|
184
|
+
const authProvider = yield SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, 'username', {
|
|
185
185
|
getSecret: (acceptedSecrets, previousAttempts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
186
186
|
return { value: 'wrong', secretType: SmartAuthProvider_1.AuthSecretType.LONG_LIVED_TOKEN }; // pragma: allowlist secret
|
|
187
187
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-provider-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/auth/jwt-provider-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccAuthApi } from '../../../icc-api'\nimport { LoginCredentials } from '../../../icc-api/model/LoginCredentials'\nimport { AuthenticationResponse } from '../../../icc-api/model/AuthenticationResponse'\nimport { b2a } from '../../../icc-api/model/ModelHelper'\nimport { expect } from 'chai'\nimport { JwtBridgedAuthService } from '../../../icc-x-api/auth/JwtBridgedAuthService'\nimport { AuthService } from '../../../icc-x-api/auth/AuthService'\nimport { JwtAuthService } from '../../../icc-x-api/auth/JwtAuthService'\nimport { XHR } from '../../../icc-api/api/XHR'\nimport XHRError = XHR.XHRError\nimport { JwtError } from '../../../icc-x-api/auth/JwtError'\nimport { BasicAuthService } from '../../../icc-x-api/auth/BasicAuthService'\nimport { EnsembleAuthService } from '../../../icc-x-api/auth/EnsembleAuthService'\nimport { NoAuthService } from '../../../icc-x-api/auth/NoAuthService'\nimport { AuthSecretDetails, AuthSecretType, SmartAuthProvider } from '../../../icc-x-api/auth/SmartAuthProvider'\n\ndescribe('JWT provider resiliency test', () => {\n function generateJwt() {\n return `jwt.${b2a(JSON.stringify({ exp: 1000 }))}.${Math.floor(100000 + Math.random() * 900000)}`\n }\n\n function generateRefreshJwt() {\n return `refreshJwt.${b2a(JSON.stringify({ exp: new Date().getTime() * 10 }))}.${Math.floor(100000 + Math.random() * 900000)}`\n }\n\n class FakeAuthApi extends IccAuthApi {\n refreshException: Error | undefined | null\n loginException: Error | undefined | null\n jwt = `jwt.${b2a(JSON.stringify({ exp: 1000 }))}.signature`\n refreshJwt = `refreshJwt.${b2a(JSON.stringify({ exp: new Date().getTime() * 10 }))}.signature`\n\n constructor() {\n super('', {})\n }\n\n login(body?: LoginCredentials): Promise<AuthenticationResponse> {\n if (!!this.loginException) {\n throw this.loginException\n }\n\n this.jwt = generateJwt()\n this.refreshJwt = generateRefreshJwt()\n return Promise.resolve(\n new AuthenticationResponse({\n token: this.jwt,\n refreshToken: this.refreshJwt,\n })\n )\n }\n\n refreshAuthenticationJWT(refreshJWT: string): Promise<AuthenticationResponse> {\n if (!!this.refreshException) {\n throw this.refreshException\n }\n\n this.jwt = generateJwt()\n return Promise.resolve(\n new AuthenticationResponse({\n token: this.jwt,\n refreshToken: this.refreshJwt ?? generateRefreshJwt(),\n })\n )\n }\n }\n\n async function expectThrowOnGetHeaders(service: AuthService): Promise<void> {\n let caught: Error | null = null\n try {\n await service.getAuthHeaders()\n } catch (e) {\n caught = e as Error\n }\n expect(caught).not.to.be.null\n expect(caught).to.be.instanceof(JwtError)\n }\n\n it('JwtBridgedAuthService - If the login fails for any type of error it is possible to retry', async () => {\n const errors: Error[] = [\n new Error('A generic error'),\n new XHRError('', '', 403, 'FORBIDDEN', new Headers()),\n new XHRError('', '', 503, 'TIMEOUT', new Headers()),\n ]\n for (const e of errors) {\n const fakeAuthApi = new FakeAuthApi()\n const authService = new JwtBridgedAuthService(fakeAuthApi, 'username', 'password', {}, undefined)\n\n fakeAuthApi.loginException = e\n await expectThrowOnGetHeaders(authService)\n\n fakeAuthApi.loginException = null\n const firstHeader = await authService.getAuthHeaders()\n expect(firstHeader[0].data).to.be.equal(`Bearer ${fakeAuthApi.jwt}`)\n }\n })\n\n async function jwtBridgedTest(error: Error, loginAfterError: boolean) {\n const fakeAuthApi = new FakeAuthApi()\n const authService = new JwtBridgedAuthService(fakeAuthApi, 'username', 'password', {}, undefined)\n\n fakeAuthApi.refreshException = null\n const firstHeader = await authService.getAuthHeaders()\n const initialJwt = fakeAuthApi.jwt\n const initialRefresh = fakeAuthApi.refreshJwt\n expect(firstHeader[0].data).to.be.equal(`Bearer ${initialJwt}`)\n\n fakeAuthApi.refreshException = error\n await expectThrowOnGetHeaders(authService)\n\n fakeAuthApi.refreshException = null\n const secondHeader = await authService.getAuthHeaders()\n const secondJwt = fakeAuthApi.jwt\n const secondRefresh = fakeAuthApi.refreshJwt\n expect(secondHeader[0].data).to.be.equal(`Bearer ${secondJwt}`)\n expect(secondJwt).not.to.be.equal(initialJwt)\n if (loginAfterError) {\n expect(secondRefresh).not.to.be.equal(initialRefresh)\n } else {\n expect(secondRefresh).to.be.equal(initialRefresh)\n }\n }\n\n it('JwtBridgedAuthService - If the refresh fails for a generic error, it is possible to retry', async () => {\n const error = new Error('A generic error')\n await jwtBridgedTest(error, false)\n })\n\n it('JwtBridgedAuthService - If the refresh fails for a 500 error, the login is performed again', async () => {\n const error = new XHRError('', '', 500, 'INTERNAL SERVER ERROR', new Headers())\n await jwtBridgedTest(error, false)\n })\n\n it('JwtBridgedAuthService - If the refresh fails for a 400 error, the login is performed again', async () => {\n const error = new XHRError('', '', 403, 'FORBIDDEN', new Headers())\n await jwtBridgedTest(error, true)\n })\n\n it('JwtAuthService - If the refresh fails for an error, it is possible to retry', async () => {\n const fakeAuthApi = new FakeAuthApi()\n const error = new Error('A generic error')\n const initialJwt = generateJwt()\n const initialRefresh = generateRefreshJwt()\n const authService = new JwtAuthService(fakeAuthApi, { authJwt: initialJwt, refreshJwt: initialRefresh })\n\n fakeAuthApi.refreshException = error\n await expectThrowOnGetHeaders(authService)\n\n fakeAuthApi.refreshException = null\n const secondHeader = await authService.getAuthHeaders()\n const secondJwt = fakeAuthApi.jwt\n expect(secondHeader[0].data).to.be.equal(`Bearer ${secondJwt}`)\n expect(secondJwt).not.to.be.equal(initialJwt)\n })\n\n it('A BasicAuthService does not have a jwtGetter property', async () => {\n const service = new BasicAuthService('username', 'password') as AuthService\n expect(service.jwtGetter).to.be.undefined\n })\n\n it('A NoAuthService does not have a jwtGetter property', async () => {\n const service = new NoAuthService() as AuthService\n expect(service.jwtGetter).to.be.undefined\n })\n\n it('A JwtBridgedAuthService supports the jwtGetter', async () => {\n const fakeAuthApi = new FakeAuthApi()\n const authService = new JwtBridgedAuthService(fakeAuthApi, 'username', 'password', {}, undefined) as AuthService\n expect(authService.jwtGetter).not.to.be.undefined\n\n if (!!authService.jwtGetter) {\n const token = await authService.jwtGetter()\n\n expect(token?.token).to.be.equal(fakeAuthApi.jwt)\n }\n })\n\n it('A JwtAuthService supports the jwtGetter', async () => {\n const initialJwt = generateJwt()\n const initialRefresh = generateRefreshJwt()\n const fakeAuthApi = new FakeAuthApi()\n const jwtService = new JwtAuthService(fakeAuthApi, { authJwt: initialJwt, refreshJwt: initialRefresh }) as AuthService\n expect(jwtService.jwtGetter).not.to.be.undefined\n\n if (!!jwtService.jwtGetter) {\n const token = await jwtService.jwtGetter()\n\n expect(token?.token).to.be.equal(initialJwt)\n }\n })\n\n it('An EnsembleAuthService supports the jwtGetter', async () => {\n const initialJwt = generateJwt()\n const initialRefresh = generateRefreshJwt()\n const fakeAuthApi = new FakeAuthApi()\n const basic = new BasicAuthService('username', 'password')\n const jwtService = new JwtAuthService(fakeAuthApi, { authJwt: initialJwt, refreshJwt: initialRefresh })\n const service = new EnsembleAuthService(jwtService, new NoAuthService(), basic) as AuthService\n expect(service.jwtGetter).not.to.be.undefined\n\n if (!!service.jwtGetter) {\n const token = await service.jwtGetter()\n\n expect(token?.token).to.be.equal(initialJwt)\n }\n })\n\n it('A SmartAuthService supports the jwtGetter', async () => {\n const authApi = new FakeAuthApi()\n const authProvider = SmartAuthProvider.initialise(authApi, 'username', {\n getSecret: async (acceptedSecrets: AuthSecretType[], previousAttempts: AuthSecretDetails[]) => {\n return { value: 'wrong', secretType: AuthSecretType.LONG_LIVED_TOKEN } // pragma: allowlist secret\n },\n })\n const service = authProvider.getAuthService()\n\n expect(service.jwtGetter).not.to.be.undefined\n\n if (!!service.jwtGetter) {\n const token = await service.jwtGetter()\n\n expect(token?.token).to.be.equal(authApi.jwt)\n }\n })\n})\n"]}
|
|
1
|
+
{"version":3,"file":"jwt-provider-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/auth/jwt-provider-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccAuthApi } from '../../../icc-api'\nimport { LoginCredentials } from '../../../icc-api/model/LoginCredentials'\nimport { AuthenticationResponse } from '../../../icc-api/model/AuthenticationResponse'\nimport { b2a } from '../../../icc-api/model/ModelHelper'\nimport { expect } from 'chai'\nimport { JwtBridgedAuthService } from '../../../icc-x-api/auth/JwtBridgedAuthService'\nimport { AuthService } from '../../../icc-x-api/auth/AuthService'\nimport { JwtAuthService } from '../../../icc-x-api/auth/JwtAuthService'\nimport { XHR } from '../../../icc-api/api/XHR'\nimport XHRError = XHR.XHRError\nimport { JwtError } from '../../../icc-x-api/auth/JwtError'\nimport { BasicAuthService } from '../../../icc-x-api/auth/BasicAuthService'\nimport { EnsembleAuthService } from '../../../icc-x-api/auth/EnsembleAuthService'\nimport { NoAuthService } from '../../../icc-x-api/auth/NoAuthService'\nimport { AuthSecretDetails, AuthSecretType, SmartAuthProvider } from '../../../icc-x-api/auth/SmartAuthProvider'\n\ndescribe('JWT provider resiliency test', () => {\n function generateJwt() {\n return `jwt.${b2a(JSON.stringify({ exp: 1000 }))}.${Math.floor(100000 + Math.random() * 900000)}`\n }\n\n function generateRefreshJwt() {\n return `refreshJwt.${b2a(JSON.stringify({ exp: new Date().getTime() * 10 }))}.${Math.floor(100000 + Math.random() * 900000)}`\n }\n\n class FakeAuthApi extends IccAuthApi {\n refreshException: Error | undefined | null\n loginException: Error | undefined | null\n jwt = `jwt.${b2a(JSON.stringify({ exp: 1000 }))}.signature`\n refreshJwt = `refreshJwt.${b2a(JSON.stringify({ exp: new Date().getTime() * 10 }))}.signature`\n\n constructor() {\n super('', {})\n }\n\n login(body?: LoginCredentials): Promise<AuthenticationResponse> {\n if (!!this.loginException) {\n throw this.loginException\n }\n\n this.jwt = generateJwt()\n this.refreshJwt = generateRefreshJwt()\n return Promise.resolve(\n new AuthenticationResponse({\n token: this.jwt,\n refreshToken: this.refreshJwt,\n })\n )\n }\n\n refreshAuthenticationJWT(refreshJWT: string): Promise<AuthenticationResponse> {\n if (!!this.refreshException) {\n throw this.refreshException\n }\n\n this.jwt = generateJwt()\n return Promise.resolve(\n new AuthenticationResponse({\n token: this.jwt,\n refreshToken: this.refreshJwt ?? generateRefreshJwt(),\n })\n )\n }\n }\n\n async function expectThrowOnGetHeaders(service: AuthService): Promise<void> {\n let caught: Error | null = null\n try {\n await service.getAuthHeaders()\n } catch (e) {\n caught = e as Error\n }\n expect(caught).not.to.be.null\n expect(caught).to.be.instanceof(JwtError)\n }\n\n it('JwtBridgedAuthService - If the login fails for any type of error it is possible to retry', async () => {\n const errors: Error[] = [\n new Error('A generic error'),\n new XHRError('', '', 403, 'FORBIDDEN', new Headers()),\n new XHRError('', '', 503, 'TIMEOUT', new Headers()),\n ]\n for (const e of errors) {\n const fakeAuthApi = new FakeAuthApi()\n const authService = new JwtBridgedAuthService(fakeAuthApi, 'username', 'password', {}, undefined)\n\n fakeAuthApi.loginException = e\n await expectThrowOnGetHeaders(authService)\n\n fakeAuthApi.loginException = null\n const firstHeader = await authService.getAuthHeaders()\n expect(firstHeader[0].data).to.be.equal(`Bearer ${fakeAuthApi.jwt}`)\n }\n })\n\n async function jwtBridgedTest(error: Error, loginAfterError: boolean) {\n const fakeAuthApi = new FakeAuthApi()\n const authService = new JwtBridgedAuthService(fakeAuthApi, 'username', 'password', {}, undefined)\n\n fakeAuthApi.refreshException = null\n const firstHeader = await authService.getAuthHeaders()\n const initialJwt = fakeAuthApi.jwt\n const initialRefresh = fakeAuthApi.refreshJwt\n expect(firstHeader[0].data).to.be.equal(`Bearer ${initialJwt}`)\n\n fakeAuthApi.refreshException = error\n await expectThrowOnGetHeaders(authService)\n\n fakeAuthApi.refreshException = null\n const secondHeader = await authService.getAuthHeaders()\n const secondJwt = fakeAuthApi.jwt\n const secondRefresh = fakeAuthApi.refreshJwt\n expect(secondHeader[0].data).to.be.equal(`Bearer ${secondJwt}`)\n expect(secondJwt).not.to.be.equal(initialJwt)\n if (loginAfterError) {\n expect(secondRefresh).not.to.be.equal(initialRefresh)\n } else {\n expect(secondRefresh).to.be.equal(initialRefresh)\n }\n }\n\n it('JwtBridgedAuthService - If the refresh fails for a generic error, it is possible to retry', async () => {\n const error = new Error('A generic error')\n await jwtBridgedTest(error, false)\n })\n\n it('JwtBridgedAuthService - If the refresh fails for a 500 error, the login is performed again', async () => {\n const error = new XHRError('', '', 500, 'INTERNAL SERVER ERROR', new Headers())\n await jwtBridgedTest(error, false)\n })\n\n it('JwtBridgedAuthService - If the refresh fails for a 400 error, the login is performed again', async () => {\n const error = new XHRError('', '', 403, 'FORBIDDEN', new Headers())\n await jwtBridgedTest(error, true)\n })\n\n it('JwtAuthService - If the refresh fails for an error, it is possible to retry', async () => {\n const fakeAuthApi = new FakeAuthApi()\n const error = new Error('A generic error')\n const initialJwt = generateJwt()\n const initialRefresh = generateRefreshJwt()\n const authService = new JwtAuthService(fakeAuthApi, { authJwt: initialJwt, refreshJwt: initialRefresh })\n\n fakeAuthApi.refreshException = error\n await expectThrowOnGetHeaders(authService)\n\n fakeAuthApi.refreshException = null\n const secondHeader = await authService.getAuthHeaders()\n const secondJwt = fakeAuthApi.jwt\n expect(secondHeader[0].data).to.be.equal(`Bearer ${secondJwt}`)\n expect(secondJwt).not.to.be.equal(initialJwt)\n })\n\n it('A BasicAuthService does not have a jwtGetter property', async () => {\n const service = new BasicAuthService('username', 'password') as AuthService\n expect(service.jwtGetter).to.be.undefined\n })\n\n it('A NoAuthService does not have a jwtGetter property', async () => {\n const service = new NoAuthService() as AuthService\n expect(service.jwtGetter).to.be.undefined\n })\n\n it('A JwtBridgedAuthService supports the jwtGetter', async () => {\n const fakeAuthApi = new FakeAuthApi()\n const authService = new JwtBridgedAuthService(fakeAuthApi, 'username', 'password', {}, undefined) as AuthService\n expect(authService.jwtGetter).not.to.be.undefined\n\n if (!!authService.jwtGetter) {\n const token = await authService.jwtGetter()\n\n expect(token?.token).to.be.equal(fakeAuthApi.jwt)\n }\n })\n\n it('A JwtAuthService supports the jwtGetter', async () => {\n const initialJwt = generateJwt()\n const initialRefresh = generateRefreshJwt()\n const fakeAuthApi = new FakeAuthApi()\n const jwtService = new JwtAuthService(fakeAuthApi, { authJwt: initialJwt, refreshJwt: initialRefresh }) as AuthService\n expect(jwtService.jwtGetter).not.to.be.undefined\n\n if (!!jwtService.jwtGetter) {\n const token = await jwtService.jwtGetter()\n\n expect(token?.token).to.be.equal(initialJwt)\n }\n })\n\n it('An EnsembleAuthService supports the jwtGetter', async () => {\n const initialJwt = generateJwt()\n const initialRefresh = generateRefreshJwt()\n const fakeAuthApi = new FakeAuthApi()\n const basic = new BasicAuthService('username', 'password')\n const jwtService = new JwtAuthService(fakeAuthApi, { authJwt: initialJwt, refreshJwt: initialRefresh })\n const service = new EnsembleAuthService(jwtService, new NoAuthService(), basic) as AuthService\n expect(service.jwtGetter).not.to.be.undefined\n\n if (!!service.jwtGetter) {\n const token = await service.jwtGetter()\n\n expect(token?.token).to.be.equal(initialJwt)\n }\n })\n\n it('A SmartAuthService supports the jwtGetter', async () => {\n const authApi = new FakeAuthApi()\n const authProvider = await SmartAuthProvider.initialise(authApi, 'username', {\n getSecret: async (acceptedSecrets: AuthSecretType[], previousAttempts: AuthSecretDetails[]) => {\n return { value: 'wrong', secretType: AuthSecretType.LONG_LIVED_TOKEN } // pragma: allowlist secret\n },\n })\n const service = authProvider.getAuthService()\n\n expect(service.jwtGetter).not.to.be.undefined\n\n if (!!service.jwtGetter) {\n const token = await service.jwtGetter()\n\n expect(token?.token).to.be.equal(authApi.jwt)\n }\n })\n})\n"]}
|
|
@@ -39,7 +39,7 @@ describe('Smart authentication provider', () => {
|
|
|
39
39
|
it('Should automatically ask for secret to get a new token, and reasks the secret if it is not valid', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
40
|
const { credentials } = yield (0, test_utils_1.createNewHcpApi)(env);
|
|
41
41
|
let calls = 0;
|
|
42
|
-
const authProvider = SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
42
|
+
const authProvider = yield SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
43
43
|
getSecret: (acceptedSecrets, previousAttempts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
44
|
(0, chai_1.expect)(acceptedSecrets).to.include(SmartAuthProvider_1.AuthSecretType.PASSWORD);
|
|
45
45
|
(0, chai_1.expect)(acceptedSecrets).to.include(SmartAuthProvider_1.AuthSecretType.LONG_LIVED_TOKEN);
|
|
@@ -79,7 +79,7 @@ describe('Smart authentication provider', () => {
|
|
|
79
79
|
},
|
|
80
80
|
} }));
|
|
81
81
|
let calls = 0;
|
|
82
|
-
const authProvider = SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
82
|
+
const authProvider = yield SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
83
83
|
getSecret: (acceptedSecrets, previousAttempts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
84
84
|
if (calls == 0) {
|
|
85
85
|
(0, chai_1.expect)(acceptedSecrets).to.include(SmartAuthProvider_1.AuthSecretType.PASSWORD);
|
|
@@ -132,7 +132,7 @@ describe('Smart authentication provider', () => {
|
|
|
132
132
|
yield masterApi.userApi.enable2fa(initialUser.id, totpSecret);
|
|
133
133
|
const userWithPwAnd2fa = yield masterApi.userApi.modifyUser(Object.assign(Object.assign({}, initialUser), { passwordHash: userPw }));
|
|
134
134
|
let calls = 0;
|
|
135
|
-
const authProvider = SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
135
|
+
const authProvider = yield SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
136
136
|
getSecret: (acceptedSecrets, previousAttempts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
137
137
|
if (calls == 0) {
|
|
138
138
|
(0, chai_1.expect)(acceptedSecrets).to.include(SmartAuthProvider_1.AuthSecretType.PASSWORD);
|
|
@@ -176,7 +176,7 @@ describe('Smart authentication provider', () => {
|
|
|
176
176
|
yield masterApi.userApi.enable2fa(initialUser.id, totpSecret);
|
|
177
177
|
const userWithPwAnd2fa = yield masterApi.userApi.modifyUser(Object.assign(Object.assign({}, initialUser), { passwordHash: userPw }));
|
|
178
178
|
let calls = 0;
|
|
179
|
-
const authProvider = SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
179
|
+
const authProvider = yield SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, credentials.user, {
|
|
180
180
|
getSecret: (acceptedSecrets, previousAttempts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
181
181
|
(0, chai_1.expect)(acceptedSecrets).to.have.members([SmartAuthProvider_1.AuthSecretType.TWO_FACTOR_AUTHENTICATION_TOKEN]);
|
|
182
182
|
(0, chai_1.expect)(previousAttempts).to.be.empty;
|
|
@@ -194,7 +194,7 @@ describe('Smart authentication provider', () => {
|
|
|
194
194
|
var _a;
|
|
195
195
|
const details = yield (0, test_utils_1.createUserInMultipleGroups)(env);
|
|
196
196
|
let calls = 0;
|
|
197
|
-
const authProvider = SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, details.userLogin, {
|
|
197
|
+
const authProvider = yield SmartAuthProvider_1.SmartAuthProvider.initialise(authApi, details.userLogin, {
|
|
198
198
|
getSecret: (acceptedSecrets, previousAttempts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
199
199
|
(0, chai_1.expect)(acceptedSecrets).to.have.include(SmartAuthProvider_1.AuthSecretType.PASSWORD);
|
|
200
200
|
(0, chai_1.expect)(previousAttempts).to.be.empty;
|