linagora/openpaas-esn

View on GitHub
backend/core/avatar/index.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

var async = require('async');

var avatarProviders = {};

module.exports.registerProvider = function(type, avatarProvider) {
  avatarProviders[type] = avatarProvider;
};

module.exports.getAvatarFromEmail = function(email, callback) {
  var objectForEmail, type;
  var types = Object.keys(avatarProviders);
  async.whilst(
    function() {
      return !objectForEmail && types.length > 0;
    },
    function(callback) {
      type = types.shift();
      avatarProviders[type].findByEmail(email, function(err, result) {
        if (err) {
          return callback(err);
        }
        if (result) {
          objectForEmail = result;
        }
        return callback();
      });
    },
    function(err) {
      if (err) {
        return callback(err);
      }
      if (!objectForEmail) {
        return callback();
      }

      return callback(null, objectForEmail, avatarProviders[type].getAvatar);
    });
};