package alien4cloud.rest.application; import javax.annotation.Resource; import io.swagger.annotations.Api; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import alien4cloud.application.ApplicationService; import alien4cloud.audit.annotation.Audit; import alien4cloud.common.TagService; import alien4cloud.model.application.Application; import alien4cloud.rest.component.UpdateTagRequest; import alien4cloud.rest.model.RestResponse; import alien4cloud.rest.model.RestResponseBuilder; import alien4cloud.security.model.ApplicationRole; import alien4cloud.security.AuthorizationUtil; import io.swagger.annotations.ApiOperation; @RestController @RequestMapping({"/rest/applications/{applicationId:.+}/tags", "/rest/v1/applications/{applicationId:.+}/tags", "/rest/latest/applications/{applicationId:.+}/tags"}) @Api(value = "", description = "Operations on application's tags") public class ApplicationTagsController { @Resource private ApplicationService applicationService; @Resource private TagService tagService; /** * Update or create a tag for a given application * * @param applicationId The id of the application for which to update/create a tag. * @param updateApplicationTagRequest The object that contains the tag's key and value. * @return An empty rest response. */ @ApiOperation(value = "Update/Create a tag for the application.", notes = "The logged-in user must have the application manager role for this application. Application role required [ APPLICATION_MANAGER ]") @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("isAuthenticated()") @Audit public RestResponse<Void> upsertTag(@PathVariable String applicationId, @RequestBody UpdateTagRequest updateApplicationTagRequest) { Application application = applicationService.getOrFail(applicationId); AuthorizationUtil.checkAuthorizationForApplication(application, ApplicationRole.APPLICATION_MANAGER); tagService.upsertTag(application, updateApplicationTagRequest.getTagKey(), updateApplicationTagRequest.getTagValue()); return RestResponseBuilder.<Void> builder().build(); } /** * Delete a tag for the application. * * @param applicationId Id of the application for which to remove the tag. * @param tagId The key of the tag to remove. * @return An empty {@link RestResponse}. */ @ApiOperation(value = "Delete a tag for the application.", notes = "The logged-in user must have the application manager role for this application. Application role required [ APPLICATION_MANAGER ]") @RequestMapping(value = "/{tagId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("isAuthenticated()") @Audit public RestResponse<Void> deleteTag(@PathVariable String applicationId, @PathVariable String tagId) { Application application = applicationService.getOrFail(applicationId); AuthorizationUtil.checkAuthorizationForApplication(application, ApplicationRole.APPLICATION_MANAGER); tagService.removeTag(application, tagId); return RestResponseBuilder.<Void> builder().build(); } }