@@ -94,6 +94,7 @@ const noIdErr = () => JSON.stringify(new Error('no id passed'))
9494module . 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 ( / ^ B e a r e r \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
217225function 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
234242function 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