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
예제 #2
0
def generate_issuer_file(config):
    output_handle = open(config.output_file,
                         'w') if config.output_file else sys.stdout
    introductionURL = config.issuer_url + "intro/" if config.issuer_url.endswith(
        '/') else "/intro/"
    currentDate = str(datetime.date.today())

    issuer_json = {
        'id': config.issuer_id,
        'url': config.issuer_url,
        'introductionURL': introductionURL,
        'name': config.issuer_name,
        'email': config.issuer_email,
        'image': helpers.encode_image(config.issuer_logo_file),
        'issuerKeys': [{
            'date': currentDate,
            'key': config.issuer_address
        }],
        'revocationKeys': [{
            'date': currentDate,
            'key': config.revocation_address
        }]
    }

    output_handle.write(json.dumps(issuer_json, indent=2))

    if output_handle is not sys.stdout:
        output_handle.close()
예제 #3
0
def generate_issuer_file(config):

    if config.public_key_created:
        issued_on = config.public_key_created
    else:
        print(helpers.create_iso8601_tz())
        issued_on = helpers.create_iso8601_tz()
    output_handle = open(config.output_file, 'w') if config.output_file else sys.stdout

    context = [OPEN_BADGES_V2_CONTEXT_JSON, BLOCKCERTS_V2_CONTEXT_JSON]

    issuer_json = {
        '@context': context,
        'id': config.issuer_id,
        'url': config.issuer_url,
        'name': config.issuer_name,
        'email': config.issuer_email,
        'image': helpers.encode_image(os.path.join(config.abs_data_dir, config.issuer_logo_file)),
        'publicKey': [{'id': config.issuer_public_key, "created": issued_on}],
        'revocationList': config.revocation_list_uri,
        'type': ISSUER_TYPE
    }

    if config.intro_url:
        issuer_json['introductionUrl'] = config.intro_url

    output_handle.write(json.dumps(issuer_json, indent=2))

    if output_handle is not sys.stdout:
        output_handle.close()
예제 #4
0
def generate_issuer_file(config):
    output_handle = open(config.output_file, 'w') if config.output_file else sys.stdout
    introductionURL = config.issuer_url + "intro/" if config.issuer_url.endswith('/') else "/intro/"
    currentDate = str(datetime.date.today())

    issuer_json = {
       'id': config.issuer_id,
       'url': config.issuer_url,
       'introductionURL': introductionURL,
       'name': config.issuer_name,
       'email': config.issuer_email,
       'image': helpers.encode_image(config.issuer_logo_file),
       'issuerKeys': [
           {
               'date': currentDate,
               'key': config.issuer_address
           }
       ],
       'revocationKeys': [
           {
               'date': currentDate,
               'key': config.revocation_address
           }
       ]
     }

    output_handle.write(json.dumps(issuer_json, indent=2))

    if output_handle is not sys.stdout:
        output_handle.close()
