0.1.0 • Published 6 years ago

blockcert-tools-js v0.1.0

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

Build Status

blockcert-tools-js

A library for generating blockcert certificate templates and instantiating certificate batches

Table of Contents

Installation

$ npm install blockcert-tools-js

Usage

// import module
const bcTools = require('blockcerts-tools-js')

// generate a blockcert template according to config object
const template = bcTools.generateTemplate(config)

// instantiate unsigned certificates according to a template object and a roster object
const unsignedCerts = bcTools.instantiateBatch(template, roster) 

Example Config Object

config = {
// certificate display
displayHtml: '<h1>Some html code</h1>',

// recipient info
hashEmails: false,

// issuer info
issuerUrl: 'https://www.issuer.org',
issuerEmail: 'contact@issuer.org',
issuerName: 'University of Learning',
issuerId: 'https://www.blockcerts.org/samples/2.0/issuer-testnet.json',
revocationList:  'https://www.blockcerts.org/samples/2.0/revocation-list-testnet.json',
issuerSignatureLines: [{'jobTitle': 'University Issuer','signatureImage': 'default/images/issuer-signature.png','name': 'Your signature'}],
issuerPublicKey: 'Cfd720Ada81563D36E53eF2904F5A9E87fD0a29c',
issuerImage: '',

// certificate info
certificateTitle: 'Certificate of Accomplishment',
certificateDescription: 'Lorem ipsum dolor sit amet, mei docendi concludaturque ad, cu nec partem graece. Est aperiam consetetur cu, expetenda moderatius neglegentur ei nam, suas dolor laudem eam an.',
criteriaNarrative: 'Nibh iriure ei nam, modo ridens neglegentur mel eu. At his cibo mucius.',
badgeId: '82a4c9f2-3588-457b-80ea-da645ac1b8cc',
certImage: ''
}

Generating a Template

with the config object of the previous section:

const template = bcTools.generateTemplate(config)
templateString = JSON.stringify(template, null, 2)

This will output the following template:

{
  "@context": [
    "https://w3id.org/openbadges/v2",
    "https://w3id.org/blockcerts/v2",
    {
      "displayHtml": {
        "@id": "schema:description"
      }
    }
  ],
  "type": "Assertion",
  "displayHtml": "<h1>Some html code</h1>",
  "issuedOn": "{{date}}",
  "id": "urn:uuid:{{certuid}}",
  "recipient": {
    "type": "email",
    "identity": "{{email}}",
    "hashed": false
  },
  "recipientProfile": {
    "type": [
      "RecipientProfile",
      "Extension"
    ],
    "name": "{{name}}",
    "publicKey": "ecdsa-koblitz-pubkey:{{pubkey}}"
  },
  "badge": {
    "type": "BadgeClass",
    "id": "urn:uuid:82a4c9f2-3588-457b-80ea-da645ac1b8cc",
    "name": "Certificate of Accomplishment",
    "description": "Lorem ipsum dolor sit amet, mei docendi concludaturque ad, cu nec partem graece. Est aperiam consetetur cu, expetenda moderatius neglegentur ei nam, suas dolor laudem eam an.",
    "image": "",
    "issuer": {
      "id": "https://www.blockcerts.org/samples/2.0/issuer-testnet.json",
      "type": "Profile",
      "name": "University of Learning",
      "url": "https://www.issuer.org",
      "email": "contact@issuer.org",
      "image": "",
      "revocationList": "https://www.blockcerts.org/samples/2.0/revocation-list-testnet.json"
    },
    "criteria": {
      "narrative": "Nibh iriure ei nam, modo ridens neglegentur mel eu. At his cibo mucius."
    }
  },
  "verification": {
    "type": [
      "MerkleProofVerification2017",
      "Extension"
    ],
    "publicKey": "Cfd720Ada81563D36E53eF2904F5A9E87fD0a29c"
  }
}

Example Roster Object

roster = {
  recipient: {
    name: 'Carlos González Videla',
    email: 'cagonzalez@gmail.com',
    pubkey: 'mtr98kany9G1cYNU74pRnfBQmaCg2FZLmc'
  },
  certificate: {
    issuedOn: '2018-07-20T09:33:47.490752+00:00',
    uid: 'urn:uuid:82a4c9f2-3588-457b-80ea-da695571b8fc'
  }
}

Instantiating certificates

Using the previous roster object:

batch = bcTools.instantiateBatch(template, roster)
cert = batch[0]
certString = JSON.stringify(exampleTemplate, null, 2)

This will output the following unsigned certificate:

{
  "@context": [
    "https://w3id.org/openbadges/v2",
    "https://w3id.org/blockcerts/v2",
    {
      "displayHtml": {
        "@id": "schema:description"
      }
    }
  ],
  "type": "Assertion",
  "displayHtml": "<h1>Some html code</h1>",
  "issuedOn": "2018-07-20T09:33:47.490752+00:00",
  "id": "urn:uuid:urn:uuid:82a4c9f2-3588-457b-80ea-da695571b8fc",
  "recipient": {
    "type": "email",
    "identity": "cagonzalez@gmail.com",
    "hashed": false
  },
  "recipientProfile": {
    "type": [
      "RecipientProfile",
      "Extension"
    ],
    "name": "Carlos González Videla",
    "publicKey": "ecdsa-koblitz-pubkey:mtr98kany9G1cYNU74pRnfBQmaCg2FZLmc"
  },
  "badge": {
    "type": "BadgeClass",
    "id": "urn:uuid:82a4c9f2-3588-457b-80ea-da645ac1b8cc",
    "name": "Certificate of Accomplishment",
    "description": "Lorem ipsum dolor sit amet, mei docendi concludaturque ad, cu nec partem graece. Est aperiam consetetur cu, expetenda moderatius neglegentur ei nam, suas dolor laudem eam an.",
    "image": "",
    "issuer": {
      "id": "https://www.blockcerts.org/samples/2.0/issuer-testnet.json",
      "type": "Profile",
      "name": "University of Learning",
      "url": "https://www.issuer.org",
      "email": "contact@issuer.org",
      "image": "",
      "revocationList": "https://www.blockcerts.org/samples/2.0/revocation-list-testnet.json"
    },
    "criteria": {
      "narrative": "Nibh iriure ei nam, modo ridens neglegentur mel eu. At his cibo mucius."
    }
  },
  "verification": {
    "type": [
      "MerkleProofVerification2017",
      "Extension"
    ],
    "publicKey": "Cfd720Ada81563D36E53eF2904F5A9E87fD0a29c"
  }
}

Tests

npm test

This is WIP.

TODO

  • Improve Readme
  • Add Configuration validity (check if it is valid unsigned blockcert)
  • Create Tests
  • Support for multiple blockcert versions