3 var _ = require('lodash');
4 var util = require('util');
5 var zendesk = require('node-zendesk');
7 var ZendeskAccount = require('../../models').ZendeskAccount;
9 // Get list of zendesk_accounts
10 exports.index = function(req, res, next) {
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;
19 offset: page * per_page
22 _.forIn(req.query, function(value, key) {
28 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
34 attributes.forEach(function(attribute) {
37 $like: '%' + value + '%'
40 query.where.$or.push(tmp);
47 query.where[key].$like = '%' + value + '%';
52 .findAndCountAll(query)
53 .then(function(result) {
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;
59 return res.status(200).send({
63 previous_page: previous_page,
64 total_pages: total_pages
68 .catch(function(err) {
69 return res.status(500).send({
70 error: 'Something blew up!'
75 // Get a single zendesk_account
76 exports.show = function(req, res) {
78 .findById(req.params.id)
79 .then(function(zendesk_account) {
80 if (!zendesk_account) {
81 return res.sendStatus(404);
83 return res.send(zendesk_account);
85 .catch(function(err) {
86 return handleError(res, err);
90 // Creates a new zendesk_account in the DB.
91 exports.create = function(req, res) {
94 .then(function(zendesk_account) {
95 return res.status(201).send(zendesk_account);
97 .catch(function(err) {
98 return handleError(res, err);
102 // Updates an existing zendesk_account in the DB.
103 exports.update = function(req, res) {
108 .findById(req.params.id)
109 .then(function(zendesk_account) {
110 if (!zendesk_account) {
111 return res.sendStatus(404);
113 var updated = _.merge(zendesk_account, req.body);
116 return res.status(200).send(zendesk_account);
118 .catch(function(err) {
119 return handleError(res, err);
122 .catch(function(err) {
123 return handleError(res, err);
127 // Deletes a zendesk_account from the DB.
128 exports.destroy = function(req, res) {
130 .findById(req.params.id)
131 .then(function(zendesk_account) {
132 if (!zendesk_account) {
133 return res.sendStatus(404);
135 zendesk_account.destroy()
137 return res.sendStatus(204);
139 .catch(function(err) {
140 return handleError(res, err);
143 .catch(function(err) {
144 return handleError(res, err);
148 exports.bulkDestroy = function(req, res) {
154 individualHooks: true
157 return res.sendStatus(204);
159 .catch(function(err) {
160 return handleError(res, err);
164 exports.zendeskValidation = function(req, res) {
166 where[req.params.field] = req.body.value;
171 .then(function(result) {
173 return res.status(200).send({
175 value: req.body.value
178 return res.status(200).send({
180 value: req.body.value
183 .catch(function(err) {
184 return handleError(res, err);
189 exports.checkAccount = function(req, res) {
191 .findById(req.params.id)
192 .then(function(account) {
193 var accountZendesk = {
194 username: account.username,
195 remoteUri: account.remoteUri,
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;
204 // console.log(accountZendesk);
205 var client = zendesk.createClient(accountZendesk);
206 client.users.auth(function(err, res2, result) {
209 return handleError(res, err);
211 // console.log(result);
212 if (!result.verified) {
213 return res.sendStatus(500);
215 return res.sendStatus(204);
218 .catch(function(err) {
219 return handleError(res, err);
223 function handleError(res, err) {
224 return res.status(500).send(err);