@flink-app/generic-auth-plugin 0.11.0 → 0.11.4-next.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.
Files changed (44) hide show
  1. package/.flink/generatedHandlers.ts +1 -1
  2. package/.flink/generatedJobs.ts +1 -1
  3. package/.flink/generatedRepos.ts +1 -1
  4. package/.flink/schemas/schemas.ts +1 -1
  5. package/.flink/start.ts +1 -1
  6. package/dist/.flink/generatedHandlers.js +1 -1
  7. package/dist/.flink/generatedJobs.js +1 -1
  8. package/dist/.flink/generatedRepos.js +1 -1
  9. package/dist/.flink/start.js +1 -1
  10. package/dist/src/coreFunctions.d.ts +3 -1
  11. package/dist/src/coreFunctions.js +29 -25
  12. package/dist/src/genericAuthContext.d.ts +4 -1
  13. package/dist/src/genericAuthPluginOptions.d.ts +4 -0
  14. package/dist/src/handlers/Management/DeleteUserByUserid.js +23 -25
  15. package/dist/src/handlers/Management/GetSchema.js +14 -16
  16. package/dist/src/handlers/Management/GetUser.js +23 -25
  17. package/dist/src/handlers/Management/GetUserByUserid.js +24 -26
  18. package/dist/src/handlers/Management/GetUserViewByUserid.js +36 -38
  19. package/dist/src/handlers/Management/PutUserPasswordByUserid.js +48 -50
  20. package/dist/src/handlers/Management/PutUserProfileByUserid.js +26 -28
  21. package/dist/src/handlers/Management/PutUserProfileByUseridAppend.js +29 -31
  22. package/dist/src/handlers/Management/PutUserRolesByUserid.js +26 -28
  23. package/dist/src/handlers/Management/PutUserUsernameByUserid.js +35 -37
  24. package/dist/src/handlers/UserCreate.js +46 -48
  25. package/dist/src/handlers/UserLogin.js +25 -27
  26. package/dist/src/handlers/UserLoginByToken.js +25 -27
  27. package/dist/src/handlers/UserPasswordPut.js +23 -25
  28. package/dist/src/handlers/UserPasswordResetComplete.js +29 -31
  29. package/dist/src/handlers/UserPasswordResetForm.js +11 -11
  30. package/dist/src/handlers/UserPasswordResetStart.js +52 -54
  31. package/dist/src/handlers/UserProfileGet.js +23 -25
  32. package/dist/src/handlers/UserProfilePut.js +30 -32
  33. package/dist/src/handlers/UserPushRegisterToken.js +32 -34
  34. package/dist/src/handlers/UserPushRemoveToken.js +26 -28
  35. package/dist/src/handlers/UserToken.js +26 -28
  36. package/dist/src/index.js +7 -2
  37. package/dist/src/init.js +7 -4
  38. package/dist/src/management.js +5 -1
  39. package/package.json +32 -32
  40. package/src/coreFunctions.ts +10 -3
  41. package/src/genericAuthContext.ts +3 -2
  42. package/src/genericAuthPluginOptions.ts +4 -1
  43. package/src/handlers/UserLogin.ts +2 -1
  44. package/src/index.ts +1 -0
@@ -20,12 +20,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
20
  });
21
21
  };
22
22
  var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
25
  function verb(n) { return function (v) { return step([n, v]); }; }
