Skip to content
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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
Version 2.0.2
- Fixed issue with no input for either custom or manual fields leading to a crash.
- Fixed issue with data for imported DigiCert fields renamed with a replacement character not syncing back to DigiCert.
- Fixed possible crash caused by importing DigiCert custom fields with "Anything" data type.

Version 2.0

- Added ability to sync custom fields from Keyfactor to DigiCert.
Expand Down
79 changes: 41 additions & 38 deletions digicert-metadata-sync/AddFieldsToKeyfactor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,49 @@ public static Tuple<int,List<string>> AddFieldsToKeyfactor(List<KeyfactorMetadat
addfieldsclient.Authenticator = new HttpBasicAuthenticator(keyfactorusername, keyfactorpassword);
int totalnumberadded = 0;
List<string> newfields = new List<string>();
foreach (var metadatainstance in inputlist)
if (inputlist.Count != 0)
{
if (noexistingfields == false)
foreach (var metadatainstance in inputlist)
{
var fieldquery = from existingmetadatainstance in existingmetadatalist
where existingmetadatainstance.Name == metadatainstance.Name
select existingmetadatainstance;
// If field does not exist in Keyfactor, add it.
if (!fieldquery.Any())
if (noexistingfields == false)
{
var fieldquery = from existingmetadatainstance in existingmetadatalist
where existingmetadatainstance.Name == metadatainstance.Name
select existingmetadatainstance;
// If field does not exist in Keyfactor, add it.
if (!fieldquery.Any())
{
var addfieldrequest = new RestRequest(addfieldstokeyfactorurl);
addfieldrequest.AddHeader("Content-Type", "application/json");
addfieldrequest.AddHeader("Accept", "application/json");
addfieldrequest.AddHeader("x-keyfactor-api-version", "1");
addfieldrequest.AddHeader("x-keyfactor-requested-with", "APIClient");
var serializedfield = JsonConvert.SerializeObject(metadatainstance);
addfieldrequest.AddParameter("application/json", serializedfield, ParameterType.RequestBody);
RestResponse metadataresponse = new RestResponse();
try
{
metadataresponse = addfieldsclient.Post(addfieldrequest);
newfields.Add(metadatainstance.Name);
++totalnumberadded;
}
catch (HttpRequestException e)
{
Console.WriteLine(metadataresponse.Content);
throw e;
}
}
else
{
if (fieldquery.FirstOrDefault().DataType != metadatainstance.DataType)
{
//Throw error if datatype included in keyfactor does not match the digicert one.
NotSupportedException mismatchedtypes = new NotSupportedException();
throw mismatchedtypes;
}
}
}
else
{
var addfieldrequest = new RestRequest(addfieldstokeyfactorurl);
addfieldrequest.AddHeader("Content-Type", "application/json");
Expand All @@ -52,7 +86,6 @@ public static Tuple<int,List<string>> AddFieldsToKeyfactor(List<KeyfactorMetadat
try
{
metadataresponse = addfieldsclient.Post(addfieldrequest);
newfields.Add(metadatainstance.Name);
++totalnumberadded;
}
catch (HttpRequestException e)
Expand All @@ -61,36 +94,6 @@ public static Tuple<int,List<string>> AddFieldsToKeyfactor(List<KeyfactorMetadat
throw e;
}
}
else
{
if (fieldquery.FirstOrDefault().DataType != metadatainstance.DataType)
{
//Throw error if datatype included in keyfactor does not match the digicert one.
NotSupportedException mismatchedtypes = new NotSupportedException();
throw mismatchedtypes;
}
}
}
else
{
var addfieldrequest = new RestRequest(addfieldstokeyfactorurl);
addfieldrequest.AddHeader("Content-Type", "application/json");
addfieldrequest.AddHeader("Accept", "application/json");
addfieldrequest.AddHeader("x-keyfactor-api-version", "1");
addfieldrequest.AddHeader("x-keyfactor-requested-with", "APIClient");
var serializedfield = JsonConvert.SerializeObject(metadatainstance);
addfieldrequest.AddParameter("application/json", serializedfield, ParameterType.RequestBody);
RestResponse metadataresponse = new RestResponse();
try
{
metadataresponse = addfieldsclient.Post(addfieldrequest);
++totalnumberadded;
}
catch (HttpRequestException e)
{
Console.WriteLine(metadataresponse.Content);
throw e;
}
}
}
Tuple<int, List<string>> returnvals = new Tuple<int, List<string>>(totalnumberadded, newfields);
Expand Down
35 changes: 19 additions & 16 deletions digicert-metadata-sync/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,25 +82,28 @@ private static List<KeyfactorMetadataInstanceSendoff> convertlisttokf(List<ReadI
string replacementcharacter)
{
List<KeyfactorMetadataInstanceSendoff> formattedlist = new List<KeyfactorMetadataInstanceSendoff>();
foreach (ReadInMetadataField input in inputlist)
if (inputlist.Count != 0)
{
KeyfactorMetadataInstanceSendoff formatinstance = new KeyfactorMetadataInstanceSendoff();
if (input.KeyfactorMetadataFieldName == null || input.KeyfactorMetadataFieldName == "")
foreach (ReadInMetadataField input in inputlist)
{
//If name is emtpy, use autocomplete.
formatinstance.Name = ReplaceAllWhiteSpaces(input.DigicertFieldName, replacementcharacter);
}
else
{
//Use user input preferred name.
formatinstance.Name = input.KeyfactorMetadataFieldName;
}
KeyfactorMetadataInstanceSendoff formatinstance = new KeyfactorMetadataInstanceSendoff();
if (input.KeyfactorMetadataFieldName == null || input.KeyfactorMetadataFieldName == "")
{
//If name is emtpy, use autocomplete.
formatinstance.Name = ReplaceAllWhiteSpaces(input.DigicertFieldName, replacementcharacter);
}
else
{
//Use user input preferred name.
formatinstance.Name = input.KeyfactorMetadataFieldName;
}

formatinstance.AllowAPI = Convert.ToBoolean(input.KeyfactorAllowAPI);
formatinstance.Hint = input.KeyfactorHint;
formatinstance.DataType = TypeMatcher(input.KeyfactorDataType);
formatinstance.Description = input.KeyfactorDescription;
formattedlist.Add(formatinstance);
formatinstance.AllowAPI = Convert.ToBoolean(input.KeyfactorAllowAPI);
formatinstance.Hint = input.KeyfactorHint;
formatinstance.DataType = TypeMatcher(input.KeyfactorDataType);
formatinstance.Description = input.KeyfactorDescription;
formattedlist.Add(formatinstance);
}
}

return formattedlist;
Expand Down
39 changes: 31 additions & 8 deletions digicert-metadata-sync/MetadataSync.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,11 @@ public static void Main(string[] args)
var kfdatatype = "String";
if (customdigicertmetadatafieldlist[i].data_type != null)
{
kfdatatype = customdigicertmetadatafieldlist[i].data_type;
localkffieldinstance.KeyfactorDataType = customdigicertmetadatafieldlist[i].data_type;
}
else
{
kfdatatype = "String";
localkffieldinstance.KeyfactorDataType = "String";
}
if (customdigicertmetadatafieldlist[i].label != null)
{
Expand All @@ -119,10 +119,22 @@ CURRENTLY REPLACING WITH "_-_" AS STAND IN FOR SPACE CHARACTER.
localkffieldinstance.DigicertFieldName = customdigicertmetadatafieldlist[i].label;
localkffieldinstance.KeyfactorMetadataFieldName = ReplaceAllWhiteSpaces(customdigicertmetadatafieldlist[i].label, replacementcharacter);
}
else
{
localkffieldinstance.DigicertFieldName = "";
localkffieldinstance.KeyfactorMetadataFieldName = "";
}
if (customdigicertmetadatafieldlist[i].description != null)
{
localkffieldinstance.KeyfactorDescription = customdigicertmetadatafieldlist[i].description;
}
else
{
localkffieldinstance.KeyfactorDescription = "None.";
}

localkffieldinstance.KeyfactorAllowAPI = "True";
localkffieldinstance.KeyfactorHint = "";
//Other parameters like enrollment can be set here too.

kfcustomfields.Add(localkffieldinstance);
Expand All @@ -134,12 +146,20 @@ CURRENTLY REPLACING WITH "_-_" AS STAND IN FOR SPACE CHARACTER.
// Converts blank fields etc and preps the data.
var customfieldslst = "CustomFields";
kfcustomfields = config.GetSection(customfieldslst).Get<List<ReadInMetadataField>>();
if (kfcustomfields == null)
{
kfcustomfields = new List<ReadInMetadataField>();
}
}

//Adding metadata fields for the ID and the email of the requester from DigiCert.
List<ReadInMetadataField> kfmanualfields = new List<ReadInMetadataField>();
var manualfieldslist = "ManualFields";
kfmanualfields = config.GetSection(manualfieldslist).Get<List<ReadInMetadataField>>();
if (kfmanualfields == null)
{
kfmanualfields = new List<ReadInMetadataField>();
}
logger.LogDebug("Performed field conversion.");

//Pulling list of existing metadata fields from Keyfactor for later comparison.
Expand Down Expand Up @@ -323,12 +343,15 @@ CURRENTLY REPLACING WITH "_-_" AS STAND IN FOR SPACE CHARACTER.
{
Dictionary<string, string> metadatapayload = new Dictionary<string, string>();
metadatapayload["metadata_id"] = newfield.id.ToString();
//Update payload with data
metadatapayload["value"] = kfstoredmetadata[sublookup.DigicertFieldName];
var newserializedsyncfield = JsonConvert.SerializeObject(metadatapayload);
digicertnewfieldsrequest.AddParameter("application/json", newserializedsyncfield, ParameterType.RequestBody);
var digicertresponsenewfields = digicertnewfieldsclient.Post(digicertnewfieldsrequest);
datauploaded = true;
if (kfstoredmetadata.ContainsKey(sublookup.KeyfactorMetadataFieldName))
{
metadatapayload["value"] = kfstoredmetadata[sublookup.KeyfactorMetadataFieldName];
var newserializedsyncfield = JsonConvert.SerializeObject(metadatapayload);
digicertnewfieldsrequest.AddParameter("application/json", newserializedsyncfield, ParameterType.RequestBody);
var digicertresponsenewfields = digicertnewfieldsclient.Post(digicertnewfieldsrequest);
datauploaded = true;
}

}
}
}
Expand Down
12 changes: 6 additions & 6 deletions digicert-metadata-sync/Models/InternalClasses.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ public class CustomDigicertMetadataInstance

public class ReadInMetadataField
{
public string DigicertFieldName { get; set; }
public string KeyfactorMetadataFieldName { get; set; }
public string KeyfactorDescription { get; set; }
public string KeyfactorDataType { get; set; }
public string KeyfactorHint { get; set; }
public string KeyfactorAllowAPI { get; set; }
public string DigicertFieldName { get; set; } = "local_test_nullx0";
public string KeyfactorMetadataFieldName { get; set; } = "test_name_nullx0";
public string KeyfactorDescription { get; set; } = "None.";
public string KeyfactorDataType { get; set; } = "string";
public string KeyfactorHint { get; set; } = "None.";
public string KeyfactorAllowAPI { get; set; } = "True";
}

public class KeyfactorMetadataInstanceSendoff
Expand Down