linagora/openpaas-esn

View on GitHub
modules/linagora.esn.oauth.consumer/backend/lib/index.js

Summary

Maintainability
A
2 hrs
Test Coverage
const q = require('q');
const { OAUTH_CONFIG_KEY } = require('./constants');

module.exports = function(dependencies) {
  const logger = dependencies('logger');
  const esnConfig = dependencies('esn-config');
  const strategies = require('./strategies')(dependencies);

  function start(callback) {
    configureStrategies(callback);
    reconfigureOnChange();
  }

  function configureStrategies(callback) {
    const promises = Object.keys(strategies).map(function(key) {
      const defer = q.defer();

      strategies[key].configure(function(err) {
        if (err) {
          logger.warn('OAuth consumer ' + key + ' configuration failure', err);
        }
        defer.resolve();
      });

      return defer.promise;
    });

    q.all(promises).finally(callback);
  }

  function reconfigureOnChange() {
    const noop = () => {};

    esnConfig(OAUTH_CONFIG_KEY).onChange(() => {
      logger.info('OAuth config is changed, reconfiguring OAuth consumer providers');
      configureStrategies(noop);
    });
  }

  return {
    start: start
  };
};