@flink-app/generic-auth-plugin 0.11.0 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- // Generated Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
1
+ // Generated Fri Nov 08 2024 10:09:47 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";
@@ -1,4 +1,4 @@
1
- // Generated Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
1
+ // Generated Fri Nov 08 2024 10:09:47 GMT+0100 (Central European Standard Time)
2
2
  import { autoRegisteredJobs } from "@flink-app/flink";
3
3
  export const jobs = [];
4
4
  autoRegisteredJobs.push(...jobs);
@@ -1,4 +1,4 @@
1
- // Generated Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
1
+ // Generated Fri Nov 08 2024 10:09:47 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 Tue Jun 18 2024 09:50:55 GMT+0200 (Central European Summer Time)
32
+ // Generated Fri Nov 08 2024 10:09:48 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,4 +1,4 @@
1
- // Generated Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
1
+ // Generated Fri Nov 08 2024 10:09:47 GMT+0100 (Central European Standard Time)
2
2
  import "./generatedHandlers";
3
3
  import "./generatedRepos";
4
4
  import "./generatedJobs";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handlers = void 0;
4
- // Generated Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
4
+ // Generated Fri Nov 08 2024 10:09:47 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 Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
4
+ // Generated Fri Nov 08 2024 10:09:47 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 Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
4
+ // Generated Fri Nov 08 2024 10:09:47 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);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // Generated Tue Jun 18 2024 09:50:54 GMT+0200 (Central European Summer Time)
3
+ // Generated Fri Nov 08 2024 10:09:47 GMT+0100 (Central European Standard Time)
4
4
  require("./generatedHandlers");
5
5
  require("./generatedRepos");
6
6
  require("./generatedJobs");
