@verdaccio/api 6.0.0-6-next.25 → 6.0.0-6-next.28

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 (64) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/build/dist-tags.js +40 -35
  3. package/build/dist-tags.js.map +1 -1
  4. package/build/index.js +1 -7
  5. package/build/index.js.map +1 -1
  6. package/build/package.js +39 -28
  7. package/build/package.js.map +1 -1
  8. package/build/ping.js.map +1 -1
  9. package/build/publish.d.ts +79 -22
  10. package/build/publish.js +89 -313
  11. package/build/publish.js.map +1 -1
  12. package/build/search.js.map +1 -1
  13. package/build/star.js +53 -54
  14. package/build/star.js.map +1 -1
  15. package/build/stars.js +6 -6
  16. package/build/stars.js.map +1 -1
  17. package/build/user.js +19 -1
  18. package/build/user.js.map +1 -1
  19. package/build/v1/profile.js.map +1 -1
  20. package/build/v1/search.js +2 -4
  21. package/build/v1/search.js.map +1 -1
  22. package/build/v1/token.js.map +1 -1
  23. package/build/whoami.js +11 -25
  24. package/build/whoami.js.map +1 -1
  25. package/jest.config.js +8 -1
  26. package/package.json +71 -69
  27. package/src/dist-tags.ts +63 -50
  28. package/src/index.ts +1 -6
  29. package/src/package.ts +37 -44
  30. package/src/publish.ts +115 -336
  31. package/src/star.ts +53 -52
  32. package/src/stars.ts +9 -11
  33. package/src/user.ts +19 -2
  34. package/src/v1/search.ts +3 -3
  35. package/src/whoami.ts +8 -24
  36. package/test/integration/_helper.ts +97 -54
  37. package/test/integration/config/distTag.yaml +25 -0
  38. package/test/integration/config/package.yaml +3 -8
  39. package/test/integration/config/ping.yaml +2 -6
  40. package/test/integration/config/publish.yaml +4 -10
  41. package/test/integration/config/search.yaml +29 -0
  42. package/test/integration/config/token.jwt.yaml +27 -0
  43. package/test/integration/config/token.yaml +19 -0
  44. package/test/integration/config/user.jwt.yaml +37 -0
  45. package/test/integration/config/user.yaml +8 -14
  46. package/test/integration/config/whoami.yaml +4 -11
  47. package/test/integration/distTag.spec.ts +76 -0
  48. package/test/integration/package.spec.ts +53 -75
  49. package/test/integration/ping.spec.ts +4 -3
  50. package/test/integration/publish.spec.ts +60 -25
  51. package/test/integration/search.spec.ts +126 -0
  52. package/test/integration/token.spec.ts +124 -0
  53. package/test/integration/user.jwt.spec.ts +87 -0
  54. package/test/integration/user.spec.ts +1 -0
  55. package/test/integration/whoami.spec.ts +21 -39
  56. package/test/unit/publish.disabled.ts +252 -0
  57. package/tsconfig.json +1 -1
  58. package/__mocks__/@verdaccio/logger/index.js +0 -21
  59. package/build/utils.d.ts +0 -7
  60. package/build/utils.js +0 -36
  61. package/build/utils.js.map +0 -1
  62. package/src/utils.ts +0 -25
  63. package/test/unit/__snapshots__/publish.spec.ts.snap +0 -49
  64. package/test/unit/publish.spec.ts +0 -300
package/build/star.js CHANGED
@@ -9,10 +9,9 @@ var _debug = _interopRequireDefault(require("debug"));
9
9
 
10
10
  var _lodash = _interopRequireDefault(require("lodash"));
11
11
 
12
- var _core = require("@verdaccio/core");
13
-
14
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
13
 
14
+ /* eslint-disable @typescript-eslint/no-unused-vars */
16
15
  const debug = (0, _debug.default)('verdaccio:api:publish:star');
17
16
 