예제 #5
0
def generate_issuer_file(config):

    if config.public_key_created:
        issued_on = config.public_key_created
    else:
        issued_on = helpers.create_iso8601_tz()
    output_handle = open(config.output_file, 'w') if config.output_file else sys.stdout

    context = [OPEN_BADGES_V2_CONTEXT_JSON, BLOCKCERTS_V2_CONTEXT_JSON]

    issuer_json = {
        '@context': context,
        'id': config.issuer_id,
        'url': config.issuer_url,
        'name': config.issuer_name,
        'email': config.issuer_email,
        'image': helpers.encode_image(os.path.join(config.abs_data_dir, config.issuer_logo_file)),
        'publicKey': [{'id': config.issuer_public_key, "created": issued_on}],
        'revocationList': config.revocation_list_uri,
        'type': ISSUER_TYPE
    }

    if config.intro_url:
        issuer_json['introductionUrl'] = config.intro_url

    output_handle.write(json.dumps(issuer_json, indent=2))

    if output_handle is not sys.stdout:
        output_handle.close()
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)
    with open('data.json') as data_file:
        award_obj = json.load(data_file)

    badge = {
        'type': 'BadgeClass',
        'id': helpers.URN_UUID_PREFIX + config.badge_id,
        'name': award_obj['Award']['Title'],
        'description': award_obj['Award']['Description'],
        'image': helpers.encode_image(cert_image_path),
        'issuer': {
            'id': config.issuer_id,
            'type': 'Profile',
            'name': award_obj['Award']['IssuerName'],
            'url': award_obj['Award']['IssuerUrl'],
            'email': award_obj['Award']['IssuerContact'],
            'image': helpers.encode_image(issuer_image_path),
            'revocationList': config.revocation_list
        }
    }

    badge['criteria'] = {}
    badge['criteria']['narrative'] = award_obj['Criteria']

    if config.issuer_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_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_assertion_section(config):
    assertion = {
        'type': 'Assertion',
        'issuedOn': '*|DATE|*',
        'uid': '*|CERTUID|*',
        'id': helpers.urljoin_wrapper(config.issuer_certs_url, '*|CERTUID|*')
    }
    if config.issuer_signature_file:
        issuer_image_path = os.path.join(config.abs_data_dir, config.issuer_signature_file)
        assertion['image:signature'] = helpers.encode_image(issuer_image_path)
    return assertion
def create_certificate_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)
    certificate = {
        'type': 'Certificate',
        'name': config.certificate_title,
        'image': helpers.encode_image(cert_image_path),
        'description': config.certificate_description,
        'language': config.certificate_language,
        'issuer': {
            'type': 'Issuer',
            'url': config.issuer_url,
            'image': helpers.encode_image(issuer_image_path),
            'email': config.issuer_email,
            'name': config.issuer_name,
            'id': config.issuer_id
        }
    }

    return certificate
def create_unsigned_certificates_from_roster(config):
    roster = os.path.join(config.abs_data_dir, config.roster)
    template = os.path.join(config.abs_data_dir, config.template_dir,
                            config.template_file_name)
    issued_on = helpers.create_iso8601_tz()
    output_dir = os.path.join(config.abs_data_dir,
                              config.unsigned_certificates_dir)
    print('Writing certificates to ' + output_dir)

    recipients = []

    ### User defined changes. Defined a mapping list for keeping user mapping. ###
    mapping = []
    ### END ###

    with open(roster, 'r') as theFile:
        reader = csv.DictReader(theFile)
        for line in reader:
            r = Recipient(line)
            recipients.append(r)

    with open(template) as template:
        cert_str = template.read()
        template = json.loads(cert_str)

        for recipient in recipients:
            if config.filename_format == "certname_identity":
                uid = template['badge']['name'] + recipient.identity
                uid = "".join(c for c in uid if c.isalnum())
            else:
                uid = str(uuid.uuid4())

            ### User-defined changes. Added a field to change the certificate Image for a given recipient ###
            template['badge']['image'] = helpers.encode_image(
                os.path.join(config.abs_data_dir,
                             'images/' + recipient.imagefile))
            ### END ###

            cert_file = os.path.join(output_dir, uid + '.json')
            if os.path.isfile(cert_file) and config.no_clobber:
                continue

            cert = copy.deepcopy(template)

            instantiate_assertion(config, cert, uid, issued_on)
            instantiate_recipient(config, cert, recipient)

            # validate certificate before writing
            schema_validator.validate_v2(cert)

            with open(cert_file, 'w') as unsigned_cert:
                json.dump(cert, unsigned_cert)

            ###UserDefined changes. Creating a mapping for recepient email and filename
            mapping.append([recipient.identity, uid + '.json'])
            ### END ###

        ### User Defined changes. Writes to the mapping csv file ###
        with open(os.path.join(config.abs_data_dir, 'mapping.csv'),
                  'w') as mappingFile:
            writer = csv.writer(mappingFile)
            writer.writerows(mapping)