@@ -20,7 +20,9 @@ export declare function createUser(repo: FlinkRepo<any, User>, auth: JwtAuthPlug
20
20
  export declare function loginByToken(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, token: string, code: string, jwtSecret: string): Promise<UserLoginRes>;
21
21
  export declare function loginUser(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, username: string, password: string | undefined, validatePasswordMethod?: {
22
22
  (password: string, hash: string, salt: string): Promise<boolean>;
23
- }, smsOptions?: GenericAuthsmsOptions): Promise<UserLoginRes>;
23
+ }, smsOptions?: GenericAuthsmsOptions, onSuccessfulLogin?: {
24
+ (user: User): Promise<void>;
25
+ }): Promise<UserLoginRes>;
24
26
  export declare function changePassword(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, userId: string, newPassword: string, createPasswordHashAndSaltMethod?: {
25
27
  (password: string): Promise<{
26
28
  hash: string;
@@ -175,7 +175,7 @@ function loginByToken(repo, auth, token, code, jwtSecret) {
175
175
  });
176
176
  }
177
177
  exports.loginByToken = loginByToken;
178
- function loginUser(repo, auth, username, password, validatePasswordMethod, smsOptions) {
178
+ function loginUser(repo, auth, username, password, validatePasswordMethod, smsOptions, onSuccessfulLogin) {
179
179
  return __awaiter(this, void 0, void 0, function () {
180
180
  var user, valid, ex_1, code, payload, secret, options, token, token;
181
181
  return __generator(this, function (_a) {
@@ -190,7 +190,7 @@ function loginUser(repo, auth, username, password, validatePasswordMethod, smsOp
190
190
  if (!(user.authentificationMethod == "password")) return [3 /*break*/, 9];
191
191
  if (password == null)
192
192
  password = "";
193
- if (!(validatePasswordMethod != null)) return [3 /*break*/, 7];
193
+ if (!validatePasswordMethod) return [3 /*break*/, 7];
194
194
  return [4 /*yield*/, validatePasswordMethod(password, user.password, user.salt)];
195
195
  case 2:
196
196
  valid = _a.sent();
@@ -234,20 +234,25 @@ function loginUser(repo, auth, username, password, validatePasswordMethod, smsOp
234
234
  validationToken: token
235
235
  }];
236
236
  }
237
- if (!valid) return [3 /*break*/, 11];
237
+ if (!valid) return [3 /*break*/, 13];
238
238
  return [4 /*yield*/, auth.createToken({ username: username.toLowerCase(), _id: user._id }, user.roles)];
239
239
  case 10:
240
240
  token = _a.sent();
241
- return [2 /*return*/, {
242
- status: "success",
243
- user: {
244
- _id: user._id,
245
- username: user.username,
246
- token: token,
247
- profile: user.profile,
248
- },
249
- }];
250
- case 11: return [2 /*return*/, { status: "failed" }];
241
+ if (!onSuccessfulLogin) return [3 /*break*/, 12];
242
+ return [4 /*yield*/, onSuccessfulLogin(user)];
243
+ case 11:
244
+ _a.sent();
245
+ _a.label = 12;
246
+ case 12: return [2 /*return*/, {
247
+ status: "success",
248
+ user: {
249
+ _id: user._id,
250
+ username: user.username,
251
+ token: token,
252
+ profile: user.profile,
253
+ },
254
+ }];
255
+ case 13: return [2 /*return*/, { status: "failed" }];
251
256
  }
252
257
  });
253
258
  });
@@ -13,7 +13,7 @@ export interface genericAuthContext {
13
13
  genericAuthPlugin: {
14
14
  loginUser(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, username: string, password?: string, validatePasswordMethod?: {
15
15
  (password: string, hash: string, salt: string): Promise<boolean>;
16
- }, smsOptions?: GenericAuthsmsOptions): Promise<UserLoginRes>;
16
+ }, smsOptions?: GenericAuthsmsOptions, onSuccessfulLogin?: (user: User) => Promise<void>): Promise<UserLoginRes>;
17
17
  loginByToken(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, token: string, code: string, jwtSecret: string): Promise<UserLoginRes>;
18
18
  createUser(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, username: string, password: string, authentificationMethod: "password" | "sms", roles: string[], profile: UserProfile, createPasswordHashAndSaltMethod?: {
19
19
  (password: string): Promise<{
@@ -47,5 +47,8 @@ export interface genericAuthContext {
47
47
  };
48
48
  usernameFormat: RegExp;
49
49
  smsOptions?: GenericAuthsmsOptions;
50
+ onSuccessfulLogin?: {
51
+ (user: User): Promise<void>;
52
+ };
50
53
  };
51
54
  }
@@ -1,3 +1,4 @@
1
+ import { User } from "./schemas/User";
1
2
  import { UserPasswordResetSettings } from "./schemas/UserPasswordResetSettings";
2
3
  import { client as smsClient } from "@flink-app/sms-plugin";
3
4
  export interface GenericAuthPluginOptions {
@@ -23,6 +24,9 @@ export interface GenericAuthPluginOptions {
23
24
  };
24
25
  usernameFormat?: RegExp;
25
26
  sms?: GenericAuthsmsOptions;
27
+ onSuccessfulLogin?: {
28
+ (user: User): Promise<void>;
29
+ };
26
30
  }
27
31
  export interface GenericAuthsmsOptions {
28
32
  smsClient: smsClient;
@@ -47,7 +47,7 @@ var userLoginHandler = function (_a) {
47
47
  case 0:
48
48
  pluginName = origin || "genericAuthPlugin";
49
49
  repo = ctx.repos[ctx.plugins[pluginName].repoName];
50
- return [4 /*yield*/, ctx.plugins.genericAuthPlugin.loginUser(repo, ctx.auth, req.body.username, req.body.password, ctx.plugins.genericAuthPlugin.validatePasswordMethod, ctx.plugins[pluginName].smsOptions)];
50
+ return [4 /*yield*/, ctx.plugins.genericAuthPlugin.loginUser(repo, ctx.auth, req.body.username, req.body.password, ctx.plugins.genericAuthPlugin.validatePasswordMethod, ctx.plugins[pluginName].smsOptions, ctx.plugins.genericAuthPlugin.onSuccessfulLogin)];
51
51
  case 1:
52
52
  loginRespons = _b.sent();
53
53
  if (loginRespons.status != "success") {
package/dist/src/index.js CHANGED
@@ -36,6 +36,7 @@ var genericAuthPlugin = function (options) {
36
36
  createPasswordHashAndSaltMethod: options.createPasswordHashAndSaltMethod,
37
37
  validatePasswordMethod: options.validatePasswordMethod,
38
38
  usernameFormat: options.usernameFormat || /.{1,}$/,
39
+ onSuccessfulLogin: options.onSuccessfulLogin,
39
40
  smsOptions: options.sms
40
41
  },
41
42
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flink-app/generic-auth-plugin",
3
- "version": "0.11.0",
3
+ "version": "0.11.3",
4
4
  "description": "Flink plugin that provides a generic user authentification solution.",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\"",
@@ -30,5 +30,5 @@
30
30
  "ts-node": "^9.1.1",
31
31
  "typescript": "^4.2.4"
32
32
  },
33
- "gitHead": "3869def3e7e7e7105373ad31bc23a8ed68108015"
33
+ "gitHead": "83d258db9a45d1f397ca51f2221a36443af78f9f"
34
34
  }
@@ -158,8 +158,12 @@ export async function loginUser(
158
158
  validatePasswordMethod?: {
159
159
  (password: string, hash: string, salt: string): Promise<boolean>;
160
160
  },
161
- smsOptions? : GenericAuthsmsOptions
161
+ smsOptions? : GenericAuthsmsOptions,
162
+ onSuccessfulLogin?: {
163
+ (user:User): Promise<void>
164
+ },
162
165
  ): Promise<UserLoginRes> {
166
+
163
167
  const user = await repo.getOne({ username: username.toLowerCase() });
164
168
  if (user == null) {
165
169
  return { status: "failed" };
@@ -170,7 +174,7 @@ export async function loginUser(
170
174
  if (user.authentificationMethod == "password") {
171
175
  if (password == null) password = "";
172
176
 
173
- if (validatePasswordMethod != null) {
177
+ if (validatePasswordMethod) {
174
178
  valid = await validatePasswordMethod(password, <string>user.password, <string>user.salt);
175
179
 
176
180
  //If not valid, try to use default auth
@@ -205,7 +209,6 @@ export async function loginUser(
205
209
 
206
210
  const token = jsonwebtoken.sign(payload, secret, options);
207
211
 
208
-
209
212
  return {
210
213
  status: "success",
211
214
  validationToken : token
@@ -218,6 +221,10 @@ export async function loginUser(
218
221
  if (valid) {
219
222
  const token = await auth.createToken({ username: username.toLowerCase(), _id: user._id }, user.roles);
220
223
 
224
+ if (onSuccessfulLogin) {
225
+ await onSuccessfulLogin(user);
226
+ }
227
+
221
228
  return {
222
229
  status: "success",
223
230
  user: {
@@ -14,7 +14,7 @@ export interface genericAuthContext{
14
14
  genericAuthPlugin : {
15
15
 
16
16
 
17
- loginUser( repo : FlinkRepo<any, User>, auth : JwtAuthPlugin, username : string, password? : string, validatePasswordMethod? : { (password : string, hash : string, salt : string) : Promise<boolean> }, smsOptions? : GenericAuthsmsOptions ) : Promise<UserLoginRes>,
17
+ loginUser( repo : FlinkRepo<any, User>, auth : JwtAuthPlugin, username : string, password? : string, validatePasswordMethod? : { (password : string, hash : string, salt : string) : Promise<boolean> }, smsOptions? : GenericAuthsmsOptions, onSuccessfulLogin?: (user:User) => Promise<void> ) : Promise<UserLoginRes>,
18
18
  loginByToken(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, token : string, code : string, jwtSecret : string) : Promise<UserLoginRes>,
19
19
  createUser( repo : FlinkRepo<any, User>, auth : JwtAuthPlugin, username : string, password : string, authentificationMethod : "password" | "sms", roles : string[], profile : UserProfile, createPasswordHashAndSaltMethod? : { (password : string) : Promise<{ hash: string; salt: string;} | null> } ) : Promise<UserCreateRes>,
20
20
  changePassword( repo : FlinkRepo<any, User>, auth : JwtAuthPlugin, userId : string, newPassword : string, createPasswordHashAndSaltMethod? : { (password : string) : Promise<{ hash: string; salt: string;} | null> } ) : Promise<UserPasswordChangeRes>,
@@ -25,7 +25,8 @@ export interface genericAuthContext{
25
25
  createPasswordHashAndSaltMethod? : { (password : string) : Promise<{ hash: string; salt: string;} | null> },
26
26
  validatePasswordMethod? : { (password : string, hash : string, salt : string) : Promise<boolean> },
27
27
  usernameFormat : RegExp
28
- smsOptions? : GenericAuthsmsOptions
28
+ smsOptions? : GenericAuthsmsOptions,
29
+ onSuccessfulLogin?: { (user:User) : Promise<void> }
29
30
  }
30
31
 
31
32
  }
@@ -1,3 +1,4 @@
1
+ import { User } from "./schemas/User";
1
2
  import { UserPasswordResetSettings } from "./schemas/UserPasswordResetSettings";
2
3
  import { client as smsClient } from "@flink-app/sms-plugin";
3
4
  export interface GenericAuthPluginOptions {
@@ -18,9 +19,11 @@ export interface GenericAuthPluginOptions {
18
19
  validatePasswordMethod?: {
19
20
  (password: string, hash: string, salt: string): Promise<boolean>;
20
21
  };
21
-
22
22
  usernameFormat?: RegExp;
23
23
  sms?: GenericAuthsmsOptions;
24
+ onSuccessfulLogin?: {
25
+ (user:User): Promise<void>
26
+ };
24
27
  }
25
28
 
26
29
  export interface GenericAuthsmsOptions {
@@ -18,7 +18,8 @@ const userLoginHandler: Handler<
18
18
  req.body.username,
19
19
  req.body.password,
20
20
  ctx.plugins.genericAuthPlugin.validatePasswordMethod,
21
- (<any>ctx.plugins)[pluginName].smsOptions
21
+ (<any>ctx.plugins)[pluginName].smsOptions,
22
+ ctx.plugins.genericAuthPlugin.onSuccessfulLogin
22
23
  );
23
24
 
24
25
  if (loginRespons.status != "success") {
package/src/index.ts CHANGED
@@ -35,6 +35,7 @@ export const genericAuthPlugin = (
35
35
  createPasswordHashAndSaltMethod: options.createPasswordHashAndSaltMethod,
36
36
  validatePasswordMethod: options.validatePasswordMethod,
37
37
  usernameFormat: options.usernameFormat || /.{1,}$/,
38
+ onSuccessfulLogin: options.onSuccessfulLogin,
38
39
  smsOptions : options.sms
39
40
  },
40
41
  };