32b4a66d6d8e5f7458b1fe286bd2501c26b5b9f1
[motion.git] / server / api / trunk / trunk.ami.js
1 'use strict';
2
3 var fs = require('fs');
4 var util = require('util');
5 var path = require('path');
6 var config = require('../../config/environment');
7 var Trunk = require('../../models').Trunk;
8 var VoiceExtension = require('../../models').VoiceExtension;
9 var _ = require('lodash');
10
11 exports.register = function(ami) {
12   Trunk.afterCreate(function(doc) {
13     console.log('create trunk hook');
14     trunksRewrite(doc, ami, false);
15   })
16   Trunk.afterUpdate(function(doc) {
17     console.log('update trunk hook');
18     trunksRewrite(doc, ami, false);
19   })
20   Trunk.afterDelete(function(doc) {
21     console.log('delete trunk hook');
22     trunksRewrite(doc, ami, true);
23   })
24 }
25
26 function trunksRewrite(doc, ami, deleteTrunk) {
27   var trunksFile = '';
28   if (!deleteTrunk) {
29     var newTrunk = _.clone(doc.dataValues);
30     delete newTrunk.id;
31     delete newTrunk.createdAt;
32     delete newTrunk.updatedAt;
33     trunksFile += util.format('[%s]\n', newTrunk.name);
34     if (newTrunk.otherFields) {
35       trunksFile += util.format('%s\n', newTrunk.otherFields);
36       delete newTrunk.otherFields;
37     }
38     for (var key in newTrunk) {
39       if (newTrunk[key]) {
40         trunksFile += util.format('%s=%s\n', key, newTrunk[key]);
41       }
42     }
43   }
44   Trunk
45     .findAll({
46       where: {
47         id: {
48           $ne: doc.id
49         }
50       }
51     })
52     .then(function(trunks) {
53       var oldTrunks = _.pluck(trunks, 'dataValues');
54       oldTrunks.forEach(function(element) {
55         delete element.id;
56         delete element.createdAt;
57         delete element.updatedAt;
58         trunksFile += util.format('[%s]\n', element.name);
59         if (element.otherFields) {
60           trunksFile += util.format('%s\n', element.otherFields);
61           delete element.otherFields;
62         }
63         for (var key in element) {
64           if (element[key]) {
65             trunksFile += util.format('%s=%s\n', key, element[key]);
66           }
67         }
68       });
69       fs.writeFile(path.join(config.root, 'server/files/asterisk/sip_xcally_trunks.conf'), trunksFile, {
70         flags: 'w',
71         mode: parseInt('0777', 8)
72       }, function(err) {
73         if (err) throw err;
74         console.log("Trunks file saved!");
75         ami.action({
76           Action: 'Reload',
77           Module: 'chan_sip'
78         }, function(err, res) {
79           if (err) {
80             console.error(err);
81           } else {
82             console.log(res);
83           }
84         });
85       });
86     })
87     .catch(function(err) {
88       console.log(err);
89     });
90 }