Built motion from commit 06df96e on branch develop.
[motion.git] / server / api / zendesk_account / zendesk_account.controller.js
1 'use strict';
2
3 var _ = require('lodash');
4 var util = require('util');
5 var zendesk = require('node-zendesk');
6
7 var ZendeskAccount = require('../../models').ZendeskAccount;
8
9 // Get list of zendesk_accounts
10 exports.index = function(req, res, next) {
11
12   var attributes = ['description', 'name', 'username', 'remoteUri'];
13   var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
14   var page = req.query.page ? parseInt(req.query.page, 10) : 0;
15
16   var query = {
17     where: {},
18     limit: per_page,
19     offset: page * per_page
20   };
21
22   _.forIn(req.query, function(value, key) {
23     switch (key) {
24       case 'per_page':
25       case 'page':
26         break;
27       case 'sort_by':
28         query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
29         break;
30       case 'sort_order':
31         break;
32       case '$':
33         query.where.$or = [];
34         attributes.forEach(function(attribute) {
35           var tmp = {};
36           tmp[attribute] = {
37             $like: '%' + value + '%'
38           };
39
40           query.where.$or.push(tmp);
41         });
42         break;
43       default:
44         query.where[key] = {
45           $like: {}
46         };
47         query.where[key].$like = '%' + value + '%';
48     }
49   });
50
51   ZendeskAccount
52     .findAndCountAll(query)
53     .then(function(result) {
54
55       var total_pages = Math.ceil(result.count / per_page);
56       var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
57       var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
58
59       return res.status(200).send({
60         count: result.count,
61         rows: result.rows,
62         next_page: next_page,
63         previous_page: previous_page,
64         total_pages: total_pages
65       });
66
67     })
68     .catch(function(err) {
69       return res.status(500).send({
70         error: 'Something blew up!'
71       });
72     });
73 };
74
75 // Get a single zendesk_account
76 exports.show = function(req, res) {
77   ZendeskAccount
78     .findById(req.params.id)
79     .then(function(zendesk_account) {
80       if (!zendesk_account) {
81         return res.sendStatus(404);
82       }
83       return res.send(zendesk_account);
84     })
85     .catch(function(err) {
86       return handleError(res, err);
87     });
88 };
89
90 // Creates a new zendesk_account in the DB.
91 exports.create = function(req, res) {
92   ZendeskAccount
93     .create(req.body)
94     .then(function(zendesk_account) {
95       return res.status(201).send(zendesk_account);
96     })
97     .catch(function(err) {
98       return handleError(res, err);
99     });
100 };
101
102 // Updates an existing zendesk_account in the DB.
103 exports.update = function(req, res) {
104   if (req.body.id) {
105     delete req.body.id;
106   }
107   ZendeskAccount
108     .findById(req.params.id)
109     .then(function(zendesk_account) {
110       if (!zendesk_account) {
111         return res.sendStatus(404);
112       }
113       var updated = _.merge(zendesk_account, req.body);
114       updated.save()
115         .then(function() {
116           return res.status(200).send(zendesk_account);
117         })
118         .catch(function(err) {
119           return handleError(res, err);
120         });
121     })
122     .catch(function(err) {
123       return handleError(res, err);
124     });
125 };
126
127 // Deletes a zendesk_account from the DB.
128 exports.destroy = function(req, res) {
129   ZendeskAccount
130     .findById(req.params.id)
131     .then(function(zendesk_account) {
132       if (!zendesk_account) {
133         return res.sendStatus(404);
134       }
135       zendesk_account.destroy()
136         .then(function() {
137           return res.sendStatus(204);
138         })
139         .catch(function(err) {
140           return handleError(res, err);
141         });
142     })
143     .catch(function(err) {
144       return handleError(res, err);
145     });
146 };
147
148 exports.bulkDestroy = function(req, res) {
149   ZendeskAccount
150     .destroy({
151       where: {
152         id: req.query.id
153       },
154       individualHooks: true
155     })
156     .then(function() {
157       return res.sendStatus(204);
158     })
159     .catch(function(err) {
160       return handleError(res, err);
161     });
162 };
163
164 exports.zendeskValidation = function(req, res) {
165   var where = {};
166   where[req.params.field] = req.body.value;
167   ZendeskAccount
168     .findAndCountAll({
169       where: where
170     })
171     .then(function(result) {
172       if (result.count) {
173         return res.status(200).send({
174           isValid: false,
175           value: req.body.value
176         });
177       }
178       return res.status(200).send({
179         isValid: true,
180         value: req.body.value
181       });
182     })
183     .catch(function(err) {
184       return handleError(res, err);
185     });
186
187 };
188
189 exports.checkAccount = function(req, res) {
190   ZendeskAccount
191     .findById(req.params.id)
192     .then(function(account) {
193       var accountZendesk = {
194         username: account.username,
195         remoteUri: account.remoteUri,
196         // debug: true
197       };
198       if (account.authType === 'password') {
199         accountZendesk.password = account.password;
200       } else if (account.authType === 'token') {
201         accountZendesk.token = account.token;
202         // accountZendesk.oauth = true;
203       }
204       // console.log(accountZendesk);
205       var client = zendesk.createClient(accountZendesk);
206       client.users.auth(function(err, res2, result) {
207         if (err) {
208           console.error(err);
209           return handleError(res, err);
210         }
211         // console.log(result);
212         if (!result.verified) {
213           return res.sendStatus(500);
214         }
215         return res.sendStatus(204);
216       });
217     })
218     .catch(function(err) {
219       return handleError(res, err);
220     });
221 };
222
223 function handleError(res, err) {
224   return res.status(500).send(err);
225 }