18F/federalist

View on GitHub
frontend/util/federalistApi.js

Summary

Maintainability
C
7 hrs
Test Coverage
C
77%
import fetch from './fetch';
import alertActions from '../actions/alertActions';

export const API = '/v0';

function request(endpoint, params = {}, { handleHttpError = true } = {}) {
  const csrfToken = typeof window !== 'undefined' ? window.CSRF_TOKEN : global.CSRF_TOKEN;

  const defaultHeaders = {
    'x-csrf-token': csrfToken,
  };

  const url = `${API}/${endpoint}`;

  const headers = { ...defaultHeaders, ...(params.headers || {}) };
  const finalParams = { ...params, headers };

  return fetch(url, finalParams).catch((error) => {
    if (handleHttpError) {
      alertActions.httpError(error.message);
    } else {
      throw error;
    }
  });
}

export default {
  request,

  fetchBuilds(site) {
    return request(`site/${site.id}/build`);
  },

  fetchBuildLogs(build, offset = 0) {
    return request(`build/${build.id}/log/offset/${offset}`);
  },

  fetchOrganization(id) {
    return request(`organization/${id}`);
  },

  fetchOrganizations() {
    return request('organization');
  },

  fetchOrganizationRoles() {
    return request('organization-role');
  },

  inviteToOrganization(id, data) {
    return request(`organization/${id}/invite`, {
      method: 'POST',
      data,
    });
  },

  updateOrganizationRole(organizationId, roleId, userId) {
    return request('organization-role', {
      method: 'PUT',
      data: {
        organizationId,
        roleId,
        userId,
      },
    });
  },

  removeOrganizationRole(organizationId, userId) {
    return request(`organization/${organizationId}/user/${userId}`, {
      method: 'DELETE',
    });
  },

  fetchRoles() {
    return request('role');
  },

  fetchOrganizationMembers(id) {
    return request(`organization/${id}/members`);
  },

  fetchPublishedBranches(site) {
    return request(`site/${site.id}/published-branch`);
  },

  fetchPublishedFiles(id, branch, startAtKey = null) {
    let path = `site/${id}/published-branch/${branch}/published-file`;
    if (startAtKey) {
      path += `?startAtKey=${startAtKey}`;
    }
    return request(path);
  },

  fetchSites() {
    return request('site');
  },

  fetchSiteDomains(siteId) {
    return request(`site/${siteId}/domains`);
  },

  fetchUser() {
    return request('me');
  },

  fetchUserActions(siteId) {
    return request(`site/${siteId}/user-action`);
  },

  addUserToSite({ owner, repository }) {
    return request(
      'site/user',
      {
        method: 'POST',
        data: {
          owner,
          repository,
        },
      },
      {
        // we want to handle the error elsewhere in order
        // to show the additional AddSite fields
        handleHttpError: false,
      }
    );
  },

  removeUserFromSite(siteId, userId) {
    return request(
      `site/${siteId}/user/${userId}`,
      { method: 'DELETE' },
      { handleHttpError: false }
    );
  },

  addSite(site) {
    return request(
      'site',
      {
        method: 'POST',
        data: site,
      },
      {
        handleHttpError: false,
      }
    );
  },

  updateSite(site, data) {
    return request(
      `site/${site.id}`,
      {
        method: 'PUT',
        data,
      },
      {
        handleHttpError: false,
      }
    );
  },

  deleteSite(siteId) {
    return request(
      `site/${siteId}`,
      { method: 'DELETE' },
      { handleHttpError: false }
    );
  },

  restartBuild(buildId, siteId) {
    return request('build/', {
      method: 'POST',
      data: {
        buildId,
        siteId,
      },
    });
  },

  createBuild(sha, branch, siteId) {
    return request('build/', {
      method: 'POST',
      data: {
        sha,
        siteId,
        branch,
      },
    });
  },

  updateUserSettings(userSettings) {
    return request(
      'me/settings',
      {
        method: 'PUT',
        data: userSettings,
      },
      {
        handleHttpError: false,
      }
    );
  },

  deleteSiteBranchConfig(siteId, siteBranchConfigId) {
    return request(`site/${siteId}/branch-config/${siteBranchConfigId}`, {
      method: 'DELETE',
    });
  },

  createSiteBranchConfig(siteId, branch, config = {}, context) {
    return request(`site/${siteId}/branch-config`, {
      method: 'POST',
      data: {
        branch,
        config,
        context,
      },
    });
  },

  fetchSiteBranchConfigs(siteId) {
    return request(`site/${siteId}/branch-config`);
  },

  updateSiteBranchConfig(
    siteId,
    siteBranchConfigId,
    branch,
    config = {},
    context
  ) {
    return request(`site/${siteId}/branch-config/${siteBranchConfigId}`, {
      method: 'PUT',
      data: {
        branch,
        config,
        context,
      },
    });
  },

  fetchUserEnvironmentVariables(siteId) {
    return request(`site/${siteId}/user-environment-variable`);
  },

  deleteUserEnvironmentVariable(siteId, uevId) {
    return request(
      `site/${siteId}/user-environment-variable/${uevId}`,
      {
        method: 'DELETE',
      },
      {
        handleHttpError: false,
      }
    );
  },

  createUserEnvironmentVariable(siteId, uev) {
    return request(
      `site/${siteId}/user-environment-variable`,
      {
        method: 'POST',
        data: {
          name: uev.name,
          value: uev.value,
        },
      },
      {
        handleHttpError: false,
      }
    );
  },

  removeBasicAuthFromSite(siteId) {
    return request(
      `site/${siteId}/basic-auth`,
      {
        method: 'DELETE',
      },
      {
        handleHttpError: false,
      }
    );
  },

  saveBasicAuthToSite(siteId, credentials) {
    return request(
      `site/${siteId}/basic-auth`,
      {
        method: 'POST',
        data: {
          username: credentials.username,
          password: credentials.password,
        },
      },
      {
        handleHttpError: false,
      }
    );
  },

  revokeApplicationGrant() {
    return request(
      'me/githubtoken',
      {
        method: 'DELETE',
      },
      {
        handleHttpError: false,
      }
    );
  },
};