3ebcb5cad9add0af145e07f16607ee5da42db162
[motion.git] / server / api / module / setting / setting.controller.js
1 'use strict';
2
3 var _ = require('lodash');
4 var util = require('util');
5 var crypto = require('crypto');
6
7 var Setting = require('../../models').Setting;
8
9 // Get list of settings
10 exports.index = function(req, res) {
11   Setting
12     .findAll()
13     .then(function(settings) {
14       return res.status(200).send(settings);
15     })
16     .catch(function(err) {
17       return handleError(res, err);
18     });
19 };
20
21 // Get a single setting
22 exports.show = function(req, res) {
23   Setting
24     .findById(req.params.id)
25     .then(function(setting) {
26       if (!setting) {
27         return res.sendStatus(404);
28       }
29
30       if (setting.license) {
31         setting.license = decrypt('aes-256-ctr', util.format('%s:%s:%s',
32           setting.address, setting.netmask, setting.mac), setting.license);
33         setting.license = JSON.parse(setting.license);
34       }
35
36       return res.send(setting);
37     })
38     .catch(function(err) {
39       return handleError(res, err);
40     });
41 };
42
43 // Creates a new setting in the DB.
44 exports.create = function(req, res) {
45   Setting
46     .create(req.body)
47     .then(function(setting) {
48       return res.status(201).send(setting);
49     })
50     .catch(function(err) {
51       return handleError(res, err);
52     });
53 };
54
55 // Updates an existing setting in the DB.
56 exports.update = function(req, res) {
57   if (req.body.id) {
58     delete req.body.id;
59   }
60   Setting
61     .findById(req.params.id)
62     .then(function(setting) {
63       if (!setting) {
64         return res.sendStatus(404);
65       }
66       var updated = _.merge(setting, req.body);
67       updated.save()
68         .then(function() {
69           return res.status(200).send(setting);
70         })
71         .catch(function(err) {
72           return handleError(res, err);
73         });
74     })
75     .catch(function(err) {
76       return handleError(res, err);
77     });
78 };
79
80 // Deletes a setting from the DB.
81 exports.destroy = function(req, res) {
82   Setting
83     .findById(req.params.id)
84     .then(function(setting) {
85       if (!setting) {
86         return res.sendStatus(404);
87       }
88       setting.destroy()
89         .then(function() {
90           return res.sendStatus(204);
91         })
92         .catch(function(err) {
93           return handleError(res, err);
94         });
95     })
96     .catch(function(err) {
97       return handleError(res, err);
98     });
99 };
100
101 function handleError(res, err) {
102   return res.status(500).send(err);
103 }
104
105 function decrypt(algorithm, password, text) {
106   var decipher = crypto.createDecipher(algorithm, password)
107   var dec = decipher.update(text, 'hex', 'utf8')
108   dec += decipher.final('utf8');
109   return dec;
110 }