Coder Social home page Coder Social logo

servian / nz-covidpass-verification-api Goto Github PK

View Code? Open in Web Editor NEW
2.0 8.0 0.0 136 KB

NZ COVID Pass Verification API

License: MIT License

Shell 1.09% JavaScript 4.14% Makefile 2.76% Dockerfile 2.03% TypeScript 89.97%
covid-19 covidpass open-source newzealand nz api

nz-covidpass-verification-api's Introduction

Verify a New Zealand Covid Pass API

Overview

Open source api written in NestJS to decode and verify a NZ Covid Pass payload. This service can be deployed as a microservice and integrated into your existing ecosystem.

An NZCP is constructed using the pattern:

NZCP:/{version}/{base32-encoded-string}

This service also validates if the pass:

  • is a Base32 encoded NZCP Version 1
  • is encoded as a CBOR
  • has the correct protected headers
  • is issued by New Zealand Ministry of Health by matching the iss in the payload
  • is signed and validated by using the signature of the payload over the CBOR structure using the MOH public key
  • hasn't expired
  • is active

Response

If all the above checks are valid then the verified boolean is set to true, otherwise it will be classed as false.

The following error messages are returned with status 200 if the verification fails:

  • unable to base32 decode
  • unable to decode cbor
  • unable to extract headers
  • pass expired
  • pass not yet active
  • unable to decode payload
  • unable to fetch authority DID
  • not a new zealand ministry of health trusted issuer
  • absolute key mismatch
  • verification method failure
  • elliptical signature verification failed
  • An unknown error occurred. Please contact the administrator with ref: kwoein4y

Demo

For online demo of this application click here

Technical details

This project uses the following libraries to decode and verify the pass:

  1. Base32 Decode: Base32 decoder with support for multiple variants.
  2. CBOR: Encode and parse data in the Concise Binary Object Representation (CBOR) data format
  3. COSE: JavaScript implementation of COSE, RFC8152

Requirements

  • docker (For serving the app for local development)
  • docker-compose (v1.22 minimum, for serving the app for local development)
  • make (For helper commands)

Quick Start

  1. make start

Make Commands

  • make build - Run a production build and output the generated files to dist
  • make exec - Start an interactive command prompt in the local development container
  • make lint - Lint the project with ESLint
  • make logs - View and follow logs for the local development container
  • make restart - Restart the local development container (Useful if Webpack file watchers break)
  • make start - Start the local development container
  • make stop - Stop and remove the local development container

Docker

This api can be packaged into a docker image and deployed on any cloud service. To build the image run make build-docker

Contributing

Open an issue or a pull request to suggest changes or additions.

Commit Messages

All commit messages should try to match the regex /^NZVA-[\d]{1,4} - [A-Z].*[\w)]$/. In short (see here for details):

  • Titles should try to not exceed 50 characters and should never exceed 72 characters
    • Use the message body for further info on how/why you made your change
  • Titles should be capitalised
  • Titles should not end in a period
  • Titles should be in the imperative mood (Add feature A not Added feature A)
  • Separate the body from the title with an empty line
  • The body should wrap at 72 characters

Bad:

  • Updated readme to include guidelines on good commit message format.
  • [NZVA-123] updated readme to include guidelines on good commit message format
  • NZVA-123 - Added commit message guidelines to README

Good:

  • NZVA-123 - Add commit message guidelines to README

Node Project Module License List

@cto.af/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nestjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nestjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nestjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nestjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nestjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nestjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@nuxtjs/[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

@vendia/[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): Apache, Apache-2.0, BSD, MIT]
├── package.json:  Apache-2.0
└── license files: Apache, BSD, MIT

[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): BSD-2-Clause]
└── package.json:  BSD-2-Clause

[email protected] [license(s): BSD-2-Clause]
└── package.json:  BSD-2-Clause

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): BSD, BSD-2-Clause]
├── package.json:  BSD-2-Clause
└── readme files: BSD

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): ISC, MIT]
├── package.json:  ISC
└── license files: ISC, MIT

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): BSD-2-Clause]
└── package.json:  BSD-2-Clause

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): BSD, BSD-3-Clause]
├── package.json:  BSD-3-Clause
└── readme files: BSD

[email protected] [license(s): BSD, BSD-3-Clause]
├── package.json:  BSD-3-Clause
└── readme files: BSD

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): Apache 2.0]
└── package.json:  Apache 2.0

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): Apache, MIT]
├── package.json:  MIT
├── license files: Apache, MIT
└── readme files: Apache

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): ISC]
└── package.json:  ISC

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): Apache]
└── readme files: Apache

[email protected] [license(s): BSD, MIT]
├── package.json:  MIT
└── readme files: BSD

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): BSD, GPL, ISC, MIT, Public Domain, UNLICENSED]
├── package.json:  UNLICENSED
└── license files: BSD, GPL, ISC, MIT, Public Domain

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): BSD-3-Clause]
└── package.json:  BSD-3-Clause

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): GPL, ISC, MIT]
├── package.json:  ISC
└── license files: GPL, ISC, MIT

[email protected] [license(s): ISC, MIT]
├── package.json:  ISC
└── license files: ISC, MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): ISC]
└── package.json:  ISC

[email protected] [license(s): BSD, BSD-3-Clause]
├── package.json:  BSD-3-Clause
└── readme files: BSD

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): Apache, Apache-2.0]
├── package.json:  Apache-2.0
└── license files: Apache

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): 0BSD]
└── package.json:  0BSD

[email protected] [license(s): 0BSD]
└── package.json:  0BSD

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── readme files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): Unknown]

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): BSD, BSD-2-Clause]
├── package.json:  BSD-2-Clause
└── license files: BSD

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): ISC]
├── package.json:  ISC
└── license files: ISC

[email protected] [license(s): MIT]
└── package.json:  MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
└── license files: MIT

[email protected] [license(s): MIT]
├── package.json:  MIT
├── license files: MIT
└── readme files: MIT

LICENSES: 0BSD, Apache, Apache 2.0, Apache-2.0, BSD, BSD-2-Clause, BSD-3-Clause, GPL, ISC, MIT, Public Domain, UNLICENSED, Unknown

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.