package eu.europeana.cloud.service.aas.rest; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; import eu.europeana.cloud.common.model.User; import eu.europeana.cloud.common.web.AASParamConstants; import eu.europeana.cloud.service.aas.authentication.AuthenticationService; import eu.europeana.cloud.service.aas.authentication.exception.DatabaseConnectionException; import eu.europeana.cloud.service.aas.authentication.exception.InvalidPasswordException; import eu.europeana.cloud.service.aas.authentication.exception.InvalidUsernameException; import eu.europeana.cloud.service.aas.authentication.exception.UserDoesNotExistException; import eu.europeana.cloud.service.aas.authentication.exception.UserExistsException; /** * AAS: just a single call that creates an ecloud user */ @Component @Path("/") @Scope("request") public class AuthenticationResource { @Autowired private AuthenticationService authenticationService; /** * Creates a new ecloud-user with the specified username + password. */ @POST @Path("/create-user") @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @PreAuthorize("hasRole('ROLE_ADMIN')") public Response createCloudUser( @QueryParam(AASParamConstants.P_USER_NAME) String username, @QueryParam(AASParamConstants.P_PASSWORD) String password) throws DatabaseConnectionException, UserExistsException, InvalidUsernameException, InvalidPasswordException { authenticationService.createUser(new User(username, password)); return Response.ok("Cloud user was created!").build(); } /** * Deletes a user with the specified username. */ @POST @Path("/delete-user") @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @PreAuthorize("hasRole('ROLE_ADMIN')") public Response deleteCloudUser( @QueryParam(AASParamConstants.P_USER_NAME) String username) throws DatabaseConnectionException, UserDoesNotExistException { authenticationService.deleteUser(username); return Response.ok("Cloud user is gone. Bye bye.").build(); } /** * Updates an ecloud-user with the specified username + password. */ @POST @Path("/update-user") @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @PreAuthorize("hasRole('ROLE_ADMIN')") public Response updateCloudUser( @QueryParam(AASParamConstants.P_USER_NAME) String username, @QueryParam(AASParamConstants.P_PASSWORD) String password) throws DatabaseConnectionException, UserDoesNotExistException, InvalidPasswordException { authenticationService.updateUser(new User(username, password)); return Response.ok("Cloud user updated.").build(); } }