@flink-app/generic-auth-plugin 0.11.19 → 0.12.1-alpha.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/.flink/generatedHandlers.ts +1 -1
- package/.flink/generatedJobs.ts +1 -1
- package/.flink/generatedRepos.ts +1 -1
- package/.flink/schemas/schemas.ts +1 -1
- package/.flink/start.ts +1 -1
- package/dist/.flink/generatedHandlers.js +1 -1
- package/dist/.flink/generatedJobs.js +1 -1
- package/dist/.flink/generatedRepos.js +1 -1
- package/dist/.flink/start.js +1 -1
- package/dist/src/coreFunctions.js +6 -6
- package/dist/src/schemas/User.d.ts +1 -1
- package/dist/src/schemas/User.js +0 -1
- package/package.json +7 -7
- package/src/coreFunctions.ts +34 -59
- package/src/schemas/User.ts +8 -8
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated Wed Mar
|
|
1
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredHandlers, HttpMethod } from "@flink-app/flink";
|
|
3
3
|
import * as UserCreate_0 from "../src/handlers/UserCreate";
|
|
4
4
|
import * as UserLogin_0 from "../src/handlers/UserLogin";
|
package/.flink/generatedJobs.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated Wed Mar
|
|
1
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredJobs } from "@flink-app/flink";
|
|
3
3
|
export const jobs = [];
|
|
4
4
|
autoRegisteredJobs.push(...jobs);
|
package/.flink/generatedRepos.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated Wed Mar
|
|
1
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredRepos } from "@flink-app/flink";
|
|
3
3
|
export const repos = [];
|
|
4
4
|
autoRegisteredRepos.push(...repos);
|
|
@@ -29,7 +29,7 @@ import { PutManagementUserRolesByUseridRes } from "../../src/schemas/Management/
|
|
|
29
29
|
import { PutManagementUserUsernameByUseridReq } from "../../src/schemas/Management/PutUserUsernameByUseridReq";
|
|
30
30
|
import { PutManagementUserUsernameByUseridRes } from "../../src/schemas/Management/PutUserUsernameByUseridRes";
|
|
31
31
|
|
|
32
|
-
// Generated Wed Mar
|
|
32
|
+
// Generated Wed Mar 19 2025 16:32:04 GMT+0100 (Central European Standard Time)
|
|
33
33
|
export interface UserCreate_7_ReqSchema extends UserCreateReq {}
|
|
34
34
|
|
|
35
35
|
export interface UserCreate_7_ResSchema extends UserCreateRes {}
|
package/.flink/start.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handlers = void 0;
|
|
4
|
-
// Generated Wed Mar
|
|
4
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
5
5
|
var flink_1 = require("@flink-app/flink");
|
|
6
6
|
exports.handlers = [];
|
|
7
7
|
flink_1.autoRegisteredHandlers.push.apply(flink_1.autoRegisteredHandlers, exports.handlers);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.jobs = void 0;
|
|
4
|
-
// Generated Wed Mar
|
|
4
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
5
5
|
var flink_1 = require("@flink-app/flink");
|
|
6
6
|
exports.jobs = [];
|
|
7
7
|
flink_1.autoRegisteredJobs.push.apply(flink_1.autoRegisteredJobs, exports.jobs);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.repos = void 0;
|
|
4
|
-
// Generated Wed Mar
|
|
4
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
5
5
|
var flink_1 = require("@flink-app/flink");
|
|
6
6
|
exports.repos = [];
|
|
7
7
|
flink_1.autoRegisteredRepos.push.apply(flink_1.autoRegisteredRepos, exports.repos);
|
package/dist/.flink/start.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// Generated Wed Mar
|
|
3
|
+
// Generated Wed Mar 19 2025 16:32:03 GMT+0100 (Central European Standard Time)
|
|
4
4
|
require("./generatedHandlers");
|
|
5
5
|
require("./generatedRepos");
|
|
6
6
|
require("./generatedJobs");
|
|
@@ -66,7 +66,7 @@ function getJtwTokenPlugin(secret, rolePermissions, passwordPolicy, tokenTTL) {
|
|
|
66
66
|
},
|
|
67
67
|
passwordPolicy: passwordPolicy,
|
|
68
68
|
rolePermissions: rolePermissions,
|
|
69
|
-
tokenTTL: tokenTTL
|
|
69
|
+
tokenTTL: tokenTTL,
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
exports.getJtwTokenPlugin = getJtwTokenPlugin;
|
|
@@ -223,7 +223,7 @@ function loginUser(repo, auth, username, password, validatePasswordMethod, smsOp
|
|
|
223
223
|
smsOptions.smsClient.send({
|
|
224
224
|
to: [user.username],
|
|
225
225
|
from: smsOptions.smsFrom,
|
|
226
|
-
message: smsOptions.smsMessage.replace("{{code}}", code)
|
|
226
|
+
message: smsOptions.smsMessage.replace("{{code}}", code),
|
|
227
227
|
});
|
|
228
228
|
payload = {
|
|
229
229
|
type: "smsLogin",
|
|
@@ -236,7 +236,7 @@ function loginUser(repo, auth, username, password, validatePasswordMethod, smsOp
|
|
|
236
236
|
token = jsonwebtoken_1.default.sign(payload, secret, options);
|
|
237
237
|
return [2 /*return*/, {
|
|
238
238
|
status: "success",
|
|
239
|
-
validationToken: token
|
|
239
|
+
validationToken: token,
|
|
240
240
|
}];
|
|
241
241
|
}
|
|
242
242
|
if (!valid) return [3 /*break*/, 13];
|
|
@@ -410,7 +410,7 @@ function passwordResetComplete(repo, auth, jwtSecret, passwordResetToken, code,
|
|
|
410
410
|
return [4 /*yield*/, repo.updateOne(user._id, {
|
|
411
411
|
password: passwordAndSalt.hash,
|
|
412
412
|
salt: passwordAndSalt.salt,
|
|
413
|
-
pwdResetStartedAt: null
|
|
413
|
+
pwdResetStartedAt: null,
|
|
414
414
|
})];
|
|
415
415
|
case 6:
|
|
416
416
|
_a.sent();
|
|
@@ -431,8 +431,8 @@ function generate(n) {
|
|
|
431
431
|
return ("" + number).substring(add);
|
|
432
432
|
}
|
|
433
433
|
function generateString(length) {
|
|
434
|
-
var characters =
|
|
435
|
-
var result =
|
|
434
|
+
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
435
|
+
var result = " ";
|
|
436
436
|
var charactersLength = characters.length;
|
|
437
437
|
for (var i = 0; i < length; i++) {
|
|
438
438
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
package/dist/src/schemas/User.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flink-app/generic-auth-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.1-alpha.0",
|
|
4
4
|
"description": "Flink plugin that provides a generic user authentification solution.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\"",
|
|
@@ -16,19 +16,19 @@
|
|
|
16
16
|
"types": "dist/src/index.d.ts",
|
|
17
17
|
"main": "dist/src/index.js",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@flink-app/email-plugin": "^0.
|
|
20
|
-
"@flink-app/jwt-auth-plugin": "^0.
|
|
21
|
-
"@flink-app/management-api-plugin": "^0.
|
|
22
|
-
"@flink-app/sms-plugin": "^0.
|
|
19
|
+
"@flink-app/email-plugin": "^0.12.1-alpha.0",
|
|
20
|
+
"@flink-app/jwt-auth-plugin": "^0.12.1-alpha.0",
|
|
21
|
+
"@flink-app/management-api-plugin": "^0.12.1-alpha.0",
|
|
22
|
+
"@flink-app/sms-plugin": "^0.12.1-alpha.0",
|
|
23
23
|
"handlebars": "^4.7.7",
|
|
24
24
|
"jsonwebtoken": "^8.5.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@flink-app/flink": "^0.
|
|
27
|
+
"@flink-app/flink": "^0.12.1-alpha.0",
|
|
28
28
|
"@types/jsonwebtoken": "^8.5.2",
|
|
29
29
|
"@types/node": "^15.6.2",
|
|
30
30
|
"ts-node": "^9.1.1",
|
|
31
31
|
"typescript": "^4.2.4"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "7f6e32aa896f5cade313f3c5133c756fc5391ce8"
|
|
34
34
|
}
|
package/src/coreFunctions.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { UserPasswordResetCompleteRes } from "./schemas/UserPasswordResetComplet
|
|
|
12
12
|
import jsonwebtoken from "jsonwebtoken";
|
|
13
13
|
import { GenericAuthsmsOptions } from "./genericAuthPluginOptions";
|
|
14
14
|
|
|
15
|
-
export function getJtwTokenPlugin(secret: string, rolePermissions?: { [role: string]: string[] }, passwordPolicy?: RegExp, tokenTTL
|
|
15
|
+
export function getJtwTokenPlugin(secret: string, rolePermissions?: { [role: string]: string[] }, passwordPolicy?: RegExp, tokenTTL?: number) {
|
|
16
16
|
if (passwordPolicy == undefined) {
|
|
17
17
|
passwordPolicy = /.{1,}$/;
|
|
18
18
|
}
|
|
@@ -36,7 +36,7 @@ export function getJtwTokenPlugin(secret: string, rolePermissions?: { [role: str
|
|
|
36
36
|
},
|
|
37
37
|
passwordPolicy,
|
|
38
38
|
rolePermissions,
|
|
39
|
-
tokenTTL
|
|
39
|
+
tokenTTL,
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -112,36 +112,23 @@ export async function createUser(
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
export async function loginByToken(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
jwtSecret : string
|
|
121
|
-
|
|
122
|
-
): Promise<UserLoginRes> {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
let payload : { type : string, userId : string};
|
|
126
|
-
try{
|
|
127
|
-
payload = jsonwebtoken.verify(token, jwtSecret + ":" + code) as { type : string, userId : string};
|
|
128
|
-
}catch(ex){
|
|
115
|
+
export async function loginByToken(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, token: string, code: string, jwtSecret: string): Promise<UserLoginRes> {
|
|
116
|
+
let payload: { type: string; userId: string };
|
|
117
|
+
try {
|
|
118
|
+
payload = jsonwebtoken.verify(token, jwtSecret + ":" + code) as { type: string; userId: string };
|
|
119
|
+
} catch (ex) {
|
|
129
120
|
return { status: "failed" };
|
|
130
121
|
}
|
|
131
|
-
|
|
132
122
|
|
|
133
|
-
if(payload.type != "smsLogin"){
|
|
123
|
+
if (payload.type != "smsLogin") {
|
|
134
124
|
return { status: "failed" };
|
|
135
125
|
}
|
|
136
126
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const user = await repo.getById(payload.userId)
|
|
127
|
+
const user = await repo.getById(payload.userId);
|
|
140
128
|
if (user == null) {
|
|
141
129
|
return { status: "failed" };
|
|
142
130
|
}
|
|
143
131
|
|
|
144
|
-
|
|
145
132
|
const authToken = await auth.createToken({ username: user.username.toLowerCase(), _id: user._id }, user.roles);
|
|
146
133
|
|
|
147
134
|
return {
|
|
@@ -149,14 +136,12 @@ export async function loginByToken(
|
|
|
149
136
|
user: {
|
|
150
137
|
_id: user._id,
|
|
151
138
|
username: user.username,
|
|
152
|
-
token
|
|
139
|
+
token: authToken,
|
|
153
140
|
profile: user.profile,
|
|
154
141
|
},
|
|
155
|
-
};
|
|
156
|
-
|
|
142
|
+
};
|
|
157
143
|
}
|
|
158
144
|
|
|
159
|
-
|
|
160
145
|
export async function loginUser(
|
|
161
146
|
repo: FlinkRepo<any, User>,
|
|
162
147
|
auth: JwtAuthPlugin,
|
|
@@ -165,12 +150,11 @@ export async function loginUser(
|
|
|
165
150
|
validatePasswordMethod?: {
|
|
166
151
|
(password: string, hash: string, salt: string): Promise<boolean>;
|
|
167
152
|
},
|
|
168
|
-
smsOptions
|
|
153
|
+
smsOptions?: GenericAuthsmsOptions,
|
|
169
154
|
onSuccessfulLogin?: {
|
|
170
|
-
(user:User): Promise<void
|
|
171
|
-
}
|
|
155
|
+
(user: User): Promise<void>;
|
|
156
|
+
}
|
|
172
157
|
): Promise<UserLoginRes> {
|
|
173
|
-
|
|
174
158
|
const user = await repo.getOne({ username: username.toLowerCase() });
|
|
175
159
|
if (user == null) {
|
|
176
160
|
return { status: "failed" };
|
|
@@ -195,34 +179,31 @@ export async function loginUser(
|
|
|
195
179
|
}
|
|
196
180
|
}
|
|
197
181
|
if (user.authentificationMethod == "sms") {
|
|
198
|
-
if(!smsOptions) throw "SMS options must be specified to use SMS login"
|
|
182
|
+
if (!smsOptions) throw "SMS options must be specified to use SMS login";
|
|
199
183
|
let code = smsOptions.codeType == "numeric" ? generate(smsOptions.codeLength) : generateString(smsOptions.codeLength);
|
|
200
184
|
smsOptions.smsClient.send({
|
|
201
|
-
to
|
|
202
|
-
from
|
|
203
|
-
message
|
|
204
|
-
})
|
|
185
|
+
to: [user.username],
|
|
186
|
+
from: smsOptions.smsFrom,
|
|
187
|
+
message: smsOptions.smsMessage.replace("{{code}}", code),
|
|
188
|
+
});
|
|
205
189
|
|
|
206
190
|
const payload = {
|
|
207
191
|
type: "smsLogin",
|
|
208
192
|
userId: user._id,
|
|
209
193
|
};
|
|
210
|
-
|
|
194
|
+
|
|
211
195
|
const secret = smsOptions.jwtToken + ":" + code;
|
|
212
|
-
|
|
196
|
+
|
|
213
197
|
const options: jsonwebtoken.SignOptions = {
|
|
214
198
|
expiresIn: "1h",
|
|
215
199
|
};
|
|
216
|
-
|
|
200
|
+
|
|
217
201
|
const token = jsonwebtoken.sign(payload, secret, options);
|
|
218
202
|
|
|
219
203
|
return {
|
|
220
204
|
status: "success",
|
|
221
|
-
validationToken
|
|
205
|
+
validationToken: token,
|
|
222
206
|
};
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
207
|
}
|
|
227
208
|
|
|
228
209
|
if (valid) {
|
|
@@ -304,11 +285,11 @@ export async function passwordResetStart(
|
|
|
304
285
|
const fakeToken = jsonwebtoken.sign(fakepayload, "fake_payload", { expiresIn: lifeTime });
|
|
305
286
|
|
|
306
287
|
if (user == null) {
|
|
307
|
-
return { status: "userNotFound", passwordResetToken
|
|
288
|
+
return { status: "userNotFound", passwordResetToken: fakeToken };
|
|
308
289
|
}
|
|
309
290
|
|
|
310
291
|
if (user.authentificationMethod != "password") {
|
|
311
|
-
return { status: "userNotFound", passwordResetToken
|
|
292
|
+
return { status: "userNotFound", passwordResetToken: fakeToken };
|
|
312
293
|
}
|
|
313
294
|
|
|
314
295
|
if (numberOfDigits == null) numberOfDigits = 6;
|
|
@@ -322,7 +303,7 @@ export async function passwordResetStart(
|
|
|
322
303
|
|
|
323
304
|
const pwdResetStartedAt = new Date().toISOString();
|
|
324
305
|
let secret;
|
|
325
|
-
if(passwordResetReusableTokens) {
|
|
306
|
+
if (passwordResetReusableTokens) {
|
|
326
307
|
secret = jwtSecret + ":" + code;
|
|
327
308
|
} else {
|
|
328
309
|
secret = jwtSecret + ":" + code + ":" + pwdResetStartedAt;
|
|
@@ -355,11 +336,9 @@ export async function passwordResetComplete(
|
|
|
355
336
|
},
|
|
356
337
|
passwordResetReusableTokens: boolean = true
|
|
357
338
|
): Promise<UserPasswordResetCompleteRes> {
|
|
339
|
+
const payload = <{ username: string }>jsonwebtoken.decode(passwordResetToken);
|
|
358
340
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
if(!payload || !payload.username)
|
|
362
|
-
return { status: "invalidCode" };
|
|
341
|
+
if (!payload || !payload.username) return { status: "invalidCode" };
|
|
363
342
|
|
|
364
343
|
const user = await repo.getOne({ username: payload.username });
|
|
365
344
|
|
|
@@ -383,7 +362,6 @@ export async function passwordResetComplete(
|
|
|
383
362
|
return { status: "invalidCode" };
|
|
384
363
|
}
|
|
385
364
|
|
|
386
|
-
|
|
387
365
|
let passwordAndSalt = null;
|
|
388
366
|
|
|
389
367
|
if (createPasswordHashAndSaltMethod == null) {
|
|
@@ -401,7 +379,7 @@ export async function passwordResetComplete(
|
|
|
401
379
|
await repo.updateOne(user._id, {
|
|
402
380
|
password: passwordAndSalt.hash,
|
|
403
381
|
salt: passwordAndSalt.salt,
|
|
404
|
-
pwdResetStartedAt: null
|
|
382
|
+
pwdResetStartedAt: null,
|
|
405
383
|
});
|
|
406
384
|
|
|
407
385
|
return { status: "success" };
|
|
@@ -422,16 +400,13 @@ function generate(n: number): string {
|
|
|
422
400
|
return ("" + number).substring(add);
|
|
423
401
|
}
|
|
424
402
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
function generateString(length : number) {
|
|
429
|
-
const characters ='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
430
|
-
let result = ' ';
|
|
403
|
+
function generateString(length: number) {
|
|
404
|
+
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
405
|
+
let result = " ";
|
|
431
406
|
const charactersLength = characters.length;
|
|
432
|
-
for (
|
|
407
|
+
for (let i = 0; i < length; i++) {
|
|
433
408
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
434
409
|
}
|
|
435
410
|
|
|
436
411
|
return result;
|
|
437
|
-
}
|
|
412
|
+
}
|
package/src/schemas/User.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PushNotificationToken} from "./PushNotificationToken";
|
|
1
|
+
import { PushNotificationToken } from "./PushNotificationToken";
|
|
2
2
|
import { UserProfile } from "./UserProfile";
|
|
3
3
|
|
|
4
4
|
export interface User {
|
|
@@ -6,12 +6,12 @@ export interface User {
|
|
|
6
6
|
username: string;
|
|
7
7
|
|
|
8
8
|
password?: string;
|
|
9
|
-
salt
|
|
9
|
+
salt?: string;
|
|
10
10
|
|
|
11
|
-
pwdResetStartedAt?: string;
|
|
11
|
+
pwdResetStartedAt?: string | null;
|
|
12
12
|
roles: string[];
|
|
13
|
-
|
|
14
|
-
authentificationMethod
|
|
15
|
-
profile
|
|
16
|
-
pushNotificationTokens
|
|
17
|
-
}
|
|
13
|
+
|
|
14
|
+
authentificationMethod: "password" | "sms";
|
|
15
|
+
profile: UserProfile;
|
|
16
|
+
pushNotificationTokens: Array<PushNotificationToken>;
|
|
17
|
+
}
|