@verdaccio/middleware 6.0.0-6-next.51 → 6.0.0-6-next.52
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
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @verdaccio/middleware
|
|
2
2
|
|
|
3
|
+
## 6.0.0-6-next.52
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f859d2b1a: fix: official package "-" cannot be synced
|
|
8
|
+
- Updated dependencies [f859d2b1a]
|
|
9
|
+
- @verdaccio/core@6.0.0-6-next.73
|
|
10
|
+
- @verdaccio/config@6.0.0-6-next.73
|
|
11
|
+
- @verdaccio/url@11.0.0-6-next.39
|
|
12
|
+
- @verdaccio/utils@6.0.0-6-next.41
|
|
13
|
+
|
|
3
14
|
## 6.0.0-6-next.51
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
|
@@ -6,25 +6,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.validateName = validateName;
|
|
7
7
|
exports.validatePackage = validatePackage;
|
|
8
8
|
var _core = require("@verdaccio/core");
|
|
9
|
-
var _utils = require("@verdaccio/utils");
|
|
10
9
|
function validateName(_req, _res, next, value, name) {
|
|
11
|
-
if (value
|
|
12
|
-
// special case in couchdb usually
|
|
13
|
-
next('route');
|
|
14
|
-
} else if ((0, _utils.validateName)(value)) {
|
|
10
|
+
if (_core.validationUtils.validateName(value)) {
|
|
15
11
|
next();
|
|
16
12
|
} else {
|
|
17
|
-
next(_core.errorUtils.
|
|
13
|
+
next(_core.errorUtils.getBadRequest('invalid ' + name));
|
|
18
14
|
}
|
|
19
15
|
}
|
|
20
16
|
function validatePackage(_req, _res, next, value, name) {
|
|
21
|
-
if (value
|
|
22
|
-
// special case in couchdb usually
|
|
23
|
-
next('route');
|
|
24
|
-
} else if ((0, _utils.validatePackage)(value)) {
|
|
17
|
+
if (_core.validationUtils.validatePackage(value)) {
|
|
25
18
|
next();
|
|
26
19
|
} else {
|
|
27
|
-
next(_core.errorUtils.
|
|
20
|
+
next(_core.errorUtils.getBadRequest('invalid ' + name));
|
|
28
21
|
}
|
|
29
22
|
}
|
|
30
23
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":["_core","require","
|
|
1
|
+
{"version":3,"file":"validation.js","names":["_core","require","validateName","_req","_res","next","value","name","validationUtils","errorUtils","getBadRequest","validatePackage"],"sources":["../../src/middlewares/validation.ts"],"sourcesContent":["import { errorUtils, validationUtils } from '@verdaccio/core';\n\nexport function validateName(_req, _res, next, value: string, name: string) {\n if (validationUtils.validateName(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n\nexport function validatePackage(_req, _res, next, value: string, name: string) {\n if (validationUtils.validatePackage(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEO,SAASC,YAAYA,CAACC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,KAAa,EAAEC,IAAY,EAAE;EAC1E,IAAIC,qBAAe,CAACN,YAAY,CAACI,KAAK,CAAC,EAAE;IACvCD,IAAI,CAAC,CAAC;EACR,CAAC,MAAM;IACLA,IAAI,CAACI,gBAAU,CAACC,aAAa,CAAC,UAAU,GAAGH,IAAI,CAAC,CAAC;EACnD;AACF;AAEO,SAASI,eAAeA,CAACR,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,KAAa,EAAEC,IAAY,EAAE;EAC7E,IAAIC,qBAAe,CAACG,eAAe,CAACL,KAAK,CAAC,EAAE;IAC1CD,IAAI,CAAC,CAAC;EACR,CAAC,MAAM;IACLA,IAAI,CAACI,gBAAU,CAACC,aAAa,CAAC,UAAU,GAAGH,IAAI,CAAC,CAAC;EACnD;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/middleware",
|
|
3
|
-
"version": "6.0.0-6-next.
|
|
3
|
+
"version": "6.0.0-6-next.52",
|
|
4
4
|
"description": "express middleware utils",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"node": ">=12"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@verdaccio/core": "6.0.0-6-next.
|
|
33
|
-
"@verdaccio/utils": "6.0.0-6-next.
|
|
34
|
-
"@verdaccio/config": "6.0.0-6-next.
|
|
35
|
-
"@verdaccio/url": "11.0.0-6-next.
|
|
32
|
+
"@verdaccio/core": "6.0.0-6-next.73",
|
|
33
|
+
"@verdaccio/utils": "6.0.0-6-next.41",
|
|
34
|
+
"@verdaccio/config": "6.0.0-6-next.73",
|
|
35
|
+
"@verdaccio/url": "11.0.0-6-next.39",
|
|
36
36
|
"debug": "4.3.4",
|
|
37
37
|
"lru-cache": "7.18.3",
|
|
38
38
|
"express": "4.18.2",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"url": "https://opencollective.com/verdaccio"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@verdaccio/logger": "6.0.0-6-next.
|
|
48
|
+
"@verdaccio/logger": "6.0.0-6-next.41",
|
|
49
49
|
"body-parser": "1.20.2",
|
|
50
50
|
"supertest": "6.3.3"
|
|
51
51
|
},
|
|
@@ -1,27 +1,17 @@
|
|
|
1
|
-
import { errorUtils } from '@verdaccio/core';
|
|
2
|
-
import {
|
|
3
|
-
validateName as utilValidateName,
|
|
4
|
-
validatePackage as utilValidatePackage,
|
|
5
|
-
} from '@verdaccio/utils';
|
|
1
|
+
import { errorUtils, validationUtils } from '@verdaccio/core';
|
|
6
2
|
|
|
7
3
|
export function validateName(_req, _res, next, value: string, name: string) {
|
|
8
|
-
if (value
|
|
9
|
-
// special case in couchdb usually
|
|
10
|
-
next('route');
|
|
11
|
-
} else if (utilValidateName(value)) {
|
|
4
|
+
if (validationUtils.validateName(value)) {
|
|
12
5
|
next();
|
|
13
6
|
} else {
|
|
14
|
-
next(errorUtils.
|
|
7
|
+
next(errorUtils.getBadRequest('invalid ' + name));
|
|
15
8
|
}
|
|
16
9
|
}
|
|
17
10
|
|
|
18
11
|
export function validatePackage(_req, _res, next, value: string, name: string) {
|
|
19
|
-
if (value
|
|
20
|
-
// special case in couchdb usually
|
|
21
|
-
next('route');
|
|
22
|
-
} else if (utilValidatePackage(value)) {
|
|
12
|
+
if (validationUtils.validatePackage(value)) {
|
|
23
13
|
next();
|
|
24
14
|
} else {
|
|
25
|
-
next(errorUtils.
|
|
15
|
+
next(errorUtils.getBadRequest('invalid ' + name));
|
|
26
16
|
}
|
|
27
17
|
}
|
package/test/params.spec.ts
CHANGED
|
@@ -2,55 +2,9 @@ import request from 'supertest';
|
|
|
2
2
|
|
|
3
3
|
import { HTTP_STATUS } from '@verdaccio/core';
|
|
4
4
|
|
|
5
|
-
import { match
|
|
5
|
+
import { match } from '../src';
|
|
6
6
|
import { getApp } from './helper';
|
|
7
7
|
|
|
8
|
-
describe('validate params', () => {
|
|
9
|
-
test('should validate package name', async () => {
|
|
10
|
-
const app = getApp([]);
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
app.param('package', validatePackage);
|
|
13
|
-
app.get('/pkg/:package', (req, res) => {
|
|
14
|
-
res.status(HTTP_STATUS.OK).json({});
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
return request(app).get('/pkg/react').expect(HTTP_STATUS.OK);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test('should fails validate package name', async () => {
|
|
21
|
-
const app = getApp([]);
|
|
22
|
-
// @ts-ignore
|
|
23
|
-
app.param('package', validatePackage);
|
|
24
|
-
app.get('/pkg/:package', (req, res) => {
|
|
25
|
-
res.status(HTTP_STATUS.OK).json({});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
return request(app).get('/pkg/node_modules').expect(HTTP_STATUS.FORBIDDEN);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
test('should fails file name package name', async () => {
|
|
32
|
-
const app = getApp([]);
|
|
33
|
-
// @ts-ignore
|
|
34
|
-
app.param('filename', validateName);
|
|
35
|
-
app.get('/file/:filename', (req, res) => {
|
|
36
|
-
res.status(HTTP_STATUS.OK).json({});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
return request(app).get('/file/__proto__').expect(HTTP_STATUS.FORBIDDEN);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
test('should validate file name package name', async () => {
|
|
43
|
-
const app = getApp([]);
|
|
44
|
-
// @ts-ignore
|
|
45
|
-
app.param('filename', validateName);
|
|
46
|
-
app.get('/file/:filename', (req, res) => {
|
|
47
|
-
res.status(HTTP_STATUS.OK).json({});
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
return request(app).get('/file/react.tar.gz').expect(HTTP_STATUS.OK);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
8
|
describe('match', () => {
|
|
55
9
|
test('should not match middleware', async () => {
|
|
56
10
|
const app = getApp([]);
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import request from 'supertest';
|
|
2
|
+
|
|
3
|
+
import { HTTP_STATUS } from '@verdaccio/core';
|
|
4
|
+
|
|
5
|
+
import { validateName, validatePackage } from '../src';
|
|
6
|
+
import { getApp } from './helper';
|
|
7
|
+
|
|
8
|
+
describe('validate package name middleware', () => {
|
|
9
|
+
test.each(['jquery', '-'])('%s should be valid package name', (pkg) => {
|
|
10
|
+
const app = getApp([]);
|
|
11
|
+
app.param('pkg', validatePackage);
|
|
12
|
+
app.get('/:pkg', (_req, res) => {
|
|
13
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
return request(app).get(`/${pkg}`).expect(HTTP_STATUS.OK);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test.each(['node_modules', '%'])('%s should be invalid package name', (pkg) => {
|
|
20
|
+
const app = getApp([]);
|
|
21
|
+
app.param('pkg', validatePackage);
|
|
22
|
+
app.get('/:pkg', (_req, res) => {
|
|
23
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
return request(app).get(`/${pkg}`).expect(HTTP_STATUS.BAD_REQUEST);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('should validate package name double level', async () => {
|
|
30
|
+
const app = getApp([]);
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
app.param('package', validatePackage);
|
|
33
|
+
app.get('/pkg/:package', (req, res) => {
|
|
34
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return request(app).get('/pkg/react').expect(HTTP_STATUS.OK);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('should fails validate package name double level', async () => {
|
|
41
|
+
const app = getApp([]);
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
app.param('package', validatePackage);
|
|
44
|
+
app.get('/pkg/:package', (req, res) => {
|
|
45
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return request(app).get('/pkg/node_modules').expect(HTTP_STATUS.BAD_REQUEST);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe('validate file name name middleware', () => {
|
|
53
|
+
test.each(['old-package@0.1.2.tgz', '--0.0.1.tgz'])('%s should be valid file name', (pkg) => {
|
|
54
|
+
const app = getApp([]);
|
|
55
|
+
app.param('pkg', validateName);
|
|
56
|
+
app.get('/:pkg', (_req, res) => {
|
|
57
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return request(app).get(`/${pkg}`).expect(HTTP_STATUS.OK);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test.each(['some%2Fthing', '.bin'])('%s should be invalid package name', (pkg) => {
|
|
64
|
+
const app = getApp([]);
|
|
65
|
+
app.param('pkg', validateName);
|
|
66
|
+
app.get('/:pkg', (_req, res) => {
|
|
67
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return request(app).get(`/${pkg}`).expect(HTTP_STATUS.BAD_REQUEST);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('should fails file name package name', async () => {
|
|
74
|
+
const app = getApp([]);
|
|
75
|
+
app.param('filename', validateName);
|
|
76
|
+
app.get('/file/:filename', (req, res) => {
|
|
77
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
return request(app).get('/file/__proto__').expect(HTTP_STATUS.BAD_REQUEST);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('should validate file name package name', async () => {
|
|
84
|
+
const app = getApp([]);
|
|
85
|
+
app.param('filename', validateName);
|
|
86
|
+
app.get('/file/:filename', (req, res) => {
|
|
87
|
+
res.status(HTTP_STATUS.OK).json({});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
return request(app).get('/file/react.tar.gz').expect(HTTP_STATUS.OK);
|
|
91
|
+
});
|
|
92
|
+
});
|