@verdaccio/api 8.1.0-next-8.30 → 8.1.0-next-8.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/v1/login.js CHANGED
@@ -3,138 +3,246 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = _default;
6
+ exports["default"] = _default;
7
7
  var _debug = _interopRequireDefault(require("debug"));
8
8
  var _nodeCrypto = require("node:crypto");
9
9
  var _auth = require("@verdaccio/auth");
10
10
  var _config = require("@verdaccio/config");
11
11
  var _core = require("@verdaccio/core");
12
12
  var _middleware = require("@verdaccio/middleware");
13
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- const debug = (0, _debug.default)('verdaccio:api:login');
15
- const WEB_LOGIN_SESSION_ID = 'web-login-sessionId';
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
14
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
15
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
16
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
17
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
18
+ var debug = (0, _debug["default"])('verdaccio:api:login');
19
+ var WEB_LOGIN_SESSION_ID = 'web-login-sessionId';
16
20
 
17
21
  // https://github.com/npm/npm-profile/blob/main/lib/index.js
18
22
  function _default(route, auth, storage, config, logger) {
19
- route.post(_middleware.LOGIN_API_ENDPOINTS.login, (0, _middleware.rateLimit)(config?.userRateLimit), async function (req, res) {
20
- // create new login session (without token)
21
- const sessionId = (0, _nodeCrypto.randomUUID)();
22
- debug('creating login session %o', sessionId);
23
- await storage.saveToken({
24
- user: sessionId,
25
- token: '',
26
- key: WEB_LOGIN_SESSION_ID,
27
- readonly: false,
28
- created: new Date().getTime()
29
- });
30
- res.status(_core.HTTP_STATUS.OK);
23
+ route.post(_middleware.LOGIN_API_ENDPOINTS.login, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), /*#__PURE__*/function () {
24
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(req, res) {
25
+ var sessionId, protocol, host, port, loginUrl, doneUrl;
26
+ return _regenerator().w(function (_context) {
27
+ while (1) switch (_context.n) {
28
+ case 0:
29
+ // create new login session (without token)
30
+ sessionId = (0, _nodeCrypto.randomUUID)();
31
+ debug('creating login session %o', sessionId);
32
+ _context.n = 1;
33
+ return storage.saveToken({
34
+ user: sessionId,
35
+ token: '',
36
+ key: WEB_LOGIN_SESSION_ID,
37
+ readonly: false,
38
+ created: new Date().getTime()
39
+ });
40
+ case 1:
41
+ res.status(_core.HTTP_STATUS.OK);
31
42
 
32
- // Assuming Web UI is running on the same address as API
33
- const protocol = req.protocol;
34
- const host = req.hostname;
35
- const port = req.socket.localPort;
36
- const loginUrl = `${protocol}://${host}:${port}/-/web/login?next=${_middleware.LOGIN_API_ENDPOINTS.login_cli}/${sessionId}`;
37
- const doneUrl = `${protocol}://${host}:${port}${_middleware.LOGIN_API_ENDPOINTS.login_done}/${sessionId}`;
38
- debug('loginUrl: %o', loginUrl);
39
- debug('doneUrl: %o', doneUrl);
40
- res.json({
41
- loginUrl,
42
- doneUrl
43
- });
44
- });
45
- route.get(_middleware.LOGIN_API_ENDPOINTS.login_done_session, (0, _middleware.rateLimit)(config?.userRateLimit), async function (req, res, next) {
46
- debug('polling login session %o', req.params.sessionId);
47
- if (!req.params.sessionId) {
48
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_REQUIRED));
49
- }
50
- const sessionId = req.params.sessionId;
51
- if (sessionId.length !== 36) {
52
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_INVALID));
53
- }
54
- try {
55
- const tokens = await storage.readTokens({
56
- user: sessionId
57
- });
58
- if (tokens && tokens.length === 1 && tokens[0].key === WEB_LOGIN_SESSION_ID) {
59
- if (tokens[0].token.length === 0) {
60
- debug('waiting for authentication');
61
- // Poll again after short delay
62
- // TODO: make this configurable (default 5 seconds)
63
- res.status(_core.HTTP_STATUS.ACCEPTED);
64
- res.set(_core.HEADERS.RETRY_AFTER, '5');
65
- res.json({});
66
- } else {
67
- // session token can only be used once
68
- await storage.deleteToken(sessionId, tokens[0].key);
69
-
70
- // Check if token has expired
71
- // TODO: make this configurable (default 2 minutes)
72
- const tokenCreatedDate = new Date(tokens[0].created);
73
- const minutesAgo = new Date(Date.now() - 2 * 60 * 1000);
74
- if (tokenCreatedDate < minutesAgo) {
43
+ // Assuming Web UI is running on the same address as API
44
+ protocol = req.protocol;
45
+ host = req.hostname;
46
+ port = req.socket.localPort;
47
+ loginUrl = "".concat(protocol, "://").concat(host, ":").concat(port, "/-/web/login?next=").concat(_middleware.LOGIN_API_ENDPOINTS.login_cli, "/").concat(sessionId);
48
+ doneUrl = "".concat(protocol, "://").concat(host, ":").concat(port).concat(_middleware.LOGIN_API_ENDPOINTS.login_done, "/").concat(sessionId);
49
+ debug('loginUrl: %o', loginUrl);
50
+ debug('doneUrl: %o', doneUrl);
51
+ res.json({
52
+ loginUrl: loginUrl,
53
+ doneUrl: doneUrl
54
+ });
55
+ case 2:
56
+ return _context.a(2);
57
+ }
58
+ }, _callee);
59
+ }));
60
+ return function (_x, _x2) {
61
+ return _ref.apply(this, arguments);
62
+ };
63
+ }());
64
+ route.get(_middleware.LOGIN_API_ENDPOINTS.login_done_session, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), /*#__PURE__*/function () {
65
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(req, res, next) {
66
+ var sessionId, tokens, tokenCreatedDate, minutesAgo, _t;
67
+ return _regenerator().w(function (_context2) {
68
+ while (1) switch (_context2.p = _context2.n) {
69
+ case 0:
70
+ debug('polling login session %o', req.params.sessionId);
71
+ if (req.params.sessionId) {
72
+ _context2.n = 1;
73
+ break;
74
+ }
75
+ debug('sessionId is missing');
76
+ return _context2.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_REQUIRED)));
77
+ case 1:
78
+ sessionId = req.params.sessionId;
79
+ if (!(sessionId.length !== 36)) {
80
+ _context2.n = 2;
81
+ break;
82
+ }
83
+ debug('sessionId is invalid length: %o', sessionId.length);
84
+ return _context2.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_INVALID)));
85
+ case 2:
86
+ _context2.p = 2;
87
+ _context2.n = 3;
88
+ return storage.readTokens({
89
+ user: sessionId
90
+ });
91
+ case 3:
92
+ tokens = _context2.v;
93
+ debug('tokens found for sessionId %o: %o', sessionId, tokens.length);
94
+ if (!(tokens && tokens.length === 1 && tokens[0].key === WEB_LOGIN_SESSION_ID)) {
95
+ _context2.n = 8;
96
+ break;
97
+ }
98
+ if (!(tokens[0].token.length === 0)) {
99
+ _context2.n = 4;
100
+ break;
101
+ }
102
+ debug('waiting for authentication');
103
+ // Poll again after short delay
104
+ // TODO: make this configurable (default 5 seconds)
105
+ res.status(_core.HTTP_STATUS.ACCEPTED);
106
+ res.set(_core.HEADERS.RETRY_AFTER, '5');
107
+ res.json({});
108
+ _context2.n = 7;
109
+ break;
110
+ case 4:
111
+ // session token can only be used once
112
+ debug('deleting session token');
113
+ _context2.n = 5;
114
+ return storage.deleteToken(sessionId, tokens[0].key);
115
+ case 5:
116
+ // Check if token has expired
117
+ // TODO: make this configurable (default 2 minutes)
118
+ tokenCreatedDate = new Date(tokens[0].created);
119
+ minutesAgo = new Date(Date.now() - 2 * 60 * 1000);
120
+ if (!(tokenCreatedDate < minutesAgo)) {
121
+ _context2.n = 6;
122
+ break;
123
+ }
75
124
  debug('session token expired');