18
17
  function _default(storage) {
@@ -32,60 +31,60 @@ function _default(storage) {
32
31
 
33
32
  return (req, res, next) => {
34
33
  const name = req.params.package;
35
- debug('starring a package for %o', name);
36
-
37
- const afterChangePackage = function (err) {
38
- if (err) {
39
- debug('error on update package for %o', name);
40
- return next(err);
41
- }
42
-
43
- debug('succes update package for %o', name);
44
- res.status(_core.HTTP_STATUS.OK);
45
- next({
46
- success: true
47
- });
48
- };
34
+ debug('starring a package for %o', name); // const afterChangePackage = function (err?: Error) {
35
+ // if (err) {
36
+ // debug('error on update package for %o', name);
37
+ // return next(err);
38
+ // }
39
+ // debug('succes update package for %o', name);
40
+ // res.status(HTTP_STATUS.OK);
41
+ // next({
42
+ // success: true,
43
+ // });
44
+ // };
49
45
 
50
46
  debug('get package info package for %o', name); // @ts-ignore
51
-
52
- storage.getPackage({
53
- name,
54
- req,
55
- callback: function (err, info) {
56
- if (err) {
57
- debug('error on get package info package for %o', name);
58
- return next(err);
59
- }
60
-
61
- const newStarUser = req.body[_core.USERS];
62
- const remoteUsername = req.remote_user.name;
63
- const localStarUsers = info[_core.USERS]; // Check is star or unstar
64
-
65
- const isStar = Object.keys(newStarUser).includes(remoteUsername);
66
- debug('is start? %o', isStar);
67
-
68
- if (_lodash.default.isNil(localStarUsers) === false && validateInputs(newStarUser, localStarUsers, remoteUsername, isStar)) {
69
- return afterChangePackage();
70
- }
71
-
72
- const users = isStar ? { ...localStarUsers,
73
- [remoteUsername]: true
74
- } : _lodash.default.reduce(localStarUsers, (users, value, key) => {
75
- if (key !== remoteUsername) {
76
- users[key] = value;
77
- }
78
-
79
- return users;
80
- }, {});
81
- debug('update package for %o', name);
82
- storage.changePackage(name, { ...info,
83
- users
84
- }, req.body._rev, function (err) {
85
- afterChangePackage(err);
86
- });
87
- }
88
- });
47
+ // storage.getPackage({
48
+ // name,
49
+ // req,
50
+ // callback: function (err, info) {
51
+ // if (err) {
52
+ // debug('error on get package info package for %o', name);
53
+ // return next(err);
54
+ // }
55
+ // const newStarUser = req.body[USERS];
56
+ // const remoteUsername = req.remote_user.name;
57
+ // const localStarUsers = info[USERS];
58
+ // // Check is star or unstar
59
+ // const isStar = Object.keys(newStarUser).includes(remoteUsername);
60
+ // debug('is start? %o', isStar);
61
+ // if (
62
+ // _.isNil(localStarUsers) === false &&
63
+ // validateInputs(newStarUser, localStarUsers, remoteUsername, isStar)
64
+ // ) {
65
+ // return afterChangePackage();
66
+ // }
67
+ // const users = isStar
68
+ // ? {
69
+ // ...localStarUsers,
70
+ // [remoteUsername]: true,
71
+ // }
72
+ // : _.reduce(
73
+ // localStarUsers,
74
+ // (users, value, key) => {
75
+ // if (key !== remoteUsername) {
76
+ // users[key] = value;
77
+ // }
78
+ // return users;
79
+ // },
80
+ // {}
81
+ // );
82
+ // debug('update package for %o', name);
83
+ // storage.changePackage(name, { ...info, users }, req.body._rev, function (err) {
84
+ // afterChangePackage(err);
85
+ // });
86
+ // },
87
+ // });
89
88
  };
90
89
  }
91
90
  //# sourceMappingURL=star.js.map
package/build/star.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/star.ts"],"names":["debug","storage","validateInputs","newUsers","localUsers","username","isStar","isExistlocalUsers","_","isNil","req","res","next","name","params","package","afterChangePackage","err","status","HTTP_STATUS","OK","success","getPackage","callback","info","newStarUser","body","USERS","remoteUsername","remote_user","localStarUsers","Object","keys","includes","users","reduce","value","key","changePackage","_rev"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { Response } from 'express';\nimport _ from 'lodash';\n\nimport { HTTP_STATUS, USERS } from '@verdaccio/core';\nimport { Storage } from '@verdaccio/store';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:publish:star');\n\nexport default function (\n storage: Storage\n): (req: $RequestExtend, res: Response, next: $NextFunctionVer) => void {\n const validateInputs = (newUsers, localUsers, username, isStar): boolean => {\n const isExistlocalUsers = _.isNil(localUsers[username]) === false;\n if (isStar && isExistlocalUsers && localUsers[username]) {\n return true;\n } else if (!isStar && isExistlocalUsers) {\n return false;\n } else if (!isStar && !isExistlocalUsers) {\n return true;\n }\n return false;\n };\n\n return (req: $RequestExtend, res: Response, next: $NextFunctionVer): void => {\n const name = req.params.package;\n debug('starring a package for %o', name);\n const afterChangePackage = function (err?: Error) {\n if (err) {\n debug('error on update package for %o', name);\n return next(err);\n }\n\n debug('succes update package for %o', name);\n res.status(HTTP_STATUS.OK);\n next({\n success: true,\n });\n };\n\n debug('get package info package for %o', name);\n // @ts-ignore\n storage.getPackage({\n name,\n req,\n callback: function (err, info) {\n if (err) {\n debug('error on get package info package for %o', name);\n return next(err);\n }\n const newStarUser = req.body[USERS];\n const remoteUsername = req.remote_user.name;\n const localStarUsers = info[USERS];\n // Check is star or unstar\n const isStar = Object.keys(newStarUser).includes(remoteUsername);\n debug('is start? %o', isStar);\n if (\n _.isNil(localStarUsers) === false &&\n validateInputs(newStarUser, localStarUsers, remoteUsername, isStar)\n ) {\n return afterChangePackage();\n }\n const users = isStar\n ? {\n ...localStarUsers,\n [remoteUsername]: true,\n }\n : _.reduce(\n localStarUsers,\n (users, value, key) => {\n if (key !== remoteUsername) {\n users[key] = value;\n }\n return users;\n },\n {}\n );\n debug('update package for %o', name);\n storage.changePackage(name, { ...info, users }, req.body._rev, function (err) {\n afterChangePackage(err);\n });\n },\n });\n };\n}\n"],"file":"star.js"}
1
+ {"version":3,"file":"star.js","names":["debug","buildDebug","storage","validateInputs","newUsers","localUsers","username","isStar","isExistlocalUsers","_","isNil","req","res","next","name","params","package"],"sources":["../src/star.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport buildDebug from 'debug';\nimport { Response } from 'express';\nimport _ from 'lodash';\n\nimport { HTTP_STATUS, USERS } from '@verdaccio/core';\nimport { Storage } from '@verdaccio/store';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:publish:star');\n\nexport default function (\n storage: Storage\n): (req: $RequestExtend, res: Response, next: $NextFunctionVer) => void {\n const validateInputs = (newUsers, localUsers, username, isStar): boolean => {\n const isExistlocalUsers = _.isNil(localUsers[username]) === false;\n if (isStar && isExistlocalUsers && localUsers[username]) {\n return true;\n } else if (!isStar && isExistlocalUsers) {\n return false;\n } else if (!isStar && !isExistlocalUsers) {\n return true;\n }\n return false;\n };\n\n return (req: $RequestExtend, res: Response, next: $NextFunctionVer): void => {\n const name = req.params.package;\n debug('starring a package for %o', name);\n // const afterChangePackage = function (err?: Error) {\n // if (err) {\n // debug('error on update package for %o', name);\n // return next(err);\n // }\n\n // debug('succes update package for %o', name);\n // res.status(HTTP_STATUS.OK);\n // next({\n // success: true,\n // });\n // };\n\n debug('get package info package for %o', name);\n // @ts-ignore\n // storage.getPackage({\n // name,\n // req,\n // callback: function (err, info) {\n // if (err) {\n // debug('error on get package info package for %o', name);\n // return next(err);\n // }\n // const newStarUser = req.body[USERS];\n // const remoteUsername = req.remote_user.name;\n // const localStarUsers = info[USERS];\n // // Check is star or unstar\n // const isStar = Object.keys(newStarUser).includes(remoteUsername);\n // debug('is start? %o', isStar);\n // if (\n // _.isNil(localStarUsers) === false &&\n // validateInputs(newStarUser, localStarUsers, remoteUsername, isStar)\n // ) {\n // return afterChangePackage();\n // }\n // const users = isStar\n // ? {\n // ...localStarUsers,\n // [remoteUsername]: true,\n // }\n // : _.reduce(\n // localStarUsers,\n // (users, value, key) => {\n // if (key !== remoteUsername) {\n // users[key] = value;\n // }\n // return users;\n // },\n // {}\n // );\n // debug('update package for %o', name);\n // storage.changePackage(name, { ...info, users }, req.body._rev, function (err) {\n // afterChangePackage(err);\n // });\n // },\n // });\n };\n}\n"],"mappings":";;;;;;;AACA;;AAEA;;;;AAHA;AAUA,MAAMA,KAAK,GAAG,IAAAC,cAAA,EAAW,4BAAX,CAAd;;AAEe,kBACbC,OADa,EAEyD;EACtE,MAAMC,cAAc,GAAG,CAACC,QAAD,EAAWC,UAAX,EAAuBC,QAAvB,EAAiCC,MAAjC,KAAqD;IAC1E,MAAMC,iBAAiB,GAAGC,eAAA,CAAEC,KAAF,CAAQL,UAAU,CAACC,QAAD,CAAlB,MAAkC,KAA5D;;IACA,IAAIC,MAAM,IAAIC,iBAAV,IAA+BH,UAAU,CAACC,QAAD,CAA7C,EAAyD;MACvD,OAAO,IAAP;IACD,CAFD,MAEO,IAAI,CAACC,MAAD,IAAWC,iBAAf,EAAkC;MACvC,OAAO,KAAP;IACD,CAFM,MAEA,IAAI,CAACD,MAAD,IAAW,CAACC,iBAAhB,EAAmC;MACxC,OAAO,IAAP;IACD;;IACD,OAAO,KAAP;EACD,CAVD;;EAYA,OAAO,CAACG,GAAD,EAAsBC,GAAtB,EAAqCC,IAArC,KAAsE;IAC3E,MAAMC,IAAI,GAAGH,GAAG,CAACI,MAAJ,CAAWC,OAAxB;IACAhB,KAAK,CAAC,2BAAD,EAA8Bc,IAA9B,CAAL,CAF2E,CAG3E;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;;IAEAd,KAAK,CAAC,iCAAD,EAAoCc,IAApC,CAAL,CAhB2E,CAiB3E;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACD,CA3DD;AA4DD"}
package/build/stars.js CHANGED
@@ -12,13 +12,11 @@ var _core = require("@verdaccio/core");
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
14
  function _default(route, storage) {
15
- route.get('/-/_view/starredByUser', (req, res, next) => {
15
+ route.get('/-/_view/starredByUser', async (req, res, next) => {
16
16
  const remoteUsername = req.remote_user.name;
17
- storage.getLocalDatabase((err, localPackages) => {
18
- if (err) {
19
- return next(err);
20
- }
21
17
 
18
+ try {
19
+ const localPackages = await storage.getLocalDatabaseNext();
22
20
  const filteredPackages = localPackages.filter(localPackage => _lodash.default.keys(localPackage[_core.USERS]).includes(remoteUsername));
23
21
  res.status(_core.HTTP_STATUS.OK);
24
22
  next({
@@ -26,7 +24,9 @@ function _default(route, storage) {
26
24
  value: filteredPackage.name
27
25
  }))
28
26
  });
29
- });
27
+ } catch (err) {
28
+ return next(err);
29
+ }
30
30
  });
31
31
  }
