Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit bec1974

Browse files
authored
Feature/acceptance tests tpp (#24)
1 parent d5aba64 commit bec1974

14 files changed

Lines changed: 371 additions & 96 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ To run the acceptance tests the following environment variables must be set:
8080
| VENAFI_CLOUD_URL | Only for cloud connector tests |
8181
| VENAFI_ZONE | Only for cloud connector tests |
8282

83+
Acceptance test are executed with:
84+
```
85+
mvn "-Dtest=*AT" test
86+
```
87+
88+
8389
## Contributing to VCert
8490

8591
1. Fork it to your account (https://github.com/Venafi/vcert-java/fork)

src/main/java/com/venafi/vcert/sdk/VCertClient.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import com.venafi.vcert.sdk.connectors.tpp.ZoneConfiguration;
1212
import com.venafi.vcert.sdk.endpoint.Authentication;
1313
import com.venafi.vcert.sdk.endpoint.ConnectorType;
14-
import com.venafi.vcert.sdk.utils.Is;
1514
import feign.FeignException;
1615

1716
import java.security.Security;
1817

18+
import static org.apache.commons.lang3.StringUtils.isBlank;
19+
import static org.apache.commons.lang3.StringUtils.isNotBlank;
20+
1921
public class VCertClient implements Connector {
2022

2123
private Config config;
@@ -26,14 +28,14 @@ public VCertClient(Config config) throws VCertException {
2628
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
2729
switch (config.connectorType()) {
2830
case TPP:
29-
if (Is.blank(config.baseUrl()))
31+
if (isBlank(config.baseUrl()))
3032
throw new VCertException("TPP client requires a base url");
3133

3234
connector = new TppConnector(Tpp.connect(config.baseUrl()));
3335
break;
3436

3537
case CLOUD:
36-
connector = new CloudConnector(Cloud.connect(!Is.blank(config.baseUrl())
38+
connector = new CloudConnector(Cloud.connect(isNotBlank(config.baseUrl())
3739
? config.baseUrl() : "https://api.venafi.cloud"));
3840
break;
3941
default:

src/main/java/com/venafi/vcert/sdk/certificate/CertificateRequest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import com.google.common.annotations.VisibleForTesting;
44
import com.venafi.vcert.sdk.SignatureAlgorithm;
55
import com.venafi.vcert.sdk.VCertException;
6-
import com.venafi.vcert.sdk.utils.Is;
7-
import lombok.Builder;
86
import lombok.Data;
97
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
108
import org.bouncycastle.asn1.eac.ECDSAPublicKey;
@@ -31,6 +29,7 @@
3129
import static java.lang.String.format;
3230
import static java.time.temporal.ChronoUnit.MINUTES;
3331
import static java.util.Collections.emptyList;
32+
import static org.apache.commons.lang3.StringUtils.isBlank;
3433

3534
@Data
3635
public class CertificateRequest {
@@ -165,8 +164,8 @@ private static void addAll(X500NameBuilder builder, ASN1ObjectIdentifier identif
165164
private Collection<AttributeTypeAndValue> extraNames;
166165

167166
public X500Principal toX500Principal() throws VCertException {
168-
if(Is.blank(commonName)) {
169-
throw new VCertException("common nae must not be null or emtpy");
167+
if(isBlank(commonName)) {
168+
throw new VCertException("common name must not be null or emtpy");
170169
}
171170
X500NameBuilder x500NameBuilder = new X500NameBuilder();
172171
x500NameBuilder.addRDN(BCStyle.CN, commonName);

src/main/java/com/venafi/vcert/sdk/certificate/RevocationRequest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
import lombok.Data;
44

5+
import java.util.Objects;
6+
57
@Data
68
public class RevocationRequest {
79
private String certificateDN;
810
private String thumbprint;
911
private String reason;
1012
private String comments;
1113
private boolean disable;
14+
15+
public String reason(){
16+
return Objects.nonNull(reason)? reason : "";
17+
}
1218
}

src/main/java/com/venafi/vcert/sdk/connectors/ServerPolicy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public Policy toPolicy() {
113113

114114
if(keyPair.keyAlgorithm().locked()) {
115115
KeyType keyType = KeyType.from(keyPair.keyAlgorithm().value());
116-
AllowedKeyConfiguration key = new AllowedKeyConfiguration().keyType(keyType).keySizes(Collections.emptyList());
116+
AllowedKeyConfiguration key = new AllowedKeyConfiguration().keyType(keyType).keySizes(new ArrayList<>());
117117
if(KeyType.RSA.equals(keyType)) {
118118
if(keyPair.keySize().locked()) {
119119
for(Integer keySize : KeyType.allSupportedKeySizes()) {

src/main/java/com/venafi/vcert/sdk/connectors/cloud/CloudConnector.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.venafi.vcert.sdk.connectors.tpp.ZoneConfiguration;
1111
import com.venafi.vcert.sdk.endpoint.Authentication;
1212
import com.venafi.vcert.sdk.endpoint.ConnectorType;
13-
import com.venafi.vcert.sdk.utils.Is;
1413
import feign.Response;
1514
import lombok.Data;
1615
import lombok.Getter;
@@ -112,7 +111,7 @@ public CertificateRequest generateRequest(ZoneConfiguration config, CertificateR
112111

113112
@Override
114113
public String requestCertificate(CertificateRequest request, String zone) throws VCertException {
115-
if (Is.blank(zone)) {
114+
if (isBlank(zone)) {
116115
zone = this.zone;
117116
}
118117
if (CsrOriginOption.ServiceGeneratedCSR == request.csrOrigin()) {
@@ -257,7 +256,7 @@ public String renewCertificate(RenewalRequest request) throws VCertException {
257256

258257
String certificateRequestId = null;
259258

260-
if (!Is.blank(request.thumbprint())) {
259+
if (isNotBlank(request.thumbprint())) {
261260
Cloud.CertificateSearchResponse result = this.searchCertificatesByFingerprint(request.thumbprint());
262261
Set<String> requestIds = result.certificates()
263262
.stream()
@@ -276,7 +275,7 @@ public String renewCertificate(RenewalRequest request) throws VCertException {
276275

277276
certificateRequestId = requestIds.iterator().next();
278277

279-
} else if (!Is.blank(request.certificateDN())) {
278+
} else if (isNotBlank(request.certificateDN())) {
280279
certificateRequestId = request.certificateDN();
281280
} else {
282281
throw new VCertException("failed to create renewal request: CertificateDN or Thumbprint required");
@@ -294,7 +293,7 @@ public String renewCertificate(RenewalRequest request) throws VCertException {
294293
if (!managedCertificate.latestCertificateRequestId().equals(certificateRequestId)) {
295294
final StringBuilder errorStr = new StringBuilder();
296295
errorStr.append("Certificate under requestId %s ");
297-
errorStr.append(!Is.blank(request.thumbprint())? String.format("with thumbprint %s ", request.thumbprint()):"");
296+
errorStr.append(isNotBlank(request.thumbprint())? String.format("with thumbprint %s ", request.thumbprint()):"");
298297
errorStr.append("is not the latest under ManagedCertificateId %s. The latest request is %s. ");
299298
errorStr.append("This error may happen when revoked certificate is requested to be renewed.");
300299

src/main/java/com/venafi/vcert/sdk/connectors/tpp/Tpp.java

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.venafi.vcert.sdk.connectors.tpp;
22

33

4+
import com.google.gson.annotations.SerializedName;
45
import com.venafi.vcert.sdk.certificate.ImportRequest;
56
import com.venafi.vcert.sdk.certificate.ImportResponse;
67
import com.venafi.vcert.sdk.utils.FeignUtils;
7-
import feign.Headers;
8-
import feign.Param;
9-
import feign.RequestLine;
10-
import feign.Response;
8+
import feign.*;
119
import lombok.Data;
1210

1311
import java.util.List;
12+
import java.util.Map;
1413

1514

1615
public interface Tpp {
@@ -31,33 +30,33 @@ public interface Tpp {
3130
"Content-Type: application/json",
3231
"x-venafi-api-key: {apiKey}"
3332
})
34-
String requestCertificate(TppConnector.CertificateRequestsPayload payload, @Param("apiKey") String apiKey);
33+
CertificateRequestResponse requestCertificate(TppConnector.CertificateRequestsPayload payload, @Param("apiKey") String apiKey);
3534

36-
@RequestLine("GET certificates/?{search}")
35+
@RequestLine("GET certificates/")
3736
@Headers("x-venafi-api-key: {apiKey}")
38-
Tpp.CertificateSearchResponse searchCertificates(@Param("search") String searchRequest, @Param("apiKey") String apiKey);
37+
Tpp.CertificateSearchResponse searchCertificates(@QueryMap Map<String, String> query, @Param("apiKey") String apiKey);
3938

4039
@RequestLine("POST certificates/retrieve")
4140
@Headers({
4241
"Content-Type: application/json",
4342
"x-venafi-api-key: {apiKey}"
4443
})
45-
TppConnector.CertificateRetrieveResponse certificateRetrieve(TppConnector.CertificateRetrieveRequest certificateRetrieveRequest, @Param("apiKey") String apiKey);
44+
CertificateRetrieveResponse certificateRetrieve(TppConnector.CertificateRetrieveRequest certificateRetrieveRequest, @Param("apiKey") String apiKey);
4645

4746
@RequestLine("POST certificates/revoke")
4847
@Headers({
4948
"Content-Type: application/json",
5049
"x-venafi-api-key: {apiKey}"
5150
})
52-
TppConnector.CertificateRevokeResponse revokeCertificate(TppConnector.CertificateRevokeRequest request, @Param("apiKey") String apiKey);
51+
Tpp.CertificateRevokeResponse revokeCertificate(TppConnector.CertificateRevokeRequest request, @Param("apiKey") String apiKey);
5352

5453

5554
@RequestLine("POST certificates/renew")
5655
@Headers({
5756
"Content-Type: application/json",
5857
"x-venafi-api-key: {apiKey}"
5958
})
60-
TppConnector.CertificateRenewalResponse renewCertificate(TppConnector.CertificateRenewalRequest request, @Param("apiKey") String apiKey);
59+
Tpp.CertificateRenewalResponse renewCertificate(TppConnector.CertificateRenewalRequest request, @Param("apiKey") String apiKey);
6160

6261

6362
@RequestLine("POST certificates/import")
@@ -83,11 +82,37 @@ class CertificateSearchResponse {
8382

8483
@Data
8584
class Certificate {
86-
private String id;
87-
private String managedCertificateId;
88-
private String certificateRequestId;
89-
private List<String> subjectCN;
85+
86+
@SerializedName("DN") private String certificateRequestId;
87+
}
88+
89+
@Data
90+
class CertificateRequestResponse {
91+
@SerializedName("CertificateDN")
92+
private String certificateDN;
93+
@SerializedName("Guid")
94+
private String guid;
9095
}
9196

97+
@Data
98+
class CertificateRetrieveResponse {
99+
private String certificateData;
100+
private String format;
101+
private String filename;
102+
private String status;
103+
private int stage;
104+
}
92105

106+
@Data
107+
class CertificateRenewalResponse {
108+
private boolean success;
109+
private String error;
110+
}
111+
112+
@Data
113+
class CertificateRevokeResponse {
114+
private boolean requested;
115+
private boolean success;
116+
private String error;
117+
}
93118
}

0 commit comments

Comments
 (0)