Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions core/controllers/job/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,3 @@ module.exports = (server) => {
createJob
)
}

//const createFromFiles = (req, res, next) => {
//
// const form = formidable({ multiples: true })
//
// form.parse(req, (err, fields, files) => {
// if (err) {
// res.sendError(err)
// return;
// }
// res.send(200,{ fields, files })
// })
//}
51 changes: 51 additions & 0 deletions core/controllers/task/gateway.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const restify = require('restify')
const App = require('../../app')
const createJob = require('../../service/job/create')
const router = require('../../router')
const JobConstants = require('../../constants/jobs')
const { ClientError, ServerError } = require('../../lib/error-handler')

const OpenAPIRequestValidator = require('openapi-request-validator').default


module.exports = (server) => {
const tasksMiddlewares = [
server.auth.bearerMiddleware,
router.resolve.customerSessionToEntity(),
router.resolve.idToEntity({ param: 'task', required: true }),
router.ensureCustomer,
router.requireCredential('user'),
router.ensureAllowed({ entity: { name: 'task' } }),
(req, res, next) => {
try {
const task = req.task

const spec = task.gateway?.openapi_spec
if (!spec || spec.operation !== req.method.toLowerCase()) {
throw new ClientError('Method Not Allowed', { statusCode: 405 })
}

const requestValidator = new OpenAPIRequestValidator(spec)
const validator = requestValidator.validateRequest(req)

if (validator !== undefined) {
const err = new ClientError('Bad Request', { statusCode: validator.status })
err.errors = validator.errors
throw err
}

next()
} catch (err) {
res.sendError(err)
}
},
createJob
]

//server.get('/task/:task/path/:pathuuid', tasksMiddlewares)
server.get('/task/:task/gateway', tasksMiddlewares)
server.post('/task/:task/gateway', tasksMiddlewares)
server.put('/task/:task/gateway', tasksMiddlewares)
server.del('/task/:task/gateway', tasksMiddlewares)
server.patch('/task/:task/gateway', tasksMiddlewares)
}
2 changes: 2 additions & 0 deletions core/controllers/task/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const crud = require('./crud')
const gateway = require('./gateway')
const scheduler = require('./scheduler')
const serialize = require('./serialize')
const integrations = require('./integrations')
Expand All @@ -7,6 +8,7 @@ const acl = require('./acl')

module.exports = (server) => {
crud(server)
gateway(server)
scheduler(server)
serialize(server)
integrations(server)
Expand Down
32 changes: 32 additions & 0 deletions core/controllers/workflow/gateway.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const restify = require('restify')
const App = require('../../app')
const createJob = require('../../service/job/create')
const router = require('../../router')
const JobConstants = require('../../constants/jobs')
const { ClientError, ServerError } = require('../../lib/error-handler')

const OpenAPIRequestValidator = require('openapi-request-validator').default

module.exports = (server) => {
// GATEWAY METHODS
const workflowMiddlewares = [
server.auth.bearerMiddleware,
router.resolve.customerSessionToEntity(),
router.resolve.idToEntity({ param: 'workflow', required: true }),
router.ensureCustomer,
router.requireCredential('user'),
router.ensureAllowed({ entity: { name: 'workflow' } }),
(req, res, next) => {
const workflow = req.workflow
const method = req.method
next()
},
createJob
]

server.get('/workflow/:workflow/gateway', workflowMiddlewares)
server.post('/workflow/:workflow/gateway', workflowMiddlewares)
server.put('/workflow/:workflow/gateway', workflowMiddlewares)
server.del('/workflow/:workflow/gateway', workflowMiddlewares)
server.patch('/workflow/:workflow/gateway', workflowMiddlewares)
}
2 changes: 2 additions & 0 deletions core/controllers/workflow/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const crud = require('./crud')
const graph = require('./graph')
const gateway = require('./gateway')
const job = require('./job')
const acl = require('./acl')
const triggers = require('./triggers')
Expand All @@ -8,6 +9,7 @@ const scheduler = require('./scheduler')
const serialization = require('./serialization')

module.exports = (server) => {
gateway(server)
job(server)
serialization(server)
acl(server)
Expand Down
2 changes: 0 additions & 2 deletions core/entity/base-schema.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
'use strict'

const util = require('util')
const mongoose = require('mongoose')
const Schema = mongoose.Schema
Expand Down
16 changes: 14 additions & 2 deletions core/entity/task/base-properties.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict'
const ObjectId = require('mongoose').Types.ObjectId
const mongoose = require('mongoose')
const ObjectId = mongoose.Types.ObjectId
const Schema = mongoose.Schema
const randomSecret = require('../../lib/random-secret')
module.exports = {
order: { type: Number, default: 0 },
Expand Down Expand Up @@ -53,4 +54,15 @@ module.exports = {
version: { type: Number, 'default': 1 },
fingerprint: { type: String, 'default': '' },
//handle_errors: { type: Boolean }
gateway: {
//
// Docs https://swagger.io/docs/specification/basic-structure/
//
openapi_spec: new Schema({
openapi: { type: String }, // openapi spec version
path: { type: String }, // UUID auto generated to identify this path
operation: { type: String }, // method
parameters: [{ type: Object }] // task arguments using openapi spec
})
}
}
87 changes: 86 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"multer": "~1.4.2",
"nodemailer": "~6.7.0",
"nodemon": "~2.0.4",
"openapi-request-validator": "~12.0.0",
"passport": "~0.3.2",
"passport-http": "~0.3.0",
"passport-http-bearer": "~1.0.1",
Expand Down