32
32
  //# sourceMappingURL=stars.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stars.ts"],"names":["route","storage","get","req","res","next","remoteUsername","remote_user","name","getLocalDatabase","err","localPackages","filteredPackages","filter","localPackage","_","keys","USERS","includes","status","HTTP_STATUS","OK","rows","map","filteredPackage","value"],"mappings":";;;;;;;AACA;;AAEA;;;;AAQe,kBAAUA,KAAV,EAAyBC,OAAzB,EAAiD;AAC9DD,EAAAA,KAAK,CAACE,GAAN,CACE,wBADF,EAEE,CAACC,GAAD,EAAsBC,GAAtB,EAAqCC,IAArC,KAAsE;AACpE,UAAMC,cAAc,GAAGH,GAAG,CAACI,WAAJ,CAAgBC,IAAvC;AAEAP,IAAAA,OAAO,CAACQ,gBAAR,CAAyB,CAACC,GAAD,EAAMC,aAAN,KAAkC;AACzD,UAAID,GAAJ,EAAS;AACP,eAAOL,IAAI,CAACK,GAAD,CAAX;AACD;;AAED,YAAME,gBAA0B,GAAGD,aAAa,CAACE,MAAd,CAAsBC,YAAD,IACtDC,gBAAEC,IAAF,CAAOF,YAAY,CAACG,WAAD,CAAnB,EAA4BC,QAA5B,CAAqCZ,cAArC,CADiC,CAAnC;AAIAF,MAAAA,GAAG,CAACe,MAAJ,CAAWC,kBAAYC,EAAvB;AACAhB,MAAAA,IAAI,CAAC;AACHiB,QAAAA,IAAI,EAAEV,gBAAgB,CAACW,GAAjB,CAAsBC,eAAD,KAA+B;AACxDC,UAAAA,KAAK,EAAED,eAAe,CAAChB;AADiC,SAA/B,CAArB;AADH,OAAD,CAAJ;AAKD,KAfD;AAgBD,GArBH;AAuBD","sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { HTTP_STATUS, USERS } from '@verdaccio/core';\nimport { Storage } from '@verdaccio/store';\nimport { Package } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\ntype Packages = Package[];\n\nexport default function (route: Router, storage: Storage): void {\n route.get(\n '/-/_view/starredByUser',\n (req: $RequestExtend, res: Response, next: $NextFunctionVer): void => {\n const remoteUsername = req.remote_user.name;\n\n storage.getLocalDatabase((err, localPackages: Packages) => {\n if (err) {\n return next(err);\n }\n\n const filteredPackages: Packages = localPackages.filter((localPackage: Package) =>\n _.keys(localPackage[USERS]).includes(remoteUsername)\n );\n\n res.status(HTTP_STATUS.OK);\n next({\n rows: filteredPackages.map((filteredPackage: Package) => ({\n value: filteredPackage.name,\n })),\n });\n });\n }\n );\n}\n"],"file":"stars.js"}
1
+ {"version":3,"file":"stars.js","names":["route","storage","get","req","res","next","remoteUsername","remote_user","name","localPackages","getLocalDatabaseNext","filteredPackages","filter","localPackage","_","keys","USERS","includes","status","HTTP_STATUS","OK","rows","map","filteredPackage","value","err"],"sources":["../src/stars.ts"],"sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { HTTP_STATUS, USERS } from '@verdaccio/core';\nimport { Storage } from '@verdaccio/store';\nimport { Version } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nexport default function (route: Router, storage: Storage): void {\n route.get(\n '/-/_view/starredByUser',\n async (req: $RequestExtend, res: Response, next: $NextFunctionVer): Promise<void> => {\n const remoteUsername = req.remote_user.name;\n\n try {\n const localPackages: Version[] = await storage.getLocalDatabaseNext();\n\n const filteredPackages: Version[] = localPackages.filter((localPackage: Version) =>\n _.keys(localPackage[USERS]).includes(remoteUsername)\n );\n\n res.status(HTTP_STATUS.OK);\n next({\n rows: filteredPackages.map((filteredPackage: Version) => ({\n value: filteredPackage.name,\n })),\n });\n } catch (err: any) {\n return next(err);\n }\n }\n );\n}\n"],"mappings":";;;;;;;AACA;;AAEA;;;;AAMe,kBAAUA,KAAV,EAAyBC,OAAzB,EAAiD;EAC9DD,KAAK,CAACE,GAAN,CACE,wBADF,EAEE,OAAOC,GAAP,EAA4BC,GAA5B,EAA2CC,IAA3C,KAAqF;IACnF,MAAMC,cAAc,GAAGH,GAAG,CAACI,WAAJ,CAAgBC,IAAvC;;IAEA,IAAI;MACF,MAAMC,aAAwB,GAAG,MAAMR,OAAO,CAACS,oBAAR,EAAvC;MAEA,MAAMC,gBAA2B,GAAGF,aAAa,CAACG,MAAd,CAAsBC,YAAD,IACvDC,eAAA,CAAEC,IAAF,CAAOF,YAAY,CAACG,WAAD,CAAnB,EAA4BC,QAA5B,CAAqCX,cAArC,CADkC,CAApC;MAIAF,GAAG,CAACc,MAAJ,CAAWC,iBAAA,CAAYC,EAAvB;MACAf,IAAI,CAAC;QACHgB,IAAI,EAAEV,gBAAgB,CAACW,GAAjB,CAAsBC,eAAD,KAA+B;UACxDC,KAAK,EAAED,eAAe,CAACf;QADiC,CAA/B,CAArB;MADH,CAAD,CAAJ;IAKD,CAbD,CAaE,OAAOiB,GAAP,EAAiB;MACjB,OAAOpB,IAAI,CAACoB,GAAD,CAAX;IACD;EACF,CArBH;AAuBD"}
package/build/user.js CHANGED
@@ -33,6 +33,24 @@ function _default(route, auth, config) {
33
33
  ok: message
34
34
  });
