@resolveio/server-lib 1.0.0-rc4 → 1.0.0-rc6

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 (157) hide show
  1. package/collections/active-subscription.collection.d.ts +8 -0
  2. package/collections/active-subscription.collection.js +68 -2
  3. package/collections/app-status.collection.d.ts +8 -0
  4. package/collections/app-status.collection.js +43 -2
  5. package/collections/app-version.collection.d.ts +8 -0
  6. package/collections/app-version.collection.js +56 -2
  7. package/collections/counter.collection.d.ts +10 -0
  8. package/collections/counter.collection.js +73 -2
  9. package/collections/cron-job-history.collection.d.ts +8 -0
  10. package/collections/cron-job-history.collection.js +86 -2
  11. package/collections/cron-job.collection.d.ts +8 -0
  12. package/collections/cron-job.collection.js +89 -2
  13. package/collections/file.collection.d.ts +10 -0
  14. package/collections/file.collection.js +73 -2
  15. package/collections/flag.collection.d.ts +8 -0
  16. package/collections/flag.collection.js +47 -2
  17. package/collections/log.collection.d.ts +8 -0
  18. package/collections/log.collection.js +64 -2
  19. package/collections/logged-in-users.collection.d.ts +8 -0
  20. package/collections/logged-in-users.collection.js +70 -2
  21. package/collections/method-call.collection.d.ts +7 -0
  22. package/collections/method-call.collection.js +44 -2
  23. package/collections/method-response.collection.d.ts +7 -0
  24. package/collections/method-response.collection.js +48 -2
  25. package/collections/queue-flag.collection.d.ts +8 -0
  26. package/collections/queue-flag.collection.js +41 -2
  27. package/collections/queue-method.collection.d.ts +8 -0
  28. package/collections/queue-method.collection.js +116 -2
  29. package/collections/queue-response.collection.d.ts +8 -0
  30. package/collections/queue-response.collection.js +78 -2
  31. package/collections/support-ticket.collection.d.ts +8 -0
  32. package/collections/support-ticket.collection.js +146 -2
  33. package/collections/user.collection.d.ts +9 -0
  34. package/collections/user.collection.js +108 -2
  35. package/cron/cron.d.ts +6 -0
  36. package/cron/cron.js +160 -2
  37. package/fixtures/cron-jobs.d.ts +2 -0
  38. package/fixtures/cron-jobs.js +72 -2
  39. package/fixtures/init.d.ts +2 -0
  40. package/fixtures/init.js +73 -2
  41. package/http/auth.d.ts +3 -0
  42. package/http/auth.js +472 -2
  43. package/http/health.d.ts +2 -0
  44. package/http/health.js +8 -2
  45. package/index.d.ts +14 -0
  46. package/index.js +97 -2
  47. package/managers/cron.manager.d.ts +17 -0
  48. package/managers/cron.manager.js +193 -2
  49. package/managers/method.manager.d.ts +27 -0
  50. package/managers/method.manager.js +513 -2
  51. package/managers/queue-method.manager.d.ts +14 -0
  52. package/managers/queue-method.manager.js +239 -2
  53. package/managers/subscription.manager.d.ts +27 -0
  54. package/managers/subscription.manager.js +700 -2
  55. package/managers/support.manager.d.ts +18 -0
  56. package/managers/support.manager.js +208 -2
  57. package/methods/accounts.d.ts +3 -0
  58. package/methods/accounts.js +253 -2
  59. package/methods/aws.d.ts +3 -0
  60. package/methods/aws.js +323 -2
  61. package/methods/cloudconvert.d.ts +3 -0
  62. package/methods/cloudconvert.js +37 -2
  63. package/methods/collections.d.ts +3 -0
  64. package/methods/collections.js +738 -2
  65. package/methods/counters.d.ts +3 -0
  66. package/methods/counters.js +404 -2
  67. package/methods/cron-jobs.d.ts +3 -0
  68. package/methods/cron-jobs.js +63 -2
  69. package/methods/flags.d.ts +3 -0
  70. package/methods/flags.js +6 -2
  71. package/methods/logs.d.ts +3 -0
  72. package/methods/logs.js +29 -2
  73. package/methods/pdf.d.ts +3 -0
  74. package/methods/pdf.js +303 -2
  75. package/models/active-subscription.model.d.ts +14 -0
  76. package/models/active-subscription.model.js +2 -2
  77. package/models/app-status.model.d.ts +5 -0
  78. package/models/app-status.model.js +2 -2
  79. package/models/app-version.model.d.ts +5 -0
  80. package/models/app-version.model.js +2 -2
  81. package/models/collection-document.model.d.ts +7 -0
  82. package/models/collection-document.model.js +2 -2
  83. package/models/counter.model.d.ts +6 -0
  84. package/models/counter.model.js +2 -2
  85. package/models/cron-job-history.model.d.ts +13 -0
  86. package/models/cron-job-history.model.js +2 -2
  87. package/models/cron-job.model.d.ts +14 -0
  88. package/models/cron-job.model.js +2 -2
  89. package/models/dialog.model.d.ts +24 -0
  90. package/models/dialog.model.js +2 -2
  91. package/models/file.model.d.ts +10 -0
  92. package/models/file.model.js +2 -2
  93. package/models/flag.model.d.ts +6 -0
  94. package/models/flag.model.js +2 -2
  95. package/models/log.model.d.ts +12 -0
  96. package/models/log.model.js +2 -2
  97. package/models/logged-in-users.model.d.ts +10 -0
  98. package/models/logged-in-users.model.js +2 -2
  99. package/models/method-call.model.d.ts +8 -0
  100. package/models/method-call.model.js +2 -2
  101. package/models/method-response.model.d.ts +9 -0
  102. package/models/method-response.model.js +2 -2
  103. package/models/method.model.d.ts +11 -0
  104. package/models/method.model.js +2 -2
  105. package/models/pagination.model.d.ts +12 -0
  106. package/models/pagination.model.js +20 -2
  107. package/models/permission.model.d.ts +13 -0
  108. package/models/permission.model.js +2 -2
  109. package/models/queue-method.model.d.ts +10 -0
  110. package/models/queue-method.model.js +2 -2
  111. package/models/queue-response.model.d.ts +11 -0
  112. package/models/queue-response.model.js +2 -2
  113. package/models/select-data-label.model.d.ts +10 -0
  114. package/models/select-data-label.model.js +2 -2
  115. package/models/server-response.model.d.ts +6 -0
  116. package/models/server-response.model.js +2 -2
  117. package/models/subscription.model.d.ts +31 -0
  118. package/models/subscription.model.js +2 -2
  119. package/models/support-method.model.d.ts +10 -0
  120. package/models/support-method.model.js +2 -2
  121. package/models/support-ticket.model.d.ts +40 -0
  122. package/models/support-ticket.model.js +2 -2
  123. package/models/user.model.d.ts +15 -0
  124. package/models/user.model.js +2 -2
  125. package/package.json +3 -1
  126. package/publications/app-status.d.ts +3 -0
  127. package/publications/app-status.js +14 -2
  128. package/publications/app-version.d.ts +3 -0
  129. package/publications/app-version.js +14 -2
  130. package/publications/cron-jobs.d.ts +3 -0
  131. package/publications/cron-jobs.js +14 -2
  132. package/publications/files.d.ts +3 -0
  133. package/publications/files.js +71 -2
  134. package/publications/flags.d.ts +3 -0
  135. package/publications/flags.js +23 -2
  136. package/publications/logs.d.ts +3 -0
  137. package/publications/logs.js +26 -2
  138. package/publications/method-calls.d.ts +3 -0
  139. package/publications/method-calls.js +14 -2
  140. package/publications/method-responses.d.ts +3 -0
  141. package/publications/method-responses.js +14 -2
  142. package/publications/super-admin.d.ts +3 -0
  143. package/publications/super-admin.js +21 -2
  144. package/publications/support-tickets.d.ts +2 -0
  145. package/publications/support-tickets.js +118 -2
  146. package/server-app.d.ts +33 -0
  147. package/server-app.js +598 -2
  148. package/support-methods/aws.d.ts +3 -0
  149. package/support-methods/aws.js +276 -2
  150. package/support-methods/collections.d.ts +3 -0
  151. package/support-methods/collections.js +471 -2
  152. package/support-methods/counters.d.ts +3 -0
  153. package/support-methods/counters.js +189 -2
  154. package/support-methods/support.d.ts +3 -0
  155. package/support-methods/support.js +19 -2
  156. package/util/common.d.ts +15 -0
  157. package/util/common.js +334 -2
