auth0-extensions/auth0-source-control-extension-tools

View on GitHub
src/auth0/handlers/emailProvider.js

Summary

Maintainability
B
5 hrs
Test Coverage
import DefaultHandler from './default';

export const schema = { type: 'object' };

// The Management API requires the fields to be specified
const defaultFields = [ 'name', 'enabled', 'credentials', 'settings', 'default_from_address' ];

export default class EmailProviderHandler extends DefaultHandler {
  constructor(options) {
    super({
      ...options,
      type: 'emailProvider'
    });
  }

  async getType() {
    try {
      return await this.client.emailProvider.get({ include_fields: true, fields: defaultFields });
    } catch (err) {
      if (err.statusCode === 404) return {};
      throw err;
    }
  }

  objString(provider) {
    return super.objString({ name: provider.name, enabled: provider.enabled });
  }

  async processChanges(assets) {
    const { emailProvider } = assets;

    // Do nothing if not set
    if (!emailProvider) return;

    if (Object.keys(emailProvider).length > 0) {
      let existing = await this.getType();

      // Check for existing Email Provider
      if (existing.name) {
        if (existing.name !== emailProvider.name) {
          // Delete the current provider as it's different
          await this.client.emailProvider.delete();
          this.didDelete(existing);
          existing = {};
        }
      }

      // Now configure or update depending if it is configured already
      if (existing.name) {
        const provider = { name: emailProvider.name, enabled: emailProvider.enabled };
        const updated = await this.client.emailProvider.update(provider, emailProvider);
        this.updated += 1;
        this.didUpdate(updated);
      } else {
        const provider = { name: emailProvider.name, enabled: emailProvider.enabled };
        const created = await this.client.emailProvider.configure(provider, emailProvider);
        this.created += 1;
        this.didCreate(created);
      }
    }
  }
}