package org.gcube.common.authorization.client.proxy; import static org.gcube.common.clients.exceptions.FaultDSL.again; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import javax.xml.bind.JAXBContext; import org.gcube.common.authorization.client.Binder; import org.gcube.common.authorization.client.Constants; import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.clients.Call; import org.gcube.common.clients.delegates.ProxyDelegate; import org.gcube.common.scope.api.ScopeProvider; public class DefaultAuthorizationProxy implements AuthorizationProxy { private final ProxyDelegate delegate; public DefaultAuthorizationProxy(ProxyDelegate config){ this.delegate = config; } @Override public String generate(final String userName, final String role) { Call call = new Call() { @Override public String call(String endpoint) throws Exception { URL url = new URL(endpoint+"/generate/"+userName+"/"+role); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty(Constants.SCOPE_HEADER_ENTRY, ScopeProvider.instance.get()); BufferedReader reader = new BufferedReader(new InputStreamReader((InputStream)connection.getContent())); StringBuilder result = new StringBuilder(); String line; while((line = reader.readLine()) != null) result.append(line); return result.toString(); } }; try { return delegate.make(call); } catch (Exception e) { throw again(e).asServiceException(); } } @Override public AuthorizationEntry get(final String token) { Call call = new Call() { @Override public AuthorizationEntry call(String endpoint) throws Exception { URL url = new URL(endpoint+"/retrieve/"+token); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); if (connection.getContentLengthLong()<=0) return null; return (AuthorizationEntry)Binder.getContext().createUnmarshaller().unmarshal((InputStream)connection.getContent()); } }; try { return delegate.make(call); } catch (Exception e) { throw again(e).asServiceException(); } } }