private AddressSpace getAddressSpace(String namespace, String addressSpaceId) throws Exception { return addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceId) .orElseThrow(() -> new NotFoundException("Address space " + addressSpaceId + " not found")); }
@GET @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) @Path("{addressSpace}") public Response getConsole(@PathParam("addressSpace") String addressSpaceName) { return addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName) .map(addressSpace -> getConsoleURL(addressSpace) .map(uri -> Response.temporaryRedirect(uri).build()) .orElse(Response.status(404).build())) .orElse(Response.status(404).build()); }
@GET @Produces({MediaType.APPLICATION_JSON}) @Path("{addressSpace}") public Response getAddressSpace(@Context SecurityContext securityContext, @HeaderParam("Accept") String acceptHeader, @PathParam("namespace") String namespace, @PathParam("addressSpace") String addressSpaceName) throws Exception { return doRequest("Error getting address space " + addressSpaceName, () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.get); Instant now = clock.instant(); return addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName) .map(addressSpace -> Response.ok(formatResponse(acceptHeader, now, removeSecrets(addressSpace))).build()) .orElseGet(() -> Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build()); }); }
@DELETE @Produces({MediaType.APPLICATION_JSON}) @Path("{addressSpace}") public Response deleteAddressSpace(@Context SecurityContext securityContext, @PathParam("namespace") String namespace, @PathParam("addressSpace") String addressSpaceName) throws Exception { return doRequest("Error deleting address space " + addressSpaceName, () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.delete); AddressSpace addressSpace = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName).orElse(null); if (addressSpace == null) { return Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build(); } addressSpaceApi.deleteAddressSpace(addressSpace); return Response.ok(Status.successStatus(200, "AddressSpace", addressSpaceName, addressSpace.getMetadata().getUid())).build(); }); }
@GET @Produces({MediaType.APPLICATION_JSON}) @Path("{userName}") public Response getUser(@Context SecurityContext securityContext, @HeaderParam("Accept") String acceptHeader, @PathParam("namespace") String namespace, @PathParam("userName") String userNameWithAddressSpace) throws Exception { return doRequest("Error getting user " + userNameWithAddressSpace, () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.get); Instant now = clock.instant(); String addressSpaceName = parseAddressSpace(userNameWithAddressSpace); checkAddressSpaceName(userNameWithAddressSpace, addressSpaceName); AddressSpace addressSpace = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName).orElse(null); if (addressSpace == null) { return Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build(); } String realm = addressSpace.getAnnotation(AnnotationKeys.REALM_NAME); log.debug("Retrieving user {} in realm {} namespace {}", userNameWithAddressSpace, realm, namespace); return userApi.getUserWithName(realm, userNameWithAddressSpace) .map(user -> Response.ok(formatResponse(acceptHeader, now, user)).build()) .orElseGet(() -> Response.status(404).entity(Status.notFound("MessagingUser", userNameWithAddressSpace)).build()); }); }
@DELETE @Path("{userName}") @Produces({MediaType.APPLICATION_JSON}) public Response deleteUser(@Context SecurityContext securityContext, @PathParam("namespace") String namespace, @PathParam("userName") String userNameWithAddressSpace) throws Exception { return doRequest("Error deleting user " + userNameWithAddressSpace, () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.delete); String addressSpaceName = parseAddressSpace(userNameWithAddressSpace); checkAddressSpaceName(userNameWithAddressSpace, addressSpaceName); AddressSpace addressSpace = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName).orElse(null); if (addressSpace == null) { return Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build(); } String realm = addressSpace.getAnnotation(AnnotationKeys.REALM_NAME); log.debug("Deleting user {} in realm {} namespace {}", userNameWithAddressSpace, realm, namespace); User user = userApi.getUserWithName(realm, userNameWithAddressSpace).orElse(null); if (user == null) { return Response.status(404).entity(Status.notFound("MessagingUser", userNameWithAddressSpace)).build(); } userApi.deleteUser(realm, user); return Response.ok(Status.successStatus(200)).build(); }); }
@PUT @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) @Path("{addressSpace}") public Response replaceAddressSpace(@Context SecurityContext securityContext, @PathParam("namespace") String namespace, @PathParam("addressSpace") String addressSpaceName, @NotNull @Valid AddressSpace payload) throws Exception { checkRequestBodyNotNull(payload); checkAddressSpaceObjectNameNotNull(payload, addressSpaceName); checkMatchingAddressSpaceName(addressSpaceName, payload); return doRequest("Error replacing address space " + payload.getMetadata().getName(), () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.update); AddressSpace existing = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName).orElse(null); AddressSpace addressSpace = setAddressSpaceDefaults(securityContext, namespace, payload, existing); DefaultValidator.validate(addressSpace); AddressSpaceResolver addressSpaceResolver = new AddressSpaceResolver(schemaProvider.getSchema()); addressSpaceResolver.validate(addressSpace); if (!addressSpaceApi.replaceAddressSpace(addressSpace)) { return Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build(); } AddressSpace replaced = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpace.getMetadata().getName()).orElse(addressSpace); return Response.ok().entity(removeSecrets(replaced)).build(); }); }
@POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public Response createAddressSpace(@Context SecurityContext securityContext, @Context UriInfo uriInfo, @PathParam("namespace") String namespace, @NotNull @Valid AddressSpace input) throws Exception { return doRequest("Error creating address space " + input.getMetadata().getName(), () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.create); AddressSpace addressSpace = setAddressSpaceDefaults(securityContext, namespace, input, null); DefaultValidator.validate(addressSpace); AddressSpaceResolver addressSpaceResolver = new AddressSpaceResolver(schemaProvider.getSchema()); addressSpaceResolver.validate(addressSpace); addressSpaceApi.createAddressSpace(addressSpace); AddressSpace created = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpace.getMetadata().getName()).orElse(addressSpace); UriBuilder builder = uriInfo.getAbsolutePathBuilder(); builder.path(created.getMetadata().getName()); return Response.created(builder.build()).entity(removeSecrets(created)).build(); }); }
@POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public Response createUser(@Context SecurityContext securityContext, @Context UriInfo uriInfo, @PathParam("namespace") String namespace, @NotNull User input) throws Exception { return doRequest("Error creating user " + input.getMetadata().getName(), () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.create); User user = setUserDefaults(input, namespace); String addressSpaceName = parseAddressSpace(user.getMetadata().getName()); checkAddressSpaceName(user.getMetadata().getName(), addressSpaceName); AddressSpace addressSpace = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName).orElse(null); if (addressSpace == null) { return Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build(); } String realm = addressSpace.getAnnotation(AnnotationKeys.REALM_NAME); userApi.createUser(realm, user); User created = userApi.getUserWithName(realm, user.getMetadata().getName()).orElse(user); UriBuilder builder = uriInfo.getAbsolutePathBuilder(); builder.path(created.getMetadata().getName()); return Response.created(builder.build()).entity(created).build(); }); }
@PUT @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) @Path("{userName}") public Response replaceUser(@Context SecurityContext securityContext, @PathParam("namespace") String namespace, @PathParam("userName") String userNameWithAddressSpace, @NotNull User input) throws Exception { return doRequest("Error replacing user " + input.getMetadata().getName(), () -> { verifyAuthorized(securityContext, namespace, ResourceVerb.update); User user = setUserDefaults(input, namespace); String addressSpaceName = parseAddressSpace(user.getMetadata().getName()); checkAddressSpaceName(user.getMetadata().getName(), addressSpaceName); checkMatchingUserName(userNameWithAddressSpace, user); AddressSpace addressSpace = addressSpaceApi.getAddressSpaceWithName(namespace, addressSpaceName).orElse(null); if (addressSpace == null) { return Response.status(404).entity(Status.notFound("AddressSpace", addressSpaceName)).build(); } String realm = addressSpace.getAnnotation(AnnotationKeys.REALM_NAME); if (!userApi.replaceUser(realm, user)) { return Response.status(404).entity(Status.notFound("MessagingUser", user.getMetadata().getName())).build(); } User replaced = userApi.getUserWithName(realm, user.getMetadata().getName()).orElse(user); return Response.ok().entity(replaced).build(); }); }