Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- restify = require "restify"
- config = require __dirname+'/../config/index'
- logger = require __dirname+'/../lib/logger'
- secure_config = require __dirname+'/../secure_config'
- mongoose = require 'mongoose'
- produce = require __dirname+'/../tools/produce'
- components = require __dirname+'/../components/'
- path = require 'path'
- _ = require 'underscore'
- validUrl = require 'valid-url'
- db = require '../lib/db'
- crypto = require('crypto')
- key = "regerg5ret45w3t"
- async = require 'async'
- smb2_settings = []
- smb2 = false
- db.connection.connect config.db
- {Task, User} = db.models
- checkSmb2Settings = () ->
- return false if !smb2_settings or smb2_settings.length is 0
- checkSettings = true
- smb2_settings.forEach (d) ->
- if !d.share or !d.domain or !d.username or !d.password
- checkSettings = false
- else if (!d.alias or !d.absolutepath) and !d.useapplyDPID
- checkSettings = false
- if checkSettings is false
- smb2_settings = []
- return false
- return true
- server = restify.createServer({
- name: 'CanvasApi'
- });
- server.use(restify.bodyParser({ mapParams: false }));
- server.listen config.port, ()->
- console.log "Restify server listening on port " + config.port
- checkUser = (username, pass, crypto_pass, cb) ->
- password = if crypto_pass then pass else crypto.createHmac("md5", pass).update(key).digest("hex")
- User.find {username: username, password: password}, (err, user) ->
- if (err)
- return cb && cb(err)
- else
- return cb && cb(null, user)
- server.post
- name: "upload"
- path: "/upload"
- , (req, res, next) ->
- body = req.body
- if body.tasks? && body.target? && body.env? && body.username? && body.password? && body.tasks.tasks?
- if body.tasks.tasks
- bodyTasks = body.tasks.tasks
- bodyTarget = body.target
- bodyEnv = body.env
- username = body.username
- password = body.password
- smb2 = body.smb2 if body.smb2
- smb2_settings = body.smb2_settings if body.smb2_settings
- debug = body.debug if body.debug
- smb2 = checkSmb2Settings() if smb2
- crypto_pass = if body.crypto_pass then true else false
- async.waterfall [
- (cb) ->
- checkUser username, password, crypto_pass, (err, user) ->
- return cb(err) if err
- if (user.length is 0)
- return cb('Incorrect username or password!')
- cb null, user
- (user, cb) ->
- smb2_settings = JSON.stringify(smb2_settings) if smb2
- _.each secure_config, (d, key) ->
- search = new RegExp "\\"+key, 'g'
- bodyTasks = JSON.parse(JSON.stringify(bodyTasks).replace(search, d))
- smb2_settings = smb2_settings.replace(search, d) if smb2
- smb2_settings = JSON.parse smb2_settings if smb2
- cb null, user
- (user, cb) ->
- if user[0].ban_components
- bodyTasks = bodyTasks.filter (d) ->
- return user[0].ban_components.indexOf(d.task) is -1
- return cb 'Your task list is empty or you do not have access to these tasks' if (bodyTasks.length is 0)
- cb null, user
- (user, cb) ->
- if debug
- log_st = 'LOG_DEBUG'
- else
- log_st = 'NO_DEBUG'
- logger.init {"log_st": log_st}
- cb null, user
- (user, cb) ->
- task = new Task({status: 'processing', adding_date: new Date(), who_added: user[0]._id})
- task.save (err, task) ->
- return cb err if err
- cb null, user, task
- (user, task, cb) ->
- produce bodyTasks, bodyTarget, bodyEnv, smb2_settings, body.current_dir, (err) ->
- update_task = {}
- if err
- update_task.status = "error"
- update_task.error = err
- else
- update_task.status = 'done'
- update_task.error = null
- update_task.id = task._id.toString()
- Task.findByIdAndUpdate task['_id'], update_task, (err, task) ->
- return cb(null, task)
- ], (err, task) ->
- if err
- res.send 500, err
- else
- res.send 200, task
- next()
- else
- res.send 500, 'Bad format for tasks argument!'
- next()
- else
- res.send 500, 'One of required parameters are not filled!'
- next()
- server.post
- name: "status_task"
- path: "/status"
- , (req, res, next) ->
- id = req.body.id
- Task.findById id, (err, task) ->
- if (err)
- res.send 500, err
- next()
- else
- res.send 200, task
- next()
- server.post
- name: "change_password"
- path: "/changePassword"
- , (req, res, next) ->
- body = req.body
- if body.username? && body.password? && body.new_password?
- username = body.username
- password = body.password
- new_password = body.new_password
- checkUser username, password, (err, user) ->
- if (err)
- res.send 500, err
- next()
- return
- if (user.length is 0)
- res.send 500, 'Incorrect username or password!'
- next()
- return
- pass = crypto.createHmac("md5", new_password).update(key).digest("hex")
- User.update {username: username}, {$set: {password: pass}}, (err, user) ->
- if (err)
- res.send 500, err
- next()
- return
- res.send 200, 'Password successfully updated!'
- next()
- else
- res.send 500, 'One of required parameters are not filled!'
- next()
- server.post
- name: "get_tasks"
- path: "/getTasks"
- , (req, res, next) ->
- body = req.body
- if body.username? && body.password?
- username = body.username
- password = body.password
- new_password = body.new_password
- checkUser username, password, (err, user) ->
- if (err)
- res.send 500, err
- next()
- return
- if (user.length is 0)
- res.send 500, 'Incorrect username or password!'
- next()
- return
- filter = {}
- if body.status
- filter.status = body.status
- Task.find filter, (err, tasks) ->
- if (err)
- res.send 500, err
- next()
- else
- res.send 200, tasks
- next()
- else
- res.send 500, 'One of required parameters are not filled!'
- next()
- module.exports = server
Add Comment
Please, Sign In to add comment