dauth-md-node 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,454 +0,0 @@
1
- import jwt from 'jsonwebtoken';
2
-
3
- function _regeneratorRuntime() {
4
- _regeneratorRuntime = function () {
5
- return e;
6
- };
7
- var t,
8
- e = {},
9
- r = Object.prototype,
10
- n = r.hasOwnProperty,
11
- o = Object.defineProperty || function (t, e, r) {
12
- t[e] = r.value;
13
- },
14
- i = "function" == typeof Symbol ? Symbol : {},
15
- a = i.iterator || "@@iterator",
16
- c = i.asyncIterator || "@@asyncIterator",
17
- u = i.toStringTag || "@@toStringTag";
18
- function define(t, e, r) {
19
- return Object.defineProperty(t, e, {
20
- value: r,
21
- enumerable: !0,
22
- configurable: !0,
23
- writable: !0
24
- }), t[e];
25
- }
26
- try {
27
- define({}, "");
28
- } catch (t) {
29
- define = function (t, e, r) {
30
- return t[e] = r;
31
- };
32
- }
33
- function wrap(t, e, r, n) {
34
- var i = e && e.prototype instanceof Generator ? e : Generator,
35
- a = Object.create(i.prototype),
36
- c = new Context(n || []);
37
- return o(a, "_invoke", {
38
- value: makeInvokeMethod(t, r, c)
39
- }), a;
40
- }
41
- function tryCatch(t, e, r) {
42
- try {
43
- return {
44
- type: "normal",
45
- arg: t.call(e, r)
46
- };
47
- } catch (t) {
48
- return {
49
- type: "throw",
50
- arg: t
51
- };
52
- }
53
- }
54
- e.wrap = wrap;
55
- var h = "suspendedStart",
56
- l = "suspendedYield",
57
- f = "executing",
58
- s = "completed",
59
- y = {};
60
- function Generator() {}
61
- function GeneratorFunction() {}
62
- function GeneratorFunctionPrototype() {}
63
- var p = {};
64
- define(p, a, function () {
65
- return this;
66
- });
67
- var d = Object.getPrototypeOf,
68
- v = d && d(d(values([])));
69
- v && v !== r && n.call(v, a) && (p = v);
70
- var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
71
- function defineIteratorMethods(t) {
72
- ["next", "throw", "return"].forEach(function (e) {
73
- define(t, e, function (t) {
74
- return this._invoke(e, t);
75
- });
76
- });
77
- }
78
- function AsyncIterator(t, e) {
79
- function invoke(r, o, i, a) {
80
- var c = tryCatch(t[r], t, o);
81
- if ("throw" !== c.type) {
82
- var u = c.arg,
83
- h = u.value;
84
- return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
85
- invoke("next", t, i, a);
86
- }, function (t) {
87
- invoke("throw", t, i, a);
88
- }) : e.resolve(h).then(function (t) {
89
- u.value = t, i(u);
90
- }, function (t) {
91
- return invoke("throw", t, i, a);
92
- });
93
- }
94
- a(c.arg);
95
- }
96
- var r;
97
- o(this, "_invoke", {
98
- value: function (t, n) {
99
- function callInvokeWithMethodAndArg() {
100
- return new e(function (e, r) {
101
- invoke(t, n, e, r);
102
- });
103
- }
104
- return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
105
- }
106
- });
107
- }
108
- function makeInvokeMethod(e, r, n) {
109
- var o = h;
110
- return function (i, a) {
111
- if (o === f) throw new Error("Generator is already running");
112
- if (o === s) {
113
- if ("throw" === i) throw a;
114
- return {
115
- value: t,
116
- done: !0
117
- };
118
- }
119
- for (n.method = i, n.arg = a;;) {
120
- var c = n.delegate;
121
- if (c) {
122
- var u = maybeInvokeDelegate(c, n);
123
- if (u) {
124
- if (u === y) continue;
125
- return u;
126
- }
127
- }
128
- if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
129
- if (o === h) throw o = s, n.arg;
130
- n.dispatchException(n.arg);
131
- } else "return" === n.method && n.abrupt("return", n.arg);
132
- o = f;
133
- var p = tryCatch(e, r, n);
134
- if ("normal" === p.type) {
135
- if (o = n.done ? s : l, p.arg === y) continue;
136
- return {
137
- value: p.arg,
138
- done: n.done
139
- };
140
- }
141
- "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
142
- }
143
- };
144
- }
145
- function maybeInvokeDelegate(e, r) {
146
- var n = r.method,
147
- o = e.iterator[n];
148
- if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
149
- var i = tryCatch(o, e.iterator, r.arg);
150
- if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
151
- var a = i.arg;
152
- return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
153
- }
154
- function pushTryEntry(t) {
155
- var e = {
156
- tryLoc: t[0]
157
- };
158
- 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
159
- }
160
- function resetTryEntry(t) {
161
- var e = t.completion || {};
162
- e.type = "normal", delete e.arg, t.completion = e;
163
- }
164
- function Context(t) {
165
- this.tryEntries = [{
166
- tryLoc: "root"
167
- }], t.forEach(pushTryEntry, this), this.reset(!0);
168
- }
169
- function values(e) {
170
- if (e || "" === e) {
171
- var r = e[a];
172
- if (r) return r.call(e);
173
- if ("function" == typeof e.next) return e;
174
- if (!isNaN(e.length)) {
175
- var o = -1,
176
- i = function next() {
177
- for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
178
- return next.value = t, next.done = !0, next;
179
- };
180
- return i.next = i;
181
- }
182
- }
183
- throw new TypeError(typeof e + " is not iterable");
184
- }
185
- return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
186
- value: GeneratorFunctionPrototype,
187
- configurable: !0
188
- }), o(GeneratorFunctionPrototype, "constructor", {
189
- value: GeneratorFunction,
190
- configurable: !0
191
- }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
192
- var e = "function" == typeof t && t.constructor;
193
- return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
194
- }, e.mark = function (t) {
195
- return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
196
- }, e.awrap = function (t) {
197
- return {
198
- __await: t
199
- };
200
- }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
201
- return this;
202
- }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
203
- void 0 === i && (i = Promise);
204
- var a = new AsyncIterator(wrap(t, r, n, o), i);
205
- return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
206
- return t.done ? t.value : a.next();
207
- });
208
- }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
209
- return this;
210
- }), define(g, "toString", function () {
211
- return "[object Generator]";
212
- }), e.keys = function (t) {
213
- var e = Object(t),
214
- r = [];
215
- for (var n in e) r.push(n);
216
- return r.reverse(), function next() {
217
- for (; r.length;) {
218
- var t = r.pop();
219
- if (t in e) return next.value = t, next.done = !1, next;
220
- }
221
- return next.done = !0, next;
222
- };
223
- }, e.values = values, Context.prototype = {
224
- constructor: Context,
225
- reset: function (e) {
226
- if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
227
- },
228
- stop: function () {
229
- this.done = !0;
230
- var t = this.tryEntries[0].completion;
231
- if ("throw" === t.type) throw t.arg;
232
- return this.rval;
233
- },
234
- dispatchException: function (e) {
235
- if (this.done) throw e;
236
- var r = this;
237
- function handle(n, o) {
238
- return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
239
- }
240
- for (var o = this.tryEntries.length - 1; o >= 0; --o) {
241
- var i = this.tryEntries[o],
242
- a = i.completion;
243
- if ("root" === i.tryLoc) return handle("end");
244
- if (i.tryLoc <= this.prev) {
245
- var c = n.call(i, "catchLoc"),
246
- u = n.call(i, "finallyLoc");
247
- if (c && u) {
248
- if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
249
- if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
250
- } else if (c) {
251
- if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
252
- } else {
253
- if (!u) throw new Error("try statement without catch or finally");
254
- if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
255
- }
256
- }
257
- }
258
- },
259
- abrupt: function (t, e) {
260
- for (var r = this.tryEntries.length - 1; r >= 0; --r) {
261
- var o = this.tryEntries[r];
262
- if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
263
- var i = o;
264
- break;
265
- }
266
- }
267
- i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
268
- var a = i ? i.completion : {};
269
- return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
270
- },
271
- complete: function (t, e) {
272
- if ("throw" === t.type) throw t.arg;
273
- return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
274
- },
275
- finish: function (t) {
276
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
277
- var r = this.tryEntries[e];
278
- if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
279
- }
280
- },
281
- catch: function (t) {
282
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
283
- var r = this.tryEntries[e];
284
- if (r.tryLoc === t) {
285
- var n = r.completion;
286
- if ("throw" === n.type) {
287
- var o = n.arg;
288
- resetTryEntry(r);
289
- }
290
- return o;
291
- }
292
- }
293
- throw new Error("illegal catch attempt");
294
- },
295
- delegateYield: function (e, r, n) {
296
- return this.delegate = {
297
- iterator: values(e),
298
- resultName: r,
299
- nextLoc: n
300
- }, "next" === this.method && (this.arg = t), y;
301
- }
302
- }, e;
303
- }
304
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
305
- try {
306
- var info = gen[key](arg);
307
- var value = info.value;
308
- } catch (error) {
309
- reject(error);
310
- return;
311
- }
312
- if (info.done) {
313
- resolve(value);
314
- } else {
315
- Promise.resolve(value).then(_next, _throw);
316
- }
317
- }
318
- function _asyncToGenerator(fn) {
319
- return function () {
320
- var self = this,
321
- args = arguments;
322
- return new Promise(function (resolve, reject) {
323
- var gen = fn.apply(self, args);
324
- function _next(value) {
325
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
326
- }
327
- function _throw(err) {
328
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
329
- }
330
- _next(undefined);
331
- });
332
- };
333
- }
334
-
335
- var apiVersion = 'v1';
336
- var serverDomain = 'dauth.ovh';
337
- function getServerBasePath(_ref) {
338
- var domainName = _ref.domainName;
339
- var isLocalhost = process.env.NODE_ENV === 'development';
340
- var serverPort = 4012;
341
- var serverLocalUrl = "http://localhost:" + serverPort + "/api/" + apiVersion;
342
- var serverProdUrl = "https://" + domainName + "." + serverDomain + "/api/" + apiVersion;
343
- var serverBasePath = isLocalhost ? serverLocalUrl : serverProdUrl;
344
- return serverBasePath;
345
- }
346
-
347
- var fetch = /*#__PURE__*/require('node-fetch');
348
- function getUser(_x, _x2) {
349
- return _getUser.apply(this, arguments);
350
- }
351
- function _getUser() {
352
- _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(token, domainName) {
353
- var params, response, data;
354
- return _regeneratorRuntime().wrap(function _callee$(_context) {
355
- while (1) switch (_context.prev = _context.next) {
356
- case 0:
357
- params = {
358
- method: 'GET',
359
- headers: {
360
- Authorization: token,
361
- 'Content-Type': 'application/json'
362
- }
363
- };
364
- _context.next = 3;
365
- return fetch(getServerBasePath({
366
- domainName: domainName
367
- }) + "/tenant/" + domainName + "/user", params);
368
- case 3:
369
- response = _context.sent;
370
- _context.next = 6;
371
- return response.json();
372
- case 6:
373
- data = _context.sent;
374
- return _context.abrupt("return", {
375
- response: response,
376
- data: data
377
- });
378
- case 8:
379
- case "end":
380
- return _context.stop();
381
- }
382
- }, _callee);
383
- }));
384
- return _getUser.apply(this, arguments);
385
- }
386
-
387
- var dauth = function dauth(_ref) {
388
- var domainName = _ref.domainName,
389
- tsk = _ref.tsk;
390
- return function (req, res, next) {
391
- if (!req.headers.authorization) {
392
- return res.status(403).send({
393
- status: 'token-not-found',
394
- message: 'Token not found'
395
- });
396
- }
397
- var token = req.headers.authorization.replace(/['"]+/g, '');
398
- try {
399
- jwt.verify(token, tsk);
400
- return getUser(token, domainName).then(function (getUserFetch) {
401
- if (getUserFetch.response.status === 404) {
402
- var _getUserFetch$data$me;
403
- return res.status(404).send({
404
- status: 'user-not-found',
405
- message: (_getUserFetch$data$me = getUserFetch.data.message) != null ? _getUserFetch$data$me : 'User does not exist'
406
- });
407
- } else if (getUserFetch.response.status === 500) {
408
- var _getUserFetch$data$me2;
409
- return res.status(500).send({
410
- status: 'error',
411
- message: (_getUserFetch$data$me2 = getUserFetch.data.message) != null ? _getUserFetch$data$me2 : 'Dauth server error'
412
- });
413
- } else if (getUserFetch.response.status === 200) {
414
- req.user = getUserFetch.data.user;
415
- return next();
416
- } else {
417
- var _getUserFetch$data$me3;
418
- return res.status(501).send({
419
- status: 'request-error',
420
- message: (_getUserFetch$data$me3 = getUserFetch.data.message) != null ? _getUserFetch$data$me3 : 'Dauth server error'
421
- });
422
- }
423
- })["catch"](function (error) {
424
- var _error$message;
425
- return res.status(500).send({
426
- status: 'server-error',
427
- message: (_error$message = error.message) != null ? _error$message : 'Dauth server error'
428
- });
429
- });
430
- } catch (error) {
431
- var _error$message3;
432
- if (error && (error == null ? void 0 : error.message) === 'jwt expired') {
433
- var _error$message2;
434
- return res.status(401).send({
435
- status: 'token-expired',
436
- message: (_error$message2 = error == null ? void 0 : error.message) != null ? _error$message2 : 'Token expired'
437
- });
438
- }
439
- if (error && (error == null ? void 0 : error.message) === 'invalid signature') {
440
- return res.status(401).send({
441
- status: 'tsk-not-invalid',
442
- message: 'The TSK variable in the backend middleware is not valid'
443
- });
444
- }
445
- return res.status(401).send({
446
- status: 'token-invalid',
447
- message: (_error$message3 = error == null ? void 0 : error.message) != null ? _error$message3 : 'Token invalid'
448
- });
449
- }
450
- };
451
- };
452
-
453
- export { dauth };
454
- //# sourceMappingURL=dauth-md-node.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dauth-md-node.esm.js","sources":["../src/api/utils/config.ts","../src/api/dauth.api.ts","../src/index.ts"],"sourcesContent":["export const apiVersion = 'v1';\nexport const serverDomain = 'dauth.ovh';\n\nexport function getServerBasePath({ domainName }: { domainName: string }) {\n const isLocalhost = process.env.NODE_ENV === 'development';\n const serverPort = 4012;\n const serverLocalUrl = `http://localhost:${serverPort}/api/${apiVersion}`;\n const serverProdUrl = `https://${domainName}.${serverDomain}/api/${apiVersion}`;\n const serverBasePath = isLocalhost ? serverLocalUrl : serverProdUrl;\n return serverBasePath;\n}\n","import { getServerBasePath } from './utils/config';\nconst fetch = require('node-fetch');\n\nexport async function getUser(token: string, domainName: string) {\n const params = {\n method: 'GET',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath({ domainName })}/tenant/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n}\n","import {\n Request,\n NextFunction,\n Response as ExpressResponse,\n Handler,\n} from 'express';\nimport jwt from 'jsonwebtoken';\nimport { getUser } from './api/dauth.api';\n\nexport interface IDauthUser {\n _id: string;\n name: string;\n lastname: string;\n nickname: string;\n email: string;\n isVerified: boolean;\n language: string;\n avatar: {\n id: string;\n url: string;\n };\n role: string;\n telPrefix: string;\n telSuffix: string;\n createdAt: Date;\n updatedAt: Date;\n lastLogin: Date;\n}\n\nexport interface IRequestDauth extends Request {\n user: IDauthUser;\n files: {\n image: { path: string };\n avatar: { path: string };\n };\n headers: {\n authorization: string;\n };\n}\n\ninterface TCustomResponse extends ExpressResponse {\n status(code: number): any;\n send(body?: any): any;\n}\n\nexport const dauth = ({\n domainName,\n tsk,\n}: {\n domainName: string;\n tsk: string;\n}) => {\n return (\n req: IRequestDauth,\n res: TCustomResponse,\n next: NextFunction\n ): Handler | void => {\n if (!req.headers.authorization) {\n return res\n .status(403)\n .send({ status: 'token-not-found', message: 'Token not found' });\n }\n const token = req.headers.authorization.replace(/['\"]+/g, '');\n try {\n jwt.verify(token, tsk as string);\n return getUser(token, domainName)\n .then((getUserFetch: any) => {\n if (getUserFetch.response.status === 404) {\n return res.status(404).send({\n status: 'user-not-found',\n message: getUserFetch.data.message ?? 'User does not exist',\n });\n } else if (getUserFetch.response.status === 500) {\n return res.status(500).send({\n status: 'error',\n message: getUserFetch.data.message ?? 'Dauth server error',\n });\n } else if (getUserFetch.response.status === 200) {\n req.user = getUserFetch.data.user;\n return next();\n } else {\n return res.status(501).send({\n status: 'request-error',\n message: getUserFetch.data.message ?? 'Dauth server error',\n });\n }\n })\n .catch((error: any) => {\n return res.status(500).send({\n status: 'server-error',\n message: error.message ?? 'Dauth server error',\n });\n });\n } catch (error) {\n if (error && error?.message === 'jwt expired') {\n return res.status(401).send({\n status: 'token-expired',\n message: error?.message ?? 'Token expired',\n });\n }\n if (error && error?.message === 'invalid signature') {\n return res.status(401).send({\n status: 'tsk-not-invalid',\n message: 'The TSK variable in the backend middleware is not valid',\n });\n }\n return res.status(401).send({\n status: 'token-invalid',\n message: error?.message ?? 'Token invalid',\n });\n }\n };\n};\n"],"names":["apiVersion","serverDomain","getServerBasePath","_ref","domainName","isLocalhost","process","env","NODE_ENV","serverPort","serverLocalUrl","serverProdUrl","serverBasePath","fetch","require","getUser","_x","_x2","_getUser","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","token","params","response","data","wrap","_callee$","_context","prev","next","method","headers","Authorization","sent","json","abrupt","stop","dauth","tsk","req","res","authorization","status","send","message","replace","jwt","verify","then","getUserFetch","_getUserFetch$data$me","_getUserFetch$data$me2","user","_getUserFetch$data$me3","error","_error$message","_error$message3","_error$message2"],"mappings":"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"}