@verdaccio/api 9.0.0-next-9.2 → 9.0.0-next-9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/build/_virtual/_rolldown/runtime.js +23 -0
  2. package/build/dist-tags.d.ts +4 -4
  3. package/build/dist-tags.js +52 -124
  4. package/build/dist-tags.js.map +1 -1
  5. package/build/dist-tags.mjs +52 -0
  6. package/build/dist-tags.mjs.map +1 -0
  7. package/build/index.d.ts +4 -4
  8. package/build/index.js +61 -78
  9. package/build/index.js.map +1 -1
  10. package/build/index.mjs +59 -0
  11. package/build/index.mjs.map +1 -0
  12. package/build/package.d.ts +3 -3
  13. package/build/package.js +69 -120
  14. package/build/package.js.map +1 -1
  15. package/build/package.mjs +69 -0
  16. package/build/package.mjs.map +1 -0
  17. package/build/ping.d.ts +1 -1
  18. package/build/ping.js +10 -11
  19. package/build/ping.js.map +1 -1
  20. package/build/ping.mjs +11 -0
  21. package/build/ping.mjs.map +1 -0
  22. package/build/publish.d.ts +4 -4
  23. package/build/publish.js +192 -268
  24. package/build/publish.js.map +1 -1
  25. package/build/publish.mjs +196 -0
  26. package/build/publish.mjs.map +1 -0
  27. package/build/search.d.ts +1 -1
  28. package/build/search.js +13 -17
  29. package/build/search.js.map +1 -1
  30. package/build/search.mjs +14 -0
  31. package/build/search.mjs.map +1 -0
  32. package/build/stars.d.ts +2 -2
  33. package/build/stars.js +21 -59
  34. package/build/stars.js.map +1 -1
  35. package/build/stars.mjs +21 -0
  36. package/build/stars.mjs.map +1 -0
  37. package/build/user.d.ts +3 -3
  38. package/build/user.js +106 -188
  39. package/build/user.js.map +1 -1
  40. package/build/user.mjs +106 -0
  41. package/build/user.mjs.map +1 -0
  42. package/build/v1/login.d.ts +4 -4
  43. package/build/v1/login.js +115 -246
  44. package/build/v1/login.js.map +1 -1
  45. package/build/v1/login.mjs +115 -0
  46. package/build/v1/login.mjs.map +1 -0
  47. package/build/v1/profile.d.ts +3 -3
  48. package/build/v1/profile.js +45 -67
  49. package/build/v1/profile.js.map +1 -1
  50. package/build/v1/profile.mjs +45 -0
  51. package/build/v1/profile.mjs.map +1 -0
  52. package/build/v1/search.d.ts +3 -3
  53. package/build/v1/search.js +64 -113
  54. package/build/v1/search.js.map +1 -1
  55. package/build/v1/search.mjs +64 -0
  56. package/build/v1/search.mjs.map +1 -0
  57. package/build/v1/token.d.ts +4 -4
  58. package/build/v1/token.js +100 -201
  59. package/build/v1/token.js.map +1 -1
  60. package/build/v1/token.mjs +102 -0
  61. package/build/v1/token.mjs.map +1 -0
  62. package/build/whoami.d.ts +1 -1
  63. package/build/whoami.js +20 -25
  64. package/build/whoami.js.map +1 -1
  65. package/build/whoami.mjs +20 -0
  66. package/build/whoami.mjs.map +1 -0
  67. package/package.json +25 -14
