UNPKG

anthtrigger

Version:

Trigger events via http service

183 lines (151 loc) 3.75 kB
Ctrl = require './controller.coffee' spawn = require('child_process').spawn path = require 'path' exports.route = (app)-> app.post '/scripts/create', (req, res)-> Ctrl .addScript(req.body, req.cookies.uid) .fin (cb, err, script)-> res.json { success: !!!err script: script, error: err } _evt.script_add req.cookies.user, !!!err, script app.get '/scripts/find/:id', (req, res)-> scriptId = req.param('id') Ctrl .findById '' + scriptId .fin (cb, err, script)-> res.json { success: !!!err error: err script: script } app.get '/scripts/tags', (req, res)-> q = req.param('q') Ctrl .getTags q .fin (cb, err, list)-> res.json list app.get '/scripts/list', (req, res)-> page = req.param('page') page = parseInt(page) or 1 pageSize = req.param('pageSize') pageSize = parseInt(pageSize) or 10 q = req.param('q') user = req.session.user if not user then return res.json { success: false error: 400 } q_reg = new RegExp(q) searchStr_critical = { "$or": [ { 'title': q_reg }, { 'tags': { '$elemMatch': { $in: [ q ] } } } ] } userPermission_critical = if user and user.role isnt 'admin' then { "$or": [ { 'createByUser': user._id }, { "tags": { "$elemMatch": { $in: user.tags } } } ] } else {} critical = { "$and": [ userPermission_critical, searchStr_critical ] } Ctrl .listByPage critical, { skip: (page-1)*pageSize limit: pageSize sort: { lastRunAt: -1 } } .fin (cont, err, list, total)-> res.json { success: !!!err total: total list: list or [] } app.post '/scripts/edit/:id', (req, res)-> sid = '' + req.param('id') Ctrl .editScript(sid, req.body, req.cookies.uid) .fin (cont, err, count, script)-> res.json { success: !!!err script: script error: err } _evt.script_edit req.cookies.user, !!!err, script app.delete '/scripts/delete/:key', (req, res)-> key = req.param('key') Ctrl .deleteScript(key) .fin (cont, err, count, script)-> res.json { success: !!!err error: err } _evt.script_delete req.cookies.user, !!!err, script app.put '/scripts/run/:id', (req, res)-> sid = '' + req.param('id') args = req.body.args notes = req.body.notes Ctrl .runScript sid, args, app.get('configs').spawnOptions, req.session.user, notes .then (cb, result, doc, logs)-> res.json { success: true, error: result.error script: doc code: result.code logs: logs } _evt.script_run req.cookies.user, true, doc, logs app.post '/scripts/kill/:scriptId', (req, res)-> sid = '' + req.param('scriptId') Ctrl .killScript sid .fin (cb, err, script, logs)-> res.json { success: !!!err error: err script: script logs: logs } _evt.script_kill req.cookies.user, logs app.post '/hook', (req, res)-> shellOutput = '' projectName = req.body.repository.name projectConfig = configs.projects[projectName] # Missing project configs if not projectConfig res.send 404, 'Project not configured.' return shellFile = path.join(configs.shellDir, projectConfig.shell) # Execute shell file execution = spawn projectConfig.cmd, [ shellFile, JSON.stringify(req.body) ] # Collection outputs execution.stdout.on 'data', (data)-> shellOutput += data execution.stderr.on 'data', (data)-> shellOutput += data execution.on 'close', (code)-> return res.send(500, shellOutput) if code isnt 0