fix: add new enpoind that allow download tarballs according the standard

This commit is contained in:
Juan Picado @jotadeveloper 2019-03-17 21:23:13 +01:00
parent 56e1d4becf
commit 87203f2cdf
No known key found for this signature in database
GPG Key ID: 18AC54485952D158
1 changed files with 21 additions and 10 deletions

View File

@ -11,6 +11,20 @@ import type { Router } from 'express';
import type { Config } from '@verdaccio/types';
import type { IAuth, $ResponseExtend, $RequestExtend, $NextFunctionVer, IStorageHandler } from '../../../../types';
const downloadStream = (packageName: string, filename: string, storage: any, req: $RequestExtend, res: $ResponseExtend) => {
const stream = storage.getTarball(packageName, filename);
stream.on('content-length', function(content) {
res.header('Content-Length', content);
});
stream.on('error', function(err) {
return res.report_error(err);
});
res.header(HEADERS.CONTENT_TYPE, HEADERS.OCTET_STREAM);
stream.pipe(res);
};
export default function(route: Router, auth: IAuth, storage: IStorageHandler, config: Config) {
const can = allow(auth);
// TODO: anonymous user?
@ -51,16 +65,13 @@ export default function(route: Router, auth: IAuth, storage: IStorageHandler, co
});
});
route.get('/:package/-/:filename', can('access'), function(req: $RequestExtend, res: $ResponseExtend) {
const stream = storage.getTarball(req.params.package, req.params.filename);
route.get('/:scopedPackage/-/:scope/:filename', function(req: $RequestExtend, res: $ResponseExtend) {
const { scopedPackage, filename } = req.params;
stream.on('content-length', function(content) {
res.header('Content-Length', content);
downloadStream(scopedPackage, filename, storage, req, res);
});
stream.on('error', function(err) {
return res.report_error(err);
});
res.header('Content-Type', HEADERS.OCTET_STREAM);
stream.pipe(res);
route.get('/:package/-/:filename', can('access'), function(req: $RequestExtend, res: $ResponseExtend) {
downloadStream(req.params.package, req.params.filename, storage, req, res);
});
}