Created
June 29, 2023 12:50
-
-
Save dreizehnutters/56112df1e2132b6c96261c4bcc240dec to your computer and use it in GitHub Desktop.
convert certipy json to csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import csv | |
from sys import argv | |
def flatten_dict(dictionary, parent_key='', sep='.'): | |
items = [] | |
for key, value in dictionary.items(): | |
new_key = f"{parent_key}{sep}{key}" if parent_key else key | |
if isinstance(value, dict): | |
if "Permissions" in key: | |
for sub_key, sub_value in value.items(): | |
if 'Enrollment Permissions' in sub_key: | |
items.append((sub_key, '\n'.join(sub_value['Enrollment Rights']))) | |
elif 'Object Control Permissions' in sub_key: | |
for subsub_key, subsub_value in sub_value.items(): | |
if isinstance(subsub_value, list): | |
items.append((subsub_key, '\n'.join(subsub_value))) | |
else: | |
items.append((subsub_key, subsub_value)) | |
else: | |
items.append((new_key, ", ".join([f"{key}: {value}" for key, value in value.items()]))) | |
elif isinstance(value, list): | |
items.append((new_key, '\n'.join(value))) | |
else: | |
items.append((new_key, value)) | |
return dict(items) | |
def dict_to_csv(data_dict, output_file, column_order): | |
with open(output_file, 'w', newline='') as csvfile: | |
writer = csv.DictWriter(csvfile, fieldnames=column_order, extrasaction='ignore', delimiter=';', quoting=csv.QUOTE_ALL) | |
writer.writeheader() | |
writer.writerows([flatten_dict(data_dict[data]) for data in data_dict]) | |
if __name__ == '__main__': | |
input_file = argv[1] | |
with open(input_file, 'r') as file: | |
json_data = json.load(file) | |
all_templates = json_data['Certificate Templates'] | |
column_order = ['Template Name', 'Display Name', 'Certificate Authorities', 'Enabled', 'Client Authentication', 'Enrollment Agent', 'Any Purpose', 'Enrollee Supplies Subject', 'Certificate Name Flag', 'Enrollment Flag', 'Private Key Flag', 'Extended Key Usage', 'Requires Manager Approval', 'Requires Key Archival', 'Authorized Signatures Required', 'Validity Period', 'Renewal Period', 'Minimum RSA Key Length', 'Enrollment Permissions', 'Owner', 'Write Owner Principals', 'Write Dacl Principals', 'Write Property Principals','[!] Vulnerabilities'] | |
dict_to_csv(all_templates, f"{input_file.split('.')[0]}.csv", column_order) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
from
to