Skip to content

Commit de9d477

Browse files
committed
Remap auth, pass params to all actions
1 parent 56d383c commit de9d477

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

index.js

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ const noIdErr = () => JSON.stringify(new Error('no id passed'))
9494
module.exports = {
9595
register,
9696
start,
97+
_authenticate,
9798
_find,
9899
_findAll,
99100
_create,
@@ -142,26 +143,32 @@ function handleRequest (req, res) {
142143
req.once('error', (err) => sendErr(res, err))
143144
let handler = (resource[action] || handlers[action])
144145
let jwt = (req.headers.authorization || '').replace(/^Bearer\s/, '')
145-
authenticate(jwt).then((authData) => {
146+
_authenticate(jwt).then((authData) => {
146147
req.auth = req.params.auth = authData
147148
handler(req, res, resource.name)
148149
}).catch((err) => fourOhOne(res, err))
149150
}
150151

151-
function authenticate (jwt) {
152+
function _authenticate (jwt) {
152153
let key = jwtOpts.secret || jwtOpts.publicKey
153154
if (!jwtOpts || !key) return Promise.resolve()
154155
return new Promise((resolve, reject) => {
155-
jsonwebtoken.verify(jwt, key, jwtOpts, (err, decoded) => {
156-
return err ? reject(err) : resolve(decoded)
156+
jsonwebtoken.verify(jwt, key, jwtOpts, (err, d) => {
157+
if (err) reject(err)
158+
let reducer = (o, k) => { o[k.toLowerCase()] = true; return o }
159+
d.is = (d.roles || []).reduce(reducer, {})
160+
d.can = (d.permit || []).reduce(reducer, {})
161+
delete d.roles
162+
delete d.permit
163+
return err ? reject(err) : resolve(d)
157164
})
158165
})
159166
}
160167

161168
// helper: find resource
162-
function _find (resource, id) {
169+
function _find (resource, id, params) {
163170
if (!id && id !== 0) return Promise.reject(noIdErr())
164-
let params = {id_array: [id]}
171+
params.id_array = [id]
165172
let firstRecord = (d) => Promise.resolve(d[0])
166173
return callPgFunc(`${pgPrefix}${resource}_read`, params).then(firstRecord)
167174
}
@@ -177,23 +184,24 @@ function _findAll (resource, params) {
177184
}
178185

179186
// helper: create resource
180-
function _create (resource, attrs) {
187+
function _create (resource, params) {
181188
let firstRecord = (d) => Promise.resolve(d[0])
182-
return callPgFunc(`${pgPrefix}${resource}_create`, attrs).then(firstRecord)
189+
return callPgFunc(`${pgPrefix}${resource}_create`, params).then(firstRecord)
183190
}
184191

185192
// helper: update resource
186-
function _save (resource, id, attrs) {
193+
function _save (resource, id, params) {
187194
if (!id && id !== 0) return Promise.reject(noIdErr())
188-
attrs.id = id
195+
params.id = id
189196
let firstRecord = (d) => Promise.resolve(d[0])
190-
return callPgFunc(`${pgPrefix}${resource}_update`, attrs).then(firstRecord)
197+
return callPgFunc(`${pgPrefix}${resource}_update`, params).then(firstRecord)
191198
}
192199

193200
// helper: delete resource
194-
function _destroy (resource, id) {
201+
function _destroy (resource, id, params) {
195202
if (!id && id !== 0) return Promise.reject(noIdErr())
196-
return callPgFunc(`${pgPrefix}${resource}_delete`, {id})
203+
params.id = id
204+
return callPgFunc(`${pgPrefix}${resource}_delete`, params)
197205
}
198206

199207
// resource method: search
@@ -215,7 +223,7 @@ function resourceCreate (req, res, name) {
215223

216224
// resource method: read
217225
function resourceRead (req, res, name) {
218-
_find(name, req.id).then((d) => {
226+
_find(name, req.id, req.params).then((d) => {
219227
return sendData(res, d)
220228
}).catch((err) => sendErr(res, err))
221229
}
@@ -232,7 +240,7 @@ function resourceUpdate (req, res, name) {
232240

233241
// resource method: delete
234242
function resourceDelete (req, res, name) {
235-
_destroy(name, req.id).then((d) => {
243+
_destroy(name, req.id, req.params).then((d) => {
236244
return sendData(res, 'success')
237245
}).catch((err) => sendErr(res, err))
238246
}

0 commit comments

Comments
 (0)