UNPKG

node-meraki

Version:
237 lines (220 loc) 7.59 kB
/** * Create a Meraki REST API wrapper for the admin ressource. See the * [online documentation]{@link https://dashboard.meraki.com/api_docs#admins} for more information. * * @module meraki/rest/admins * @param { string } [apiKey=''] The Meraki api key * @param { string } [target='api'] The Meraki target * @param { string } [basePath='/'] The Meraki base path for the admin 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 admin ressource * @example * const apiKey = 'secret meraki api key' * const version = 'v0' * const target = 'n12' * const basePath = `/${target}/${version}/organizations` * const rateLimiter = { * enabled: true * } * const adminEndpoints = require('./lib/rest/admins')({ apiKey, target, basePath, baseUrl, rateLimiter }) */ function createAdminEndpoints({ apiKey = '', target = 'api', basePath = '/', baseUrl = 'https://api.meraki.com', rateLimiter, logger }) { const axios = require('./axios')({ baseUrl, rateLimiter, logger }); /** * List the dashboard administrators in this organization. * * @memberof module:meraki/rest/admins * @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 for which to list the admins * @return { Promise } A promise holding the dashboard administrators in this organization * @example <caption>Example response</caption> * [ * { * "id":"1", * "name":"Miles Meraki", * "email":"miles@meraki.com", * "orgAccess":"none", * "tags":[ * { * "tag":"west", * "access":"read-only" * } * ], * "networks":[ * { * "id":"N_249", * "access":"full" * } * ] * } * ] */ function listAdmins({ 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}/admins`); } /** * Create a new dashboard administrator. * * @memberof module:meraki/rest/admins * @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 } email The email of the dashboard administrator. This attribute can not be updated * @param { string } name The name of the dashboard administrator * @param { string } orgAcess The privilege of the dashboard administrator on the organization (full, read-only, none) * @param { Array } tags The list of tags that the dashboard administrator has privileges on * @return { Promise } A promise holding the newly created dashboard administrator * @example <caption>Example response</caption> * { * "id":"212406", * "name":"Miles Meraki", * "email":"miles@meraki.com", * "orgAccess":"none", * "tags":[ * { * "tag":"west", * "access":"read-only" * } * ], * "networks":[] * } */ function createAdmin({ apiKey: localApiKey, target: localTarget, scope, orgId, email, name, orgAccess, tags, networks }) { if (!orgId) { return Promise.reject(new Error('The parameter orgId is mandatory')); } if (!orgAccess && !tags && !networks) { return Promise.reject(new Error('Administrator accounts must be granted access to either the Organization, Networks, or Tags')); } const data = { email, name, orgAccess, tags, networks }; return axios._post(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${orgId}/admins`, data); } /** * Update an administrator. * * @memberof module:meraki/rest/admins * @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 } adminId The id of the dashboard administrator * @param { string } email The email of the dashboard administrator. This attribute can not be updated * @param { string } name The name of the dashboard administrator * @param { string } orgAcess The privilege of the dashboard administrator on the organization (full, read-only, none) * @param { Array } tags The list of tags that the dashboard administrator has privileges on * @return { Promise } A promise holding the updated dashboard administrator * @example <caption>Example response</caption> * { * "id":"212406", * "name":"Miles Meraki", * "email":"miles@meraki.com", * "orgAccess":"read-only", * "tags":[ * { * "tag":"west", * "access":"read-only" * } * ], * "networks":[] * } */ function updateAdmin({ apiKey: localApiKey, target: localTarget, scope, orgId, adminId, email, name, orgAccess, tags, networks }) { if (!orgId) { return Promise.reject(new Error('The parameter orgId is mandatory')); } if (!adminId) { return Promise.reject(new Error('The parameter adminId is mandatory')); } const data = { email, name, orgAccess, tags, networks }; return axios._put(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${orgId}/admins/${adminId}`, data); } /** * Revoke all access for a dashboard administrator within this organization. * * @memberof module:meraki/rest/admins * @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 } adminId The if of the dashboard administrator to delete * @return { Promise } A promise with no data */ function deleteAdmin({ apiKey: localApiKey, target: localTarget, scope, orgId, adminId }) { if (!orgId) { return Promise.reject(new Error('The parameter orgId is mandatory')); } if (!adminId) { return Promise.reject(new Error('The parameter adminId is mandatory')); } return axios._delete(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${orgId}/admins/${adminId}`); } return { listAdmins, createAdmin, updateAdmin, deleteAdmin }; } module.exports = createAdminEndpoints;