Skip to content

Commit 93672f3

Browse files
authored
Merge pull request #172 from rezk2ll/direct-dav-connection
direct connection to DAV server
2 parents b309c41 + 1a3eb7a commit 93672f3

27 files changed

+546
-331
lines changed

src/app/app.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ angular.module('esnApp', [
66
'esn.material',
77
'linagora.esn.contact',
88
'linagora.esn.contact.collect',
9-
'linagora.esn.contact.import',
10-
'linagora.esn.davproxy'
9+
'linagora.esn.contact.import'
1110
]);
1211

1312
require('esn-frontend-common-libs/src/frontend/js/modules/session');
@@ -20,4 +19,3 @@ require('./app.run');
2019
require('../linagora.esn.contact/app/app.module.js');
2120
require('../linagora.esn.contact.collect/app/app.module.js');
2221
require('../linagora.esn.contact.import/js/app.module.js');
23-
require('../linagora.esn.davproxy/js/app.js');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
2+
angular.module('esn.contact.libs')
3+
.factory('contactAddressbookHelper', contactAddressbookHelper);
4+
5+
function contactAddressbookHelper($q, contactAddressbookParser, contactDavClientService, CONTACT_ADDRESSBOOK_DAV_PROPERTIES, CONTACT_ACCEPT_HEADER) {
6+
return {
7+
populateSubscriptionSource,
8+
formatAddressBookResponse
9+
};
10+
11+
function populateSubscriptionSource(addressbook) {
12+
if (!addressbook['openpaas:source']) {
13+
return $q.when(addressbook);
14+
}
15+
16+
const sourcePath = contactAddressbookParser.parseAddressbookPath(addressbook['openpaas:source']);
17+
const url = `/addressbooks/${sourcePath.bookId}/${sourcePath.bookName}.json`;
18+
const body = { properties: Object.keys(CONTACT_ADDRESSBOOK_DAV_PROPERTIES) };
19+
const headers = { Accept: CONTACT_ACCEPT_HEADER };
20+
21+
return contactDavClientService('PROPFIND', url, headers, body)
22+
.then(({ data }) => ({
23+
...addressbook,
24+
'openpaas:source': formatAddressBookResponse(data, url)
25+
}));
26+
}
27+
28+
function formatAddressBookResponse(response, url) {
29+
const formattedAddressBook = {};
30+
31+
if (url) {
32+
formattedAddressBook._links = {
33+
self: { href: url }
34+
};
35+
}
36+
37+
Object.entries(CONTACT_ADDRESSBOOK_DAV_PROPERTIES).forEach(([key, value]) => {
38+
if (response[key]) {
39+
formattedAddressBook[value] = response[key];
40+
}
41+
});
42+
43+
return { ...response, ...formattedAddressBook };
44+
}
45+
}

src/esn.contact.libs/app/addressBook/addressbook.service.js

+21-39
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
const _ = require('lodash');
2-
31
require('./addressbook-parser.service');
42
require('./contact-api-client.service.js');
53
require('./addressbook-display.service.js');
64
require('./virtual-addressbook.service.js');
75
require('./constants.js');
6+
require('./contact-dav-url.service.js');
87

