|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package org.gcube.smartgears.handlers.application.request;
|
|
|
|
|
|
|
|
|
|
import static org.gcube.common.authorization.client.Constants.authorizationService;
|
|
|
|
|
import static org.gcube.smartgears.Constants.oauth_secret;
|
|
|
|
|
import static org.gcube.smartgears.Constants.scope_header;
|
|
|
|
|
import static org.gcube.smartgears.Constants.token_header;
|
|
|
|
|
import static org.gcube.smartgears.handlers.application.request.RequestError.internal_server_error;
|
|
|
|
@ -26,11 +27,8 @@ import org.slf4j.LoggerFactory;
|
|
|
|
|
public class RequestContextRetriever extends RequestHandler {
|
|
|
|
|
|
|
|
|
|
private static Logger log = LoggerFactory.getLogger(RequestContextRetriever.class);
|
|
|
|
|
|
|
|
|
|
private static final String BEARER_AUTH_PREFIX ="Bearer";
|
|
|
|
|
private static final String BASIC_AUTH_PREFIX ="Basic";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getName() {
|
|
|
|
|
return Constants.request_context_retriever;
|
|
|
|
@ -40,27 +38,25 @@ public class RequestContextRetriever extends RequestHandler {
|
|
|
|
|
public void handleRequest(RequestEvent call) {
|
|
|
|
|
String token = call.request().getParameter(token_header)==null? call.request().getHeader(token_header):call.request().getParameter(token_header);
|
|
|
|
|
String scope = call.request().getParameter(scope_header)==null? call.request().getHeader(scope_header):call.request().getParameter(scope_header);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (token==null && call.request().getHeader(Constants.authorization_header)!=null){
|
|
|
|
|
|
|
|
|
|
String authorization = call.request().getHeader(Constants.authorization_header);
|
|
|
|
|
|
|
|
|
|
if (authorization.contains(BASIC_AUTH_PREFIX)) {
|
|
|
|
|
String base64Credentials = authorization.substring(BASIC_AUTH_PREFIX.length()).trim();
|
|
|
|
|
String credentials = new String(DatatypeConverter.parseBase64Binary(base64Credentials));
|
|
|
|
|
// credentials = username:password
|
|
|
|
|
final String[] values = credentials.split(":",2);
|
|
|
|
|
token = values[1];
|
|
|
|
|
} else if (authorization.contains(BEARER_AUTH_PREFIX))
|
|
|
|
|
token = authorization.substring(BEARER_AUTH_PREFIX.length()).trim();
|
|
|
|
|
String basicAuthorization = call.request().getHeader(Constants.authorization_header);
|
|
|
|
|
String base64Credentials = basicAuthorization.substring("Basic".length()).trim();
|
|
|
|
|
String credentials = new String(DatatypeConverter.parseBase64Binary(base64Credentials));
|
|
|
|
|
// credentials = username:password
|
|
|
|
|
final String[] values = credentials.split(":",2);
|
|
|
|
|
token = values[1];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (token==null && scope==null && call.request().getParameter(oauth_secret)!=null)
|
|
|
|
|
token = call.request().getParameter(oauth_secret);
|
|
|
|
|
|
|
|
|
|
//Gives priority to the token
|
|
|
|
|
if (token!=null)
|
|
|
|
|
this.retreiveAndSetInfo(token, call);
|
|
|
|
|
else if (scope!=null)
|
|
|
|
|
ScopeProvider.instance.set(scope);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -70,7 +66,7 @@ public class RequestContextRetriever extends RequestHandler {
|
|
|
|
|
ScopeProvider.instance.reset();
|
|
|
|
|
log.debug("resetting all the Thread local for this call.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void retreiveAndSetInfo(String token, RequestEvent call){
|
|
|
|
|
log.info("retrieving context using token {} ", token);
|
|
|
|
|
AuthorizationEntry authEntry = null;
|
|
|
|
@ -83,7 +79,7 @@ public class RequestContextRetriever extends RequestHandler {
|
|
|
|
|
log.error("error contacting authorization service",e);
|
|
|
|
|
internal_server_error.fire("error contacting authorization service");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AuthorizationProvider.instance.set(new Caller(authEntry.getClientInfo(), authEntry.getQualifier()));
|
|
|
|
|
SecurityTokenProvider.instance.set(token);
|
|
|
|
|
ScopeProvider.instance.set(authEntry.getContext());
|
|
|
|
|