UNPKG

screwdriver-api

Version:

API server for the Screwdriver.cd service

59 lines (49 loc) 1.87 kB
'use strict'; const boom = require('@hapi/boom'); const joi = require('joi'); const schema = require('screwdriver-data-schema'); const idSchema = schema.models.pipeline.base.extract('id'); const { updatePipelineAdmins } = require('./helper/updateAdmins'); module.exports = () => ({ method: 'PUT', path: '/pipelines/{id}/updateAdmins', options: { description: 'Update admins of a pipeline', notes: 'Update the admins of a specific pipeline', tags: ['api', 'pipelines'], auth: { strategies: ['token'], scope: ['user', '!guest', 'admin'] }, handler: async (request, h) => { const { id } = request.params; const { scmContext, username, scope } = request.auth.credentials; const { usernames } = request.payload; const payloadScmContext = request.payload.scmContext; if (!Array.isArray(usernames) || usernames.length === 0) { throw boom.badRequest(`Payload must contain admin usernames`); } else if (!payloadScmContext) { throw boom.badRequest(`Payload must contain scmContext`); } const { userFactory } = request.server.app; const isSDAdmin = scope.includes('admin'); const user = await userFactory.get({ username, scmContext }); const updatedPipeline = await updatePipelineAdmins( { id, scmContext: payloadScmContext, usernames }, user, isSDAdmin, request.server ); return h.response(updatedPipeline.toJson()).code(200); }, validate: { params: joi.object({ id: idSchema }) } } });