package/build/user.js CHANGED
@@ -1,190 +1,108 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = _default;
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _auth = require("@verdaccio/auth");
9
- var _config = require("@verdaccio/config");
10
- var _core = require("@verdaccio/core");
11
- var _middleware = require("@verdaccio/middleware");
12
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
13
- 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 }; })(); }
14
- 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); }
15
- 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); }
16
- 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); }); }; }
17
- var debug = (0, _debug["default"])('verdaccio:api:user');
18
- function _default(route, auth, config, logger) {
19
- route.get(_middleware.USER_API_ENDPOINTS.get_user, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
20
- debug('verifying user');
21
- if (!req.remote_user || typeof req.remote_user.name !== 'string' || req.remote_user.name === '') {
22
- debug('user not logged in');
23
- res.status(_core.HTTP_STATUS.OK);
24
- return next({
25
- ok: false
26
- });
27
- }
28
- var username = req.params.org_couchdb_user.split(':')[1];
29
- var message = _core.authUtils.getAuthenticatedMessage(req.remote_user.name);
30
- debug('user authenticated message %o', message);
31
- res.status(_core.HTTP_STATUS.OK);
32
- next({
33
- // 'npm owner' requires user info
34
- // TODO: we don't have the email
35
- name: username,
36
- email: '',
37
- ok: message
38
- });
39
- });
40
-
41
- /**
42
- *
43
- * body example
44
- * req.body = {
45
- _id: "org.couchdb.user:jjjj",
46
- name: "jjjj",
47
- password: "jjjj",
48
- type: "user",
49
- roles: [],
50
- date: "2022-07-08T15:51:04.002Z",
51
- }
52
- *
53
- * @export
54
- * @param {Router} route
55
- * @param {Auth} auth
56
- * @param {Config} config
57
- */
58
- route.put(_middleware.USER_API_ENDPOINTS.add_user, (0, _middleware.rateLimit)(config === null || config === void 0 ? void 0 : config.userRateLimit), function (req, res, next) {
59
- var _req$remote_user;
60
- var _req$body = req.body,
61
- name = _req$body.name,
62
- password = _req$body.password;
63
- debug('login or adduser');
64
- var remoteName = req === null || req === void 0 || (_req$remote_user = req.remote_user) === null || _req$remote_user === void 0 ? void 0 : _req$remote_user.name;
65
- if (!_core.validationUtils.validateUserName(req.params.org_couchdb_user, name)) {
66
- return next(_core.errorUtils.getBadRequest(_core.API_ERROR.USERNAME_MISMATCH));
67
- }
68
- if (typeof remoteName !== 'undefined' && typeof name === 'string' && remoteName === name) {
69
- debug('login: no remote user detected');
70
- auth.authenticate(name, password, /*#__PURE__*/function () {
71
- var _callbackAuthenticate = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(err, user) {
72
- var restoredRemoteUser, token, message;
73
- return _regenerator().w(function (_context) {
74
- while (1) switch (_context.n) {
75
- case 0:
76
- if (!err) {
77
- _context.n = 1;
78
- break;
79
- }
80
- logger.trace({
81
- name: name,
82
- err: err
83
- }, 'authenticating for user @{username} failed. Error: @{err.message}');
84
- return _context.a(2, next(_core.errorUtils.getCode(_core.HTTP_STATUS.UNAUTHORIZED, _core.API_ERROR.BAD_USERNAME_PASSWORD)));
85
- case 1:
86
- restoredRemoteUser = (0, _config.createRemoteUser)(name, (user === null || user === void 0 ? void 0 : user.groups) || []);
87
- _context.n = 2;
88
- return (0, _auth.getApiToken)(auth, config, restoredRemoteUser, password);
89
- case 2:
90
- token = _context.v;
91
- debug('login: new token');
92
- if (token) {
93
- _context.n = 3;
94
- break;
95
- }
96
- return _context.a(2, next(_core.errorUtils.getUnauthorized()));
97
- case 3:
98
- res.status(_core.HTTP_STATUS.CREATED);
99
- res.set(_core.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
100
- message = _core.authUtils.getAuthenticatedMessage(req.remote_user.name);
101
- debug('login: created user message %o', message);
102
- return _context.a(2, next({
103
- ok: message,
104
- token: token
105
- }));
106
- }
107
- }, _callee);
108
- }));
109
- function callbackAuthenticate(_x, _x2) {
110
- return _callbackAuthenticate.apply(this, arguments);
111
- }
112
- return callbackAuthenticate;
113
- }());
114
- } else {
115
- var _config$server;
116
- debug('adduser: %o', name);
117
- if (_core.validationUtils.validatePassword(password, config === null || config === void 0 || (_config$server = config.server) === null || _config$server === void 0 ? void 0 : _config$server.passwordValidationRegex) === false) {
118
- debug('adduser: invalid password');
119
- return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.API_ERROR.PASSWORD_SHORT));
120
- }
121
- auth.add_user(name, password, /*#__PURE__*/function () {
122
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(err, user) {
123
- var token, _t;
124
- return _regenerator().w(function (_context2) {
125
- while (1) switch (_context2.n) {
126
- case 0:
127
- if (!err) {
128
- _context2.n = 2;
129
- break;
130
- }
131
- if (!(err.status >= _core.HTTP_STATUS.BAD_REQUEST && err.status < _core.HTTP_STATUS.INTERNAL_ERROR)) {
132
- _context2.n = 1;
133
- break;
134
- }
135
- debug('adduser: error on create user');
136
- // With npm registering is the same as logging in,
137
- // and npm accepts only an 409 error.
138
- // So, changing status code here.
139
- return _context2.a(2, next(_core.errorUtils.getCode(err.status, err.message) || _core.errorUtils.getConflict(err.message)));
140
- case 1:
141
- return _context2.a(2, next(err));
142
- case 2:
143
- if (!(name && password)) {
144
- _context2.n = 4;
145
- break;
146
- }
147
- _context2.n = 3;
148
- return (0, _auth.getApiToken)(auth, config, user, password);
149
- case 3:
150
- _t = _context2.v;
151
- _context2.n = 5;
152
- break;
153
- case 4:
154
- _t = undefined;
155
- case 5:
156
- token = _t;
157
- if (token) {
158
- debug('adduser: new token %o', _core.cryptoUtils.mask(token, 4));
159
- }
160
- if (token) {
161
- _context2.n = 6;
162
- break;
163
- }
164
- return _context2.a(2, next(_core.errorUtils.getUnauthorized()));
165
- case 6:
166
- req.remote_user = user;
167
- res.status(_core.HTTP_STATUS.CREATED);
168
- res.set(_core.HEADERS.CACHE_CONTROL, 'no-cache, no-store');
169
- debug('adduser: user has been created');
170
- return _context2.a(2, next({
171
- ok: "user '".concat(req.body.name, "' created"),
172
- token: token
173
- }));
174
- }
175
- }, _callee2);
176
- }));
177
- return function (_x3, _x4) {
178
- return _ref.apply(this, arguments);
179
- };
180
- }());
181
- }
182
- });
183
- route["delete"](_middleware.USER_API_ENDPOINTS.user_token, function (req, res, next) {
184
- res.status(_core.HTTP_STATUS.OK);
185
- next({
186
- ok: _core.API_MESSAGE.LOGGED_OUT
187
- });
188
- });
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.js");
2
+ let debug = require("debug");
3
+ debug = require_runtime.__toESM(debug);
4
+ let _verdaccio_middleware = require("@verdaccio/middleware");
5
+ let _verdaccio_core = require("@verdaccio/core");
6
+ let _verdaccio_auth = require("@verdaccio/auth");
7
+ let _verdaccio_config = require("@verdaccio/config");
8
+ //#region src/user.ts
9
+ var debug$1 = (0, debug.default)("verdaccio:api:user");
10
+ function user_default(route, auth, config, logger) {
11
+ route.get(_verdaccio_middleware.USER_API_ENDPOINTS.get_user, (0, _verdaccio_middleware.rateLimit)(config?.userRateLimit), function(req, res, next) {
12
+ debug$1("verifying user");
13
+ if (!req.remote_user || typeof req.remote_user.name !== "string" || req.remote_user.name === "") {
14
+ debug$1("user not logged in");
15
+ res.status(_verdaccio_core.HTTP_STATUS.OK);
16
+ return next({ ok: false });
17
+ }
18
+ const username = req.params.org_couchdb_user.split(":")[1];
19
+ const message = _verdaccio_core.authUtils.getAuthenticatedMessage(req.remote_user.name);
20
+ debug$1("user authenticated message %o", message);
21
+ res.status(_verdaccio_core.HTTP_STATUS.OK);
22
+ next({
23
+ name: username,
24
+ email: "",
25
+ ok: message
26
+ });
27
+ });
28
+ /**
29
+ *
30
+ * body example
31
+ * req.body = {
32
+ _id: "org.couchdb.user:jjjj",
33
+ name: "jjjj",
34
+ password: "jjjj",
35
+ type: "user",
36
+ roles: [],
37
+ date: "2022-07-08T15:51:04.002Z",
38
+ }
39
+ *
40
+ * @export
41
+ * @param {Router} route
42
+ * @param {Auth} auth
43
+ * @param {Config} config
44
+ */
45
+ route.put(_verdaccio_middleware.USER_API_ENDPOINTS.add_user, (0, _verdaccio_middleware.rateLimit)(config?.userRateLimit), function(req, res, next) {
46
+ const { name, password } = req.body;
47
+ debug$1("login or adduser");
48
+ const remoteName = req?.remote_user?.name;
49
+ if (!_verdaccio_core.validationUtils.validateUserName(req.params.org_couchdb_user, name)) return next(_verdaccio_core.errorUtils.getBadRequest(_verdaccio_core.API_ERROR.USERNAME_MISMATCH));
50
+ if (typeof remoteName !== "undefined" && typeof name === "string" && remoteName === name) {
51
+ debug$1("login: no remote user detected");
52
+ auth.authenticate(name, password, async function callbackAuthenticate(err, user) {
53
+ if (err) {
54
+ logger.trace({
55
+ name,
56
+ err
57
+ }, "authenticating for user @{username} failed. Error: @{err.message}");
58
+ return next(_verdaccio_core.errorUtils.getCode(_verdaccio_core.HTTP_STATUS.UNAUTHORIZED, _verdaccio_core.API_ERROR.BAD_USERNAME_PASSWORD));
59
+ }
60
+ const token = await (0, _verdaccio_auth.getApiToken)(auth, config, (0, _verdaccio_config.createRemoteUser)(name, user?.groups || []), password);
61
+ debug$1("login: new token");
62
+ if (!token) return next(_verdaccio_core.errorUtils.getUnauthorized());
63
+ res.status(_verdaccio_core.HTTP_STATUS.CREATED);
64
+ res.set(_verdaccio_core.HEADERS.CACHE_CONTROL, "no-cache, no-store");
65
+ const message = _verdaccio_core.authUtils.getAuthenticatedMessage(req.remote_user.name);
66
+ debug$1("login: created user message %o", message);
67
+ return next({
68
+ ok: message,
69
+ token
70
+ });
71
+ });
72
+ } else {
73
+ debug$1("adduser: %o", name);
74
+ if (_verdaccio_core.validationUtils.validatePassword(password, config?.server?.passwordValidationRegex) === false) {
75
+ debug$1("adduser: invalid password");
76
+ return next(_verdaccio_core.errorUtils.getCode(_verdaccio_core.HTTP_STATUS.BAD_REQUEST, _verdaccio_core.API_ERROR.PASSWORD_SHORT));
77
+ }
78
+ auth.add_user(name, password, async function(err, user) {
79
+ if (err) {
80
+ if (err.status >= _verdaccio_core.HTTP_STATUS.BAD_REQUEST && err.status < _verdaccio_core.HTTP_STATUS.INTERNAL_ERROR) {
81
+ debug$1("adduser: error on create user");
82
+ return next(_verdaccio_core.errorUtils.getCode(err.status, err.message) || _verdaccio_core.errorUtils.getConflict(err.message));
83
+ }
84
+ return next(err);
85
+ }
86
+ const token = name && password ? await (0, _verdaccio_auth.getApiToken)(auth, config, user, password) : void 0;
87
+ if (token) debug$1("adduser: new token %o", _verdaccio_core.cryptoUtils.mask(token, 4));
88
+ if (!token) return next(_verdaccio_core.errorUtils.getUnauthorized());
89
+ req.remote_user = user;
90
+ res.status(_verdaccio_core.HTTP_STATUS.CREATED);
91
+ res.set(_verdaccio_core.HEADERS.CACHE_CONTROL, "no-cache, no-store");
92
+ debug$1("adduser: user has been created");
93
+ return next({
94
+ ok: `user '${req.body.name}' created`,
95
+ token
96
+ });
97
+ });
98
+ }
99
+ });
100
+ route.delete(_verdaccio_middleware.USER_API_ENDPOINTS.user_token, function(req, res, next) {
101
+ res.status(_verdaccio_core.HTTP_STATUS.OK);
102
+ next({ ok: _verdaccio_core.API_MESSAGE.LOGGED_OUT });
103
+ });
189
104
  }
