@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/dist-tags.d.ts +4 -4
- package/build/dist-tags.js +109 -53
- package/build/dist-tags.js.map +1 -1
- package/build/index.d.ts +4 -4
- package/build/index.js +23 -22
- package/build/index.js.map +1 -1
- package/build/package.d.ts +3 -3
- package/build/package.js +108 -85
- package/build/package.js.map +1 -1
- package/build/ping.d.ts +1 -1
- package/build/ping.js +1 -1
- package/build/ping.js.map +1 -1
- package/build/publish.d.ts +15 -15
- package/build/publish.js +148 -105
- package/build/publish.js.map +1 -1
- package/build/search.d.ts +1 -1
- package/build/search.js +1 -1
- package/build/search.js.map +1 -1
- package/build/stars.d.ts +2 -2
- package/build/stars.js +50 -20
- package/build/stars.js.map +1 -1
- package/build/user.d.ts +3 -4
- package/build/user.js +122 -64
- package/build/user.js.map +1 -1
- package/build/v1/login.d.ts +4 -4
- package/build/v1/login.js +229 -121
- package/build/v1/login.js.map +1 -1
- package/build/v1/profile.d.ts +3 -3
- package/build/v1/profile.js +18 -21
- package/build/v1/profile.js.map +1 -1
- package/build/v1/search.d.ts +3 -3
- package/build/v1/search.js +79 -46
- package/build/v1/search.js.map +1 -1
- package/build/v1/token.d.ts +4 -4
- package/build/v1/token.js +183 -126
- package/build/v1/token.js.map +1 -1
- package/build/whoami.d.ts +1 -1
- package/build/whoami.js +6 -5
- package/build/whoami.js.map +1 -1
- package/package.json +9 -9
package/build/v1/login.js
CHANGED
|
@@ -3,138 +3,246 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports
|
|
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
|
-
|
|
15
|
-
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
package/build/v1/login.js.map
CHANGED
|
@@ -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":[]}
|
package/build/v1/profile.d.ts
CHANGED
|
@@ -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;
|
package/build/v1/profile.js
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports
|
|
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
|
|
25
|
-
if (_lodash
|
|
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
|
|
34
|
-
if (_lodash
|
|
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
|
-
|
|
41
|
-
password,
|
|
42
|
-
tfa
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
|
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
|
|
57
|
-
if (_lodash
|
|
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
|
|
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));
|
package/build/v1/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","names":["_lodash","_interopRequireDefault","require","_core","_middleware","e","__esModule","
|
|
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":";;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,KAAA,GAAAD,OAAA;AAQA,IAAAE,WAAA,GAAAF,OAAA;AAAyE,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,gBAAAA,CAAA;AAgB1D,SAAAE,SAAUC,KAAa,EAAEC,IAAU,EAAEC,MAAc,EAAQ;EACxE,SAASC,YAAYA,CAACC,IAAY,EAAW;IAC3C,OAAO;MACLC,GAAG,EAAE,KAAK;MACVD,IAAI,EAAJA,IAAI;MACJE,KAAK,EAAE,EAAE;MACTC,cAAc,EAAE,KAAK;MACrBC,OAAO,EAAE,EAAE;MACXC,OAAO,EAAE,EAAE;MACXC,cAAc,EAAE,IAAI;MACpBC,QAAQ,EAAE;IACZ,CAAC;EACH;EAEAX,KAAK,CAACY,GAAG,CACPC,iCAAqB,CAACC,WAAW,EACjC,IAAAC,qBAAS,EAACb,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEc,aAAa,CAAC,EAChC,UAAUC,GAAmB,EAAEC,GAAa,EAAEC,IAAsB,EAAQ;IAC1E,IAAIC,kBAAC,CAACC,KAAK,CAACJ,GAAG,CAACK,WAAW,CAAClB,IAAI,CAAC,KAAK,KAAK,EAAE;MAC3C,OAAOe,IAAI,CAAChB,YAAY,CAACc,GAAG,CAACK,WAAW,CAAClB,IAAI,CAAC,CAAC;IACjD;IAEAc,GAAG,CAACK,MAAM,CAACC,iBAAW,CAACC,YAAY,CAAC;IACpC,OAAON,IAAI,CAAC;MACVO,OAAO,EAAEC,eAAS,CAACC;IACrB,CAAC,CAAC;EACJ,CACF,CAAC;EAED5B,KAAK,CAAC6B,IAAI,CACRhB,iCAAqB,CAACC,WAAW,EACjC,IAAAC,qBAAS,EAACb,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEc,aAAa,CAAC,EAChC,UAAUC,GAAmB,EAAEC,GAAa,EAAEC,IAAsB,EAAQ;IAC1E,IAAIC,kBAAC,CAACC,KAAK,CAACJ,GAAG,CAACK,WAAW,CAAClB,IAAI,CAAC,EAAE;MACjCc,GAAG,CAACK,MAAM,CAACC,iBAAW,CAACC,YAAY,CAAC;MACpC,OAAON,IAAI,CAAC;QACVO,OAAO,EAAEC,eAAS,CAACC;MACrB,CAAC,CAAC;IACJ;IAEA,IAAAE,SAAA,GAA0Bb,GAAG,CAACc,IAAI;MAA1BC,QAAQ,GAAAF,SAAA,CAARE,QAAQ;MAAE3B,GAAG,GAAAyB,SAAA,CAAHzB,GAAG;IACrB,IAAQD,IAAI,GAAKa,GAAG,CAACK,WAAW,CAAxBlB,IAAI;IAEZ,IAAIgB,kBAAC,CAACC,KAAK,CAACW,QAAQ,CAAC,KAAK,KAAK,EAAE;MAAA,IAAAC,cAAA;MAC/B,IACEC,qBAAe,CAACC,gBAAgB,CAC9BH,QAAQ,OAAI,EACZ9B,MAAM,aAANA,MAAM,gBAAA+B,cAAA,GAAN/B,MAAM,CAAEkC,MAAM,cAAAH,cAAA,uBAAdA,cAAA,CAAgBI,uBAClB,CAAC,KAAK,KAAK,EACX;QACA;QACA,OAAOlB,IAAI,CAACmB,gBAAU,CAACC,OAAO,CAACf,iBAAW,CAACC,YAAY,EAAEE,eAAS,CAACa,cAAc,CAAC,CAAC;MACrF;MAEA,IAAIpB,kBAAC,CAACqB,OAAO,CAACT,QAAQ,CAACU,GAAG,CAAC,EAAE;QAC3B,OAAOvB,IAAI,CAACmB,gBAAU,CAACK,aAAa,CAAC,0BAA0B,CAAC,CAAC;MACnE;MAEA1C,IAAI,CAAC2C,cAAc,CACjBxC,IAAI,EACJ4B,QAAQ,CAACU,GAAG,EACZV,QAAQ,OAAI,EACZ,UAACa,GAAG,EAAEC,SAAS,EAAuB;QACpC,IAAI1B,kBAAC,CAAC2B,MAAM,CAACF,GAAG,CAAC,KAAK,KAAK,EAAE;UAC3B,OAAO1B,IAAI,CAACmB,gBAAU,CAACU,YAAY,CAACH,GAAG,CAACnB,OAAO,CAAC,CAAC;QACnD;QAEA,IAAIoB,SAAS,EAAE;UACb,OAAO3B,IAAI,CAAChB,YAAY,CAACc,GAAG,CAACK,WAAW,CAAClB,IAAI,CAAC,CAAC;QACjD;QACA,OAAOe,IAAI,CAACmB,gBAAU,CAACW,gBAAgB,CAACtB,eAAS,CAACuB,qBAAqB,CAAC,CAAC;MAC3E,CACF,CAAC;IACH,CAAC,MAAM,IAAI9B,kBAAC,CAACC,KAAK,CAAChB,GAAG,CAAC,KAAK,KAAK,EAAE;MACjC,OAAOc,IAAI,CACTmB,gBAAU,CAACC,OAAO,CAACf,iBAAW,CAAC2B,mBAAmB,EAAEC,oBAAc,CAACC,YAAY,CACjF,CAAC;IACH,CAAC,MAAM;MACL,OAAOlC,IAAI,CAACmB,gBAAU,CAACC,OAAO,CAACf,iBAAW,CAAC8B,cAAc,EAAEC,eAAS,CAACC,aAAa,CAAC,CAAC;IACtF;EACF,CACF,CAAC;AACH","ignoreList":[]}
|
package/build/v1/search.d.ts
CHANGED
|
@@ -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
|