def instantiate_recipient(config, cert, recipient): if config.hash_emails: salt = helpers.encode(os.urandom(16)) cert['recipient']['hashed'] = True cert['recipient']['salt'] = salt cert['recipient']['identity'] = hash_and_salt_email_address(recipient.identity, salt) else: cert['recipient']['identity'] = recipient.identity cert['recipient']['hashed'] = False profile_field = scope_name('recipientProfile') cert[profile_field] = {} cert[profile_field]['type'] = ['RecipientProfile', 'Extension'] cert[profile_field]['name'] = recipient.name cert[profile_field]['publicKey'] = recipient.pubkey if config.additional_per_recipient_fields: if not recipient.additional_fields: raise Exception('expected additional recipient fields in the csv file but none found') for field in config.additional_per_recipient_fields: cert = jsonpath_helpers.set_field(cert, field['path'], recipient.additional_fields[field['csv_column']]) else: if recipient.additional_fields: # throw an exception on this in case it's a user error. We may decide to remove this if it's a nuisance raise Exception( 'there are fields in the csv file that are not expected by the additional_per_recipient_fields configuration')
def create_certificate_template(config): if not config.badge_id: badge_uuid = str(uuid.uuid4()) print('Generated badge id {0}'.format(badge_uuid)) config.badge_id = badge_uuid badge = create_badge_section(config) verification = create_verification_section(config) assertion = create_assertion_section(config) recipient = create_recipient_section(config) recipient_profile = create_recipient_profile_section() assertion['recipient'] = recipient assertion[scope_name('recipientProfile')] = recipient_profile assertion['badge'] = badge assertion['verification'] = verification if config.additional_global_fields: for field in config.additional_global_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) if config.additional_per_recipient_fields: for field in config.additional_per_recipient_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) return assertion
def create_certificate_template(config): if not config.badge_id: badge_uuid = str(uuid.uuid4()) print('Generated badge id {0}'.format(badge_uuid)) config.badge_id = badge_uuid badge = create_badge_section(config) verification = create_verification_section(config) assertion = create_assertion_section(config) recipient = create_recipient_section(config) recipient_profile = create_recipient_profile_section() assertion['recipient'] = recipient assertion[scope_name('recipientProfile')] = recipient_profile assertion['badge'] = badge assertion['verification'] = verification if config.additional_global_fields: for field in config.additional_global_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) if config.additional_per_recipient_fields: for field in config.additional_per_recipient_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) return assertion
def instantiate_recipient(config, cert, recipient): if config.hash_emails: salt = helpers.encode(os.urandom(16)) cert['recipient']['hashed'] = True cert['recipient']['salt'] = salt cert['recipient']['identity'] = hash_and_salt_email_address( recipient.identity, salt) else: cert['recipient']['identity'] = recipient.identity cert['recipient']['hashed'] = False profile_field = scope_name('recipientProfile') cert[profile_field] = {} cert[profile_field]['type'] = ['RecipientProfile', 'Extension'] cert[profile_field]['name'] = recipient.name cert[profile_field]['publicKey'] = recipient.pubkey if config.additional_per_recipient_fields: if not recipient.additional_fields: raise Exception( 'expected additional recipient fields in the csv file but none found' ) for field in config.additional_per_recipient_fields: cert = jsonpath_helpers.set_field( cert, field['path'], recipient.additional_fields[field['csv_column']]) else: if recipient.additional_fields: # throw an exception on this in case it's a user error. We may decide to remove this if it's a nuisance raise Exception( 'there are fields in the csv file that are not expected by the additional_per_recipient_fields configuration' )
def create_badge_section(config): cert_image_path = os.path.join(config.abs_data_dir, config.cert_image_file) issuer_image_path = os.path.join(config.abs_data_dir, config.issuer_logo_file) badge = { 'type': 'BadgeClass', 'name': config.certificate_title, 'description': config.certificate_description, 'image': helpers.encode_image(cert_image_path) } if config.issuer_signature_lines: signature_lines = [] signature_lines = [] for signature_line in config.issuer_signature_lines: signature_image_path = os.path.join(config.abs_data_dir, signature_line['signature_image']) signature_lines.append( { 'type': [ 'SignatureLine', 'Extension' ], 'jobTitle': signature_line['job_title'], 'image': helpers.encode_image(signature_image_path), 'name': signature_line['name'] } ) badge[scope_name('signatureLines')] = signature_lines return badge
def create_badge_section(config): cert_image_path = os.path.join(config.abs_data_dir, config.cert_image_file) issuer_image_path = os.path.join(config.abs_data_dir, config.issuer_logo_file) badge = { 'type': 'BadgeClass', 'id': helpers.URN_UUID_PREFIX + config.badge_id, 'name': config.certificate_title, 'description': config.certificate_description, 'image': helpers.encode_image(cert_image_path), 'issuer': { 'id': config.issuer_id, 'type': 'Profile', 'name': config.issuer_name, 'url': config.issuer_url, 'email': config.issuer_email, 'image': helpers.encode_image(issuer_image_path), 'revocationList': config.revocation_list } } badge['criteria'] = {} badge['criteria']['narrative'] = config.criteria_narrative if config.issuer_signature_lines: signature_lines = [] signature_lines = [] for signature_line in config.issuer_signature_lines: signature_image_path = os.path.join( config.abs_data_dir, config.issuer_signature_file ) #signature_line['signature_image']) signature_lines.append({ 'type': ['SignatureLine', 'Extension'], 'jobTitle': signature_line['job_title'], 'image': helpers.encode_image(signature_image_path), 'name': signature_line['name'] }) badge[scope_name('signatureLines')] = signature_lines return badge
def create_certificate_template(config): if not config.badge_id: badge_uuid = str(uuid.uuid4()) print('Generated badge id {0}'.format(badge_uuid)) config.badge_id = badge_uuid badge = create_badge_section(config) verification = create_verification_section(config) assertion = create_assertion_section(config) recipient = create_recipient_section(config) recipient_profile = create_recipient_profile_section() template_dir = config.template_dir if not os.path.isabs(template_dir): template_dir = os.path.join(config.abs_data_dir, template_dir) template_file_name = config.template_file_name assertion['recipient'] = recipient assertion[scope_name('recipientProfile')] = recipient_profile assertion['badge'] = badge assertion['verification'] = verification if config.additional_global_fields: for field in config.additional_global_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) if config.additional_per_recipient_fields: for field in config.additional_per_recipient_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) template_path = os.path.join(config.abs_data_dir, template_dir, template_file_name) print('Writing template to ' + template_path) with open(template_path, 'w') as cert_template: json.dump(assertion, cert_template) return assertion
def create_badge_section(config): cert_image_path = os.path.join(config.abs_data_dir, config.cert_image_file) issuer_image_path = os.path.join(config.abs_data_dir, config.issuer_logo_file) badge = { 'type': 'BadgeClass', 'id': helpers.URN_UUID_PREFIX + config.badge_id, 'name': config.certificate_title, 'description': config.certificate_description, 'image': helpers.encode_image(cert_image_path), 'issuer': { 'id': config.issuer_id, 'type': 'Profile', 'name': config.issuer_name, 'url': config.issuer_url, 'email': config.issuer_email, 'image': helpers.encode_image(issuer_image_path), 'revocationList': config.revocation_list } } badge['criteria'] = {} badge['criteria']['narrative'] = config.criteria_narrative if config.issuer_signature_lines: signature_lines = [] signature_lines = [] for signature_line in config.issuer_signature_lines: signature_image_path = os.path.join(config.abs_data_dir, signature_line['signature_image']) signature_lines.append( { 'type': [ 'SignatureLine', 'Extension' ], 'jobTitle': signature_line['job_title'], 'image': helpers.encode_image(signature_image_path), 'name': signature_line['name'] } ) badge[scope_name('signatureLines')] = signature_lines return badge
def create_certificate_template(config): if not config.badge_id: badge_uuid = str(uuid.uuid4()) print('Generated badge id {0}'.format(badge_uuid)) config.badge_id = badge_uuid badge = create_badge_section(config) verification = create_verification_section(config) assertion = create_assertion_section(config) recipient = create_recipient_section(config) recipient_profile = create_recipient_profile_section() template_dir = config.template_dir if not os.path.isabs(template_dir): template_dir = os.path.join(config.abs_data_dir, template_dir) template_file_name = config.template_file_name assertion['recipient'] = recipient assertion[scope_name('recipientProfile')] = recipient_profile assertion['badge'] = badge assertion['verification'] = verification if config.additional_global_fields: for field in config.additional_global_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) if config.additional_per_recipient_fields: for field in config.additional_per_recipient_fields: assertion = jsonpath_helpers.set_field(assertion, field['path'], field['value']) template_path = os.path.join(config.abs_data_dir, template_dir, template_file_name) print('Writing template to ' + template_path) with open(template_path, 'w') as cert_template: json.dump(assertion, cert_template) return assertion
def instantiate_recipient(cert, recipient, additional_fields, hash_emails): if cert['displayHtml']: cert[ 'displayHtml'] = """<section class="text" style="margin-top: 24px; width: 100%; display: inline-block;"><span style="display: block; font-family: Helvetica, sans-serif; font-weight: bold; font-size: 2.5em; text-align: left; text-transform: none; color: #4e5f6b; margin: 0 auto; width: 100%;"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://upload.wikimedia.org/wikipedia/commons/3/39/ETS_Logo.svg" alt="" width="120" height="88" /></span></section> <h4 class="text" style="margin-top: 24px; width: 100%; display: inline-block;"><span style="font-size: 2.5em;"><em><span style="display: block; font-family: Helvetica, sans-serif; font-weight: bold; text-align: center; text-transform: none; color: #4e5f6b; margin: 0px auto; width: 100%;">Certificate of Participation</span></em></span></h4> <section class="text" style="margin-top: 24px; width: 100%; display: inline-block;"><span style="display: block; font-family: Helvetica, sans-serif; font-weight: bold; font-size: 2.5em; text-align: center; text-transform: none; color: #4e5f6b; margin: 0 auto; width: 100%;">""" + recipient.name + """</span></section><h3 class="text" style="margin-top: 24px; width: 100%; display: inline-block;"><span style="display: block; font-family: Helvetica, sans-serif; font-size: 1em; text-align: center; text-transform: none; color: #4e5f6b; margin: 0px auto; width: 100%;">Blockchain based ETS Credentials</span></h3> <section class="text" style="margin-top: 24px; width: 100%; display: inline-block;"></section><blockquote><p style="text-align: center;"><em>This certificate describes the use case of blockchain-based ETS credential</em></p><p style="text-align: center;"> </p></blockquote>""" if hash_emails: salt = helpers.encode(os.urandom(16)) cert['recipient']['hashed'] = True cert['recipient']['salt'] = salt cert['recipient']['identity'] = hash_and_salt_email_address( recipient.identity, salt) else: cert['recipient']['identity'] = recipient.identity cert['recipient']['hashed'] = False profile_field = scope_name('recipientProfile') cert[profile_field] = {} cert[profile_field]['type'] = ['RecipientProfile', 'Extension'] cert[profile_field]['name'] = recipient.name cert[profile_field]['publicKey'] = recipient.pubkey if additional_fields: if not recipient.additional_fields: raise Exception( 'expected additional recipient fields but none found') for field in additional_fields: cert = jsonpath_helpers.set_field( cert, field['path'], recipient.additional_fields[field['csv_column']]) else: if recipient.additional_fields: # throw an exception on this in case it's a user error. We may decide to remove this if it's a nuisance raise Exception( 'there are fields that are not expected by the additional_per_recipient_fields configuration' )