Skip to content

Commit a09af48

Browse files
authored
Merge pull request #2 from ngash/port-updates-from-upstream
Port updates from upstream
2 parents 79ac3fb + 336f7d4 commit a09af48

File tree

7 files changed

+50
-0
lines changed

7 files changed

+50
-0
lines changed

lib/config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ function Config(config) {
5050
}
5151
}
5252

53+
if (!self.npm_client_version) {
54+
self.npm_client_version = "*"
55+
}
56+
57+
if (!self.sentry_dsn) {
58+
self.sentry_dsn = process.env.SENTRY_DSN;
59+
}
60+
5361
var users = {all:true, anonymous:true, 'undefined':true, owner:true, none:true}
5462

5563
var check_user_or_uplink = function(arg) {

lib/index-api.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var expressJson5 = require('express-json5')
44
var Error = require('http-errors')
55
var Path = require('path')
66
var Middleware = require('./middleware')
7+
var Semver = require('semver');
78
var Utils = require('./utils')
89
var expect_json = Middleware.expect_json
910
var match = Middleware.match
@@ -22,6 +23,7 @@ module.exports = function(config, auth, storage) {
2223
app.param('tag', validate_name)
2324
app.param('version', validate_name)
2425
app.param('revision', validate_name)
26+
app.param('token', validate_name)
2527

2628
// these can't be safely put into express url for some reason
2729
app.param('_rev', match(/^-rev$/))
@@ -165,6 +167,11 @@ module.exports = function(config, auth, storage) {
165167
var token = (req.body.name && req.body.password)
166168
? auth.aes_encrypt(req.body.name + ':' + req.body.password).toString('base64')
167169
: undefined
170+
171+
if (!Semver.satisfies(req.header('version'), config.npm_client_version) && config.npm_client_version !== '*') {
172+
return next( Error[422]('Your npm version is not accepted. Required: "' + config.npm_client_version + '" Received: "' + req.header('version') + '"') )
173+
}
174+
168175
if (req.remote_user.name != null) {
169176
res.status(201)
170177
return next({
@@ -202,6 +209,13 @@ module.exports = function(config, auth, storage) {
202209
}
203210
})
204211

212+
app.delete('/-/user/token/:token', function(req, res, next) {
213+
res.status(200)
214+
next({
215+
ok: 'Logged out',
216+
})
217+
})
218+
205219
function tag_package_version(req, res, next) {
206220
if (typeof(req.body) !== 'string') return next('route')
207221

lib/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var express = require('express')
22
var Error = require('http-errors')
33
var compression = require('compression')
4+
var raven = require('raven')
45
var Auth = require('./auth')
56
var Logger = require('./logger')
67
var Config = require('./config')
@@ -16,13 +17,20 @@ module.exports = function(config_hash) {
1617
var storage = Storage(config)
1718
var auth = Auth(config)
1819
var app = express()
20+
var ravenClient = config.sentry_dsn ? new raven.Client(config.sentry_dsn) : null
1921

22+
if (ravenClient) {
23+
ravenClient.patchGlobal()
24+
}
2025
// run in production mode by default, just in case
2126
// it shouldn't make any difference anyway
2227
app.set('env', process.env.NODE_ENV || 'production')
2328

2429
function error_reporting_middleware(req, res, next) {
2530
res.report_error = res.report_error || function(err) {
31+
if (ravenClient) {
32+
raven.middleware.express.errorHandler(ravenClient)(err, req, res, next)
33+
}
2634
if (err.status && err.status >= 400 && err.status < 600) {
2735
if (!res.headersSent) {
2836
res.status(err.status)

package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ dependencies:
4141
jju: '1.x'
4242
JSONStream: '1.x'
4343

44+
raven: '>=0.10.0'
4445
mkdirp: '>=0.3.5 <1.0.0-0'
4546
sinopia-htpasswd: '>= 0.4.3'
4647
http-errors: '>=1.2.0'

test/functional/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ describe('Func', function() {
5959
require('./scoped')()
6060
require('./security')()
6161
require('./adduser')()
62+
require('./logout')()
6263
require('./addtag')()
6364
require('./plugins')()
6465

test/functional/lib/server.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ Server.prototype.auth = function(user, pass) {
4343
})
4444
}
4545

46+
Server.prototype.logout = function(token) {
47+
return this.request({
48+
uri: '/-/user/token/'+encodeURIComponent(token),
49+
method: 'DELETE'
50+
})
51+
}
52+
4653
Server.prototype.get_package = function(name) {
4754
return this.request({
4855
uri: '/'+encodeURIComponent(name),

test/functional/logout.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module.exports = function() {
2+
var server = process.server
3+
4+
describe('logout', function() {
5+
it('should log out', function () {
6+
return server.logout('some-token')
7+
.status(200)
8+
.body_ok(/Logged out/)
9+
})
10+
})
11+
}

0 commit comments

Comments
 (0)