26
26
  function step(op) {
27
27
  if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
29
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
30
  if (y = 0, t) op = [op[0] & 2, t.value];
31
31
  switch (op[0]) {
@@ -49,36 +49,34 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
50
  exports.__schemas = exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = void 0;
51
51
  var flink_1 = require("@flink-app/flink");
52
- var putUserProfileHandler = function (_a) {
53
- var ctx = _a.ctx, req = _a.req, origin = _a.origin;
54
- return __awaiter(void 0, void 0, void 0, function () {
55
- var pluginName, repo, userId, user, updatedProfile;
56
- return __generator(this, function (_b) {
57
- switch (_b.label) {
58
- case 0:
59
- pluginName = origin || "genericAuthPlugin";
60
- repo = ctx.repos[ctx.plugins[pluginName].repoName];
61
- userId = req.user._id;
62
- return [4 /*yield*/, repo.getById(userId)];
63
- case 1:
64
- user = _b.sent();
65
- if (user == null) {
66
- return [2 /*return*/, flink_1.notFound()];
67
- }
68
- updatedProfile = __assign(__assign({}, user.profile), req.body);
69
- return [4 /*yield*/, repo.updateOne(userId, { profile: updatedProfile })];
70
- case 2:
71
- _b.sent();
72
- return [4 /*yield*/, repo.getById(userId)];
73
- case 3:
74
- user = _b.sent();
75
- return [2 /*return*/, {
76
- data: user.profile,
77
- }];
78
- }
79
- });
52
+ var putUserProfileHandler = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
53
+ var pluginName, repo, userId, user, updatedProfile;
54
+ var ctx = _b.ctx, req = _b.req, origin = _b.origin;
55
+ return __generator(this, function (_c) {
56
+ switch (_c.label) {
57
+ case 0:
58
+ pluginName = origin || "genericAuthPlugin";
59
+ repo = ctx.repos[ctx.plugins[pluginName].repoName];
60
+ userId = req.user._id;
61
+ return [4 /*yield*/, repo.getById(userId)];
62
+ case 1:
63
+ user = _c.sent();
64
+ if (user == null) {
65
+ return [2 /*return*/, (0, flink_1.notFound)()];
66
+ }
67
+ updatedProfile = __assign(__assign({}, user.profile), req.body);
68
+ return [4 /*yield*/, repo.updateOne(userId, { profile: updatedProfile })];
69
+ case 2:
70
+ _c.sent();
71
+ return [4 /*yield*/, repo.getById(userId)];
72
+ case 3:
73
+ user = _c.sent();
74
+ return [2 /*return*/, {
75
+ data: user.profile,
76
+ }];
77
+ }
80
78
  });
81
- };
79
+ }); };
82
80
  exports.default = putUserProfileHandler;
83
81
  exports.__assumedHttpMethod = "", exports.__file = "UserProfilePut.ts", exports.__query = [], exports.__params = [];
84
82
  exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {}, "definitions": {} }, resSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {}, "definitions": {} } };
@@ -9,12 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
18
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
19
  if (y = 0, t) op = [op[0] & 2, t.value];
20
20
  switch (op[0]) {
@@ -38,38 +38,36 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.__schemas = exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = void 0;
40
40
  var flink_1 = require("@flink-app/flink");
41
- var postUserPushRegisterTokenHandler = function (_a) {
42
- var ctx = _a.ctx, req = _a.req, origin = _a.origin;
43
- return __awaiter(void 0, void 0, void 0, function () {
44
- var pluginName, repo, user, exToken;
45
- return __generator(this, function (_b) {
46
- switch (_b.label) {
47
- case 0:
48
- pluginName = origin || "genericAuthPlugin";
49
- repo = ctx.repos[ctx.plugins[pluginName].repoName];
50
- return [4 /*yield*/, repo.getById(req.user._id)];
51
- case 1:
52
- user = _b.sent();
53
- if (user == null) {
54
- return [2 /*return*/, flink_1.notFound("User not found")];
55
- }
56
- exToken = user.pushNotificationTokens.find(function (t) { return t.deviceId == req.body.deviceId; });
57
- if (exToken != null) {
58
- exToken.token = req.body.token;
59
- }
60
- else {
61
- user.pushNotificationTokens.push(req.body);
62
- }
63
- return [4 /*yield*/, repo.updateOne(user._id, {
64
- pushNotificationTokens: user.pushNotificationTokens,
65
- })];
66
- case 2:
67
- _b.sent();
68
- return [2 /*return*/, { data: { status: "success" } }];
69
- }
70
- });
41
+ var postUserPushRegisterTokenHandler = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
42
+ var pluginName, repo, user, exToken;
43
+ var ctx = _b.ctx, req = _b.req, origin = _b.origin;
44
+ return __generator(this, function (_c) {
45
+ switch (_c.label) {
46
+ case 0:
47
+ pluginName = origin || "genericAuthPlugin";
48
+ repo = ctx.repos[ctx.plugins[pluginName].repoName];
49
+ return [4 /*yield*/, repo.getById(req.user._id)];
50
+ case 1:
51
+ user = _c.sent();
52
+ if (user == null) {
53
+ return [2 /*return*/, (0, flink_1.notFound)("User not found")];
54
+ }
55
+ exToken = user.pushNotificationTokens.find(function (t) { return t.deviceId == req.body.deviceId; });
56
+ if (exToken != null) {
57
+ exToken.token = req.body.token;
58
+ }
59
+ else {
60
+ user.pushNotificationTokens.push(req.body);
61
+ }
62
+ return [4 /*yield*/, repo.updateOne(user._id, {
63
+ pushNotificationTokens: user.pushNotificationTokens,
64
+ })];
65
+ case 2:
66
+ _c.sent();
67
+ return [2 /*return*/, { data: { status: "success" } }];
68
+ }
71
69
  });
72
- };
70
+ }); };
73
71
  exports.default = postUserPushRegisterTokenHandler;