105
+ //#endregion
106
+ exports.default = user_default;
107
+
190
108
  //# sourceMappingURL=user.js.map
package/build/user.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","names":["_debug","_interopRequireDefault","require","_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","_default","route","auth","config","logger","get","USER_API_ENDPOINTS","get_user","rateLimit","userRateLimit","req","res","next","remote_user","name","status","HTTP_STATUS","OK","ok","username","params","org_couchdb_user","split","message","authUtils","getAuthenticatedMessage","email","put","add_user","_req$remote_user","_req$body","body","password","remoteName","validationUtils","validateUserName","errorUtils","getBadRequest","API_ERROR","USERNAME_MISMATCH","authenticate","_callbackAuthenticate","_callee","err","user","restoredRemoteUser","token","_context","trace","getCode","UNAUTHORIZED","BAD_USERNAME_PASSWORD","createRemoteUser","groups","getApiToken","getUnauthorized","CREATED","set","HEADERS","CACHE_CONTROL","callbackAuthenticate","_x","_x2","_config$server","validatePassword","server","passwordValidationRegex","BAD_REQUEST","PASSWORD_SHORT","_ref","_callee2","_t","_context2","INTERNAL_ERROR","getConflict","undefined","cryptoUtils","mask","concat","_x3","_x4","user_token","API_MESSAGE","LOGGED_OUT"],"sources":["../src/user.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Response, Router } from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { getApiToken } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport {\n API_ERROR,\n API_MESSAGE,\n HEADERS,\n HTTP_STATUS,\n authUtils,\n cryptoUtils,\n errorUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { USER_API_ENDPOINTS, rateLimit } from '@verdaccio/middleware';\nimport type { Config, Logger, RemoteUser } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router, auth: Auth, config: Config, logger: Logger): void {\n route.get(\n USER_API_ENDPOINTS.get_user,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n debug('verifying user');\n\n if (\n !req.remote_user ||\n typeof req.remote_user.name !== 'string' ||\n req.remote_user.name === ''\n ) {\n debug('user not logged in');\n res.status(HTTP_STATUS.OK);\n return next({ ok: false });\n }\n\n const username = req.params.org_couchdb_user.split(':')[1];\n const message = authUtils.getAuthenticatedMessage(req.remote_user.name);\n debug('user authenticated message %o', message);\n res.status(HTTP_STATUS.OK);\n next({\n // 'npm owner' requires user info\n // TODO: we don't have the email\n name: username,\n email: '',\n ok: message,\n });\n }\n );\n\n /**\n * \n * body example\n * req.body = {\n _id: \"org.couchdb.user:jjjj\",\n name: \"jjjj\",\n password: \"jjjj\",\n type: \"user\",\n roles: [],\n date: \"2022-07-08T15:51:04.002Z\",\n }\n * \n * @export\n * @param {Router} route\n * @param {Auth} auth\n * @param {Config} config\n */\n route.put(\n USER_API_ENDPOINTS.add_user,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n const { name, password } = req.body;\n debug('login or adduser');\n const remoteName = req?.remote_user?.name;\n\n if (!validationUtils.validateUserName(req.params.org_couchdb_user, name)) {\n return next(errorUtils.getBadRequest(API_ERROR.USERNAME_MISMATCH));\n }\n\n if (typeof remoteName !== 'undefined' && typeof name === 'string' && remoteName === name) {\n debug('login: no remote user detected');\n auth.authenticate(\n name,\n password,\n async function callbackAuthenticate(err, user): Promise<void> {\n if (err) {\n logger.trace(\n { name, err },\n 'authenticating for user @{username} failed. Error: @{err.message}'\n );\n return next(\n errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.BAD_USERNAME_PASSWORD)\n );\n }\n\n const restoredRemoteUser: RemoteUser = createRemoteUser(name, user?.groups || []);\n const token = await getApiToken(auth, config, restoredRemoteUser, password);\n debug('login: new token');\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n\n const message = authUtils.getAuthenticatedMessage(req.remote_user.name);\n debug('login: created user message %o', message);\n\n return next({\n ok: message,\n token,\n });\n }\n );\n } else {\n debug('adduser: %o', name);\n if (\n validationUtils.validatePassword(password, config?.server?.passwordValidationRegex) ===\n false\n ) {\n debug('adduser: invalid password');\n\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.PASSWORD_SHORT));\n }\n\n auth.add_user(name, password, async function (err, user): Promise<void> {\n if (err) {\n if (err.status >= HTTP_STATUS.BAD_REQUEST && err.status < HTTP_STATUS.INTERNAL_ERROR) {\n debug('adduser: error on create user');\n // With npm registering is the same as logging in,\n // and npm accepts only an 409 error.\n // So, changing status code here.\n return next(\n errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)\n );\n }\n return next(err);\n }\n\n const token =\n name && password\n ? await getApiToken(auth, config, user as RemoteUser, password)\n : undefined;\n if (token) {\n debug('adduser: new token %o', cryptoUtils.mask(token as string, 4));\n }\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n req.remote_user = user;\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n debug('adduser: user has been created');\n return next({\n ok: `user '${req.body.name}' created`,\n token,\n });\n });\n }\n }\n );\n\n route.delete(\n USER_API_ENDPOINTS.user_token,\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n res.status(HTTP_STATUS.OK);\n next({\n ok: API_MESSAGE.LOGGED_OUT,\n });\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"user.js","names":[],"sources":["../src/user.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Response, Router } from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { getApiToken } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport {\n API_ERROR,\n API_MESSAGE,\n HEADERS,\n HTTP_STATUS,\n authUtils,\n cryptoUtils,\n errorUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { USER_API_ENDPOINTS, rateLimit } from '@verdaccio/middleware';\nimport type { Config, Logger, RemoteUser } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router, auth: Auth, config: Config, logger: Logger): void {\n route.get(\n USER_API_ENDPOINTS.get_user,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n debug('verifying user');\n\n if (\n !req.remote_user ||\n typeof req.remote_user.name !== 'string' ||\n req.remote_user.name === ''\n ) {\n debug('user not logged in');\n res.status(HTTP_STATUS.OK);\n return next({ ok: false });\n }\n\n const username = req.params.org_couchdb_user.split(':')[1];\n const message = authUtils.getAuthenticatedMessage(req.remote_user.name);\n debug('user authenticated message %o', message);\n res.status(HTTP_STATUS.OK);\n next({\n // 'npm owner' requires user info\n // TODO: we don't have the email\n name: username,\n email: '',\n ok: message,\n });\n }\n );\n\n /**\n * \n * body example\n * req.body = {\n _id: \"org.couchdb.user:jjjj\",\n name: \"jjjj\",\n password: \"jjjj\",\n type: \"user\",\n roles: [],\n date: \"2022-07-08T15:51:04.002Z\",\n }\n * \n * @export\n * @param {Router} route\n * @param {Auth} auth\n * @param {Config} config\n */\n route.put(\n USER_API_ENDPOINTS.add_user,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n const { name, password } = req.body;\n debug('login or adduser');\n const remoteName = req?.remote_user?.name;\n\n if (!validationUtils.validateUserName(req.params.org_couchdb_user, name)) {\n return next(errorUtils.getBadRequest(API_ERROR.USERNAME_MISMATCH));\n }\n\n if (typeof remoteName !== 'undefined' && typeof name === 'string' && remoteName === name) {\n debug('login: no remote user detected');\n auth.authenticate(\n name,\n password,\n async function callbackAuthenticate(err, user): Promise<void> {\n if (err) {\n logger.trace(\n { name, err },\n 'authenticating for user @{username} failed. Error: @{err.message}'\n );\n return next(\n errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.BAD_USERNAME_PASSWORD)\n );\n }\n\n const restoredRemoteUser: RemoteUser = createRemoteUser(name, user?.groups || []);\n const token = await getApiToken(auth, config, restoredRemoteUser, password);\n debug('login: new token');\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n\n const message = authUtils.getAuthenticatedMessage(req.remote_user.name);\n debug('login: created user message %o', message);\n\n return next({\n ok: message,\n token,\n });\n }\n );\n } else {\n debug('adduser: %o', name);\n if (\n validationUtils.validatePassword(password, config?.server?.passwordValidationRegex) ===\n false\n ) {\n debug('adduser: invalid password');\n\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.PASSWORD_SHORT));\n }\n\n auth.add_user(name, password, async function (err, user): Promise<void> {\n if (err) {\n if (err.status >= HTTP_STATUS.BAD_REQUEST && err.status < HTTP_STATUS.INTERNAL_ERROR) {\n debug('adduser: error on create user');\n // With npm registering is the same as logging in,\n // and npm accepts only an 409 error.\n // So, changing status code here.\n return next(\n errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)\n );\n }\n return next(err);\n }\n\n const token =\n name && password\n ? await getApiToken(auth, config, user as RemoteUser, password)\n : undefined;\n if (token) {\n debug('adduser: new token %o', cryptoUtils.mask(token as string, 4));\n }\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n req.remote_user = user;\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n debug('adduser: user has been created');\n return next({\n ok: `user '${req.body.name}' created`,\n token,\n });\n });\n }\n }\n );\n\n route.delete(\n USER_API_ENDPOINTS.user_token,\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n res.status(HTTP_STATUS.OK);\n next({\n ok: API_MESSAGE.LOGGED_OUT,\n });\n }\n );\n}\n"],"mappings":"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"}
package/build/user.mjs ADDED
@@ -0,0 +1,106 @@
1
+ import buildDebug from "debug";
2
+ import { USER_API_ENDPOINTS, rateLimit } from "@verdaccio/middleware";
3
+ import { API_ERROR, API_MESSAGE, HEADERS, HTTP_STATUS, authUtils, cryptoUtils, errorUtils, validationUtils } from "@verdaccio/core";
4
+ import { getApiToken } from "@verdaccio/auth";
5
+ import { createRemoteUser } from "@verdaccio/config";
6
+ //#region src/user.ts
7
+ var debug = buildDebug("verdaccio:api:user");
8
+ function user_default(route, auth, config, logger) {
9
+ route.get(USER_API_ENDPOINTS.get_user, rateLimit(config?.userRateLimit), function(req, res, next) {
10
+ debug("verifying user");
11
+ if (!req.remote_user || typeof req.remote_user.name !== "string" || req.remote_user.name === "") {
12
+ debug("user not logged in");
13
+ res.status(HTTP_STATUS.OK);
14
+ return next({ ok: false });
15
+ }
16
+ const username = req.params.org_couchdb_user.split(":")[1];
17
+ const message = authUtils.getAuthenticatedMessage(req.remote_user.name);
18
+ debug("user authenticated message %o", message);
19
+ res.status(HTTP_STATUS.OK);
20
+ next({
21
+ name: username,
22
+ email: "",
23
+ ok: message
24
+ });
25
+ });
26
+ /**
27
+ *
28
+ * body example
29
+ * req.body = {
30
+ _id: "org.couchdb.user:jjjj",
31
+ name: "jjjj",
32
+ password: "jjjj",
33
+ type: "user",
34
+ roles: [],
35
+ date: "2022-07-08T15:51:04.002Z",
36
+ }
37
+ *
38
+ * @export
39
+ * @param {Router} route
40
+ * @param {Auth} auth
41
+ * @param {Config} config
42
+ */
43
+ route.put(USER_API_ENDPOINTS.add_user, rateLimit(config?.userRateLimit), function(req, res, next) {
44
+ const { name, password } = req.body;
45
+ debug("login or adduser");
46
+ const remoteName = req?.remote_user?.name;
47
+ if (!validationUtils.validateUserName(req.params.org_couchdb_user, name)) return next(errorUtils.getBadRequest(API_ERROR.USERNAME_MISMATCH));
48
+ if (typeof remoteName !== "undefined" && typeof name === "string" && remoteName === name) {
49
+ debug("login: no remote user detected");
50
+ auth.authenticate(name, password, async function callbackAuthenticate(err, user) {
51
+ if (err) {
52
+ logger.trace({
53
+ name,
54
+ err
55
+ }, "authenticating for user @{username} failed. Error: @{err.message}");
56
+ return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.BAD_USERNAME_PASSWORD));
57
+ }
58
+ const token = await getApiToken(auth, config, createRemoteUser(name, user?.groups || []), password);
59
+ debug("login: new token");
60
+ if (!token) return next(errorUtils.getUnauthorized());
61
+ res.status(HTTP_STATUS.CREATED);
62
+ res.set(HEADERS.CACHE_CONTROL, "no-cache, no-store");
63
+ const message = authUtils.getAuthenticatedMessage(req.remote_user.name);
64
+ debug("login: created user message %o", message);
65
+ return next({
66
+ ok: message,
67
+ token
68
+ });
69
+ });
70
+ } else {
71
+ debug("adduser: %o", name);
72
+ if (validationUtils.validatePassword(password, config?.server?.passwordValidationRegex) === false) {
73
+ debug("adduser: invalid password");
74
+ return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.PASSWORD_SHORT));
75
+ }
76
+ auth.add_user(name, password, async function(err, user) {
77
+ if (err) {
78
+ if (err.status >= HTTP_STATUS.BAD_REQUEST && err.status < HTTP_STATUS.INTERNAL_ERROR) {
79
+ debug("adduser: error on create user");
80
+ return next(errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message));
81
+ }
82
+ return next(err);
83
+ }
84
+ const token = name && password ? await getApiToken(auth, config, user, password) : void 0;
85
+ if (token) debug("adduser: new token %o", cryptoUtils.mask(token, 4));
86
+ if (!token) return next(errorUtils.getUnauthorized());
87
+ req.remote_user = user;
88
+ res.status(HTTP_STATUS.CREATED);
89
+ res.set(HEADERS.CACHE_CONTROL, "no-cache, no-store");
90
+ debug("adduser: user has been created");
91
+ return next({
92
+ ok: `user '${req.body.name}' created`,
93
+ token
94
+ });
95
+ });
96
+ }
97
+ });
98
+ route.delete(USER_API_ENDPOINTS.user_token, function(req, res, next) {
99
+ res.status(HTTP_STATUS.OK);
100
+ next({ ok: API_MESSAGE.LOGGED_OUT });
101
+ });
102
+ }
103
+ //#endregion
104
+ export { user_default as default };
105
+
106
+ //# sourceMappingURL=user.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.mjs","names":[],"sources":["../src/user.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Response, Router } from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { getApiToken } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport {\n API_ERROR,\n API_MESSAGE,\n HEADERS,\n HTTP_STATUS,\n authUtils,\n cryptoUtils,\n errorUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { USER_API_ENDPOINTS, rateLimit } from '@verdaccio/middleware';\nimport type { Config, Logger, RemoteUser } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router, auth: Auth, config: Config, logger: Logger): void {\n route.get(\n USER_API_ENDPOINTS.get_user,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n debug('verifying user');\n\n if (\n !req.remote_user ||\n typeof req.remote_user.name !== 'string' ||\n req.remote_user.name === ''\n ) {\n debug('user not logged in');\n res.status(HTTP_STATUS.OK);\n return next({ ok: false });\n }\n\n const username = req.params.org_couchdb_user.split(':')[1];\n const message = authUtils.getAuthenticatedMessage(req.remote_user.name);\n debug('user authenticated message %o', message);\n res.status(HTTP_STATUS.OK);\n next({\n // 'npm owner' requires user info\n // TODO: we don't have the email\n name: username,\n email: '',\n ok: message,\n });\n }\n );\n\n /**\n * \n * body example\n * req.body = {\n _id: \"org.couchdb.user:jjjj\",\n name: \"jjjj\",\n password: \"jjjj\",\n type: \"user\",\n roles: [],\n date: \"2022-07-08T15:51:04.002Z\",\n }\n * \n * @export\n * @param {Router} route\n * @param {Auth} auth\n * @param {Config} config\n */\n route.put(\n USER_API_ENDPOINTS.add_user,\n rateLimit(config?.userRateLimit),\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n const { name, password } = req.body;\n debug('login or adduser');\n const remoteName = req?.remote_user?.name;\n\n if (!validationUtils.validateUserName(req.params.org_couchdb_user, name)) {\n return next(errorUtils.getBadRequest(API_ERROR.USERNAME_MISMATCH));\n }\n\n if (typeof remoteName !== 'undefined' && typeof name === 'string' && remoteName === name) {\n debug('login: no remote user detected');\n auth.authenticate(\n name,\n password,\n async function callbackAuthenticate(err, user): Promise<void> {\n if (err) {\n logger.trace(\n { name, err },\n 'authenticating for user @{username} failed. Error: @{err.message}'\n );\n return next(\n errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.BAD_USERNAME_PASSWORD)\n );\n }\n\n const restoredRemoteUser: RemoteUser = createRemoteUser(name, user?.groups || []);\n const token = await getApiToken(auth, config, restoredRemoteUser, password);\n debug('login: new token');\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n\n const message = authUtils.getAuthenticatedMessage(req.remote_user.name);\n debug('login: created user message %o', message);\n\n return next({\n ok: message,\n token,\n });\n }\n );\n } else {\n debug('adduser: %o', name);\n if (\n validationUtils.validatePassword(password, config?.server?.passwordValidationRegex) ===\n false\n ) {\n debug('adduser: invalid password');\n\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, API_ERROR.PASSWORD_SHORT));\n }\n\n auth.add_user(name, password, async function (err, user): Promise<void> {\n if (err) {\n if (err.status >= HTTP_STATUS.BAD_REQUEST && err.status < HTTP_STATUS.INTERNAL_ERROR) {\n debug('adduser: error on create user');\n // With npm registering is the same as logging in,\n // and npm accepts only an 409 error.\n // So, changing status code here.\n return next(\n errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)\n );\n }\n return next(err);\n }\n\n const token =\n name && password\n ? await getApiToken(auth, config, user as RemoteUser, password)\n : undefined;\n if (token) {\n debug('adduser: new token %o', cryptoUtils.mask(token as string, 4));\n }\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n req.remote_user = user;\n res.status(HTTP_STATUS.CREATED);\n res.set(HEADERS.CACHE_CONTROL, 'no-cache, no-store');\n debug('adduser: user has been created');\n return next({\n ok: `user '${req.body.name}' created`,\n token,\n });\n });\n }\n }\n );\n\n route.delete(\n USER_API_ENDPOINTS.user_token,\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n res.status(HTTP_STATUS.OK);\n next({\n ok: API_MESSAGE.LOGGED_OUT,\n });\n }\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { Router } from 'express';
2
- import type { Auth } from '@verdaccio/auth';
3
- import type { Storage } from '@verdaccio/store';
4
- import type { Config, Logger } from '@verdaccio/types';
1
+ import { Router } from 'express';
2
+ import { Auth } from '@verdaccio/auth';
3
+ import { Storage } from '@verdaccio/store';
4
+ import { Config, Logger } from '@verdaccio/types';
5
5
  export default function (route: Router, auth: Auth, storage: Storage, config: Config, logger: Logger): void;