Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.venafi.vcert.sdk.connectors.cloud.domain.Project;
import com.venafi.vcert.sdk.connectors.cloud.domain.ProjectZone;
import com.venafi.vcert.sdk.connectors.cloud.domain.Projects;
import com.venafi.vcert.sdk.connectors.cloud.domain.TagProjectZone;
import com.venafi.vcert.sdk.connectors.cloud.domain.UserDetails;
import com.venafi.vcert.sdk.utils.FeignUtils;

Expand All @@ -44,6 +45,10 @@ public interface Cloud {
@RequestLine("GET /devopsprojects/{projectId}?zoneDetails=true")
Project projectById(@Param("projectId") String projectId, @Param("apiKey") String apiKey);

@Headers("tppl-api-key: {apiKey}")
@RequestLine("GET /zones/tag/{tag}")
TagProjectZone zoneByTag(@Param("tag") String tag, @Param("apiKey") String apiKey);

@Headers("tppl-api-key: {apiKey}")
@RequestLine("GET /certificateissuingtemplates/{certificateIssuingTemplateId}")
CertificateIssuingTemplate certificateIssuingTemplateById(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@
import com.venafi.vcert.sdk.connectors.Connector;
import com.venafi.vcert.sdk.connectors.Policy;
import com.venafi.vcert.sdk.connectors.ZoneConfiguration;
import com.venafi.vcert.sdk.connectors.cloud.domain.CertificateIssuingTemplate;
import com.venafi.vcert.sdk.connectors.cloud.domain.Project;
import com.venafi.vcert.sdk.connectors.cloud.domain.ProjectZone;
import com.venafi.vcert.sdk.connectors.cloud.domain.Projects;
import com.venafi.vcert.sdk.connectors.cloud.domain.TagProjectZone;
import com.venafi.vcert.sdk.connectors.cloud.domain.UserDetails;
import com.venafi.vcert.sdk.endpoint.Authentication;
import com.venafi.vcert.sdk.endpoint.ConnectorType;
Expand Down Expand Up @@ -105,32 +107,34 @@ public void authenticate(Authentication auth) throws VCertException {

@Override
public ZoneConfiguration readZoneConfiguration(String zone) throws VCertException {
ProjectZone projectZone = null;
String[] zoneIdentifiers = parseZoneIdentifiers(zone);

Projects projects = cloud.projects(auth.apiKey());
if (projects.projects().isEmpty()) {
throw new VCertException("No projects present.");
}
CertificateIssuingTemplate cit = null;
String zoneId = null;

if (zoneIdentifiers[0] != null) {
// Find zone by ID
String zoneId = zoneIdentifiers[0];

for (Project project : projects.projects()) {
for (ProjectZone projZone : project.zones()) {
if (zoneId.equals(projZone.id())) {
projectZone = projZone;
break;
}
}
// Find zone by tag
String zoneTag = zoneIdentifiers[0];
TagProjectZone tpz = cloud.zoneByTag(zone, auth.apiKey());
if (tpz == null) {
throw new VCertException(format("No zone with Id '%s'.", zoneTag));
}

if (projectZone == null) {
throw new VCertException(format("No zone with ID '%s'.", zoneId));
zoneId = tpz.id();
cit = cloud.certificateIssuingTemplateById(tpz.certificateIssuingTemplateId(), auth.apiKey());

if (cit == null){
throw new VCertException(format("Certificate issue template not found. Id provided = [%s] ",
tpz.certificateIssuingTemplateId()));
}

} else {
// Find zone by project name and zone name
ProjectZone projectZone = null;
Projects projects = cloud.projects(auth.apiKey());
if (projects.projects().isEmpty()) {
throw new VCertException("No projects present.");
}

String projectName = zoneIdentifiers[1];
String zoneName = zoneIdentifiers[2];

Expand All @@ -149,15 +153,18 @@ public ZoneConfiguration readZoneConfiguration(String zone) throws VCertExceptio
throw new VCertException(
format("No zone with name '%s' in '%s' project.", zoneName, projectName));
}
}

if (projectZone.cit() == null) {
throw new VCertException(format("No certificate issuing template ID for '%s' zone.", zone));
zoneId = projectZone.id();
cit = projectZone.cit();

if (cit == null) {
throw new VCertException(format("No certificate issuing template ID for '%s' zone.", zone));
}
}

ZoneConfiguration zoneConfig = projectZone.cit().toZoneConfig();
zoneConfig.policy(projectZone.cit().toPolicy());
zoneConfig.zoneId(projectZone.id());
ZoneConfiguration zoneConfig = cit.toZoneConfig();
zoneConfig.policy(cit.toPolicy());
zoneConfig.zoneId(zoneId);

return zoneConfig;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.venafi.vcert.sdk.connectors.cloud.domain;

import java.time.OffsetDateTime;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TagProjectZone {
private String id;
private String companyId;
private String devopsProjectId;
private String name;
private String certificateIssuingTemplateId;
private OffsetDateTime creationDate;
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ void generateRequest() throws VCertException, IOException {
}

@Test
void requestCertificate() throws VCertException, SocketException, UnknownHostException {
void requestCertificate() throws VCertException, UnknownHostException {
String zoneName = System.getenv("CLOUDZONE");
ZoneConfiguration zoneConfiguration = classUnderTest.readZoneConfiguration(zoneName);
CertificateRequest certificateRequest = new CertificateRequest()
Expand All @@ -102,7 +102,7 @@ void requestCertificate() throws VCertException, SocketException, UnknownHostExc
}

@Test
void retrieveCertificate() throws VCertException, SocketException, UnknownHostException {
void retrieveCertificate() throws VCertException, UnknownHostException {
String zoneName = System.getenv("CLOUDZONE");
ZoneConfiguration zoneConfiguration = classUnderTest.readZoneConfiguration(zoneName);
CertificateRequest certificateRequest = new CertificateRequest()
Expand Down Expand Up @@ -134,8 +134,8 @@ void revokeCertificate() throws VCertException {
}

@Test
void renewCertificate() throws VCertException, UnknownHostException, SocketException,
CertificateException, NoSuchAlgorithmException {
void renewCertificate() throws VCertException, UnknownHostException,
CertificateException {
String zoneName = System.getenv("CLOUDZONE");
String commonName = TestUtils.randomCN();
ZoneConfiguration zoneConfiguration = classUnderTest.readZoneConfiguration(zoneName);
Expand Down