@verdaccio/web 6.0.0-6-next.18 → 6.0.0-6-next.22

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 (56) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/build/api/package.d.ts +1 -1
  3. package/build/api/package.js +18 -22
  4. package/build/api/package.js.map +1 -1
  5. package/build/api/readme.d.ts +1 -1
  6. package/build/api/readme.js +9 -9
  7. package/build/api/readme.js.map +1 -1
  8. package/build/api/search.js +3 -3
  9. package/build/api/search.js.map +1 -1
  10. package/build/api/sidebar.d.ts +1 -1
  11. package/build/api/sidebar.js +17 -13
  12. package/build/api/sidebar.js.map +1 -1
  13. package/build/api/user.d.ts +1 -1
  14. package/build/api/user.js +9 -9
  15. package/build/api/user.js.map +1 -1
  16. package/build/middleware/render-web.js +9 -9
  17. package/build/middleware/render-web.js.map +1 -1
  18. package/build/middleware/security.js +5 -5
  19. package/build/middleware/security.js.map +1 -1
  20. package/build/middleware/web-api.d.ts +1 -1
  21. package/build/middleware/web-api.js +6 -6
  22. package/build/middleware/web-api.js.map +1 -1
  23. package/build/renderHTML.js +16 -16
  24. package/build/renderHTML.js.map +1 -1
  25. package/build/template.js +2 -2
  26. package/build/template.js.map +1 -1
  27. package/build/utils/web-utils.d.ts +1 -2
  28. package/build/utils/web-utils.js +5 -71
  29. package/build/utils/web-utils.js.map +1 -1
  30. package/build/web-middleware.js.map +1 -1
  31. package/package.json +20 -22
  32. package/src/api/package.ts +6 -7
  33. package/src/api/readme.ts +5 -5
  34. package/src/api/search.ts +6 -4
  35. package/src/api/sidebar.ts +7 -7
  36. package/src/api/user.ts +9 -9
  37. package/src/middleware/render-web.ts +5 -4
  38. package/src/middleware/security.ts +1 -1
  39. package/src/middleware/web-api.ts +7 -6
  40. package/src/renderHTML.ts +5 -4
  41. package/src/template.ts +3 -1
  42. package/src/utils/web-utils.ts +3 -55
  43. package/src/web-middleware.ts +1 -0
  44. package/test/api.packages.test.ts +3 -1
  45. package/test/api.readme.test.ts +2 -1
  46. package/test/api.search.test.ts +3 -2
  47. package/test/api.sidebar.test.ts +2 -1
  48. package/test/api.user.test.ts +3 -1
  49. package/test/helper.ts +7 -5
  50. package/test/render.test.ts +3 -1
  51. package/test/template.test.ts +1 -0
  52. package/test/utils.spec.ts +1 -209
  53. package/build/utils/user.d.ts +0 -5
  54. package/build/utils/user.js +0 -34
  55. package/build/utils/user.js.map +0 -1
  56. package/src/utils/user.ts +0 -37
package/CHANGELOG.md CHANGED
@@ -1,5 +1,100 @@
1
1
  # @verdaccio/web
2
2
 
3
+ ## 6.0.0-6-next.22
4
+
5
+ ### Major Changes
6
+
7
+ - 000d4374: feat: upgrade to material ui 5
8
+
9
+ ### Minor Changes
10
+
11
+ - 24b9be02: refactor: improve docker image build with strict dependencies and prod build
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [a828271d]
16
+ - Updated dependencies [24b9be02]
17
+ - Updated dependencies [e75c0a3b]
18
+ - Updated dependencies [b13a3fef]
19
+ - @verdaccio/tarball@11.0.0-6-next.11
20
+ - @verdaccio/store@6.0.0-6-next.17
21
+ - @verdaccio/utils@6.0.0-6-next.10
22
+ - @verdaccio/core@6.0.0-6-next.4
23
+ - @verdaccio/middleware@6.0.0-6-next.16
24
+ - @verdaccio/logger@6.0.0-6-next.8
25
+ - @verdaccio/auth@6.0.0-6-next.16
26
+ - @verdaccio/config@6.0.0-6-next.12
27
+ - @verdaccio/url@11.0.0-6-next.8
28
+ - @verdaccio/loaders@6.0.0-6-next.8
29
+ - @verdaccio/readme@11.0.0-6-next.4
30
+
31
+ ## 6.0.0-6-next.21
32
+
33
+ ### Minor Changes
34
+
35
+ - f86c31ed: feat: migrate web sidebar endpoint to fastify
36
+
37
+ reuse utils methods between packages
38
+
39
+ - 20c9e43e: dist tags Implementation on Fastify
40
+
41
+ ### Patch Changes
42
+
43
+ - Updated dependencies [f86c31ed]
44
+ - Updated dependencies [20c9e43e]
45
+ - @verdaccio/store@6.0.0-6-next.16
46
+ - @verdaccio/utils@6.0.0-6-next.9
47
+ - @verdaccio/auth@6.0.0-6-next.15
48
+ - @verdaccio/config@6.0.0-6-next.11
49
+ - @verdaccio/tarball@11.0.0-6-next.10
50
+ - @verdaccio/middleware@6.0.0-6-next.15
51
+ - @verdaccio/loaders@6.0.0-6-next.7
52
+
53
+ ## 6.0.0-6-next.20
54
+
55
+ ### Patch Changes
56
+
57
+ - Updated dependencies [6c1eb021]
58
+ - @verdaccio/core@6.0.0-6-next.3
59
+ - @verdaccio/logger@6.0.0-6-next.7
60
+ - @verdaccio/auth@6.0.0-6-next.14
61
+ - @verdaccio/config@6.0.0-6-next.10
62
+ - @verdaccio/tarball@11.0.0-6-next.9
63
+ - @verdaccio/url@11.0.0-6-next.7
64
+ - @verdaccio/loaders@6.0.0-6-next.7
65
+ - @verdaccio/middleware@6.0.0-6-next.14
66
+ - @verdaccio/store@6.0.0-6-next.15
67
+ - @verdaccio/utils@6.0.0-6-next.8
68
+
69
+ ## 6.0.0-6-next.19
70
+
71
+ ### Major Changes
72
+
73
+ - 794af76c: Remove Node 12 support
74
+
75
+ - We need move to the new `undici` and does not support Node.js 12
76
+
77
+ ### Minor Changes
78
+
79
+ - 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
80
+
81
+ ### Patch Changes
82
+
83
+ - Updated dependencies [794af76c]
84
+ - Updated dependencies [b702ea36]
85
+ - Updated dependencies [154b2ecd]
86
+ - @verdaccio/auth@6.0.0-6-next.13
87
+ - @verdaccio/config@6.0.0-6-next.9
88
+ - @verdaccio/core@6.0.0-6-next.2
89
+ - @verdaccio/readme@11.0.0-6-next.4
90
+ - @verdaccio/tarball@11.0.0-6-next.8
91
+ - @verdaccio/url@11.0.0-6-next.6
92
+ - @verdaccio/loaders@6.0.0-6-next.6
93
+ - @verdaccio/logger@6.0.0-6-next.6
94
+ - @verdaccio/middleware@6.0.0-6-next.13
95
+ - @verdaccio/store@6.0.0-6-next.14
96
+ - @verdaccio/utils@6.0.0-6-next.7
97
+
3
98
  ## 6.0.0-6-next.18
4
99
 
5
100
  ### Patch Changes
