Compare commits

..

3 Commits
1.2.0 ... 1.2.1

Author SHA1 Message Date
fengmk2
7f951a6c5d Release 1.2.1 2014-08-07 18:19:08 +08:00
fengmk2
a1f2bc87b7 Merge pull request #418 from cnpm/undeprecate
deprecated bug fix and support undeprecate
2014-08-07 18:18:31 +08:00
fengmk2
706a5e053b deprecated bug fix and support undeprecate 2014-08-07 18:06:32 +08:00
5 changed files with 97 additions and 23 deletions

View File

@@ -1,4 +1,9 @@
1.2.1 / 2014-08-07
==================
* deprecated bug fix and support undeprecate
1.2.0 / 2014-08-07
==================

View File

@@ -44,7 +44,7 @@ function* deprecateVersions(next) {
return;
}
var data = body.versions[row.package.version];
if (data.deprecated) {
if (typeof data.deprecated === 'string') {
row.package.deprecated = data.deprecated;
updateTasks.push(Module.updatePackage(row.id, row.package));
}

View File

@@ -441,10 +441,27 @@ exports.addPackageAndDist = function *(next) {
return;
}
var versionPackage = pkg.versions[version];
// check maintainers
var isMaintainer = yield* packageService.isMaintainer(name, username);
if (!isMaintainer) {
this.status = 403;
this.body = {
error: 'forbidden user',
reason: username + ' not authorized to modify ' + name
};
return;
}
if (!filename) {
if (versionPackage.deprecated) {
var hasDeprecated = false;
for (var v in pkg.versions) {
var row = pkg.versions[v];
if (typeof row.deprecated === 'string') {
hasDeprecated = true;
break;
}
}
if (hasDeprecated) {
return yield* deprecateVersions.call(this, next);
}
@@ -457,6 +474,7 @@ exports.addPackageAndDist = function *(next) {
}
var attachment = pkg._attachments[filename];
var versionPackage = pkg.versions[version];
var maintainers = versionPackage.maintainers;
// should never happened in normal request
@@ -516,17 +534,6 @@ exports.addPackageAndDist = function *(next) {
return;
}
// check maintainers
var isMaintainer = yield* packageService.isMaintainer(name, username);
if (!isMaintainer) {
this.status = 403;
this.body = {
error: 'forbidden user',
reason: username + ' not authorized to modify ' + name
};
return;
}
// upload attachment
var tarballBuffer;
tarballBuffer = new Buffer(attachment.data, 'base64');

View File

@@ -1,6 +1,6 @@
{
"name": "cnpmjs.org",
"version": "1.2.0",
"version": "1.2.1",
"description": "Private npm registry and web for Enterprise, base on MySQL and Simple Store Service",
"main": "index.js",
"scripts": {

View File

@@ -65,7 +65,7 @@ describe('controllers/registry/deprecate.test.js', function () {
name: pkgname,
versions: {
'1.0.0': {
deprecated: 'mock test deprecated message'
deprecated: 'mock test deprecated message 1.0.0'
}
}
})
@@ -78,8 +78,33 @@ describe('controllers/registry/deprecate.test.js', function () {
.get('/' + pkgname + '/1.0.0')
.expect(200, function (err, res) {
should.not.exist(err);
res.body.deprecated.should.equal('mock test deprecated message');
done();
res.body.deprecated.should.equal('mock test deprecated message 1.0.0');
// undeprecated
request(app.listen())
.put('/' + pkgname)
.set('authorization', utils.adminAuth)
.send({
name: pkgname,
versions: {
'1.0.0': {
deprecated: ''
}
}
})
.expect({
ok: true
})
.expect(201, function (err) {
should.not.exist(err);
request(app.listen())
.get('/' + pkgname + '/1.0.0')
.expect(200, function (err, res) {
should.not.exist(err);
res.body.deprecated.should.equal('');
done();
});
});
});
});
});
@@ -91,11 +116,14 @@ describe('controllers/registry/deprecate.test.js', function () {
.send({
name: pkgname,
versions: {
'1.0.0': {
version: '1.0.0'
},
'0.0.1': {
deprecated: 'mock test deprecated message'
deprecated: 'mock test deprecated message 0.0.1'
},
'0.0.2': {
deprecated: 'mock test deprecated message'
deprecated: 'mock test deprecated message 0.0.2'
}
}
})
@@ -104,13 +132,13 @@ describe('controllers/registry/deprecate.test.js', function () {
})
.expect(201, function (err, res) {
should.not.exist(err);
done = pedding(2, done);
done = pedding(3, done);
request(app.listen())
.get('/' + pkgname + '/0.0.1')
.expect(200, function (err, res) {
should.not.exist(err);
res.body.deprecated.should.equal('mock test deprecated message');
res.body.deprecated.should.equal('mock test deprecated message 0.0.1');
done();
});
@@ -118,7 +146,16 @@ describe('controllers/registry/deprecate.test.js', function () {
.get('/' + pkgname + '/0.0.2')
.expect(200, function (err, res) {
should.not.exist(err);
res.body.deprecated.should.equal('mock test deprecated message');
res.body.deprecated.should.equal('mock test deprecated message 0.0.2');
done();
});
// not change 1.0.0
request(app.listen())
.get('/' + pkgname + '/1.0.0')
.expect(200, function (err, res) {
should.not.exist(err);
res.body.deprecated.should.equal('');
done();
});
});
@@ -145,5 +182,30 @@ describe('controllers/registry/deprecate.test.js', function () {
})
.expect(400, done);
});
it('should 403', function (done) {
request(app.listen())
.put('/' + pkgname)
.set('authorization', utils.otherUserAuth)
.send({
name: pkgname,
versions: {
'1.0.0': {
version: '1.0.0'
},
'0.0.1': {
deprecated: 'mock test deprecated message 0.0.1'
},
'0.0.2': {
deprecated: 'mock test deprecated message 0.0.2'
}
}
})
.expect({
error: 'no_perms',
reason: 'Private mode enable, only admin can publish this module'
})
.expect(403, done);
});
});
});