fix: support nfs.url is generator
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
/*!
|
||||
* cnpmjs.org - common/nfs.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.org - controllers/registry/package/download.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -18,6 +16,7 @@ var debug = require('debug')('cnpmjs.org:controllers:registry:download');
|
||||
var mime = require('mime');
|
||||
var utility = require('utility');
|
||||
var defer = require('co-defer');
|
||||
var is = require('is-type-of');
|
||||
var nfs = require('../../../common/nfs');
|
||||
var logger = require('../../../common/logger');
|
||||
var common = require('../../../lib/common');
|
||||
@@ -32,12 +31,16 @@ module.exports = function* download(next) {
|
||||
var name = this.params.name || this.params[0];
|
||||
var filename = this.params.filename || this.params[1];
|
||||
var version = filename.slice(name.length + 1, -4);
|
||||
var row = yield* packageService.getModule(name, version);
|
||||
var row = yield packageService.getModule(name, version);
|
||||
// can not get dist
|
||||
var url = null;
|
||||
|
||||
if (typeof nfs.url === 'function') {
|
||||
url = nfs.url(common.getCDNKey(name, filename));
|
||||
if (is.generatorFunction(nfs.url)) {
|
||||
url = yield nfs.url(common.getCDNKey(name, filename));
|
||||
} else {
|
||||
url = nfs.url(common.getCDNKey(name, filename));
|
||||
}
|
||||
}
|
||||
|
||||
debug('download %s %s %s %s', name, filename, version, url);
|
||||
@@ -78,7 +81,7 @@ module.exports = function* download(next) {
|
||||
this.attachment(filename);
|
||||
this.etag = dist.shasum;
|
||||
|
||||
this.body = yield* downloadAsReadStream(dist.key);
|
||||
this.body = yield downloadAsReadStream(dist.key);
|
||||
};
|
||||
|
||||
defer.setInterval(function* () {
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
"gravatar": "~1.1.0",
|
||||
"humanize-ms": "~1.0.1",
|
||||
"humanize-number": "~0.0.2",
|
||||
"is-type-of": "~0.3.1",
|
||||
"kcors": "~1.0.1",
|
||||
"koa": "~0.17.0",
|
||||
"koa-limit": "~1.0.2",
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/**!
|
||||
* cnpmjs.org - test/controllers/registry/package/download.test.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
@@ -15,36 +13,66 @@
|
||||
*/
|
||||
|
||||
var request = require('supertest');
|
||||
var mm = require('mm');
|
||||
var config = require('../../../../config');
|
||||
var app = require('../../../../servers/registry');
|
||||
var utils = require('../../../utils');
|
||||
|
||||
describe('controllers/registry/package/download.test.js', function () {
|
||||
describe('test/controllers/registry/package/download.test.js', function () {
|
||||
before(function (done) {
|
||||
var pkg = utils.getPackage('@cnpmtest/download-test-module', '1.0.0', utils.admin);
|
||||
request(app.listen())
|
||||
request(app)
|
||||
.put('/' + pkg.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg)
|
||||
.expect(201, done);
|
||||
});
|
||||
|
||||
afterEach(mm.restore);
|
||||
|
||||
describe('GET /:name/download/:filename', function () {
|
||||
it('should download a file with 200', function (done) {
|
||||
request(app.listen())
|
||||
request(app)
|
||||
.get('/@cnpmtest/download-test-module/download/@cnpmtest/download-test-module-1.0.0.tgz')
|
||||
.expect(200, done);
|
||||
});
|
||||
|
||||
it('should alias /:name/-/:filename to /:name/download/:filename', function (done) {
|
||||
request(app.listen())
|
||||
request(app)
|
||||
.get('/@cnpmtest/download-test-module/-/@cnpmtest/download-test-module-1.0.0.tgz')
|
||||
.expect(200, done);
|
||||
});
|
||||
|
||||
it('should 404 when package not exists', function (done) {
|
||||
request(app.listen())
|
||||
request(app)
|
||||
.get('/@cnpmtest/download-test-module-not-exists/download/@cnpmtest/download-test-module-not-exists-1.0.0.tgz')
|
||||
.expect(404, done);
|
||||
});
|
||||
|
||||
describe('nfs.url is function', function() {
|
||||
it('should work with nfs.url is generatorFunction', function(done) {
|
||||
mm(config.nfs, 'url', function*(key) {
|
||||
return 'http://foo.test.com' + key;
|
||||
});
|
||||
mm(config, 'downloadRedirectToNFS', true);
|
||||
|
||||
request(app)
|
||||
.get('/@cnpmtest/download-test-module/-/@cnpmtest/download-test-module-1.0.0.tgz')
|
||||
.expect('Location', 'http://foo.test.com/@cnpmtest/download-test-module/-/@cnpmtest/download-test-module-1.0.0.tgz')
|
||||
.expect(302, done);
|
||||
});
|
||||
|
||||
it('should work with nfs.url is function', function(done) {
|
||||
mm(config.nfs, 'url', function(key) {
|
||||
return 'http://foo.test.com' + key;
|
||||
});
|
||||
mm(config, 'downloadRedirectToNFS', true);
|
||||
|
||||
request(app)
|
||||
.get('/@cnpmtest/download-test-module/-/@cnpmtest/download-test-module-1.0.0.tgz')
|
||||
.expect('Location', 'http://foo.test.com/@cnpmtest/download-test-module/-/@cnpmtest/download-test-module-1.0.0.tgz')
|
||||
.expect(302, done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user