Commit 93efc869 authored by Patricio Bruna's avatar Patricio Bruna

Refactor ResponseParser

parent 5db738b2
...@@ -87,6 +87,14 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -87,6 +87,14 @@ return /******/ (function(modules) { // webpackBootstrap
var _dictionary2 = _interopRequireDefault(_dictionary); var _dictionary2 = _interopRequireDefault(_dictionary);
var _response_parser = __webpack_require__(298);
var _response_parser2 = _interopRequireDefault(_response_parser);
var _error = __webpack_require__(299);
var _error2 = _interopRequireDefault(_error);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved. // Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
...@@ -94,34 +102,9 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -94,34 +102,9 @@ return /******/ (function(modules) { // webpackBootstrap
var jszimbra = __webpack_require__(126); var jszimbra = __webpack_require__(126);
var Error = function () {
function Error(err) {
(0, _classCallCheck3.default)(this, Error);
this.code = err.Fault ? err.Fault.Code.Value : err.status;
this.extra = this.getErrorInfo(err);
}
(0, _createClass3.default)(Error, [{
key: 'getErrorInfo',
value: function getErrorInfo(err) {
if (err && err.Fault) {
return {
'code': err.Fault.Detail.Error.Code,
'reason': err.Fault.Reason.Text,
'trace': err.Fault.Detail.Error.Trace
};
} else {
return { 'code': err.status, 'reason': err.statusText };
}
}
}]);
return Error;
}();
// TODO: To many parseResponse types // TODO: To many parseResponse types
var ZimbraAdminApi = function () { var ZimbraAdminApi = function () {
function ZimbraAdminApi(auth_object) { function ZimbraAdminApi(auth_object) {
(0, _classCallCheck3.default)(this, ZimbraAdminApi); (0, _classCallCheck3.default)(this, ZimbraAdminApi);
...@@ -130,12 +113,6 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -130,12 +113,6 @@ return /******/ (function(modules) { // webpackBootstrap
this.user = auth_object.user; this.user = auth_object.user;
this.password = auth_object.password; this.password = auth_object.password;
this._client = new jszimbra.Communication({ url: auth_object.url }); this._client = new jszimbra.Communication({ url: auth_object.url });
this.parseAllResponse = this.parseAllResponse.bind(this);
this.parseResponse = this.parseResponse.bind(this);
this.parseEmptyResponse = this.parseEmptyResponse.bind(this);
this.parseCountAccountResponse = this.parseCountAccountResponse.bind(this);
this.parseSearchResponse = this.parseSearchResponse.bind(this);
this.parseGrantsResponse = this.parseGrantsResponse.bind(this);
this.dictionary = new _dictionary2.default(); this.dictionary = new _dictionary2.default();
} }
...@@ -143,6 +120,8 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -143,6 +120,8 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'buildRequestData', key: 'buildRequestData',
value: function buildRequestData(request_name, callback) { value: function buildRequestData(request_name, callback) {
var request_data = {}; var request_data = {};
// TODO: Eliminar dependencia de client que se pasa a todos lados
request_data.client = this;
request_data.params = this.requestParams(); request_data.params = this.requestParams();
request_data.request_name = request_name; request_data.request_name = request_name;
request_data.params.name = request_data.request_name + 'Request'; request_data.params.name = request_data.request_name + 'Request';
...@@ -171,7 +150,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -171,7 +150,7 @@ return /******/ (function(modules) { // webpackBootstrap
}, { }, {
key: 'handleError', key: 'handleError',
value: function handleError(err) { value: function handleError(err) {
return new Error(err); return new _error2.default(err);
} }
}, { }, {
key: 'handleResponse', key: 'handleResponse',
...@@ -218,7 +197,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -218,7 +197,7 @@ return /******/ (function(modules) { // webpackBootstrap
}); });
this.client.send(request_object, function (err, data) { this.client.send(request_object, function (err, data) {
if (err) return callback(that.handleError(err)); if (err) return callback(that.handleError(err));
that.parseBatchResponse(data, callback); _response_parser2.default.batchResponse(data, callback);
}); });
} }
}, { }, {
...@@ -258,84 +237,12 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -258,84 +237,12 @@ return /******/ (function(modules) { // webpackBootstrap
})(); })();
} }
} }
}, {
key: 'parseBatchResponse',
value: function parseBatchResponse(data, callback) {
var response_object = data.options.response.BatchResponse;
return callback(null, response_object);
}
}, {
key: 'parseCountAccountResponse',
value: function parseCountAccountResponse(data, request_data, callback) {
var coses = data.get().CountAccountResponse.cos;
var result = this.dictionary.cosesToCountAccountObject(coses);
return callback(null, result);
}
}, {
key: 'parseGrantsResponse',
value: function parseGrantsResponse(data, request_data, callback) {
var result = {};
var response_object = data.get().GetGrantsResponse;
return callback(null, response_object);
}
}, {
key: 'parseResponse',
value: function parseResponse(data, request_data, callback) {
var resource = request_data.resource.toLowerCase();
var that = this;
var response_name = that.dictionary.resourceResponseName(resource);
var response_object = data.get()[request_data.response_name][response_name][0];
var result = that.dictionary.classFactory(resource, response_object, that);
return callback(null, result);
}
// For requests that returns empty Object when Success
}, {
key: 'parseEmptyResponse',
value: function parseEmptyResponse(data, request_data, callback) {
var response_object = data.get()[request_data.response_name];
return callback(null, response_object);
}
}, {
key: 'parseSearchResponse',
value: function parseSearchResponse(data, request_data, callback) {
var response_types = this.dictionary.searchResponseTypes();
var response_object = data.get()[request_data.response_name];
var result = { total: response_object.searchTotal, more: response_object.more };
var that = this;
response_types.forEach(function (type) {
var resources = [];
if (typeof response_object[type] !== 'undefined') {
response_object[type].forEach(function (resource) {
var object = that.dictionary.classFactory(type, resource, that);
resources.push(object);
});
result[type] = resources;
}
});
return callback(null, result);
}
}, {
key: 'parseAllResponse',
value: function parseAllResponse(data, request_data, callback) {
var resource = request_data.resource.toLowerCase();
var that = this;
var response_name = that.dictionary.resourceResponseName(resource);
var response_object = data.get()[request_data.response_name][response_name];
var response_array = [];
if (response_object) response_object.forEach(function (r) {
var element = that.dictionary.classFactory(resource, r, that);
response_array.push(element);
});
return callback(null, response_array);
}
}, { }, {
key: 'create', key: 'create',
value: function create(resource, resource_data, callback) { value: function create(resource, resource_data, callback) {
var request_data = this.buildRequestData('Create' + resource, callback); var request_data = this.buildRequestData('Create' + resource, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = _response_parser2.default.getResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -344,7 +251,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -344,7 +251,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function remove(resource, resource_data, callback) { value: function remove(resource, resource_data, callback) {
var request_data = this.buildRequestData('Delete' + resource, callback); var request_data = this.buildRequestData('Delete' + resource, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -353,7 +260,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -353,7 +260,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function rename(resource, resource_data, callback) { value: function rename(resource, resource_data, callback) {
var request_data = this.buildRequestData('Rename' + resource, callback); var request_data = this.buildRequestData('Rename' + resource, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = _response_parser2.default.getResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -362,7 +269,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -362,7 +269,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function modify(resource, resource_data, callback) { value: function modify(resource, resource_data, callback) {
var request_data = this.buildRequestData('Modify' + resource, callback); var request_data = this.buildRequestData('Modify' + resource, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = _response_parser2.default.getResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -371,7 +278,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -371,7 +278,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function get(resource, resource_identifier, callback) { value: function get(resource, resource_identifier, callback) {
var request_data = this.buildRequestData('Get' + resource, callback); var request_data = this.buildRequestData('Get' + resource, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = _response_parser2.default.getResponse;
var resource_name = this.dictionary.resourceResponseName(resource); var resource_name = this.dictionary.resourceResponseName(resource);
request_data.params.params[resource_name] = { request_data.params.params[resource_name] = {
'by': this.dictionary.byIdOrName(resource_identifier), 'by': this.dictionary.byIdOrName(resource_identifier),
...@@ -384,7 +291,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -384,7 +291,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function getAll(resource, callback) { value: function getAll(resource, callback) {
var request_data = this.buildRequestData('GetAll' + resource + 's', callback); var request_data = this.buildRequestData('GetAll' + resource + 's', callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseAllResponse; request_data.parse_response = _response_parser2.default.allResponse;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -407,7 +314,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -407,7 +314,7 @@ return /******/ (function(modules) { // webpackBootstrap
var target = _dictionary$buildTarg2[0]; var target = _dictionary$buildTarg2[0];
var grantee = _dictionary$buildTarg2[1]; var grantee = _dictionary$buildTarg2[1];
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params.grantee = grantee; request_data.params.params.grantee = grantee;
request_data.params.params.target = target; request_data.params.params.target = target;
request_data.params.params.right = { '_content': right_name }; request_data.params.params.right = { '_content': right_name };
...@@ -420,7 +327,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -420,7 +327,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'addAccountAlias', key: 'addAccountAlias',
value: function addAccountAlias(account_id, alias, callback) { value: function addAccountAlias(account_id, alias, callback) {
var request_data = this.buildRequestData('AddAccountAlias', callback); var request_data = this.buildRequestData('AddAccountAlias', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params = { 'id': account_id, 'alias': alias }; request_data.params.params = { 'id': account_id, 'alias': alias };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -432,7 +339,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -432,7 +339,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'addDistributionListMember', key: 'addDistributionListMember',
value: function addDistributionListMember(dl_id, members, callback) { value: function addDistributionListMember(dl_id, members, callback) {
var request_data = this.buildRequestData('AddDistributionListMember', callback); var request_data = this.buildRequestData('AddDistributionListMember', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) }; request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -455,16 +362,6 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -455,16 +362,6 @@ return /******/ (function(modules) { // webpackBootstrap
resource_data.password = { '_content': password }; resource_data.password = { '_content': password };
return this.create('Account', resource_data, callback); return this.create('Account', resource_data, callback);
} }
}, {
key: 'getCos',
value: function getCos(identifier, callback) {
return this.get('Cos', identifier, callback);
}
}, {
key: 'getDomain',
value: function getDomain(identifier, callback) {
return this.get('Domain', identifier, callback);
}
}, { }, {
key: 'createDomain', key: 'createDomain',
value: function createDomain(name, attributes, callback) { value: function createDomain(name, attributes, callback) {
...@@ -519,9 +416,19 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -519,9 +416,19 @@ return /******/ (function(modules) { // webpackBootstrap
value: function getAllCos(callback) { value: function getAllCos(callback) {
var request_data = this.buildRequestData('GetAllCos', callback); var request_data = this.buildRequestData('GetAllCos', callback);
request_data.resource = 'Cos'; request_data.resource = 'Cos';
request_data.parse_response = this.parseAllResponse; request_data.parse_response = _response_parser2.default.allResponse;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
}, {
key: 'getCos',
value: function getCos(identifier, callback) {
return this.get('Cos', identifier, callback);
}
}, {
key: 'getDomain',
value: function getDomain(identifier, callback) {
return this.get('Domain', identifier, callback);
}
// Returns all grants on the specified target entry, or all grants granted to the specified grantee entry. // Returns all grants on the specified target entry, or all grants granted to the specified grantee entry.
// target_data and grantee_data are both objects like: // target_data and grantee_data are both objects like:
...@@ -542,7 +449,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -542,7 +449,7 @@ return /******/ (function(modules) { // webpackBootstrap
var request_data = this.buildRequestData('GetGrants', callback); var request_data = this.buildRequestData('GetGrants', callback);
request_data.resource = 'Grant'; request_data.resource = 'Grant';
request_data.parse_response = this.parseAllResponse; request_data.parse_response = _response_parser2.default.allResponse;
request_data.params.params.grantee = grantee; request_data.params.params.grantee = grantee;
request_data.params.params.target = target; request_data.params.params.target = target;
return this.performRequest(request_data); return this.performRequest(request_data);
...@@ -613,7 +520,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -613,7 +520,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'removeAccountAlias', key: 'removeAccountAlias',
value: function removeAccountAlias(account_id, alias, callback) { value: function removeAccountAlias(account_id, alias, callback) {
var request_data = this.buildRequestData('RemoveAccountAlias', callback); var request_data = this.buildRequestData('RemoveAccountAlias', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params = { 'id': account_id, 'alias': alias }; request_data.params.params = { 'id': account_id, 'alias': alias };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -643,26 +550,20 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -643,26 +550,20 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'removeDistributionListMember', key: 'removeDistributionListMember',
value: function removeDistributionListMember(dl_id, members, callback) { value: function removeDistributionListMember(dl_id, members, callback) {
var request_data = this.buildRequestData('RemoveDistributionListMember', callback); var request_data = this.buildRequestData('RemoveDistributionListMember', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) }; request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
}, { }, {
key: 'renameAccount', key: 'renameAccount',
value: function renameAccount(zimbra_id, new_name, callback) { value: function renameAccount(zimbra_id, new_name, callback) {
var resource_data = { var resource_data = { id: zimbra_id, newName: new_name };
id: zimbra_id,
newName: new_name
};
return this.rename('Account', resource_data, callback); return this.rename('Account', resource_data, callback);
} }
}, { }, {
key: 'renameDistributionList', key: 'renameDistributionList',
value: function renameDistributionList(zimbra_id, new_name, callback) { value: function renameDistributionList(zimbra_id, new_name, callback) {
var resource_data = { var resource_data = { id: zimbra_id, newName: new_name };
id: zimbra_id,
newName: new_name
};
return this.rename('DistributionList', resource_data, callback); return this.rename('DistributionList', resource_data, callback);
} }
}, { }, {
...@@ -676,7 +577,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -676,7 +577,7 @@ return /******/ (function(modules) { // webpackBootstrap
var grantee = _dictionary$buildTarg6[1]; var grantee = _dictionary$buildTarg6[1];
var request_data = this.buildRequestData('RevokeRight', callback); var request_data = this.buildRequestData('RevokeRight', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params.grantee = grantee; request_data.params.params.grantee = grantee;
request_data.params.params.target = target; request_data.params.params.target = target;
request_data.params.params.right = { '_content': right_name }; request_data.params.params.right = { '_content': right_name };
...@@ -704,7 +605,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -704,7 +605,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function directorySearch(search_object, callback) { value: function directorySearch(search_object, callback) {
var request_data = this.buildRequestData('SearchDirectory', callback); var request_data = this.buildRequestData('SearchDirectory', callback);
request_data.params.params = search_object; request_data.params.params = search_object;
request_data.parse_response = this.parseSearchResponse; request_data.parse_response = _response_parser2.default.searchResponse;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -716,7 +617,7 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -716,7 +617,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'countAccounts', key: 'countAccounts',
value: function countAccounts(domain_idenfitier, callback) { value: function countAccounts(domain_idenfitier, callback) {
var request_data = this.buildRequestData('CountAccount', callback); var request_data = this.buildRequestData('CountAccount', callback);
request_data.parse_response = this.parseCountAccountResponse; request_data.parse_response = _response_parser2.default.countAccountResponse;
request_data.params.params.domain = { request_data.params.params.domain = {
'by': this.dictionary.byIdOrName(domain_idenfitier), 'by': this.dictionary.byIdOrName(domain_idenfitier),
'_content': domain_idenfitier '_content': domain_idenfitier
...@@ -751,46 +652,25 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -751,46 +652,25 @@ return /******/ (function(modules) { // webpackBootstrap
return this.performRequest(request_data); return this.performRequest(request_data);
} }
// TODO: TO ugly // Set account Password
}, { }, {
key: 'setPassword', key: 'setPassword',
value: function setPassword(zimbra_id, password, callback) { value: function setPassword(zimbra_id, password, callback) {
var request_data = this.buildRequestData('SetPassword', callback); var request_data = this.buildRequestData('SetPassword', callback);
request_data.params.params = { id: zimbra_id, newPassword: password }; request_data.params.params = { id: zimbra_id, newPassword: password };
var that = this; request_data.parse_response = _response_parser2.default.setPasswordResponse;
request_data.parse_response = function (data, _, callback) {
var response_object = data.response[0].SetPasswordResponse;
if (response_object.message) {
var err = {
status: 500,
statusText: response_object.message[0]._content,
responseJSON: {}
};
return callback(that.handleError(err));
} else {
return callback(null, {});
}
};
return this.performRequest(request_data); return this.performRequest(request_data);
} }
// TODO: Ugly // Get Account Mailbox
}, { }, {
key: 'getMailbox', key: 'getMailbox',
value: function getMailbox(zimbra_id, callback) { value: function getMailbox(zimbra_id, callback) {
var request_data = this.buildRequestData('GetMailbox', callback); var request_data = this.buildRequestData('GetMailbox', callback);
request_data.params.params = { mbox: { id: zimbra_id } }; request_data.params.params = { mbox: { id: zimbra_id } };
request_data.parse_response = function (data, _, callback) { request_data.parse_response = _response_parser2.default.getMailboxResponse;
var response_object = data.get().GetMailboxResponse.mbox[0];
var result = {
mbxid: response_object.mbxid,
account_id: response_object.id,
size: response_object.s
};
return callback(null, result);
};
return this.performRequest(request_data); return this.performRequest(request_data);
} }
}, { }, {
...@@ -42854,6 +42734,198 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -42854,6 +42734,198 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 298 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = __webpack_require__(77);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = __webpack_require__(78);
var _createClass3 = _interopRequireDefault(_createClass2);
var _dictionary = __webpack_require__(82);
var _dictionary2 = _interopRequireDefault(_dictionary);
var _error = __webpack_require__(299);
var _error2 = _interopRequireDefault(_error);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// See LICENSE.txt for license information.
var ResponseParser = function () {
function ResponseParser() {
(0, _classCallCheck3.default)(this, ResponseParser);
}
(0, _createClass3.default)(ResponseParser, null, [{
key: 'dictionary',
value: function dictionary() {
return new _dictionary2.default();
}
}, {
key: 'allResponse',
value: function allResponse(data, request_data, callback) {
var resource = request_data.resource.toLowerCase();
var response_name = ResponseParser.dictionary().resourceResponseName(resource);
var response_object = data.get()[request_data.response_name][response_name];
var response_array = [];
if (response_object) response_object.forEach(function (r) {
var element = ResponseParser.dictionary().classFactory(resource, r, request_data.client);
response_array.push(element);
});
return callback(null, response_array);
}
}, {
key: 'batchResponse',
value: function batchResponse(data, callback) {
var response_object = data.options.response.BatchResponse;
return callback(null, response_object);
}
}, {
key: 'countAccountResponse',
value: function countAccountResponse(data, request_data, callback) {
var coses = data.get().CountAccountResponse.cos;
var result = ResponseParser.dictionary().cosesToCountAccountObject(coses);
return callback(null, result);
}
// For requests that returns empty Object when Success
}, {
key: 'emptyResponse',
value: function emptyResponse(data, request_data, callback) {
var response_object = data.get()[request_data.response_name];
return callback(null, response_object);
}
}, {
key: 'getMailboxResponse',
value: function getMailboxResponse(data, _, callback) {
var response_object = data.get().GetMailboxResponse.mbox[0];
var result = {
mbxid: response_object.mbxid,
account_id: response_object.id,
size: response_object.s
};
return callback(null, result);
}
}, {
key: 'getResponse',
value: function getResponse(data, request_data, callback) {
var resource = request_data.resource.toLowerCase();
var response_name = ResponseParser.dictionary().resourceResponseName(resource);
var response_object = data.get()[request_data.response_name][response_name][0];
var result = ResponseParser.dictionary().classFactory(resource, response_object, request_data.client);
return callback(null, result);
}
}, {
key: 'grantsResponse',
value: function grantsResponse(data, request_data, callback) {
var result = {};
var response_object = data.get().GetGrantsResponse;
return callback(null, response_object);
}
}, {
key: 'searchResponse',
value: function searchResponse(data, request_data, callback) {
var response_types = ResponseParser.dictionary().searchResponseTypes();
var response_object = data.get()[request_data.response_name];
var result = { total: response_object.searchTotal, more: response_object.more };
response_types.forEach(function (type) {
var resources = [];
if (typeof response_object[type] !== 'undefined') {
response_object[type].forEach(function (resource) {
var object = ResponseParser.dictionary().classFactory(type, resource, request_data.client);
resources.push(object);
});
result[type] = resources;
}
});
return callback(null, result);
}
}, {
key: 'setPasswordResponse',
value: function setPasswordResponse(data, _, callback) {
var response_object = data.response[0].SetPasswordResponse;
if (response_object.message) {
var err = {
status: 500,
statusText: response_object.message[0]._content,
responseJSON: {}
};
return callback(new _error2.default(err));
} else {
return callback(null, {});
}
}
}]);
return ResponseParser;
}();
exports.default = ResponseParser;
/***/ },
/* 299 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = __webpack_require__(77);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = __webpack_require__(78);
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// See LICENSE.txt for license information.
var Error = function () {
function Error(err) {
(0, _classCallCheck3.default)(this, Error);
this.code = err.Fault ? err.Fault.Code.Value : err.status;
this.extra = this.getErrorInfo(err);
}
(0, _createClass3.default)(Error, [{
key: 'getErrorInfo',
value: function getErrorInfo(err) {
if (err && err.Fault) {
return {
'code': err.Fault.Detail.Error.Code,
'reason': err.Fault.Reason.Text,
'trace': err.Fault.Detail.Error.Trace
};
} else {
return { 'code': err.status, 'reason': err.statusText };
}
}
}]);
return Error;
}();
exports.default = Error;
/***/ } /***/ }
/******/ ]) /******/ ])
}); });
This source diff could not be displayed because it is too large. You can view the blob instead.
{ {
"name": "zimbra-admin-api-js", "name": "zimbra-admin-api-js",
"version": "0.0.21", "version": "0.0.22",
"private": true, "private": true,
"main": "lib/zimbra-admin-api.js", "main": "lib/zimbra-admin-api.js",
"dependencies": { "dependencies": {
......
...@@ -3,27 +3,8 @@ ...@@ -3,27 +3,8 @@
var jszimbra = require('js-zimbra'); var jszimbra = require('js-zimbra');
import Dictionary from './utils/dictionary.js'; import Dictionary from './utils/dictionary.js';
import ResponseParser from './utils/response_parser.js';
class Error { import Error from './zimbra/error.js';
constructor(err) {
this.code = err.Fault ? err.Fault.Code.Value : err.status;
this.extra = this.getErrorInfo(err);
}
getErrorInfo(err) {
if (err && err.Fault) {
return {
'code': err.Fault.Detail.Error.Code,
'reason': err.Fault.Reason.Text,
'trace': err.Fault.Detail.Error.Trace
};
} else {
return { 'code': err.status, 'reason': err.statusText };
}
}
}
// TODO: To many parseResponse types // TODO: To many parseResponse types
export default class ZimbraAdminApi { export default class ZimbraAdminApi {
...@@ -32,17 +13,13 @@ export default class ZimbraAdminApi { ...@@ -32,17 +13,13 @@ export default class ZimbraAdminApi {
this.user = auth_object.user; this.user = auth_object.user;
this.password = auth_object.password; this.password = auth_object.password;
this._client = new jszimbra.Communication({url: auth_object.url}); this._client = new jszimbra.Communication({url: auth_object.url});
this.parseAllResponse = this.parseAllResponse.bind(this);
this.parseResponse = this.parseResponse.bind(this);
this.parseEmptyResponse = this.parseEmptyResponse.bind(this);
this.parseCountAccountResponse = this.parseCountAccountResponse.bind(this);
this.parseSearchResponse = this.parseSearchResponse.bind(this);
this.parseGrantsResponse = this.parseGrantsResponse.bind(this);
this.dictionary = new Dictionary(); this.dictionary = new Dictionary();
} }
buildRequestData (request_name, callback) { buildRequestData (request_name, callback) {
const request_data = { }; const request_data = { };
// TODO: Eliminar dependencia de client que se pasa a todos lados
request_data.client = this;
request_data.params = this.requestParams(); request_data.params = this.requestParams();
request_data.request_name = request_name; request_data.request_name = request_name;
request_data.params.name = `${request_data.request_name}Request`; request_data.params.name = `${request_data.request_name}Request`;
...@@ -121,7 +98,7 @@ export default class ZimbraAdminApi { ...@@ -121,7 +98,7 @@ export default class ZimbraAdminApi {
}); });
this.client.send(request_object, function(err, data){ this.client.send(request_object, function(err, data){
if (err) return callback(that.handleError(err)); if (err) return callback(that.handleError(err));
that.parseBatchResponse(data, callback); ResponseParser.batchResponse(data, callback);
}); });
} }
...@@ -156,73 +133,10 @@ export default class ZimbraAdminApi { ...@@ -156,73 +133,10 @@ export default class ZimbraAdminApi {
} }
} }
parseBatchResponse(data, callback) {
const response_object = data.options.response.BatchResponse;
return callback(null, response_object);
}
parseCountAccountResponse(data, request_data, callback) {
const coses = data.get().CountAccountResponse.cos;
const result = this.dictionary.cosesToCountAccountObject(coses);
return callback(null, result);
}
parseGrantsResponse(data, request_data, callback) {
const result = {};
const response_object = data.get().GetGrantsResponse;
return callback(null, response_object);
}
parseResponse(data, request_data, callback) {
const resource = request_data.resource.toLowerCase();
const that = this;
const response_name = that.dictionary.resourceResponseName(resource);
const response_object = data.get()[request_data.response_name][response_name][0];
const result = that.dictionary.classFactory(resource, response_object, that);
return callback(null, result);
}
// For requests that returns empty Object when Success
parseEmptyResponse(data, request_data, callback){
const response_object = data.get()[request_data.response_name];
return callback(null, response_object);
}
parseSearchResponse(data, request_data, callback) {
const response_types = this.dictionary.searchResponseTypes();
const response_object = data.get()[request_data.response_name];
const result = { total: response_object.searchTotal, more: response_object.more };
const that = this;
response_types.forEach((type) => {
const resources = [];
if (typeof response_object[type] !== 'undefined') {
response_object[type].forEach((resource) => {
const object = that.dictionary.classFactory(type, resource, that);
resources.push(object);
});
result[type] = resources;
}
});
return callback(null, result);
}
parseAllResponse(data, request_data, callback){
const resource = request_data.resource.toLowerCase();
const that = this;
const response_name = that.dictionary.resourceResponseName(resource);
const response_object = data.get()[request_data.response_name][response_name];
const response_array = [];
if (response_object) response_object.forEach((r) => {
let element = that.dictionary.classFactory(resource, r, that);
response_array.push(element);
});
return callback(null, response_array);
}
create(resource, resource_data, callback){ create(resource, resource_data, callback){
const request_data = this.buildRequestData(`Create${resource}`, callback); const request_data = this.buildRequestData(`Create${resource}`, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = ResponseParser.getResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -230,7 +144,7 @@ export default class ZimbraAdminApi { ...@@ -230,7 +144,7 @@ export default class ZimbraAdminApi {
remove(resource, resource_data, callback){ remove(resource, resource_data, callback){
const request_data = this.buildRequestData(`Delete${resource}`, callback); const request_data = this.buildRequestData(`Delete${resource}`, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -238,7 +152,7 @@ export default class ZimbraAdminApi { ...@@ -238,7 +152,7 @@ export default class ZimbraAdminApi {
rename(resource, resource_data, callback) { rename(resource, resource_data, callback) {
const request_data = this.buildRequestData(`Rename${resource}`, callback); const request_data = this.buildRequestData(`Rename${resource}`, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = ResponseParser.getResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -247,7 +161,7 @@ export default class ZimbraAdminApi { ...@@ -247,7 +161,7 @@ export default class ZimbraAdminApi {
modify(resource, resource_data, callback){ modify(resource, resource_data, callback){
const request_data = this.buildRequestData(`Modify${resource}`, callback); const request_data = this.buildRequestData(`Modify${resource}`, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = ResponseParser.getResponse;
request_data.params.params = resource_data; request_data.params.params = resource_data;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -255,7 +169,7 @@ export default class ZimbraAdminApi { ...@@ -255,7 +169,7 @@ export default class ZimbraAdminApi {
get(resource, resource_identifier, callback){ get(resource, resource_identifier, callback){
const request_data = this.buildRequestData(`Get${resource}`, callback); const request_data = this.buildRequestData(`Get${resource}`, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseResponse; request_data.parse_response = ResponseParser.getResponse;
let resource_name = this.dictionary.resourceResponseName(resource); let resource_name = this.dictionary.resourceResponseName(resource);
request_data.params.params[resource_name] = { request_data.params.params[resource_name] = {
'by': this.dictionary.byIdOrName(resource_identifier), 'by': this.dictionary.byIdOrName(resource_identifier),
...@@ -267,7 +181,7 @@ export default class ZimbraAdminApi { ...@@ -267,7 +181,7 @@ export default class ZimbraAdminApi {
getAll(resource, callback) { getAll(resource, callback) {
const request_data = this.buildRequestData(`GetAll${resource}s`, callback); const request_data = this.buildRequestData(`GetAll${resource}s`, callback);
request_data.resource = resource; request_data.resource = resource;
request_data.parse_response = this.parseAllResponse; request_data.parse_response = ResponseParser.allResponse;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -280,7 +194,7 @@ export default class ZimbraAdminApi { ...@@ -280,7 +194,7 @@ export default class ZimbraAdminApi {
grantRight(target_data, grantee_data, right_name, callback) { grantRight(target_data, grantee_data, right_name, callback) {
const request_data = this.buildRequestData('GrantRight', callback); const request_data = this.buildRequestData('GrantRight', callback);
const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data); const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params.grantee = grantee; request_data.params.params.grantee = grantee;
request_data.params.params.target = target; request_data.params.params.target = target;
request_data.params.params.right = { '_content': right_name }; request_data.params.params.right = { '_content': right_name };
...@@ -291,7 +205,7 @@ export default class ZimbraAdminApi { ...@@ -291,7 +205,7 @@ export default class ZimbraAdminApi {
addAccountAlias(account_id, alias, callback) { addAccountAlias(account_id, alias, callback) {
const request_data = this.buildRequestData('AddAccountAlias', callback); const request_data = this.buildRequestData('AddAccountAlias', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params = { 'id': account_id, 'alias': alias }; request_data.params.params = { 'id': account_id, 'alias': alias };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -300,7 +214,7 @@ export default class ZimbraAdminApi { ...@@ -300,7 +214,7 @@ export default class ZimbraAdminApi {
// members is an array of emails // members is an array of emails
addDistributionListMember(dl_id, members, callback) { addDistributionListMember(dl_id, members, callback) {
const request_data = this.buildRequestData('AddDistributionListMember', callback); const request_data = this.buildRequestData('AddDistributionListMember', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) }; request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -320,14 +234,6 @@ export default class ZimbraAdminApi { ...@@ -320,14 +234,6 @@ export default class ZimbraAdminApi {
return this.create('Account', resource_data, callback); return this.create('Account', resource_data, callback);
} }
getCos(identifier, callback) {
return this.get('Cos', identifier, callback);
}
getDomain(identifier, callback) {
return this.get('Domain', identifier, callback);
}
createDomain(name, attributes, callback) { createDomain(name, attributes, callback) {
const resource_data = this.buildResourceData(name, attributes); const resource_data = this.buildResourceData(name, attributes);
return this.create('Domain', resource_data, callback); return this.create('Domain', resource_data, callback);
...@@ -342,7 +248,6 @@ export default class ZimbraAdminApi { ...@@ -342,7 +248,6 @@ export default class ZimbraAdminApi {
return this.create('DistributionList', resource_data, callback); return this.create('DistributionList', resource_data, callback);
} }
getAllDomains(callback, query_object = {}) { getAllDomains(callback, query_object = {}) {
query_object.types = 'domains'; query_object.types = 'domains';
return this.directorySearch(query_object, callback); return this.directorySearch(query_object, callback);
...@@ -366,10 +271,18 @@ export default class ZimbraAdminApi { ...@@ -366,10 +271,18 @@ export default class ZimbraAdminApi {
getAllCos(callback) { getAllCos(callback) {
const request_data = this.buildRequestData('GetAllCos', callback); const request_data = this.buildRequestData('GetAllCos', callback);
request_data.resource = 'Cos'; request_data.resource = 'Cos';
request_data.parse_response = this.parseAllResponse; request_data.parse_response = ResponseParser.allResponse;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
getCos(identifier, callback) {
return this.get('Cos', identifier, callback);
}
getDomain(identifier, callback) {
return this.get('Domain', identifier, callback);
}
// Returns all grants on the specified target entry, or all grants granted to the specified grantee entry. // Returns all grants on the specified target entry, or all grants granted to the specified grantee entry.
// target_data and grantee_data are both objects like: // target_data and grantee_data are both objects like:
// { // {
...@@ -380,7 +293,7 @@ export default class ZimbraAdminApi { ...@@ -380,7 +293,7 @@ export default class ZimbraAdminApi {
const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data); const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data);
const request_data = this.buildRequestData('GetGrants', callback); const request_data = this.buildRequestData('GetGrants', callback);
request_data.resource = 'Grant'; request_data.resource = 'Grant';
request_data.parse_response = this.parseAllResponse; request_data.parse_response = ResponseParser.allResponse;
request_data.params.params.grantee = grantee; request_data.params.params.grantee = grantee;
request_data.params.params.target = target; request_data.params.params.target = target;
return this.performRequest(request_data); return this.performRequest(request_data);
...@@ -433,7 +346,7 @@ export default class ZimbraAdminApi { ...@@ -433,7 +346,7 @@ export default class ZimbraAdminApi {
// Remove Account Alias // Remove Account Alias
removeAccountAlias(account_id, alias, callback) { removeAccountAlias(account_id, alias, callback) {
const request_data = this.buildRequestData('RemoveAccountAlias', callback); const request_data = this.buildRequestData('RemoveAccountAlias', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params = { 'id': account_id, 'alias': alias }; request_data.params.params = { 'id': account_id, 'alias': alias };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -454,31 +367,25 @@ export default class ZimbraAdminApi { ...@@ -454,31 +367,25 @@ export default class ZimbraAdminApi {
// members is one email or array of emails // members is one email or array of emails
removeDistributionListMember(dl_id, members, callback) { removeDistributionListMember(dl_id, members, callback) {
const request_data = this.buildRequestData('RemoveDistributionListMember', callback); const request_data = this.buildRequestData('RemoveDistributionListMember', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) }; request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
return this.performRequest(request_data); return this.performRequest(request_data);
} }
renameAccount(zimbra_id, new_name, callback) { renameAccount(zimbra_id, new_name, callback) {
let resource_data = { const resource_data = { id: zimbra_id, newName: new_name };
id: zimbra_id,
newName: new_name
};
return this.rename('Account', resource_data, callback); return this.rename('Account', resource_data, callback);
} }
renameDistributionList(zimbra_id, new_name, callback) { renameDistributionList(zimbra_id, new_name, callback) {
let resource_data = { const resource_data = { id: zimbra_id, newName: new_name };
id: zimbra_id,
newName: new_name
};
return this.rename('DistributionList', resource_data, callback); return this.rename('DistributionList', resource_data, callback);
} }
revokeRight(target_data, grantee_data, right_name, callback) { revokeRight(target_data, grantee_data, right_name, callback) {
const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data); const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data);
const request_data = this.buildRequestData('RevokeRight', callback); const request_data = this.buildRequestData('RevokeRight', callback);
request_data.parse_response = this.parseEmptyResponse; request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params.grantee = grantee; request_data.params.params.grantee = grantee;
request_data.params.params.target = target; request_data.params.params.target = target;
request_data.params.params.right = { '_content': right_name }; request_data.params.params.right = { '_content': right_name };
...@@ -503,7 +410,7 @@ export default class ZimbraAdminApi { ...@@ -503,7 +410,7 @@ export default class ZimbraAdminApi {
directorySearch(search_object, callback) { directorySearch(search_object, callback) {
const request_data = this.buildRequestData(`SearchDirectory`, callback); const request_data = this.buildRequestData(`SearchDirectory`, callback);
request_data.params.params = search_object; request_data.params.params = search_object;
request_data.parse_response = this.parseSearchResponse; request_data.parse_response = ResponseParser.searchResponse;
return this.performRequest(request_data); return this.performRequest(request_data);
} }
...@@ -512,7 +419,7 @@ export default class ZimbraAdminApi { ...@@ -512,7 +419,7 @@ export default class ZimbraAdminApi {
// Count number of accounts by cos in a domain, // Count number of accounts by cos in a domain,
countAccounts(domain_idenfitier, callback) { countAccounts(domain_idenfitier, callback) {
const request_data = this.buildRequestData(`CountAccount`, callback); const request_data = this.buildRequestData(`CountAccount`, callback);
request_data.parse_response = this.parseCountAccountResponse; request_data.parse_response = ResponseParser.countAccountResponse;
request_data.params.params.domain = { request_data.params.params.domain = {
'by': this.dictionary.byIdOrName(domain_idenfitier), 'by': this.dictionary.byIdOrName(domain_idenfitier),
'_content': domain_idenfitier '_content': domain_idenfitier
...@@ -542,40 +449,19 @@ export default class ZimbraAdminApi { ...@@ -542,40 +449,19 @@ export default class ZimbraAdminApi {
return this.performRequest(request_data); return this.performRequest(request_data);
} }
// TODO: TO ugly // Set account Password
setPassword(zimbra_id, password, callback) { setPassword(zimbra_id, password, callback) {
const request_data = this.buildRequestData(`SetPassword`, callback); const request_data = this.buildRequestData(`SetPassword`, callback);
request_data.params.params = { id: zimbra_id, newPassword: password }; request_data.params.params = { id: zimbra_id, newPassword: password };
const that = this; request_data.parse_response = ResponseParser.setPasswordResponse;
request_data.parse_response = function(data, _, callback){
const response_object = data.response[0].SetPasswordResponse;
if (response_object.message) {
const err = {
status: 500,
statusText: response_object.message[0]._content,
responseJSON: {}
};
return callback(that.handleError(err));
} else {
return callback(null, {});
}
};
return this.performRequest(request_data); return this.performRequest(request_data);
} }
// TODO: Ugly // Get Account Mailbox
getMailbox(zimbra_id, callback) { getMailbox(zimbra_id, callback) {
const request_data = this.buildRequestData('GetMailbox', callback); const request_data = this.buildRequestData('GetMailbox', callback);
request_data.params.params = { mbox: { id: zimbra_id } }; request_data.params.params = { mbox: { id: zimbra_id } };
request_data.parse_response = function(data, _, callback){ request_data.parse_response = ResponseParser.getMailboxResponse;
const response_object = data.get().GetMailboxResponse.mbox[0];
const result = {
mbxid: response_object.mbxid,
account_id: response_object.id,
size: response_object.s
};
return callback(null, result);
};
return this.performRequest(request_data); return this.performRequest(request_data);
} }
......
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// See LICENSE.txt for license information.
import Dictionary from './dictionary.js';
import Error from '../zimbra/error.js';
export default class ResponseParser {
static dictionary() {
return new Dictionary();
}
static allResponse(data, request_data, callback){
const resource = request_data.resource.toLowerCase();
const response_name = ResponseParser.dictionary().resourceResponseName(resource);
const response_object = data.get()[request_data.response_name][response_name];
const response_array = [];
if (response_object) response_object.forEach((r) => {
let element = ResponseParser.dictionary().classFactory(resource, r, request_data.client);
response_array.push(element);
});
return callback(null, response_array);
}
static batchResponse(data, callback) {
const response_object = data.options.response.BatchResponse;
return callback(null, response_object);
}
static countAccountResponse(data, request_data, callback) {
const coses = data.get().CountAccountResponse.cos;
const result = ResponseParser.dictionary().cosesToCountAccountObject(coses);
return callback(null, result);
}
// For requests that returns empty Object when Success
static emptyResponse(data, request_data, callback){
const response_object = data.get()[request_data.response_name];
return callback(null, response_object);
}
static getMailboxResponse (data, _, callback) {
const response_object = data.get().GetMailboxResponse.mbox[0];
const result = {
mbxid: response_object.mbxid,
account_id: response_object.id,
size: response_object.s
};
return callback(null, result);
}
static getResponse(data, request_data, callback) {
const resource = request_data.resource.toLowerCase();
const response_name = ResponseParser.dictionary().resourceResponseName(resource);
const response_object = data.get()[request_data.response_name][response_name][0];
const result = ResponseParser.dictionary().classFactory(resource, response_object, request_data.client);
return callback(null, result);
}
static grantsResponse(data, request_data, callback) {
const result = {};
const response_object = data.get().GetGrantsResponse;
return callback(null, response_object);
}
static searchResponse(data, request_data, callback) {
const response_types = ResponseParser.dictionary().searchResponseTypes();
const response_object = data.get()[request_data.response_name];
const result = { total: response_object.searchTotal, more: response_object.more };
response_types.forEach((type) => {
const resources = [];
if (typeof response_object[type] !== 'undefined') {
response_object[type].forEach((resource) => {
const object = ResponseParser.dictionary().classFactory(type, resource, request_data.client);
resources.push(object);
});
result[type] = resources;
}
});
return callback(null, result);
}
static setPasswordResponse(data, _, callback){
const response_object = data.response[0].SetPasswordResponse;
if (response_object.message) {
const err = {
status: 500,
statusText: response_object.message[0]._content,
responseJSON: {}
};
return callback(new Error(err));
} else {
return callback(null, {});
}
}
}
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
// See LICENSE.txt for license information.
export default class Error {
constructor(err) {
this.code = err.Fault ? err.Fault.Code.Value : err.status;
this.extra = this.getErrorInfo(err);
}
getErrorInfo(err) {
if (err && err.Fault) {
return {
'code': err.Fault.Detail.Error.Code,
'reason': err.Fault.Reason.Text,
'trace': err.Fault.Detail.Error.Trace
};
} else {
return { 'code': err.status, 'reason': err.statusText };
}
}
}
...@@ -182,7 +182,6 @@ ...@@ -182,7 +182,6 @@
if (err) return console.log(err); if (err) return console.log(err);
expect(data.attrs.sn).to.equal('Bruna'); expect(data.attrs.sn).to.equal('Bruna');
expect(data.attrs.givenName).to.equal('Patricio'); expect(data.attrs.givenName).to.equal('Patricio');
console.log(data);
done(); done();
}); });
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment