diff --git a/.github/workflows/keyfactor-bootstrap-workflow.yml b/.github/workflows/keyfactor-bootstrap-workflow.yml
index 64919a4..5726e90 100644
--- a/.github/workflows/keyfactor-bootstrap-workflow.yml
+++ b/.github/workflows/keyfactor-bootstrap-workflow.yml
@@ -11,10 +11,13 @@ on:
jobs:
call-starter-workflow:
- uses: keyfactor/actions/.github/workflows/starter.yml@v3
+ uses: keyfactor/actions/.github/workflows/starter.yml@v4
secrets:
token: ${{ secrets.V2BUILDTOKEN}}
- APPROVE_README_PUSH: ${{ secrets.APPROVE_README_PUSH}}
gpg_key: ${{ secrets.KF_GPG_PRIVATE_KEY }}
gpg_pass: ${{ secrets.KF_GPG_PASSPHRASE }}
scan_token: ${{ secrets.SAST_TOKEN }}
+ entra_username: ${{ secrets.DOCTOOL_ENTRA_USERNAME }}
+ entra_password: ${{ secrets.DOCTOOL_ENTRA_PASSWD }}
+ command_client_id: ${{ secrets.DOCTOOL_COMMAND_CLIENT_ID }}
+ command_client_secret: ${{ secrets.DOCTOOL_COMMAND_CLIENT_SECRET }}
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 9ec56f6..e66fdc8 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -9,21 +9,25 @@ jobs:
# Checkout code
# https://github.com/actions/checkout
- name: Checkout code
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
# Setup dotnet 8.0
# https://github.com/actions/setup-dotnet
- - uses: actions/setup-dotnet@v3
+ - uses: actions/setup-dotnet@v5
with:
dotnet-version: '8.x'
# Setup nuget
- - name: Setup build environment
+ - name: Add Keyfactor NuGet Source
run: |
dotnet nuget add source https://nuget.pkg.github.com/Keyfactor/index.json -n github -u ${{ github.actor }} -p ${{ secrets.V2BUILDTOKEN }} --store-password-in-clear-text
- dotnet restore
+
+ - name: Restore dependencies
+ run: dotnet restore
+
+ - name: Build solution
+ run: dotnet build --no-restore --configuration Release
# Build and test dotnet project
- name: Build and Test
- run: dotnet test
-
+ run: dotnet test --no-build --configuration Release
diff --git a/.gitignore b/.gitignore
index 0d19ba0..b108f3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -350,3 +350,5 @@ healthchecksdb
*/C:
logs
+
+.env
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57cdc20..ddd030b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# v1.2.1
+## Chores
+- Add note about OTE API keys not being supported with this integration due to shopper ID resolution requirements.
+
# v1.2.0
- Add special condition to handle status 409 when downloading certificates from GoDaddy. 409 indicates that the certificate state does not allow download.
diff --git a/GoDaddy.Tests/FakeCaConfigProvider.cs b/GoDaddy.Tests/Fakes/FakeCaConfigProvider.cs
similarity index 99%
rename from GoDaddy.Tests/FakeCaConfigProvider.cs
rename to GoDaddy.Tests/Fakes/FakeCaConfigProvider.cs
index 9330922..21de529 100644
--- a/GoDaddy.Tests/FakeCaConfigProvider.cs
+++ b/GoDaddy.Tests/Fakes/FakeCaConfigProvider.cs
@@ -1,4 +1,4 @@
-// Copyright 2024 Keyfactor
+// Copyright 2026 Keyfactor
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/GoDaddy.Tests/FakeCertificateDataReader.cs b/GoDaddy.Tests/Fakes/FakeCertificateDataReader.cs
similarity index 98%
rename from GoDaddy.Tests/FakeCertificateDataReader.cs
rename to GoDaddy.Tests/Fakes/FakeCertificateDataReader.cs
index 47213f1..b3b5a99 100644
--- a/GoDaddy.Tests/FakeCertificateDataReader.cs
+++ b/GoDaddy.Tests/Fakes/FakeCertificateDataReader.cs
@@ -1,4 +1,4 @@
-// Copyright 2024 Keyfactor
+// Copyright 2026 Keyfactor
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/GoDaddy.Tests/FakeGoDaddyClient.cs b/GoDaddy.Tests/Fakes/FakeGoDaddyClient.cs
similarity index 99%
rename from GoDaddy.Tests/FakeGoDaddyClient.cs
rename to GoDaddy.Tests/Fakes/FakeGoDaddyClient.cs
index e8a3a4f..d074b79 100644
--- a/GoDaddy.Tests/FakeGoDaddyClient.cs
+++ b/GoDaddy.Tests/Fakes/FakeGoDaddyClient.cs
@@ -1,4 +1,4 @@
-// Copyright 2024 Keyfactor
+// Copyright 2026 Keyfactor
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/GoDaddy.Tests/GoDaddy.Tests.csproj b/GoDaddy.Tests/GoDaddy.Tests.csproj
index 358f259..f852f75 100644
--- a/GoDaddy.Tests/GoDaddy.Tests.csproj
+++ b/GoDaddy.Tests/GoDaddy.Tests.csproj
@@ -21,12 +21,12 @@
-
-
+
+
+
+
+
+
-
-
-
-
diff --git a/GoDaddy.Tests/GoDaddyCAPlugin.cs b/GoDaddy.Tests/GoDaddyCAPluginTests.cs
similarity index 88%
rename from GoDaddy.Tests/GoDaddyCAPlugin.cs
rename to GoDaddy.Tests/GoDaddyCAPluginTests.cs
index 66c30b7..1b3879e 100644
--- a/GoDaddy.Tests/GoDaddyCAPlugin.cs
+++ b/GoDaddy.Tests/GoDaddyCAPluginTests.cs
@@ -1,4 +1,4 @@
-// Copyright 2024 Keyfactor
+// Copyright 2026 Keyfactor
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -28,6 +28,15 @@ namespace Keyfactor.Extensions.CAPlugin.GoDaddyTests;
public class GoDaddyCAPluginTests
{
+ private static readonly DateTimeOffset NotBefore = DateTimeOffset.Now.AddDays(-100);
+ private static readonly DateTimeOffset ReissueNotAfter = DateTimeOffset.Now.AddDays(365);
+ private static readonly DateTimeOffset RenewalNotAfter = DateTimeOffset.Now.AddDays(59);
+
+ private const string TestSubject = "CN=Test Subject";
+ private static readonly string TestCsr = GenerateCSR(TestSubject);
+ private static readonly X509Certificate2 FakeReissueCertificate = FakeGoDaddyClient.GenerateSelfSignedCertificate(RSA.Create(2048), "CN=Test Cert", NotBefore, ReissueNotAfter);
+ private static readonly X509Certificate2 FakeRenewalCertificate = FakeGoDaddyClient.GenerateSelfSignedCertificate(RSA.Create(2048), "CN=Test Cert", NotBefore, RenewalNotAfter);
+
ILogger _logger { get; set;}
public GoDaddyCAPluginTests()
@@ -253,7 +262,7 @@ public void GoDaddyCAPlugin_ValidateProductInfo_EV_InvalidParameters_ReturnFailu
[InlineData("UCC_DV_SSL")]
[InlineData("UCC_EV_SSL")]
[InlineData("UCC_OV_SSL")]
- public void GoDaddyCAPlugin_Enroll_ReturnSuccess(string productID)
+ public async Task GoDaddyCAPlugin_Enroll_ReturnSuccess(string productID)
{
// Arrange
FakeGoDaddyClient fakeClient = new FakeGoDaddyClient();
@@ -267,10 +276,6 @@ public void GoDaddyCAPlugin_Enroll_ReturnSuccess(string productID)
Client = fakeClient
};
plugin.Initialize(configProvider, certificateDataReader);
-
- // CSR
- string subject = "CN=Test Subject";
- string csrString = GenerateCSR(subject);
Dictionary sans = new();
@@ -307,10 +312,10 @@ public void GoDaddyCAPlugin_Enroll_ReturnSuccess(string productID)
EnrollmentType type = EnrollmentType.New;
// Act
- EnrollmentResult result = plugin.Enroll(csrString, subject, sans, productInfo, format, type).Result;
+ EnrollmentResult result = await plugin.Enroll(TestCsr, TestSubject, sans, productInfo, format, type);
// Assert
- Assert.Equal(result.Status, (int)EndEntityStatus.GENERATED);
+ Assert.Equal((int)EndEntityStatus.GENERATED, result.Status);
}
[Theory]
@@ -324,12 +329,13 @@ public void GoDaddyCAPlugin_Enroll_ReturnSuccess(string productID)
[InlineData("UCC_DV_SSL")]
[InlineData("UCC_EV_SSL")]
[InlineData("UCC_OV_SSL")]
- public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
+ public async Task GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
{
// Arrange
- DateTime enrollmentNotBefore = DateTime.UtcNow.AddDays(-5);
- DateTime enrollmentNotAfter = DateTime.UtcNow.AddDays(20);
- X509Certificate2 fakeCertificate = FakeGoDaddyClient.GenerateSelfSignedCertificate(RSA.Create(2048), "CN=Test Cert", enrollmentNotBefore, enrollmentNotAfter);
+
+ // Renewal is only available 60 days prior to expiration of the previous certificate and 30 days after the
+ // expiration of the previous certificate.
+
string fakeCaRequestId = Guid.NewGuid().ToString();
FakeGoDaddyClient fakeClient = new FakeGoDaddyClient()
@@ -339,7 +345,7 @@ public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
{ fakeCaRequestId, new AnyCAPluginCertificate
{
CARequestID = fakeCaRequestId,
- Certificate = fakeCertificate.ExportCertificatePem(),
+ Certificate = FakeRenewalCertificate.ExportCertificatePem(),
Status = 123,
ProductID = productID,
}
@@ -347,12 +353,6 @@ public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
}
};
- // Renewal is only available 60 days prior to expiration of the previous certificate and 30 days after the
- // expiration of the previous certificate.
-
- fakeClient.EnrollmentNotBefore = enrollmentNotBefore;
- fakeClient.EnrollmentNotAfter = enrollmentNotAfter;
-
BlockingCollection certificates = new BlockingCollection();
IAnyCAPluginConfigProvider configProvider = new FakeCaConfigProvider(new Config());
@@ -364,10 +364,6 @@ public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
};
plugin.Initialize(configProvider, certificateDataReader);
- // CSR
- string subject = "CN=Test Subject";
- string csrString = GenerateCSR(subject);
-
Dictionary sans = new();
EnrollmentProductInfo productInfo = new EnrollmentProductInfo
@@ -394,7 +390,7 @@ public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
{ EnrollmentConfigConstants.JobTitle, "Software Engineer" },
{ EnrollmentConfigConstants.RegistrationAgent, "Agent" },
{ EnrollmentConfigConstants.RegistrationNumber, "REG-12345" },
- { "PriorCertSN", fakeCertificate.SerialNumber }
+ { "PriorCertSN", FakeRenewalCertificate.SerialNumber }
}
};
@@ -404,12 +400,12 @@ public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
EnrollmentType type = EnrollmentType.Renew;
// Act
- EnrollmentResult result = plugin.Enroll(csrString, subject, sans, productInfo, format, type).Result;
+ EnrollmentResult result = await plugin.Enroll(TestCsr, TestSubject, sans, productInfo, format, type);
// Assert
- Assert.Equal(result.Status, (int)EndEntityStatus.GENERATED);
- Assert.Equal(result.StatusMessage, $"Certificate with ID {fakeCaRequestId} has been renewed");
- Assert.Equal(result.CARequestID, fakeCaRequestId);
+ Assert.Equal((int)EndEntityStatus.GENERATED, result.Status);
+ Assert.Equal($"Certificate with ID {fakeCaRequestId} has been renewed", result.StatusMessage);
+ Assert.Equal(fakeCaRequestId, result.CARequestID);
}
[Theory]
@@ -423,12 +419,12 @@ public void GoDaddyCAPlugin_Renew_ReturnSuccess(string productID)
[InlineData("UCC_DV_SSL")]
[InlineData("UCC_EV_SSL")]
[InlineData("UCC_OV_SSL")]
- public void GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
+ public async Task GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
{
// Arrange
- DateTime enrollmentNotBefore = DateTime.UtcNow.AddDays(-100);
- DateTime enrollmentNotAfter = DateTime.UtcNow.AddDays(365);
- X509Certificate2 fakeCertificate = FakeGoDaddyClient.GenerateSelfSignedCertificate(RSA.Create(2048), "CN=Test Cert", enrollmentNotBefore, enrollmentNotAfter);
+ // DateTime enrollmentNotBefore = DateTime.UtcNow.AddDays(-100);
+ // DateTime enrollmentNotAfter = DateTime.UtcNow.AddDays(365);
+ // X509Certificate2 fakeCertificate = FakeGoDaddyClient.GenerateSelfSignedCertificate(RSA.Create(2048), "CN=Test Cert", enrollmentNotBefore, enrollmentNotAfter);
string fakeCaRequestId = Guid.NewGuid().ToString();
FakeGoDaddyClient fakeClient = new FakeGoDaddyClient()
@@ -438,7 +434,7 @@ public void GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
{ fakeCaRequestId, new AnyCAPluginCertificate
{
CARequestID = fakeCaRequestId,
- Certificate = fakeCertificate.ExportCertificatePem(),
+ Certificate = FakeReissueCertificate.ExportCertificatePem(),
Status = 123,
ProductID = productID,
}
@@ -446,12 +442,6 @@ public void GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
}
};
- // Renewal is only available 60 days prior to expiration of the previous certificate and 30 days after the
- // expiration of the previous certificate.
-
- fakeClient.EnrollmentNotBefore = enrollmentNotBefore;
- fakeClient.EnrollmentNotAfter = enrollmentNotAfter;
-
BlockingCollection certificates = new BlockingCollection();
IAnyCAPluginConfigProvider configProvider = new FakeCaConfigProvider(new Config());
@@ -463,10 +453,6 @@ public void GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
};
plugin.Initialize(configProvider, certificateDataReader);
- // CSR
- string subject = "CN=Test Subject";
- string csrString = GenerateCSR(subject);
-
Dictionary sans = new();
EnrollmentProductInfo productInfo = new EnrollmentProductInfo
@@ -493,7 +479,7 @@ public void GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
{ EnrollmentConfigConstants.JobTitle, "Software Engineer" },
{ EnrollmentConfigConstants.RegistrationAgent, "Agent" },
{ EnrollmentConfigConstants.RegistrationNumber, "REG-12345" },
- { "PriorCertSN", fakeCertificate.SerialNumber }
+ { "PriorCertSN", FakeReissueCertificate.SerialNumber }
}
};
@@ -503,12 +489,12 @@ public void GoDaddyCAPlugin_Reissue_ReturnSuccess(string productID)
EnrollmentType type = EnrollmentType.Renew;
// Act
- EnrollmentResult result = plugin.Enroll(csrString, subject, sans, productInfo, format, type).Result;
+ EnrollmentResult result = await plugin.Enroll(TestCsr, TestSubject, sans, productInfo, format, type);
// Assert
- Assert.Equal(result.Status, (int)EndEntityStatus.GENERATED);
- Assert.Equal(result.StatusMessage, $"Certificate with ID {fakeCaRequestId} has been reissued");
- Assert.Equal(result.CARequestID, fakeCaRequestId);
+ Assert.Equal((int)EndEntityStatus.GENERATED, result.Status);
+ Assert.Equal($"Certificate with ID {fakeCaRequestId} has been reissued", result.StatusMessage);
+ Assert.Equal(fakeCaRequestId, result.CARequestID);
}
[IntegrationTestingFact]
diff --git a/GoDaddy.Tests/GoDaddyClient.cs b/GoDaddy.Tests/GoDaddyClientTests.cs
similarity index 93%
rename from GoDaddy.Tests/GoDaddyClient.cs
rename to GoDaddy.Tests/GoDaddyClientTests.cs
index 9b3d8a0..2e9fdd7 100644
--- a/GoDaddy.Tests/GoDaddyClient.cs
+++ b/GoDaddy.Tests/GoDaddyClientTests.cs
@@ -1,4 +1,4 @@
-// Copyright 2024 Keyfactor
+// Copyright 2026 Keyfactor
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -21,15 +21,15 @@
namespace Keyfactor.Extensions.CAPlugin.GoDaddyTests;
-public class ClientTests
+public class GoDaddyClientTests
{
ILogger _logger { get; set;}
- public ClientTests()
+ public GoDaddyClientTests()
{
ConfigureLogging();
- _logger = LogHandler.GetClassLogger();
+ _logger = LogHandler.GetClassLogger();
}
[IntegrationTestingFact]
diff --git a/GoDaddy.Tests/GoDaddyEnrollment.cs b/GoDaddy.Tests/GoDaddyEnrollmentTests.cs
similarity index 90%
rename from GoDaddy.Tests/GoDaddyEnrollment.cs
rename to GoDaddy.Tests/GoDaddyEnrollmentTests.cs
index d845674..483cc1c 100644
--- a/GoDaddy.Tests/GoDaddyEnrollment.cs
+++ b/GoDaddy.Tests/GoDaddyEnrollmentTests.cs
@@ -1,4 +1,4 @@
-// Copyright 2024 Keyfactor
+// Copyright 2026 Keyfactor
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -25,28 +25,26 @@
namespace Keyfactor.Extensions.CAPlugin.GoDaddyTests;
-public class EnrollmentAbstractionTests
+public class GoDaddyEnrollmentTests
{
+ private const string TestSubject = "CN=Test Subject";
+ private static string TestCsr = GenerateCSR(TestSubject);
ILogger _logger { get; set;}
- public EnrollmentAbstractionTests()
+ public GoDaddyEnrollmentTests()
{
ConfigureLogging();
- _logger = LogHandler.GetClassLogger();
+ _logger = LogHandler.GetClassLogger();
}
[Fact]
- public void EnrollmentStrategyFactory_Enrollment_ValidParameters_ReturnSuccess()
+ public async Task EnrollmentStrategyFactory_Enrollment_ValidParameters_ReturnSuccess()
{
- // Arrange
- string subject = "CN=Test Subject";
- string csrString = GenerateCSR(subject);
-
EnrollmentRequest fakeRequest = new EnrollmentRequest
{
ProductType = CertificateEnrollmentType.DV_SSL,
- CSR = csrString,
+ CSR = TestSubject,
EnrollmentType = EnrollmentType.New,
RootCAType = RootCAType.STARFIELD_SHA_2,
SubjectAlternativeNames = new string[] { "example.com", "www.example.com" },
@@ -86,14 +84,14 @@ public void EnrollmentStrategyFactory_Enrollment_ValidParameters_ReturnSuccess()
EnrollmentStrategyFactory factory = new EnrollmentStrategyFactory(fakeCertificateReader, fakeClient);
// Act
- IEnrollmentStrategy strategy = factory.GetStrategy(fakeRequest).Result;
+ IEnrollmentStrategy strategy = await factory.GetStrategy(fakeRequest);
// Assert
Assert.Equal("Enrollment", strategy.StrategyName);
}
[Fact]
- public void EnrollmentStrategyFactory_Renewal_ValidParameters_ReturnSuccess()
+ public async Task EnrollmentStrategyFactory_Renewal_ValidParameters_ReturnSuccess()
{
// Arrange
DateTime enrollmentNotBefore = DateTime.UtcNow.AddDays(-5);
@@ -117,13 +115,10 @@ public void EnrollmentStrategyFactory_Renewal_ValidParameters_ReturnSuccess()
};
ICertificateDataReader fakeCertificateReader = new FakeCertificateDataReader(fakeClient);
- string subject = "CN=Test Subject";
- string csrString = GenerateCSR(subject);
-
EnrollmentRequest fakeRequest = new EnrollmentRequest
{
ProductType = CertificateEnrollmentType.DV_SSL,
- CSR = csrString,
+ CSR = TestCsr,
EnrollmentType = EnrollmentType.RenewOrReissue,
RootCAType = RootCAType.STARFIELD_SHA_2,
SubjectAlternativeNames = new string[] { "example.com", "www.example.com" },
@@ -160,14 +155,14 @@ public void EnrollmentStrategyFactory_Renewal_ValidParameters_ReturnSuccess()
EnrollmentStrategyFactory factory = new EnrollmentStrategyFactory(fakeCertificateReader, fakeClient);
// Act
- IEnrollmentStrategy strategy = factory.GetStrategy(fakeRequest).Result;
+ IEnrollmentStrategy strategy = await factory.GetStrategy(fakeRequest);
// Assert
Assert.Equal("Renewal", strategy.StrategyName);
}
[Fact]
- public void EnrollmentStrategyFactory_Reissue_ValidParameters_ReturnSuccess()
+ public async Task EnrollmentStrategyFactory_Reissue_ValidParameters_ReturnSuccess()
{
// Arrange
DateTime enrollmentNotBefore = DateTime.UtcNow.AddDays(-100);
@@ -191,13 +186,10 @@ public void EnrollmentStrategyFactory_Reissue_ValidParameters_ReturnSuccess()
};
ICertificateDataReader fakeCertificateReader = new FakeCertificateDataReader(fakeClient);
- string subject = "CN=Test Subject";
- string csrString = GenerateCSR(subject);
-
EnrollmentRequest fakeRequest = new EnrollmentRequest
{
ProductType = CertificateEnrollmentType.DV_SSL,
- CSR = csrString,
+ CSR = TestCsr,
EnrollmentType = EnrollmentType.RenewOrReissue,
RootCAType = RootCAType.STARFIELD_SHA_2,
SubjectAlternativeNames = new string[] { "example.com", "www.example.com" },
@@ -234,7 +226,7 @@ public void EnrollmentStrategyFactory_Reissue_ValidParameters_ReturnSuccess()
EnrollmentStrategyFactory factory = new EnrollmentStrategyFactory(fakeCertificateReader, fakeClient);
// Act
- IEnrollmentStrategy strategy = factory.GetStrategy(fakeRequest).Result;
+ IEnrollmentStrategy strategy = await factory.GetStrategy(fakeRequest);
// Assert
Assert.Equal("Reissue", strategy.StrategyName);
@@ -312,10 +304,10 @@ public void EnrollmentBuilder_ValidParameters_ReturnSuccess()
Assert.Equal("Agent", request.RegistrationAgent);
Assert.Equal("REG-12345", request.RegistrationNumber);
- Assert.Equal(request.SubjectAlternativeNames.Length, 3);
- Assert.True(request.SubjectAlternativeNames.Contains("example.com"));
- Assert.True(request.SubjectAlternativeNames.Contains("www.example.com"));
- Assert.True(request.SubjectAlternativeNames.Contains("192.168.1.1"));
+ Assert.Equal(3, request.SubjectAlternativeNames.Length);
+ Assert.Contains("example.com", request.SubjectAlternativeNames);
+ Assert.Contains("www.example.com", request.SubjectAlternativeNames);
+ Assert.Contains("192.168.1.1", request.SubjectAlternativeNames);
}
static void ConfigureLogging()
diff --git a/GoDaddy/GoDaddyCAPluginConfig.cs b/GoDaddy/GoDaddyCAPluginConfig.cs
index 3e67916..d9fad11 100644
--- a/GoDaddy/GoDaddyCAPluginConfig.cs
+++ b/GoDaddy/GoDaddyCAPluginConfig.cs
@@ -80,7 +80,7 @@ public static Dictionary GetPluginAnnotations()
},
[ConfigConstants.BaseUrl] = new PropertyConfigInfo()
{
- Comments = "The Base URL for the GoDaddy API - Usually either https://api.godaddy.com or https://api.ote-godaddy.com",
+ Comments = "The Base URL for the GoDaddy API - Usually https://api.godaddy.com",
Hidden = false,
DefaultValue = "https://api.godaddy.com",
Type = "String"
diff --git a/README.md b/README.md
index 0e49f4f..147ce5a 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@ The GoDaddy AnyCA Gateway REST plugin is supported by Keyfactor for Keyfactor cu
1. **GoDaddy Account**
- To use the GoDaddy AnyCA Gateway REST plugin, a production GoDaddy account must be created and configured fully. To create a new account, follow [GoDaddy's official documentation](https://www.godaddy.com/help/create-a-godaddy-account-16618). Make sure that your [account Profile is configured fully](https://www.godaddy.com/help/update-my-godaddy-account-profile-27250) with at least the following fields:
+ To use the GoDaddy AnyCA Gateway REST plugin, a GoDaddy account must be created and configured fully. To create a new account, follow [GoDaddy's official documentation](https://www.godaddy.com/help/create-a-godaddy-account-16618). Make sure that your [account Profile is configured fully](https://www.godaddy.com/help/update-my-godaddy-account-profile-27250) with at least the following fields:
* Full Name
* Address
* Organization
@@ -88,12 +88,14 @@ The GoDaddy AnyCA Gateway REST plugin is supported by Keyfactor for Keyfactor cu
3. **GoDaddy API Key**
- The GoDaddy AnyCA Gateway REST plugin uses the [GoDaddy API](https://developer.godaddy.com/doc/endpoint/certificates) to perform all certificate operations. GoDaddy offers an environment for testing (OTE) and an environment for production use (Production). To configure the plugin, follow the [official GoDaddy documentation](https://developer.godaddy.com/getstarted) to create a [production API key](https://developer.godaddy.com/keys). To configure the CA, you'll need the following parameters handy:
+ The GoDaddy AnyCA Gateway REST plugin uses the [GoDaddy API](https://developer.godaddy.com/doc/endpoint/certificates) to perform all certificate operations. To configure the plugin, follow the [official GoDaddy documentation](https://developer.godaddy.com/getstarted) to create a [production API key](https://developer.godaddy.com/keys). To configure the CA, you'll need the following parameters handy:
- * API URL (https://api.godaddy.com or https://api.ote-godaddy.com)
+ * API URL (https://api.godaddy.com)
* API Key
* API Secret
+> **🚧 Note**: While GoDaddy offers a separate API environment for testing called the OTE (Operational Test and Evaluation) environment, **OTE API keys cannot be used with this integration**. The OTE environment does not support shopper ID resolution, which is required for API operations in this integration. Production API keys must be used.
+
4. **GoDaddy Shopper ID**
To synchronize certificates issued by the GoDaddy CA, the GoDaddy AnyCA Gateway REST plugin needs to know your Shopper ID (shown as Customer # on the GoDaddy website). The Shopper ID is a number with a max length of 10 (e.g., 1234567890). To find your Shopper ID, sign into [GoDaddy](https://www.godaddy.com/) and click on your name dropdown on the top right. The Shopper ID is shown as **Customer #** in this dropdown.
@@ -148,7 +150,7 @@ The GoDaddy AnyCA Gateway REST plugin is supported by Keyfactor for Keyfactor cu
* **ApiKey** - The API Key for the GoDaddy API
* **ApiSecret** - The API Secret for the GoDaddy API
- * **BaseUrl** - The Base URL for the GoDaddy API - Usually either https://api.godaddy.com or https://api.ote-godaddy.com
+ * **BaseUrl** - The Base URL for the GoDaddy API - Usually https://api.godaddy.com
* **ShopperId** - The Shopper ID of the GoDaddy account to use for the API calls (ex: 1234567890) - has a max length of 10 digits
* **Enabled** - Flag to Enable or Disable gateway functionality. Disabling is primarily used to allow creation of the CA prior to configuration information being available.
diff --git a/docsource/configuration.md b/docsource/configuration.md
index 482f3d3..99263d2 100644
--- a/docsource/configuration.md
+++ b/docsource/configuration.md
@@ -30,7 +30,7 @@ The GoDaddy AnyCA Gateway REST plugin extends the capabilities of the [GoDaddy C
1. **GoDaddy Account**
- To use the GoDaddy AnyCA Gateway REST plugin, a production GoDaddy account must be created and configured fully. To create a new account, follow [GoDaddy's official documentation](https://www.godaddy.com/help/create-a-godaddy-account-16618). Make sure that your [account Profile is configured fully](https://www.godaddy.com/help/update-my-godaddy-account-profile-27250) with at least the following fields:
+ To use the GoDaddy AnyCA Gateway REST plugin, a GoDaddy account must be created and configured fully. To create a new account, follow [GoDaddy's official documentation](https://www.godaddy.com/help/create-a-godaddy-account-16618). Make sure that your [account Profile is configured fully](https://www.godaddy.com/help/update-my-godaddy-account-profile-27250) with at least the following fields:
* Full Name
* Address
* Organization
@@ -45,12 +45,14 @@ The GoDaddy AnyCA Gateway REST plugin extends the capabilities of the [GoDaddy C
3. **GoDaddy API Key**
- The GoDaddy AnyCA Gateway REST plugin uses the [GoDaddy API](https://developer.godaddy.com/doc/endpoint/certificates) to perform all certificate operations. GoDaddy offers an environment for testing (OTE) and an environment for production use (Production). To configure the plugin, follow the [official GoDaddy documentation](https://developer.godaddy.com/getstarted) to create a [production API key](https://developer.godaddy.com/keys). To configure the CA, you'll need the following parameters handy:
+ The GoDaddy AnyCA Gateway REST plugin uses the [GoDaddy API](https://developer.godaddy.com/doc/endpoint/certificates) to perform all certificate operations. To configure the plugin, follow the [official GoDaddy documentation](https://developer.godaddy.com/getstarted) to create a [production API key](https://developer.godaddy.com/keys). To configure the CA, you'll need the following parameters handy:
- * API URL (https://api.godaddy.com or https://api.ote-godaddy.com)
+ * API URL (https://api.godaddy.com)
* API Key
* API Secret
+> **🚧 Note**: While GoDaddy offers a separate API environment for testing called the OTE (Operational Test and Evaluation) environment, **OTE API keys cannot be used with this integration**. The OTE environment does not support shopper ID resolution, which is required for API operations in this integration. Production API keys must be used.
+
4. **GoDaddy Shopper ID**
To synchronize certificates issued by the GoDaddy CA, the GoDaddy AnyCA Gateway REST plugin needs to know your Shopper ID (shown as Customer # on the GoDaddy website). The Shopper ID is a number with a max length of 10 (e.g., 1234567890). To find your Shopper ID, sign into [GoDaddy](https://www.godaddy.com/) and click on your name dropdown on the top right. The Shopper ID is shown as **Customer #** in this dropdown.
diff --git a/integration-manifest.json b/integration-manifest.json
index ab84479..f71375a 100644
--- a/integration-manifest.json
+++ b/integration-manifest.json
@@ -1,5 +1,5 @@
{
- "$schema": "https://keyfactor.github.io/integration-manifest-schema.json",
+ "$schema": "https://keyfactor.github.io/v2/integration-manifest-schema.json",
"name": "GoDaddy AnyCA REST plugin",
"description": "GoDaddy plugin for the AnyCA Gateway framework",
"status": "production",
@@ -23,7 +23,7 @@
},
{
"name": "BaseUrl",
- "description": "The Base URL for the GoDaddy API - Usually either https://api.godaddy.com or https://api.ote-godaddy.com"
+ "description": "The Base URL for the GoDaddy API - Usually https://api.godaddy.com"
},
{
"name": "ShopperId",