/
createEndpoint.js
47 lines (38 loc) · 1.24 KB
/
createEndpoint.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
const acl = require('./../model/acl')
const fs = require('fs-extra')
const help = require('./../help')
const mkdirp = require('mkdirp')
const path = require('path')
const CreateEndpoint = function (server) {
server.app.routeMethods('/:version/:endpointName/config', {
post: this.post.bind(this)
})
this.server = server
}
CreateEndpoint.prototype.post = function (req, res, next) {
let version = req.params.version
let name = req.params.endpointName
let dir = path.join(this.server.endpointPath, version)
let filePath = path.join(dir, `endpoint.${name}.js`)
// If the component already exists, pass it on to the next handler.
if (this.server.components[`/${version}/${name}`]) {
return next()
}
// Accessible to root users only.
if (!acl.client.isAdmin(req.dadiApiClient)) {
return help.sendBackJSON(null, res, next)(
acl.createError(req.dadiApiClient)
)
}
mkdirp(dir, {}, (err, made) => {
if (err) return next(err)
return fs.writeFile(filePath, req.body, err => {
if (err) return next(err)
help.sendBackJSON(200, res, next)(null, {
success: true,
message: `Endpoint "${version}:${name}" created`
})
})
})
}
module.exports = server => new CreateEndpoint(server)