rest/saml.js

/**
 * Create a Meraki REST API wrapper for the saml-roles ressource. See the
 * [online documentation]{@link https://dashboard.meraki.com/api_docs#saml-roles} for more information.
 *
 * @module meraki/rest/saml-roles
 * @param { string } [apiKey='']      The Meraki api key
 * @param { string } [target='api']   The Meraki target
 * @param { string } [basePath='/']   The Meraki base path for the saml-roles ressource
 * @param { string } rateLimiter      The rate limiter (bottleneck) configuration
 * @param { object } [logger]          Logger to use if logging is enabled
 * @return { Object } The initialized Meraki REST API wrapper for the saml-roles ressource
 * @example
 * const apiKey = 'secret meraki api key'
 * const organizationId = 'meraki organization id'
 * const version = 'v0'
 * const target = 'n12'
 * const basePath = `/${target}/${version}`
 * const rateLimiter = {
 *  enabled: true
 * }
 * const samlEndpoints = require('./lib/rest/saml')({ apiKey, target, basePath, baseUrl, rateLimiter })
 */
function createSamlEndpoints ({
  apiKey = '',
  target = 'api',
  basePath = '/',
  baseUrl = 'https://api.meraki.com',
  rateLimiter,
  logger
}) {
  const axios = require('./axios')({ baseUrl, rateLimiter, logger })

  /**
   * List the SAML roles in an organization.
   *
   * @memberof module:meraki/rest/saml-roles
   * @param { string } [apiKey]         Optional custom apiKey for this request (if not set will take the inital apiKey)
   * @param { string } [target]         Optional custom target for this request (if not set will take the inital target)
   * @param { string } [scope]          Optional custom scope for rate limiter
   * @param { string } orgId            The organization id
   * @return { Promise } A promise holding the SAML roles this organization
   * @example <caption>Example response</caption>
   * [{
   *   "id": "TEdJIEN1c3RvbWVy",
   *   "role": "myrole",
   *   "orgAccess": "none",
   *   "networks": [{
   *     "id": "N_1234",
   *     "access": "full"
   *   }],
   *   "tags": [{
   *     "tag": "west",
   *     "access": "read-only"
   *   }]
   * }]
   */
  function listSamlRoles ({
    apiKey: localApiKey,
    target: localTarget,
    scope,
    orgId
  }) {
    if (!orgId) {
      return Promise.reject(new Error('The parameter orgId is mandatory'))
    }

    return axios._get(
      localApiKey || apiKey,
      localTarget || target,
      scope,
      `${basePath}/${orgId}/samlRoles`
    )
  }

  /**
   * Return a SAML role.
   *
   * @memberof module:meraki/rest/saml-roles
   * @param { string } [apiKey]         Optional custom apiKey for this request (if not set will take the inital apiKey)
   * @param { string } [target]         Optional custom target for this request (if not set will take the inital target)
   * @param { string } [scope]          Optional custom scope for rate limiter
   * @param { string } orgId            The organization id
   * @param { string } roleId           The SAML role id
   * @return { Promise } A promise holding the SAML role for this role id
   * @example <caption>Example response</caption>
   * {
   *   "id": "TEdJIEN1c3RvbWVy",
   *   "role": "myrole",
   *   "orgAccess": "none",
   *   "networks": [{
   *     "id": "N_1234",
   *     "access": "full"
   *   }],
   *   "tags": [{
   *     "tag": "west",
   *     "access": "read-only"
   *   }]
   * }
   */
  function showSamlRole ({
    apiKey: localApiKey,
    target: localTarget,
    scope,
    orgId,
    roleId
  }) {
    if (!orgId) {
      return Promise.reject(new Error('The parameter orgId is mandatory'))
    }

    if (!roleId) {
      return Promise.reject(new Error('The parameter roleId is mandatory'))
    }

    return axios._get(
      localApiKey || apiKey,
      localTarget || target,
      scope,
      `${basePath}/${orgId}/samlRoles/${roleId}`
    )
  }

  /**
   * Create a SAML role.
   *
   * @memberof module:meraki/rest/saml-roles
   * @param { string } [apiKey]         Optional custom apiKey for this request (if not set will take the inital apiKey)
   * @param { string } [target]         Optional custom target for this request (if not set will take the inital target)
   * @param { string } [scope]          Optional custom scope for rate limiter
   * @param { string } orgId            The organization id
   * @param { string } role             The role of the SAML administrator
   * @param { string } orgAccess        The privilege of the SAML administrator on the organization (none, read-only, full)
   * @param { array } tags              The list of tags that the SAML administrator has privileges on
   * @param { string } tags.tag         The name of the tag
   * @param { string } tags.access      The privilege of the SAML administrator on the tag
   * @param { array } networks          The list of networks that the SAML administrator has privileges on
   * @param { string } networks.id      The network ID
   * @param { string } networks.access  The privilege of the SAML administrator on the network
   * @return { Promise } A promise holding the new SAML role
   * @example <caption>Example response</caption>
   * {
   *   "id": "TEdJIEN1c3RvbWVy",
   *   "role": "myrole",
   *   "orgAccess": "none",
   *   "networks": [{
   *     "id": "N_1234",
   *     "access": "full"
   *   }],
   *   "tags": [{
   *     "tag": "west",
   *     "access": "read-only"
   *   }]
   * }
   */
  function createSamlRole (data) {
    const { orgId, target: localTarget, scope } = data
    delete data.orgId
    delete data.target
    delete data.scope

    if (!orgId) {
      return Promise.reject(new Error('The parameter orgId is mandatory'))
    }

    return axios._post(
      data.apiKey || apiKey,
      localTarget || target,
      scope,
      `${basePath}/${orgId}/samlRoles`,
      data
    )
  }

  /**
   * Update a SAML role.
   *
   * @memberof module:meraki/rest/saml-roles
   * @param { string } [apiKey]         Optional custom apiKey for this request (if not set will take the inital apiKey)
   * @param { string } [target]         Optional custom target for this request (if not set will take the inital target)
   * @param { string } [scope]          Optional custom scope for rate limiter
   * @param { string } orgId            The organization id
   * @param { string } roleId           The SAML role id
   * @param { string } role             The role of the SAML administrator
   * @param { string } orgAccess        The privilege of the SAML administrator on the organization (none, read-only, full)
   * @param { array } tags              The list of tags that the SAML administrator has privileges on
   * @param { string } tags.tag         The name of the tag
   * @param { string } tags.access      The privilege of the SAML administrator on the tag
   * @param { array } networks          The list of networks that the SAML administrator has privileges on
   * @param { string } networks.id      The network ID
   * @param { string } networks.access  The privilege of the SAML administrator on the network
   * @return { Promise } A promise holding the updated SAML role for this role id
   * @example <caption>Example response</caption>
   * {
   *   "id": "TEdJIEN1c3RvbWVy",
   *   "role": "myrole",
   *   "orgAccess": "none",
   *   "networks": [{
   *     "id": "N_1234",
   *     "access": "full"
   *   }],
   *   "tags": [{
   *     "tag": "west",
   *     "access": "read-only"
   *   }]
   * }
   */
  function updateSamlRole (data) {
    const { orgId, roleId, target: localTarget, scope } = data
    delete data.orgId
    delete data.roleId
    delete data.target
    delete data.scope

    if (!orgId) {
      return Promise.reject(new Error('The parameter orgId is mandatory'))
    }

    if (!roleId) {
      return Promise.reject(new Error('The parameter roleId is mandatory'))
    }

    return axios._put(
      data.apiKey || apiKey,
      localTarget || target,
      scope,
      `${basePath}/${orgId}/samlRoles/${roleId}`,
      data
    )
  }

  /**
   * Remove a SAML role.
   *
   * @memberof module:meraki/rest/saml-roles
   * @param { string } [apiKey]         Optional custom apiKey for this request (if not set will take the inital apiKey)
   * @param { string } [target]         Optional custom target for this request (if not set will take the inital target)
   * @param { string } [scope]          Optional custom scope for rate limiter
   * @param { string } orgId            The organization id
   * @param { string } roleId           The SAML role id
   * @return { Promise } A promise with no data
   */
  function deleteSamlRole ({
    apiKey: localApiKey,
    target: localTarget,
    scope,
    orgId,
    roleId
  }) {
    if (!orgId) {
      return Promise.reject(new Error('The parameter orgId is mandatory'))
    }

    if (!roleId) {
      return Promise.reject(new Error('The parameter roleId is mandatory'))
    }

    return axios._delete(
      localApiKey || apiKey,
      localTarget || target,
      scope,
      `${basePath}/${orgId}/samlRoles/${roleId}`
    )
  }

  return {
    listSamlRoles,
    showSamlRole,
    createSamlRole,
    updateSamlRole,
    deleteSamlRole
  }
}

module.exports = createSamlEndpoints