Skip to content

Commit

Permalink
Merge pull request #13 from domapic/services-api
Browse files Browse the repository at this point in the history
Services api
  • Loading branch information
javierbrea committed Sep 20, 2018
2 parents 47be2a6 + 90feab0 commit d3df6cb
Show file tree
Hide file tree
Showing 38 changed files with 1,991 additions and 66 deletions.
9 changes: 9 additions & 0 deletions .narval.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,15 @@ suites:
specs:
- test/functional/specs/authentication-api.specs.js
coverage: *base-coverage
- name: services
describe: Services api should work as expected
before: *base-before
services: *base-services
test:
<<: *base-test
specs:
- test/functional/specs/services-api.specs.js
coverage: *base-coverage
- name: users-cli
describe: Users cli should be able to add and remove users
before: *base-before
Expand Down
3 changes: 2 additions & 1 deletion cli/commands/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ const autocomplete = require('inquirer-autocomplete-prompt')
const lib = require('../../lib')
const templates = require('../../lib/templates')
const { roles } = require('../../lib/security/utils')
const { isValidEmail, isValidName } = require('../../lib/models/user')
const { isValidEmail } = require('../../lib/models/user')
const { isValidName } = require('../../lib/utils')

inquirer.registerPrompt('autocomplete', autocomplete)

Expand Down
7 changes: 5 additions & 2 deletions lib/Api.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@

const users = require('./api/users')
const securityTokens = require('./api/securityTokens')
const services = require('./api/services')

const Api = (service, commands) => ({
openapis: [
...users.openapi(),
...securityTokens.openapi()
...securityTokens.openapi(),
...services.openapi()
],
operations: {
...users.Operations(service, commands),
...securityTokens.Operations(service, commands)
...securityTokens.Operations(service, commands),
...services.Operations(service, commands)
}
})

Expand Down
4 changes: 3 additions & 1 deletion lib/Commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
const user = require('./commands/user')
const securityToken = require('./commands/securityToken')
const composed = require('./commands/composed')
const serviceCommand = require('./commands/service')

const Commands = (service, models, client) => {
const commands = {
user: user.Commands(service, models, client),
securityToken: securityToken.Commands(service, models, client)
securityToken: securityToken.Commands(service, models, client),
service: serviceCommand.Commands(service, models, client)
}

return {
Expand Down
4 changes: 3 additions & 1 deletion lib/Models.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

const user = require('./models/user')
const securityToken = require('./models/securityToken')
const serviceModel = require('./models/service')

const Models = service => ({
User: user.Model(service),
SecurityToken: securityToken.Model(service)
SecurityToken: securityToken.Model(service),
Service: serviceModel.Model(service)
})

module.exports = Models
2 changes: 1 addition & 1 deletion lib/api/securityTokens.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const Operations = (service, commands) => ({
type: params.query.type,
_user: params.query.user
}, isUndefined)
return commands.securityToken.getAll(filter)
return commands.securityToken.getFiltered(filter)
}
}
})
Expand Down
71 changes: 71 additions & 0 deletions lib/api/services.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
'use strict'

const { omitBy, isUndefined } = require('lodash')

const definition = require('./services.json')
const { roles } = require('../security/utils')

const Operations = (service, commands) => {
const authService = (userData, params, body) => {
if (userData.role === roles.ADMIN || userData.role === roles.SERVICE_REGISTERER) {
return true
}
return commands.service.get({
name: params.path.name
}).then(serviceData => {
if (serviceData._user === userData._id) {
return Promise.resolve()
}
return Promise.reject(new service.errors.Forbidden())
})
}

return {
getServices: {
auth: (userData, params, body) => {
if (userData.role === roles.ADMIN || userData.role === roles.SERVICE_REGISTERER || userData._id.toString() === params.query.user) {
return true
}
return false
},
handler: (params, body, res) => {
const filter = omitBy({
_user: params.query.user
}, isUndefined)
return commands.service.getFiltered(filter)
}
},
getService: {
auth: authService,
handler: (params, body, res) => commands.service.get({
name: params.path.name
})
},
updateService: {
auth: authService,
handler: (params, body, res) => commands.service.update(params.path.name, body).then(serviceData => {
res.status(204)
res.header('location', `/api/services/${serviceData.name}`)
return Promise.resolve()
})
},
addService: {
auth: (userData, params, body) => (
userData.role === roles.ADMIN || userData.role === roles.SERVICE_REGISTERER || userData._id.toString() === body._user
),
handler: (params, body, res) => commands.service.add(body)
.then(serviceData => {
res.status(201)
res.header('location', `/api/services/${serviceData.name}`)
return Promise.resolve()
})
}
}
}

const openapi = () => [definition]

module.exports = {
Operations,
openapi
}
Loading

0 comments on commit d3df6cb

Please sign in to comment.