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

Add and Remove DL Memebers

parent 35fe2033
......@@ -13,6 +13,7 @@
- [Accounts](#accounts)
- [Cos](#cos)
- [Domains](#domains)
- [Distribution Lists](#distribution-lists)
## Example
......@@ -368,3 +369,20 @@ Return an Array of the Domain `DistributionList`s.
domain.getAllDistributionLists(callback);
// [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
request_data.params.params = { 'id': account_id, 'alias': alias };
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',
value: function getAccount(identifier, callback) {
......@@ -605,6 +622,23 @@ return /******/ (function(modules) { // webpackBootstrap
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_object = {
// query: An LDAP query or null for everything,
......@@ -12372,6 +12406,20 @@ return /******/ (function(modules) { // webpackBootstrap
var class_name = this.resourceToClass(resource.toLowerCase());
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',
value: function resourceResponseName(resource) {
......@@ -13811,7 +13859,15 @@ return /******/ (function(modules) { // webpackBootstrap
return _this;
}
// Add members to DL
(0, _createClass3.default)(DistributionList, [{
key: 'addMembers',
value: function addMembers(members, callback) {
this.api.addDistributionListMember(this.id, members, callback);
}
}, {
key: 'parseMembers',
value: function parseMembers(obj) {
var members = [];
......@@ -13822,6 +13878,14 @@ return /******/ (function(modules) { // webpackBootstrap
}
return members;
}
// Remove members from DL
}, {
key: 'removeMembers',
value: function removeMembers(members, callback) {
this.api.removeDistributionListMember(this.id, members, callback);
}
}]);
return DistributionList;
}(_zimbra2.default); // Copyright (c) 2016 ZBox, Spa. All Rights Reserved.
This diff is collapsed.
......@@ -268,6 +268,20 @@ export default class ZimbraAdminApi {
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) {
this.get('Account', identifier, callback);
}
......@@ -354,7 +368,6 @@ export default class ZimbraAdminApi {
// type: (account|cos|dl|domain),
// identifier: (name or zimbraId)
// }
getGrants(target_data, grantee_data, callback) {
const request_data = { };
const resource = 'Grant';
......@@ -451,6 +464,20 @@ export default class ZimbraAdminApi {
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_object = {
// query: An LDAP query or null for everything,
......
......@@ -42,6 +42,17 @@ export default class Dictionary {
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) {
return this.zimbra_resources[resource.toLowerCase()].response_name;
}
......
......@@ -9,6 +9,11 @@ export default class DistributionList extends Zimbra {
this.members = this.parseMembers(dl_obj);
}
// Add members to DL
addMembers(members, callback) {
this.api.addDistributionListMember(this.id, members, callback);
}
parseMembers(obj) {
let members = [];
if (obj.dlm) {
......@@ -19,4 +24,9 @@ export default class DistributionList extends Zimbra {
return members;
}
// Remove members from DL
removeMembers(members, callback) {
this.api.removeDistributionListMember(this.id, members, callback);
}
}
......@@ -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() {
......@@ -501,7 +551,6 @@
api.getGrants(null, grantee_data, function(err, data){
if (err) console.log(err);
expect(data[0].constructor.name).to.equal('Grant');
expect(data[0].right._content).to.equal("domainAdminRights");
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