/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.frontend.web.controllers; import java.io.UnsupportedEncodingException; import java.util.Enumeration; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.apache.commons.lang.StringUtils; import org.orcid.core.oauth.OAuthError; import org.orcid.core.oauth.OAuthErrorUtils; import org.orcid.core.oauth.OrcidClientCredentialEndPointDelegator; import org.orcid.pojo.ajaxForm.OauthAuthorizeForm; import org.orcid.pojo.ajaxForm.OauthRegistrationForm; import org.orcid.pojo.ajaxForm.PojoUtil; import org.orcid.pojo.ajaxForm.RequestInfoForm; import org.orcid.pojo.ajaxForm.Text; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.oauth2.common.exceptions.InvalidRequestException; import org.springframework.stereotype.Controller; 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.ResponseBody; import com.sun.jersey.core.util.MultivaluedMapImpl; @Controller("oauthGenericCallsController") public class OauthGenericCallsController extends OauthControllerBase { @Resource private RegistrationController registrationController; @Resource private OrcidClientCredentialEndPointDelegator orcidClientCredentialEndPointDelegator; @Context private UriInfo uriInfo; @RequestMapping(value = "/oauth/token", consumes = MediaType.APPLICATION_FORM_URLENCODED, produces = MediaType.APPLICATION_JSON) public ResponseEntity<?> obtainOauth2TokenPost(HttpServletRequest request) { String authorization = request.getHeader("Authorization"); Enumeration<String> paramNames = request.getParameterNames(); MultivaluedMap<String, String> formParams = new MultivaluedMapImpl(); while(paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); formParams.add(paramName, request.getParameter(paramName)); } try { Response response = orcidClientCredentialEndPointDelegator.obtainOauth2Token(authorization, formParams); return ResponseEntity.ok(response.getEntity()); } catch(Exception e) { OAuthError error = OAuthErrorUtils.getOAuthError(e); HttpStatus status = HttpStatus.valueOf(error.getResponseStatus().getStatusCode()); return ResponseEntity.status(status).body(error); } } @RequestMapping(value = "/oauth/custom/authorize/get_request_info_form.json", method = RequestMethod.GET) public @ResponseBody RequestInfoForm getRequestInfoForm(HttpServletRequest request) throws UnsupportedEncodingException { RequestInfoForm requestInfoForm = null; if(request.getSession() != null && request.getSession().getAttribute(REQUEST_INFO_FORM) != null) { requestInfoForm = (RequestInfoForm) request.getSession().getAttribute(REQUEST_INFO_FORM); } else { throw new InvalidRequestException("Unable to find parameters"); } return requestInfoForm; } @RequestMapping(value = "/oauth/custom/authorize/empty.json", method = RequestMethod.GET) public @ResponseBody OauthAuthorizeForm getEmptyAuthorizeForm(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { OauthAuthorizeForm empty = new OauthAuthorizeForm(); Text emptyText = Text.valueOf(StringUtils.EMPTY); empty.setPassword(emptyText); empty.setUserName(emptyText); RequestInfoForm requestInfoForm = getRequestInfoForm(request); if(requestInfoForm != null) { if(!PojoUtil.isEmpty(requestInfoForm.getUserId())) { empty.setUserName(Text.valueOf(requestInfoForm.getUserId())); } } return empty; } /***************************** * Validators ****************************/ @RequestMapping(value = "/oauth/custom/register/validatePasswordConfirm.json", method = RequestMethod.POST) public @ResponseBody OauthRegistrationForm validatePasswordConfirm(@RequestBody OauthRegistrationForm reg) { registrationController.registerPasswordConfirmValidate(reg); return reg; } @RequestMapping(value = "/oauth/custom/register/validatePassword.json", method = RequestMethod.POST) public @ResponseBody OauthRegistrationForm validatePassword(@RequestBody OauthRegistrationForm reg) { registrationController.registerPasswordValidate(reg); return reg; } @RequestMapping(value = "/oauth/custom/register/validateTermsOfUse.json", method = RequestMethod.POST) public @ResponseBody OauthRegistrationForm validateTermsOfUse(@RequestBody OauthRegistrationForm reg) { registrationController.registerTermsOfUseValidate(reg); return reg; } @RequestMapping(value = "/oauth/custom/register/validateGivenNames.json", method = RequestMethod.POST) public @ResponseBody OauthRegistrationForm validateGivenName(@RequestBody OauthRegistrationForm reg) { registrationController.registerGivenNameValidate(reg); return reg; } @RequestMapping(value = "/oauth/custom/register/validateEmail.json", method = RequestMethod.POST) public @ResponseBody OauthRegistrationForm validateEmail(HttpServletRequest request, @RequestBody OauthRegistrationForm reg) { registrationController.regEmailValidate(request, reg, true, false); return reg; } @RequestMapping(value = "/oauth/custom/register/validateEmailConfirm.json", method = RequestMethod.POST) public @ResponseBody OauthRegistrationForm validateEmailConfirm(@RequestBody OauthRegistrationForm reg) { registrationController.regEmailConfirmValidate(reg); return reg; } }