Skip to content

Commit

Permalink
Merge pull request #16 from gabrieletondi/master
Browse files Browse the repository at this point in the history
Handling HTTP basic auth for brokers
  • Loading branch information
warmuuh authored Apr 25, 2017
2 parents 5838fec + 21eaf68 commit 122f5ba
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 7 deletions.
12 changes: 12 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,15 @@ or downloading pacts, use the configuration sections as below:
<password>password</password>
</configuration>
```

To provide credentials when using a pact broker with HTTP basic auth,
use the configuration sections as below:
```xml
<configuration>
<brokerUrl>https://yourbroker.pact.dius.com.au</brokerUrl>
<pacts>target/pacts-dependents</pacts>
<provider>provider</provider>
<username>user</username>
<password>password</password>
</configuration>
```
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected RepositoryProvider createRepositoryProvider(String url, String consume
Optional<CredentialsProvider> credentialProvider = getCredentialsProvider(username, password);
return new GitRepositoryProvider(url, getLog(), credentialProvider);
}
return new BrokerRepositoryProvider(url, consumerVersion, getLog());
return new BrokerRepositoryProvider(url, consumerVersion, getLog(), username, password);
}


Expand All @@ -40,4 +40,4 @@ private Optional<CredentialsProvider> getCredentialsProvider(Optional<String> us
.map(p -> new BasicGitCredentialsProvider().getCredentialProvider(u,p)));

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,34 @@
import java.util.Optional;
import java.util.Scanner;

import org.apache.commons.codec.binary.Base64;
import org.apache.maven.plugin.logging.Log;

import com.github.wrm.pact.domain.PactFile;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

import static org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString;

public class BrokerRepositoryProvider implements RepositoryProvider {

private final String url;
private final String consumerVersion;
private final Log log;

public BrokerRepositoryProvider(String url, String consumerVersion, Log log) {
private final Optional<String> username;
private final Optional<String> password;

public BrokerRepositoryProvider(String url,
String consumerVersion,
Log log,
Optional<String> username,
Optional<String> password) {
this.url = url;
this.consumerVersion = consumerVersion;
this.log = log;
this.username = username;
this.password = password;
}

@Override
Expand Down Expand Up @@ -68,6 +79,7 @@ public List<String> downloadPactLinks(String providerId, String tagName) throws
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoInput(true);
connection.setDoOutput(true);
addBasicAuthTo(connection);

List<String> links = new ArrayList<>();

Expand Down Expand Up @@ -103,6 +115,7 @@ private void uploadPact(PactFile pact) throws IOException {
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("charset", StandardCharsets.UTF_8.displayName());
addBasicAuthTo(connection);

byte[] content = Files.readAllBytes(Paths.get(pact.getFile().getAbsolutePath()));
connection.getOutputStream().write(content);
Expand All @@ -128,6 +141,7 @@ private void tagPactVersion(PactFile pact, String tagName) throws IOException {
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("charset", StandardCharsets.UTF_8.displayName());
addBasicAuthTo(connection);

if (connection.getResponseCode() > 201) {
try (Scanner scanner = new Scanner(connection.getErrorStream(), StandardCharsets.UTF_8.displayName())) {
Expand All @@ -144,6 +158,7 @@ private void downloadPactFromLink(File targetDirectory, String link) throws Malf
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoInput(true);
addBasicAuthTo(connection);

if (connection.getResponseCode() != 200) {
log.error("Downloading pact failed. Pact Broker answered with status: " + connection.getResponseCode()
Expand All @@ -170,6 +185,15 @@ private void downloadPactFromLink(File targetDirectory, String link) throws Malf
}
}

private void addBasicAuthTo(HttpURLConnection connection)
{
if (username.isPresent() && password.isPresent()) {
String userpass = username.get() + ":" + password.get();
String basicAuth = "Basic " + encodeBase64URLSafeString(userpass.getBytes());
connection.setRequestProperty ("Authorization", basicAuth);
}
}

private String buildUploadPath(PactFile pact) {
return url + "/pacts/provider/" + pact.getProvider() + "/consumer/" + pact.getConsumer() + "/version/"
+ consumerVersion;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.wrm.pact.repository;

import static java.util.Optional.empty;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

Expand Down Expand Up @@ -55,7 +56,7 @@ public void setup() throws Exception {
}
pact = PactFile.readPactFile(pactFile);
brokerRepositoryProvider = new BrokerRepositoryProvider("http://localhost:" + port, CONSUMER_VERSION,
new SystemStreamLog());
new SystemStreamLog(), empty(), empty());
}

@Rule
Expand All @@ -76,14 +77,14 @@ public void uploadAndTagPactInBroker() throws Exception {
@Test
@PactVerification("no-pacts-present")
public void uploadPactToBroker() throws Exception {
brokerRepositoryProvider.uploadPacts(Collections.singletonList(pact), Optional.empty());
brokerRepositoryProvider.uploadPacts(Collections.singletonList(pact), empty());
}


@Test
@PactVerification("pact-already-uploaded")
public void uploadExistingPactToBroker() throws Exception {
brokerRepositoryProvider.uploadPacts(Collections.singletonList(pact), Optional.empty());
brokerRepositoryProvider.uploadPacts(Collections.singletonList(pact), empty());
}

@Test
Expand Down

0 comments on commit 122f5ba

Please sign in to comment.