linagora/openpaas-esn

View on GitHub
modules/linagora.esn.contact/backend/lib/client/group-addressbook-home.js

Summary

Maintainability
A
2 hrs
Test Coverage
const Q = require('q');
const davClient = require('../dav-client').rawClient;
const { parsePrincipal } = require('../helper');

module.exports = dependencies => {
  return {
    getGroupAddressbookHomes
  };

  function getGroupAddressbookHomes(user, options) {
    const { davServerUrl, ESNToken } = options;
    const { getDavEndpoint, checkResponse } = require('./utils')(dependencies, { davServerUrl });

    return getDavEndpoint(user)
      .then(davEndpoint => `${davEndpoint}/principals/users/${user._id}`)
      .then(url => {
        const deferred = Q.defer();
        const method = 'PROPFIND';

        davClient({
          method,
          headers: {
            ESNToken,
            accept: 'application/json'
          },
          url,
          json: true
        }, checkResponse(deferred, method, 'Error while getting user principals'));

        return deferred.promise;
      })
      .then(({ body }) => {
        const groupMembership = body['group-membership'];

        if (!Array.isArray(groupMembership) || !groupMembership.length) return [];

        return groupMembership.map(groupPrincipal => {
          const parsedPrincipal = parsePrincipal(groupPrincipal);

          return parsedPrincipal && parsedPrincipal.id;
        }).filter(Boolean);
      });
  }
};