74
72
  exports.__assumedHttpMethod = "", exports.__file = "UserPushRegisterToken.ts", exports.__query = [], exports.__params = [];
75
73
  exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "deviceId": { "type": "string" }, "token": { "type": "string" } }, "required": ["deviceId", "token"], "definitions": {} }, resSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "status": { "type": "string", "enum": ["success", "failed"] } }, "required": ["status"], "definitions": {} } };
@@ -9,12 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
18
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
19
  if (y = 0, t) op = [op[0] & 2, t.value];
20
20
  switch (op[0]) {
@@ -38,32 +38,30 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.__schemas = exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = void 0;
40
40
  var flink_1 = require("@flink-app/flink");
41
- var postUserRemoveTokenHandler = function (_a) {
42
- var ctx = _a.ctx, req = _a.req, origin = _a.origin;
43
- return __awaiter(void 0, void 0, void 0, function () {
44
- var pluginName, repo, user;
45
- return __generator(this, function (_b) {
46
- switch (_b.label) {
47
- case 0:
48
- pluginName = origin || "genericAuthPlugin";
49
- repo = ctx.repos[ctx.plugins[pluginName].repoName];
50
- return [4 /*yield*/, repo.getById(req.user._id)];
51
- case 1:
52
- user = _b.sent();
53
- if (user == null) {
54
- return [2 /*return*/, flink_1.notFound("User not found")];
55
- }
56
- user.pushNotificationTokens = user.pushNotificationTokens.filter(function (t) { return t.deviceId != req.body.deviceId; });
57
- return [4 /*yield*/, repo.updateOne(user._id, {
58
- pushNotificationTokens: user.pushNotificationTokens,
59
- })];
60
- case 2:
61
- _b.sent();
62
- return [2 /*return*/, { data: { status: "success" } }];
63
- }
64
- });
41
+ var postUserRemoveTokenHandler = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
42
+ var pluginName, repo, user;
43
+ var ctx = _b.ctx, req = _b.req, origin = _b.origin;
44
+ return __generator(this, function (_c) {
45
+ switch (_c.label) {
46
+ case 0:
47
+ pluginName = origin || "genericAuthPlugin";
48
+ repo = ctx.repos[ctx.plugins[pluginName].repoName];
49
+ return [4 /*yield*/, repo.getById(req.user._id)];
50
+ case 1:
51
+ user = _c.sent();
52
+ if (user == null) {
53
+ return [2 /*return*/, (0, flink_1.notFound)("User not found")];
54
+ }
55
+ user.pushNotificationTokens = user.pushNotificationTokens.filter(function (t) { return t.deviceId != req.body.deviceId; });
56
+ return [4 /*yield*/, repo.updateOne(user._id, {
57
+ pushNotificationTokens: user.pushNotificationTokens,
58
+ })];
59
+ case 2:
60
+ _c.sent();
61
+ return [2 /*return*/, { data: { status: "success" } }];
62
+ }
65
63
  });
66
- };
64
+ }); };
67
65
  exports.default = postUserRemoveTokenHandler;
68
66
  exports.__assumedHttpMethod = "", exports.__file = "UserPushRemoveToken.ts", exports.__query = [], exports.__params = [];