76
- return next(_core.errorUtils.getUnauthorized(_core.API_ERROR.SESSION_TOKEN_EXPIRED));
77
- }
78
- debug('session token is valid, login successful');
79
- res.status(_core.HTTP_STATUS.OK);
80
- res.json({
81
- token: tokens[0].token
82
- });
125
+ return _context2.a(2, next(_core.errorUtils.getUnauthorized(_core.API_ERROR.SESSION_TOKEN_EXPIRED)));
126
+ case 6:
127
+ debug('session token is valid, login successful');
128
+ res.status(_core.HTTP_STATUS.OK);
129
+ res.json({
130
+ token: tokens[0].token
131
+ });
132
+ case 7:
133
+ _context2.n = 9;
134
+ break;
135
+ case 8:
136
+ return _context2.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_INVALID)));
137
+ case 9:
138
+ _context2.n = 11;
139
+ break;
140
+ case 10:
141
+ _context2.p = 10;
142
+ _t = _context2.v;
143
+ logger.error({
144
+ error: _t.msg
145
+ }, 'token list has failed: @{error}');
146
+ return _context2.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.INTERNAL_ERROR, _t.message)));
147
+ case 11:
148
+ return _context2.a(2);
83
149
  }
84
- } else {
85
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_INVALID));
86
- }
87
- } catch (error) {
88
- logger.error({
89
- error: error.msg
90
- }, 'token list has failed: @{error}');
91
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.INTERNAL_ERROR, error.message));
92
- }
93
- });
94
- route.post(_middleware.LOGIN_API_ENDPOINTS.login_cli_session, (0, _middleware.rateLimit)(config?.userRateLimit), async function (req, res, next) {
95
- const {
96
- username,
97
- password
98
- } = req.body;
99
- debug('authenticating login session %o for user %o', req.params.sessionId, username);
100
- if (!req.params.sessionId) {
101
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_REQUIRED));
102
- }
103
- const sessionId = req.params.sessionId;
104
- if (sessionId.length !== 36) {
105
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_INVALID));
106
- }
107
- auth.authenticate(username, password, async function callbackAuthenticate(err, user) {
108
- if (err) {
109
- logger.trace({
110
- username,
111
- err
112
- }, 'authenticating for user @{username} failed. Error: @{err.message}');
113
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.UNAUTHORIZED, err.message));
114
- }
115
- const remoteUser = (0, _config.createRemoteUser)(username, user?.groups || []);
116
- const token = await (0, _auth.getApiToken)(auth, config, remoteUser, password);
117
- if (!token) {
118
- return next(_core.errorUtils.getUnauthorized());
119
- }
120
-
121
- // Replace login session with token (to be picked up by the "done" endpoint)
122
- await storage.deleteToken(sessionId, WEB_LOGIN_SESSION_ID);
123
- await storage.saveToken({
124
- user: sessionId,
125
- token,
126
- key: WEB_LOGIN_SESSION_ID,
127
- readonly: false,
128
- created: new Date().getTime()
129
- });
130
- const message = _core.authUtils.getAuthenticatedMessage(remoteUser.name ?? '');
131
- res.status(_core.HTTP_STATUS.CREATED);
132
- res.set(_core.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
133
- res.json({
134
- ok: message,
135
- token
136
- });
137
- });
138
- });
150
+ }, _callee2, null, [[2, 10]]);
151
+ }));
152
+ return function (_x3, _x4, _x5) {
153
+ return _ref2.apply(this, arguments);
154
+ };
155
+ }());
156
+ route.post(_middleware.LOGIN_API_ENDPOINTS.login_cli_session, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), /*#__PURE__*/function () {
157
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(req, res, next) {
158
+ var _req$body, username, password, sessionId;
159
+ return _regenerator().w(function (_context4) {
160
+ while (1) switch (_context4.n) {
161
+ case 0:
162
+ _req$body = req.body, username = _req$body.username, password = _req$body.password;
163
+ debug('authenticating login session %o for user %o', req.params.sessionId, username);
164
+ if (req.params.sessionId) {
165
+ _context4.n = 1;
166
+ break;
167
+ }
168
+ debug('sessionId is missing');
169
+ return _context4.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_REQUIRED)));
170
+ case 1:
171
+ sessionId = req.params.sessionId;
172
+ if (!(sessionId.length !== 36)) {
173
+ _context4.n = 2;
174
+ break;
175
+ }
176
+ debug('sessionId is invalid length: %o', sessionId.length);
177
+ return _context4.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.SESSION_ID_INVALID)));
178
+ case 2:
179
+ auth.authenticate(username, password, /*#__PURE__*/function () {
180
+ var _callbackAuthenticate = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(err, user) {
181
+ var _remoteUser$name;
182
+ var remoteUser, token, message;
183
+ return _regenerator().w(function (_context3) {
184
+ while (1) switch (_context3.n) {
185
+ case 0:
186
+ if (!err) {
187
+ _context3.n = 1;
188
+ break;
189
+ }
190
+ logger.trace({
191
+ username: username,
192
+ err: err
193
+ }, 'authenticating for user @{username} failed. Error: @{err.message}');
194
+ return _context3.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.UNAUTHORIZED, err.message)));
195
+ case 1:
196
+ remoteUser = (0, _config.createRemoteUser)(username, (user === null || user === void 0 ? void 0 : user.groups) || []);
197
+ _context3.n = 2;
198
+ return (0, _auth.getApiToken)(auth, config, remoteUser, password);
199
+ case 2:
200
+ token = _context3.v;
201
+ if (token) {
202
+ _context3.n = 3;
203
+ break;
204
+ }
205
+ return _context3.a(2, next(_core.errorUtils.getUnauthorized()));
206
+ case 3:
207
+ // Replace login session with token (to be picked up by the "done" endpoint)
208
+ debug('saving token for sessionId %o', sessionId);
209
+ _context3.n = 4;
210
+ return storage.deleteToken(sessionId, WEB_LOGIN_SESSION_ID);
211
+ case 4:
212
+ _context3.n = 5;
213
+ return storage.saveToken({
214
+ user: sessionId,
215
+ token: token,
216
+ key: WEB_LOGIN_SESSION_ID,
217
+ readonly: false,
218
+ created: new Date().getTime()
219
+ });
220
+ case 5:
221
+ message = _core.authUtils.getAuthenticatedMessage((_remoteUser$name = remoteUser.name) !== null && _remoteUser$name !== void 0 ? _remoteUser$name : '');
222
+ res.status(_core.HTTP_STATUS.CREATED);
223
+ res.set(_core.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
224
+ res.json({
225
+ ok: message,
226
+ token: token
227
+ });
228
+ case 6:
229
+ return _context3.a(2);
230
+ }
231
+ }, _callee3);
232
+ }));
233
+ function callbackAuthenticate(_x9, _x0) {
234
+ return _callbackAuthenticate.apply(this, arguments);
235
+ }
236
+ return callbackAuthenticate;
237
+ }());
238
+ case 3:
239
+ return _context4.a(2);
240
+ }
241
+ }, _callee4);
242
+ }));
243
+ return function (_x6, _x7, _x8) {
244
+ return _ref3.apply(this, arguments);
245
+ };
246
+ }());
139
247
  }
