-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroutes.js
95 lines (79 loc) · 2.74 KB
/
routes.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
'use strict'
const epilogue = require('epilogue')
const express = require('express')
const jwt = require('jsonwebtoken')
function authorizationMiddleware (req, res, context) {
return new Promise(function(resolve) {
if(req.method === 'GET') {
resolve(context.continue)
} else if(!!req.header('Authorization')) {
const token = req.header('Authorization').split('Bearer ').pop()
try {
const decoded = jwt.verify(token, process.env.AUTH_SECRET)
if(decoded.rcsId) {
resolve(context.continue)
} else {
res.status(401).send({ message: "Unauthenticated" })
resolve(context.stop)
}
} catch (e) {
res.status(401).send({ message: "Invalid authorization token" })
resolve(context.stop)
}
} else {
res.status(401).send({ message: "Unauthorized" })
resolve(context.stop)
}
})
}
module.exports = connection => {
let router = express.Router()
epilogue.initialize({
app: router,
sequelize: connection
})
for(let name of Object.keys(connection.models)) {
const model = connection.model(name)
const tName = model.getTableName()
let templateUrl = ''
for(const k of model.primaryKeyAttributes) {
templateUrl += `/:${k}`
}
let configuration = {
model: model,
endpoints: [`/${tName}`, `/${tName}${templateUrl}`],
search: {
operator: '$iLike'
}
}
if('queryIncludes' in model) {
configuration.include = model.queryIncludes(connection)
}
if('defaultSort' in model) {
configuration.sort = { default: model.defaultSort }
}
let resource = epilogue.resource(configuration)
resource.all.auth(authorizationMiddleware)
if('milestones' in model) {
resource.use(model.milestones)
}
}
router.get('/', (req, res) => {
let output = ''
for (let key in router.stack) {
if (router.stack.hasOwnProperty(key)) {
let val = router.stack[key]
if(val.route) {
val = val.route
if(val.stack[0].method === 'get') {
output += `<li><a href="/api/${val.path}">/api/${val.path} (${val.stack[0].method})</a></li>`
} else {
output += `<li>/api/${val.path} (${val.stack[0].method})</li>`
}
}
}
}
res.send('<ul>' + output + '</ul>')
})
return router
}