Move api into own container
This commit is contained in:
parent
1b51a50c51
commit
c46649c28d
|
@ -91,7 +91,7 @@ function Form() {
|
||||||
I have read the <a href="/privacy">Privacy Policy</a>
|
I have read the <a href="/privacy">Privacy Policy</a>
|
||||||
</p>
|
</p>
|
||||||
</label>
|
</label>
|
||||||
<form id="hidden" action="/api/covid.pkpass" method="POST">
|
<form id="hidden" action="http://localhost:8000/covid.pkpass" method="POST">
|
||||||
<input type="hidden" id="payload" name="payload" />
|
<input type="hidden" id="payload" name="payload" />
|
||||||
<button id="download" type="download" disabled className="shadow-inner focus:outline-none bg-green-600 py-1 px-2 text-white font-semibold rounded-md disabled:bg-gray-400">
|
<button id="download" type="download" disabled className="shadow-inner focus:outline-none bg-green-600 py-1 px-2 text-white font-semibold rounded-md disabled:bg-gray-400">
|
||||||
Add to Wallet
|
Add to Wallet
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
import { img1xblack48dp, img2xblack48dp } from '../../res/img'
|
|
||||||
import { getValueSets } from '../../src/util'
|
|
||||||
import { SECRETS } from '../../src/constants'
|
|
||||||
|
|
||||||
const { Template, constants } = require("@walletpass/pass-js")
|
|
||||||
|
|
||||||
module.exports = async (req, res) => {
|
|
||||||
let data = JSON.parse(JSON.parse(JSON.stringify(req.body))["payload"])
|
|
||||||
const valueSets = await getValueSets()
|
|
||||||
|
|
||||||
let raw = data.raw
|
|
||||||
let decoded = data.decoded
|
|
||||||
|
|
||||||
const template = new Template("generic", {
|
|
||||||
passTypeIdentifier: SECRETS.PASS_TYPE_ID,
|
|
||||||
teamIdentifier: SECRETS.TEAM_ID,
|
|
||||||
sharingProhibited: true,
|
|
||||||
voided: false,
|
|
||||||
formatVersion: 1,
|
|
||||||
logoText: "CovidPass",
|
|
||||||
organizationName: "CovidPass",
|
|
||||||
description: "CovidPass",
|
|
||||||
labelColor: "rgb(0, 0, 0)",
|
|
||||||
foregroundColor: "rgb(0, 0, 0)",
|
|
||||||
backgroundColor: "rgb(255, 255, 255)",
|
|
||||||
})
|
|
||||||
|
|
||||||
await template.images.add("icon", img1xblack48dp, '1x')
|
|
||||||
await template.images.add("icon", img2xblack48dp, '2x')
|
|
||||||
await template.images.add("logo", img1xblack48dp, '1x')
|
|
||||||
await template.images.add("logo", img2xblack48dp, '2x')
|
|
||||||
|
|
||||||
template.setCertificate(SECRETS.CERT, SECRETS.PASSPHRASE)
|
|
||||||
|
|
||||||
const qrCode = {
|
|
||||||
"message": raw,
|
|
||||||
"format": "PKBarcodeFormatQR",
|
|
||||||
"messageEncoding": "utf-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
const v = decoded["-260"]["1"]["v"][0]
|
|
||||||
const nam = decoded["-260"]["1"]["nam"]
|
|
||||||
const dob = decoded["-260"]["1"]["dob"]
|
|
||||||
|
|
||||||
const pass = template.createPass({
|
|
||||||
serialNumber: v["ci"],
|
|
||||||
barcodes: [qrCode],
|
|
||||||
barcode: qrCode
|
|
||||||
});
|
|
||||||
|
|
||||||
const vaccine_name = valueSets.vaccine_medical_products["valueSetValues"][v["mp"]]["display"]
|
|
||||||
const vaccine_prophylaxis = valueSets.vaccine_prophylaxis["valueSetValues"][v["vp"]]["display"]
|
|
||||||
const country_of_vaccination = valueSets.country_codes["valueSetValues"][v["co"]]["display"]
|
|
||||||
const marketing_auth_holder = valueSets.marketing_auth_holders["valueSetValues"][v["ma"]]["display"]
|
|
||||||
|
|
||||||
pass.headerFields.add({ key: "type", label: "Certificate Type", value: "Vaccination" })
|
|
||||||
|
|
||||||
pass.primaryFields.add({ key: "vaccine", label: "Vaccine", value: vaccine_name })
|
|
||||||
|
|
||||||
pass.secondaryFields.add({ key: "name", label: "Name", value: nam["fn"] + ', ' + nam["gn"] })
|
|
||||||
pass.secondaryFields.add({ key: "dob", label: "Date of Birth", value: dob, textAlignment: constants.textDirection.RIGHT })
|
|
||||||
|
|
||||||
pass.auxiliaryFields.add({ key: "dose", label: "Dose", value: v["dn"] + '/' + v["sd"] })
|
|
||||||
pass.auxiliaryFields.add({ key: "dov", label: "Date of Vaccination", value: v["dt"], textAlignment: constants.textDirection.RIGHT })
|
|
||||||
|
|
||||||
pass.backFields.add({ key: "uvci", label: "Unique Certificate Identifier (UVCI)", value: v["ci"]})
|
|
||||||
pass.backFields.add({ key: "issuer", label: "Certificate Issuer", value: v["is"] })
|
|
||||||
pass.backFields.add({ key: "cov", label: "Country of Vaccination", value: country_of_vaccination})
|
|
||||||
pass.backFields.add({ key: "vp", label: "Vaccine Prophylaxis", value: vaccine_prophylaxis })
|
|
||||||
pass.backFields.add({ key: "ma", label: "Marketing Authorization Holder", value: marketing_auth_holder })
|
|
||||||
|
|
||||||
const buf = await pass.asBuffer();
|
|
||||||
|
|
||||||
res.type = 'application/vnd.apple.pkpass'
|
|
||||||
res.body = buf
|
|
||||||
res.status(200).send(buf)
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
export const BASE_URL = 'https://raw.githubusercontent.com/ehn-dcc-development/ehn-dcc-valuesets/main/'
|
|
||||||
export const VALUE_TYPES = {
|
|
||||||
vaccine_medical_products: 'vaccine-medicinal-product.json',
|
|
||||||
country_codes: 'country-2-codes.json',
|
|
||||||
vaccine_auth_holders: 'vaccine-mah-manf.json',
|
|
||||||
vaccine_prophylaxis: 'vaccine-prophylaxis.json',
|
|
||||||
marketing_auth_holders: 'vaccine-mah-manf.json'
|
|
||||||
}
|
|
||||||
export const PASS_MIME_TYPE = 'application/vnd.apple.pkpass'
|
|
||||||
export const SECRETS = {
|
|
||||||
TEAM_ID: process.env.TEAM_ID,
|
|
||||||
PASS_TYPE_ID: process.env.PASS_TYPE_ID,
|
|
||||||
CERT: Buffer.from(process.env.CERT, 'base64').toString('ascii'),
|
|
||||||
PASSPHRASE: process.env.PASSPHRASE,
|
|
||||||
}
|
|
15
src/util.js
15
src/util.js
|
@ -1,15 +0,0 @@
|
||||||
import { VALUE_TYPES, BASE_URL } from "./constants"
|
|
||||||
|
|
||||||
export async function getValueSets() {
|
|
||||||
var valueSets = {}
|
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(VALUE_TYPES)) {
|
|
||||||
valueSets[key] = await getJSONfromURL(BASE_URL + value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return valueSets
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getJSONfromURL(url) {
|
|
||||||
return await (await fetch(url)).json()
|
|
||||||
}
|
|
Loading…
Reference in New Issue