69
67
  exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "deviceId": { "type": "string" }, "token": { "type": "string" } }, "required": ["deviceId", "token"], "definitions": {} }, resSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "status": { "type": "string", "enum": ["success", "failed"] } }, "required": ["status"], "definitions": {} } };
@@ -9,12 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
18
  if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
19
  if (y = 0, t) op = [op[0] & 2, t.value];
20
20
  switch (op[0]) {
@@ -38,32 +38,30 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.__schemas = exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = void 0;
40
40
  var flink_1 = require("@flink-app/flink");
41
- var getUserTokenHandler = function (_a) {
42
- var ctx = _a.ctx, req = _a.req, origin = _a.origin;
43
- return __awaiter(void 0, void 0, void 0, function () {
44
- var pluginName, repo, user, token;
45
- return __generator(this, function (_b) {
46
- switch (_b.label) {
47
- case 0:
48
- pluginName = origin || "genericAuthPlugin";
49
- repo = ctx.repos[ctx.plugins[pluginName].repoName];
50
- return [4 /*yield*/, repo.getById(req.user._id)];
51
- case 1:
52
- user = _b.sent();
53
- if (user == null) {
54
- return [2 /*return*/, flink_1.notFound("User not found")];
55
- }
56
- if (ctx.auth == null) {
57
- return [2 /*return*/, flink_1.internalServerError()];
58
- }
59
- return [4 /*yield*/, ctx.auth.createToken({ username: user.username.toLowerCase(), _id: user._id }, user.roles)];
60
- case 2:
61
- token = _b.sent();
62
- return [2 /*return*/, { data: { token: token } }];
63
- }
64
- });
41
+ var getUserTokenHandler = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
42
+ var pluginName, repo, user, token;
43
+ var ctx = _b.ctx, req = _b.req, origin = _b.origin;
44
+ return __generator(this, function (_c) {
45
+ switch (_c.label) {
46
+ case 0:
47
+ pluginName = origin || "genericAuthPlugin";
48
+ repo = ctx.repos[ctx.plugins[pluginName].repoName];
49
+ return [4 /*yield*/, repo.getById(req.user._id)];
50
+ case 1:
51
+ user = _c.sent();
52
+ if (user == null) {
53
+ return [2 /*return*/, (0, flink_1.notFound)("User not found")];
54
+ }
55
+ if (ctx.auth == null) {
56
+ return [2 /*return*/, (0, flink_1.internalServerError)()];
57
+ }
58
+ return [4 /*yield*/, ctx.auth.createToken({ username: user.username.toLowerCase(), _id: user._id }, user.roles)];
59
+ case 2:
60
+ token = _c.sent();
61
+ return [2 /*return*/, { data: { token: token } }];
62
+ }
65
63
  });
66
- };
64
+ }); };
67
65
  exports.default = getUserTokenHandler;
68
66
  exports.__assumedHttpMethod = "", exports.__file = "UserToken.ts", exports.__query = [], exports.__params = [];
69
67
  exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "token": { "type": "string" } }, "required": ["token"], "definitions": {} }, resSchema: undefined };