35
35
  });
36
+ /**
37
+ *
38
+ * body example
39
+ * req.body = {
40
+ _id: "org.couchdb.user:jjjj",
41
+ name: "jjjj",
42
+ password: "jjjj",
43
+ type: "user",
44
+ roles: [],
45
+ date: "2022-07-08T15:51:04.002Z",
46
+ }
47
+ *
48
+ * @export
49
+ * @param {Router} route
50
+ * @param {IAuth} auth
51
+ * @param {Config} config
52
+ */
53
+
36
54
  route.put('/-/user/:org_couchdb_user/:_rev?/:revision?', function (req, res, next) {
37
55
  const {
38
56
  name,
@@ -90,7 +108,7 @@ function _default(route, auth, config) {
90
108
  }
91
109
 
92
110
  const token = name && password ? await (0, _auth.getApiToken)(auth, config, user, password) : undefined;
93
- debug('adduser: new token %o', token);
111
+ debug('adduser: new token %o', (0, _utils.mask)(token, 4));
94
112
 
95
113
  if (!token) {
96
114
  return next(_core.errorUtils.getUnauthorized());
package/build/user.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/user.ts"],"names":["debug","route","auth","config","get","req","res","next","message","remote_user","name","status","HTTP_STATUS","OK","ok","put","password","body","remoteName","_","isNil","authenticate","callbackAuthenticate","err","user","logger","trace","errorUtils","getCode","UNAUTHORIZED","API_ERROR","BAD_USERNAME_PASSWORD","restoredRemoteUser","groups","token","getUnauthorized","CREATED","BAD_REQUEST","PASSWORD_SHORT","add_user","INTERNAL_ERROR","getConflict","undefined","delete","API_MESSAGE","LOGGED_OUT"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { getApiToken } from '@verdaccio/auth';\nimport { IAuth } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport { API_ERROR, API_MESSAGE, HTTP_STATUS, errorUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Config, RemoteUser } from '@verdaccio/types';\nimport { getAuthenticatedMessage, validatePassword } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router, auth: IAuth, config: Config): void {\n route.get(\n '/-/user/:org_couchdb_user',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n debug('verifying user');\n const message = getAuthenticatedMessage(req.remote_user.name);\n debug('user authenticated message %o', message);\n res.status(HTTP_STATUS.OK);\n next({\n ok: message,\n });\n }\n );\n\n route.put(\n '/-/user/:org_couchdb_user/:_rev?/:revision?',\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 (_.isNil(remoteName) === false && _.isNil(name) === false && 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\n const message = 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 if (validatePassword(password) === false) {\n debug('adduser: invalid password');\n // eslint-disable-next-line new-cap\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 ? await getApiToken(auth, config, user, password) : undefined;\n debug('adduser: new token %o', token);\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n req.remote_user = user;\n res.status(HTTP_STATUS.CREATED);\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/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"],"file":"user.js"}
1
+ {"version":3,"file":"user.js","names":["debug","buildDebug","route","auth","config","get","req","res","next","message","getAuthenticatedMessage","remote_user","name","status","HTTP_STATUS","OK","ok","put","password","body","remoteName","_","isNil","authenticate","callbackAuthenticate","err","user","logger","trace","errorUtils","getCode","UNAUTHORIZED","API_ERROR","BAD_USERNAME_PASSWORD","restoredRemoteUser","createRemoteUser","groups","token","getApiToken","getUnauthorized","CREATED","validatePassword","BAD_REQUEST","PASSWORD_SHORT","add_user","INTERNAL_ERROR","getConflict","undefined","mask","delete","API_MESSAGE","LOGGED_OUT"],"sources":["../src/user.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { getApiToken } from '@verdaccio/auth';\nimport { IAuth } from '@verdaccio/auth';\nimport { createRemoteUser } from '@verdaccio/config';\nimport { API_ERROR, API_MESSAGE, HTTP_STATUS, errorUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Config, RemoteUser } from '@verdaccio/types';\nimport { getAuthenticatedMessage, mask, validatePassword } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router, auth: IAuth, config: Config): void {\n route.get(\n '/-/user/:org_couchdb_user',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n debug('verifying user');\n const message = getAuthenticatedMessage(req.remote_user.name);\n debug('user authenticated message %o', message);\n res.status(HTTP_STATUS.OK);\n next({\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 {IAuth} auth\n * @param {Config} config\n */\n route.put(\n '/-/user/:org_couchdb_user/:_rev?/:revision?',\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 (_.isNil(remoteName) === false && _.isNil(name) === false && 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\n const message = 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 if (validatePassword(password) === false) {\n debug('adduser: invalid password');\n // eslint-disable-next-line new-cap\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 ? await getApiToken(auth, config, user, password) : undefined;\n debug('adduser: new token %o', mask(token as string, 4));\n if (!token) {\n return next(errorUtils.getUnauthorized());\n }\n\n req.remote_user = user;\n res.status(HTTP_STATUS.CREATED);\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/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 +1 @@
1
- {"version":3,"sources":["../../src/v1/profile.ts"],"names":["route","auth","buildProfile","name","tfa","email","email_verified","created","updated","cidr_whitelist","fullname","get","req","res","next","_","isNil","remote_user","status","HTTP_STATUS","UNAUTHORIZED","message","API_ERROR","MUST_BE_LOGGED","post","password","body","new","errorUtils","getCode","PASSWORD_SHORT","changePassword","old","err","isUpdated","isNull","getConflict","getInternalError","INTERNAL_SERVER_ERROR","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","TFA_DISABLED","INTERNAL_ERROR","APP_ERROR","PROFILE_ERROR"],"mappings":"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","sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { API_ERROR, APP_ERROR, HTTP_STATUS, SUPPORT_ERRORS, errorUtils } from '@verdaccio/core';\nimport { validatePassword } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nexport interface Profile {\n tfa: boolean;\n name: string;\n email: string;\n email_verified: boolean;\n created: string;\n updated: string;\n cidr_whitelist: string[] | null;\n fullname: string;\n}\n\nexport default function (route: Router, auth: IAuth): void {\n function buildProfile(name: string): Profile {\n return {\n tfa: false,\n name,\n email: '',\n email_verified: false,\n created: '',\n updated: '',\n cidr_whitelist: null,\n fullname: '',\n };\n }\n\n route.get(\n '/-/npm/v1/user',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name) === false) {\n return next(buildProfile(req.remote_user.name));\n }\n\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n );\n\n route.post(\n '/-/npm/v1/user',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name)) {\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n\n const { password, tfa } = req.body;\n const { name } = req.remote_user;\n\n if (_.isNil(password) === false) {\n if (validatePassword(password.new) === false) {\n /* eslint new-cap:off */\n return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.PASSWORD_SHORT()));\n /* eslint new-cap:off */\n }\n\n auth.changePassword(\n name,\n password.old,\n password.new,\n (err, isUpdated): $NextFunctionVer => {\n if (_.isNull(err) === false) {\n return next(\n errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)\n );\n }\n\n if (isUpdated) {\n return next(buildProfile(req.remote_user.name));\n }\n return next(errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));\n }\n );\n } else if (_.isNil(tfa) === false) {\n return next(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.TFA_DISABLED)\n );\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, APP_ERROR.PROFILE_ERROR));\n }\n }\n );\n}\n"],"file":"profile.js"}
1
+ {"version":3,"file":"profile.js","names":["route","auth","buildProfile","name","tfa","email","email_verified","created","updated","cidr_whitelist","fullname","get","req","res","next","_","isNil","remote_user","status","HTTP_STATUS","UNAUTHORIZED","message","API_ERROR","MUST_BE_LOGGED","post","password","body","validatePassword","new","errorUtils","getCode","PASSWORD_SHORT","changePassword","old","err","isUpdated","isNull","getConflict","getInternalError","INTERNAL_SERVER_ERROR","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","TFA_DISABLED","INTERNAL_ERROR","APP_ERROR","PROFILE_ERROR"],"sources":["../../src/v1/profile.ts"],"sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { API_ERROR, APP_ERROR, HTTP_STATUS, SUPPORT_ERRORS, errorUtils } from '@verdaccio/core';\nimport { validatePassword } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nexport interface Profile {\n tfa: boolean;\n name: string;\n email: string;\n email_verified: boolean;\n created: string;\n updated: string;\n cidr_whitelist: string[] | null;\n fullname: string;\n}\n\nexport default function (route: Router, auth: IAuth): void {\n function buildProfile(name: string): Profile {\n return {\n tfa: false,\n name,\n email: '',\n email_verified: false,\n created: '',\n updated: '',\n cidr_whitelist: null,\n fullname: '',\n };\n }\n\n route.get(\n '/-/npm/v1/user',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name) === false) {\n return next(buildProfile(req.remote_user.name));\n }\n\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n );\n\n route.post(\n '/-/npm/v1/user',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer): void {\n if (_.isNil(req.remote_user.name)) {\n res.status(HTTP_STATUS.UNAUTHORIZED);\n return next({\n message: API_ERROR.MUST_BE_LOGGED,\n });\n }\n\n const { password, tfa } = req.body;\n const { name } = req.remote_user;\n\n if (_.isNil(password) === false) {\n if (validatePassword(password.new) === false) {\n /* eslint new-cap:off */\n return next(errorUtils.getCode(HTTP_STATUS.UNAUTHORIZED, API_ERROR.PASSWORD_SHORT()));\n /* eslint new-cap:off */\n }\n\n auth.changePassword(\n name,\n password.old,\n password.new,\n (err, isUpdated): $NextFunctionVer => {\n if (_.isNull(err) === false) {\n return next(\n errorUtils.getCode(err.status, err.message) || errorUtils.getConflict(err.message)\n );\n }\n\n if (isUpdated) {\n return next(buildProfile(req.remote_user.name));\n }\n return next(errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR));\n }\n );\n } else if (_.isNil(tfa) === false) {\n return next(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.TFA_DISABLED)\n );\n } else {\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, APP_ERROR.PROFILE_ERROR));\n }\n }\n );\n}\n"],"mappings":"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"}
@@ -62,13 +62,11 @@ function _default(route, auth, storage) {
62
62
  from = parseInt(from, 10) || 0;
63
63
 
64
64
  try {
65
- var _storage$searchManage;
66
-
67
- data = await ((_storage$searchManage = storage.searchManager) === null || _storage$searchManage === void 0 ? void 0 : _storage$searchManage.search({
65
+ data = await storage.search({
68
66
  query,
69
67
  url,
70
68
  abort
71
- }));
69
+ });
72
70
  debug('stream finish');
73
71
  const checkAccessPromises = await Promise.all(data.map(pkgItem => {
74
72
  return checkAccess(pkgItem, auth, req.remote_user);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/v1/search.ts"],"names":["debug","route","auth","storage","checkAccess","pkg","remoteUser","Promise","resolve","reject","allow_access","packageName","package","name","err","allowed","status","String","match","get","req","res","next","query","url","size","from","map","k","data","abort","AbortController","on","parseInt","searchManager","search","checkAccessPromises","all","pkgItem","remote_user","final","filter","i","_","isNull","slice","logger","length","response","objects","total","time","Date","toUTCString","HTTP_STATUS","OK","json","error"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { HTTP_STATUS, searchUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Storage } from '@verdaccio/store';\nimport { Package } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:api:search');\n\n/**\n * Endpoint for npm search v1\n * Empty value\n * - {\"objects\":[],\"total\":0,\"time\":\"Sun Jul 25 2021 14:09:11 GMT+0000 (Coordinated Universal Time)\"}\n * req: 'GET /-/v1/search?text=react&size=20&frpom=0&quality=0.65&popularity=0.98&maintenance=0.5'\n */\nexport default function (route, auth: IAuth, storage: Storage): void {\n function checkAccess(pkg: any, auth: any, remoteUser): Promise<Package | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n allowed = false;\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n }\n\n route.get('/-/v1/search', async (req, res, next) => {\n const { query, url } = req;\n let [size, from] = ['size', 'from'].map((k) => query[k]);\n let data;\n const abort = new AbortController();\n\n req.on('aborted', () => {\n abort.abort();\n });\n\n size = parseInt(size, 10) || 20;\n from = parseInt(from, 10) || 0;\n\n try {\n data = await storage.searchManager?.search({\n query,\n url,\n abort,\n });\n debug('stream finish');\n const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final: searchUtils.SearchItemPkg[] = checkAccessPromises\n .filter((i) => !_.isNull(i))\n .slice(from, size);\n logger.debug(`search results ${final?.length}`);\n\n const response: searchUtils.SearchResults = {\n objects: final,\n total: final.length,\n time: new Date().toUTCString(),\n };\n\n res.status(HTTP_STATUS.OK).json(response);\n } catch (error) {\n logger.error({ error }, 'search endpoint has failed @{error.message}');\n next(next);\n return;\n }\n });\n}\n"],"file":"search.js"}
1
+ {"version":3,"file":"search.js","names":["debug","buildDebug","route","auth","storage","checkAccess","pkg","remoteUser","Promise","resolve","reject","allow_access","packageName","package","name","err","allowed","status","String","match","get","req","res","next","query","url","size","from","map","k","data","abort","AbortController","on","parseInt","search","checkAccessPromises","all","pkgItem","remote_user","final","filter","i","_","isNull","slice","logger","length","response","objects","total","time","Date","toUTCString","HTTP_STATUS","OK","json","error"],"sources":["../../src/v1/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { HTTP_STATUS, searchUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:api:search');\n\n/**\n * Endpoint for npm search v1\n * Empty value\n * - {\"objects\":[],\"total\":0,\"time\":\"Sun Jul 25 2021 14:09:11 GMT+0000 (Coordinated Universal Time)\"}\n * req: 'GET /-/v1/search?text=react&size=20&frpom=0&quality=0.65&popularity=0.98&maintenance=0.5'\n */\nexport default function (route, auth: IAuth, storage: Storage): void {\n function checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n allowed = false;\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n }\n\n route.get('/-/v1/search', async (req, res, next) => {\n const { query, url } = req;\n let [size, from] = ['size', 'from'].map((k) => query[k]);\n let data;\n const abort = new AbortController();\n\n req.on('aborted', () => {\n abort.abort();\n });\n\n size = parseInt(size, 10) || 20;\n from = parseInt(from, 10) || 0;\n\n try {\n data = await storage.search({\n query,\n url,\n abort,\n });\n debug('stream finish');\n const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final: searchUtils.SearchItemPkg[] = checkAccessPromises\n .filter((i) => !_.isNull(i))\n .slice(from, size);\n logger.debug(`search results ${final?.length}`);\n\n const response: searchUtils.SearchResults = {\n objects: final,\n total: final.length,\n time: new Date().toUTCString(),\n };\n\n res.status(HTTP_STATUS.OK).json(response);\n } catch (error) {\n logger.error({ error }, 'search endpoint has failed @{error.message}');\n next(next);\n return;\n }\n });\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/v1/token.ts"],"names":["normalizeToken","token","created","Date","toISOString","route","auth","storage","config","get","req","res","next","name","remote_user","_","isNil","tokens","readTokens","user","totalTokens","length","logger","debug","status","HTTP_STATUS","OK","objects","map","urls","error","msg","errorUtils","getCode","INTERNAL_ERROR","message","getUnauthorized","post","password","readonly","cidr_whitelist","body","isBoolean","isArray","BAD_DATA","SUPPORT_ERRORS","PARAMETERS_NOT_VALID","authenticate","err","errorCode","UNAUTHORIZED","isFunction","saveToken","NOT_IMPLEMENTED","STORAGE_NOT_IMPLEMENT","getInternalError","key","maskedToken","getTime","cidr","delete","params","tokenKey","deleteToken","info"],"mappings":"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","sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { getApiToken } from '@verdaccio/auth';\nimport { IAuth } from '@verdaccio/auth';\nimport { HTTP_STATUS, SUPPORT_ERRORS, errorUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Storage } from '@verdaccio/store';\nimport { Config, RemoteUser, Token } from '@verdaccio/types';\nimport { mask, stringToMD5 } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nexport type NormalizeToken = Token & {\n created: string;\n};\n\nfunction normalizeToken(token: Token): NormalizeToken {\n return {\n ...token,\n created: new Date(token.created).toISOString(),\n };\n}\n\n// https://github.com/npm/npm-profile/blob/latest/lib/index.js\nexport default function (route: Router, auth: IAuth, storage: Storage, config: Config): void {\n route.get(\n '/-/npm/v1/tokens',\n async function (req: $RequestExtend, res: Response, next: $NextFunctionVer) {\n const { name } = req.remote_user;\n\n if (_.isNil(name) === false) {\n try {\n const tokens = await storage.readTokens({ user: name });\n const totalTokens = tokens.length;\n logger.debug({ totalTokens }, 'token list retrieved: @{totalTokens}');\n\n res.status(HTTP_STATUS.OK);\n return next({\n objects: tokens.map(normalizeToken),\n urls: {\n next: '', // TODO: pagination?\n },\n });\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token list has failed: @{error}');\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));\n }\n }\n return next(errorUtils.getUnauthorized());\n }\n );\n\n route.post(\n '/-/npm/v1/tokens',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer) {\n const { password, readonly, cidr_whitelist } = req.body;\n const { name } = req.remote_user;\n\n if (!_.isBoolean(readonly) || !_.isArray(cidr_whitelist)) {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_DATA, SUPPORT_ERRORS.PARAMETERS_NOT_VALID));\n }\n\n auth.authenticate(name, password, async (err, user: RemoteUser) => {\n if (err) {\n const errorCode = err.message ? HTTP_STATUS.UNAUTHORIZED : HTTP_STATUS.INTERNAL_ERROR;\n return next(errorUtils.getCode(errorCode, err.message));\n }\n\n req.remote_user = user;\n\n if (!_.isFunction(storage.saveToken)) {\n return next(\n errorUtils.getCode(HTTP_STATUS.NOT_IMPLEMENTED, SUPPORT_ERRORS.STORAGE_NOT_IMPLEMENT)\n );\n }\n\n try {\n const token = await getApiToken(auth, config, user, password);\n if (!token) {\n throw errorUtils.getInternalError();\n }\n\n const key = stringToMD5(token);\n // TODO: use a utility here\n const maskedToken = mask(token, 5);\n const created = new Date().getTime();\n\n /**\n * cidr_whitelist: is not being used, we pass it through\n * token: we do not store the real token (it is generated once and retrieved\n * to the user), just a mask of it.\n */\n const saveToken: Token = {\n user: name,\n token: maskedToken,\n key,\n cidr: cidr_whitelist,\n readonly,\n created,\n };\n\n await storage.saveToken(saveToken);\n logger.debug({ key, name }, 'token @{key} was created for user @{name}');\n return next(\n normalizeToken({\n token,\n user: name,\n key: saveToken.key,\n cidr: cidr_whitelist,\n readonly,\n created: saveToken.created,\n })\n );\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token creation has failed: @{error}');\n return next(errorUtils.getInternalError(error.message));\n }\n });\n }\n );\n\n route.delete(\n '/-/npm/v1/tokens/token/:tokenKey',\n async (req: $RequestExtend, res: Response, next: $NextFunctionVer) => {\n const {\n params: { tokenKey },\n } = req;\n const { name } = req.remote_user;\n\n if (_.isNil(name) === false) {\n logger.debug({ name }, '@{name} has requested remove a token');\n try {\n await storage.deleteToken(name, tokenKey);\n logger.info({ tokenKey, name }, 'token id @{tokenKey} was revoked for user @{name}');\n return next({});\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token creation has failed: @{error}');\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));\n }\n }\n return next(errorUtils.getUnauthorized());\n }\n );\n}\n"],"file":"token.js"}
1
+ {"version":3,"file":"token.js","names":["normalizeToken","token","created","Date","toISOString","route","auth","storage","config","get","req","res","next","name","remote_user","_","isNil","tokens","readTokens","user","totalTokens","length","logger","debug","status","HTTP_STATUS","OK","objects","map","urls","error","msg","errorUtils","getCode","INTERNAL_ERROR","message","getUnauthorized","post","password","readonly","cidr_whitelist","body","isBoolean","isArray","BAD_DATA","SUPPORT_ERRORS","PARAMETERS_NOT_VALID","authenticate","err","errorCode","UNAUTHORIZED","isFunction","saveToken","NOT_IMPLEMENTED","STORAGE_NOT_IMPLEMENT","getApiToken","getInternalError","key","stringToMD5","maskedToken","mask","getTime","cidr","delete","params","tokenKey","deleteToken","info"],"sources":["../../src/v1/token.ts"],"sourcesContent":["import { Response, Router } from 'express';\nimport _ from 'lodash';\n\nimport { getApiToken } from '@verdaccio/auth';\nimport { IAuth } from '@verdaccio/auth';\nimport { HTTP_STATUS, SUPPORT_ERRORS, errorUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Storage } from '@verdaccio/store';\nimport { Config, RemoteUser, Token } from '@verdaccio/types';\nimport { mask, stringToMD5 } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend } from '../../types/custom';\n\nexport type NormalizeToken = Token & {\n created: string;\n};\n\nfunction normalizeToken(token: Token): NormalizeToken {\n return {\n ...token,\n created: new Date(token.created).toISOString(),\n };\n}\n\n// https://github.com/npm/npm-profile/blob/latest/lib/index.js\nexport default function (route: Router, auth: IAuth, storage: Storage, config: Config): void {\n route.get(\n '/-/npm/v1/tokens',\n async function (req: $RequestExtend, res: Response, next: $NextFunctionVer) {\n const { name } = req.remote_user;\n\n if (_.isNil(name) === false) {\n try {\n const tokens = await storage.readTokens({ user: name });\n const totalTokens = tokens.length;\n logger.debug({ totalTokens }, 'token list retrieved: @{totalTokens}');\n\n res.status(HTTP_STATUS.OK);\n return next({\n objects: tokens.map(normalizeToken),\n urls: {\n next: '', // TODO: pagination?\n },\n });\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token list has failed: @{error}');\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));\n }\n }\n return next(errorUtils.getUnauthorized());\n }\n );\n\n route.post(\n '/-/npm/v1/tokens',\n function (req: $RequestExtend, res: Response, next: $NextFunctionVer) {\n const { password, readonly, cidr_whitelist } = req.body;\n const { name } = req.remote_user;\n\n if (!_.isBoolean(readonly) || !_.isArray(cidr_whitelist)) {\n return next(errorUtils.getCode(HTTP_STATUS.BAD_DATA, SUPPORT_ERRORS.PARAMETERS_NOT_VALID));\n }\n\n auth.authenticate(name, password, async (err, user: RemoteUser) => {\n if (err) {\n const errorCode = err.message ? HTTP_STATUS.UNAUTHORIZED : HTTP_STATUS.INTERNAL_ERROR;\n return next(errorUtils.getCode(errorCode, err.message));\n }\n\n req.remote_user = user;\n\n if (!_.isFunction(storage.saveToken)) {\n return next(\n errorUtils.getCode(HTTP_STATUS.NOT_IMPLEMENTED, SUPPORT_ERRORS.STORAGE_NOT_IMPLEMENT)\n );\n }\n\n try {\n const token = await getApiToken(auth, config, user, password);\n if (!token) {\n throw errorUtils.getInternalError();\n }\n\n const key = stringToMD5(token);\n // TODO: use a utility here\n const maskedToken = mask(token, 5);\n const created = new Date().getTime();\n\n /**\n * cidr_whitelist: is not being used, we pass it through\n * token: we do not store the real token (it is generated once and retrieved\n * to the user), just a mask of it.\n */\n const saveToken: Token = {\n user: name,\n token: maskedToken,\n key,\n cidr: cidr_whitelist,\n readonly,\n created,\n };\n\n await storage.saveToken(saveToken);\n logger.debug({ key, name }, 'token @{key} was created for user @{name}');\n return next(\n normalizeToken({\n token,\n user: name,\n key: saveToken.key,\n cidr: cidr_whitelist,\n readonly,\n created: saveToken.created,\n })\n );\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token creation has failed: @{error}');\n return next(errorUtils.getInternalError(error.message));\n }\n });\n }\n );\n\n route.delete(\n '/-/npm/v1/tokens/token/:tokenKey',\n async (req: $RequestExtend, res: Response, next: $NextFunctionVer) => {\n const {\n params: { tokenKey },\n } = req;\n const { name } = req.remote_user;\n\n if (_.isNil(name) === false) {\n logger.debug({ name }, '@{name} has requested remove a token');\n try {\n await storage.deleteToken(name, tokenKey);\n logger.info({ tokenKey, name }, 'token id @{tokenKey} was revoked for user @{name}');\n return next({});\n } catch (error: any) {\n logger.error({ error: error.msg }, 'token creation has failed: @{error}');\n return next(errorUtils.getCode(HTTP_STATUS.INTERNAL_ERROR, error.message));\n }\n }\n return next(errorUtils.getUnauthorized());\n }\n );\n}\n"],"mappings":"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"}
package/build/whoami.js CHANGED
@@ -7,37 +7,23 @@ exports.default = _default;
7
7
 
8
8
  var _debug = _interopRequireDefault(require("debug"));
9
9
 
10
+ var _core = require("@verdaccio/core");
11
+
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
 
12
14
  const debug = (0, _debug.default)('verdaccio:api:user');
13
15
 
14
16
  function _default(route) {
15
- route.get('/whoami', (req, res, next) => {
16
- debug('whoami: reditect');
17
-
18
- if (req.headers.referer === 'whoami') {
19
- const username = req.remote_user.name; // FIXME: this service should return 401 if user missing
20
- // if (!username) {
21
- // debug('whoami: user not found');
22
- // return next(getUnauthorized('Unauthorized'));
23
- // }
24
-
25
- debug('whoami: logged by user');
26
- return next({
27
- username: username
28
- });
29
- } else {
30
- debug('whoami: redirect next route'); // redirect to the route below
31
-
32
- return next('route');
17
+ route.get('/-/whoami', (req, _res, next) => {
18
+ var _req$remote_user;
19
+
20
+ // remote_user is set by the auth middleware
21
+ const username = req === null || req === void 0 ? void 0 : (_req$remote_user = req.remote_user) === null || _req$remote_user === void 0 ? void 0 : _req$remote_user.name;
22
+
23
+ if (!username) {
24
+ debug('whoami: user not found');
25
+ return next(_core.errorUtils.getUnauthorized('Unauthorized'));
33
26
  }
34
- });
35
- route.get('/-/whoami', (req, res, next) => {
36
- const username = req.remote_user.name; // FIXME: this service should return 401 if user missing
37
- // if (!username) {
38
- // debug('whoami: user not found');
39
- // return next(getUnauthorized('Unauthorized'));
40
- // }
41
27
 
42
28
  debug('whoami: response %o', username);
43
29
  return next({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/whoami.ts"],"names":["debug","route","get","req","res","next","headers","referer","username","remote_user","name"],"mappings":";;;;;;;AAAA;;;;AAKA,MAAMA,KAAK,GAAG,oBAAW,oBAAX,CAAd;;AAEe,kBAAUC,KAAV,EAA+B;AAC5CA,EAAAA,KAAK,CAACC,GAAN,CAAU,SAAV,EAAqB,CAACC,GAAD,EAAsBC,GAAtB,EAAqCC,IAArC,KAAsE;AACzFL,IAAAA,KAAK,CAAC,kBAAD,CAAL;;AACA,QAAIG,GAAG,CAACG,OAAJ,CAAYC,OAAZ,KAAwB,QAA5B,EAAsC;AACpC,YAAMC,QAAQ,GAAGL,GAAG,CAACM,WAAJ,CAAgBC,IAAjC,CADoC,CAEpC;AACA;AACA;AACA;AACA;;AACAV,MAAAA,KAAK,CAAC,wBAAD,CAAL;AACA,aAAOK,IAAI,CAAC;AAAEG,QAAAA,QAAQ,EAAEA;AAAZ,OAAD,CAAX;AACD,KATD,MASO;AACLR,MAAAA,KAAK,CAAC,6BAAD,CAAL,CADK,CAEL;;AACA,aAAOK,IAAI,CAAC,OAAD,CAAX;AACD;AACF,GAhBD;AAkBAJ,EAAAA,KAAK,CAACC,GAAN,CAAU,WAAV,EAAuB,CAACC,GAAD,EAAsBC,GAAtB,EAAqCC,IAArC,KAAqE;AAC1F,UAAMG,QAAQ,GAAGL,GAAG,CAACM,WAAJ,CAAgBC,IAAjC,CAD0F,CAE1F;AACA;AACA;AACA;AACA;;AAEAV,IAAAA,KAAK,CAAC,qBAAD,EAAwBQ,QAAxB,CAAL;AACA,WAAOH,IAAI,CAAC;AAAEG,MAAAA,QAAQ,EAAEA;AAAZ,KAAD,CAAX;AACD,GAVD;AAWD","sourcesContent":["import buildDebug from 'debug';\nimport { Response, Router } from 'express';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router): void {\n route.get('/whoami', (req: $RequestExtend, res: Response, next: $NextFunctionVer): void => {\n debug('whoami: reditect');\n if (req.headers.referer === 'whoami') {\n const username = req.remote_user.name;\n // FIXME: this service should return 401 if user missing\n // if (!username) {\n // debug('whoami: user not found');\n // return next(getUnauthorized('Unauthorized'));\n // }\n debug('whoami: logged by user');\n return next({ username: username });\n } else {\n debug('whoami: redirect next route');\n // redirect to the route below\n return next('route');\n }\n });\n\n route.get('/-/whoami', (req: $RequestExtend, res: Response, next: $NextFunctionVer): any => {\n const username = req.remote_user.name;\n // FIXME: this service should return 401 if user missing\n // if (!username) {\n // debug('whoami: user not found');\n // return next(getUnauthorized('Unauthorized'));\n // }\n\n debug('whoami: response %o', username);\n return next({ username: username });\n });\n}\n"],"file":"whoami.js"}
1
+ {"version":3,"file":"whoami.js","names":["debug","buildDebug","route","get","req","_res","next","username","remote_user","name","errorUtils","getUnauthorized"],"sources":["../src/whoami.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Response, Router } from 'express';\n\nimport { errorUtils } from '@verdaccio/core';\n\nimport { $NextFunctionVer, $RequestExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:user');\n\nexport default function (route: Router): void {\n route.get('/-/whoami', (req: $RequestExtend, _res: Response, next: $NextFunctionVer): any => {\n // remote_user is set by the auth middleware\n const username = req?.remote_user?.name;\n if (!username) {\n debug('whoami: user not found');\n return next(errorUtils.getUnauthorized('Unauthorized'));\n }\n\n debug('whoami: response %o', username);\n return next({ username: username });\n });\n}\n"],"mappings":";;;;;;;AAAA;;AAGA;;;;AAIA,MAAMA,KAAK,GAAG,IAAAC,cAAA,EAAW,oBAAX,CAAd;;AAEe,kBAAUC,KAAV,EAA+B;EAC5CA,KAAK,CAACC,GAAN,CAAU,WAAV,EAAuB,CAACC,GAAD,EAAsBC,IAAtB,EAAsCC,IAAtC,KAAsE;IAAA;;IAC3F;IACA,MAAMC,QAAQ,GAAGH,GAAH,aAAGA,GAAH,2CAAGA,GAAG,CAAEI,WAAR,qDAAG,iBAAkBC,IAAnC;;IACA,IAAI,CAACF,QAAL,EAAe;MACbP,KAAK,CAAC,wBAAD,CAAL;MACA,OAAOM,IAAI,CAACI,gBAAA,CAAWC,eAAX,CAA2B,cAA3B,CAAD,CAAX;IACD;;IAEDX,KAAK,CAAC,qBAAD,EAAwBO,QAAxB,CAAL;IACA,OAAOD,IAAI,CAAC;MAAEC,QAAQ,EAAEA;IAAZ,CAAD,CAAX;EACD,CAVD;AAWD"}
package/jest.config.js CHANGED
@@ -1,3 +1,10 @@
1
1
  const config = require('../../jest/config');
2
2
 
3
- module.exports = Object.assign({}, config, {});
3
+ module.exports = Object.assign({}, config, {
4
+ coverageThreshold: {
5
+ global: {
6
+ // FIXME: increase to 90
7
+ lines: 60,
8
+ },
9
+ },
10
+ });