Commit 1ada2a0b authored by Patricio Bruna's avatar Patricio Bruna

Add and Remove DL Memebers

parent 35fe2033
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
- [Accounts](#accounts) - [Accounts](#accounts)
- [Cos](#cos) - [Cos](#cos)
- [Domains](#domains) - [Domains](#domains)
- [Distribution Lists](#distribution-lists)
## Example ## Example
...@@ -368,3 +369,20 @@ Return an Array of the Domain `DistributionList`s. ...@@ -368,3 +369,20 @@ Return an Array of the Domain `DistributionList`s.
domain.getAllDistributionLists(callback); domain.getAllDistributionLists(callback);
// [DistributionList, DistributionList] // [DistributionList, DistributionList]
``` ```
## Distribution Lists
### Add / Remove Members
```javascript
dl.addMembers('new_member@example.com', callback);
// {} if Success
dl.addMembers(['1@example.com', '2@example.com'], callback);
dl.removeMembers('new_member@example.com', callback);
// {} if Success
dl.removeMembers(['1@example.com', '2@example.com'], callback);
// Return Error if any of the emails isn't a member
```
...@@ -374,6 +374,23 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -374,6 +374,23 @@ return /******/ (function(modules) { // webpackBootstrap
request_data.params.params = { 'id': account_id, 'alias': alias }; request_data.params.params = { 'id': account_id, 'alias': alias };
this.performRequest(request_data); this.performRequest(request_data);
} }
// Add New members tos distributionlists
// members is an array of emails
}, {
key: 'addDistributionListMember',
value: function addDistributionListMember(dl_id, members, callback) {
var request_data = {};
request_data.params = this.requestParams();
request_data.request_name = 'AddDistributionListMember';
request_data.params.name = request_data.request_name + 'Request';
request_data.response_name = request_data.request_name + 'Response';
request_data.callback = callback;
request_data.parse_response = this.parseEmptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
this.performRequest(request_data);
}
}, { }, {
key: 'getAccount', key: 'getAccount',
value: function getAccount(identifier, callback) { value: function getAccount(identifier, callback) {
...@@ -605,6 +622,23 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -605,6 +622,23 @@ return /******/ (function(modules) { // webpackBootstrap
this.remove('DistributionList', resource_data, callback); this.remove('DistributionList', resource_data, callback);
} }
// Add New members tos distributionlists
// members is one email or array of emails
}, {
key: 'removeDistributionListMember',
value: function removeDistributionListMember(dl_id, members, callback) {
var request_data = {};
request_data.params = this.requestParams();
request_data.request_name = 'RemoveDistributionListMember';
request_data.params.name = request_data.request_name + 'Request';
request_data.response_name = request_data.request_name + 'Response';
request_data.callback = callback;
request_data.parse_response = this.parseEmptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
this.performRequest(request_data);
}
// Search the Directory // Search the Directory
// search_object = { // search_object = {
// query: An LDAP query or null for everything, // query: An LDAP query or null for everything,
...@@ -12372,6 +12406,20 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -12372,6 +12406,20 @@ return /******/ (function(modules) { // webpackBootstrap
var class_name = this.resourceToClass(resource.toLowerCase()); var class_name = this.resourceToClass(resource.toLowerCase());
return new class_name(object, client); return new class_name(object, client);
} }
// This return a string or array of objects
// useful for Zimbra functions that works with both
}, {
key: 'convertToZimbraArray',
value: function convertToZimbraArray(object) {
var elements = [].concat.apply([], [object]);
var result = [];
elements.forEach(function (el) {
result.push({ '_content': el });
});
return result;
}
}, { }, {
key: 'resourceResponseName', key: 'resourceResponseName',
value: function resourceResponseName(resource) { value: function resourceResponseName(resource) {
...@@ -13811,7 +13859,15 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -13811,7 +13859,15 @@ return /******/ (function(modules) { // webpackBootstrap
return _this; return _this;
} }
// Add members to DL
(0, _createClass3.default)(DistributionList, [{ (0, _createClass3.default)(DistributionList, [{
key: 'addMembers',
value: function addMembers(members, callback) {
this.api.addDistributionListMember(this.id, members, callback);
}
}, {
key: 'parseMembers', key: 'parseMembers',
value: function parseMembers(obj) { value: function parseMembers(obj) {
var members = []; var members = [];
...@@ -13822,6 +13878,14 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -13822,6 +13878,14 @@ return /******/ (function(modules) { // webpackBootstrap
} }
return members; return members;
} }
// Remove members from DL
}, {
key: 'removeMembers',
value: function removeMembers(members, callback) {
this.api.removeDistributionListMember(this.id, members, callback);
}
}]); }]);
return DistributionList; return DistributionList;
}(_zimbra2.default); // Copyright (c) 2016 ZBox, Spa. All Rights Reserved. }(_zimbra2.default); // Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -268,6 +268,20 @@ export default class ZimbraAdminApi { ...@@ -268,6 +268,20 @@ export default class ZimbraAdminApi {
this.performRequest(request_data); this.performRequest(request_data);
} }
// Add New members tos distributionlists
// members is an array of emails
addDistributionListMember(dl_id, members, callback) {
const request_data = { };
request_data.params = this.requestParams();
request_data.request_name = 'AddDistributionListMember';
request_data.params.name = `${request_data.request_name}Request`;
request_data.response_name = `${request_data.request_name}Response`;
request_data.callback = callback;
request_data.parse_response = this.parseEmptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
this.performRequest(request_data);
}
getAccount(identifier, callback) { getAccount(identifier, callback) {
this.get('Account', identifier, callback); this.get('Account', identifier, callback);
} }
...@@ -354,7 +368,6 @@ export default class ZimbraAdminApi { ...@@ -354,7 +368,6 @@ export default class ZimbraAdminApi {
// type: (account|cos|dl|domain), // type: (account|cos|dl|domain),
// identifier: (name or zimbraId) // identifier: (name or zimbraId)
// } // }
getGrants(target_data, grantee_data, callback) { getGrants(target_data, grantee_data, callback) {
const request_data = { }; const request_data = { };
const resource = 'Grant'; const resource = 'Grant';
...@@ -451,6 +464,20 @@ export default class ZimbraAdminApi { ...@@ -451,6 +464,20 @@ export default class ZimbraAdminApi {
this.remove('DistributionList', resource_data, callback); this.remove('DistributionList', resource_data, callback);
} }
// Add New members tos distributionlists
// members is one email or array of emails
removeDistributionListMember(dl_id, members, callback) {
const request_data = { };
request_data.params = this.requestParams();
request_data.request_name = 'RemoveDistributionListMember';
request_data.params.name = `${request_data.request_name}Request`;
request_data.response_name = `${request_data.request_name}Response`;
request_data.callback = callback;
request_data.parse_response = this.parseEmptyResponse;
request_data.params.params = { id: dl_id, dlm: this.dictionary.convertToZimbraArray(members) };
this.performRequest(request_data);
}
// Search the Directory // Search the Directory
// search_object = { // search_object = {
// query: An LDAP query or null for everything, // query: An LDAP query or null for everything,
......
...@@ -42,6 +42,17 @@ export default class Dictionary { ...@@ -42,6 +42,17 @@ export default class Dictionary {
return new class_name(object, client); return new class_name(object, client);
} }
// This return a string or array of objects
// useful for Zimbra functions that works with both
convertToZimbraArray (object) {
const elements = [].concat.apply([], [object]);
const result = [];
elements.forEach((el) => {
result.push({ '_content': el });
});
return result;
}
resourceResponseName (resource) { resourceResponseName (resource) {
return this.zimbra_resources[resource.toLowerCase()].response_name; return this.zimbra_resources[resource.toLowerCase()].response_name;
} }
......
...@@ -9,6 +9,11 @@ export default class DistributionList extends Zimbra { ...@@ -9,6 +9,11 @@ export default class DistributionList extends Zimbra {
this.members = this.parseMembers(dl_obj); this.members = this.parseMembers(dl_obj);
} }
// Add members to DL
addMembers(members, callback) {
this.api.addDistributionListMember(this.id, members, callback);
}
parseMembers(obj) { parseMembers(obj) {
let members = []; let members = [];
if (obj.dlm) { if (obj.dlm) {
...@@ -19,4 +24,9 @@ export default class DistributionList extends Zimbra { ...@@ -19,4 +24,9 @@ export default class DistributionList extends Zimbra {
return members; return members;
} }
// Remove members from DL
removeMembers(members, callback) {
this.api.removeDistributionListMember(this.id, members, callback);
}
} }
...@@ -491,6 +491,56 @@ ...@@ -491,6 +491,56 @@
}); });
}); });
it('Add member to DL should work with only one', function(done){
let api = new ZimbraAdminApi(auth_data);
let member = Date.now().toString() + '@customer.dev';
api.getDistributionList('abierta@customer.dev', function(err, data){
if (err) console.log(err);
const dl = data;
dl.addMembers(member, function(err, data){
if (err) return console.error(err);
expect(err).to.be.null;
done();
});
});
});
it('Add member to DL should work with array', function(done){
let api = new ZimbraAdminApi(auth_data);
let name = Date.now().toString();
let members = [name + '@customer.dev', name + '@zboxapp.dev' ];
api.getDistributionList('abierta@customer.dev', function(err, data){
if (err) console.log(err);
const dl = data;
dl.addMembers(members, function(err, data){
if (err) return console.error(err);
expect(err).to.be.null;
done();
});
});
});
it('Remove members works with an array', function(done){
let api = new ZimbraAdminApi(auth_data);
let name = Date.now().toString();
let members = [name + '@customer.dev', name + '@zboxapp.dev' ];
api.getDistributionList('abierta@customer.dev', function(err, data){
if (err) console.log(err);
const dl = data;
const original_members = dl.members;
dl.addMembers(members, function(err, data){
if (err) return console.error(err);
dl.removeMembers(members, function(err, data){
if (err) return console.error(err);
api.getDistributionList('abierta@customer.dev', function(err, data){
expect(original_members.length).to.be.equal(data.members.length);
done();
});
});
});
});
});
}); });
describe('Grants tests', function() { describe('Grants tests', function() {
...@@ -501,7 +551,6 @@ ...@@ -501,7 +551,6 @@
api.getGrants(null, grantee_data, function(err, data){ api.getGrants(null, grantee_data, function(err, data){
if (err) console.log(err); if (err) console.log(err);
expect(data[0].constructor.name).to.equal('Grant'); expect(data[0].constructor.name).to.equal('Grant');
expect(data[0].right._content).to.equal("domainAdminRights");
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