@verdaccio/api 6.0.0-6-next.15 → 6.0.0-6-next.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +108 -0
- package/build/dist-tags.d.ts +1 -1
- package/build/dist-tags.js +10 -10
- package/build/dist-tags.js.map +1 -1
- package/build/index.js +16 -10
- package/build/index.js.map +1 -1
- package/build/package.d.ts +1 -2
- package/build/package.js +30 -63
- package/build/package.js.map +1 -1
- package/build/ping.js.map +1 -1
- package/build/publish.d.ts +2 -2
- package/build/publish.js +28 -34
- package/build/publish.js.map +1 -1
- package/build/search.js +2 -2
- package/build/search.js.map +1 -1
- package/build/star.d.ts +1 -1
- package/build/star.js +9 -15
- package/build/star.js.map +1 -1
- package/build/stars.js +3 -3
- package/build/stars.js.map +1 -1
- package/build/user.d.ts +1 -1
- package/build/user.js +17 -17
- package/build/user.js.map +1 -1
- package/build/utils.js.map +1 -1
- package/build/v1/profile.js +10 -10
- package/build/v1/profile.js.map +1 -1
- package/build/v1/search.js +16 -7
- package/build/v1/search.js.map +1 -1
- package/build/v1/token.d.ts +1 -1
- package/build/v1/token.js +17 -23
- package/build/v1/token.js.map +1 -1
- package/build/whoami.js +0 -1
- package/build/whoami.js.map +1 -1
- package/package.json +18 -19
- package/src/dist-tags.ts +14 -13
- package/src/index.ts +16 -10
- package/src/package.ts +38 -57
- package/src/ping.ts +2 -1
- package/src/publish.ts +18 -11
- package/src/search.ts +1 -1
- package/src/star.ts +4 -3
- package/src/stars.ts +4 -4
- package/src/user.ts +13 -13
- package/src/utils.ts +2 -1
- package/src/v1/profile.ts +10 -9
- package/src/v1/search.ts +14 -7
- package/src/v1/token.ts +17 -16
- package/src/whoami.ts +3 -3
- package/test/integration/_helper.ts +7 -5
- package/test/integration/package.spec.ts +3 -2
- package/test/integration/ping.spec.ts +2 -1
- package/test/integration/publish.spec.ts +6 -9
- package/test/integration/user.spec.ts +9 -11
- package/test/integration/whoami.spec.ts +1 -1
- package/test/unit/publish.spec.ts +6 -6
- package/test/unit/validate.api.params.middleware.spec.ts +1 -1
- package/tsconfig.json +0 -3
- package/types/custom.d.ts +2 -1
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","
|
|
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"}
|
package/build/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts"],"names":["isPublishablePackage","pkg","keys","Object","_","includes","isRelatedToDeprecation","pkgInfo","versions","version","prototype","hasOwnProperty","call"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"names":["isPublishablePackage","pkg","keys","Object","_","includes","isRelatedToDeprecation","pkgInfo","versions","version","prototype","hasOwnProperty","call"],"mappings":";;;;;;;;AAAA;;;;AAIA;AACA;AACA;AACA;AAEO,SAASA,oBAAT,CAA8BC,GAA9B,EAAqD;AAC1D,QAAMC,IAAc,GAAGC,MAAM,CAACD,IAAP,CAAYD,GAAZ,CAAvB;AAEA,SAAOG,gBAAEC,QAAF,CAAWH,IAAX,EAAiB,UAAjB,CAAP;AACD;;AAEM,SAASI,sBAAT,CAAgCC,OAAhC,EAA2D;AAChE,QAAM;AAAEC,IAAAA;AAAF,MAAeD,OAArB;;AACA,OAAK,MAAME,OAAX,IAAsBD,QAAtB,EAAgC;AAC9B,QAAIL,MAAM,CAACO,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCJ,QAAQ,CAACC,OAAD,CAA7C,EAAwD,YAAxD,CAAJ,EAA2E;AACzE,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD","sourcesContent":["import _ from 'lodash';\n\nimport { Package } from '@verdaccio/types';\n\n/**\n * Check whether the package metadta has enough data to be published\n * @param pkg metadata\n */\n\nexport function isPublishablePackage(pkg: Package): boolean {\n const keys: string[] = Object.keys(pkg);\n\n return _.includes(keys, 'versions');\n}\n\nexport function isRelatedToDeprecation(pkgInfo: Package): boolean {\n const { versions } = pkgInfo;\n for (const version in versions) {\n if (Object.prototype.hasOwnProperty.call(versions[version], 'deprecated')) {\n return true;\n }\n }\n return false;\n}\n"],"file":"utils.js"}
|
package/build/v1/profile.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.default = _default;
|
|
|
7
7
|
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _core = require("@verdaccio/core");
|
|
11
11
|
|
|
12
12
|
var _utils = require("@verdaccio/utils");
|
|
13
13
|
|
|
@@ -32,16 +32,16 @@ function _default(route, auth) {
|
|
|
32
32
|
return next(buildProfile(req.remote_user.name));
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
res.status(
|
|
35
|
+
res.status(_core.HTTP_STATUS.UNAUTHORIZED);
|
|
36
36
|
return next({
|
|
37
|
-
message:
|
|
37
|
+
message: _core.API_ERROR.MUST_BE_LOGGED
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
40
|
route.post('/-/npm/v1/user', function (req, res, next) {
|
|
41
41
|
if (_lodash.default.isNil(req.remote_user.name)) {
|
|
42
|
-
res.status(
|
|
42
|
+
res.status(_core.HTTP_STATUS.UNAUTHORIZED);
|
|
43
43
|
return next({
|
|
44
|
-
message:
|
|
44
|
+
message: _core.API_ERROR.MUST_BE_LOGGED
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -56,25 +56,25 @@ function _default(route, auth) {
|
|
|
56
56
|
if (_lodash.default.isNil(password) === false) {
|
|
57
57
|
if ((0, _utils.validatePassword)(password.new) === false) {
|
|
58
58
|
/* eslint new-cap:off */
|
|
59
|
-
return next(
|
|
59
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.UNAUTHORIZED, _core.API_ERROR.PASSWORD_SHORT()));
|
|
60
60
|
/* eslint new-cap:off */
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
auth.changePassword(name, password.old, password.new, (err, isUpdated) => {
|
|
64
64
|
if (_lodash.default.isNull(err) === false) {
|
|
65
|
-
return next(
|
|
65
|
+
return next(_core.errorUtils.getCode(err.status, err.message) || _core.errorUtils.getConflict(err.message));
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
if (isUpdated) {
|
|
69
69
|
return next(buildProfile(req.remote_user.name));
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
return next(
|
|
72
|
+
return next(_core.errorUtils.getInternalError(_core.API_ERROR.INTERNAL_SERVER_ERROR));
|
|
73
73
|
});
|
|
74
74
|
} else if (_lodash.default.isNil(tfa) === false) {
|
|
75
|
-
return next(
|
|
75
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.SERVICE_UNAVAILABLE, _core.SUPPORT_ERRORS.TFA_DISABLED));
|
|
76
76
|
} else {
|
|
77
|
-
return next(
|
|
77
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.INTERNAL_ERROR, _core.APP_ERROR.PROFILE_ERROR));
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
}
|
package/build/v1/profile.js.map
CHANGED
|
@@ -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","
|
|
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"}
|
package/build/v1/search.js
CHANGED
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
7
|
|
|
8
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
+
|
|
8
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
11
|
|
|
10
|
-
var
|
|
12
|
+
var _core = require("@verdaccio/core");
|
|
11
13
|
|
|
12
14
|
var _logger = require("@verdaccio/logger");
|
|
13
15
|
|
|
14
|
-
var _commonsApi = require("@verdaccio/commons-api");
|
|
15
|
-
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
18
|
const debug = (0, _debug.default)('verdaccio:api:search');
|
|
@@ -48,8 +48,16 @@ function _default(route, auth, storage) {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
route.get('/-/v1/search', async (req, res, next) => {
|
|
51
|
-
|
|
51
|
+
const {
|
|
52
|
+
query,
|
|
53
|
+
url
|
|
54
|
+
} = req;
|
|
55
|
+
let [size, from] = ['size', 'from'].map(k => query[k]);
|
|
52
56
|
let data;
|
|
57
|
+
const abort = new AbortController();
|
|
58
|
+
req.on('aborted', () => {
|
|
59
|
+
abort.abort();
|
|
60
|
+
});
|
|
53
61
|
size = parseInt(size, 10) || 20;
|
|
54
62
|
from = parseInt(from, 10) || 0;
|
|
55
63
|
|
|
@@ -57,8 +65,9 @@ function _default(route, auth, storage) {
|
|
|
57
65
|
var _storage$searchManage;
|
|
58
66
|
|
|
59
67
|
data = await ((_storage$searchManage = storage.searchManager) === null || _storage$searchManage === void 0 ? void 0 : _storage$searchManage.search({
|
|
60
|
-
query
|
|
61
|
-
url
|
|
68
|
+
query,
|
|
69
|
+
url,
|
|
70
|
+
abort
|
|
62
71
|
}));
|
|
63
72
|
debug('stream finish');
|
|
64
73
|
const checkAccessPromises = await Promise.all(data.map(pkgItem => {
|
|
@@ -73,7 +82,7 @@ function _default(route, auth, storage) {
|
|
|
73
82
|
total: final.length,
|
|
74
83
|
time: new Date().toUTCString()
|
|
75
84
|
};
|
|
76
|
-
res.status(
|
|
85
|
+
res.status(_core.HTTP_STATUS.OK).json(response);
|
|
77
86
|
} catch (error) {
|
|
78
87
|
_logger.logger.error({
|
|
79
88
|
error
|
package/build/v1/search.js.map
CHANGED
|
@@ -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","size","from","map","k","
|
|
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"}
|
package/build/v1/token.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import { Config, Token } from '@verdaccio/types';
|
|
3
2
|
import { IAuth } from '@verdaccio/auth';
|
|
4
3
|
import { Storage } from '@verdaccio/store';
|
|
4
|
+
import { Config, Token } from '@verdaccio/types';
|
|
5
5
|
export declare type NormalizeToken = Token & {
|
|
6
6
|
created: string;
|
|
7
7
|
};
|
package/build/v1/token.js
CHANGED
|
@@ -7,26 +7,20 @@ exports.default = _default;
|
|
|
7
7
|
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
9
|
|
|
10
|
-
var _commonsApi = require("@verdaccio/commons-api");
|
|
11
|
-
|
|
12
|
-
var _utils = require("@verdaccio/utils");
|
|
13
|
-
|
|
14
10
|
var _auth = require("@verdaccio/auth");
|
|
15
11
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
var _core = require("@verdaccio/core");
|
|
19
13
|
|
|
20
|
-
|
|
14
|
+
var _logger = require("@verdaccio/logger");
|
|
21
15
|
|
|
22
|
-
|
|
16
|
+
var _utils = require("@verdaccio/utils");
|
|
23
17
|
|
|
24
|
-
function
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
19
|
|
|
26
20
|
function normalizeToken(token) {
|
|
27
|
-
return
|
|
21
|
+
return { ...token,
|
|
28
22
|
created: new Date(token.created).toISOString()
|
|
29
|
-
}
|
|
23
|
+
};
|
|
30
24
|
} // https://github.com/npm/npm-profile/blob/latest/lib/index.js
|
|
31
25
|
|
|
32
26
|
|
|
@@ -47,7 +41,7 @@ function _default(route, auth, storage, config) {
|
|
|
47
41
|
totalTokens
|
|
48
42
|
}, 'token list retrieved: @{totalTokens}');
|
|
49
43
|
|
|
50
|
-
res.status(
|
|
44
|
+
res.status(_core.HTTP_STATUS.OK);
|
|
51
45
|
return next({
|
|
52
46
|
objects: tokens.map(normalizeToken),
|
|
53
47
|
urls: {
|
|
@@ -60,11 +54,11 @@ function _default(route, auth, storage, config) {
|
|
|
60
54
|
error: error.msg
|
|
61
55
|
}, 'token list has failed: @{error}');
|
|
62
56
|
|
|
63
|
-
return next(
|
|
57
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.INTERNAL_ERROR, error.message));
|
|
64
58
|
}
|
|
65
59
|
}
|
|
66
60
|
|
|
67
|
-
return next(
|
|
61
|
+
return next(_core.errorUtils.getUnauthorized());
|
|
68
62
|
});
|
|
69
63
|
route.post('/-/npm/v1/tokens', function (req, res, next) {
|
|
70
64
|
const {
|
|
@@ -77,26 +71,26 @@ function _default(route, auth, storage, config) {
|
|
|
77
71
|
} = req.remote_user;
|
|
78
72
|
|
|
79
73
|
if (!_lodash.default.isBoolean(readonly) || !_lodash.default.isArray(cidr_whitelist)) {
|
|
80
|
-
return next(
|
|
74
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.BAD_DATA, _core.SUPPORT_ERRORS.PARAMETERS_NOT_VALID));
|
|
81
75
|
}
|
|
82
76
|
|
|
83
77
|
auth.authenticate(name, password, async (err, user) => {
|
|
84
78
|
if (err) {
|
|
85
|
-
const errorCode = err.message ?
|
|
86
|
-
return next(
|
|
79
|
+
const errorCode = err.message ? _core.HTTP_STATUS.UNAUTHORIZED : _core.HTTP_STATUS.INTERNAL_ERROR;
|
|
80
|
+
return next(_core.errorUtils.getCode(errorCode, err.message));
|
|
87
81
|
}
|
|
88
82
|
|
|
89
83
|
req.remote_user = user;
|
|
90
84
|
|
|
91
85
|
if (!_lodash.default.isFunction(storage.saveToken)) {
|
|
92
|
-
return next(
|
|
86
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.NOT_IMPLEMENTED, _core.SUPPORT_ERRORS.STORAGE_NOT_IMPLEMENT));
|
|
93
87
|
}
|
|
94
88
|
|
|
95
89
|
try {
|
|
96
90
|
const token = await (0, _auth.getApiToken)(auth, config, user, password);
|
|
97
91
|
|
|
98
92
|
if (!token) {
|
|
99
|
-
throw
|
|
93
|
+
throw _core.errorUtils.getInternalError();
|
|
100
94
|
}
|
|
101
95
|
|
|
102
96
|
const key = (0, _utils.stringToMD5)(token); // TODO: use a utility here
|
|
@@ -137,7 +131,7 @@ function _default(route, auth, storage, config) {
|
|
|
137
131
|
error: error.msg
|
|
138
132
|
}, 'token creation has failed: @{error}');
|
|
139
133
|
|
|
140
|
-
return next(
|
|
134
|
+
return next(_core.errorUtils.getInternalError(error.message));
|
|
141
135
|
}
|
|
142
136
|
});
|
|
143
137
|
});
|
|
@@ -170,11 +164,11 @@ function _default(route, auth, storage, config) {
|
|
|
170
164
|
error: error.msg
|
|
171
165
|
}, 'token creation has failed: @{error}');
|
|
172
166
|
|
|
173
|
-
return next(
|
|
167
|
+
return next(_core.errorUtils.getCode(_core.HTTP_STATUS.INTERNAL_ERROR, error.message));
|
|
174
168
|
}
|
|
175
169
|
}
|
|
176
170
|
|
|
177
|
-
return next(
|
|
171
|
+
return next(_core.errorUtils.getUnauthorized());
|
|
178
172
|
});
|
|
179
173
|
}
|
|
180
174
|
//# sourceMappingURL=token.js.map
|
package/build/v1/token.js.map
CHANGED
|
@@ -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","
|
|
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":";;;;;;;AACA;;AAEA;;AAEA;;AACA;;AAGA;;;;AAQA,SAASA,cAAT,CAAwBC,KAAxB,EAAsD;AACpD,SAAO,EACL,GAAGA,KADE;AAELC,IAAAA,OAAO,EAAE,IAAIC,IAAJ,CAASF,KAAK,CAACC,OAAf,EAAwBE,WAAxB;AAFJ,GAAP;AAID,C,CAED;;;AACe,kBAAUC,KAAV,EAAyBC,IAAzB,EAAsCC,OAAtC,EAAwDC,MAAxD,EAA8E;AAC3FH,EAAAA,KAAK,CAACI,GAAN,CACE,kBADF,EAEE,gBAAgBC,GAAhB,EAAqCC,GAArC,EAAoDC,IAApD,EAA4E;AAC1E,UAAM;AAAEC,MAAAA;AAAF,QAAWH,GAAG,CAACI,WAArB;;AAEA,QAAIC,gBAAEC,KAAF,CAAQH,IAAR,MAAkB,KAAtB,EAA6B;AAC3B,UAAI;AACF,cAAMI,MAAM,GAAG,MAAMV,OAAO,CAACW,UAAR,CAAmB;AAAEC,UAAAA,IAAI,EAAEN;AAAR,SAAnB,CAArB;AACA,cAAMO,WAAW,GAAGH,MAAM,CAACI,MAA3B;;AACAC,uBAAOC,KAAP,CAAa;AAAEH,UAAAA;AAAF,SAAb,EAA8B,sCAA9B;;AAEAT,QAAAA,GAAG,CAACa,MAAJ,CAAWC,kBAAYC,EAAvB;AACA,eAAOd,IAAI,CAAC;AACVe,UAAAA,OAAO,EAAEV,MAAM,CAACW,GAAP,CAAW5B,cAAX,CADC;AAEV6B,UAAAA,IAAI,EAAE;AACJjB,YAAAA,IAAI,EAAE,EADF,CACM;;AADN;AAFI,SAAD,CAAX;AAMD,OAZD,CAYE,OAAOkB,KAAP,EAAmB;AACnBR,uBAAOQ,KAAP,CAAa;AAAEA,UAAAA,KAAK,EAAEA,KAAK,CAACC;AAAf,SAAb,EAAmC,iCAAnC;;AACA,eAAOnB,IAAI,CAACoB,iBAAWC,OAAX,CAAmBR,kBAAYS,cAA/B,EAA+CJ,KAAK,CAACK,OAArD,CAAD,CAAX;AACD;AACF;;AACD,WAAOvB,IAAI,CAACoB,iBAAWI,eAAX,EAAD,CAAX;AACD,GAxBH;AA2BA/B,EAAAA,KAAK,CAACgC,IAAN,CACE,kBADF,EAEE,UAAU3B,GAAV,EAA+BC,GAA/B,EAA8CC,IAA9C,EAAsE;AACpE,UAAM;AAAE0B,MAAAA,QAAF;AAAYC,MAAAA,QAAZ;AAAsBC,MAAAA;AAAtB,QAAyC9B,GAAG,CAAC+B,IAAnD;AACA,UAAM;AAAE5B,MAAAA;AAAF,QAAWH,GAAG,CAACI,WAArB;;AAEA,QAAI,CAACC,gBAAE2B,SAAF,CAAYH,QAAZ,CAAD,IAA0B,CAACxB,gBAAE4B,OAAF,CAAUH,cAAV,CAA/B,EAA0D;AACxD,aAAO5B,IAAI,CAACoB,iBAAWC,OAAX,CAAmBR,kBAAYmB,QAA/B,EAAyCC,qBAAeC,oBAAxD,CAAD,CAAX;AACD;;AAEDxC,IAAAA,IAAI,CAACyC,YAAL,CAAkBlC,IAAlB,EAAwByB,QAAxB,EAAkC,OAAOU,GAAP,EAAY7B,IAAZ,KAAiC;AACjE,UAAI6B,GAAJ,EAAS;AACP,cAAMC,SAAS,GAAGD,GAAG,CAACb,OAAJ,GAAcV,kBAAYyB,YAA1B,GAAyCzB,kBAAYS,cAAvE;AACA,eAAOtB,IAAI,CAACoB,iBAAWC,OAAX,CAAmBgB,SAAnB,EAA8BD,GAAG,CAACb,OAAlC,CAAD,CAAX;AACD;;AAEDzB,MAAAA,GAAG,CAACI,WAAJ,GAAkBK,IAAlB;;AAEA,UAAI,CAACJ,gBAAEoC,UAAF,CAAa5C,OAAO,CAAC6C,SAArB,CAAL,EAAsC;AACpC,eAAOxC,IAAI,CACToB,iBAAWC,OAAX,CAAmBR,kBAAY4B,eAA/B,EAAgDR,qBAAeS,qBAA/D,CADS,CAAX;AAGD;;AAED,UAAI;AACF,cAAMrD,KAAK,GAAG,MAAM,uBAAYK,IAAZ,EAAkBE,MAAlB,EAA0BW,IAA1B,EAAgCmB,QAAhC,CAApB;;AACA,YAAI,CAACrC,KAAL,EAAY;AACV,gBAAM+B,iBAAWuB,gBAAX,EAAN;AACD;;AAED,cAAMC,GAAG,GAAG,wBAAYvD,KAAZ,CAAZ,CANE,CAOF;;AACA,cAAMwD,WAAW,GAAG,iBAAKxD,KAAL,EAAY,CAAZ,CAApB;AACA,cAAMC,OAAO,GAAG,IAAIC,IAAJ,GAAWuD,OAAX,EAAhB;AAEA;AACV;AACA;AACA;AACA;;AACU,cAAMN,SAAgB,GAAG;AACvBjC,UAAAA,IAAI,EAAEN,IADiB;AAEvBZ,UAAAA,KAAK,EAAEwD,WAFgB;AAGvBD,UAAAA,GAHuB;AAIvBG,UAAAA,IAAI,EAAEnB,cAJiB;AAKvBD,UAAAA,QALuB;AAMvBrC,UAAAA;AANuB,SAAzB;AASA,cAAMK,OAAO,CAAC6C,SAAR,CAAkBA,SAAlB,CAAN;;AACA9B,uBAAOC,KAAP,CAAa;AAAEiC,UAAAA,GAAF;AAAO3C,UAAAA;AAAP,SAAb,EAA4B,2CAA5B;;AACA,eAAOD,IAAI,CACTZ,cAAc,CAAC;AACbC,UAAAA,KADa;AAEbkB,UAAAA,IAAI,EAAEN,IAFO;AAGb2C,UAAAA,GAAG,EAAEJ,SAAS,CAACI,GAHF;AAIbG,UAAAA,IAAI,EAAEnB,cAJO;AAKbD,UAAAA,QALa;AAMbrC,UAAAA,OAAO,EAAEkD,SAAS,CAAClD;AANN,SAAD,CADL,CAAX;AAUD,OArCD,CAqCE,OAAO4B,KAAP,EAAmB;AACnBR,uBAAOQ,KAAP,CAAa;AAAEA,UAAAA,KAAK,EAAEA,KAAK,CAACC;AAAf,SAAb,EAAmC,qCAAnC;;AACA,eAAOnB,IAAI,CAACoB,iBAAWuB,gBAAX,CAA4BzB,KAAK,CAACK,OAAlC,CAAD,CAAX;AACD;AACF,KAvDD;AAwDD,GAlEH;AAqEA9B,EAAAA,KAAK,CAACuD,MAAN,CACE,kCADF,EAEE,OAAOlD,GAAP,EAA4BC,GAA5B,EAA2CC,IAA3C,KAAsE;AACpE,UAAM;AACJiD,MAAAA,MAAM,EAAE;AAAEC,QAAAA;AAAF;AADJ,QAEFpD,GAFJ;AAGA,UAAM;AAAEG,MAAAA;AAAF,QAAWH,GAAG,CAACI,WAArB;;AAEA,QAAIC,gBAAEC,KAAF,CAAQH,IAAR,MAAkB,KAAtB,EAA6B;AAC3BS,qBAAOC,KAAP,CAAa;AAAEV,QAAAA;AAAF,OAAb,EAAuB,sCAAvB;;AACA,UAAI;AACF,cAAMN,OAAO,CAACwD,WAAR,CAAoBlD,IAApB,EAA0BiD,QAA1B,CAAN;;AACAxC,uBAAO0C,IAAP,CAAY;AAAEF,UAAAA,QAAF;AAAYjD,UAAAA;AAAZ,SAAZ,EAAgC,mDAAhC;;AACA,eAAOD,IAAI,CAAC,EAAD,CAAX;AACD,OAJD,CAIE,OAAOkB,KAAP,EAAmB;AACnBR,uBAAOQ,KAAP,CAAa;AAAEA,UAAAA,KAAK,EAAEA,KAAK,CAACC;AAAf,SAAb,EAAmC,qCAAnC;;AACA,eAAOnB,IAAI,CAACoB,iBAAWC,OAAX,CAAmBR,kBAAYS,cAA/B,EAA+CJ,KAAK,CAACK,OAArD,CAAD,CAAX;AACD;AACF;;AACD,WAAOvB,IAAI,CAACoB,iBAAWI,eAAX,EAAD,CAAX;AACD,GApBH;AAsBD","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"}
|
package/build/whoami.js
CHANGED
|
@@ -9,7 +9,6 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
9
9
|
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
11
|
|
|
12
|
-
// import { getUnauthorized } from '@verdaccio/commons-api';
|
|
13
12
|
const debug = (0, _debug.default)('verdaccio:api:user');
|
|
14
13
|
|
|
15
14
|
function _default(route) {
|
package/build/whoami.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/whoami.ts"],"names":["debug","route","get","req","res","next","headers","referer","username","remote_user","name"],"mappings":";;;;;;;
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/api",
|
|
3
|
-
"version": "6.0.0-6-next.
|
|
3
|
+
"version": "6.0.0-6-next.19",
|
|
4
4
|
"description": "loaders logic",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -25,34 +25,33 @@
|
|
|
25
25
|
"verdaccio"
|
|
26
26
|
],
|
|
27
27
|
"engines": {
|
|
28
|
-
"node": ">=
|
|
28
|
+
"node": ">=14",
|
|
29
29
|
"npm": ">=6"
|
|
30
30
|
},
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@verdaccio/auth": "6.0.0-6-next.
|
|
34
|
-
"@verdaccio/
|
|
35
|
-
"@verdaccio/
|
|
36
|
-
"@verdaccio/
|
|
37
|
-
"@verdaccio/
|
|
38
|
-
"@verdaccio/
|
|
39
|
-
"@verdaccio/
|
|
40
|
-
"@verdaccio/
|
|
41
|
-
"
|
|
42
|
-
"@verdaccio/utils": "6.0.0-6-next.6",
|
|
33
|
+
"@verdaccio/auth": "6.0.0-6-next.16",
|
|
34
|
+
"@verdaccio/config": "6.0.0-6-next.12",
|
|
35
|
+
"@verdaccio/core": "6.0.0-6-next.4",
|
|
36
|
+
"@verdaccio/hooks": "6.0.0-6-next.10",
|
|
37
|
+
"@verdaccio/logger": "6.0.0-6-next.8",
|
|
38
|
+
"@verdaccio/middleware": "6.0.0-6-next.16",
|
|
39
|
+
"@verdaccio/store": "6.0.0-6-next.17",
|
|
40
|
+
"@verdaccio/utils": "6.0.0-6-next.10",
|
|
41
|
+
"abortcontroller-polyfill": "1.7.3",
|
|
43
42
|
"cookies": "0.8.0",
|
|
44
|
-
"debug": "4.3.
|
|
43
|
+
"debug": "4.3.3",
|
|
44
|
+
"body-parser": "1.19.1",
|
|
45
45
|
"express": "4.17.1",
|
|
46
46
|
"lodash": "4.17.21",
|
|
47
|
-
"mime": "2.
|
|
47
|
+
"mime": "2.6.0",
|
|
48
48
|
"semver": "7.3.5"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@types/node": "16.
|
|
52
|
-
"@verdaccio/server": "6.0.0-6-next.
|
|
53
|
-
"@verdaccio/types": "11.0.0-6-next.
|
|
54
|
-
"
|
|
55
|
-
"lodash": "4.17.21",
|
|
51
|
+
"@types/node": "16.11.12",
|
|
52
|
+
"@verdaccio/server": "6.0.0-6-next.24",
|
|
53
|
+
"@verdaccio/types": "11.0.0-6-next.10",
|
|
54
|
+
"@verdaccio/helper": "1.0.0",
|
|
56
55
|
"supertest": "6.1.6"
|
|
57
56
|
},
|
|
58
57
|
"funding": {
|
package/src/dist-tags.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import mime from 'mime';
|
|
2
|
-
import _ from 'lodash';
|
|
3
1
|
import { Router } from 'express';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import mime from 'mime';
|
|
4
4
|
|
|
5
|
-
import { media, allow } from '@verdaccio/middleware';
|
|
6
|
-
import { API_MESSAGE, HTTP_STATUS, DIST_TAGS, VerdaccioError } from '@verdaccio/commons-api';
|
|
7
|
-
import { Package } from '@verdaccio/types';
|
|
8
|
-
import { Storage } from '@verdaccio/store';
|
|
9
5
|
import { IAuth } from '@verdaccio/auth';
|
|
6
|
+
import { VerdaccioError, constants } from '@verdaccio/core';
|
|
7
|
+
import { allow, media } from '@verdaccio/middleware';
|
|
8
|
+
import { Storage } from '@verdaccio/store';
|
|
9
|
+
import { Package } from '@verdaccio/types';
|
|
10
|
+
|
|
10
11
|
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';
|
|
11
12
|
|
|
12
13
|
export default function (route: Router, auth: IAuth, storage: Storage): void {
|
|
@@ -26,8 +27,8 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
|
|
|
26
27
|
if (err) {
|
|
27
28
|
return next(err);
|
|
28
29
|
}
|
|
29
|
-
res.status(HTTP_STATUS.CREATED);
|
|
30
|
-
return next({ ok: API_MESSAGE.TAG_ADDED });
|
|
30
|
+
res.status(constants.HTTP_STATUS.CREATED);
|
|
31
|
+
return next({ ok: constants.API_MESSAGE.TAG_ADDED });
|
|
31
32
|
});
|
|
32
33
|
};
|
|
33
34
|
|
|
@@ -58,9 +59,9 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
|
|
|
58
59
|
if (err) {
|
|
59
60
|
return next(err);
|
|
60
61
|
}
|
|
61
|
-
res.status(HTTP_STATUS.CREATED);
|
|
62
|
+
res.status(constants.HTTP_STATUS.CREATED);
|
|
62
63
|
return next({
|
|
63
|
-
ok: API_MESSAGE.TAG_REMOVED,
|
|
64
|
+
ok: constants.API_MESSAGE.TAG_REMOVED,
|
|
64
65
|
});
|
|
65
66
|
});
|
|
66
67
|
}
|
|
@@ -79,7 +80,7 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
|
|
|
79
80
|
return next(err);
|
|
80
81
|
}
|
|
81
82
|
|
|
82
|
-
next(info[DIST_TAGS]);
|
|
83
|
+
next(info[constants.DIST_TAGS]);
|
|
83
84
|
},
|
|
84
85
|
});
|
|
85
86
|
}
|
|
@@ -96,9 +97,9 @@ export default function (route: Router, auth: IAuth, storage: Storage): void {
|
|
|
96
97
|
if (err) {
|
|
97
98
|
return next(err);
|
|
98
99
|
}
|
|
99
|
-
res.status(HTTP_STATUS.CREATED);
|
|
100
|
+
res.status(constants.HTTP_STATUS.CREATED);
|
|
100
101
|
return next({
|
|
101
|
-
ok: API_MESSAGE.TAG_UPDATED,
|
|
102
|
+
ok: constants.API_MESSAGE.TAG_UPDATED,
|
|
102
103
|
});
|
|
103
104
|
}
|
|
104
105
|
);
|
package/src/index.ts
CHANGED
|
@@ -1,27 +1,33 @@
|
|
|
1
|
+
import bodyParser from 'body-parser';
|
|
1
2
|
import express, { Router } from 'express';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
|
|
5
|
+
import { IAuth } from '@verdaccio/auth';
|
|
2
6
|
import {
|
|
7
|
+
antiLoop,
|
|
8
|
+
encodeScopePackage,
|
|
3
9
|
match,
|
|
4
10
|
validateName,
|
|
5
11
|
validatePackage,
|
|
6
|
-
encodeScopePackage,
|
|
7
|
-
antiLoop,
|
|
8
12
|
} from '@verdaccio/middleware';
|
|
9
|
-
import { IAuth } from '@verdaccio/auth';
|
|
10
13
|
import { Storage } from '@verdaccio/store';
|
|
11
14
|
import { Config } from '@verdaccio/types';
|
|
12
|
-
import bodyParser from 'body-parser';
|
|
13
15
|
|
|
14
|
-
import whoami from './whoami';
|
|
15
|
-
import ping from './ping';
|
|
16
|
-
import user from './user';
|
|
17
16
|
import distTags from './dist-tags';
|
|
17
|
+
import pkg from './package';
|
|
18
|
+
import ping from './ping';
|
|
18
19
|
import publish from './publish';
|
|
19
20
|
import search from './search';
|
|
20
|
-
import pkg from './package';
|
|
21
21
|
import stars from './stars';
|
|
22
|
+
import user from './user';
|
|
22
23
|
import profile from './v1/profile';
|
|
23
|
-
import token from './v1/token';
|
|
24
24
|
import v1Search from './v1/search';
|
|
25
|
+
import token from './v1/token';
|
|
26
|
+
import whoami from './whoami';
|
|
27
|
+
|
|
28
|
+
if (semver.lte(process.version, 'v15.0.0')) {
|
|
29
|
+
global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;
|
|
30
|
+
}
|
|
25
31
|
|
|
26
32
|
export default function (config: Config, auth: IAuth, storage: Storage): Router {
|
|
27
33
|
/* eslint new-cap:off */
|
|
@@ -50,7 +56,7 @@ export default function (config: Config, auth: IAuth, storage: Storage): Router
|
|
|
50
56
|
app.use(encodeScopePackage);
|
|
51
57
|
// for "npm whoami"
|
|
52
58
|
whoami(app);
|
|
53
|
-
pkg(app, auth, storage
|
|
59
|
+
pkg(app, auth, storage);
|
|
54
60
|
profile(app, auth);
|
|
55
61
|
// @deprecated endpoint, 404 by default
|
|
56
62
|
search(app);
|