package/fixtures/init.js CHANGED
@@ -1,2 +1,73 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(i,c,l,s){return new(l||(l=Promise))(function(e,n){function t(e){try{r(s.next(e))}catch(e){n(e)}}function o(e){try{r(s.throw(e))}catch(e){n(e)}}function r(n){n.done?e(n.value):new l(function(e){e(n.value)}).then(t,o)}r((s=s.apply(i,c||[])).next())})},__generator=this&&this.__generator||function(t,o){var r,i,c,e,l={label:0,sent:function(){if(1&c[0])throw c[1];return c[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(r)throw new TypeError("Generator is already executing.");for(;l;)try{if(r=1,i&&(c=2&n[0]?i.return:n[0]?i.throw||((c=i.return)&&c.call(i),0):i.next)&&!(c=c.call(i,n[1])).done)return c;switch(i=0,c&&(n=[2&n[0],c.value]),n[0]){case 0:case 1:c=n;break;case 4:return l.label++,{value:n[1],done:!1};case 5:l.label++,i=n[1],n=[0];continue;case 7:n=l.ops.pop(),l.trys.pop();continue;default:if(!(c=0<(c=l.trys).length&&c[c.length-1])&&(6===n[0]||2===n[0])){l=0;continue}if(3===n[0]&&(!c||n[1]>c[0]&&n[1]<c[3])){l.label=n[1];break}if(6===n[0]&&l.label<c[1]){l.label=c[1],c=n;break}if(c&&l.label<c[2]){l.label=c[2],l.ops.push(n);break}c[2]&&l.ops.pop(),l.trys.pop();continue}n=o.call(t,l)}catch(e){n=[6,e],i=0}finally{r=c=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}};Object.defineProperty(exports,"__esModule",{value:!0});var app_version_collection_1=require("../collections/app-version.collection"),logged_in_users_collection_1=require("../collections/logged-in-users.collection"),active_subscription_collection_1=require("../collections/active-subscription.collection"),mongoose_1=require("mongoose");function loadServerInit(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return[4,app_version_collection_1.AppVersions.findOne()];case 1:return e.sent()||app_version_collection_1.AppVersions.create({_id:mongoose_1.Types.ObjectId().toHexString(),version:1}),[4,logged_in_users_collection_1.LoggedInUsers.find({})];case 2:return e.sent().forEach(function(e){logged_in_users_collection_1.LoggedInUsers.deleteOne({_id:e._id}).exec()}),[4,active_subscription_collection_1.ActiveSubscriptions.find({})];case 3:return e.sent().forEach(function(e){active_subscription_collection_1.ActiveSubscriptions.deleteOne({_id:e._id}).exec()}),[2]}})})}exports.loadServerInit=loadServerInit;
2
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9pbml0LnRzIl0sIm5hbWVzIjpbImFwcF92ZXJzaW9uX2NvbGxlY3Rpb25fMSIsInJlcXVpcmUiLCJsb2dnZWRfaW5fdXNlcnNfY29sbGVjdGlvbl8xIiwiYWN0aXZlX3N1YnNjcmlwdGlvbl9jb2xsZWN0aW9uXzEiLCJtb25nb29zZV8xIiwibG9hZFNlcnZlckluaXQiLCJBcHBWZXJzaW9ucyIsImZpbmRPbmUiLCJfYSIsInNlbnQiLCJjcmVhdGUiLCJfaWQiLCJUeXBlcyIsIk9iamVjdElkIiwidG9IZXhTdHJpbmciLCJ2ZXJzaW9uIiwiTG9nZ2VkSW5Vc2VycyIsImZpbmQiLCJmb3JFYWNoIiwibG9nZ2VkSW5Vc2VyIiwiZGVsZXRlT25lIiwiZXhlYyIsIkFjdGl2ZVN1YnNjcmlwdGlvbnMiLCJzdWIiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoibzdDQUFBLElBQUFBLHlCQUFBQyxRQUFBLHlDQUNBQyw2QkFBQUQsUUFBQSw2Q0FDQUUsaUNBQUFGLFFBQUEsaURBQ0FHLFdBQUFILFFBQUEsWUFFQSxTQUFzQkksMkhBQ0osTUFBQSxDQUFBLEVBQU1MLHlCQUFBTSxZQUFZQyxrQkFTZixPQVRIQyxFQUFBQyxRQUdoQlQseUJBQUFNLFlBQVlJLE9BQU8sQ0FDbEJDLElBQUtQLFdBQUFRLE1BQU1DLFdBQVdDLGNBQ3RCQyxRQUFTLElBSVMsQ0FBQSxFQUFNYiw2QkFBQWMsY0FBY0MsS0FBSyxZQU01QixPQU5HVCxFQUFBQyxPQUVOUyxRQUFRLFNBQUFDLEdBQ3JCakIsNkJBQUFjLGNBQWNJLFVBQVUsQ0FBQ1QsSUFBS1EsRUFBYVIsTUFBTVUsU0FHakMsQ0FBQSxFQUFNbEIsaUNBQUFtQixvQkFBb0JMLEtBQUssbUJBQS9CVCxFQUFBQyxPQUVOUyxRQUFRLFNBQUFLLEdBQ2xCcEIsaUNBQUFtQixvQkFBb0JGLFVBQVUsQ0FBQ1QsSUFBS1ksRUFBSVosTUFBTVUsa0JBbkJoREcsUUFBQW5CLGVBQUFBIiwiZmlsZSI6ImZpeHR1cmVzL2luaXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBWZXJzaW9ucyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2FwcC12ZXJzaW9uLmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgTG9nZ2VkSW5Vc2VycyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2xvZ2dlZC1pbi11c2Vycy5jb2xsZWN0aW9uJztcbmltcG9ydCB7IEFjdGl2ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9hY3RpdmUtc3Vic2NyaXB0aW9uLmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgVHlwZXMgfSBmcm9tICdtb25nb29zZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU2VydmVySW5pdCgpIHtcblx0bGV0IGFwcFZlcnNpb24gPSBhd2FpdCBBcHBWZXJzaW9ucy5maW5kT25lKCk7XG5cblx0aWYgKCFhcHBWZXJzaW9uKSB7XG5cdFx0QXBwVmVyc2lvbnMuY3JlYXRlKHtcblx0XHRcdF9pZDogVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpLFxuXHRcdFx0dmVyc2lvbjogMVxuXHRcdH0pO1xuXHR9XG5cblx0bGV0IGxvZ2dlZEluVXNlcnMgPSBhd2FpdCBMb2dnZWRJblVzZXJzLmZpbmQoe30pO1xuXG5cdGxvZ2dlZEluVXNlcnMuZm9yRWFjaChsb2dnZWRJblVzZXIgPT4ge1xuXHRcdExvZ2dlZEluVXNlcnMuZGVsZXRlT25lKHtfaWQ6IGxvZ2dlZEluVXNlci5faWR9KS5leGVjKCk7XG5cdH0pO1xuXG5cdGxldCBhY3RpdmVTdWJzID0gYXdhaXQgQWN0aXZlU3Vic2NyaXB0aW9ucy5maW5kKHt9KTtcblxuXHRhY3RpdmVTdWJzLmZvckVhY2goc3ViID0+IHtcblx0XHRBY3RpdmVTdWJzY3JpcHRpb25zLmRlbGV0ZU9uZSh7X2lkOiBzdWIuX2lkfSkuZXhlYygpO1xuXHR9KTtcbn0iXX0=
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ var app_version_collection_1 = require("../collections/app-version.collection");
39
+ var logged_in_users_collection_1 = require("../collections/logged-in-users.collection");
40
+ var active_subscription_collection_1 = require("../collections/active-subscription.collection");
41
+ var mongoose_1 = require("mongoose");
42
+ function loadServerInit() {
43
+ return __awaiter(this, void 0, void 0, function () {
44
+ var appVersion, loggedInUsers, activeSubs;
45
+ return __generator(this, function (_a) {
46
+ switch (_a.label) {
47
+ case 0: return [4 /*yield*/, app_version_collection_1.AppVersions.findOne()];
48
+ case 1:
49
+ appVersion = _a.sent();
50
+ if (!appVersion) {
51
+ app_version_collection_1.AppVersions.create({
52
+ _id: mongoose_1.Types.ObjectId().toHexString(),
53
+ version: 1
54
+ });
55
+ }
56
+ return [4 /*yield*/, logged_in_users_collection_1.LoggedInUsers.find({})];
57
+ case 2:
58
+ loggedInUsers = _a.sent();
59
+ loggedInUsers.forEach(function (loggedInUser) {
60
+ logged_in_users_collection_1.LoggedInUsers.deleteOne({ _id: loggedInUser._id }).exec();
61
+ });
62
+ return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.find({})];
63
+ case 3:
64
+ activeSubs = _a.sent();
65
+ activeSubs.forEach(function (sub) {
66
+ active_subscription_collection_1.ActiveSubscriptions.deleteOne({ _id: sub._id }).exec();
67
+ });
68
+ return [2 /*return*/];
69
+ }
70
+ });
71
+ });
72
+ }
73
+ exports.loadServerInit = loadServerInit;
package/http/auth.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { ResolveIOMainServer } from '../server-app';
2
+ export declare function setupAuthRoutes(mainServer: ResolveIOMainServer, app: any, serverConfig: any): void;
3
+ //# sourceMappingURL=auth.d.ts.map
package/http/auth.js CHANGED
@@ -1,2 +1,472 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(i,o,a,u){return new(a||(a=Promise))(function(e,r){function n(e){try{t(u.next(e))}catch(e){r(e)}}function s(e){try{t(u.throw(e))}catch(e){r(e)}}function t(r){r.done?e(r.value):new a(function(e){e(r.value)}).then(n,s)}t((u=u.apply(i,o||[])).next())})},__generator=this&&this.__generator||function(n,s){var t,i,o,e,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return e={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function r(r){return function(e){return function(r){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,i&&(o=2&r[0]?i.return:r[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,r[1])).done)return o;switch(i=0,o&&(r=[2&r[0],o.value]),r[0]){case 0:case 1:o=r;break;case 4:return a.label++,{value:r[1],done:!1};case 5:a.label++,i=r[1],r=[0];continue;case 7:r=a.ops.pop(),a.trys.pop();continue;default:if(!(o=0<(o=a.trys).length&&o[o.length-1])&&(6===r[0]||2===r[0])){a=0;continue}if(3===r[0]&&(!o||r[1]>o[0]&&r[1]<o[3])){a.label=r[1];break}if(6===r[0]&&a.label<o[1]){a.label=o[1],o=r;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(r);break}o[2]&&a.ops.pop(),a.trys.pop();continue}r=s.call(n,a)}catch(e){r=[6,e],i=0}finally{t=o=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,e])}}};Object.defineProperty(exports,"__esModule",{value:!0});var user_collection_1=require("../collections/user.collection"),jwt=require("jsonwebtoken"),handlebars=require("handlebars"),__1=require("..");function setupAuthRoutes(o,e,a){var r=this;e.post("/login",function(n,i){return __awaiter(r,void 0,void 0,function(){var t,r;return __generator(this,function(e){switch(e.label){case 0:return n.headers.origin===a.ROOT_URL||n.headers.origin===a.SEC_ROOT_URL?[3,1]:(i.send(JSON.stringify({error:!0,result:"Invalid header"})),[3,5]);case 1:return[4,user_collection_1.Users.findOne({username:n.body.username}).exec()];case 2:return(t=e.sent())?[3,4]:[4,user_collection_1.Users.findOne({email:n.body.username}).exec()];case 3:t=e.sent(),e.label=4;case 4:r=t?t.username:n.body.username,user_collection_1.Users.authenticate()(r,n.body.password,function(e,s,r){if(r)if("TooManyAttemptsError"===r.name){i.send(JSON.stringify({error:!0,result:r.message+". A password reset link has been sent to your email, please reset your password."})),t.services.forgot_password=jwt.sign({id_user:t._id},a.JWT_SECRET);var n={userToChangePassword:t.fullname,userWhoResetPassword:__1.default.getClientName()+" System",url:a.ROOT_URL+"/forgot-password/"+t.services.forgot_password+"/"};user_collection_1.Users.updateOne({_id:t._id},{$set:{services:t.services}}).exec(function(e,r){o.getMethodManager().readFile("email-templates/forgot-password.html").then(function(e){var r=handlebars.compile(e);handlebars.registerHelper("equals",function(e,r){return e===r}),o.getMethodManager().sendEmail(t.email,"ResolveIO ("+__1.default.getClientName()+") - Forgot Password","",r(n))},function(e){return console.log(e)})})}else i.send(JSON.stringify({error:!0,result:r.message}));else s&&s.active&&s.resetAttempts(function(e,r,n){i.send(JSON.stringify({error:!1,result:{token:jwt.sign({id_user:s._id},a.JWT_SECRET,{expiresIn:7776e6})}}))})}),e.label=5;case 5:return[2]}})})}),e.post("/accessToken",function(r,t){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){return r.headers.origin!==a.ROOT_URL&&r.headers.origin!==a.SEC_ROOT_URL&&r.headers.origin!==a.RESOLVEIO_URL&&r.headers.origin!==a.RESOLVEIO_SECONDARY_URL?t.send(JSON.stringify({error:!0,result:"Invalid header"})):"http://localhost:4200"!==a.ROOT_URL?jwt.verify(r.body.refreshToken,a.JWT_SECRET,function(e,r){e?t.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findById(r.id_user).exec().then(function(s){s?s.active?s.resetAttempts(function(e,r,n){s.save(),t.send(JSON.stringify({error:!1,result:{token:jwt.sign({id_user:s._id},a.JWT_SECRET,{expiresIn:2592e5}),user:s}}))}):t.send(JSON.stringify({error:!0,result:"Account is Disabled"})):t.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){t.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})}):jwt.verify(r.body.refreshToken,a.JWT_SECRET,function(e,r){e?t.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findById(r.id_user).exec().then(function(s){s?s.active?s.resetAttempts(function(e,r,n){s.save(),t.send(JSON.stringify({error:!1,result:{token:jwt.sign({id_user:s._id},a.JWT_SECRET,{expiresIn:2592e5}),user:s}}))}):t.send(JSON.stringify({error:!0,result:"Account is Disabled"})):t.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){t.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})}),[2]})})}),e.post("/userWithEnrollmentToken",function(n,s){n.headers.origin!==a.ROOT_URL&&n.headers.origin!==a.SEC_ROOT_URL&&n.headers.origin!==a.RESOLVEIO_URL&&n.headers.origin!==a.RESOLVEIO_SECONDARY_URL?s.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(n.body.enrollmentToken,a.JWT_SECRET,function(e,r){e?s.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:r.id_user},{"services.enrollment":n.body.enrollmentToken}]}).select("_id __v username active").exec().then(function(e){e?e.active?s.send(JSON.stringify({error:!1,result:{user:e}})):s.send(JSON.stringify({error:!0,result:"Account is Disabled"})):s.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){s.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})})}),e.post("/setUserWithEnrollmentToken",function(s,t){var e=this;s.headers.origin!==a.ROOT_URL&&s.headers.origin!==a.SEC_ROOT_URL&&s.headers.origin!==a.RESOLVEIO_URL&&s.headers.origin!==a.RESOLVEIO_SECONDARY_URL?t.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(s.body.enrollmentToken,a.JWT_SECRET,function(r,n){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return r?t.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:n.id_user},{"services.enrollment":s.body.enrollmentToken}]}).exec().then(function(n){n?n.active?n.setPassword(s.body.password,function(e,r){r?(n.services.enrollment="",n.save(),t.send(JSON.stringify({error:!1,result:!0}))):t.send(JSON.stringify({error:!0,result:e}))}):t.send(JSON.stringify({error:!0,result:"Account is Disabled"})):t.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){t.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))}),[2]})})})}),e.post("/userWithForgotPasswordToken",function(n,s){n.headers.origin!==a.ROOT_URL&&n.headers.origin!==a.SEC_ROOT_URL&&n.headers.origin!==a.RESOLVEIO_URL&&n.headers.origin!==a.RESOLVEIO_SECONDARY_URL?s.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(n.body.forgotPasswordToken,a.JWT_SECRET,function(e,r){e?s.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:r.id_user},{"services.forgot_password":n.body.forgotPasswordToken}]}).select("_id __v username active").exec().then(function(e){e?e.active?s.send(JSON.stringify({error:!1,result:{user:e}})):s.send(JSON.stringify({error:!0,result:"Account is Disabled"})):s.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){s.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})})}),e.post("/setUserWithForgotPasswordToken",function(t,i){var e=this;t.headers.origin!==a.ROOT_URL&&t.headers.origin!==a.SEC_ROOT_URL&&t.headers.origin!==a.RESOLVEIO_URL&&t.headers.origin!==a.RESOLVEIO_SECONDARY_URL?i.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(t.body.forgotPasswordToken,a.JWT_SECRET,function(r,n){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return r?i.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:n.id_user},{"services.forgot_password":t.body.forgotPasswordToken}]}).exec().then(function(s){s?s.active?s.setPassword(t.body.password,function(e,r){r?(s.services.forgot_password="",s.resetAttempts(function(e,r,n){s.save()}),i.send(JSON.stringify({error:!1,result:!0}))):i.send(JSON.stringify({error:!0,result:e}))}):i.send(JSON.stringify({error:!0,result:"Account is Disabled"})):i.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){i.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))}),[2]})})})})}exports.setupAuthRoutes=setupAuthRoutes;
2
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL2F1dGgudHMiXSwibmFtZXMiOlsidXNlcl9jb2xsZWN0aW9uXzEiLCJyZXF1aXJlIiwiand0IiwiaGFuZGxlYmFycyIsIl9fMSIsInNldHVwQXV0aFJvdXRlcyIsIm1haW5TZXJ2ZXIiLCJhcHAiLCJzZXJ2ZXJDb25maWciLCJfdGhpcyIsInRoaXMiLCJwb3N0IiwicmVxdWVzdCIsInJlc3BvbnNlIiwiX19hd2FpdGVyIiwiaGVhZGVycyIsIm9yaWdpbiIsInNlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZXN1bHQiLCJVc2VycyIsImZpbmRPbmUiLCJ1c2VybmFtZSIsImJvZHkiLCJleGVjIiwidXNlcl8xIiwiX2EiLCJzZW50IiwiZW1haWwiLCJhdXRoZW50aWNhdGUiLCJwYXNzd29yZCIsImVyciIsInJlcyIsIm5hbWUiLCJtZXNzYWdlIiwic2VydmljZXMiLCJmb3Jnb3RfcGFzc3dvcmQiLCJzaWduIiwiaWRfdXNlciIsIl9pZCIsImVtYWlsRGF0YV8xIiwidXNlclRvQ2hhbmdlUGFzc3dvcmQiLCJmdWxsbmFtZSIsInVzZXJXaG9SZXNldFBhc3N3b3JkIiwiZGVmYXVsdCIsImdldENsaWVudE5hbWUiLCJ1cmwiLCJ1cGRhdGVPbmUiLCIkc2V0IiwiZXJyVXAiLCJyZXNVcCIsImdldE1ldGhvZE1hbmFnZXIiLCJyZWFkRmlsZSIsInRoZW4iLCJodG1sIiwidGVtcGxhdGUiLCJjb21waWxlIiwicmVnaXN0ZXJIZWxwZXIiLCJhIiwiYiIsInNlbmRFbWFpbCIsImVyckVtYWlsIiwiY29uc29sZSIsImxvZyIsImFjdGl2ZSIsInJlc2V0QXR0ZW1wdHMiLCJlcnJBdCIsInJlc0F0IiwiZXJyb3JBdCIsInRva2VuIiwiZXhwaXJlc0luIiwidmVyaWZ5IiwicmVmcmVzaFRva2VuIiwiZGVjb2RlZCIsImZpbmRCeUlkIiwidXNlciIsInNhdmUiLCJlbnJvbGxtZW50VG9rZW4iLCIkYW5kIiwic2VydmljZXMuZW5yb2xsbWVudCIsInNlbGVjdCIsInNldFBhc3N3b3JkIiwiZXJyU2V0IiwicmVzU2V0IiwiZW5yb2xsbWVudCIsImZvcmdvdFBhc3N3b3JkVG9rZW4iLCJzZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQiLCJyZXNBdHQiLCJlcnJvckF0dCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJvN0NBQUEsSUFBQUEsa0JBQUFDLFFBQUEsa0NBQ0FDLElBQUFELFFBQUEsZ0JBQ0FFLFdBQUFGLFFBQUEsY0FHQUcsSUFBQUgsUUFBQSxNQUVBLFNBQWdCSSxnQkFBZ0JDLEVBQWlDQyxFQUFLQyxHQUF0RSxJQUFBQyxFQUFBQyxLQUVDSCxFQUFJSSxLQUFLLFNBQVUsU0FBT0MsRUFBU0MsR0FBUSxPQUFBQyxVQUFBTCxPQUFBLE9BQUEsRUFBQSxxRkFDdENHLEVBQVFHLFFBQVFDLFNBQVdSLEVBQXVCLFVBQUtJLEVBQVFHLFFBQVFDLFNBQVdSLEVBQTJCLGFBQTdHLENBQUEsRUFBQSxJQUNISyxFQUFTSSxLQUFLQyxLQUFLQyxVQUFVLENBQzVCQyxPQUFPLEVBQ1BDLE9BQVEsa0NBS0UsTUFBQSxDQUFBLEVBQU1yQixrQkFBQXNCLE1BQU1DLFFBQVEsQ0FBQ0MsU0FBVVosRUFBUWEsS0FBS0QsV0FBV0Usc0JBQTlEQyxFQUFPQyxFQUFBQyxRQUVQLENBQUEsRUFBQSxHQUNJLENBQUEsRUFBTTdCLGtCQUFBc0IsTUFBTUMsUUFBUSxDQUFDTyxNQUFPbEIsRUFBUWEsS0FBS0QsV0FBV0UsZUFBM0RDLEVBQU9DLEVBQUFDLHdCQUdKTCxFQUFXRyxFQUFPQSxFQUFLSCxTQUFXWixFQUFRYSxLQUFLRCxTQUVuRHhCLGtCQUFBc0IsTUFBTVMsY0FBTi9CLENBQXFCd0IsRUFBVVosRUFBUWEsS0FBS08sU0FBVSxTQUFDQyxFQUFLQyxFQUFLZCxHQUNoRSxHQUFJQSxFQUNILEdBQW1CLHlCQUFmQSxFQUFNZSxLQUFpQyxDQUMxQ3RCLEVBQVNJLEtBQUtDLEtBQUtDLFVBQVUsQ0FDNUJDLE9BQU8sRUFDUEMsT0FBUUQsRUFBTWdCLFFBQVUs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UixFQUFTSSxLQUFLQyxLQUFLQyxVQUFVLENBQzVCQyxPQUFPLEVBQ1BDLE9BQVEsbUJBR1IsU0FBQUQsR0FDRlAsRUFBU0ksS0FBS0MsS0FBS0MsVUFBVSxDQUM1QkMsT0FBTyxFQUNQQyxPQUFRLDZDQXRhZnNFLFFBQUF0RixnQkFBQUEiLCJmaWxlIjoiaHR0cC9hdXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlcnMgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy91c2VyLmNvbGxlY3Rpb24nO1xuaW1wb3J0ICogYXMgand0IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgKiBhcyBoYW5kbGViYXJzIGZyb20gJ2hhbmRsZWJhcnMnO1xuaW1wb3J0IHsgTWV0aG9kTWFuYWdlciB9IGZyb20gJy4uL21hbmFnZXJzL21ldGhvZC5tYW5hZ2VyJztcbmltcG9ydCB7IFJlc29sdmVJT01haW5TZXJ2ZXIgfSBmcm9tICcuLi9zZXJ2ZXItYXBwJztcbmltcG9ydCBSZXNvbHZlSU9TZXJ2ZXIgZnJvbSAnLi4nO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBBdXRoUm91dGVzKG1haW5TZXJ2ZXI6IFJlc29sdmVJT01haW5TZXJ2ZXIsIGFwcCwgc2VydmVyQ29uZmlnKSB7XG5cdC8vIExvZ2luIHZpYSBIVFRQLCByZXR1cm4gcmVmcmVzaCB0b2tlbiBpZiBhdXRoZW50aWNhdGVkXG5cdGFwcC5wb3N0KCcvbG9naW4nLCBhc3luYyAocmVxdWVzdCwgcmVzcG9uc2UpID0+IHtcblx0XHRpZiAocmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydST09UX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snU0VDX1JPT1RfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXG5cdFx0XHRsZXQgdXNlciA9IGF3YWl0IFVzZXJzLmZpbmRPbmUoe3VzZXJuYW1lOiByZXF1ZXN0LmJvZHkudXNlcm5hbWV9KS5leGVjKCk7XG5cblx0XHRcdGlmICghdXNlcikge1xuXHRcdFx0XHR1c2VyID0gYXdhaXQgVXNlcnMuZmluZE9uZSh7ZW1haWw6IHJlcXVlc3QuYm9keS51c2VybmFtZX0pLmV4ZWMoKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0bGV0IHVzZXJuYW1lID0gdXNlciA/IHVzZXIudXNlcm5hbWUgOiByZXF1ZXN0LmJvZHkudXNlcm5hbWU7XG5cblx0XHRcdFVzZXJzLmF1dGhlbnRpY2F0ZSgpKHVzZXJuYW1lLCByZXF1ZXN0LmJvZHkucGFzc3dvcmQsIChlcnIsIHJlcywgZXJyb3IpID0+IHtcblx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKGVycm9yLm5hbWUgPT09ICdUb29NYW55QXR0ZW1wdHNFcnJvcicpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJvci5tZXNzYWdlICsgJy4gIEEgcGFzc3dvcmQgcmVzZXQgbGluayBoYXMgYmVlbiBzZW50IHRvIHlvdXIgZW1haWwsIHBsZWFzZSByZXNldCB5b3VyIHBhc3N3b3JkLidcblx0XHRcdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcdFx0dXNlci5zZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQgPSBqd3Quc2lnbih7aWRfdXNlcjogdXNlci5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSk7XG5cblx0XHRcdFx0XHRcdGxldCBlbWFpbERhdGEgPSB7XG5cdFx0XHRcdFx0XHRcdHVzZXJUb0NoYW5nZVBhc3N3b3JkOiB1c2VyLmZ1bGxuYW1lLFxuXHRcdFx0XHRcdFx0XHR1c2VyV2hvUmVzZXRQYXNzd29yZDogUmVzb2x2ZUlPU2VydmVyLmdldENsaWVudE5hbWUoKSArICcgU3lzdGVtJyxcblx0XHRcdFx0XHRcdFx0dXJsOiBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gKyAnL2ZvcmdvdC1wYXNzd29yZC8nICsgdXNlci5zZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQgKyAnLydcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFVzZXJzLnVwZGF0ZU9uZSh7X2lkOiB1c2VyLl9pZH0sIHskc2V0OiB7c2VydmljZXM6IHVzZXIuc2VydmljZXN9fSkuZXhlYygoZXJyVXAsIHJlc1VwKSA9PiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2ZXIuZ2V0TWV0aG9kTWFuYWdlcigpLnJlYWRGaWxlKCdlbWFpbC10ZW1wbGF0ZXMvZm9yZ290LXBhc3N3b3JkLmh0bWwnKS50aGVuKGh0bWwgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGxldCB0ZW1wbGF0ZSA9IGhhbmRsZWJhcnMuY29tcGlsZShodG1sKTtcblx0XHRcdFx0XHRcdFx0XHRoYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdlcXVhbHMnLCAoYSwgYikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGEgPT09IGI7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRtYWluU2VydmVyLmdldE1ldGhvZE1hbmFnZXIoKS5zZW5kRW1haWwodXNlci5lbWFpbCwgJ1Jlc29sdmVJTyAoJyArIFJlc29sdmVJT1NlcnZlci5nZXRDbGllbnROYW1lKCkgKyAnKSAtIEZvcmdvdCBQYXNzd29yZCcsICcnLCB0ZW1wbGF0ZShlbWFpbERhdGEpKTtcblx0XHRcdFx0XHRcdFx0fSwgZXJyRW1haWwgPT4gY29uc29sZS5sb2coZXJyRW1haWwpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJvci5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmIChyZXMgJiYgcmVzLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0cmVzLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdCwgZXJyb3JBdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0b2tlbjogand0LnNpZ24oe2lkX3VzZXI6IHJlcy5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRleHBpcmVzSW4gOiA5MCAqIDI0ICogNjAgKiA2MCAqIDEwMDAgLy8gOTAgZGF5c1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0YXBwLnBvc3QoJy9hY2Nlc3NUb2tlbicsIGFzeW5jIGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkge1xuXHRcdGlmIChyZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydTRUNfUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19TRUNPTkRBUllfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKHNlcnZlckNvbmZpZ1snUk9PVF9VUkwnXSAhPT0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMCcpIHtcblx0XHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkucmVmcmVzaFRva2VuLCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwgKGVyciwgZGVjb2RlZCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRVc2Vycy5maW5kQnlJZChkZWNvZGVkWydpZF91c2VyJ10pLmV4ZWMoKS50aGVuKCh1c2VyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVzZXIuYWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdCwgZXJyb3JBdCkgPT4ge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXIuc2F2ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VuOiBqd3Quc2lnbih7aWRfdXNlcjogdXNlci5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHBpcmVzSW4gOiAzICogMjQgKiA2MCAqIDYwICogMTAwMCAvLyAzIGRheXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdXNlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIE1vbmdvb3NlIEdldCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVx0XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkucmVmcmVzaFRva2VuLCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwgKGVyciwgZGVjb2RlZCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRVc2Vycy5maW5kQnlJZChkZWNvZGVkWydpZF91c2VyJ10pLmV4ZWMoKS50aGVuKCh1c2VyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVzZXIuYWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdCwgZXJyb3JBdCkgPT4ge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXIuc2F2ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VuOiBqd3Quc2lnbih7aWRfdXNlcjogdXNlci5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHBpcmVzSW4gOiAzICogMjQgKiA2MCAqIDYwICogMTAwMCAvLyAzIGRheXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdXNlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIE1vbmdvb3NlIEdldCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0YXBwLnBvc3QoJy91c2VyV2l0aEVucm9sbG1lbnRUb2tlbicsIGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkge1xuXHRcdGlmIChyZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydTRUNfUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19TRUNPTkRBUllfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkuZW5yb2xsbWVudFRva2VuLCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwgKGVyciwgZGVjb2RlZCkgPT4ge1xuXHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVG9rZW4nXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFVzZXJzLmZpbmRPbmUoe1xuXHRcdFx0XHRcdFx0JGFuZDogW1xuXHRcdFx0XHRcdFx0XHR7X2lkOiBkZWNvZGVkWydpZF91c2VyJ119LFxuXHRcdFx0XHRcdFx0XHR7J3NlcnZpY2VzLmVucm9sbG1lbnQnOiByZXF1ZXN0LmJvZHkuZW5yb2xsbWVudFRva2VufVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0pLnNlbGVjdCgnX2lkIF9fdiB1c2VybmFtZSBhY3RpdmUnKS5leGVjKCkudGhlbigodXNlcikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHVzZXIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHVzZXIuYWN0aXZlKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyOiB1c2VyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVXNlcidcblx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBNb25nb29zZSBHZXQgVXNlcidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhcHAucG9zdCgnL3NldFVzZXJXaXRoRW5yb2xsbWVudFRva2VuJywgZnVuY3Rpb24gKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG5cdFx0aWYgKHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1NFQ19ST09UX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snUkVTT0xWRUlPX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snUkVTT0xWRUlPX1NFQ09OREFSWV9VUkwnXSkge1xuXHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIGhlYWRlcidcblx0XHRcdH0pKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRqd3QudmVyaWZ5KHJlcXVlc3QuYm9keS5lbnJvbGxtZW50VG9rZW4sIHNlcnZlckNvbmZpZ1snSldUX1NFQ1JFVCddLCBhc3luYyAoZXJyLCBkZWNvZGVkKSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0VXNlcnMuZmluZE9uZSh7XG5cdFx0XHRcdFx0XHQkYW5kOiBbXG5cdFx0XHRcdFx0XHRcdHtfaWQ6IGRlY29kZWRbJ2lkX3VzZXInXX0sXG5cdFx0XHRcdFx0XHRcdHsnc2VydmljZXMuZW5yb2xsbWVudCc6IHJlcXVlc3QuYm9keS5lbnJvbGxtZW50VG9rZW59XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSkuZXhlYygpLnRoZW4oKHVzZXIpID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHVzZXIuc2V0UGFzc3dvcmQocmVxdWVzdC5ib2R5LnBhc3N3b3JkLCAoZXJyU2V0LCByZXNTZXQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNTZXQpIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnNlcnZpY2VzLmVucm9sbG1lbnQgID0gJyc7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlci5zYXZlKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVXNlcidcblx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBNb25nb29zZSBHZXQgVXNlcidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhcHAucG9zdCgnL3VzZXJXaXRoRm9yZ290UGFzc3dvcmRUb2tlbicsIGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkge1xuXHRcdGlmIChyZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydTRUNfUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19TRUNPTkRBUllfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkuZm9yZ290UGFzc3dvcmRUb2tlbiwgc2VydmVyQ29uZmlnWydKV1RfU0VDUkVUJ10sIChlcnIsIGRlY29kZWQpID0+IHtcblx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIFRva2VuJ1xuXHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRVc2Vycy5maW5kT25lKHtcblx0XHRcdFx0XHRcdCRhbmQ6IFtcblx0XHRcdFx0XHRcdFx0e19pZDogZGVjb2RlZFsnaWRfdXNlciddfSxcblx0XHRcdFx0XHRcdFx0eydzZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQnOiByZXF1ZXN0LmJvZHkuZm9yZ290UGFzc3dvcmRUb2tlbn1cblx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHR9KS5zZWxlY3QoJ19pZCBfX3YgdXNlcm5hbWUgYWN0aXZlJykuZXhlYygpLnRoZW4oKHVzZXIpID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLmFjdGl2ZSkge1xuXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdXNlclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnQWNjb3VudCBpcyBEaXNhYmxlZCdcblx0XHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIFVzZXInXG5cdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCBlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgTW9uZ29vc2UgR2V0IFVzZXInXG5cdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0YXBwLnBvc3QoJy9zZXRVc2VyV2l0aEZvcmdvdFBhc3N3b3JkVG9rZW4nLCBmdW5jdGlvbiAocmVxdWVzdCwgcmVzcG9uc2UpIHtcblx0XHRpZiAocmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydST09UX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snU0VDX1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydSRVNPTFZFSU9fVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydSRVNPTFZFSU9fU0VDT05EQVJZX1VSTCddKSB7XG5cdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgaGVhZGVyJ1xuXHRcdFx0fSkpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGp3dC52ZXJpZnkocmVxdWVzdC5ib2R5LmZvcmdvdFBhc3N3b3JkVG9rZW4sIHNlcnZlckNvbmZpZ1snSldUX1NFQ1JFVCddLCBhc3luYyAoZXJyLCBkZWNvZGVkKSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0VXNlcnMuZmluZE9uZSh7XG5cdFx0XHRcdFx0XHQkYW5kOiBbXG5cdFx0XHRcdFx0XHRcdHtfaWQ6IGRlY29kZWRbJ2lkX3VzZXInXX0sXG5cdFx0XHRcdFx0XHRcdHsnc2VydmljZXMuZm9yZ290X3Bhc3N3b3JkJzogcmVxdWVzdC5ib2R5LmZvcmdvdFBhc3N3b3JkVG9rZW59XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSkuZXhlYygpLnRoZW4oKHVzZXIpID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHVzZXIuc2V0UGFzc3dvcmQocmVxdWVzdC5ib2R5LnBhc3N3b3JkLCAoZXJyU2V0LCByZXNTZXQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNTZXQpIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnNlcnZpY2VzLmZvcmdvdF9wYXNzd29yZCAgPSAnJztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdHQsIGVycm9yQXR0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlci5zYXZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVXNlcidcblx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBNb25nb29zZSBHZXQgVXNlcidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn0iXX0=
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ var user_collection_1 = require("../collections/user.collection");
39
+ var jwt = require("jsonwebtoken");
40
+ var handlebars = require("handlebars");
41
+ var __1 = require("..");
42
+ function setupAuthRoutes(mainServer, app, serverConfig) {
43
+ var _this = this;
44
+ // Login via HTTP, return refresh token if authenticated
45
+ app.post('/login', function (request, response) { return __awaiter(_this, void 0, void 0, function () {
46
+ var user_1, username;
47
+ return __generator(this, function (_a) {
48
+ switch (_a.label) {
49
+ case 0:
50
+ if (!(request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'])) return [3 /*break*/, 1];
51
+ response.send(JSON.stringify({
52
+ error: true,
53
+ result: 'Invalid header'
54
+ }));
55
+ return [3 /*break*/, 5];
56
+ case 1: return [4 /*yield*/, user_collection_1.Users.findOne({ username: request.body.username }).exec()];
57
+ case 2:
58
+ user_1 = _a.sent();
59
+ if (!!user_1) return [3 /*break*/, 4];
60
+ return [4 /*yield*/, user_collection_1.Users.findOne({ email: request.body.username }).exec()];
61
+ case 3:
62
+ user_1 = _a.sent();
63
+ _a.label = 4;
64
+ case 4:
65
+ username = user_1 ? user_1.username : request.body.username;
66
+ user_collection_1.Users.authenticate()(username, request.body.password, function (err, res, error) {
67
+ if (error) {
68
+ if (error.name === 'TooManyAttemptsError') {
69
+ response.send(JSON.stringify({
70
+ error: true,
71
+ result: error.message + '. A password reset link has been sent to your email, please reset your password.'
72
+ }));
73
+ user_1.services.forgot_password = jwt.sign({ id_user: user_1._id }, serverConfig['JWT_SECRET']);
74
+ var emailData_1 = {
75
+ userToChangePassword: user_1.fullname,
76
+ userWhoResetPassword: __1.default.getClientName() + ' System',
77
+ url: serverConfig['ROOT_URL'] + '/forgot-password/' + user_1.services.forgot_password + '/'
78
+ };
79
+ user_collection_1.Users.updateOne({ _id: user_1._id }, { $set: { services: user_1.services } }).exec(function (errUp, resUp) {
80
+ mainServer.getMethodManager().readFile('email-templates/forgot-password.html').then(function (html) {
81
+ var template = handlebars.compile(html);
82
+ handlebars.registerHelper('equals', function (a, b) {
83
+ return a === b;
84
+ });
85
+ mainServer.getMethodManager().sendEmail(user_1.email, 'ResolveIO (' + __1.default.getClientName() + ') - Forgot Password', '', template(emailData_1));
86
+ }, function (errEmail) { return console.log(errEmail); });
87
+ });
88
+ }
89
+ else {
90
+ response.send(JSON.stringify({
91
+ error: true,
92
+ result: error.message
93
+ }));
94
+ }
95
+ }
96
+ else {
97
+ if (res && res.active) {
98
+ res.resetAttempts(function (errAt, resAt, errorAt) {
99
+ response.send(JSON.stringify({
100
+ error: false,
101
+ result: {
102
+ token: jwt.sign({ id_user: res._id }, serverConfig['JWT_SECRET'], {
103
+ expiresIn: 90 * 24 * 60 * 60 * 1000 // 90 days
104
+ })
105
+ }
106
+ }));
107
+ });
108
+ }
109
+ }
110
+ });
111
+ _a.label = 5;
112
+ case 5: return [2 /*return*/];
113
+ }
114
+ });
115
+ }); });
116
+ app.post('/accessToken', function (request, response) {
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ return __generator(this, function (_a) {
119
+ if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
120
+ response.send(JSON.stringify({
121
+ error: true,
122
+ result: 'Invalid header'
123
+ }));
124
+ }
125
+ else {
126
+ if (serverConfig['ROOT_URL'] !== 'http://localhost:4200') {
127
+ jwt.verify(request.body.refreshToken, serverConfig['JWT_SECRET'], function (err, decoded) {
128
+ if (err) {
129
+ response.send(JSON.stringify({
130
+ error: true,
131
+ result: 'Invalid Token'
132
+ }));
133
+ }
134
+ else {
135
+ user_collection_1.Users.findById(decoded['id_user']).exec().then(function (user) {
136
+ if (user) {
137
+ if (user.active) {
138
+ user.resetAttempts(function (errAt, resAt, errorAt) {
139
+ user.save();
140
+ response.send(JSON.stringify({
141
+ error: false,
142
+ result: {
143
+ token: jwt.sign({ id_user: user._id }, serverConfig['JWT_SECRET'], {
144
+ expiresIn: 3 * 24 * 60 * 60 * 1000 // 3 days
145
+ }),
146
+ user: user
147
+ }
148
+ }));
149
+ });
150
+ }
151
+ else {
152
+ response.send(JSON.stringify({
153
+ error: true,
154
+ result: 'Account is Disabled'
155
+ }));
156
+ }
157
+ }
158
+ else {
159
+ response.send(JSON.stringify({
160
+ error: true,
161
+ result: 'Invalid User'
162
+ }));
163
+ }
164
+ }, function (error) {
165
+ response.send(JSON.stringify({
166
+ error: true,
167
+ result: 'Invalid Mongoose Get User'
168
+ }));
169
+ });
170
+ }
171
+ });
172
+ }
173
+ else {
174
+ jwt.verify(request.body.refreshToken, serverConfig['JWT_SECRET'], function (err, decoded) {
175
+ if (err) {
176
+ response.send(JSON.stringify({
177
+ error: true,
178
+ result: 'Invalid Token'
179
+ }));
180
+ }
181
+ else {
182
+ user_collection_1.Users.findById(decoded['id_user']).exec().then(function (user) {
183
+ if (user) {
184
+ if (user.active) {
185
+ user.resetAttempts(function (errAt, resAt, errorAt) {
186
+ user.save();
187
+ response.send(JSON.stringify({
188
+ error: false,
189
+ result: {
190
+ token: jwt.sign({ id_user: user._id }, serverConfig['JWT_SECRET'], {
191
+ expiresIn: 3 * 24 * 60 * 60 * 1000 // 3 days
192
+ }),
193
+ user: user
194
+ }
195
+ }));
196
+ });
197
+ }
198
+ else {
199
+ response.send(JSON.stringify({
200
+ error: true,
201
+ result: 'Account is Disabled'
202
+ }));
203
+ }
204
+ }
205
+ else {
206
+ response.send(JSON.stringify({
207
+ error: true,
208
+ result: 'Invalid User'
209
+ }));
210
+ }
211
+ }, function (error) {
212
+ response.send(JSON.stringify({
213
+ error: true,
214
+ result: 'Invalid Mongoose Get User'
215
+ }));
216
+ });
217
+ }
218
+ });
219
+ }
220
+ }
221
+ return [2 /*return*/];
222
+ });
223
+ });
224
+ });
225
+ app.post('/userWithEnrollmentToken', function (request, response) {
226
+ if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
227
+ response.send(JSON.stringify({
228
+ error: true,
229
+ result: 'Invalid header'
230
+ }));
231
+ }
232
+ else {
233
+ jwt.verify(request.body.enrollmentToken, serverConfig['JWT_SECRET'], function (err, decoded) {
234
+ if (err) {
235
+ response.send(JSON.stringify({
236
+ error: true,
237
+ result: 'Invalid Token'
238
+ }));
239
+ }
240
+ else {
241
+ user_collection_1.Users.findOne({
242
+ $and: [
243
+ { _id: decoded['id_user'] },
244
+ { 'services.enrollment': request.body.enrollmentToken }
245
+ ]
246
+ }).select('_id __v username active').exec().then(function (user) {
247
+ if (user) {
248
+ if (user.active) {
249
+ response.send(JSON.stringify({
250
+ error: false,
251
+ result: {
252
+ user: user
253
+ }
254
+ }));
255
+ }
256
+ else {
257
+ response.send(JSON.stringify({
258
+ error: true,
259
+ result: 'Account is Disabled'
260
+ }));
261
+ }
262
+ }
263
+ else {
264
+ response.send(JSON.stringify({
265
+ error: true,
266
+ result: 'Invalid User'
267
+ }));
268
+ }
269
+ }, function (error) {
270
+ response.send(JSON.stringify({
271
+ error: true,
272
+ result: 'Invalid Mongoose Get User'
273
+ }));
274
+ });
275
+ }
276
+ });
277
+ }
278
+ });
279
+ app.post('/setUserWithEnrollmentToken', function (request, response) {
280
+ var _this = this;
281
+ if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
282
+ response.send(JSON.stringify({
283
+ error: true,
284
+ result: 'Invalid header'
285
+ }));
286
+ }
287
+ else {
288
+ jwt.verify(request.body.enrollmentToken, serverConfig['JWT_SECRET'], function (err, decoded) { return __awaiter(_this, void 0, void 0, function () {
289
+ return __generator(this, function (_a) {
290
+ if (err) {
291
+ response.send(JSON.stringify({
292
+ error: true,
293
+ result: 'Invalid Token'
294
+ }));
295
+ }
296
+ else {
297
+ user_collection_1.Users.findOne({
298
+ $and: [
299
+ { _id: decoded['id_user'] },
300
+ { 'services.enrollment': request.body.enrollmentToken }
301
+ ]
302
+ }).exec().then(function (user) {
303
+ if (user) {
304
+ if (user.active) {
305
+ user.setPassword(request.body.password, function (errSet, resSet) {
306
+ if (resSet) {
307
+ user.services.enrollment = '';
308
+ user.save();
309
+ response.send(JSON.stringify({
310
+ error: false,
311
+ result: true
312
+ }));
313
+ }
314
+ else {
315
+ response.send(JSON.stringify({
316
+ error: true,
317
+ result: errSet
318
+ }));
319
+ }
320
+ });
321
+ }
322
+ else {
323
+ response.send(JSON.stringify({
324
+ error: true,
325
+ result: 'Account is Disabled'
326
+ }));
327
+ }
328
+ }
329
+ else {
330
+ response.send(JSON.stringify({
331
+ error: true,
332
+ result: 'Invalid User'
333
+ }));
334
+ }
335
+ }, function (error) {
336
+ response.send(JSON.stringify({
337
+ error: true,
338
+ result: 'Invalid Mongoose Get User'
339
+ }));
340
+ });
341
+ }
342
+ return [2 /*return*/];
343
+ });
344
+ }); });
345
+ }
346
+ });
347
+ app.post('/userWithForgotPasswordToken', function (request, response) {
348
+ if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
349
+ response.send(JSON.stringify({
350
+ error: true,
351
+ result: 'Invalid header'
352
+ }));
353
+ }
354
+ else {
355
+ jwt.verify(request.body.forgotPasswordToken, serverConfig['JWT_SECRET'], function (err, decoded) {
356
+ if (err) {
357
+ response.send(JSON.stringify({
358
+ error: true,
359
+ result: 'Invalid Token'
360
+ }));
361
+ }
362
+ else {
363
+ user_collection_1.Users.findOne({
364
+ $and: [
365
+ { _id: decoded['id_user'] },
366
+ { 'services.forgot_password': request.body.forgotPasswordToken }
367
+ ]
368
+ }).select('_id __v username active').exec().then(function (user) {
369
+ if (user) {
370
+ if (user.active) {
371
+ response.send(JSON.stringify({
372
+ error: false,
373
+ result: {
374
+ user: user
375
+ }
376
+ }));
377
+ }
378
+ else {
379
+ response.send(JSON.stringify({
380
+ error: true,
381
+ result: 'Account is Disabled'
382
+ }));
383
+ }
384
+ }
385
+ else {
386
+ response.send(JSON.stringify({
387
+ error: true,
388
+ result: 'Invalid User'
389
+ }));
390
+ }
391
+ }, function (error) {
392
+ response.send(JSON.stringify({
393
+ error: true,
394
+ result: 'Invalid Mongoose Get User'
395
+ }));
396
+ });
397
+ }
398
+ });
399
+ }
400
+ });
401
+ app.post('/setUserWithForgotPasswordToken', function (request, response) {
402
+ var _this = this;
403
+ if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
404
+ response.send(JSON.stringify({
405
+ error: true,
406
+ result: 'Invalid header'
407
+ }));
408
+ }
409
+ else {
410
+ jwt.verify(request.body.forgotPasswordToken, serverConfig['JWT_SECRET'], function (err, decoded) { return __awaiter(_this, void 0, void 0, function () {
411
+ return __generator(this, function (_a) {
412
+ if (err) {
413
+ response.send(JSON.stringify({
414
+ error: true,
415
+ result: 'Invalid Token'
416
+ }));
417
+ }
418
+ else {
419
+ user_collection_1.Users.findOne({
420
+ $and: [
421
+ { _id: decoded['id_user'] },
422
+ { 'services.forgot_password': request.body.forgotPasswordToken }
423
+ ]
424
+ }).exec().then(function (user) {
425
+ if (user) {
426
+ if (user.active) {
427
+ user.setPassword(request.body.password, function (errSet, resSet) {
428
+ if (resSet) {
429
+ user.services.forgot_password = '';
430
+ user.resetAttempts(function (errAt, resAtt, errorAtt) {
431
+ user.save();
432
+ });
433
+ response.send(JSON.stringify({
434
+ error: false,
435
+ result: true
436
+ }));
437
+ }
438
+ else {
439
+ response.send(JSON.stringify({
440
+ error: true,
441
+ result: errSet
442
+ }));
443
+ }
444
+ });
445
+ }
446
+ else {
447
+ response.send(JSON.stringify({
448
+ error: true,
449
+ result: 'Account is Disabled'
450
+ }));
451
+ }
452
+ }
453
+ else {
454
+ response.send(JSON.stringify({
455
+ error: true,
456
+ result: 'Invalid User'
457
+ }));
458
+ }
459
+ }, function (error) {
460
+ response.send(JSON.stringify({
461
+ error: true,
462
+ result: 'Invalid Mongoose Get User'
463
+ }));
464
+ });
465
+ }
466
+ return [2 /*return*/];
467
+ });
468
+ }); });
469
+ }
470
+ });
471
+ }
472
+ exports.setupAuthRoutes = setupAuthRoutes;