Guest User

Untitled

a guest
Feb 9th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.36 KB | None | 0 0
  1. restify = require "restify"
  2. config = require __dirname+'/../config/index'
  3. logger = require __dirname+'/../lib/logger'
  4. secure_config = require __dirname+'/../secure_config'
  5. mongoose = require 'mongoose'
  6. produce = require __dirname+'/../tools/produce'
  7. components = require __dirname+'/../components/'
  8. path = require 'path'
  9. _ = require 'underscore'
  10. validUrl = require 'valid-url'
  11. db = require '../lib/db'
  12. crypto = require('crypto')
  13. key = "regerg5ret45w3t"
  14. async = require 'async'
  15.  
  16. smb2_settings = []
  17. smb2 = false
  18.  
  19. db.connection.connect config.db
  20. {Task, User} = db.models
  21.  
  22. checkSmb2Settings = () ->
  23. return false if !smb2_settings or smb2_settings.length is 0
  24. checkSettings = true
  25. smb2_settings.forEach (d) ->
  26. if !d.share or !d.domain or !d.username or !d.password
  27. checkSettings = false
  28. else if (!d.alias or !d.absolutepath) and !d.useapplyDPID
  29. checkSettings = false
  30. if checkSettings is false
  31. smb2_settings = []
  32. return false
  33. return true
  34.  
  35. server = restify.createServer({
  36. name: 'CanvasApi'
  37. });
  38. server.use(restify.bodyParser({ mapParams: false }));
  39. server.listen config.port, ()->
  40. console.log "Restify server listening on port " + config.port
  41.  
  42. checkUser = (username, pass, crypto_pass, cb) ->
  43. password = if crypto_pass then pass else crypto.createHmac("md5", pass).update(key).digest("hex")
  44. User.find {username: username, password: password}, (err, user) ->
  45. if (err)
  46. return cb && cb(err)
  47. else
  48. return cb && cb(null, user)
  49.  
  50. server.post
  51. name: "upload"
  52. path: "/upload"
  53. , (req, res, next) ->
  54. body = req.body
  55. if body.tasks? && body.target? && body.env? && body.username? && body.password? && body.tasks.tasks?
  56. if body.tasks.tasks
  57. bodyTasks = body.tasks.tasks
  58. bodyTarget = body.target
  59. bodyEnv = body.env
  60. username = body.username
  61. password = body.password
  62. smb2 = body.smb2 if body.smb2
  63. smb2_settings = body.smb2_settings if body.smb2_settings
  64. debug = body.debug if body.debug
  65. smb2 = checkSmb2Settings() if smb2
  66. crypto_pass = if body.crypto_pass then true else false
  67. async.waterfall [
  68. (cb) ->
  69. checkUser username, password, crypto_pass, (err, user) ->
  70. return cb(err) if err
  71. if (user.length is 0)
  72. return cb('Incorrect username or password!')
  73. cb null, user
  74. (user, cb) ->
  75. smb2_settings = JSON.stringify(smb2_settings) if smb2
  76. _.each secure_config, (d, key) ->
  77. search = new RegExp "\\"+key, 'g'
  78. bodyTasks = JSON.parse(JSON.stringify(bodyTasks).replace(search, d))
  79. smb2_settings = smb2_settings.replace(search, d) if smb2
  80. smb2_settings = JSON.parse smb2_settings if smb2
  81. cb null, user
  82. (user, cb) ->
  83. if user[0].ban_components
  84. bodyTasks = bodyTasks.filter (d) ->
  85. return user[0].ban_components.indexOf(d.task) is -1
  86. return cb 'Your task list is empty or you do not have access to these tasks' if (bodyTasks.length is 0)
  87. cb null, user
  88. (user, cb) ->
  89. if debug
  90. log_st = 'LOG_DEBUG'
  91. else
  92. log_st = 'NO_DEBUG'
  93. logger.init {"log_st": log_st}
  94. cb null, user
  95. (user, cb) ->
  96. task = new Task({status: 'processing', adding_date: new Date(), who_added: user[0]._id})
  97. task.save (err, task) ->
  98. return cb err if err
  99. cb null, user, task
  100. (user, task, cb) ->
  101. produce bodyTasks, bodyTarget, bodyEnv, smb2_settings, body.current_dir, (err) ->
  102. update_task = {}
  103. if err
  104. update_task.status = "error"
  105. update_task.error = err
  106. else
  107. update_task.status = 'done'
  108. update_task.error = null
  109. update_task.id = task._id.toString()
  110. Task.findByIdAndUpdate task['_id'], update_task, (err, task) ->
  111. return cb(null, task)
  112. ], (err, task) ->
  113. if err
  114. res.send 500, err
  115. else
  116. res.send 200, task
  117. next()
  118. else
  119. res.send 500, 'Bad format for tasks argument!'
  120. next()
  121. else
  122. res.send 500, 'One of required parameters are not filled!'
  123. next()
  124.  
  125.  
  126. server.post
  127. name: "status_task"
  128. path: "/status"
  129. , (req, res, next) ->
  130. id = req.body.id
  131. Task.findById id, (err, task) ->
  132. if (err)
  133. res.send 500, err
  134. next()
  135. else
  136. res.send 200, task
  137. next()
  138.  
  139. server.post
  140. name: "change_password"
  141. path: "/changePassword"
  142. , (req, res, next) ->
  143. body = req.body
  144. if body.username? && body.password? && body.new_password?
  145. username = body.username
  146. password = body.password
  147. new_password = body.new_password
  148. checkUser username, password, (err, user) ->
  149. if (err)
  150. res.send 500, err
  151. next()
  152. return
  153. if (user.length is 0)
  154. res.send 500, 'Incorrect username or password!'
  155. next()
  156. return
  157. pass = crypto.createHmac("md5", new_password).update(key).digest("hex")
  158. User.update {username: username}, {$set: {password: pass}}, (err, user) ->
  159. if (err)
  160. res.send 500, err
  161. next()
  162. return
  163. res.send 200, 'Password successfully updated!'
  164. next()
  165. else
  166. res.send 500, 'One of required parameters are not filled!'
  167. next()
  168.  
  169. server.post
  170. name: "get_tasks"
  171. path: "/getTasks"
  172. , (req, res, next) ->
  173. body = req.body
  174. if body.username? && body.password?
  175. username = body.username
  176. password = body.password
  177. new_password = body.new_password
  178. checkUser username, password, (err, user) ->
  179. if (err)
  180. res.send 500, err
  181. next()
  182. return
  183. if (user.length is 0)
  184. res.send 500, 'Incorrect username or password!'
  185. next()
  186. return
  187. filter = {}
  188. if body.status
  189. filter.status = body.status
  190. Task.find filter, (err, tasks) ->
  191. if (err)
  192. res.send 500, err
  193. next()
  194. else
  195. res.send 200, tasks
  196. next()
  197. else
  198. res.send 500, 'One of required parameters are not filled!'
  199. next()
  200.  
  201. module.exports = server
Add Comment
Please, Sign In to add comment