@@ -1,6 +1,6 @@
1
- import { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';
2
1
  import { Router } from 'express';
3
2
  import { IAuth } from '@verdaccio/auth';
3
+ import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';
4
4
  import { Storage } from '@verdaccio/store';
5
5
  import { Config, Package } from '@verdaccio/types';
6
6
  import { AuthorAvatar } from '../utils/web-utils';
@@ -3,22 +3,22 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "$RequestExtend", {
6
+ Object.defineProperty(exports, "$NextFunctionVer", {
7
7
  enumerable: true,
8
8
  get: function () {
9
- return _middleware.$RequestExtend;
9
+ return _middleware.$NextFunctionVer;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "$ResponseExtend", {
12
+ Object.defineProperty(exports, "$RequestExtend", {
13
13
  enumerable: true,
14
14
  get: function () {
15
- return _middleware.$ResponseExtend;
15
+ return _middleware.$RequestExtend;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "$NextFunctionVer", {
18
+ Object.defineProperty(exports, "$ResponseExtend", {
19
19
  enumerable: true,
20
20
  get: function () {
21
- return _middleware.$NextFunctionVer;
21
+ return _middleware.$ResponseExtend;
22
22
  }
23
23
  });
24
24
  exports.default = void 0;
@@ -27,26 +27,18 @@ var _debug = _interopRequireDefault(require("debug"));
27
27
 
28
28
  var _lodash = _interopRequireDefault(require("lodash"));
29
29
 
30
- var _utils = require("@verdaccio/utils");
30
+ var _logger = require("@verdaccio/logger");
31
31
 
32
32
  var _middleware = require("@verdaccio/middleware");
33
33
 
34
- var _logger = require("@verdaccio/logger");
35
-
36
34
  var _tarball = require("@verdaccio/tarball");
37
35
 
38
- var _user = require("../utils/user");
36
+ var _utils = require("@verdaccio/utils");
39
37
 
40
38
  var _webUtils = require("../utils/web-utils");
41
39
 
42
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
41
 
44
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
45
-
46
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
47
-
48
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
-
50
42
  // Was required by other packages
51
43
  const getOrder = (order = 'asc') => {
52
44
  return order === 'asc';
@@ -55,9 +47,9 @@ const getOrder = (order = 'asc') => {
55
47
  const debug = (0, _debug.default)('verdaccio:web:api:package');
56
48
 
57
49
  function addPackageWebApi(route, storage, auth, config) {
58
- var _ref, _config$web;
50
+ var _config$web;
59
51
 
60
- const isLoginEnabled = (_ref = (config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.login) === true) !== null && _ref !== void 0 ? _ref : true; // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
+ const isLoginEnabled = (config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.login) === true ?? true; // eslint-disable-next-line @typescript-eslint/no-unused-vars
61
53
 
62
54
  const anonymousRemoteUser = {
63
55
  name: undefined,
@@ -101,20 +93,24 @@ function addPackageWebApi(route, storage, auth, config) {
101
93
  debug('process packages %o', packagesToProcess);
102
94
 
103
95
  for (const pkg of packagesToProcess) {
104
- const pkgCopy = _objectSpread({}, pkg);
105
-
96
+ const pkgCopy = { ...pkg
97
+ };
106
98
  pkgCopy.author = (0, _utils.formatAuthor)(pkg.author);
107
99
 
108
100
  try {
109
101
  if (await checkAllow(pkg.name, req.remote_user)) {
110
102
  if (config.web) {
111
- pkgCopy.author.avatar = (0, _user.generateGravatarUrl)(pkgCopy.author.email, config.web.gravatar);
103
+ pkgCopy.author.avatar = (0, _utils.generateGravatarUrl)(pkgCopy.author.email, config.web.gravatar);
112
104
  } // convert any remote dist to a local reference
113
105
  // eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz
114
106
 
115
107
 
116
108
  if (!_lodash.default.isNil(pkgCopy.dist) && !_lodash.default.isNull(pkgCopy.dist.tarball)) {
117
- pkgCopy.dist.tarball = (0, _tarball.getLocalRegistryTarballUri)(pkgCopy.dist.tarball, pkg.name, req, config === null || config === void 0 ? void 0 : config.url_prefix);
109
+ pkgCopy.dist.tarball = (0, _tarball.getLocalRegistryTarballUri)(pkgCopy.dist.tarball, pkg.name, {
110
+ protocol: req.protocol,
111
+ headers: req.headers,
112
+ host: req.hostname
113
+ }, config === null || config === void 0 ? void 0 : config.url_prefix);
118
114
  }
119
115
 
120
116
  permissions.push(pkgCopy);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/package.ts"],"names":["getOrder","order","debug","addPackageWebApi","route","storage","auth","config","isLoginEnabled","web","login","anonymousRemoteUser","name","undefined","real_groups","groups","checkAllow","remoteUser","Promise","resolve","reject","allow_access","packageName","err","allowed","get","req","res","next","getLocalDatabase","packages","processPackages","permissions","packagesToProcess","slice","pkg","pkgCopy","author","remote_user","avatar","email","gravatar","_","isNil","dist","isNull","tarball","url_prefix","push","logger","error","sort_packages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AAMA;;AACA;;AACA;;;;;;;;;;AAE8D;AAE9D,MAAMA,QAAQ,GAAG,CAACC,KAAK,GAAG,KAAT,KAAmB;AAClC,SAAOA,KAAK,KAAK,KAAjB;AACD,CAFD;;AAMA,MAAMC,KAAK,GAAG,oBAAW,2BAAX,CAAd;;AAEA,SAASC,gBAAT,CAA0BC,KAA1B,EAAyCC,OAAzC,EAA2DC,IAA3D,EAAwEC,MAAxE,EAA8F;AAAA;;AAC5F,QAAMC,cAAc,WAAG,CAAAD,MAAM,SAAN,IAAAA,MAAM,WAAN,2BAAAA,MAAM,CAAEE,GAAR,4DAAaC,KAAb,MAAuB,IAA1B,uCAAkC,IAAtD,CAD4F,CAE5F;;AACA,QAAMC,mBAA+B,GAAG;AACtCC,IAAAA,IAAI,EAAEC,SADgC;AAEtCC,IAAAA,WAAW,EAAE,EAFyB;AAGtCC,IAAAA,MAAM,EAAE;AAH8B,GAAxC;AAMAb,EAAAA,KAAK,CAAC,6BAAD,CAAL;;AACA,QAAMc,UAAU,GAAG,CAACJ,IAAD,EAAeK,UAAf,KACjB,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAA2B;AACrClB,IAAAA,KAAK,CAAC,sBAAD,EAAyBM,cAAzB,CAAL,CADqC,CAErC;AACA;;AACA,QAAI;AACFF,MAAAA,IAAI,CAACe,YAAL,CAAkB;AAAEC,QAAAA,WAAW,EAAEV;AAAf,OAAlB,EAAyCK,UAAzC,EAAqD,CAACM,GAAD,EAAMC,OAAN,KAAwB;AAC3E,YAAID,GAAJ,EAAS;AACPJ,UAAAA,OAAO,CAAC,KAAD,CAAP;AACD;;AACDA,QAAAA,OAAO,CAACK,OAAD,CAAP;AACD,OALD;AAMD,KAPD,CAOE,OAAOD,GAAP,EAAiB;AACjBH,MAAAA,MAAM,CAACG,GAAD,CAAN;AACD;AACF,GAdD,CADF,CAV4F,CA2B5F;;;AACAnB,EAAAA,KAAK,CAACqB,GAAN,CACE,WADF,EAEE,UAAUC,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAAmF;AACjF1B,IAAAA,KAAK,CAAC,wBAAD,CAAL;AACAG,IAAAA,OAAO,CAACwB,gBAAR,CAAyB,gBAAgBN,GAAhB,EAAqBO,QAArB,EAA8C;AAAA;;AACrE,UAAIP,GAAJ,EAAS;AACP,cAAMA,GAAN;AACD;;AACD,qBAAeQ,eAAf,CAA+BD,QAAsB,GAAG,EAAxD,EAAmF;AACjF,cAAME,WAAyB,GAAG,EAAlC;AACA,cAAMC,iBAAiB,GAAGH,QAAQ,CAACI,KAAT,EAA1B;AACAhC,QAAAA,KAAK,CAAC,qBAAD,EAAwB+B,iBAAxB,CAAL;;AACA,aAAK,MAAME,GAAX,IAAkBF,iBAAlB,EAAqC;AACnC,gBAAMG,OAAO,qBAAQD,GAAR,CAAb;;AACAC,UAAAA,OAAO,CAACC,MAAR,GAAiB,yBAAaF,GAAG,CAACE,MAAjB,CAAjB;;AACA,cAAI;AACF,gBAAI,MAAMrB,UAAU,CAACmB,GAAG,CAACvB,IAAL,EAAWc,GAAG,CAACY,WAAf,CAApB,EAAiD;AAC/C,kBAAI/B,MAAM,CAACE,GAAX,EAAgB;AACd2B,gBAAAA,OAAO,CAACC,MAAR,CAAeE,MAAf,GAAwB,+BACtBH,OAAO,CAACC,MAAR,CAAeG,KADO,EAEtBjC,MAAM,CAACE,GAAP,CAAWgC,QAFW,CAAxB;AAID,eAN8C,CAO/C;AACA;;;AACA,kBAAI,CAACC,gBAAEC,KAAF,CAAQP,OAAO,CAACQ,IAAhB,CAAD,IAA0B,CAACF,gBAAEG,MAAF,CAAST,OAAO,CAACQ,IAAR,CAAaE,OAAtB,CAA/B,EAA+D;AAC7DV,gBAAAA,OAAO,CAACQ,IAAR,CAAaE,OAAb,GAAuB,yCACrBV,OAAO,CAACQ,IAAR,CAAaE,OADQ,EAErBX,GAAG,CAACvB,IAFiB,EAGrBc,GAHqB,EAIrBnB,MAJqB,aAIrBA,MAJqB,uBAIrBA,MAAM,CAAEwC,UAJa,CAAvB;AAMD;;AACDf,cAAAA,WAAW,CAACgB,IAAZ,CAAiBZ,OAAjB;AACD;AACF,WApBD,CAoBE,OAAOb,GAAP,EAAiB;AACjBrB,YAAAA,KAAK,CAAC,2BAAD,EAA8BqB,GAA9B,CAAL;;AACA0B,2BAAOA,MAAP,CAAcC,KAAd,CACE;AAAEtC,cAAAA,IAAI,EAAEuB,GAAG,CAACvB,IAAZ;AAAkBsC,cAAAA,KAAK,EAAE3B;AAAzB,aADF,EAEE,qDAFF;;AAIA,kBAAMA,GAAN;AACD;AACF;;AAED,eAAOS,WAAP;AACD;;AAED,YAAM/B,KAAK,GAAGD,QAAQ,CAACO,MAAD,aAACA,MAAD,uCAACA,MAAM,CAAEE,GAAT,iDAAC,aAAa0C,aAAd,CAAtB;AACAjD,MAAAA,KAAK,CAAC,UAAD,EAAaD,KAAb,CAAL;;AAEA,UAAI;AACF2B,QAAAA,IAAI,CAAC,0BAAW,MAAMG,eAAe,CAACD,QAAD,CAAhC,EAA4C7B,KAA5C,CAAD,CAAJ;AACD,OAFD,CAEE,OAAOiD,KAAP,EAAmB;AACnBtB,QAAAA,IAAI,CAACsB,KAAD,CAAJ;AACD;AACF,KApDD;AAqDD,GAzDH;AA2DD;;eAEc/C,gB","sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\nimport { formatAuthor } from '@verdaccio/utils';\n\nimport { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';\nimport { logger } from '@verdaccio/logger';\nimport { Router } from 'express';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport { Config, Package, RemoteUser } from '@verdaccio/types';\n\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport { generateGravatarUrl } from '../utils/user';\nimport { AuthorAvatar, sortByName } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nexport type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(route: Router, storage: Storage, auth: IAuth, config: Config): void {\n const isLoginEnabled = config?.web?.login === true ?? true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const anonymousRemoteUser: RemoteUser = {\n name: undefined,\n real_groups: [],\n groups: [],\n };\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n debug('is login disabled %o', isLoginEnabled);\n // FIXME: this logic does not work, review\n // const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUser, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n resolve(allowed);\n });\n } catch (err: any) {\n reject(err);\n }\n });\n\n // Get list of all visible package\n route.get(\n '/packages',\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n debug('hit package web api %o');\n storage.getLocalDatabase(async function (err, packages): Promise<void> {\n if (err) {\n throw err;\n }\n async function processPackages(packages: PackageExt[] = []): Promise<PackageExt[]> {\n const permissions: PackageExt[] = [];\n const packagesToProcess = packages.slice();\n debug('process packages %o', packagesToProcess);\n for (const pkg of packagesToProcess) {\n const pkgCopy = { ...pkg };\n pkgCopy.author = formatAuthor(pkg.author);\n try {\n if (await checkAllow(pkg.name, req.remote_user)) {\n if (config.web) {\n pkgCopy.author.avatar = generateGravatarUrl(\n pkgCopy.author.email,\n config.web.gravatar\n );\n }\n // convert any remote dist to a local reference\n // eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz\n if (!_.isNil(pkgCopy.dist) && !_.isNull(pkgCopy.dist.tarball)) {\n pkgCopy.dist.tarball = getLocalRegistryTarballUri(\n pkgCopy.dist.tarball,\n pkg.name,\n req,\n config?.url_prefix\n );\n }\n permissions.push(pkgCopy);\n }\n } catch (err: any) {\n debug('process packages error %o', err);\n logger.logger.error(\n { name: pkg.name, error: err },\n 'permission process for @{name} has failed: @{error}'\n );\n throw err;\n }\n }\n\n return permissions;\n }\n\n const order = getOrder(config?.web?.sort_packages);\n debug('order %o', order);\n\n try {\n next(sortByName(await processPackages(packages), order));\n } catch (error: any) {\n next(error);\n }\n });\n }\n );\n}\n\nexport default addPackageWebApi;\n"],"file":"package.js"}
1
+ {"version":3,"sources":["../../src/api/package.ts"],"names":["getOrder","order","debug","addPackageWebApi","route","storage","auth","config","isLoginEnabled","web","login","anonymousRemoteUser","name","undefined","real_groups","groups","checkAllow","remoteUser","Promise","resolve","reject","allow_access","packageName","err","allowed","get","req","res","next","getLocalDatabase","packages","processPackages","permissions","packagesToProcess","slice","pkg","pkgCopy","author","remote_user","avatar","email","gravatar","_","isNil","dist","isNull","tarball","protocol","headers","host","hostname","url_prefix","push","logger","error","sort_packages"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { logger } from '@verdaccio/logger';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport { Config, Package, RemoteUser } from '@verdaccio/types';\nimport { formatAuthor, generateGravatarUrl } from '@verdaccio/utils';\n\nimport { AuthorAvatar, sortByName } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nexport type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(route: Router, storage: Storage, auth: IAuth, config: Config): void {\n const isLoginEnabled = config?.web?.login === true ?? true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const anonymousRemoteUser: RemoteUser = {\n name: undefined,\n real_groups: [],\n groups: [],\n };\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n debug('is login disabled %o', isLoginEnabled);\n // FIXME: this logic does not work, review\n // const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUser, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n resolve(allowed);\n });\n } catch (err: any) {\n reject(err);\n }\n });\n\n // Get list of all visible package\n route.get(\n '/packages',\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n debug('hit package web api %o');\n storage.getLocalDatabase(async function (err, packages): Promise<void> {\n if (err) {\n throw err;\n }\n async function processPackages(packages: PackageExt[] = []): Promise<PackageExt[]> {\n const permissions: PackageExt[] = [];\n const packagesToProcess = packages.slice();\n debug('process packages %o', packagesToProcess);\n for (const pkg of packagesToProcess) {\n const pkgCopy = { ...pkg };\n pkgCopy.author = formatAuthor(pkg.author);\n try {\n if (await checkAllow(pkg.name, req.remote_user)) {\n if (config.web) {\n pkgCopy.author.avatar = generateGravatarUrl(\n pkgCopy.author.email,\n config.web.gravatar\n );\n }\n // convert any remote dist to a local reference\n // eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz\n if (!_.isNil(pkgCopy.dist) && !_.isNull(pkgCopy.dist.tarball)) {\n pkgCopy.dist.tarball = getLocalRegistryTarballUri(\n pkgCopy.dist.tarball,\n pkg.name,\n { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config?.url_prefix\n );\n }\n permissions.push(pkgCopy);\n }\n } catch (err: any) {\n debug('process packages error %o', err);\n logger.logger.error(\n { name: pkg.name, error: err },\n 'permission process for @{name} has failed: @{error}'\n );\n throw err;\n }\n }\n\n return permissions;\n }\n\n const order = getOrder(config?.web?.sort_packages);\n debug('order %o', order);\n\n try {\n next(sortByName(await processPackages(packages), order));\n } catch (error: any) {\n next(error);\n }\n });\n }\n );\n}\n\nexport default addPackageWebApi;\n"],"file":"package.js"}
@@ -1,6 +1,6 @@
1
- import { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';
2
1
  import { Router } from 'express';
3
2
  import { IAuth } from '@verdaccio/auth';
3
+ import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';
4
4
  import { Storage } from '@verdaccio/store';
5
5
  import { Package } from '@verdaccio/types';
6
6
  import { AuthorAvatar } from '../utils/web-utils';
@@ -3,33 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "$RequestExtend", {
6
+ Object.defineProperty(exports, "$NextFunctionVer", {
7
7
  enumerable: true,
8
8
  get: function () {
9
- return _middleware.$RequestExtend;
9
+ return _middleware.$NextFunctionVer;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "$ResponseExtend", {
12
+ Object.defineProperty(exports, "$RequestExtend", {
13
13
  enumerable: true,
14
14
  get: function () {
15
- return _middleware.$ResponseExtend;
15
+ return _middleware.$RequestExtend;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "$NextFunctionVer", {
18
+ Object.defineProperty(exports, "$ResponseExtend", {
19
19
  enumerable: true,
20
20
  get: function () {
21
- return _middleware.$NextFunctionVer;
21
+ return _middleware.$ResponseExtend;
22
22
  }
23
23
  });
24
24
  exports.default = exports.NOT_README_FOUND = void 0;
25
25
 
26
26
  var _debug = _interopRequireDefault(require("debug"));
27
27
 
28
- var _readme = _interopRequireDefault(require("@verdaccio/readme"));
28
+ var _core = require("@verdaccio/core");
29
29
 
30
30
  var _middleware = require("@verdaccio/middleware");
31
31
 
32
- var _commonsApi = require("@verdaccio/commons-api");
32
+ var _readme = _interopRequireDefault(require("@verdaccio/readme"));
33
33
 
34
34
  var _webUtils = require("../utils/web-utils");
35
35
 
@@ -58,7 +58,7 @@ function addReadmeWebApi(route, storage, auth) {
58
58
  return next(err);
59
59
  }
60
60
 
61
- res.set(_commonsApi.HEADER_TYPE.CONTENT_TYPE, _commonsApi.HEADERS.TEXT_PLAIN_UTF8);
61
+ res.set(_core.HEADER_TYPE.CONTENT_TYPE, _core.HEADERS.TEXT_PLAIN_UTF8);
62
62
 
63
63
  try {
64
64
  next((0, _webUtils.parseReadme)(info.name, info.readme));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/readme.ts"],"names":["debug","NOT_README_FOUND","addReadmeWebApi","route","storage","auth","can","get","req","res","next","packageName","params","scope","package","getPackage","name","uplinksLook","callback","err","info","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","readme"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AAMA;;;;AAMA,MAAMA,KAAK,GAAG,oBAAW,0BAAX,CAAd;AAEO,MAAMC,gBAAgB,GAAG,8BAAzB;;;AAEP,SAASC,eAAT,CAAyBC,KAAzB,EAAwCC,OAAxC,EAA0DC,IAA1D,EAA6E;AAC3EL,EAAAA,KAAK,CAAC,4BAAD,CAAL;AACA,QAAMM,GAAG,GAAG,uBAAMD,IAAN,CAAZ;AAEAF,EAAAA,KAAK,CAACI,GAAN,CACE,+CADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,UAAUE,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAAmF;AACjFV,IAAAA,KAAK,CAAC,YAAD,CAAL;AACA,UAAMW,WAAW,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GAChB,wBAASL,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWE,OAAtC,CADgB,GAEhBN,GAAG,CAACI,MAAJ,CAAWE,OAFf;AAGAd,IAAAA,KAAK,CAAC,gBAAD,EAAmBW,WAAnB,CAAL,CALiF,CAOjF;;AACAP,IAAAA,OAAO,CAACW,UAAR,CAAmB;AACjBC,MAAAA,IAAI,EAAEL,WADW;AAEjBM,MAAAA,WAAW,EAAE,IAFI;AAGjBT,MAAAA,GAHiB;AAIjBU,MAAAA,QAAQ,EAAE,UAAUC,GAAV,EAAeC,IAAf,EAA2B;AACnCpB,QAAAA,KAAK,CAAC,eAAD,EAAkBoB,IAAlB,aAAkBA,IAAlB,uBAAkBA,IAAI,CAAEJ,IAAxB,CAAL;;AACA,YAAIG,GAAJ,EAAS;AACP,iBAAOT,IAAI,CAACS,GAAD,CAAX;AACD;;AAEDV,QAAAA,GAAG,CAACY,GAAJ,CAAQC,wBAAYC,YAApB,EAAkCC,oBAAQC,eAA1C;;AACA,YAAI;AACFf,UAAAA,IAAI,CAAC,2BAAYU,IAAI,CAACJ,IAAjB,EAAuBI,IAAI,CAACM,MAA5B,CAAD,CAAJ;AACD,SAFD,CAEE,MAAM;AACNhB,UAAAA,IAAI,CAAC,qBAAeT,gBAAf,CAAD,CAAJ;AACD;AACF;AAhBgB,KAAnB;AAkBD,GA7BH;AA+BD;;eAEcC,e","sourcesContent":["import buildDebug from 'debug';\nimport sanitizyReadme from '@verdaccio/readme';\n\nimport { allow, $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';\nimport { HEADER_TYPE, HEADERS } from '@verdaccio/commons-api';\nimport { Router } from 'express';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport { Package } from '@verdaccio/types';\n\nimport { addScope, AuthorAvatar, parseReadme } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nfunction addReadmeWebApi(route: Router, storage: Storage, auth: IAuth): void {\n debug('initialized readme web api');\n const can = allow(auth);\n\n route.get(\n '/package/readme/(@:scope/)?:package/:version?',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n debug('readme hit');\n const packageName = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n debug('readme name %o', packageName);\n\n // @ts-ignore\n storage.getPackage({\n name: packageName,\n uplinksLook: true,\n req,\n callback: function (err, info): void {\n debug('readme plg %o', info?.name);\n if (err) {\n return next(err);\n }\n\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n try {\n next(parseReadme(info.name, info.readme));\n } catch {\n next(sanitizyReadme(NOT_README_FOUND));\n }\n },\n });\n }\n );\n}\n\nexport default addReadmeWebApi;\n"],"file":"readme.js"}
1
+ {"version":3,"sources":["../../src/api/readme.ts"],"names":["debug","NOT_README_FOUND","addReadmeWebApi","route","storage","auth","can","get","req","res","next","packageName","params","scope","package","getPackage","name","uplinksLook","callback","err","info","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","readme"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAIA;;AACA;;AACA;;AAIA;;;;AAMA,MAAMA,KAAK,GAAG,oBAAW,0BAAX,CAAd;AAEO,MAAMC,gBAAgB,GAAG,8BAAzB;;;AAEP,SAASC,eAAT,CAAyBC,KAAzB,EAAwCC,OAAxC,EAA0DC,IAA1D,EAA6E;AAC3EL,EAAAA,KAAK,CAAC,4BAAD,CAAL;AACA,QAAMM,GAAG,GAAG,uBAAMD,IAAN,CAAZ;AAEAF,EAAAA,KAAK,CAACI,GAAN,CACE,+CADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,UAAUE,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAAmF;AACjFV,IAAAA,KAAK,CAAC,YAAD,CAAL;AACA,UAAMW,WAAW,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GAChB,wBAASL,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWE,OAAtC,CADgB,GAEhBN,GAAG,CAACI,MAAJ,CAAWE,OAFf;AAGAd,IAAAA,KAAK,CAAC,gBAAD,EAAmBW,WAAnB,CAAL,CALiF,CAOjF;;AACAP,IAAAA,OAAO,CAACW,UAAR,CAAmB;AACjBC,MAAAA,IAAI,EAAEL,WADW;AAEjBM,MAAAA,WAAW,EAAE,IAFI;AAGjBT,MAAAA,GAHiB;AAIjBU,MAAAA,QAAQ,EAAE,UAAUC,GAAV,EAAeC,IAAf,EAA2B;AACnCpB,QAAAA,KAAK,CAAC,eAAD,EAAkBoB,IAAlB,aAAkBA,IAAlB,uBAAkBA,IAAI,CAAEJ,IAAxB,CAAL;;AACA,YAAIG,GAAJ,EAAS;AACP,iBAAOT,IAAI,CAACS,GAAD,CAAX;AACD;;AAEDV,QAAAA,GAAG,CAACY,GAAJ,CAAQC,kBAAYC,YAApB,EAAkCC,cAAQC,eAA1C;;AACA,YAAI;AACFf,UAAAA,IAAI,CAAC,2BAAYU,IAAI,CAACJ,IAAjB,EAAuBI,IAAI,CAACM,MAA5B,CAAD,CAAJ;AACD,SAFD,CAEE,MAAM;AACNhB,UAAAA,IAAI,CAAC,qBAAeT,gBAAf,CAAD,CAAJ;AACD;AACF;AAhBgB,KAAnB;AAkBD,GA7BH;AA+BD;;eAEcC,e","sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport sanitizyReadme from '@verdaccio/readme';\nimport { Storage } from '@verdaccio/store';\nimport { Package } from '@verdaccio/types';\n\nimport { AuthorAvatar, addScope, parseReadme } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nfunction addReadmeWebApi(route: Router, storage: Storage, auth: IAuth): void {\n debug('initialized readme web api');\n const can = allow(auth);\n\n route.get(\n '/package/readme/(@:scope/)?:package/:version?',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n debug('readme hit');\n const packageName = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n debug('readme name %o', packageName);\n\n // @ts-ignore\n storage.getPackage({\n name: packageName,\n uplinksLook: true,\n req,\n callback: function (err, info): void {\n debug('readme plg %o', info?.name);\n if (err) {\n return next(err);\n }\n\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n try {\n next(parseReadme(info.name, info.readme));\n } catch {\n next(sanitizyReadme(NOT_README_FOUND));\n }\n },\n });\n }\n );\n}\n\nexport default addReadmeWebApi;\n"],"file":"readme.js"}
@@ -7,9 +7,9 @@ exports.default = void 0;
7
7
 
8
8
  var _debug = _interopRequireDefault(require("debug"));
9
9
 
10
- var _store = require("@verdaccio/store");
10
+ var _core = require("@verdaccio/core");
11
11
 
12
- var _commonsApi = require("@verdaccio/commons-api");
12
+ var _store = require("@verdaccio/store");
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
@@ -42,7 +42,7 @@ function addSearchWebApi(route, storage, auth) {
42
42
  }
43
43
 
44
44
  debug('access succeed');
45
- resolve(pkg.versions[pkg[_commonsApi.DIST_TAGS].latest]);
45
+ resolve(pkg.versions[pkg[_core.DIST_TAGS].latest]);
46
46
  });
47
47
  } else {
48
48
  reject(err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/search.ts"],"names":["debug","addSearchWebApi","route","storage","auth","getPackageInfo","name","remoteUser","Promise","resolve","reject","getPackage","uplinksLook","callback","err","pkg","message","allow_access","packageName","allowed","versions","DIST_TAGS","latest","get","req","res","next","results","SearchInstance","query","params","anything","length","packages","result","ref","remote_user","push"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { SearchInstance } from '@verdaccio/store';\nimport { DIST_TAGS } from '@verdaccio/commons-api';\nimport { Router } from 'express';\nimport { Package } from '@verdaccio/types';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport { $ResponseExtend, $RequestExtend, $NextFunctionVer } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:search');\n\nfunction addSearchWebApi(route: Router, storage: Storage, auth: IAuth): void {\n const getPackageInfo = async function (name, remoteUser): Promise<any> {\n return new Promise((resolve, reject) => {\n debug('searching for %o', name);\n try {\n // @ts-ignore\n storage.getPackage({\n name,\n uplinksLook: false,\n callback: (err, pkg: Package): void => {\n debug('callback get package err %o', err?.message);\n if (!err && pkg) {\n debug('valid package %o', pkg?.name);\n auth.allow_access(\n { packageName: pkg.name },\n remoteUser,\n function (err, allowed): void {\n debug('is allowed %o', allowed);\n if (err || !allowed) {\n debug('deny access');\n reject(err);\n return;\n }\n debug('access succeed');\n resolve(pkg.versions[pkg[DIST_TAGS].latest]);\n }\n );\n } else {\n reject(err);\n }\n },\n });\n } catch (err: any) {\n reject(err);\n }\n });\n };\n\n route.get(\n '/search/:anything',\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const results = SearchInstance.query(req.params.anything);\n debug('search results %o', results);\n if (results.length > 0) {\n let packages: Package[] = [];\n for (let result of results) {\n try {\n const pkg = await getPackageInfo(result.ref, req.remote_user);\n debug('package found %o', result.ref);\n packages.push(pkg);\n } catch (err: any) {\n debug('search for %o failed err %o', result.ref, err?.message);\n }\n }\n next(packages);\n } else {\n next([]);\n }\n }\n );\n}\n\nexport default addSearchWebApi;\n"],"file":"search.js"}
1
+ {"version":3,"sources":["../../src/api/search.ts"],"names":["debug","addSearchWebApi","route","storage","auth","getPackageInfo","name","remoteUser","Promise","resolve","reject","getPackage","uplinksLook","callback","err","pkg","message","allow_access","packageName","allowed","versions","DIST_TAGS","latest","get","req","res","next","results","SearchInstance","query","params","anything","length","packages","result","ref","remote_user","push"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { DIST_TAGS } from '@verdaccio/core';\nimport { SearchInstance } from '@verdaccio/store';\nimport { Storage } from '@verdaccio/store';\nimport { Package } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:search');\n\nfunction addSearchWebApi(route: Router, storage: Storage, auth: IAuth): void {\n const getPackageInfo = async function (name, remoteUser): Promise<any> {\n return new Promise((resolve, reject) => {\n debug('searching for %o', name);\n try {\n // @ts-ignore\n storage.getPackage({\n name,\n uplinksLook: false,\n callback: (err, pkg: Package): void => {\n debug('callback get package err %o', err?.message);\n if (!err && pkg) {\n debug('valid package %o', pkg?.name);\n auth.allow_access(\n { packageName: pkg.name },\n remoteUser,\n function (err, allowed): void {\n debug('is allowed %o', allowed);\n if (err || !allowed) {\n debug('deny access');\n reject(err);\n return;\n }\n debug('access succeed');\n resolve(pkg.versions[pkg[DIST_TAGS].latest]);\n }\n );\n } else {\n reject(err);\n }\n },\n });\n } catch (err: any) {\n reject(err);\n }\n });\n };\n\n route.get(\n '/search/:anything',\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const results = SearchInstance.query(req.params.anything);\n debug('search results %o', results);\n if (results.length > 0) {\n let packages: Package[] = [];\n for (let result of results) {\n try {\n const pkg = await getPackageInfo(result.ref, req.remote_user);\n debug('package found %o', result.ref);\n packages.push(pkg);\n } catch (err: any) {\n debug('search for %o failed err %o', result.ref, err?.message);\n }\n }\n next(packages);\n } else {\n next([]);\n }\n }\n );\n}\n\nexport default addSearchWebApi;\n"],"file":"search.js"}
@@ -1,6 +1,6 @@
1
- import { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';
2
1
  import { Router } from 'express';
3
2
  import { IAuth } from '@verdaccio/auth';
3
+ import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';
4
4
  import { Storage } from '@verdaccio/store';
5
5
  import { Config, Package, Version } from '@verdaccio/types';
6
6
  import { AuthorAvatar } from '../utils/web-utils';
@@ -3,22 +3,22 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "$RequestExtend", {
6
+ Object.defineProperty(exports, "$NextFunctionVer", {
7
7
  enumerable: true,
8
8
  get: function () {
9
- return _middleware.$RequestExtend;
9
+ return _middleware.$NextFunctionVer;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "$ResponseExtend", {
12
+ Object.defineProperty(exports, "$RequestExtend", {
13
13
  enumerable: true,
14
14
  get: function () {
15
- return _middleware.$ResponseExtend;
15
+ return _middleware.$RequestExtend;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "$NextFunctionVer", {
18
+ Object.defineProperty(exports, "$ResponseExtend", {
19
19
  enumerable: true,
20
20
  get: function () {
21
- return _middleware.$NextFunctionVer;
21
+ return _middleware.$ResponseExtend;
22
22
  }
23
23
  });
24
24
  exports.default = void 0;
@@ -27,14 +27,14 @@ var _debug = _interopRequireDefault(require("debug"));
27
27
 
28
28
  var _lodash = _interopRequireDefault(require("lodash"));
29
29
 
30
- var _utils = require("@verdaccio/utils");
31
-
32
- var _commonsApi = require("@verdaccio/commons-api");
30
+ var _core = require("@verdaccio/core");
33
31
 
34
32
  var _middleware = require("@verdaccio/middleware");
35
33
 
36
34
  var _tarball = require("@verdaccio/tarball");
37
35
 
36
+ var _utils = require("@verdaccio/utils");
37
+
38
38
  var _webUtils = require("../utils/web-utils");
39
39
 
40
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -60,21 +60,25 @@ function addSidebarWebApi(route, config, storage, auth) {
60
60
 
61
61
  let sideBarInfo = _lodash.default.clone(info);
62
62
 
63
- sideBarInfo.versions = (0, _tarball.convertDistRemoteToLocalTarballUrls)(info, req, config.url_prefix).versions;
63
+ sideBarInfo.versions = (0, _tarball.convertDistRemoteToLocalTarballUrls)(info, {
64
+ protocol: req.protocol,
65
+ headers: req.headers,
66
+ host: req.hostname
67
+ }, config.url_prefix).versions;
64
68
 
65
69
  if (typeof v === 'string' && (0, _utils.isVersionValid)(info, v)) {
66
70
  sideBarInfo.latest = sideBarInfo.versions[v];
67
71
  sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
68
72
  } else {
69
- sideBarInfo.latest = sideBarInfo.versions[info[_commonsApi.DIST_TAGS].latest];
73
+ sideBarInfo.latest = sideBarInfo.versions[info[_core.DIST_TAGS].latest];
70
74
  sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
71
75
  }
72
76
 
73
77
  sideBarInfo = (0, _webUtils.deleteProperties)(['readme', '_attachments', '_rev', 'name'], sideBarInfo);
74
- const authorAvatar = config.web ? (0, _webUtils.addGravatarSupport)(sideBarInfo, config.web.gravatar) : (0, _webUtils.addGravatarSupport)(sideBarInfo);
78
+ const authorAvatar = config.web ? (0, _utils.addGravatarSupport)(sideBarInfo, config.web.gravatar) : (0, _utils.addGravatarSupport)(sideBarInfo);
75
79
  next(authorAvatar);
76
80
  } else {
77
- res.status(_commonsApi.HTTP_STATUS.NOT_FOUND);
81
+ res.status(_core.HTTP_STATUS.NOT_FOUND);
78
82
  res.end();
79
83
  }
80
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/sidebar.ts"],"names":["debug","addSidebarWebApi","route","config","storage","auth","can","get","req","res","next","packageName","params","scope","package","getPackage","name","uplinksLook","keepUpLinkData","callback","err","info","_","isNil","v","query","sideBarInfo","clone","versions","url_prefix","latest","author","DIST_TAGS","authorAvatar","web","gravatar","status","HTTP_STATUS","NOT_FOUND","end"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAOA;;AACA;;;;AAOA,MAAMA,KAAK,GAAG,oBAAW,2BAAX,CAAd;;AAEA,SAASC,gBAAT,CAA0BC,KAA1B,EAAyCC,MAAzC,EAAyDC,OAAzD,EAA2EC,IAA3E,EAA8F;AAC5FL,EAAAA,KAAK,CAAC,6BAAD,CAAL;AACA,QAAMM,GAAG,GAAG,uBAAMD,IAAN,CAAZ,CAF4F,CAG5F;;AACAH,EAAAA,KAAK,CAACK,GAAN,CACE,8BADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,UAAUE,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAAmF;AACjF,UAAMC,WAAmB,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GACxB,wBAASL,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWE,OAAtC,CADwB,GAExBN,GAAG,CAACI,MAAJ,CAAWE,OAFf;AAIAV,IAAAA,OAAO,CAACW,UAAR,CAAmB;AACjBC,MAAAA,IAAI,EAAEL,WADW;AAEjBM,MAAAA,WAAW,EAAE,IAFI;AAGjBC,MAAAA,cAAc,EAAE,IAHC;AAIjBV,MAAAA,GAJiB;AAKjBW,MAAAA,QAAQ,EAAE,UAAUC,GAAV,EAAsBC,IAAtB,EAAmD;AAC3D,YAAIC,gBAAEC,KAAF,CAAQH,GAAR,CAAJ,EAAkB;AAChB,gBAAM;AAAEI,YAAAA;AAAF,cAAQhB,GAAG,CAACiB,KAAlB;;AACA,cAAIC,WAAW,GAAGJ,gBAAEK,KAAF,CAAQN,IAAR,CAAlB;;AACAK,UAAAA,WAAW,CAACE,QAAZ,GAAuB,kDACrBP,IADqB,EAErBb,GAFqB,EAGrBL,MAAM,CAAC0B,UAHc,EAIrBD,QAJF;;AAKA,cAAI,OAAOJ,CAAP,KAAa,QAAb,IAAyB,2BAAeH,IAAf,EAAqBG,CAArB,CAA7B,EAAsD;AACpDE,YAAAA,WAAW,CAACI,MAAZ,GAAqBJ,WAAW,CAACE,QAAZ,CAAqBJ,CAArB,CAArB;AACAE,YAAAA,WAAW,CAACI,MAAZ,CAAmBC,MAAnB,GAA4B,yBAAaL,WAAW,CAACI,MAAZ,CAAmBC,MAAhC,CAA5B;AACD,WAHD,MAGO;AACLL,YAAAA,WAAW,CAACI,MAAZ,GAAqBJ,WAAW,CAACE,QAAZ,CAAqBP,IAAI,CAACW,qBAAD,CAAJ,CAAgBF,MAArC,CAArB;AACAJ,YAAAA,WAAW,CAACI,MAAZ,CAAmBC,MAAnB,GAA4B,yBAAaL,WAAW,CAACI,MAAZ,CAAmBC,MAAhC,CAA5B;AACD;;AACDL,UAAAA,WAAW,GAAG,gCAAiB,CAAC,QAAD,EAAW,cAAX,EAA2B,MAA3B,EAAmC,MAAnC,CAAjB,EAA6DA,WAA7D,CAAd;AACA,gBAAMO,YAAY,GAAG9B,MAAM,CAAC+B,GAAP,GACjB,kCAAmBR,WAAnB,EAAgCvB,MAAM,CAAC+B,GAAP,CAAWC,QAA3C,CADiB,GAEjB,kCAAmBT,WAAnB,CAFJ;AAGAhB,UAAAA,IAAI,CAACuB,YAAD,CAAJ;AACD,SApBD,MAoBO;AACLxB,UAAAA,GAAG,CAAC2B,MAAJ,CAAWC,wBAAYC,SAAvB;AACA7B,UAAAA,GAAG,CAAC8B,GAAJ;AACD;AACF;AA9BgB,KAAnB;AAgCD,GAxCH;AA0CD;;eAEctC,gB","sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\nimport { isVersionValid, formatAuthor } from '@verdaccio/utils';\nimport { HTTP_STATUS, DIST_TAGS } from '@verdaccio/commons-api';\nimport { allow, $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';\n\nimport { Router } from 'express';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport { Config, Package, Version } from '@verdaccio/types';\n\nimport { convertDistRemoteToLocalTarballUrls } from '@verdaccio/tarball';\nimport { addGravatarSupport, addScope, AuthorAvatar, deleteProperties } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };\n\nexport type $SidebarPackage = Package & { latest: Version };\nconst debug = buildDebug('verdaccio:web:api:sidebar');\n\nfunction addSidebarWebApi(route: Router, config: Config, storage: Storage, auth: IAuth): void {\n debug('initialized sidebar web api');\n const can = allow(auth);\n // Get package readme\n route.get(\n '/sidebar/(@:scope/)?:package',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const packageName: string = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n\n storage.getPackage({\n name: packageName,\n uplinksLook: true,\n keepUpLinkData: true,\n req,\n callback: function (err: Error, info: $SidebarPackage): void {\n if (_.isNil(err)) {\n const { v } = req.query;\n let sideBarInfo = _.clone(info);\n sideBarInfo.versions = convertDistRemoteToLocalTarballUrls(\n info,\n req,\n config.url_prefix\n ).versions;\n if (typeof v === 'string' && isVersionValid(info, v)) {\n sideBarInfo.latest = sideBarInfo.versions[v];\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n } else {\n sideBarInfo.latest = sideBarInfo.versions[info[DIST_TAGS].latest];\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n }\n sideBarInfo = deleteProperties(['readme', '_attachments', '_rev', 'name'], sideBarInfo);\n const authorAvatar = config.web\n ? addGravatarSupport(sideBarInfo, config.web.gravatar)\n : addGravatarSupport(sideBarInfo);\n next(authorAvatar);\n } else {\n res.status(HTTP_STATUS.NOT_FOUND);\n res.end();\n }\n },\n });\n }\n );\n}\n\nexport default addSidebarWebApi;\n"],"file":"sidebar.js"}
1
+ {"version":3,"sources":["../../src/api/sidebar.ts"],"names":["debug","addSidebarWebApi","route","config","storage","auth","can","get","req","res","next","packageName","params","scope","package","getPackage","name","uplinksLook","keepUpLinkData","callback","err","info","_","isNil","v","query","sideBarInfo","clone","versions","protocol","headers","host","hostname","url_prefix","latest","author","DIST_TAGS","authorAvatar","web","gravatar","status","HTTP_STATUS","NOT_FOUND","end"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AAGA;;AACA;;AAEA;;AAEA;;AAEA;;;;AAOA,MAAMA,KAAK,GAAG,oBAAW,2BAAX,CAAd;;AAEA,SAASC,gBAAT,CAA0BC,KAA1B,EAAyCC,MAAzC,EAAyDC,OAAzD,EAA2EC,IAA3E,EAA8F;AAC5FL,EAAAA,KAAK,CAAC,6BAAD,CAAL;AACA,QAAMM,GAAG,GAAG,uBAAMD,IAAN,CAAZ,CAF4F,CAG5F;;AACAH,EAAAA,KAAK,CAACK,GAAN,CACE,8BADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,UAAUE,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAAmF;AACjF,UAAMC,WAAmB,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GACxB,wBAASL,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWE,OAAtC,CADwB,GAExBN,GAAG,CAACI,MAAJ,CAAWE,OAFf;AAIAV,IAAAA,OAAO,CAACW,UAAR,CAAmB;AACjBC,MAAAA,IAAI,EAAEL,WADW;AAEjBM,MAAAA,WAAW,EAAE,IAFI;AAGjBC,MAAAA,cAAc,EAAE,IAHC;AAIjBV,MAAAA,GAJiB;AAKjBW,MAAAA,QAAQ,EAAE,UAAUC,GAAV,EAAsBC,IAAtB,EAAmD;AAC3D,YAAIC,gBAAEC,KAAF,CAAQH,GAAR,CAAJ,EAAkB;AAChB,gBAAM;AAAEI,YAAAA;AAAF,cAAQhB,GAAG,CAACiB,KAAlB;;AACA,cAAIC,WAAW,GAAGJ,gBAAEK,KAAF,CAAQN,IAAR,CAAlB;;AACAK,UAAAA,WAAW,CAACE,QAAZ,GAAuB,kDACrBP,IADqB,EAErB;AAAEQ,YAAAA,QAAQ,EAAErB,GAAG,CAACqB,QAAhB;AAA0BC,YAAAA,OAAO,EAAEtB,GAAG,CAACsB,OAAvC;AAAuDC,YAAAA,IAAI,EAAEvB,GAAG,CAACwB;AAAjE,WAFqB,EAGrB7B,MAAM,CAAC8B,UAHc,EAIrBL,QAJF;;AAKA,cAAI,OAAOJ,CAAP,KAAa,QAAb,IAAyB,2BAAeH,IAAf,EAAqBG,CAArB,CAA7B,EAAsD;AACpDE,YAAAA,WAAW,CAACQ,MAAZ,GAAqBR,WAAW,CAACE,QAAZ,CAAqBJ,CAArB,CAArB;AACAE,YAAAA,WAAW,CAACQ,MAAZ,CAAmBC,MAAnB,GAA4B,yBAAaT,WAAW,CAACQ,MAAZ,CAAmBC,MAAhC,CAA5B;AACD,WAHD,MAGO;AACLT,YAAAA,WAAW,CAACQ,MAAZ,GAAqBR,WAAW,CAACE,QAAZ,CAAqBP,IAAI,CAACe,eAAD,CAAJ,CAAgBF,MAArC,CAArB;AACAR,YAAAA,WAAW,CAACQ,MAAZ,CAAmBC,MAAnB,GAA4B,yBAAaT,WAAW,CAACQ,MAAZ,CAAmBC,MAAhC,CAA5B;AACD;;AACDT,UAAAA,WAAW,GAAG,gCAAiB,CAAC,QAAD,EAAW,cAAX,EAA2B,MAA3B,EAAmC,MAAnC,CAAjB,EAA6DA,WAA7D,CAAd;AACA,gBAAMW,YAAY,GAAGlC,MAAM,CAACmC,GAAP,GACjB,+BAAmBZ,WAAnB,EAAgCvB,MAAM,CAACmC,GAAP,CAAWC,QAA3C,CADiB,GAEjB,+BAAmBb,WAAnB,CAFJ;AAGAhB,UAAAA,IAAI,CAAC2B,YAAD,CAAJ;AACD,SApBD,MAoBO;AACL5B,UAAAA,GAAG,CAAC+B,MAAJ,CAAWC,kBAAYC,SAAvB;AACAjC,UAAAA,GAAG,CAACkC,GAAJ;AACD;AACF;AA9BgB,KAAnB;AAgCD,GAxCH;AA0CD;;eAEc1C,gB","sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { DIST_TAGS, HTTP_STATUS } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { convertDistRemoteToLocalTarballUrls } from '@verdaccio/tarball';\nimport { Config, Package, Version } from '@verdaccio/types';\nimport { addGravatarSupport, formatAuthor, isVersionValid } from '@verdaccio/utils';\n\nimport { AuthorAvatar, addScope, deleteProperties } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };\n\nexport type $SidebarPackage = Package & { latest: Version };\nconst debug = buildDebug('verdaccio:web:api:sidebar');\n\nfunction addSidebarWebApi(route: Router, config: Config, storage: Storage, auth: IAuth): void {\n debug('initialized sidebar web api');\n const can = allow(auth);\n // Get package readme\n route.get(\n '/sidebar/(@:scope/)?:package',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const packageName: string = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n\n storage.getPackage({\n name: packageName,\n uplinksLook: true,\n keepUpLinkData: true,\n req,\n callback: function (err: Error, info: $SidebarPackage): void {\n if (_.isNil(err)) {\n const { v } = req.query;\n let sideBarInfo = _.clone(info);\n sideBarInfo.versions = convertDistRemoteToLocalTarballUrls(\n info,\n { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config.url_prefix\n ).versions;\n if (typeof v === 'string' && isVersionValid(info, v)) {\n sideBarInfo.latest = sideBarInfo.versions[v];\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n } else {\n sideBarInfo.latest = sideBarInfo.versions[info[DIST_TAGS].latest];\n sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);\n }\n sideBarInfo = deleteProperties(['readme', '_attachments', '_rev', 'name'], sideBarInfo);\n const authorAvatar = config.web\n ? addGravatarSupport(sideBarInfo, config.web.gravatar)\n : addGravatarSupport(sideBarInfo);\n next(authorAvatar);\n } else {\n res.status(HTTP_STATUS.NOT_FOUND);\n res.end();\n }\n },\n });\n }\n );\n}\n\nexport default addSidebarWebApi;\n"],"file":"sidebar.js"}
@@ -1,5 +1,5 @@
1
1
  import { Router } from 'express';
2
- import { Config } from '@verdaccio/types';
3
2
  import { IAuth } from '@verdaccio/auth';
3
+ import { Config } from '@verdaccio/types';
4
4
  declare function addUserAuthApi(route: Router, auth: IAuth, config: Config): void;
5
5
  export default addUserAuthApi;
package/build/api/user.js CHANGED
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
-
10
8
  var _debug = _interopRequireDefault(require("debug"));
11
9
 
12
- var _commonsApi = require("@verdaccio/commons-api");
10
+ var _lodash = _interopRequireDefault(require("lodash"));
11
+
12
+ var _core = require("@verdaccio/core");
13
13
 
14
14
  var _utils = require("@verdaccio/utils");
15
15
 
@@ -28,9 +28,9 @@ function addUserAuthApi(route, auth, config) {
28
28
  debug('authenticate %o', username);
29
29
  auth.authenticate(username, password, async (err, user) => {
30
30
  if (err) {
31
- const errorCode = err.message ? _commonsApi.HTTP_STATUS.UNAUTHORIZED : _commonsApi.HTTP_STATUS.INTERNAL_ERROR;
31
+ const errorCode = err.message ? _core.HTTP_STATUS.UNAUTHORIZED : _core.HTTP_STATUS.INTERNAL_ERROR;
32
32
  debug('error authenticate %o', errorCode);
33
- next(_utils.ErrorCode.getCode(errorCode, err.message));
33
+ next(_core.errorUtils.getCode(errorCode, err.message));
34
34
  } else {
35
35
  req.remote_user = user;
36
36
  const jWTSignOptions = config.security.web.sign;
@@ -45,10 +45,10 @@ function addUserAuthApi(route, auth, config) {
45
45
  if ((config === null || config === void 0 ? void 0 : (_config$flags = config.flags) === null || _config$flags === void 0 ? void 0 : _config$flags.changePassword) === true) {
46
46
  route.put('/reset_password', function (req, res, next) {
47
47
  if (_lodash.default.isNil(req.remote_user.name)) {
48
- res.status(_commonsApi.HTTP_STATUS.UNAUTHORIZED);
48
+ res.status(_core.HTTP_STATUS.UNAUTHORIZED);
49
49
  return next({
50
50
  // FUTURE: update to a more meaningful message
51
- message: _commonsApi.API_ERROR.MUST_BE_LOGGED
51
+ message: _core.API_ERROR.MUST_BE_LOGGED
52
52
  });
53
53
  }
54
54
 
@@ -66,11 +66,11 @@ function addUserAuthApi(route, auth, config) {
66
66
  ok: true
67
67
  });
68
68
  } else {
69
- return next(_utils.ErrorCode.getInternalError(_commonsApi.API_ERROR.INTERNAL_SERVER_ERROR));
69
+ return next(_core.errorUtils.getInternalError(_core.API_ERROR.INTERNAL_SERVER_ERROR));
70
70
  }
71
71
  });
72
72
  } else {
73
- return next(_utils.ErrorCode.getCode(_commonsApi.HTTP_STATUS.BAD_REQUEST, _commonsApi.APP_ERROR.PASSWORD_VALIDATION));
73
+ return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_REQUEST, _core.APP_ERROR.PASSWORD_VALIDATION));
74
74
  }
75
75
  });
76
76
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/user.ts"],"names":["debug","addUserAuthApi","route","auth","config","post","req","res","next","username","password","body","authenticate","err","user","errorCode","message","HTTP_STATUS","UNAUTHORIZED","INTERNAL_ERROR","ErrorCode","getCode","remote_user","jWTSignOptions","security","web","sign","token","jwtEncrypt","name","flags","changePassword","put","_","isNil","status","API_ERROR","MUST_BE_LOGGED","new","old","isUpdated","ok","getInternalError","INTERNAL_SERVER_ERROR","BAD_REQUEST","APP_ERROR","PASSWORD_VALIDATION"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport buildDebug from 'debug';\nimport { Router, Response, Request } from 'express';\n\nimport { Config, RemoteUser, JWTSignOptions } from '@verdaccio/types';\n\nimport { API_ERROR, APP_ERROR, HTTP_STATUS } from '@verdaccio/commons-api';\nimport { IAuth } from '@verdaccio/auth';\nimport { validatePassword, ErrorCode } from '@verdaccio/utils';\nimport { $NextFunctionVer } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:user');\n\nfunction addUserAuthApi(route: Router, auth: IAuth, config: Config): void {\n route.post('/login', function (req: Request, res: Response, next: $NextFunctionVer): void {\n const { username, password } = req.body;\n debug('authenticate %o', username);\n auth.authenticate(username, password, async (err, user: RemoteUser): Promise<void> => {\n if (err) {\n const errorCode = err.message ? HTTP_STATUS.UNAUTHORIZED : HTTP_STATUS.INTERNAL_ERROR;\n debug('error authenticate %o', errorCode);\n next(ErrorCode.getCode(errorCode, err.message));\n } else {\n req.remote_user = user;\n const jWTSignOptions: JWTSignOptions = config.security.web.sign;\n\n next({\n token: await auth.jwtEncrypt(user, jWTSignOptions),\n username: req.remote_user.name,\n });\n }\n });\n });\n\n if (config?.flags?.changePassword === true) {\n route.put(\n '/reset_password',\n function (req: Request, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name)) {\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n // FUTURE: update to a more meaningful message\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n\n const { password } = req.body;\n const { name } = req.remote_user;\n\n if (validatePassword(password.new) === false) {\n auth.changePassword(\n name as string,\n password.old,\n password.new,\n (err, isUpdated): void => {\n if (_.isNil(err) && isUpdated) {\n next({\n ok: true,\n });\n } else {\n return next(ErrorCode.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));\n }\n }\n );\n } else {\n return next(ErrorCode.getCode(HTTP_STATUS.BAD_REQUEST, APP_ERROR.PASSWORD_VALIDATION));\n }\n }\n );\n }\n}\n\nexport default addUserAuthApi;\n"],"file":"user.js"}
1
+ {"version":3,"sources":["../../src/api/user.ts"],"names":["debug","addUserAuthApi","route","auth","config","post","req","res","next","username","password","body","authenticate","err","user","errorCode","message","HTTP_STATUS","UNAUTHORIZED","INTERNAL_ERROR","errorUtils","getCode","remote_user","jWTSignOptions","security","web","sign","token","jwtEncrypt","name","flags","changePassword","put","_","isNil","status","API_ERROR","MUST_BE_LOGGED","new","old","isUpdated","ok","getInternalError","INTERNAL_SERVER_ERROR","BAD_REQUEST","APP_ERROR","PASSWORD_VALIDATION"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { Request, Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { API_ERROR, APP_ERROR, HTTP_STATUS, errorUtils } from '@verdaccio/core';\nimport { Config, JWTSignOptions, RemoteUser } from '@verdaccio/types';\nimport { validatePassword } from '@verdaccio/utils';\n\nimport { $NextFunctionVer } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:user');\n\nfunction addUserAuthApi(route: Router, auth: IAuth, config: Config): void {\n route.post('/login', function (req: Request, res: Response, next: $NextFunctionVer): void {\n const { username, password } = req.body;\n debug('authenticate %o', username);\n auth.authenticate(username, password, async (err, user: RemoteUser): Promise<void> => {\n if (err) {\n const errorCode = err.message ? HTTP_STATUS.UNAUTHORIZED : HTTP_STATUS.INTERNAL_ERROR;\n debug('error authenticate %o', errorCode);\n next(errorUtils.getCode(errorCode, err.message));\n } else {\n req.remote_user = user;\n const jWTSignOptions: JWTSignOptions = config.security.web.sign;\n\n next({\n token: await auth.jwtEncrypt(user, jWTSignOptions),\n username: req.remote_user.name,\n });\n }\n });\n });\n\n if (config?.flags?.changePassword === true) {\n route.put(\n '/reset_password',\n function (req: Request, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name)) {\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n // FUTURE: update to a more meaningful message\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n\n const { password } = req.body;\n const { name } = req.remote_user;\n\n if (validatePassword(password.new) === false) {\n auth.changePassword(\n name as string,\n password.old,\n password.new,\n (err, isUpdated): void => {\n if (_.isNil(err) && isUpdated) {\n next({\n ok: true,\n });\n } else {\n return next(errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));\n }\n }\n );\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_REQUEST, APP_ERROR.PASSWORD_VALIDATION));\n }\n }\n );\n }\n}\n\nexport default addUserAuthApi;\n"],"file":"user.js"}