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

Refactor ResponseParser

parent 5db738b2
......@@ -87,6 +87,14 @@ return /******/ (function(modules) { // webpackBootstrap
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 }; }
// Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
......@@ -94,34 +102,9 @@ return /******/ (function(modules) { // webpackBootstrap
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
var ZimbraAdminApi = function () {
function ZimbraAdminApi(auth_object) {
(0, _classCallCheck3.default)(this, ZimbraAdminApi);
......@@ -130,12 +113,6 @@ return /******/ (function(modules) { // webpackBootstrap
this.user = auth_object.user;
this.password = auth_object.password;
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();
}
......@@ -143,6 +120,8 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'buildRequestData',
value: function buildRequestData(request_name, callback) {
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.request_name = request_name;
request_data.params.name = request_data.request_name + 'Request';
......@@ -171,7 +150,7 @@ return /******/ (function(modules) { // webpackBootstrap
}, {
key: 'handleError',
value: function handleError(err) {
return new Error(err);
return new _error2.default(err);
}
}, {
key: 'handleResponse',
......@@ -218,7 +197,7 @@ return /******/ (function(modules) { // webpackBootstrap
});
this.client.send(request_object, function (err, data) {
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
})();
}
}
}, {
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',
value: function create(resource, resource_data, callback) {
var request_data = this.buildRequestData('Create' + resource, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = _response_parser2.default.getResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -344,7 +251,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function remove(resource, resource_data, callback) {
var request_data = this.buildRequestData('Delete' + resource, callback);
request_data.resource = resource;
request_data.parse_response = this.parseEmptyResponse;
request_data.parse_response = _response_parser2.default.emptyResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -353,7 +260,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function rename(resource, resource_data, callback) {
var request_data = this.buildRequestData('Rename' + resource, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = _response_parser2.default.getResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -362,7 +269,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function modify(resource, resource_data, callback) {
var request_data = this.buildRequestData('Modify' + resource, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = _response_parser2.default.getResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -371,7 +278,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function get(resource, resource_identifier, callback) {
var request_data = this.buildRequestData('Get' + resource, callback);
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);
request_data.params.params[resource_name] = {
'by': this.dictionary.byIdOrName(resource_identifier),
......@@ -384,7 +291,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function getAll(resource, callback) {
var request_data = this.buildRequestData('GetAll' + resource + 's', callback);
request_data.resource = resource;
request_data.parse_response = this.parseAllResponse;
request_data.parse_response = _response_parser2.default.allResponse;
return this.performRequest(request_data);
}
......@@ -407,7 +314,7 @@ return /******/ (function(modules) { // webpackBootstrap
var target = _dictionary$buildTarg2[0];
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.target = target;
request_data.params.params.right = { '_content': right_name };
......@@ -420,7 +327,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'addAccountAlias',
value: function addAccountAlias(account_id, alias, 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 };
return this.performRequest(request_data);
}
......@@ -432,7 +339,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'addDistributionListMember',
value: function addDistributionListMember(dl_id, members, 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) };
return this.performRequest(request_data);
}
......@@ -455,16 +362,6 @@ return /******/ (function(modules) { // webpackBootstrap
resource_data.password = { '_content': password };
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',
value: function createDomain(name, attributes, callback) {
......@@ -519,9 +416,19 @@ return /******/ (function(modules) { // webpackBootstrap
value: function getAllCos(callback) {
var request_data = this.buildRequestData('GetAllCos', callback);
request_data.resource = 'Cos';
request_data.parse_response = this.parseAllResponse;
request_data.parse_response = _response_parser2.default.allResponse;
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.
// target_data and grantee_data are both objects like:
......@@ -542,7 +449,7 @@ return /******/ (function(modules) { // webpackBootstrap
var request_data = this.buildRequestData('GetGrants', callback);
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.target = target;
return this.performRequest(request_data);
......@@ -613,7 +520,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'removeAccountAlias',
value: function removeAccountAlias(account_id, alias, 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 };
return this.performRequest(request_data);
}
......@@ -643,26 +550,20 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'removeDistributionListMember',
value: function removeDistributionListMember(dl_id, members, 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) };
return this.performRequest(request_data);
}
}, {
key: 'renameAccount',
value: function renameAccount(zimbra_id, new_name, callback) {
var resource_data = {
id: zimbra_id,
newName: new_name
};
var resource_data = { id: zimbra_id, newName: new_name };
return this.rename('Account', resource_data, callback);
}
}, {
key: 'renameDistributionList',
value: function renameDistributionList(zimbra_id, new_name, callback) {
var resource_data = {
id: zimbra_id,
newName: new_name
};
var resource_data = { id: zimbra_id, newName: new_name };
return this.rename('DistributionList', resource_data, callback);
}
}, {
......@@ -676,7 +577,7 @@ return /******/ (function(modules) { // webpackBootstrap
var grantee = _dictionary$buildTarg6[1];
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.target = target;
request_data.params.params.right = { '_content': right_name };
......@@ -704,7 +605,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function directorySearch(search_object, callback) {
var request_data = this.buildRequestData('SearchDirectory', callback);
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);
}
......@@ -716,7 +617,7 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'countAccounts',
value: function countAccounts(domain_idenfitier, 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 = {
'by': this.dictionary.byIdOrName(domain_idenfitier),
'_content': domain_idenfitier
......@@ -751,46 +652,25 @@ return /******/ (function(modules) { // webpackBootstrap
return this.performRequest(request_data);
}
// TODO: TO ugly
// Set account Password
}, {
key: 'setPassword',
value: function setPassword(zimbra_id, password, callback) {
var request_data = this.buildRequestData('SetPassword', callback);
request_data.params.params = { id: zimbra_id, newPassword: password };
var that = this;
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, {});
}
};
request_data.parse_response = _response_parser2.default.setPasswordResponse;
return this.performRequest(request_data);
}
// TODO: Ugly
// Get Account Mailbox
}, {
key: 'getMailbox',
value: function getMailbox(zimbra_id, callback) {
var request_data = this.buildRequestData('GetMailbox', callback);
request_data.params.params = { mbox: { id: zimbra_id } };
request_data.parse_response = function (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);
};
request_data.parse_response = _response_parser2.default.getMailboxResponse;
return this.performRequest(request_data);
}
}, {
......@@ -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",
"version": "0.0.21",
"version": "0.0.22",
"private": true,
"main": "lib/zimbra-admin-api.js",
"dependencies": {
......
......@@ -3,27 +3,8 @@
var jszimbra = require('js-zimbra');
import Dictionary from './utils/dictionary.js';
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 };
}
}
}
import ResponseParser from './utils/response_parser.js';
import Error from './zimbra/error.js';
// TODO: To many parseResponse types
export default class ZimbraAdminApi {
......@@ -32,17 +13,13 @@ export default class ZimbraAdminApi {
this.user = auth_object.user;
this.password = auth_object.password;
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();
}
buildRequestData (request_name, callback) {
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.request_name = request_name;
request_data.params.name = `${request_data.request_name}Request`;
......@@ -121,7 +98,7 @@ export default class ZimbraAdminApi {
});
this.client.send(request_object, function(err, data){
if (err) return callback(that.handleError(err));
that.parseBatchResponse(data, callback);
ResponseParser.batchResponse(data, callback);
});
}
......@@ -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){
const request_data = this.buildRequestData(`Create${resource}`, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = ResponseParser.getResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -230,7 +144,7 @@ export default class ZimbraAdminApi {
remove(resource, resource_data, callback){
const request_data = this.buildRequestData(`Delete${resource}`, callback);
request_data.resource = resource;
request_data.parse_response = this.parseEmptyResponse;
request_data.parse_response = ResponseParser.emptyResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -238,7 +152,7 @@ export default class ZimbraAdminApi {
rename(resource, resource_data, callback) {
const request_data = this.buildRequestData(`Rename${resource}`, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = ResponseParser.getResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -247,7 +161,7 @@ export default class ZimbraAdminApi {
modify(resource, resource_data, callback){
const request_data = this.buildRequestData(`Modify${resource}`, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = ResponseParser.getResponse;
request_data.params.params = resource_data;
return this.performRequest(request_data);
}
......@@ -255,7 +169,7 @@ export default class ZimbraAdminApi {
get(resource, resource_identifier, callback){
const request_data = this.buildRequestData(`Get${resource}`, callback);
request_data.resource = resource;
request_data.parse_response = this.parseResponse;
request_data.parse_response = ResponseParser.getResponse;
let resource_name = this.dictionary.resourceResponseName(resource);
request_data.params.params[resource_name] = {
'by': this.dictionary.byIdOrName(resource_identifier),
......@@ -267,7 +181,7 @@ export default class ZimbraAdminApi {
getAll(resource, callback) {
const request_data = this.buildRequestData(`GetAll${resource}s`, callback);
request_data.resource = resource;
request_data.parse_response = this.parseAllResponse;
request_data.parse_response = ResponseParser.allResponse;
return this.performRequest(request_data);
}
......@@ -280,7 +194,7 @@ export default class ZimbraAdminApi {
grantRight(target_data, grantee_data, right_name, callback) {
const request_data = this.buildRequestData('GrantRight', callback);
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.target = target;
request_data.params.params.right = { '_content': right_name };
......@@ -291,7 +205,7 @@ export default class ZimbraAdminApi {
addAccountAlias(account_id, alias, 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 };
return this.performRequest(request_data);
}
......@@ -300,7 +214,7 @@ export default class ZimbraAdminApi {
// members is an array of emails
addDistributionListMember(dl_id, members, 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) };
return this.performRequest(request_data);
}
......@@ -320,14 +234,6 @@ export default class ZimbraAdminApi {
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) {
const resource_data = this.buildResourceData(name, attributes);
return this.create('Domain', resource_data, callback);
......@@ -342,7 +248,6 @@ export default class ZimbraAdminApi {
return this.create('DistributionList', resource_data, callback);
}
getAllDomains(callback, query_object = {}) {
query_object.types = 'domains';
return this.directorySearch(query_object, callback);
......@@ -366,10 +271,18 @@ export default class ZimbraAdminApi {
getAllCos(callback) {
const request_data = this.buildRequestData('GetAllCos', callback);
request_data.resource = 'Cos';
request_data.parse_response = this.parseAllResponse;
request_data.parse_response = ResponseParser.allResponse;
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.
// target_data and grantee_data are both objects like:
// {
......@@ -380,7 +293,7 @@ export default class ZimbraAdminApi {
const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data);
const request_data = this.buildRequestData('GetGrants', callback);
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.target = target;
return this.performRequest(request_data);
......@@ -433,7 +346,7 @@ export default class ZimbraAdminApi {
// Remove Account Alias
removeAccountAlias(account_id, alias, 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 };
return this.performRequest(request_data);
}
......@@ -454,31 +367,25 @@ export default class ZimbraAdminApi {
// members is one email or array of emails
removeDistributionListMember(dl_id, members, 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) };
return this.performRequest(request_data);
}
renameAccount(zimbra_id, new_name, callback) {
let resource_data = {
id: zimbra_id,
newName: new_name
};
const resource_data = { id: zimbra_id, newName: new_name };
return this.rename('Account', resource_data, callback);
}
renameDistributionList(zimbra_id, new_name, callback) {
let resource_data = {
id: zimbra_id,
newName: new_name
};
const resource_data = { id: zimbra_id, newName: new_name };
return this.rename('DistributionList', resource_data, callback);
}
revokeRight(target_data, grantee_data, right_name, callback) {
const [target, grantee] = this.dictionary.buildTargetGrantee(target_data, grantee_data);
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.target = target;
request_data.params.params.right = { '_content': right_name };
......@@ -503,7 +410,7 @@ export default class ZimbraAdminApi {
directorySearch(search_object, callback) {
const request_data = this.buildRequestData(`SearchDirectory`, callback);
request_data.params.params = search_object;
request_data.parse_response = this.parseSearchResponse;
request_data.parse_response = ResponseParser.searchResponse;
return this.performRequest(request_data);
}
......@@ -512,7 +419,7 @@ export default class ZimbraAdminApi {
// Count number of accounts by cos in a domain,
countAccounts(domain_idenfitier, 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 = {
'by': this.dictionary.byIdOrName(domain_idenfitier),
'_content': domain_idenfitier
......@@ -542,40 +449,19 @@ export default class ZimbraAdminApi {
return this.performRequest(request_data);
}
// TODO: TO ugly
// Set account Password
setPassword(zimbra_id, password, callback) {
const request_data = this.buildRequestData(`SetPassword`, callback);
request_data.params.params = { id: zimbra_id, newPassword: password };
const that = this;
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, {});
}
};
request_data.parse_response = ResponseParser.setPasswordResponse;
return this.performRequest(request_data);
}
// TODO: Ugly
// Get Account Mailbox
getMailbox(zimbra_id, callback) {
const request_data = this.buildRequestData('GetMailbox', callback);
request_data.params.params = { mbox: { id: zimbra_id } };
request_data.parse_response = function(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);
};
request_data.parse_response = ResponseParser.getMailboxResponse;
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 @@
if (err) return console.log(err);
expect(data.attrs.sn).to.equal('Bruna');
expect(data.attrs.givenName).to.equal('Patricio');
console.log(data);
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