Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions src/main/java/com/ekotrope/maven/CodeArtifactTokenManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.ekotrope.maven;

import com.amazonaws.services.codeartifact.AWSCodeArtifact;
import com.amazonaws.services.codeartifact.AWSCodeArtifactClientBuilder;
import com.amazonaws.services.codeartifact.model.GetAuthorizationTokenRequest;

import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Random;

public class CodeArtifactTokenManager {
private static CodeArtifactTokenManager instance;
private String cachedToken = "";

private CodeArtifactTokenManager() {
// Private constructor to prevent instantiation from outside the class.
}

public static synchronized CodeArtifactTokenManager getInstance() {
if (instance == null) {
instance = new CodeArtifactTokenManager();
}
return instance;
}

public synchronized String getToken(String domain, String owner)
{
if (cachedToken.isEmpty()) {
setUpCodeArtifactToken(domain, owner);
}
return cachedToken;
}

private void setUpCodeArtifactToken(String domain, String owner)
{
AWSCodeArtifact codeartifact = AWSCodeArtifactClientBuilder.defaultClient();

cachedToken = codeartifact.getAuthorizationToken(new GetAuthorizationTokenRequest()
.withDomain(domain)
.withDomainOwner(owner)
.withDurationSeconds(Duration.of(8, ChronoUnit.HOURS).getSeconds())
).getAuthorizationToken();
}
}
17 changes: 5 additions & 12 deletions src/main/java/com/ekotrope/maven/CodeArtifactWagon.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public class CodeArtifactWagon extends HttpWagon
// "/" is not an acceptable character in either the domain or repository name, and owner is strictly numeric, so it's a safe delimiter
private static final Pattern URL_FORMAT = Pattern.compile("codeartifact:(?<domain>.*)/(?<owner>.*)/(?<repositoryName>.*)");



@Override
public void connect(Repository repository, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider ) throws AuthenticationException, ConnectionException
{
Expand All @@ -43,11 +45,13 @@ public void connect(Repository repository, AuthenticationInfo authenticationInfo
String owner = urlPartsMatcher.group("owner");
String repositoryName = urlPartsMatcher.group("repositoryName");


repository.setUrl(getCodeArtifactEndpoint(domain, owner, repositoryName));

authenticationInfo = new AuthenticationInfo();
authenticationInfo.setUserName("aws");
authenticationInfo.setPassword(getCodeArtifactToken(domain, owner));
authenticationInfo.setPassword(CodeArtifactTokenManager.getInstance().getToken(domain, owner));
//System.out.println("token used: " + CodeArtifactTokenManager.getInstance().getToken(domain, owner));
}
else
{
Expand All @@ -58,17 +62,6 @@ public void connect(Repository repository, AuthenticationInfo authenticationInfo
super.connect(repository, authenticationInfo, proxyInfoProvider);
}

private String getCodeArtifactToken(String domain, String owner)
{
AWSCodeArtifact codeartifact = AWSCodeArtifactClientBuilder.defaultClient();

return codeartifact.getAuthorizationToken(new GetAuthorizationTokenRequest()
.withDomain(domain)
.withDomainOwner(owner)
.withDurationSeconds(Duration.of(8, HOURS).getSeconds())
).getAuthorizationToken();
}

private String getCodeArtifactEndpoint(String domain, String owner, String repositoryName)
{
AWSCodeArtifact codeartifact = AWSCodeArtifactClientBuilder.defaultClient();
Expand Down