package org.fluxtream.core.api; import com.sun.jersey.api.Responses; import org.codehaus.jackson.map.ObjectMapper; import org.fluxtream.core.domain.Guest; import org.fluxtream.core.domain.oauth2.Application; import org.fluxtream.core.domain.oauth2.AuthorizationToken; import org.fluxtream.core.mvc.models.TechnicalAuthorizationTokenModel; import org.fluxtream.core.services.GuestService; import org.fluxtream.core.services.OAuth2MgmtService; import org.fluxtream.core.services.PartnerAppsService; import org.fluxtream.core.services.impl.ExistingEmailException; import org.fluxtream.core.services.impl.UsernameAlreadyTakenException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; import java.io.IOException; /** * User: candide * Date: 11/07/14 * Time: 11:37 */ @Path("/v1/partners") @Component("RESTPartnerRegisterController") @Scope("request") public class PartnerAppsRegisterController { @Autowired OAuth2MgmtService oAuth2MgmtService; @Autowired PartnerAppsService partnerAppsService; @Autowired GuestService guestService; @POST @Path("/apps/{appSecret}/guests") public Response register(@PathParam("appSecret") final String appSecret, @FormParam("email") final String email, @FormParam("username") final String username, @FormParam("firstname") final String firstname, @FormParam("lastname") final String lastname) throws IOException { final Application application = partnerAppsService.getApplication(appSecret); if (application==null) return Responses.notFound().build(); if (!application.registrationAllowed) return Response.status(Response.Status.FORBIDDEN).build(); try { final Guest guest = guestService.createGuest(username, firstname, lastname, null, email, Guest.RegistrationMethod.REGISTRATION_METHOD_API, application.uid); final AuthorizationToken authorizationToken = oAuth2MgmtService.issueAuthorizationToken(guest.getId(), application.getId()); TechnicalAuthorizationTokenModel authorizationTokenModel = new TechnicalAuthorizationTokenModel(authorizationToken, guest); final String json = (new ObjectMapper()).writeValueAsString(authorizationTokenModel); return Response.ok(json).build(); } catch (UsernameAlreadyTakenException e) { return Response.status(Response.Status.BAD_REQUEST).entity("This username is already taken").build(); } catch (ExistingEmailException e) { return Response.status(Response.Status.BAD_REQUEST).entity("This e-mail address is already used").build(); } } }