98
(function(angular) {
109
'use strict';
@@ -17,20 +16,19 @@ require('./constants.js');
1716
$window,
1817
$log,
1918
session,
20-
esnUserConfigurationService,
19+
contactDavUrlService,
2120
contactAddressbookParser,
2221
ContactAPIClient,
2322
contactAddressbookDisplayService,
2423
ContactVirtualAddressBookService,
25-
davProxyPrincipalService,
24+
FileSaver,
2625
CONTACT_ADDRESSBOOK_TYPES,
2726
CONTACT_ADDRESSBOOK_STATES,
2827
CONTACT_ADDRESSBOOK_MEMBERS_RIGHTS,
2928
CONTACT_SHARING_INVITE_STATUS,
30-
CONTACT_SHARING_SUBSCRIPTION_TYPE
29+
CONTACT_SHARING_SUBSCRIPTION_TYPE,
30+
CONTACT_EXPORT_FILE_TYPE
3131
) {
32-
var DAVSERVER_CONFIGURATION = 'davserver';
33-
3432
return {
3533
createAddressbook: createAddressbook,
3634
createGroupAddressbook: createGroupAddressbook,
@@ -46,7 +44,8 @@ require('./constants.js');
4644
subscribeAddressbooks: subscribeAddressbooks,
4745
shareAddressbook: shareAddressbook,
4846
updateAddressbookPublicRight: updateAddressbookPublicRight,
49-
updateGroupAddressbookMembersRight: updateGroupAddressbookMembersRight
47+
updateGroupAddressbookMembersRight: updateGroupAddressbookMembersRight,
48+
exportAddressbook
5049
};
5150

5251
function getAddressbookByBookName(bookName, bookId) {
@@ -94,7 +93,7 @@ require('./constants.js');
9493
}
9594

9695
function _listGroupAddressbooks() {
97-
return davProxyPrincipalService.getGroupMembership('/principals/users/' + session.user._id)
96+
return ContactAPIClient.getGroupMembership('/principals/users/' + session.user._id)
9897
.then(function(groupPrincipals) {
9998
var promises = groupPrincipals.map(function(principal) {
10099
var parsedPrincipal = contactAddressbookParser.parsePrincipalPath(principal);
@@ -241,7 +240,7 @@ require('./constants.js');
241240
}
242241

243242
function getAddressbookUrl(addressbook) {
244-
return _getFrontendURL().then(function(url) {
243+
return contactDavUrlService.getFrontendUrl().then(function(url) {
245244
return [url, _sanitizeAddressbookHref(addressbook)]
246245
.map(function(fragment) {
247246
return fragment.replace(/^\/|\/$/g, '');
@@ -250,39 +249,22 @@ require('./constants.js');
250249
});
251250
}
252251

253-
function _sanitizeAddressbookHref(addressbook) {
254-
var parsedPath = contactAddressbookParser.parseAddressbookPath(addressbook.href);
255-
256-
return ['addressbooks', parsedPath.bookId, parsedPath.bookName].join('/');
257-
}
258-
259-
function _getFrontendURL() {
260-
return esnUserConfigurationService.get([DAVSERVER_CONFIGURATION], 'core')
261-
.then(function(configurations) {
262-
if (!configurations || !configurations.length) {
263-
$log.debug('No valid configurations found for davserver');
264-
265-
return _getDefaultURL();
266-
}
267-
268-
var davserver = _.find(configurations, { name: DAVSERVER_CONFIGURATION });
269-
270-
if (!davserver) {
271-
$log.debug('davserver configuration is not set');
272-
273-
return _getDefaultURL();
274-
}
275-
276-
return davserver.value && davserver.value.frontend && davserver.value.frontend.url ? davserver.value.frontend.url : _getDefaultURL();
277-
}, function(err) {
278-
$log.debug('Can not get davserver from configuration', err);
252+
function exportAddressbook(addressbook) {
253+
return ContactAPIClient
254+
.addressbookHome(addressbook.bookId)
255+
.addressbook(addressbook.bookName)
256+
.exportAddressbook()
257+
.then(({ data }) => {
258+
const vcfBlob = new Blob([data], { type: CONTACT_EXPORT_FILE_TYPE });
279259

280-
return _getDefaultURL();
260+
FileSaver.saveAs(vcfBlob, `${addressbook.bookName}.vcf`);
281261
});
282262
}
283263

284-
function _getDefaultURL() {
285-
return $window.location.origin;
264+
function _sanitizeAddressbookHref(addressbook) {
265+
var parsedPath = contactAddressbookParser.parseAddressbookPath(addressbook.href);
266+
267+
return ['addressbooks', parsedPath.bookId, parsedPath.bookName].join('/');
286268
}
287269
}
288270
})(angular);

0 commit comments

Comments
 (0)