package/dist/src/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -23,7 +27,7 @@ var genericAuthPlugin = function (options) {
23
27
  options.pluginId = "genericAuthPlugin";
24
28
  return {
25
29
  id: options.pluginId,
26
- init: function (app) { return init_1.init(app, options); },
30
+ init: function (app) { return (0, init_1.init)(app, options); },
27
31
  ctx: {
28
32
  loginUser: coreFunctions_1.loginUser,
29
33
  loginByToken: coreFunctions_1.loginByToken,
@@ -36,6 +40,7 @@ var genericAuthPlugin = function (options) {
36
40
  createPasswordHashAndSaltMethod: options.createPasswordHashAndSaltMethod,
37
41
  validatePasswordMethod: options.validatePasswordMethod,
38
42
  usernameFormat: options.usernameFormat || /.{1,}$/,
43
+ onSuccessfulLogin: options.onSuccessfulLogin,
39
44
  smsOptions: options.sms
40
45
  },
41
46
  };
package/dist/src/init.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -19,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
23
  return result;
20
24
  };
21
25
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.init = void 0;
26
+ exports.init = init;
23
27
  var flink_1 = require("@flink-app/flink");
24
28
  var userLoginHandler = __importStar(require("./handlers/UserLogin"));
25
29
  var userLoginByTokenHandler = __importStar(require("./handlers/UserLoginByToken"));
@@ -118,7 +122,7 @@ function init(app, options) {
118
122
  if ((_a = options.passwordResetSettings) === null || _a === void 0 ? void 0 : _a.enablePasswordResetForm) {
119
123
  (_b = app.expressApp) === null || _b === void 0 ? void 0 : _b.get(options.baseUrl + "/password/reset/form", function (req, res) {
120
124
  var _a;
121
- return UserPasswordResetForm_1.handleUserPasswordResetForm(req, res, {
125
+ return (0, UserPasswordResetForm_1.handleUserPasswordResetForm)(req, res, {
122
126
  templateFile: (_a = options.passwordResetSettings) === null || _a === void 0 ? void 0 : _a.passwordResetForm,
123
127
  completeUrl: options.baseUrl + "/password/reset/complete",
124
128
  });
@@ -143,4 +147,3 @@ function init(app, options) {
143
147
  }
144
148
  }
145
149
  }
146
- exports.init = init;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
package/package.json CHANGED
@@ -1,34 +1,34 @@
1
1
  {
2
- "name": "@flink-app/generic-auth-plugin",
3
- "version": "0.11.0",
4
- "description": "Flink plugin that provides a generic user authentification solution.",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\"",
7
- "build": "flink build",
8
- "prepublish": "npm run build",
9
- "watch": "nodemon --exec \"flink build\""
10
- },
11
- "author": "johan@frost.se",
12
- "publishConfig": {
13
- "access": "public"
14
- },
15
- "license": "MIT",
16
- "types": "dist/src/index.d.ts",
17
- "main": "dist/src/index.js",
18
- "dependencies": {
19
- "@flink-app/email-plugin": "^0.11.0",
20
- "@flink-app/jwt-auth-plugin": "^0.11.0",
21
- "@flink-app/management-api-plugin": "^0.11.0",
22
- "@flink-app/sms-plugin": "^0.11.0",
23
- "handlebars": "^4.7.7",
24
- "jsonwebtoken": "^8.5.1"
25
- },
26
- "devDependencies": {
27
- "@flink-app/flink": "^0.11.0",
28
- "@types/jsonwebtoken": "^8.5.2",
29
- "@types/node": "^15.6.2",
30
- "ts-node": "^9.1.1",
31
- "typescript": "^4.2.4"
32
- },
33
- "gitHead": "3869def3e7e7e7105373ad31bc23a8ed68108015"
2
+ "name": "@flink-app/generic-auth-plugin",
3
+ "version": "0.11.4-next.0",
4
+ "description": "Flink plugin that provides a generic user authentification solution.",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\"",
7
+ "build": "flink build",
8
+ "prepublish": "npm run build",
9
+ "watch": "nodemon --exec \"flink build\""
10
+ },
11
+ "author": "johan@frost.se",
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "license": "MIT",
16
+ "types": "dist/src/index.d.ts",
17
+ "main": "dist/src/index.js",
18
+ "dependencies": {
19
+ "@flink-app/email-plugin": "^0.11.4-next.0",
20
+ "@flink-app/jwt-auth-plugin": "^0.11.4-next.0",
21
+ "@flink-app/management-api-plugin": "^0.11.4-next.0",
22
+ "@flink-app/sms-plugin": "^0.11.4-next.0",
23
+ "handlebars": "^4.7.7",
24
+ "jsonwebtoken": "^8.5.1"
25
+ },
26
+ "devDependencies": {
27
+ "@flink-app/flink": "^0.11.4-next.0",
28
+ "@types/jsonwebtoken": "^8.5.2",
29
+ "@types/node": "^22.10.1",
30
+ "ts-node": "^10.9.2",
31
+ "typescript": "5.6.2"
32
+ },
33
+ "gitHead": "6a44df1b6601c86ea3402750b939784d003202c3"
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
  };