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