forked from coderofsalvation/dpd-api-token
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
105 lines (91 loc) · 3.34 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
var monkeypatch = require('monkeypatch')
var Context = require('deployd/lib/context')
var ga = require('./lib/ga.js')
var patched = false
ga.init()
module.exports = function (Router, accountresource, apiTokenKey) {
var middleware = function (req, res, next) {
var now = new Date().getTime()
req.starttime = now
var restime = 99999999
var end = res.end
res.end = function () {
restime = (new Date().getTime() - now)
ga.pageview(req.url, req.method, restime)
return end.apply(this, arguments)
}
var resources = process.server.resources
if (!process.server.ga) process.server.ga = ga
if (!resources || !res) return next()
var resource = resources.find(function (r) { return r.name == accountresource })
var error = function (msg, noconsole) {
if (!res.send) return next() // weird edgecase
res.status(400).send({ code: 400, message: msg })
if (!noconsole) console.error(msg)
}
var unauthorized = function (msg, noconsole) {
if (!res.send) return next() // weird edgecase
res.status(401).send({ code: 401, message: msg })
if (!noconsole) console.error(msg)
}
if (!resource) return error("dpd-api-token: resource '" + accountresource + "' not found :(")
if (!resource.properties[apiTokenKey]) return error("dpd-api-token: please create property '" + apiTokenKey + "' in resource '" + accountresource + "'")
if (req.username != 'anonymous' && req.headers['x-api-token'] && req.headers['x-api-version']) {
var query = {}
query[apiTokenKey] = req.headers['x-api-token']
resource.store.find(query, function (err, user) {
if (err || !user[0]) return unauthorized("unknown apikey", true)
var user = user[0]
req.user = user
req.username = user.username
ga.event("request." + user.username + ".v" + req.headers['x-api-version'], req.method + " " + req.url)
next()
})
} else {
next()
}
ga.event("request", req.method + " " + req.url)
}
var route = Router.prototype.route
Router.prototype.route = function (req, res) {
var args = arguments
var me = this
middleware(req, res, function () {
return route.apply(me, args)
})
}
// process.server.on('listening', function(){
// if( process.server.resources && !patched){
// var route = process.server.router.route
// process.server.router.route = function(req, res){
// var args = arguments
// var me = this
// console.log("route!")
// middleware(resources, server, req, res, function(){
// return route.apply(me,args)
// })
// }
// patched = true
// console.log("patch!")
// }
// })
//monkeypatch( require('module').prototype,'require', function(original, modname ){
// if( modname == "./router" ){
// console.log("ja")
// var mod = original(modname)
// return function(resources,server){
// var route = mod.prototype.route
// mod.prototype.route = function(req, res){
// var args = arguments
// var me = this
// middleware(resources, server, req, res, function(){
// return route.apply(me,args)
// })
// }
// var router = new mod(resources,server)
// return router
// }
// }
// return original(modname)
//})
}