@verdaccio/web 8.1.0-next-8.12 → 8.1.0-next-8.13
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/README.md +80 -0
- package/package.json +22 -18
- package/.babelrc +0 -3
- package/CHANGELOG.md +0 -2516
- package/src/api/index.ts +0 -30
- package/src/api/package.ts +0 -111
- package/src/api/readme.ts +0 -101
- package/src/api/search.ts +0 -92
- package/src/api/sidebar.ts +0 -91
- package/src/api/user.ts +0 -94
- package/src/index.ts +0 -2
- package/src/middleware.ts +0 -64
- package/src/web-utils.ts +0 -28
- package/test/api.packages.test.ts +0 -90
- package/test/api.readme.test.ts +0 -105
- package/test/api.search.test.ts +0 -68
- package/test/api.sidebar.test.ts +0 -51
- package/test/api.user.test.ts +0 -256
- package/test/config/change-password-disabled.yaml +0 -28
- package/test/config/default-test.yaml +0 -28
- package/test/config/keep-all-readmes.yaml +0 -29
- package/test/config/login-disabled.yaml +0 -29
- package/test/config/web.yaml +0 -46
- package/test/helper.ts +0 -26
- package/test/partials/htmlParser.ts +0 -1
- package/test/partials/manifest/manifest.json +0 -64
- package/test/partials/readme/ascii.adoc +0 -12
- package/test/partials/search/search-v1.json +0 -157
- package/test/static/main.js +0 -3
- package/test/static/runtime.js +0 -3
- package/test/static/vendors.js +0 -3
- package/test/web-utils.spec.ts +0 -46
- package/tsconfig.build.json +0 -9
- package/tsconfig.json +0 -50
- package/types/custom.d.ts +0 -10
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import supertest from 'supertest';
|
|
3
|
-
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
|
|
5
|
-
import { HEADERS, HEADER_TYPE, HTTP_STATUS } from '@verdaccio/core';
|
|
6
|
-
import { setup } from '@verdaccio/logger';
|
|
7
|
-
|
|
8
|
-
import { initializeServer } from './helper';
|
|
9
|
-
|
|
10
|
-
setup({});
|
|
11
|
-
|
|
12
|
-
const mockManifest = vi.fn();
|
|
13
|
-
vi.mock('@verdaccio/ui-theme', () => mockManifest());
|
|
14
|
-
|
|
15
|
-
describe('test web server', () => {
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
vi.clearAllMocks();
|
|
18
|
-
mockManifest.mockClear();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test('should OK to package api', async () => {
|
|
22
|
-
mockManifest.mockReturnValue(() => ({
|
|
23
|
-
staticPath: path.join(__dirname, 'static'),
|
|
24
|
-
manifestFiles: {
|
|
25
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
26
|
-
},
|
|
27
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
28
|
-
}));
|
|
29
|
-
const response = await supertest(await initializeServer('default-test.yaml'))
|
|
30
|
-
.get('/-/verdaccio/data/packages')
|
|
31
|
-
.set('Accept', HEADERS.JSON_CHARSET)
|
|
32
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
33
|
-
.expect(HTTP_STATUS.OK);
|
|
34
|
-
expect(response.body).toEqual([]);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test('should allow anonymous user to access package api when login is disabled', async () => {
|
|
38
|
-
mockManifest.mockReturnValue(() => ({
|
|
39
|
-
staticPath: path.join(__dirname, 'static'),
|
|
40
|
-
manifestFiles: {
|
|
41
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
42
|
-
},
|
|
43
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
44
|
-
}));
|
|
45
|
-
|
|
46
|
-
const response = await supertest(await initializeServer('login-disabled.yaml'))
|
|
47
|
-
.get('/-/verdaccio/data/packages')
|
|
48
|
-
.set('Accept', HEADERS.JSON_CHARSET)
|
|
49
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
50
|
-
.expect(HTTP_STATUS.OK);
|
|
51
|
-
|
|
52
|
-
expect(response.body).toEqual([]);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
test('should allow authenticated user to access package api', async () => {
|
|
56
|
-
mockManifest.mockReturnValue(() => ({
|
|
57
|
-
staticPath: path.join(__dirname, 'static'),
|
|
58
|
-
manifestFiles: {
|
|
59
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
60
|
-
},
|
|
61
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
62
|
-
}));
|
|
63
|
-
|
|
64
|
-
const api = supertest(await initializeServer('default-test.yaml'));
|
|
65
|
-
|
|
66
|
-
// First login to get the token
|
|
67
|
-
const loginRes = await api
|
|
68
|
-
.post('/-/verdaccio/sec/login')
|
|
69
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
70
|
-
.send(
|
|
71
|
-
JSON.stringify({
|
|
72
|
-
username: 'test',
|
|
73
|
-
password: 'test',
|
|
74
|
-
})
|
|
75
|
-
)
|
|
76
|
-
.expect(HTTP_STATUS.OK);
|
|
77
|
-
|
|
78
|
-
expect(loginRes.body.token).toBeDefined();
|
|
79
|
-
|
|
80
|
-
// Then access the packages API with the token
|
|
81
|
-
const response = await api
|
|
82
|
-
.get('/-/verdaccio/data/packages')
|
|
83
|
-
.set('Accept', HEADERS.JSON_CHARSET)
|
|
84
|
-
.set(HEADER_TYPE.AUTHORIZATION, `Bearer ${loginRes.body.token}`)
|
|
85
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
86
|
-
.expect(HTTP_STATUS.OK);
|
|
87
|
-
|
|
88
|
-
expect(response.body).toEqual([]);
|
|
89
|
-
});
|
|
90
|
-
});
|
package/test/api.readme.test.ts
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import supertest from 'supertest';
|
|
3
|
-
import { afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
|
|
5
|
-
import { HEADERS, HEADER_TYPE, HTTP_STATUS } from '@verdaccio/core';
|
|
6
|
-
import { setup } from '@verdaccio/logger';
|
|
7
|
-
import { publishVersion } from '@verdaccio/test-helper';
|
|
8
|
-
|
|
9
|
-
import { NOT_README_FOUND } from '../src/api/readme';
|
|
10
|
-
import { initializeServer } from './helper';
|
|
11
|
-
|
|
12
|
-
setup({});
|
|
13
|
-
|
|
14
|
-
const mockManifest = vi.fn();
|
|
15
|
-
vi.mock('@verdaccio/ui-theme', () => mockManifest());
|
|
16
|
-
|
|
17
|
-
describe('readme api', () => {
|
|
18
|
-
beforeAll(() => {
|
|
19
|
-
mockManifest.mockReturnValue(() => ({
|
|
20
|
-
staticPath: path.join(__dirname, 'static'),
|
|
21
|
-
manifestFiles: {
|
|
22
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
23
|
-
},
|
|
24
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
25
|
-
}));
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
afterEach(() => {
|
|
29
|
-
vi.clearAllMocks();
|
|
30
|
-
mockManifest.mockClear();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
test('should fetch readme scoped package', async () => {
|
|
34
|
-
const app = await initializeServer('default-test.yaml');
|
|
35
|
-
await publishVersion(app, '@scope/pk1-test', '1.0.0', { readme: 'my readme scoped' });
|
|
36
|
-
const response = await supertest(app)
|
|
37
|
-
.get('/-/verdaccio/data/package/readme/@scope/pk1-test')
|
|
38
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
39
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
40
|
-
.expect(HTTP_STATUS.OK);
|
|
41
|
-
expect(response.text).toMatch('my readme scoped');
|
|
42
|
-
}, 70000);
|
|
43
|
-
|
|
44
|
-
test('should fetch readme scoped package with not found message', async () => {
|
|
45
|
-
const app = await initializeServer('default-test.yaml');
|
|
46
|
-
await publishVersion(app, '@scope/pk1-test', '1.0.0', { readme: null });
|
|
47
|
-
const response = await supertest(app)
|
|
48
|
-
.get('/-/verdaccio/data/package/readme/@scope/pk1-test')
|
|
49
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
50
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
51
|
-
.expect(HTTP_STATUS.OK);
|
|
52
|
-
expect(response.text).toMatch(NOT_README_FOUND);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
test('should fetch readme a package', async () => {
|
|
56
|
-
const app = await initializeServer('default-test.yaml');
|
|
57
|
-
await publishVersion(app, 'pk1-test', '1.0.0', { readme: 'my readme' });
|
|
58
|
-
const response = await supertest(app)
|
|
59
|
-
.get('/-/verdaccio/data/package/readme/pk1-test')
|
|
60
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
61
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
62
|
-
.expect(HTTP_STATUS.OK);
|
|
63
|
-
expect(response.text).toMatch('my readme');
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test('should fetch readme a package with not found message', async () => {
|
|
67
|
-
const app = await initializeServer('default-test.yaml');
|
|
68
|
-
await publishVersion(app, 'pk1-test', '1.0.0', { readme: null });
|
|
69
|
-
const response = await supertest(app)
|
|
70
|
-
.get('/-/verdaccio/data/package/readme/pk1-test')
|
|
71
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
72
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
73
|
-
.expect(HTTP_STATUS.OK);
|
|
74
|
-
expect(response.text).toMatch(NOT_README_FOUND);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test('should fetch readme with keeping all readmes (latest)', async () => {
|
|
78
|
-
const app = await initializeServer('keep-all-readmes.yaml');
|
|
79
|
-
await publishVersion(app, 'pk1-test', '1.0.0', { readme: 'my readme' });
|
|
80
|
-
const response = await supertest(app)
|
|
81
|
-
.get('/-/verdaccio/data/package/readme/pk1-test')
|
|
82
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
83
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
84
|
-
.expect(HTTP_STATUS.OK);
|
|
85
|
-
expect(response.text).toMatch('my readme');
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
test('should fetch readme with keeping all readmes (version)', async () => {
|
|
89
|
-
const app = await initializeServer('keep-all-readmes.yaml');
|
|
90
|
-
await publishVersion(app, 'pk1-test', '1.0.0', { readme: 'my readme' });
|
|
91
|
-
await publishVersion(app, 'pk1-test', '1.2.0', { readme: 'my new readme' });
|
|
92
|
-
const response = await supertest(app)
|
|
93
|
-
.get('/-/verdaccio/data/package/readme/pk1-test')
|
|
94
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
95
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
96
|
-
.expect(HTTP_STATUS.OK);
|
|
97
|
-
expect(response.text).toMatch('my new readme');
|
|
98
|
-
const response2 = await supertest(app)
|
|
99
|
-
.get('/-/verdaccio/data/package/readme/pk1-test?v=1.0.0')
|
|
100
|
-
.set('Accept', HEADERS.TEXT_PLAIN)
|
|
101
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
|
|
102
|
-
.expect(HTTP_STATUS.OK);
|
|
103
|
-
expect(response2.text).toMatch('my readme');
|
|
104
|
-
});
|
|
105
|
-
});
|
package/test/api.search.test.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import supertest from 'supertest';
|
|
3
|
-
import { afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
|
|
5
|
-
import { HEADERS, HEADER_TYPE, HTTP_STATUS } from '@verdaccio/core';
|
|
6
|
-
import { setup } from '@verdaccio/logger';
|
|
7
|
-
import { publishVersion } from '@verdaccio/test-helper';
|
|
8
|
-
|
|
9
|
-
import { initializeServer } from './helper';
|
|
10
|
-
|
|
11
|
-
setup({});
|
|
12
|
-
|
|
13
|
-
const mockManifest = vi.fn();
|
|
14
|
-
vi.mock('@verdaccio/ui-theme', () => mockManifest());
|
|
15
|
-
|
|
16
|
-
describe('test web server', () => {
|
|
17
|
-
beforeAll(() => {
|
|
18
|
-
mockManifest.mockReturnValue(() => ({
|
|
19
|
-
staticPath: path.join(__dirname, 'static'),
|
|
20
|
-
manifestFiles: {
|
|
21
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
22
|
-
},
|
|
23
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
24
|
-
}));
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
Date.now = vi.fn(() => new Date(Date.UTC(2017, 1, 14)).valueOf());
|
|
29
|
-
vi.clearAllMocks();
|
|
30
|
-
mockManifest.mockClear();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
test('should find results to search api', async () => {
|
|
34
|
-
const app = await initializeServer('default-test.yaml');
|
|
35
|
-
await publishVersion(app, 'foo', '1.0.0');
|
|
36
|
-
const response = await supertest(app)
|
|
37
|
-
.get('/-/verdaccio/data/search/foo')
|
|
38
|
-
.set('Accept', HEADERS.JSON_CHARSET)
|
|
39
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
40
|
-
.expect(HTTP_STATUS.OK);
|
|
41
|
-
expect(response.body).toHaveLength(1);
|
|
42
|
-
// FUTURE: we can improve here matching the right outcome
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test('should found no results to search', async () => {
|
|
46
|
-
const response = await supertest(await initializeServer('default-test.yaml'))
|
|
47
|
-
.get('/-/verdaccio/data/search/notFound')
|
|
48
|
-
.set('Accept', HEADERS.JSON_CHARSET)
|
|
49
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
50
|
-
.expect(HTTP_STATUS.OK);
|
|
51
|
-
expect(response.body).toHaveLength(0);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
// TODO: need a way to make this fail
|
|
55
|
-
test.skip('should fail search api', async () => {
|
|
56
|
-
const response = await supertest(await initializeServer('default-test.yaml'))
|
|
57
|
-
.get('/-/verdaccio/data/search/thisWillFail')
|
|
58
|
-
.set('Accept', HEADERS.JSON_CHARSET)
|
|
59
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
60
|
-
.expect(HTTP_STATUS.OK);
|
|
61
|
-
expect(response.body).toHaveLength(3);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
test.todo('search abort request');
|
|
65
|
-
// maybe these could be done in storage package to avoid have specifics on this level
|
|
66
|
-
test.todo('search allow request permissions');
|
|
67
|
-
test.todo('search query params, pagination etc');
|
|
68
|
-
});
|
package/test/api.sidebar.test.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import supertest from 'supertest';
|
|
3
|
-
import { afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
|
|
5
|
-
import { HEADERS, HEADER_TYPE, HTTP_STATUS } from '@verdaccio/core';
|
|
6
|
-
import { setup } from '@verdaccio/logger';
|
|
7
|
-
import { publishVersion } from '@verdaccio/test-helper';
|
|
8
|
-
|
|
9
|
-
import { initializeServer } from './helper';
|
|
10
|
-
|
|
11
|
-
setup({});
|
|
12
|
-
|
|
13
|
-
const mockManifest = vi.fn();
|
|
14
|
-
vi.mock('@verdaccio/ui-theme', () => mockManifest());
|
|
15
|
-
|
|
16
|
-
describe('sidebar api', () => {
|
|
17
|
-
beforeAll(() => {
|
|
18
|
-
mockManifest.mockReturnValue(() => ({
|
|
19
|
-
staticPath: path.join(__dirname, 'static'),
|
|
20
|
-
manifestFiles: {
|
|
21
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
22
|
-
},
|
|
23
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
24
|
-
}));
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
vi.clearAllMocks();
|
|
29
|
-
mockManifest.mockClear();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('should display sidebar info scoped package', async () => {
|
|
33
|
-
const app = await initializeServer('default-test.yaml');
|
|
34
|
-
await publishVersion(app, '@scope/pk1-test', '1.0.0', { readme: 'my readme scoped' });
|
|
35
|
-
const response = await supertest(app)
|
|
36
|
-
.get('/-/verdaccio/data/sidebar/@scope/pk1-test')
|
|
37
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
38
|
-
.expect(HTTP_STATUS.OK);
|
|
39
|
-
expect(response.text).toMatch('@scope/pk1-test');
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
test('should display sidebar info package', async () => {
|
|
43
|
-
const app = await initializeServer('default-test.yaml');
|
|
44
|
-
await publishVersion(app, 'pk2-test', '1.0.0', { readme: 'my readme scoped' });
|
|
45
|
-
const response = await supertest(app)
|
|
46
|
-
.get('/-/verdaccio/data/sidebar/pk2-test')
|
|
47
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
48
|
-
.expect(HTTP_STATUS.OK);
|
|
49
|
-
expect(response.text).toMatch('pk2-test');
|
|
50
|
-
});
|
|
51
|
-
});
|
package/test/api.user.test.ts
DELETED
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import supertest from 'supertest';
|
|
3
|
-
import { afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
|
|
5
|
-
import { API_ERROR, HEADERS, HEADER_TYPE, HTTP_STATUS } from '@verdaccio/core';
|
|
6
|
-
import { setup } from '@verdaccio/logger';
|
|
7
|
-
|
|
8
|
-
import { initializeServer } from './helper';
|
|
9
|
-
|
|
10
|
-
setup({});
|
|
11
|
-
|
|
12
|
-
const mockManifest = vi.fn();
|
|
13
|
-
vi.mock('@verdaccio/ui-theme', () => mockManifest());
|
|
14
|
-
|
|
15
|
-
describe('test web server', () => {
|
|
16
|
-
beforeAll(() => {
|
|
17
|
-
mockManifest.mockReturnValue(() => ({
|
|
18
|
-
staticPath: path.join(__dirname, 'static'),
|
|
19
|
-
manifestFiles: {
|
|
20
|
-
js: ['runtime.js', 'vendors.js', 'main.js'],
|
|
21
|
-
},
|
|
22
|
-
manifest: require('./partials/manifest/manifest.json'),
|
|
23
|
-
}));
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
afterEach(() => {
|
|
27
|
-
vi.clearAllMocks();
|
|
28
|
-
mockManifest.mockClear();
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
test('should get 401', async () => {
|
|
32
|
-
return supertest(await initializeServer('default-test.yaml'))
|
|
33
|
-
.post('/-/verdaccio/sec/login')
|
|
34
|
-
.send(
|
|
35
|
-
JSON.stringify({
|
|
36
|
-
username: 'test',
|
|
37
|
-
password: 'password1',
|
|
38
|
-
})
|
|
39
|
-
)
|
|
40
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
41
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
42
|
-
.expect(HTTP_STATUS.UNAUTHORIZED)
|
|
43
|
-
.then((response) => {
|
|
44
|
-
expect(response.body.error).toEqual(API_ERROR.BAD_USERNAME_PASSWORD);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test('should log in', async () => {
|
|
49
|
-
return supertest(await initializeServer('default-test.yaml'))
|
|
50
|
-
.post('/-/verdaccio/sec/login')
|
|
51
|
-
.send(
|
|
52
|
-
JSON.stringify({
|
|
53
|
-
username: 'test',
|
|
54
|
-
password: 'test',
|
|
55
|
-
})
|
|
56
|
-
)
|
|
57
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
58
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
59
|
-
.expect(HEADERS.CACHE_CONTROL, 'no-cache, no-store')
|
|
60
|
-
.expect(HTTP_STATUS.OK)
|
|
61
|
-
.then((res) => {
|
|
62
|
-
expect(res.body.error).toBeUndefined();
|
|
63
|
-
expect(res.body.token).toBeDefined();
|
|
64
|
-
expect(res.body.token).toBeTruthy();
|
|
65
|
-
expect(res.body.username).toMatch('test');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test('log in should be disabled', async () => {
|
|
70
|
-
return supertest(await initializeServer('login-disabled.yaml'))
|
|
71
|
-
.post('/-/verdaccio/sec/login')
|
|
72
|
-
.send(
|
|
73
|
-
JSON.stringify({
|
|
74
|
-
username: 'test',
|
|
75
|
-
password: 'test',
|
|
76
|
-
})
|
|
77
|
-
)
|
|
78
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
79
|
-
.expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_CHARSET)
|
|
80
|
-
.expect(HTTP_STATUS.CANNOT_HANDLE, JSON.stringify({ error: 'cannot handle this' }));
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test('should change password', async () => {
|
|
84
|
-
const oldPass = 'test';
|
|
85
|
-
const newPass = 'new-pass';
|
|
86
|
-
|
|
87
|
-
const api = supertest(await initializeServer('default-test.yaml'));
|
|
88
|
-
|
|
89
|
-
// Login with the old password.
|
|
90
|
-
const loginRes = await api
|
|
91
|
-
.post('/-/verdaccio/sec/login')
|
|
92
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
93
|
-
.send(
|
|
94
|
-
JSON.stringify({
|
|
95
|
-
username: 'test',
|
|
96
|
-
password: oldPass,
|
|
97
|
-
})
|
|
98
|
-
)
|
|
99
|
-
.expect(HTTP_STATUS.OK);
|
|
100
|
-
|
|
101
|
-
// Change the password.
|
|
102
|
-
await api
|
|
103
|
-
.put('/-/verdaccio/sec/reset_password')
|
|
104
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
105
|
-
.set(HEADER_TYPE.AUTHORIZATION, `Bearer ${loginRes.body.token}`)
|
|
106
|
-
.send(
|
|
107
|
-
JSON.stringify({
|
|
108
|
-
password: {
|
|
109
|
-
old: oldPass,
|
|
110
|
-
new: newPass,
|
|
111
|
-
},
|
|
112
|
-
})
|
|
113
|
-
)
|
|
114
|
-
.expect(HTTP_STATUS.OK);
|
|
115
|
-
|
|
116
|
-
// Verify that you cannot login with the old password.
|
|
117
|
-
await api
|
|
118
|
-
.post('/-/verdaccio/sec/login')
|
|
119
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
120
|
-
.send(
|
|
121
|
-
JSON.stringify({
|
|
122
|
-
username: 'test',
|
|
123
|
-
password: oldPass,
|
|
124
|
-
})
|
|
125
|
-
)
|
|
126
|
-
.expect(HTTP_STATUS.UNAUTHORIZED);
|
|
127
|
-
|
|
128
|
-
// Verify that you can login with the new password.
|
|
129
|
-
await api
|
|
130
|
-
.post('/-/verdaccio/sec/login')
|
|
131
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
132
|
-
.send(
|
|
133
|
-
JSON.stringify({
|
|
134
|
-
username: 'test',
|
|
135
|
-
password: newPass,
|
|
136
|
-
})
|
|
137
|
-
)
|
|
138
|
-
.expect(HTTP_STATUS.OK);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
test('should not change to invalid password', async () => {
|
|
142
|
-
const oldPass = 'test';
|
|
143
|
-
const newPass = '12'; // Invalid password: Too short.
|
|
144
|
-
|
|
145
|
-
const api = supertest(await initializeServer('default-test.yaml'));
|
|
146
|
-
|
|
147
|
-
// Login with the old password.
|
|
148
|
-
const loginRes = await api
|
|
149
|
-
.post('/-/verdaccio/sec/login')
|
|
150
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
151
|
-
.send(
|
|
152
|
-
JSON.stringify({
|
|
153
|
-
username: 'test',
|
|
154
|
-
password: oldPass,
|
|
155
|
-
})
|
|
156
|
-
)
|
|
157
|
-
.expect(HTTP_STATUS.OK);
|
|
158
|
-
|
|
159
|
-
// Try changing to an invalid password.
|
|
160
|
-
await api
|
|
161
|
-
.put('/-/verdaccio/sec/reset_password')
|
|
162
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
163
|
-
.set(HEADER_TYPE.AUTHORIZATION, `Bearer ${loginRes.body.token}`)
|
|
164
|
-
.send(
|
|
165
|
-
JSON.stringify({
|
|
166
|
-
password: {
|
|
167
|
-
old: oldPass,
|
|
168
|
-
new: newPass,
|
|
169
|
-
},
|
|
170
|
-
})
|
|
171
|
-
)
|
|
172
|
-
.expect(HTTP_STATUS.BAD_REQUEST);
|
|
173
|
-
|
|
174
|
-
// Verify that you cannot login with the new (invalid) password.
|
|
175
|
-
await api
|
|
176
|
-
.post('/-/verdaccio/sec/login')
|
|
177
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
178
|
-
.send(
|
|
179
|
-
JSON.stringify({
|
|
180
|
-
username: 'test',
|
|
181
|
-
password: newPass,
|
|
182
|
-
})
|
|
183
|
-
)
|
|
184
|
-
.expect(HTTP_STATUS.UNAUTHORIZED);
|
|
185
|
-
|
|
186
|
-
// Verify that you can still login with the old password.
|
|
187
|
-
await api
|
|
188
|
-
.post('/-/verdaccio/sec/login')
|
|
189
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
190
|
-
.send(
|
|
191
|
-
JSON.stringify({
|
|
192
|
-
username: 'test',
|
|
193
|
-
password: oldPass,
|
|
194
|
-
})
|
|
195
|
-
)
|
|
196
|
-
.expect(HTTP_STATUS.OK);
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
test('should not change password if flag is disabled', async () => {
|
|
200
|
-
const oldPass = 'test';
|
|
201
|
-
const newPass = 'new-pass';
|
|
202
|
-
|
|
203
|
-
const api = supertest(await initializeServer('change-password-disabled.yaml'));
|
|
204
|
-
|
|
205
|
-
// Login with the old password.
|
|
206
|
-
const loginRes = await api
|
|
207
|
-
.post('/-/verdaccio/sec/login')
|
|
208
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
209
|
-
.send(
|
|
210
|
-
JSON.stringify({
|
|
211
|
-
username: 'test',
|
|
212
|
-
password: oldPass,
|
|
213
|
-
})
|
|
214
|
-
)
|
|
215
|
-
.expect(HTTP_STATUS.OK);
|
|
216
|
-
|
|
217
|
-
// Try changing the password.
|
|
218
|
-
await api
|
|
219
|
-
.put('/-/verdaccio/sec/reset_password')
|
|
220
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
221
|
-
.set(HEADER_TYPE.AUTHORIZATION, `Bearer ${loginRes.body.token}`)
|
|
222
|
-
.send(
|
|
223
|
-
JSON.stringify({
|
|
224
|
-
password: {
|
|
225
|
-
old: oldPass,
|
|
226
|
-
new: newPass,
|
|
227
|
-
},
|
|
228
|
-
})
|
|
229
|
-
)
|
|
230
|
-
.expect(HTTP_STATUS.CANNOT_HANDLE);
|
|
231
|
-
|
|
232
|
-
// Verify that you cannot login with the new (rejected) password.
|
|
233
|
-
await api
|
|
234
|
-
.post('/-/verdaccio/sec/login')
|
|
235
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
236
|
-
.send(
|
|
237
|
-
JSON.stringify({
|
|
238
|
-
username: 'test',
|
|
239
|
-
password: newPass,
|
|
240
|
-
})
|
|
241
|
-
)
|
|
242
|
-
.expect(HTTP_STATUS.UNAUTHORIZED);
|
|
243
|
-
|
|
244
|
-
// Verify that you can still login with the old password.
|
|
245
|
-
await api
|
|
246
|
-
.post('/-/verdaccio/sec/login')
|
|
247
|
-
.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON)
|
|
248
|
-
.send(
|
|
249
|
-
JSON.stringify({
|
|
250
|
-
username: 'test',
|
|
251
|
-
password: oldPass,
|
|
252
|
-
})
|
|
253
|
-
)
|
|
254
|
-
.expect(HTTP_STATUS.OK);
|
|
255
|
-
});
|
|
256
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
auth:
|
|
2
|
-
auth-memory:
|
|
3
|
-
users:
|
|
4
|
-
test:
|
|
5
|
-
name: test
|
|
6
|
-
password: test
|
|
7
|
-
|
|
8
|
-
web:
|
|
9
|
-
title: verdaccio
|
|
10
|
-
|
|
11
|
-
publish:
|
|
12
|
-
allow_offline: false
|
|
13
|
-
|
|
14
|
-
uplinks:
|
|
15
|
-
|
|
16
|
-
log: { type: stdout, format: pretty, level: trace }
|
|
17
|
-
|
|
18
|
-
packages:
|
|
19
|
-
'@*/*':
|
|
20
|
-
access: $anonymous
|
|
21
|
-
publish: $anonymous
|
|
22
|
-
'**':
|
|
23
|
-
access: $anonymous
|
|
24
|
-
publish: $anonymous
|
|
25
|
-
_debug: true
|
|
26
|
-
|
|
27
|
-
flags:
|
|
28
|
-
changePassword: false
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
auth:
|
|
2
|
-
auth-memory:
|
|
3
|
-
users:
|
|
4
|
-
test:
|
|
5
|
-
name: test
|
|
6
|
-
password: test
|
|
7
|
-
|
|
8
|
-
web:
|
|
9
|
-
title: verdaccio
|
|
10
|
-
|
|
11
|
-
publish:
|
|
12
|
-
allow_offline: false
|
|
13
|
-
|
|
14
|
-
uplinks:
|
|
15
|
-
|
|
16
|
-
log: { type: stdout, format: pretty, level: trace }
|
|
17
|
-
|
|
18
|
-
packages:
|
|
19
|
-
'@*/*':
|
|
20
|
-
access: $anonymous
|
|
21
|
-
publish: $anonymous
|
|
22
|
-
'**':
|
|
23
|
-
access: $anonymous
|
|
24
|
-
publish: $anonymous
|
|
25
|
-
_debug: true
|
|
26
|
-
|
|
27
|
-
flags:
|
|
28
|
-
changePassword: true
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
auth:
|
|
2
|
-
auth-memory:
|
|
3
|
-
users:
|
|
4
|
-
test:
|
|
5
|
-
name: test
|
|
6
|
-
password: test
|
|
7
|
-
|
|
8
|
-
web:
|
|
9
|
-
title: verdaccio
|
|
10
|
-
|
|
11
|
-
publish:
|
|
12
|
-
allow_offline: false
|
|
13
|
-
keep_readmes: all
|
|
14
|
-
|
|
15
|
-
uplinks:
|
|
16
|
-
|
|
17
|
-
log: { type: stdout, format: pretty, level: trace }
|
|
18
|
-
|
|
19
|
-
packages:
|
|
20
|
-
'@*/*':
|
|
21
|
-
access: $anonymous
|
|
22
|
-
publish: $anonymous
|
|
23
|
-
'**':
|
|
24
|
-
access: $anonymous
|
|
25
|
-
publish: $anonymous
|
|
26
|
-
_debug: true
|
|
27
|
-
|
|
28
|
-
flags:
|
|
29
|
-
changePassword: true
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
auth:
|
|
2
|
-
auth-memory:
|
|
3
|
-
users:
|
|
4
|
-
test:
|
|
5
|
-
name: test
|
|
6
|
-
password: test
|
|
7
|
-
|
|
8
|
-
web:
|
|
9
|
-
title: verdaccio
|
|
10
|
-
login: false
|
|
11
|
-
|
|
12
|
-
publish:
|
|
13
|
-
allow_offline: false
|
|
14
|
-
|
|
15
|
-
uplinks:
|
|
16
|
-
|
|
17
|
-
log: { type: stdout, format: pretty, level: trace }
|
|
18
|
-
|
|
19
|
-
packages:
|
|
20
|
-
'@*/*':
|
|
21
|
-
access: $anonymous
|
|
22
|
-
publish: $anonymous
|
|
23
|
-
'**':
|
|
24
|
-
access: $anonymous
|
|
25
|
-
publish: $anonymous
|
|
26
|
-
_debug: true
|
|
27
|
-
|
|
28
|
-
flags:
|
|
29
|
-
changePassword: true
|