@furystack/security 7.0.9 → 8.0.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/CHANGELOG.md +10 -0
- package/README.md +9 -3
- package/esm/crypto-password-hasher.d.ts +10 -12
- package/esm/crypto-password-hasher.d.ts.map +1 -1
- package/esm/crypto-password-hasher.js +43 -36
- package/esm/crypto-password-hasher.js.map +1 -1
- package/esm/helpers.d.ts +20 -7
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +27 -13
- package/esm/helpers.js.map +1 -1
- package/esm/index.d.ts +3 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -1
- package/esm/index.js.map +1 -1
- package/esm/password-authenticator.d.ts +26 -15
- package/esm/password-authenticator.d.ts.map +1 -1
- package/esm/password-authenticator.js +73 -109
- package/esm/password-authenticator.js.map +1 -1
- package/esm/password-authenticator.spec.js +122 -212
- package/esm/password-authenticator.spec.js.map +1 -1
- package/esm/password-credential-store.d.ts +50 -0
- package/esm/password-credential-store.d.ts.map +1 -0
- package/esm/password-credential-store.js +73 -0
- package/esm/password-credential-store.js.map +1 -0
- package/esm/password-credential-store.spec.d.ts +2 -0
- package/esm/password-credential-store.spec.d.ts.map +1 -0
- package/esm/password-credential-store.spec.js +64 -0
- package/esm/password-credential-store.spec.js.map +1 -0
- package/esm/password-hasher.d.ts +21 -3
- package/esm/password-hasher.d.ts.map +1 -1
- package/esm/password-hasher.js +1 -19
- package/esm/password-hasher.js.map +1 -1
- package/esm/security-policy-manager.d.ts +46 -14
- package/esm/security-policy-manager.d.ts.map +1 -1
- package/esm/security-policy-manager.js +48 -52
- package/esm/security-policy-manager.js.map +1 -1
- package/esm/security-policy-manager.spec.js +58 -7
- package/esm/security-policy-manager.spec.js.map +1 -1
- package/esm/security-policy.d.ts +35 -9
- package/esm/security-policy.d.ts.map +1 -1
- package/esm/security-policy.js +23 -33
- package/esm/security-policy.js.map +1 -1
- package/package.json +5 -5
- package/src/crypto-password-hasher.ts +46 -39
- package/src/helpers.ts +27 -15
- package/src/index.ts +3 -2
- package/src/password-authenticator.spec.ts +134 -254
- package/src/password-authenticator.ts +92 -86
- package/src/password-credential-store.spec.ts +77 -0
- package/src/password-credential-store.ts +79 -0
- package/src/password-hasher.ts +21 -9
- package/src/security-policy-manager.spec.ts +63 -7
- package/src/security-policy-manager.ts +91 -42
- package/src/security-policy.ts +50 -18
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { getRepository } from '@furystack/repository';
|
|
1
|
+
import { InMemoryStore } from '@furystack/core';
|
|
2
|
+
import { createInjector } from '@furystack/inject';
|
|
4
3
|
import { usingAsync } from '@furystack/utils';
|
|
5
4
|
import { randomBytes } from 'crypto';
|
|
6
5
|
import { describe, expect, it, vi } from 'vitest';
|
|
@@ -10,285 +9,196 @@ import { usePasswordPolicy } from './helpers.js';
|
|
|
10
9
|
import { PasswordCredential } from './models/password-credential.js';
|
|
11
10
|
import { PasswordResetToken } from './models/password-reset-token.js';
|
|
12
11
|
import { PasswordAuthenticator } from './password-authenticator.js';
|
|
12
|
+
import { PasswordCredentialStore, PasswordResetTokenStore } from './password-credential-store.js';
|
|
13
13
|
import { createMinLengthComplexityRule } from './password-complexity-rules/min-length.js';
|
|
14
14
|
import { SecurityPolicyManager } from './security-policy-manager.js';
|
|
15
15
|
const randomString = () => randomBytes(32).toString('hex');
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Binds a fresh in-memory implementation of the two credential stores. The
|
|
18
|
+
* production default factories throw on purpose; tests opt in to memory
|
|
19
|
+
* persistence explicitly per injector.
|
|
20
|
+
*/
|
|
21
|
+
const useInMemorySecurityStores = (i) => {
|
|
22
|
+
i.bind(PasswordCredentialStore, () => new InMemoryStore({ model: PasswordCredential, primaryKey: 'userName' }));
|
|
23
|
+
i.bind(PasswordResetTokenStore, () => new InMemoryStore({ model: PasswordResetToken, primaryKey: 'token' }));
|
|
22
24
|
};
|
|
23
25
|
describe('PasswordAuthenticator', () => {
|
|
24
|
-
it('
|
|
25
|
-
await usingAsync(
|
|
26
|
-
|
|
26
|
+
it('resolves to a configured authenticator when stores and policy are set up', async () => {
|
|
27
|
+
await usingAsync(createInjector(), async (i) => {
|
|
28
|
+
useInMemorySecurityStores(i);
|
|
27
29
|
usePasswordPolicy(i);
|
|
28
|
-
const auth = i.
|
|
29
|
-
expect(auth).
|
|
30
|
+
const auth = i.get(PasswordAuthenticator);
|
|
31
|
+
expect(auth.policyManager).toBeDefined();
|
|
32
|
+
expect(auth.hasher).toBeDefined();
|
|
30
33
|
});
|
|
31
34
|
});
|
|
32
|
-
it('
|
|
33
|
-
await usingAsync(
|
|
34
|
-
|
|
35
|
-
usePasswordPolicy(i, {
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
const auth = i.getInstance(PasswordAuthenticator);
|
|
39
|
-
expect(auth).toBeInstanceOf(PasswordAuthenticator);
|
|
35
|
+
it('picks up complexity rules supplied via usePasswordPolicy', async () => {
|
|
36
|
+
await usingAsync(createInjector(), async (i) => {
|
|
37
|
+
useInMemorySecurityStores(i);
|
|
38
|
+
usePasswordPolicy(i, { passwordComplexityRules: [createMinLengthComplexityRule(3)] });
|
|
39
|
+
const auth = i.get(PasswordAuthenticator);
|
|
40
40
|
expect(auth.policyManager.policy.passwordComplexityRules[0].name).toBe('minLength');
|
|
41
41
|
});
|
|
42
42
|
});
|
|
43
43
|
describe('checkPasswordForUser', () => {
|
|
44
|
-
it('
|
|
45
|
-
await usingAsync(
|
|
44
|
+
it('returns isValid=true for a valid username and password combination', async () => {
|
|
45
|
+
await usingAsync(createInjector(), async (i) => {
|
|
46
46
|
const userName = randomString();
|
|
47
47
|
const password = randomString();
|
|
48
|
-
|
|
49
|
-
usePasswordPolicy(i
|
|
50
|
-
const authenticator = i.
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
await passwordStore.add(entry);
|
|
55
|
-
const successResult = await authenticator.checkPasswordForUser(userName, password);
|
|
56
|
-
expect(successResult.isValid).toBeTruthy();
|
|
48
|
+
useInMemorySecurityStores(i);
|
|
49
|
+
usePasswordPolicy(i);
|
|
50
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
51
|
+
const credential = await authenticator.hasher.createCredential(userName, password);
|
|
52
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
53
|
+
expect((await authenticator.checkPasswordForUser(userName, password)).isValid).toBe(true);
|
|
57
54
|
});
|
|
58
55
|
});
|
|
59
|
-
it('
|
|
60
|
-
await usingAsync(
|
|
61
|
-
|
|
62
|
-
const password = randomString();
|
|
63
|
-
setupSecurityStores(i);
|
|
56
|
+
it('returns badUsernameOrPassword for an unknown username', async () => {
|
|
57
|
+
await usingAsync(createInjector(), async (i) => {
|
|
58
|
+
useInMemorySecurityStores(i);
|
|
64
59
|
usePasswordPolicy(i);
|
|
65
|
-
const authenticator = i.
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
expect(failResult.isValid).toBeFalsy();
|
|
72
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
60
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
61
|
+
const credential = await authenticator.hasher.createCredential('someone', 'pw');
|
|
62
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
63
|
+
const failure = (await authenticator.checkPasswordForUser('nobody', 'pw'));
|
|
64
|
+
expect(failure.isValid).toBe(false);
|
|
65
|
+
expect(failure.reason).toBe('badUsernameOrPassword');
|
|
73
66
|
});
|
|
74
67
|
});
|
|
75
|
-
it('
|
|
76
|
-
await usingAsync(
|
|
68
|
+
it('returns badUsernameOrPassword for the wrong password', async () => {
|
|
69
|
+
await usingAsync(createInjector(), async (i) => {
|
|
77
70
|
const userName = randomString();
|
|
78
|
-
|
|
79
|
-
setupSecurityStores(i);
|
|
71
|
+
useInMemorySecurityStores(i);
|
|
80
72
|
usePasswordPolicy(i);
|
|
81
|
-
const authenticator = i.
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
expect(failResult.isValid).toBeFalsy();
|
|
88
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
73
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
74
|
+
const credential = await authenticator.hasher.createCredential(userName, 'right');
|
|
75
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
76
|
+
const failure = (await authenticator.checkPasswordForUser(userName, 'wrong'));
|
|
77
|
+
expect(failure.isValid).toBe(false);
|
|
78
|
+
expect(failure.reason).toBe('badUsernameOrPassword');
|
|
89
79
|
});
|
|
90
80
|
});
|
|
91
|
-
it('
|
|
92
|
-
await usingAsync(
|
|
81
|
+
it('returns passwordExpired for a credential older than the configured expiration window', async () => {
|
|
82
|
+
await usingAsync(createInjector(), async (i) => {
|
|
93
83
|
const userName = randomString();
|
|
94
84
|
const password = randomString();
|
|
95
|
-
|
|
85
|
+
useInMemorySecurityStores(i);
|
|
96
86
|
usePasswordPolicy(i, { passwordExpirationDays: 1 });
|
|
97
|
-
const authenticator = i.
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
expect(failResult.isValid).toBeFalsy();
|
|
107
|
-
expect(failResult.reason).toBe('passwordExpired');
|
|
87
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
88
|
+
const credential = await authenticator.hasher.createCredential(userName, password);
|
|
89
|
+
const olderCreationDate = new Date();
|
|
90
|
+
olderCreationDate.setDate(olderCreationDate.getDate() - 2);
|
|
91
|
+
credential.creationDate = olderCreationDate.toISOString();
|
|
92
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
93
|
+
const failure = (await authenticator.checkPasswordForUser(userName, password));
|
|
94
|
+
expect(failure.isValid).toBe(false);
|
|
95
|
+
expect(failure.reason).toBe('passwordExpired');
|
|
108
96
|
});
|
|
109
97
|
});
|
|
110
98
|
});
|
|
111
99
|
describe('setPasswordForUser', () => {
|
|
112
|
-
it('
|
|
113
|
-
await usingAsync(
|
|
100
|
+
it('rotates the credential and keeps only the latest entry', async () => {
|
|
101
|
+
await usingAsync(createInjector(), async (i) => {
|
|
114
102
|
const userName = randomString();
|
|
115
103
|
const lastPassword = randomString();
|
|
116
104
|
const password = randomString();
|
|
117
|
-
|
|
105
|
+
useInMemorySecurityStores(i);
|
|
118
106
|
usePasswordPolicy(i);
|
|
119
|
-
const authenticator = i.
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
125
|
-
await passwordStore.add(entry);
|
|
107
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
108
|
+
const store = i.get(PasswordCredentialStore);
|
|
109
|
+
const complexitySpy = vi.spyOn(i.get(SecurityPolicyManager), 'matchPasswordComplexityRules');
|
|
110
|
+
const credential = await authenticator.hasher.createCredential(userName, lastPassword);
|
|
111
|
+
await store.add(credential);
|
|
126
112
|
await authenticator.setPasswordForUser(userName, lastPassword, password);
|
|
127
|
-
expect(
|
|
128
|
-
|
|
129
|
-
expect(
|
|
130
|
-
|
|
131
|
-
expect(successResult.isValid).toBeTruthy();
|
|
132
|
-
// Password updated, cannot use the last password
|
|
133
|
-
const failResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
134
|
-
expect(failResult.isValid).toBeFalsy();
|
|
135
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
113
|
+
expect(complexitySpy).toHaveBeenCalled();
|
|
114
|
+
expect(await store.count({ userName: { $eq: userName } })).toBe(1);
|
|
115
|
+
expect((await authenticator.checkPasswordForUser(userName, password)).isValid).toBe(true);
|
|
116
|
+
expect((await authenticator.checkPasswordForUser(userName, lastPassword)).reason).toBe('badUsernameOrPassword');
|
|
136
117
|
});
|
|
137
118
|
});
|
|
138
|
-
it('
|
|
139
|
-
await usingAsync(
|
|
119
|
+
it('throws PasswordComplexityError when the new password fails a complexity rule', async () => {
|
|
120
|
+
await usingAsync(createInjector(), async (i) => {
|
|
140
121
|
const userName = randomString();
|
|
141
122
|
const lastPassword = randomString();
|
|
142
|
-
|
|
143
|
-
setupSecurityStores(i);
|
|
123
|
+
useInMemorySecurityStores(i);
|
|
144
124
|
usePasswordPolicy(i, { passwordComplexityRules: [createMinLengthComplexityRule(3)] });
|
|
145
|
-
const authenticator = i.
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
151
|
-
await passwordStore.add(entry);
|
|
152
|
-
await expect(authenticator.setPasswordForUser(userName, lastPassword, password)).rejects.toThrowError(PasswordComplexityError);
|
|
153
|
-
expect(pmSpy).toBeCalled();
|
|
154
|
-
const entryCount = await passwordStore.count({ userName: { $eq: userName } });
|
|
155
|
-
expect(entryCount).toBe(1); // old entry should be removed
|
|
156
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
157
|
-
// Password NOT updated, can use the last password
|
|
158
|
-
expect(failResult.isValid).toBeFalsy();
|
|
159
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
160
|
-
// Password NOT updated, cannot use the new password
|
|
161
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
162
|
-
expect(successResult.isValid).toBeTruthy();
|
|
125
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
126
|
+
const credential = await authenticator.hasher.createCredential(userName, lastPassword);
|
|
127
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
128
|
+
await expect(authenticator.setPasswordForUser(userName, lastPassword, '')).rejects.toBeInstanceOf(PasswordComplexityError);
|
|
129
|
+
expect((await authenticator.checkPasswordForUser(userName, lastPassword)).isValid).toBe(true);
|
|
163
130
|
});
|
|
164
131
|
});
|
|
165
|
-
it('
|
|
166
|
-
await usingAsync(
|
|
132
|
+
it('throws UnauthenticatedError when the previous password does not verify', async () => {
|
|
133
|
+
await usingAsync(createInjector(), async (i) => {
|
|
167
134
|
const userName = randomString();
|
|
168
135
|
const lastPassword = randomString();
|
|
169
|
-
|
|
170
|
-
setupSecurityStores(i);
|
|
136
|
+
useInMemorySecurityStores(i);
|
|
171
137
|
usePasswordPolicy(i);
|
|
172
|
-
const authenticator = i.
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
178
|
-
await passwordStore.add(entry);
|
|
179
|
-
await expect(authenticator.setPasswordForUser(userName, 'someBadLastPassword', password)).rejects.toThrowError(UnauthenticatedError);
|
|
180
|
-
expect(pmSpy).toBeCalled();
|
|
181
|
-
const entryCount = await passwordStore.count({ userName: { $eq: userName } });
|
|
182
|
-
expect(entryCount).toBe(1); // old entry should be removed
|
|
183
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
184
|
-
// Password NOT updated, can use the last password
|
|
185
|
-
expect(failResult.isValid).toBeFalsy();
|
|
186
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
187
|
-
// Password NOT updated, cannot use the new password
|
|
188
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
189
|
-
expect(successResult.isValid).toBeTruthy();
|
|
138
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
139
|
+
const credential = await authenticator.hasher.createCredential(userName, lastPassword);
|
|
140
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
141
|
+
await expect(authenticator.setPasswordForUser(userName, 'wrong', randomString())).rejects.toBeInstanceOf(UnauthenticatedError);
|
|
142
|
+
expect((await authenticator.checkPasswordForUser(userName, lastPassword)).isValid).toBe(true);
|
|
190
143
|
});
|
|
191
144
|
});
|
|
192
145
|
});
|
|
193
146
|
describe('resetPasswordForUser', () => {
|
|
194
|
-
it('
|
|
195
|
-
await usingAsync(
|
|
147
|
+
it('rotates the credential when the token is valid', async () => {
|
|
148
|
+
await usingAsync(createInjector(), async (i) => {
|
|
196
149
|
const userName = randomString();
|
|
197
150
|
const lastPassword = randomString();
|
|
198
151
|
const password = randomString();
|
|
199
152
|
const token = randomString();
|
|
200
|
-
|
|
153
|
+
useInMemorySecurityStores(i);
|
|
201
154
|
usePasswordPolicy(i);
|
|
202
|
-
const authenticator = i.
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
207
|
-
await passwordStore.add(entry);
|
|
208
|
-
await resetTokenStore.add({ userName, createdAt: new Date().toISOString(), token });
|
|
155
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
156
|
+
const credential = await authenticator.hasher.createCredential(userName, lastPassword);
|
|
157
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
158
|
+
await i.get(PasswordResetTokenStore).add({ userName, createdAt: new Date().toISOString(), token });
|
|
209
159
|
await authenticator.resetPasswordForUser(token, password);
|
|
210
|
-
|
|
211
|
-
expect(
|
|
212
|
-
// Password updated, cannot use the last password
|
|
213
|
-
const failResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
214
|
-
expect(failResult.isValid).toBeFalsy();
|
|
215
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
160
|
+
expect((await authenticator.checkPasswordForUser(userName, password)).isValid).toBe(true);
|
|
161
|
+
expect((await authenticator.checkPasswordForUser(userName, lastPassword)).reason).toBe('badUsernameOrPassword');
|
|
216
162
|
});
|
|
217
163
|
});
|
|
218
|
-
it('
|
|
219
|
-
await usingAsync(
|
|
164
|
+
it('throws PasswordComplexityError and preserves the stored credential on complexity failure', async () => {
|
|
165
|
+
await usingAsync(createInjector(), async (i) => {
|
|
220
166
|
const userName = randomString();
|
|
221
167
|
const lastPassword = randomString();
|
|
222
|
-
const password = '';
|
|
223
168
|
const token = randomString();
|
|
224
|
-
|
|
169
|
+
useInMemorySecurityStores(i);
|
|
225
170
|
usePasswordPolicy(i, { passwordComplexityRules: [createMinLengthComplexityRule(3)] });
|
|
226
|
-
const authenticator = i.
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
await
|
|
232
|
-
await resetTokenStore.add({ userName, createdAt: new Date().toISOString(), token });
|
|
233
|
-
await expect(authenticator.resetPasswordForUser(token, password)).rejects.toThrowError(PasswordComplexityError);
|
|
234
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
235
|
-
expect(successResult.isValid).toBeTruthy();
|
|
236
|
-
// Password updated, cannot use the last password
|
|
237
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
238
|
-
expect(failResult.isValid).toBeFalsy();
|
|
239
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
171
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
172
|
+
const credential = await authenticator.hasher.createCredential(userName, lastPassword);
|
|
173
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
174
|
+
await i.get(PasswordResetTokenStore).add({ userName, createdAt: new Date().toISOString(), token });
|
|
175
|
+
await expect(authenticator.resetPasswordForUser(token, '')).rejects.toBeInstanceOf(PasswordComplexityError);
|
|
176
|
+
expect((await authenticator.checkPasswordForUser(userName, lastPassword)).isValid).toBe(true);
|
|
240
177
|
});
|
|
241
178
|
});
|
|
242
|
-
it('
|
|
243
|
-
await usingAsync(
|
|
244
|
-
|
|
245
|
-
const lastPassword = randomString();
|
|
246
|
-
const password = '';
|
|
247
|
-
const token = randomString();
|
|
248
|
-
setupSecurityStores(i);
|
|
179
|
+
it('throws UnauthenticatedError when the token does not exist', async () => {
|
|
180
|
+
await usingAsync(createInjector(), async (i) => {
|
|
181
|
+
useInMemorySecurityStores(i);
|
|
249
182
|
usePasswordPolicy(i);
|
|
250
|
-
const authenticator = i.
|
|
251
|
-
|
|
252
|
-
const passwordStore = i.getInstance(StoreManager).getStoreFor(PasswordCredential, 'userName');
|
|
253
|
-
const resetTokenStore = i.getInstance(StoreManager).getStoreFor(PasswordResetToken, 'token');
|
|
254
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
255
|
-
await passwordStore.add(entry);
|
|
256
|
-
await resetTokenStore.add({ userName, createdAt: new Date().toISOString(), token });
|
|
257
|
-
await expect(authenticator.resetPasswordForUser('someBadToken', password)).rejects.toThrowError(UnauthenticatedError);
|
|
258
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
259
|
-
expect(successResult.isValid).toBeTruthy();
|
|
260
|
-
// Password updated, cannot use the last password
|
|
261
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
262
|
-
expect(failResult.isValid).toBeFalsy();
|
|
263
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
183
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
184
|
+
await expect(authenticator.resetPasswordForUser('unknown', 'pw')).rejects.toBeInstanceOf(UnauthenticatedError);
|
|
264
185
|
});
|
|
265
186
|
});
|
|
266
|
-
it('
|
|
267
|
-
await usingAsync(
|
|
187
|
+
it('throws UnauthenticatedError and removes the expired token', async () => {
|
|
188
|
+
await usingAsync(createInjector(), async (i) => {
|
|
268
189
|
const userName = randomString();
|
|
269
190
|
const lastPassword = randomString();
|
|
270
|
-
const password = '';
|
|
271
191
|
const token = randomString();
|
|
272
|
-
|
|
192
|
+
useInMemorySecurityStores(i);
|
|
273
193
|
usePasswordPolicy(i, { resetTokenExpirationSeconds: 1 });
|
|
274
|
-
const authenticator = i.
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
await
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
await resetTokenStore.add({ userName, createdAt: creationDate.toISOString(), token });
|
|
283
|
-
await expect(authenticator.resetPasswordForUser(token, password)).rejects.toThrowError(UnauthenticatedError);
|
|
284
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
285
|
-
expect(successResult.isValid).toBeTruthy();
|
|
286
|
-
// Password updated, cannot use the last password
|
|
287
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
288
|
-
expect(failResult.isValid).toBeFalsy();
|
|
289
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
290
|
-
const tokenCount = await resetTokenStore.count();
|
|
291
|
-
expect(tokenCount).toBe(0);
|
|
194
|
+
const authenticator = i.get(PasswordAuthenticator);
|
|
195
|
+
const credential = await authenticator.hasher.createCredential(userName, lastPassword);
|
|
196
|
+
await i.get(PasswordCredentialStore).add(credential);
|
|
197
|
+
const pastCreatedAt = new Date();
|
|
198
|
+
pastCreatedAt.setDate(pastCreatedAt.getDate() - 2);
|
|
199
|
+
await i.get(PasswordResetTokenStore).add({ userName, createdAt: pastCreatedAt.toISOString(), token });
|
|
200
|
+
await expect(authenticator.resetPasswordForUser(token, randomString())).rejects.toBeInstanceOf(UnauthenticatedError);
|
|
201
|
+
expect(await i.get(PasswordResetTokenStore).count()).toBe(0);
|
|
292
202
|
});
|
|
293
203
|
});
|
|
294
204
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-authenticator.spec.js","sourceRoot":"","sources":["../src/password-authenticator.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"password-authenticator.spec.js","sourceRoot":"","sources":["../src/password-authenticator.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type StoreToken } from '@furystack/core';
|
|
2
|
+
import { type DataSetToken } from '@furystack/repository';
|
|
3
|
+
import { PasswordCredential } from './models/password-credential.js';
|
|
4
|
+
import { PasswordResetToken } from './models/password-reset-token.js';
|
|
5
|
+
/**
|
|
6
|
+
* Error thrown by the default factories of {@link PasswordCredentialStore}
|
|
7
|
+
* and {@link PasswordResetTokenStore} when they are resolved without a
|
|
8
|
+
* caller-provided override.
|
|
9
|
+
*
|
|
10
|
+
* Password credentials and reset tokens **must** survive process restarts,
|
|
11
|
+
* so security refuses to fall back to an in-memory store. Applications
|
|
12
|
+
* must bind a persistent implementation before resolving the
|
|
13
|
+
* {@link PasswordAuthenticator}.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SecurityStoreNotConfiguredError extends Error {
|
|
16
|
+
constructor(storeName: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Store token for persisted {@link PasswordCredential} records. The default
|
|
20
|
+
* factory deliberately throws — applications are expected to rebind this
|
|
21
|
+
* token on their root injector with a persistent backing store before
|
|
22
|
+
* resolving any service that depends on it.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* injector.bind(PasswordCredentialStore, () => myPersistentCredentialStore)
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare const PasswordCredentialStore: StoreToken<PasswordCredential, 'userName'>;
|
|
30
|
+
/**
|
|
31
|
+
* Store token for persisted {@link PasswordResetToken} records. Shares the
|
|
32
|
+
* throw-by-default contract with {@link PasswordCredentialStore}.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* injector.bind(PasswordResetTokenStore, () => myPersistentTokenStore)
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const PasswordResetTokenStore: StoreToken<PasswordResetToken, 'token'>;
|
|
40
|
+
/**
|
|
41
|
+
* Data set token over {@link PasswordCredentialStore}. The security services
|
|
42
|
+
* route all credential I/O through this dataset so authorization, hooks and
|
|
43
|
+
* change events can be layered on top of the raw store.
|
|
44
|
+
*/
|
|
45
|
+
export declare const PasswordCredentialDataSet: DataSetToken<PasswordCredential, 'userName'>;
|
|
46
|
+
/**
|
|
47
|
+
* Data set token over {@link PasswordResetTokenStore}.
|
|
48
|
+
*/
|
|
49
|
+
export declare const PasswordResetTokenDataSet: DataSetToken<PasswordResetToken, 'token'>;
|
|
50
|
+
//# sourceMappingURL=password-credential-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-credential-store.d.ts","sourceRoot":"","sources":["../src/password-credential-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE;;;;;;;;;GASG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,SAAS,EAAE,MAAM;CAM9B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,EAAE,UAAU,CAAC,kBAAkB,EAAE,UAAU,CAO7E,CAAA;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,EAAE,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAO1E,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,YAAY,CAAC,kBAAkB,EAAE,UAAU,CAGjF,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAG9E,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { defineStore } from '@furystack/core';
|
|
2
|
+
import { defineDataSet } from '@furystack/repository';
|
|
3
|
+
import { PasswordCredential } from './models/password-credential.js';
|
|
4
|
+
import { PasswordResetToken } from './models/password-reset-token.js';
|
|
5
|
+
/**
|
|
6
|
+
* Error thrown by the default factories of {@link PasswordCredentialStore}
|
|
7
|
+
* and {@link PasswordResetTokenStore} when they are resolved without a
|
|
8
|
+
* caller-provided override.
|
|
9
|
+
*
|
|
10
|
+
* Password credentials and reset tokens **must** survive process restarts,
|
|
11
|
+
* so security refuses to fall back to an in-memory store. Applications
|
|
12
|
+
* must bind a persistent implementation before resolving the
|
|
13
|
+
* {@link PasswordAuthenticator}.
|
|
14
|
+
*/
|
|
15
|
+
export class SecurityStoreNotConfiguredError extends Error {
|
|
16
|
+
constructor(storeName) {
|
|
17
|
+
super(`Security store '${storeName}' has not been configured. Bind a persistent PhysicalStore for ${storeName} before resolving the PasswordAuthenticator.`);
|
|
18
|
+
this.name = 'SecurityStoreNotConfiguredError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Store token for persisted {@link PasswordCredential} records. The default
|
|
23
|
+
* factory deliberately throws — applications are expected to rebind this
|
|
24
|
+
* token on their root injector with a persistent backing store before
|
|
25
|
+
* resolving any service that depends on it.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* injector.bind(PasswordCredentialStore, () => myPersistentCredentialStore)
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export const PasswordCredentialStore = defineStore({
|
|
33
|
+
name: 'furystack/security/PasswordCredentialStore',
|
|
34
|
+
model: PasswordCredential,
|
|
35
|
+
primaryKey: 'userName',
|
|
36
|
+
factory: () => {
|
|
37
|
+
throw new SecurityStoreNotConfiguredError('PasswordCredentialStore');
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Store token for persisted {@link PasswordResetToken} records. Shares the
|
|
42
|
+
* throw-by-default contract with {@link PasswordCredentialStore}.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* injector.bind(PasswordResetTokenStore, () => myPersistentTokenStore)
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export const PasswordResetTokenStore = defineStore({
|
|
50
|
+
name: 'furystack/security/PasswordResetTokenStore',
|
|
51
|
+
model: PasswordResetToken,
|
|
52
|
+
primaryKey: 'token',
|
|
53
|
+
factory: () => {
|
|
54
|
+
throw new SecurityStoreNotConfiguredError('PasswordResetTokenStore');
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* Data set token over {@link PasswordCredentialStore}. The security services
|
|
59
|
+
* route all credential I/O through this dataset so authorization, hooks and
|
|
60
|
+
* change events can be layered on top of the raw store.
|
|
61
|
+
*/
|
|
62
|
+
export const PasswordCredentialDataSet = defineDataSet({
|
|
63
|
+
name: 'furystack/security/PasswordCredentialDataSet',
|
|
64
|
+
store: PasswordCredentialStore,
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Data set token over {@link PasswordResetTokenStore}.
|
|
68
|
+
*/
|
|
69
|
+
export const PasswordResetTokenDataSet = defineDataSet({
|
|
70
|
+
name: 'furystack/security/PasswordResetTokenDataSet',
|
|
71
|
+
store: PasswordResetTokenStore,
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=password-credential-store.js.map
|