Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit da73f776ae5a373259908267ddc69a348a958abf
Author: Mikolaj Izdebski <mizdebsk(a)redhat.com>
Date: Fri Mar 21 15:36:22 2014 +0100
[java] Add authentication
---------------------------------------------------------------
.../copr/client/impl/BuildCommand.java | 6 ++++
.../fedoraproject/copr/client/impl/RpcCommand.java | 25 ++++++++++++++++++++
.../fedoraproject/copr/client/impl/BuildTest.java | 12 +++++++++
.../fedoraproject/copr/client/impl/RpcTest.java | 7 ++++-
4 files changed, 49 insertions(+), 1 deletions(-)
diff --git
a/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/BuildCommand.java
b/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/BuildCommand.java
index 60fd8ff..5e1c7e7 100644
--- a/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/BuildCommand.java
+++ b/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/BuildCommand.java
@@ -37,6 +37,12 @@ public class BuildCommand
}
@Override
+ protected boolean requiresAuthentication()
+ {
+ return true;
+ }
+
+ @Override
protected String getCommandUrl()
{
return "/api/coprs/" + request.getUserName() + "/" +
request.getProjectName() + "/new_build/";
diff --git
a/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/RpcCommand.java
b/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/RpcCommand.java
index f75e208..2314a6a 100644
--- a/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/RpcCommand.java
+++ b/java/copr-impl/src/main/java/org/fedoraproject/copr/client/impl/RpcCommand.java
@@ -21,11 +21,14 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import javax.xml.bind.DatatypeConverter;
+
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
@@ -50,6 +53,11 @@ public abstract class RpcCommand<T>
protected abstract T parseResponse( JsonObject response );
+ protected boolean requiresAuthentication()
+ {
+ return false;
+ }
+
public T execute( DefaultCoprSession session )
throws CoprException
{
@@ -80,6 +88,23 @@ public abstract class RpcCommand<T>
post.setEntity( new UrlEncodedFormEntity( nameValuePairs ) );
}
+ if ( requiresAuthentication() )
+ {
+ String login = session.getConfiguration().getLogin();
+ if ( login == null || login.isEmpty() )
+ throw new CoprException( "Authentification is required to
perform this command "
+ + "but no login was provided in configuration" );
+
+ String token = session.getConfiguration().getToken();
+ if ( token == null || token.isEmpty() )
+ throw new CoprException( "Authentification is required to
perform this command "
+ + "but no login was provided in configuration" );
+
+ String auth = login + ":" + token;
+ String encodedAuth = DatatypeConverter.printBase64Binary( auth.getBytes(
StandardCharsets.UTF_8 ) );
+ request.setHeader( "Authorization", "Basic " +
encodedAuth );
+ }
+
request.addHeader( "Accept", APPLICATION_JSON.getMimeType() );
HttpResponse response = client.execute( request );
diff --git
a/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/BuildTest.java
b/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/BuildTest.java
index 643dd02..1e97df9 100644
--- a/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/BuildTest.java
+++ b/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/BuildTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.fail;
import org.easymock.EasyMockRunner;
import org.fedoraproject.copr.client.BuildRequest;
import org.fedoraproject.copr.client.BuildResult;
+import org.fedoraproject.copr.client.CoprConfiguration;
import org.fedoraproject.copr.client.CoprException;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -32,6 +33,17 @@ import org.junit.runner.RunWith;
public class BuildTest
extends RpcTest
{
+ @Override
+ protected CoprConfiguration getConfiguration()
+ {
+ CoprConfiguration config = super.getConfiguration();
+
+ config.setLogin( "test-login" );
+ config.setToken( "p4s5w0rd" );
+
+ return config;
+ }
+
@Test
public void testBuild()
throws Exception
diff --git a/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/RpcTest.java
b/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/RpcTest.java
index 2cf5abd..2c4463f 100644
--- a/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/RpcTest.java
+++ b/java/copr-impl/src/test/java/org/fedoraproject/copr/client/impl/RpcTest.java
@@ -46,6 +46,11 @@ public abstract class RpcTest
return mock;
}
+ protected CoprConfiguration getConfiguration()
+ {
+ return new CoprConfiguration();
+ }
+
@Before
public void setUp()
throws Exception
@@ -57,7 +62,7 @@ public abstract class RpcTest
InetSocketAddress address = server.getServiceAddress();
url = "http://" + address.getHostName() + ":" +
address.getPort();
- CoprConfiguration configuration = new CoprConfiguration();
+ CoprConfiguration configuration = getConfiguration();
configuration.setUrl( url );
CoprService copr = new DefaultCoprService();