Skip to content

Commit

Permalink
fix access control
Browse files Browse the repository at this point in the history
ref #238
  • Loading branch information
rlidwka committed Apr 21, 2015
1 parent e8593c4 commit 137fd59
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,11 +154,11 @@ Auth.prototype.allow_publish = function(package_name, user, callback) {
;(function next() {
var p = plugins.shift()

if (typeof(p.allow_access) !== 'function') {
if (typeof(p.allow_publish) !== 'function') {
return next()
}

p.allow_access(user, package, function(err, ok) {
p.allow_publish(user, package, function(err, ok) {
if (err) return callback(err)
if (ok) return callback(null, ok)
next() // cb(null, false) causes next plugin to roll
Expand Down
80 changes: 80 additions & 0 deletions test/functional/access.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@

module.exports = function () {
describe('access control', function () {
var server = process.server
var oldauth

before(function () {
oldauth = server.authstr
})

after(function () {
server.authstr = oldauth
})

function check_access(auth, pkg, ok) {
it((ok ? 'allows' : 'forbids') +' access ' + auth + ' to ' + pkg, function () {
server.authstr = auth
? 'Basic '+(new Buffer(auth).toString('base64'))
: undefined

var req = server.get_package(pkg)

if (ok) {
return req.status(404)
.body_error(/no such package available/)
} else {
return req.status(403)
.body_error(/not allowed to access package/)
}
})
}

function check_publish(auth, pkg, ok) {
it((ok ? 'allows' : 'forbids') + ' publish ' + auth + ' to ' + pkg, function () {
server.authstr = auth
? 'Basic '+(new Buffer(auth).toString('base64'))
: undefined

var req = server.put_package(pkg, require('./lib/package')(pkg))

if (ok) {
return req.status(404)
.body_error(/this package cannot be added/)
} else {
return req.status(403)
.body_error(/not allowed to publish package/)
}
})
}

check_access('test:test', 'test-access-only', true)
check_access(undefined, 'test-access-only', true)
check_access('test:badpass', 'test-access-only', true)
check_publish('test:test', 'test-access-only', false)
check_publish(undefined, 'test-access-only', false)
check_publish('test:badpass', 'test-access-only', false)

check_access('test:test', 'test-publish-only', false)
check_access(undefined, 'test-publish-only', false)
check_access('test:badpass', 'test-publish-only', false)
check_publish('test:test', 'test-publish-only', true)
check_publish(undefined, 'test-publish-only', true)
check_publish('test:badpass', 'test-publish-only', true)

check_access('test:test', 'test-only-test', true)
check_access(undefined, 'test-only-test', false)
check_access('test:badpass', 'test-only-test', false)
check_publish('test:test', 'test-only-test', true)
check_publish(undefined, 'test-only-test', false)
check_publish('test:badpass', 'test-only-test', false)

check_access('test:test', 'test-only-auth', true)
check_access(undefined, 'test-only-auth', false)
check_access('test:badpass', 'test-only-auth', false)
check_publish('test:test', 'test-only-auth', true)
check_publish(undefined, 'test-only-auth', false)
check_publish('test:badpass', 'test-only-auth', false)
})
}

20 changes: 20 additions & 0 deletions test/functional/config-1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,26 @@ packages:
allow_publish: all
proxy_access: baduplink

'test-access-only':
allow_access: $all
allow_publish: nobody
storage: false

'test-publish-only':
allow_access: nobody
allow_publish: $all
storage: false

'test-only-test':
allow_access: test
allow_publish: test
storage: false

'test-only-auth':
allow_access: $authenticated
allow_publish: $authenticated
storage: false

'*':
allow_access: test undefined
allow_publish: test undefined
Expand Down
1 change: 1 addition & 0 deletions test/functional/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ describe('Func', function() {

it('authenticate', function(){/* test for before() */})

require('./access')()
require('./basic')()
require('./gh29')()
require('./tags')()
Expand Down

0 comments on commit 137fd59

Please sign in to comment.