140
248
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","names":["_debug","_interopRequireDefault","require","_nodeCrypto","_auth","_config","_core","_middleware","e","__esModule","default","debug","buildDebug","WEB_LOGIN_SESSION_ID","_default","route","auth","storage","config","logger","post","LOGIN_API_ENDPOINTS","login","rateLimit","userRateLimit","req","res","sessionId","randomUUID","saveToken","user","token","key","readonly","created","Date","getTime","status","HTTP_STATUS","OK","protocol","host","hostname","port","socket","localPort","loginUrl","login_cli","doneUrl","login_done","json","get","login_done_session","next","params","errorUtils","getCode","BAD_REQUEST","API_ERROR","SESSION_ID_REQUIRED","length","SESSION_ID_INVALID","tokens","readTokens","ACCEPTED","set","HEADERS","RETRY_AFTER","deleteToken","tokenCreatedDate","minutesAgo","now","getUnauthorized","SESSION_TOKEN_EXPIRED","error","msg","INTERNAL_ERROR","message","login_cli_session","username","password","body","authenticate","callbackAuthenticate","err","trace","UNAUTHORIZED","remoteUser","createRemoteUser","groups","getApiToken","authUtils","getAuthenticatedMessage","name","CREATED","CACHE_CONTROL","ok"],"sources":["../../src/v1/login.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Response, Router } from 'express';\nimport { randomUUID } from 'node:crypto';\n\nimport { Auth, getApiToken } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport { API_ERROR, HEADERS, HTTP_STATUS, authUtils, errorUtils } from '@verdaccio/core';\nimport { LOGIN_API_ENDPOINTS, rateLimit } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { Config, Logger } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nconst debug = buildDebug('verdaccio:api:login');\n\nconst WEB_LOGIN_SESSION_ID = 'web-login-sessionId';\n\n// https://github.com/npm/npm-profile/blob/main/lib/index.js\nexport default function (\n route: Router,\n auth: Auth,\n storage: Storage,\n config: Config,\n logger: Logger\n): void {\n route.post(\n LOGIN_API_ENDPOINTS.login,\n rateLimit(config?.userRateLimit),\n async function (req: $RequestExtend, res: Response): Promise<void> {\n // create new login session (without token)\n const sessionId = randomUUID();\n debug('creating login session %o', sessionId);\n\n await storage.saveToken({\n user: sessionId,\n token: '',\n key: WEB_LOGIN_SESSION_ID,\n readonly: false,\n created: new Date().getTime(),\n });\n\n res.status(HTTP_STATUS.OK);\n\n // Assuming Web UI is running on the same address as API\n const protocol = req.protocol;\n const host = req.hostname;\n const port = req.socket.localPort;\n\n const loginUrl = `${protocol}://${host}:${port}/-/web/login?next=${LOGIN_API_ENDPOINTS.login_cli}/${sessionId}`;\n const doneUrl = `${protocol}://${host}:${port}${LOGIN_API_ENDPOINTS.login_done}/${sessionId}`;\n debug('loginUrl: %o', loginUrl);\n debug('doneUrl: %o', doneUrl);\n\n res.json({\n loginUrl,\n doneUrl,\n });\n }\n );\n\n route.get(\n LOGIN_API_ENDPOINTS.login_done_session,\n rateLimit(config?.userRateLimit),\n async function (req: $RequestExtend, res: Response, next: $NextFunctionVer): Promise<void> {\n debug('polling login session %o', req.params.sessionId);\n\n if (!req.params.sessionId) {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_REQUIRED));\n }\n const sessionId = req.params.sessionId;\n if (sessionId.length !== 36) {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_INVALID));\n }\n\n try {\n const tokens = await storage.readTokens({ user: sessionId });\n\n if (tokens && tokens.length === 1 && tokens[0].key === WEB_LOGIN_SESSION_ID) {\n if (tokens[0].token.length === 0) {\n debug('waiting for authentication');\n // Poll again after short delay\n // TODO: make this configurable (default 5 seconds)\n res.status(HTTP_STATUS.ACCEPTED);\n res.set(HEADERS.RETRY_AFTER, '5');\n res.json({});\n } else {\n // session token can only be used once\n await storage.deleteToken(sessionId, tokens[0].key);\n\n // Check if token has expired\n // TODO: make this configurable (default 2 minutes)\n const tokenCreatedDate = new Date(tokens[0].created);\n const minutesAgo = new Date(Date.now() - 2 * 60 * 1000);\n if (tokenCreatedDate < minutesAgo) {\n debug('session token expired');\n return next(errorUtils.getUnauthorized(API_ERROR.SESSION_TOKEN_EXPIRED));\n }\n\n debug('session token is valid, login successful');\n\n res.status(HTTP_STATUS.OK);\n res.json({ token: tokens[0].token });\n }\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_INVALID));\n }\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token list has failed: @{error}');\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));\n }\n }\n );\n\n route.post(\n LOGIN_API_ENDPOINTS.login_cli_session,\n rateLimit(config?.userRateLimit),\n async function (req: $RequestExtend, res: Response, next: $NextFunctionVer): Promise<void> {\n const { username, password } = req.body;\n debug('authenticating login session %o for user %o', req.params.sessionId, username);\n\n if (!req.params.sessionId) {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_REQUIRED));\n }\n const sessionId = req.params.sessionId;\n if (sessionId.length !== 36) {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_INVALID));\n }\n\n auth.authenticate(\n username,\n password,\n async function callbackAuthenticate(err, user): Promise<void> {\n if (err) {\n logger.trace(\n { username, err },\n 'authenticating for user @{username} failed. Error: @{err.message}'\n );\n return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, err.message));\n }\n\n const remoteUser = createRemoteUser(username, user?.groups || []);\n const token = await getApiToken(auth, config, remoteUser, password);\n\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n // Replace login session with token (to be picked up by the \"done\" endpoint)\n await storage.deleteToken(sessionId, WEB_LOGIN_SESSION_ID);\n await storage.saveToken({\n user: sessionId,\n token,\n key: WEB_LOGIN_SESSION_ID,\n readonly: false,\n created: new Date().getTime(),\n });\n\n const message = authUtils.getAuthenticatedMessage(remoteUser.name ?? '');\n\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n res.json({ ok: message, token });\n }\n );\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"login.js","names":["_debug","_interopRequireDefault","require","_nodeCrypto","_auth","_config","_core","_middleware","e","__esModule","_regenerator","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","debug","buildDebug","WEB_LOGIN_SESSION_ID","_default","route","auth","storage","config","logger","post","LOGIN_API_ENDPOINTS","login","rateLimit","userRateLimit","_ref","_callee","req","res","sessionId","protocol","host","port","loginUrl","doneUrl","_context","randomUUID","saveToken","user","token","key","readonly","created","Date","getTime","status","HTTP_STATUS","OK","hostname","socket","localPort","concat","login_cli","login_done","json","_x","_x2","get","login_done_session","_ref2","_callee2","next","tokens","tokenCreatedDate","minutesAgo","_t","_context2","params","errorUtils","getCode","BAD_REQUEST","API_ERROR","SESSION_ID_REQUIRED","SESSION_ID_INVALID","readTokens","ACCEPTED","set","HEADERS","RETRY_AFTER","deleteToken","now","getUnauthorized","SESSION_TOKEN_EXPIRED","error","msg","INTERNAL_ERROR","message","_x3","_x4","_x5","login_cli_session","_ref3","_callee4","_req$body","username","password","_context4","body","authenticate","_callbackAuthenticate","_callee3","err","_remoteUser$name","remoteUser","_context3","trace","UNAUTHORIZED","createRemoteUser","groups","getApiToken","authUtils","getAuthenticatedMessage","name","CREATED","CACHE_CONTROL","ok","callbackAuthenticate","_x9","_x0","_x6","_x7","_x8"],"sources":["../../src/v1/login.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Response, Router } from 'express';\nimport { randomUUID } from 'node:crypto';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { getApiToken } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport { API_ERROR, HEADERS, HTTP_STATUS, authUtils, errorUtils } from '@verdaccio/core';\nimport { LOGIN_API_ENDPOINTS, rateLimit } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Config, Logger } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nconst debug = buildDebug('verdaccio:api:login');\n\nconst WEB_LOGIN_SESSION_ID = 'web-login-sessionId';\n\n// https://github.com/npm/npm-profile/blob/main/lib/index.js\nexport default function (\n route: Router,\n auth: Auth,\n storage: Storage,\n config: Config,\n logger: Logger\n): void {\n route.post(\n LOGIN_API_ENDPOINTS.login,\n rateLimit(config?.userRateLimit),\n async function (req: $RequestExtend, res: Response): Promise<void> {\n // create new login session (without token)\n const sessionId = randomUUID();\n debug('creating login session %o', sessionId);\n\n await storage.saveToken({\n user: sessionId,\n token: '',\n key: WEB_LOGIN_SESSION_ID,\n readonly: false,\n created: new Date().getTime(),\n });\n\n res.status(HTTP_STATUS.OK);\n\n // Assuming Web UI is running on the same address as API\n const protocol = req.protocol;\n const host = req.hostname;\n const port = req.socket.localPort;\n\n const loginUrl = `${protocol}://${host}:${port}/-/web/login?next=${LOGIN_API_ENDPOINTS.login_cli}/${sessionId}`;\n const doneUrl = `${protocol}://${host}:${port}${LOGIN_API_ENDPOINTS.login_done}/${sessionId}`;\n debug('loginUrl: %o', loginUrl);\n debug('doneUrl: %o', doneUrl);\n\n res.json({\n loginUrl,\n doneUrl,\n });\n }\n );\n\n route.get(\n LOGIN_API_ENDPOINTS.login_done_session,\n rateLimit(config?.userRateLimit),\n async function (req: $RequestExtend, res: Response, next: $NextFunctionVer): Promise<void> {\n debug('polling login session %o', req.params.sessionId);\n\n if (!req.params.sessionId) {\n debug('sessionId is missing');\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_REQUIRED));\n }\n const sessionId = req.params.sessionId;\n if (sessionId.length !== 36) {\n debug('sessionId is invalid length: %o', sessionId.length);\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_INVALID));\n }\n\n try {\n const tokens = await storage.readTokens({ user: sessionId });\n debug('tokens found for sessionId %o: %o', sessionId, tokens.length);\n if (tokens && tokens.length === 1 && tokens[0].key === WEB_LOGIN_SESSION_ID) {\n if (tokens[0].token.length === 0) {\n debug('waiting for authentication');\n // Poll again after short delay\n // TODO: make this configurable (default 5 seconds)\n res.status(HTTP_STATUS.ACCEPTED);\n res.set(HEADERS.RETRY_AFTER, '5');\n res.json({});\n } else {\n // session token can only be used once\n debug('deleting session token');\n await storage.deleteToken(sessionId, tokens[0].key);\n\n // Check if token has expired\n // TODO: make this configurable (default 2 minutes)\n const tokenCreatedDate = new Date(tokens[0].created);\n const minutesAgo = new Date(Date.now() - 2 * 60 * 1000);\n if (tokenCreatedDate < minutesAgo) {\n debug('session token expired');\n return next(errorUtils.getUnauthorized(API_ERROR.SESSION_TOKEN_EXPIRED));\n }\n\n debug('session token is valid, login successful');\n\n res.status(HTTP_STATUS.OK);\n res.json({ token: tokens[0].token });\n }\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_INVALID));\n }\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token list has failed: @{error}');\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));\n }\n }\n );\n\n route.post(\n LOGIN_API_ENDPOINTS.login_cli_session,\n rateLimit(config?.userRateLimit),\n async function (req: $RequestExtend, res: Response, next: $NextFunctionVer): Promise<void> {\n const { username, password } = req.body;\n debug('authenticating login session %o for user %o', req.params.sessionId, username);\n\n if (!req.params.sessionId) {\n debug('sessionId is missing');\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_REQUIRED));\n }\n const sessionId = req.params.sessionId;\n if (sessionId.length !== 36) {\n debug('sessionId is invalid length: %o', sessionId.length);\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.SESSION_ID_INVALID));\n }\n\n auth.authenticate(\n username,\n password,\n async function callbackAuthenticate(err, user): Promise<void> {\n if (err) {\n logger.trace(\n { username, err },\n 'authenticating for user @{username} failed. Error: @{err.message}'\n );\n return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, err.message));\n }\n\n const remoteUser = createRemoteUser(username, user?.groups || []);\n const token = await getApiToken(auth, config, remoteUser, password);\n\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n // Replace login session with token (to be picked up by the \"done\" endpoint)\n debug('saving token for sessionId %o', sessionId);\n await storage.deleteToken(sessionId, WEB_LOGIN_SESSION_ID);\n await storage.saveToken({\n user: sessionId,\n token,\n key: WEB_LOGIN_SESSION_ID,\n readonly: false,\n created: new Date().getTime(),\n });\n\n const message = authUtils.getAuthenticatedMessage(remoteUser.name ?? '');\n\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n res.json({ ok: message, token });\n }\n );\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { Router } from 'express';
2
- import { Auth } from '@verdaccio/auth';
3
- import { Config } from '@verdaccio/types';
1
+ import type { Router } from 'express';
2
+ import type { Auth } from '@verdaccio/auth';
3
+ import type { Config } from '@verdaccio/types';
4
4
  export interface Profile {
5
5
  tfa: boolean;
6
6
  name: string;
@@ -3,16 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = _default;
6
+ exports["default"] = _default;
7
7
  var _lodash = _interopRequireDefault(require("lodash"));
8
8
  var _core = require("@verdaccio/core");
9
9
  var _middleware = require("@verdaccio/middleware");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
11
  function _default(route, auth, config) {
12
12
  function buildProfile(name) {
13
13
  return {
14
14
  tfa: false,
15
- name,
15
+ name: name,
16
16
  email: '',
17
17
  email_verified: false,
18
18
  created: '',
@@ -21,8 +21,8 @@ function _default(route, auth, config) {
21
21
  fullname: ''
22
22
  };
23
23
  }
24
- route.get(_middleware.PROFILE_API_ENDPOINTS.get_profile, (0, _middleware.rateLimit)(config?.userRateLimit), function (req, res, next) {
25
- if (_lodash.default.isNil(req.remote_user.name) === false) {
24
+ route.get(_middleware.PROFILE_API_ENDPOINTS.get_profile, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
25
+ if (_lodash["default"].isNil(req.remote_user.name) === false) {
26
26
  return next(buildProfile(req.remote_user.name));
27
27
  }
28
28
  res.status(_core.HTTP_STATUS.UNAUTHORIZED);
@@ -30,31 +30,28 @@ function _default(route, auth, config) {
30
30
  message: _core.API_ERROR.MUST_BE_LOGGED
31
31
  });
32
32
  });
33
- route.post(_middleware.PROFILE_API_ENDPOINTS.get_profile, (0, _middleware.rateLimit)(config?.userRateLimit), function (req, res, next) {
34
- if (_lodash.default.isNil(req.remote_user.name)) {
33
+ route.post(_middleware.PROFILE_API_ENDPOINTS.get_profile, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
34
+ if (_lodash["default"].isNil(req.remote_user.name)) {
35
35
  res.status(_core.HTTP_STATUS.UNAUTHORIZED);
36
36
  return next({
37
37
  message: _core.API_ERROR.MUST_BE_LOGGED
38
38
  });
39
39
  }
40
- const {
41
- password,
42
- tfa
43
- } = req.body;
44
- const {
45
- name
46
- } = req.remote_user;
47
- if (_lodash.default.isNil(password) === false) {
48
- if (_core.validationUtils.validatePassword(password.new, config?.server?.passwordValidationRegex) === false) {
40
+ var _req$body = req.body,
41
+ password = _req$body.password,
42
+ tfa = _req$body.tfa;
43
+ var name = req.remote_user.name;
44
+ if (_lodash["default"].isNil(password) === false) {
45
+ var _config$server;
46
+ if (_core.validationUtils.validatePassword(password["new"], config === null || config === void 0 || (_config$server = config.server) === null || _config$server === void 0 ? void 0 : _config$server.passwordValidationRegex) === false) {
49
47
  /* eslint new-cap:off */
50
48
  return next(_core.errorUtils.getCode(_core.HTTP_STATUS.UNAUTHORIZED, _core.API_ERROR.PASSWORD_SHORT));
51
- /* eslint new-cap:off */
52
49
  }
53
- if (_lodash.default.isEmpty(password.old)) {
50
+ if (_lodash["default"].isEmpty(password.old)) {
54
51
  return next(_core.errorUtils.getBadRequest('old password is required'));
55
52
  }
56
- auth.changePassword(name, password.old, password.new, (err, isUpdated) => {
57
- if (_lodash.default.isNull(err) === false) {
53
+ auth.changePassword(name, password.old, password["new"], function (err, isUpdated) {
54
+ if (_lodash["default"].isNull(err) === false) {
58
55
  return next(_core.errorUtils.getForbidden(err.message));
59
56
  }
60
57
  if (isUpdated) {
@@ -62,7 +59,7 @@ function _default(route, auth, config) {
62
59
  }
63
60
  return next(_core.errorUtils.getInternalError(_core.API_ERROR.INTERNAL_SERVER_ERROR));
64
61
  });
65
- } else if (_lodash.default.isNil(tfa) === false) {
62
+ } else if (_lodash["default"].isNil(tfa) === false) {
66
63
  return next(_core.errorUtils.getCode(_core.HTTP_STATUS.SERVICE_UNAVAILABLE, _core.SUPPORT_ERRORS.TFA_DISABLED));
67
64
  } else {
68
65
  return next(_core.errorUtils.getCode(_core.HTTP_STATUS.INTERNAL_ERROR, _core.APP_ERROR.PROFILE_ERROR));
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","names":["_lodash","_interopRequireDefault","require","_core","_middleware","e","__esModule","default","_default","route","auth","config","buildProfile","name","tfa","email","email_verified","created","updated","cidr_whitelist","fullname","get","PROFILE_API_ENDPOINTS","get_profile","rateLimit","userRateLimit","req","res","next","_","isNil","remote_user","status","HTTP_STATUS","UNAUTHORIZED","message","API_ERROR","MUST_BE_LOGGED","post","password","body","validationUtils","validatePassword","new","server","passwordValidationRegex","errorUtils","getCode","PASSWORD_SHORT","isEmpty","old","getBadRequest","changePassword","err","isUpdated","isNull","getForbidden","getInternalError","INTERNAL_SERVER_ERROR","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","TFA_DISABLED","INTERNAL_ERROR","APP_ERROR","PROFILE_ERROR"],"sources":["../../src/v1/profile.ts"],"sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { Auth } from '@verdaccio/auth';\nimport {\n API_ERROR,\n APP_ERROR,\n HTTP_STATUS,\n SUPPORT_ERRORS,\n errorUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { PROFILE_API_ENDPOINTS } from '@verdaccio/middleware';\nimport { rateLimit } from '@verdaccio/middleware';\nimport { Config } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nexport interface Profile {\n tfa: boolean;\n name: string;\n email: string;\n email_verified: boolean;\n created: string;\n updated: string;\n cidr_whitelist: string[] | null;\n fullname: string;\n}\n\nexport default function (route: Router, auth: Auth, config: Config): void {\n function buildProfile(name: string): Profile {\n return {\n tfa: false,\n name,\n email: '',\n email_verified: false,\n created: '',\n updated: '',\n cidr_whitelist: null,\n fullname: '',\n };\n }\n\n route.get(\n PROFILE_API_ENDPOINTS.get_profile,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name) === false) {\n return next(buildProfile(req.remote_user.name));\n }\n\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n );\n\n route.post(\n PROFILE_API_ENDPOINTS.get_profile,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name)) {\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n\n const { password, tfa } = req.body;\n const { name } = req.remote_user;\n\n if (_.isNil(password) === false) {\n if (\n validationUtils.validatePassword(\n password.new,\n config?.server?.passwordValidationRegex\n ) === false\n ) {\n /* eslint new-cap:off */\n return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.PASSWORD_SHORT));\n /* eslint new-cap:off */\n }\n\n if (_.isEmpty(password.old)) {\n return next(errorUtils.getBadRequest('old password is required'));\n }\n\n auth.changePassword(\n name,\n password.old,\n password.new,\n (err, isUpdated): $NextFunctionVer => {\n if (_.isNull(err) === false) {\n return next(errorUtils.getForbidden(err.message));\n }\n\n if (isUpdated) {\n return next(buildProfile(req.remote_user.name));\n }\n return next(errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));\n }\n );\n } else if (_.isNil(tfa) === false) {\n return next(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.TFA_DISABLED)\n );\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, APP_ERROR.PROFILE_ERROR));\n }\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"profile.js","names":["_lodash","_interopRequireDefault","require","_core","_middleware","e","__esModule","_default","route","auth","config","buildProfile","name","tfa","email","email_verified","created","updated","cidr_whitelist","fullname","get","PROFILE_API_ENDPOINTS","get_profile","rateLimit","userRateLimit","req","res","next","_","isNil","remote_user","status","HTTP_STATUS","UNAUTHORIZED","message","API_ERROR","MUST_BE_LOGGED","post","_req$body","body","password","_config$server","validationUtils","validatePassword","server","passwordValidationRegex","errorUtils","getCode","PASSWORD_SHORT","isEmpty","old","getBadRequest","changePassword","err","isUpdated","isNull","getForbidden","getInternalError","INTERNAL_SERVER_ERROR","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","TFA_DISABLED","INTERNAL_ERROR","APP_ERROR","PROFILE_ERROR"],"sources":["../../src/v1/profile.ts"],"sourcesContent":["import type { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport type { Auth } from '@verdaccio/auth';\nimport {\n API_ERROR,\n APP_ERROR,\n HTTP_STATUS,\n SUPPORT_ERRORS,\n errorUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { PROFILE_API_ENDPOINTS, rateLimit } from '@verdaccio/middleware';\nimport type { Config } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nexport interface Profile {\n tfa: boolean;\n name: string;\n email: string;\n email_verified: boolean;\n created: string;\n updated: string;\n cidr_whitelist: string[] | null;\n fullname: string;\n}\n\nexport default function (route: Router, auth: Auth, config: Config): void {\n function buildProfile(name: string): Profile {\n return {\n tfa: false,\n name,\n email: '',\n email_verified: false,\n created: '',\n updated: '',\n cidr_whitelist: null,\n fullname: '',\n };\n }\n\n route.get(\n PROFILE_API_ENDPOINTS.get_profile,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name) === false) {\n return next(buildProfile(req.remote_user.name));\n }\n\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n );\n\n route.post(\n PROFILE_API_ENDPOINTS.get_profile,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name)) {\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n\n const { password, tfa } = req.body;\n const { name } = req.remote_user;\n\n if (_.isNil(password) === false) {\n if (\n validationUtils.validatePassword(\n password.new,\n config?.server?.passwordValidationRegex\n ) === false\n ) {\n /* eslint new-cap:off */\n return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.PASSWORD_SHORT));\n }\n\n if (_.isEmpty(password.old)) {\n return next(errorUtils.getBadRequest('old password is required'));\n }\n\n auth.changePassword(\n name,\n password.old,\n password.new,\n (err, isUpdated): $NextFunctionVer => {\n if (_.isNull(err) === false) {\n return next(errorUtils.getForbidden(err.message));\n }\n\n if (isUpdated) {\n return next(buildProfile(req.remote_user.name));\n }\n return next(errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));\n }\n );\n } else if (_.isNil(tfa) === false) {\n return next(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.TFA_DISABLED)\n );\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, APP_ERROR.PROFILE_ERROR));\n }\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { Auth } from '@verdaccio/auth';
2
- import { Storage } from '@verdaccio/store';
3
- import { Logger } from '@verdaccio/types';
1
+ import type { Auth } from '@verdaccio/auth';
2
+ import type { Storage } from '@verdaccio/store';
3
+ import type { Logger } from '@verdaccio/types';
4
4
  /**
5
5
  * Endpoint for npm search v1
6
6
  * Empty value