@furystack/security 2.1.16 → 3.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/package.json +27 -12
- package/src/helpers.ts +0 -1
- package/src/password-authenticator.spec.ts +4 -3
- package/src/password-authenticator.ts +1 -3
- package/src/password-complexity-rules/contains-lowercase.spec.ts +1 -0
- package/src/password-complexity-rules/contains-uppercase.spec.ts +1 -0
- package/src/password-complexity-rules/max-length.spec.ts +1 -0
- package/src/password-complexity-rules/min-length.spec.ts +1 -0
- package/src/security-policy-manager.spec.ts +1 -0
- package/types/helpers.d.ts +0 -1
- package/types/helpers.d.ts.map +1 -1
- package/types/password-authenticator.d.ts +1 -3
- package/types/password-authenticator.d.ts.map +1 -1
- package/dist/crypto-password-hasher.js +0 -44
- package/dist/crypto-password-hasher.js.map +0 -1
- package/dist/errors/index.js +0 -20
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/password-complexity-error.js +0 -15
- package/dist/errors/password-complexity-error.js.map +0 -1
- package/dist/errors/unauthenticated-error.js +0 -10
- package/dist/errors/unauthenticated-error.js.map +0 -1
- package/dist/helpers.js +0 -17
- package/dist/helpers.js.map +0 -1
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -1
- package/dist/models/index.js +0 -22
- package/dist/models/index.js.map +0 -1
- package/dist/models/password-check-result.js +0 -3
- package/dist/models/password-check-result.js.map +0 -1
- package/dist/models/password-complexity-result.js +0 -3
- package/dist/models/password-complexity-result.js.map +0 -1
- package/dist/models/password-complexity-rule.js +0 -3
- package/dist/models/password-complexity-rule.js.map +0 -1
- package/dist/models/password-credential.js +0 -10
- package/dist/models/password-credential.js.map +0 -1
- package/dist/models/password-reset-token.js +0 -7
- package/dist/models/password-reset-token.js.map +0 -1
- package/dist/password-authenticator.js +0 -108
- package/dist/password-authenticator.js.map +0 -1
- package/dist/password-authenticator.spec.js +0 -292
- package/dist/password-authenticator.spec.js.map +0 -1
- package/dist/password-complexity-rules/contains-lowercase.js +0 -29
- package/dist/password-complexity-rules/contains-lowercase.js.map +0 -1
- package/dist/password-complexity-rules/contains-lowercase.spec.js +0 -28
- package/dist/password-complexity-rules/contains-lowercase.spec.js.map +0 -1
- package/dist/password-complexity-rules/contains-uppercase.js +0 -27
- package/dist/password-complexity-rules/contains-uppercase.js.map +0 -1
- package/dist/password-complexity-rules/contains-uppercase.spec.js +0 -28
- package/dist/password-complexity-rules/contains-uppercase.spec.js.map +0 -1
- package/dist/password-complexity-rules/index.js +0 -21
- package/dist/password-complexity-rules/index.js.map +0 -1
- package/dist/password-complexity-rules/max-length.js +0 -19
- package/dist/password-complexity-rules/max-length.js.map +0 -1
- package/dist/password-complexity-rules/max-length.spec.js +0 -17
- package/dist/password-complexity-rules/max-length.spec.js.map +0 -1
- package/dist/password-complexity-rules/min-length.js +0 -19
- package/dist/password-complexity-rules/min-length.js.map +0 -1
- package/dist/password-complexity-rules/min-length.spec.js +0 -17
- package/dist/password-complexity-rules/min-length.spec.js.map +0 -1
- package/dist/password-hasher.js +0 -23
- package/dist/password-hasher.js.map +0 -1
- package/dist/security-policy-manager.js +0 -60
- package/dist/security-policy-manager.js.map +0 -1
- package/dist/security-policy-manager.spec.js +0 -18
- package/dist/security-policy-manager.spec.js.map +0 -1
- package/dist/security-policy.js +0 -40
- package/dist/security-policy.js.map +0 -1
- package/types/password-authenticator.spec.d.ts +0 -2
- package/types/password-authenticator.spec.d.ts.map +0 -1
- package/types/password-complexity-rules/contains-lowercase.spec.d.ts +0 -2
- package/types/password-complexity-rules/contains-lowercase.spec.d.ts.map +0 -1
- package/types/password-complexity-rules/contains-uppercase.spec.d.ts +0 -2
- package/types/password-complexity-rules/contains-uppercase.spec.d.ts.map +0 -1
- package/types/password-complexity-rules/max-length.spec.d.ts +0 -2
- package/types/password-complexity-rules/max-length.spec.d.ts.map +0 -1
- package/types/password-complexity-rules/min-length.spec.d.ts +0 -2
- package/types/password-complexity-rules/min-length.spec.d.ts.map +0 -1
- package/types/security-policy-manager.spec.d.ts +0 -2
- package/types/security-policy-manager.spec.d.ts.map +0 -1
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const core_1 = require("@furystack/core");
|
|
4
|
-
const inject_1 = require("@furystack/inject");
|
|
5
|
-
const utils_1 = require("@furystack/utils");
|
|
6
|
-
const helpers_1 = require("./helpers");
|
|
7
|
-
const models_1 = require("./models");
|
|
8
|
-
const password_authenticator_1 = require("./password-authenticator");
|
|
9
|
-
const password_complexity_rules_1 = require("./password-complexity-rules");
|
|
10
|
-
const security_policy_manager_1 = require("./security-policy-manager");
|
|
11
|
-
const errors_1 = require("./errors");
|
|
12
|
-
const crypto_1 = require("crypto");
|
|
13
|
-
const randomString = () => (0, crypto_1.randomBytes)(32).toString('hex');
|
|
14
|
-
describe('PasswordAuthenticator', () => {
|
|
15
|
-
it('Should be instantiated', () => {
|
|
16
|
-
(0, utils_1.using)(new inject_1.Injector(), (i) => {
|
|
17
|
-
const auth = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
18
|
-
expect(auth).toBeInstanceOf(password_authenticator_1.PasswordAuthenticator);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
it('Should inherit policy from the extension method', () => {
|
|
22
|
-
(0, utils_1.using)(new inject_1.Injector(), (i) => {
|
|
23
|
-
(0, helpers_1.usePasswordPolicy)(i, {
|
|
24
|
-
passwordComplexityRules: [(0, password_complexity_rules_1.createMinLengthComplexityRule)(3)],
|
|
25
|
-
});
|
|
26
|
-
const auth = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
27
|
-
expect(auth).toBeInstanceOf(password_authenticator_1.PasswordAuthenticator);
|
|
28
|
-
expect(auth.policyManager.policy.passwordComplexityRules[0].name).toBe('minLength');
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
describe('checkPasswordForUser', () => {
|
|
32
|
-
it('Should return a truthy value for valid username and password', async () => {
|
|
33
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
34
|
-
const userName = randomString();
|
|
35
|
-
const password = randomString();
|
|
36
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
37
|
-
(0, helpers_1.usePasswordPolicy)(i, {});
|
|
38
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
39
|
-
const hasher = authenticator.getHasher();
|
|
40
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
41
|
-
const entry = await hasher.createCredential(userName, password);
|
|
42
|
-
await passwordStore.add(entry);
|
|
43
|
-
const successResult = await authenticator.checkPasswordForUser(userName, password);
|
|
44
|
-
expect(successResult.isValid).toBeTruthy();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
it('Should return a falsy value for invalid username', async () => {
|
|
48
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
49
|
-
const userName = randomString();
|
|
50
|
-
const password = randomString();
|
|
51
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
52
|
-
(0, helpers_1.usePasswordPolicy)(i);
|
|
53
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
54
|
-
const hasher = authenticator.getHasher();
|
|
55
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
56
|
-
const entry = await hasher.createCredential(userName, password);
|
|
57
|
-
await passwordStore.add(entry);
|
|
58
|
-
const failResult = await authenticator.checkPasswordForUser('invalidUsername', password);
|
|
59
|
-
expect(failResult.isValid).toBeFalsy();
|
|
60
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
it('Should return a falsy value for invalid password', async () => {
|
|
64
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
65
|
-
const userName = randomString();
|
|
66
|
-
const password = randomString();
|
|
67
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
68
|
-
(0, helpers_1.usePasswordPolicy)(i);
|
|
69
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
70
|
-
const hasher = authenticator.getHasher();
|
|
71
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
72
|
-
const entry = await hasher.createCredential(userName, password);
|
|
73
|
-
await passwordStore.add(entry);
|
|
74
|
-
const failResult = await authenticator.checkPasswordForUser(userName, 'someInvalidPassword');
|
|
75
|
-
expect(failResult.isValid).toBeFalsy();
|
|
76
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
it('Should return a falsy value for an expired password', async () => {
|
|
80
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
81
|
-
const userName = randomString();
|
|
82
|
-
const password = randomString();
|
|
83
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
84
|
-
(0, helpers_1.usePasswordPolicy)(i, { passwordExpirationDays: 1 });
|
|
85
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
86
|
-
const hasher = authenticator.getHasher();
|
|
87
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
88
|
-
const entry = await hasher.createCredential(userName, password);
|
|
89
|
-
const creationDate = new Date();
|
|
90
|
-
creationDate.setDate(creationDate.getDate() - 2);
|
|
91
|
-
entry.creationDate = creationDate.toISOString();
|
|
92
|
-
await passwordStore.add(entry);
|
|
93
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
94
|
-
expect(failResult.isValid).toBeFalsy();
|
|
95
|
-
expect(failResult.reason).toBe('passwordExpired');
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe('setPasswordForUser', () => {
|
|
100
|
-
it('Should be able to set the password for the user using the last password', async () => {
|
|
101
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
102
|
-
const userName = randomString();
|
|
103
|
-
const lastPassword = randomString();
|
|
104
|
-
const password = randomString();
|
|
105
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
106
|
-
(0, helpers_1.usePasswordPolicy)(i);
|
|
107
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
108
|
-
const hasher = authenticator.getHasher();
|
|
109
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
110
|
-
const policyManager = i.getInstance(security_policy_manager_1.SecurityPolicyManager);
|
|
111
|
-
const pmSpy = jest.spyOn(policyManager, 'matchPasswordComplexityRules');
|
|
112
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
113
|
-
await passwordStore.add(entry);
|
|
114
|
-
await authenticator.setPasswordForUser(userName, lastPassword, password);
|
|
115
|
-
expect(pmSpy).toBeCalled();
|
|
116
|
-
const entryCount = await passwordStore.count({ userName: { $eq: userName } });
|
|
117
|
-
expect(entryCount).toBe(1); // old entry should be removed
|
|
118
|
-
const successResult = await authenticator.checkPasswordForUser(userName, password);
|
|
119
|
-
expect(successResult.isValid).toBeTruthy();
|
|
120
|
-
// Password updated, cannot use the last password
|
|
121
|
-
const failResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
122
|
-
expect(failResult.isValid).toBeFalsy();
|
|
123
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
it('Should throw PasswordComplexityError if the complexity rules are not respected', async () => {
|
|
127
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
128
|
-
const userName = randomString();
|
|
129
|
-
const lastPassword = randomString();
|
|
130
|
-
const password = '';
|
|
131
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
132
|
-
(0, helpers_1.usePasswordPolicy)(i, { passwordComplexityRules: [(0, password_complexity_rules_1.createMinLengthComplexityRule)(3)] });
|
|
133
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
134
|
-
const hasher = authenticator.getHasher();
|
|
135
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
136
|
-
const policyManager = i.getInstance(security_policy_manager_1.SecurityPolicyManager);
|
|
137
|
-
const pmSpy = jest.spyOn(policyManager, 'matchPasswordComplexityRules');
|
|
138
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
139
|
-
await passwordStore.add(entry);
|
|
140
|
-
await expect(authenticator.setPasswordForUser(userName, lastPassword, password)).rejects.toThrowError(errors_1.PasswordComplexityError);
|
|
141
|
-
expect(pmSpy).toBeCalled();
|
|
142
|
-
const entryCount = await passwordStore.count({ userName: { $eq: userName } });
|
|
143
|
-
expect(entryCount).toBe(1); // old entry should be removed
|
|
144
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
145
|
-
// Password NOT updated, can use the last password
|
|
146
|
-
expect(failResult.isValid).toBeFalsy();
|
|
147
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
148
|
-
// Password NOT updated, cannot use the new password
|
|
149
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
150
|
-
expect(successResult.isValid).toBeTruthy();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
it('Should throw UnauthenticatedError if the last password is not valid', async () => {
|
|
154
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
155
|
-
const userName = randomString();
|
|
156
|
-
const lastPassword = randomString();
|
|
157
|
-
const password = randomString();
|
|
158
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' })).addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }));
|
|
159
|
-
(0, helpers_1.usePasswordPolicy)(i);
|
|
160
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
161
|
-
const hasher = authenticator.getHasher();
|
|
162
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
163
|
-
const policyManager = i.getInstance(security_policy_manager_1.SecurityPolicyManager);
|
|
164
|
-
const pmSpy = jest.spyOn(policyManager, 'matchPasswordComplexityRules');
|
|
165
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
166
|
-
await passwordStore.add(entry);
|
|
167
|
-
await expect(authenticator.setPasswordForUser(userName, 'someBadLastPassword', password)).rejects.toThrowError(errors_1.UnauthenticatedError);
|
|
168
|
-
expect(pmSpy).toBeCalled();
|
|
169
|
-
const entryCount = await passwordStore.count({ userName: { $eq: userName } });
|
|
170
|
-
expect(entryCount).toBe(1); // old entry should be removed
|
|
171
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
172
|
-
// Password NOT updated, can use the last password
|
|
173
|
-
expect(failResult.isValid).toBeFalsy();
|
|
174
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
175
|
-
// Password NOT updated, cannot use the new password
|
|
176
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
177
|
-
expect(successResult.isValid).toBeTruthy();
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe('resetPasswordForUser', () => {
|
|
182
|
-
it('Should reset the password with the valid token', async () => {
|
|
183
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
184
|
-
const userName = randomString();
|
|
185
|
-
const lastPassword = randomString();
|
|
186
|
-
const password = randomString();
|
|
187
|
-
const token = randomString();
|
|
188
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' }))
|
|
189
|
-
.addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }))
|
|
190
|
-
.addStore(new core_1.InMemoryStore({ model: models_1.PasswordResetToken, primaryKey: 'token' }));
|
|
191
|
-
(0, helpers_1.usePasswordPolicy)(i);
|
|
192
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
193
|
-
const hasher = authenticator.getHasher();
|
|
194
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
195
|
-
const resetTokenStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordResetToken, 'token');
|
|
196
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
197
|
-
await passwordStore.add(entry);
|
|
198
|
-
await resetTokenStore.add({ userName, createdAt: new Date().toISOString(), token });
|
|
199
|
-
await authenticator.resetPasswordForUser(token, password);
|
|
200
|
-
const successResult = await authenticator.checkPasswordForUser(userName, password);
|
|
201
|
-
expect(successResult.isValid).toBeTruthy();
|
|
202
|
-
// Password updated, cannot use the last password
|
|
203
|
-
const failResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
204
|
-
expect(failResult.isValid).toBeFalsy();
|
|
205
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
it('Should throw PasswordComplexityError if the complexity rules are not respected', async () => {
|
|
209
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
210
|
-
const userName = randomString();
|
|
211
|
-
const lastPassword = randomString();
|
|
212
|
-
const password = '';
|
|
213
|
-
const token = randomString();
|
|
214
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' }))
|
|
215
|
-
.addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }))
|
|
216
|
-
.addStore(new core_1.InMemoryStore({ model: models_1.PasswordResetToken, primaryKey: 'token' }));
|
|
217
|
-
(0, helpers_1.usePasswordPolicy)(i, { passwordComplexityRules: [(0, password_complexity_rules_1.createMinLengthComplexityRule)(3)] });
|
|
218
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
219
|
-
const hasher = authenticator.getHasher();
|
|
220
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
221
|
-
const resetTokenStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordResetToken, 'token');
|
|
222
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
223
|
-
await passwordStore.add(entry);
|
|
224
|
-
await resetTokenStore.add({ userName, createdAt: new Date().toISOString(), token });
|
|
225
|
-
await expect(authenticator.resetPasswordForUser(token, password)).rejects.toThrowError(errors_1.PasswordComplexityError);
|
|
226
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
227
|
-
expect(successResult.isValid).toBeTruthy();
|
|
228
|
-
// Password updated, cannot use the last password
|
|
229
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
230
|
-
expect(failResult.isValid).toBeFalsy();
|
|
231
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
it('Should throw UnauthenticatedError if the token is not valid', async () => {
|
|
235
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
236
|
-
const userName = randomString();
|
|
237
|
-
const lastPassword = randomString();
|
|
238
|
-
const password = '';
|
|
239
|
-
const token = randomString();
|
|
240
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' }))
|
|
241
|
-
.addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }))
|
|
242
|
-
.addStore(new core_1.InMemoryStore({ model: models_1.PasswordResetToken, primaryKey: 'token' }));
|
|
243
|
-
(0, helpers_1.usePasswordPolicy)(i);
|
|
244
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
245
|
-
const hasher = authenticator.getHasher();
|
|
246
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
247
|
-
const resetTokenStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordResetToken, 'token');
|
|
248
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
249
|
-
await passwordStore.add(entry);
|
|
250
|
-
await resetTokenStore.add({ userName, createdAt: new Date().toISOString(), token });
|
|
251
|
-
await expect(authenticator.resetPasswordForUser('someBadToken', password)).rejects.toThrowError(errors_1.UnauthenticatedError);
|
|
252
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
253
|
-
expect(successResult.isValid).toBeTruthy();
|
|
254
|
-
// Password updated, cannot use the last password
|
|
255
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
256
|
-
expect(failResult.isValid).toBeFalsy();
|
|
257
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
it('Should throw UnauthenticatedError and clean up token if the token has been expired', async () => {
|
|
261
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
262
|
-
const userName = randomString();
|
|
263
|
-
const lastPassword = randomString();
|
|
264
|
-
const password = '';
|
|
265
|
-
const token = randomString();
|
|
266
|
-
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: models_1.PasswordCredential, primaryKey: 'userName' }))
|
|
267
|
-
.addStore(new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' }))
|
|
268
|
-
.addStore(new core_1.InMemoryStore({ model: models_1.PasswordResetToken, primaryKey: 'token' }));
|
|
269
|
-
(0, helpers_1.usePasswordPolicy)(i, { resetTokenExpirationSeconds: 1 });
|
|
270
|
-
const authenticator = i.getInstance(password_authenticator_1.PasswordAuthenticator);
|
|
271
|
-
const hasher = authenticator.getHasher();
|
|
272
|
-
const passwordStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordCredential, 'userName');
|
|
273
|
-
const resetTokenStore = i.getInstance(core_1.StoreManager).getStoreFor(models_1.PasswordResetToken, 'token');
|
|
274
|
-
const entry = await hasher.createCredential(userName, lastPassword);
|
|
275
|
-
await passwordStore.add(entry);
|
|
276
|
-
const creationDate = new Date();
|
|
277
|
-
creationDate.setDate(creationDate.getDate() - 2);
|
|
278
|
-
await resetTokenStore.add({ userName, createdAt: creationDate.toISOString(), token });
|
|
279
|
-
await expect(authenticator.resetPasswordForUser(token, password)).rejects.toThrowError(errors_1.UnauthenticatedError);
|
|
280
|
-
const successResult = await authenticator.checkPasswordForUser(userName, lastPassword);
|
|
281
|
-
expect(successResult.isValid).toBeTruthy();
|
|
282
|
-
// Password updated, cannot use the last password
|
|
283
|
-
const failResult = await authenticator.checkPasswordForUser(userName, password);
|
|
284
|
-
expect(failResult.isValid).toBeFalsy();
|
|
285
|
-
expect(failResult.reason).toBe('badUsernameOrPassword');
|
|
286
|
-
const tokenCount = await resetTokenStore.count();
|
|
287
|
-
expect(tokenCount).toBe(0);
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
//# sourceMappingURL=password-authenticator.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"password-authenticator.spec.js","sourceRoot":"","sources":["../src/password-authenticator.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createContainsLowercasePolicy = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @param lowerCaseCount The minimum lower case characters length
|
|
6
|
-
* @returns The created Password Policy object
|
|
7
|
-
*/
|
|
8
|
-
const createContainsLowercasePolicy = (lowerCaseCount) => ({
|
|
9
|
-
name: 'containsLowercase',
|
|
10
|
-
check: async (passwordString) => {
|
|
11
|
-
const actualLowerCaseCount = passwordString.length >= lowerCaseCount
|
|
12
|
-
? passwordString
|
|
13
|
-
.normalize('NFD')
|
|
14
|
-
.replace(/\p{Diacritic}/gu, '')
|
|
15
|
-
.replace(/[^a-z]/g, '').length
|
|
16
|
-
: 0;
|
|
17
|
-
const success = actualLowerCaseCount >= lowerCaseCount;
|
|
18
|
-
if (success) {
|
|
19
|
-
return { success };
|
|
20
|
-
}
|
|
21
|
-
return {
|
|
22
|
-
success,
|
|
23
|
-
message: `The password should contain at least ${lowerCaseCount} lower case characters`,
|
|
24
|
-
rule: 'containsLowercase',
|
|
25
|
-
};
|
|
26
|
-
},
|
|
27
|
-
});
|
|
28
|
-
exports.createContainsLowercasePolicy = createContainsLowercasePolicy;
|
|
29
|
-
//# sourceMappingURL=contains-lowercase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contains-lowercase.js","sourceRoot":"","sources":["../../src/password-complexity-rules/contains-lowercase.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACI,MAAM,6BAA6B,GAAG,CAAC,cAAsB,EAA0B,EAAE,CAAC,CAAC;IAChG,IAAI,EAAE,mBAA4B;IAClC,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,oBAAoB,GACxB,cAAc,CAAC,MAAM,IAAI,cAAc;YACrC,CAAC,CAAC,cAAc;iBACX,SAAS,CAAC,KAAK,CAAC;iBAChB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;iBAC9B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM;YAClC,CAAC,CAAC,CAAC,CAAA;QACP,MAAM,OAAO,GAAG,oBAAoB,IAAI,cAAc,CAAA;QACtD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO;YACL,OAAO;YACP,OAAO,EAAE,wCAAwC,cAAc,wBAAwB;YACvF,IAAI,EAAE,mBAAmB;SAC1B,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AApBW,QAAA,6BAA6B,iCAoBxC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const contains_lowercase_1 = require("./contains-lowercase");
|
|
4
|
-
describe('Contains-lowercase', () => {
|
|
5
|
-
it('Should fail if the password is shorter than expected', async () => {
|
|
6
|
-
const policy = (0, contains_lowercase_1.createContainsLowercasePolicy)(3);
|
|
7
|
-
const result = await policy.check('');
|
|
8
|
-
expect(result.success).toBe(false);
|
|
9
|
-
expect(result.message).toBe('The password should contain at least 3 lower case characters');
|
|
10
|
-
});
|
|
11
|
-
it('Should fail if the password does not contain enough lowercase chars', async () => {
|
|
12
|
-
const policy = (0, contains_lowercase_1.createContainsLowercasePolicy)(3);
|
|
13
|
-
const result = await policy.check('ASD12345(=/!+');
|
|
14
|
-
expect(result.success).toBe(false);
|
|
15
|
-
expect(result.message).toBe('The password should contain at least 3 lower case characters');
|
|
16
|
-
});
|
|
17
|
-
it('Should succeed if the password contains enough lowercase chars', async () => {
|
|
18
|
-
const policy = (0, contains_lowercase_1.createContainsLowercasePolicy)(3);
|
|
19
|
-
const result = await policy.check('asd');
|
|
20
|
-
expect(result.success).toBe(true);
|
|
21
|
-
});
|
|
22
|
-
it('Should succeed if the password contains enough lowercase chars supporting special ones', async () => {
|
|
23
|
-
const policy = (0, contains_lowercase_1.createContainsLowercasePolicy)(3);
|
|
24
|
-
const result = await policy.check('éáő');
|
|
25
|
-
expect(result.success).toBe(true);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=contains-lowercase.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contains-lowercase.spec.js","sourceRoot":"","sources":["../../src/password-complexity-rules/contains-lowercase.spec.ts"],"names":[],"mappings":";;AACA,6DAAoE;AAEpE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAE,MAAyC,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7D,8DAA8D,CAC/D,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAE,MAAyC,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7D,8DAA8D,CAC/D,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createContainsUppercasePolicy = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @param upperCaseCount The minimum upper case characters length
|
|
6
|
-
* @returns The created Password Policy object
|
|
7
|
-
*/
|
|
8
|
-
const createContainsUppercasePolicy = (upperCaseCount) => ({
|
|
9
|
-
name: 'containsUppercase',
|
|
10
|
-
check: async (passwordString) => {
|
|
11
|
-
const actualUpperCaseCount = passwordString
|
|
12
|
-
.normalize('NFD')
|
|
13
|
-
.replace(/\p{Diacritic}/gu, '')
|
|
14
|
-
.replace(/[^A-Z]/g, '').length;
|
|
15
|
-
const success = actualUpperCaseCount >= upperCaseCount;
|
|
16
|
-
if (success) {
|
|
17
|
-
return { success };
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
success,
|
|
21
|
-
message: `The password should contain at least ${upperCaseCount} upper case characters`,
|
|
22
|
-
rule: 'containsUppercase',
|
|
23
|
-
};
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
exports.createContainsUppercasePolicy = createContainsUppercasePolicy;
|
|
27
|
-
//# sourceMappingURL=contains-uppercase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contains-uppercase.js","sourceRoot":"","sources":["../../src/password-complexity-rules/contains-uppercase.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACI,MAAM,6BAA6B,GAAG,CAAC,cAAsB,EAA0B,EAAE,CAAC,CAAC;IAChG,IAAI,EAAE,mBAA4B;IAClC,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,oBAAoB,GAAG,cAAc;aACxC,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;QAChC,MAAM,OAAO,GAAG,oBAAoB,IAAI,cAAc,CAAA;QACtD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO;YACL,OAAO;YACP,OAAO,EAAE,wCAAwC,cAAc,wBAAwB;YACvF,IAAI,EAAE,mBAAmB;SAC1B,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AAjBW,QAAA,6BAA6B,iCAiBxC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const contains_uppercase_1 = require("./contains-uppercase");
|
|
4
|
-
describe('Contains-uppercase', () => {
|
|
5
|
-
it('Should fail if the password is shorter than expected', async () => {
|
|
6
|
-
const policy = (0, contains_uppercase_1.createContainsUppercasePolicy)(3);
|
|
7
|
-
const result = await policy.check('');
|
|
8
|
-
expect(result.success).toBe(false);
|
|
9
|
-
expect(result.message).toBe('The password should contain at least 3 upper case characters');
|
|
10
|
-
});
|
|
11
|
-
it('Should fail if the password does not contain enough lowercase chars', async () => {
|
|
12
|
-
const policy = (0, contains_uppercase_1.createContainsUppercasePolicy)(3);
|
|
13
|
-
const result = await policy.check('asd12345(=/!+');
|
|
14
|
-
expect(result.success).toBe(false);
|
|
15
|
-
expect(result.message).toBe('The password should contain at least 3 upper case characters');
|
|
16
|
-
});
|
|
17
|
-
it('Should succeed if the password contains enough lowercase chars', async () => {
|
|
18
|
-
const policy = (0, contains_uppercase_1.createContainsUppercasePolicy)(3);
|
|
19
|
-
const result = await policy.check('ASD');
|
|
20
|
-
expect(result.success).toBe(true);
|
|
21
|
-
});
|
|
22
|
-
it('Should succeed if the password contains enough lowercase chars supporting special ones', async () => {
|
|
23
|
-
const policy = (0, contains_uppercase_1.createContainsUppercasePolicy)(3);
|
|
24
|
-
const result = await policy.check('ÉÁÍ');
|
|
25
|
-
expect(result.success).toBe(true);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=contains-uppercase.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contains-uppercase.spec.js","sourceRoot":"","sources":["../../src/password-complexity-rules/contains-uppercase.spec.ts"],"names":[],"mappings":";;AACA,6DAAoE;AAEpE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAE,MAAyC,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7D,8DAA8D,CAC/D,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAE,MAAyC,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7D,8DAA8D,CAC/D,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,MAAM,MAAM,GAAG,IAAA,kDAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./contains-lowercase"), exports);
|
|
18
|
-
__exportStar(require("./contains-uppercase"), exports);
|
|
19
|
-
__exportStar(require("./max-length"), exports);
|
|
20
|
-
__exportStar(require("./min-length"), exports);
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/password-complexity-rules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAoC;AACpC,uDAAoC;AACpC,+CAA4B;AAC5B,+CAA4B"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMaxLengthComplexityRule = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @param maxLength The maximum password length
|
|
6
|
-
* @returns The created Password Policy object
|
|
7
|
-
*/
|
|
8
|
-
const createMaxLengthComplexityRule = (maxLength) => ({
|
|
9
|
-
name: 'maxLength',
|
|
10
|
-
check: async (passwordString) => {
|
|
11
|
-
const success = passwordString.length <= maxLength;
|
|
12
|
-
if (success) {
|
|
13
|
-
return { success };
|
|
14
|
-
}
|
|
15
|
-
return { success, message: `The password has to be maximum ${maxLength} character length`, rule: 'maxLength' };
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
exports.createMaxLengthComplexityRule = createMaxLengthComplexityRule;
|
|
19
|
-
//# sourceMappingURL=max-length.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"max-length.js","sourceRoot":"","sources":["../../src/password-complexity-rules/max-length.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACI,MAAM,6BAA6B,GAAG,CAAC,SAAiB,EAA0B,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,WAAoB;IAC1B,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,IAAI,SAAS,CAAA;QAClD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kCAAkC,SAAS,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAChH,CAAC;CACF,CAAC,CAAA;AATW,QAAA,6BAA6B,iCASxC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const max_length_1 = require("./max-length");
|
|
4
|
-
describe('max-length', () => {
|
|
5
|
-
it('Should fail if the password is longer than expected', async () => {
|
|
6
|
-
const policy = (0, max_length_1.createMaxLengthComplexityRule)(3);
|
|
7
|
-
const result = await policy.check('asdasd123');
|
|
8
|
-
expect(result.success).toBe(false);
|
|
9
|
-
expect(result.message).toBe('The password has to be maximum 3 character length');
|
|
10
|
-
});
|
|
11
|
-
it('Should fail if the password does not contain enough lowercase chars', async () => {
|
|
12
|
-
const policy = (0, max_length_1.createMaxLengthComplexityRule)(3);
|
|
13
|
-
const result = await policy.check('asd');
|
|
14
|
-
expect(result.success).toBe(true);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=max-length.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"max-length.spec.js","sourceRoot":"","sources":["../../src/password-complexity-rules/max-length.spec.ts"],"names":[],"mappings":";;AACA,6CAA4D;AAE5D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,IAAA,0CAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAE,MAAyC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IACtH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAA,0CAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMinLengthComplexityRule = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @param minLength The minimum password length
|
|
6
|
-
* @returns The created Password Policy object
|
|
7
|
-
*/
|
|
8
|
-
const createMinLengthComplexityRule = (minLength) => ({
|
|
9
|
-
name: 'minLength',
|
|
10
|
-
check: async (passwordString) => {
|
|
11
|
-
const success = passwordString.length >= minLength;
|
|
12
|
-
if (success) {
|
|
13
|
-
return { success };
|
|
14
|
-
}
|
|
15
|
-
return { success, message: `The password has to be at least ${minLength} character length`, rule: 'minLength' };
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
exports.createMinLengthComplexityRule = createMinLengthComplexityRule;
|
|
19
|
-
//# sourceMappingURL=min-length.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"min-length.js","sourceRoot":"","sources":["../../src/password-complexity-rules/min-length.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACI,MAAM,6BAA6B,GAAG,CAAC,SAAiB,EAA0B,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,WAAoB;IAC1B,KAAK,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,IAAI,SAAS,CAAA;QAClD,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mCAAmC,SAAS,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACjH,CAAC;CACF,CAAC,CAAA;AATW,QAAA,6BAA6B,iCASxC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const min_length_1 = require("./min-length");
|
|
4
|
-
describe('min-length', () => {
|
|
5
|
-
it('Should fail if the password is shorter than expected', async () => {
|
|
6
|
-
const policy = (0, min_length_1.createMinLengthComplexityRule)(3);
|
|
7
|
-
const result = await policy.check('');
|
|
8
|
-
expect(result.success).toBe(false);
|
|
9
|
-
expect(result.message).toBe('The password has to be at least 3 character length');
|
|
10
|
-
});
|
|
11
|
-
it('Should fail if the password does not contain enough lowercase chars', async () => {
|
|
12
|
-
const policy = (0, min_length_1.createMinLengthComplexityRule)(3);
|
|
13
|
-
const result = await policy.check('asd12345(=/!+');
|
|
14
|
-
expect(result.success).toBe(true);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=min-length.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"min-length.spec.js","sourceRoot":"","sources":["../../src/password-complexity-rules/min-length.spec.ts"],"names":[],"mappings":";;AACA,6CAA4D;AAE5D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,IAAA,0CAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAE,MAAyC,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7D,oDAAoD,CACrD,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAA,0CAA6B,EAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/password-hasher.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.PasswordHasher = void 0;
|
|
10
|
-
const inject_1 = require("@furystack/inject");
|
|
11
|
-
let PasswordHasher = class PasswordHasher {
|
|
12
|
-
createCredential(_userName, _password) {
|
|
13
|
-
throw Error('Set up hasher - TODO');
|
|
14
|
-
}
|
|
15
|
-
verifyCredential(_password, _credential) {
|
|
16
|
-
throw Error('Set up hasher - TODO');
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
PasswordHasher = __decorate([
|
|
20
|
-
(0, inject_1.Injectable)({ lifetime: 'singleton' })
|
|
21
|
-
], PasswordHasher);
|
|
22
|
-
exports.PasswordHasher = PasswordHasher;
|
|
23
|
-
//# sourceMappingURL=password-hasher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"password-hasher.js","sourceRoot":"","sources":["../src/password-hasher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAA8C;AAI9C,IAAa,cAAc,GAA3B,MAAa,cAAc;IAClB,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;QAC1D,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IAEM,gBAAgB,CAAC,SAAiB,EAAE,WAA+B;QACxE,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF,CAAA;AARY,cAAc;IAD1B,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,cAAc,CAQ1B;AARY,wCAAc"}
|