mirror of
https://github.com/covidpass-org/covidpass.git
synced 2025-02-16 19:50:42 +01:00
Add web app to docker compose
This commit is contained in:
parent
c46649c28d
commit
d6fc421755
@ -1,10 +1,10 @@
|
||||
# CovidPass
|
||||
|
||||
Webtool for generating a wallet pass from an official EU COVID-19 Vaccination Certificate QR code
|
||||
Web app for adding EU COVID-19 Vaccination Certificates to your wallets
|
||||
|
||||
## Debug locally
|
||||
|
||||
```sh
|
||||
docker build . -t covidpass
|
||||
docker run --env-file .env -t -i -p 3000:3000 covidpass
|
||||
docker run -t -i -p 3000:3000 covidpass
|
||||
```
|
@ -91,7 +91,7 @@ function Form() {
|
||||
I have read the <a href="/privacy">Privacy Policy</a>
|
||||
</p>
|
||||
</label>
|
||||
<form id="hidden" action="http://localhost:8000/covid.pkpass" method="POST">
|
||||
<form id="hidden" action="https://api.covidpass.marvinsextro.de/covid.pkpass" method="POST">
|
||||
<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">
|
||||
Add to Wallet
|
||||
|
@ -6,11 +6,13 @@ services:
|
||||
image: "traefik:v2.4"
|
||||
command:
|
||||
#- "--log.level=DEBUG"
|
||||
- "--api.insecure=true"
|
||||
- "--api.insecure=false"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.web.address=:80"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
|
||||
#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
- "--certificatesresolvers.myresolver.acme.email=marvin.sextro@gmail.com"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
@ -22,16 +24,44 @@ services:
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
|
||||
covidpass-api:
|
||||
container_name: covidpass-api
|
||||
image: "marvinsxtr/covidpass-api"
|
||||
image: "marvinsxtr/covidpass-api:latest"
|
||||
restart: "unless-stopped"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- API_URL=https://api.covidpass.marvinsextro.de/covid.pkpass
|
||||
ports:
|
||||
- "8000:8000"
|
||||
- "8000:8000"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.covidpass-api.rule=Host(`api.covidpass.marvinsextro.de`)"
|
||||
- "traefik.http.routers.covidpass-api.entrypoints=websecure"
|
||||
- "traefik.http.routers.covidpass-api.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.covidpass-api.middlewares=covidpass-api-https-only"
|
||||
- "traefik.http.middlewares.covidpass-api-https-only.redirectscheme.scheme=https"
|
||||
- "traefik.http.middlewares.covidpass-api-https-only.redirectscheme.permanent=true"
|
||||
- "traefik.http.middlewares.covidpass-api-https-only.redirectscheme.port=443"
|
||||
secrets:
|
||||
- env
|
||||
|
||||
covidpass:
|
||||
image: "marvinsxtr/covidpass:latest"
|
||||
restart: "unless-stopped"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
ports:
|
||||
- "3000:3000"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.covidpass.rule=Host(`covidpass.marvinsextro.de`)"
|
||||
- "traefik.http.routers.covidpass.entrypoints=websecure"
|
||||
- "traefik.http.routers.covidpass.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.covidpass.middlewares=covidpass-https-only"
|
||||
- "traefik.http.middlewares.covidpass-https-only.redirectscheme.scheme=https"
|
||||
- "traefik.http.middlewares.covidpass-https-only.redirectscheme.permanent=true"
|
||||
- "traefik.http.middlewares.covidpass-https-only.redirectscheme.port=443"
|
||||
depends_on:
|
||||
- covidpass-api
|
||||
|
||||
secrets:
|
||||
env:
|
||||
file: ./.env
|
||||
|
@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
img1xblack48dp: new Buffer.from('iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABrUlEQVR4Ae3SA6iecRSA8dlWbra9tKXZ3nKzkXEzZy9jCnOYbZth5rWNc59rf/rr4n3ql+ucU6eel5eXkbpgPU7gKFajA6p1jTEX55EBKScNpzADjVBtGo69iIAE6B92YJDLF9mK1xBFz7AeHey/iALbLzYTPyGWfMM0aGkCMiGWZWA8lLsFceQmlEuEOJIA5cSlWnqAd4B3QByeI6MmHnAD7ZHXaKTWpANuoAVKd9H5AQrLN8RnhwcoLE90EOKbemkQHzahHSbhbxDLH4D4xmwN/YJU4RZK1xd/NS0PZmvopc/XoCqOUF0ezNbQFUgVcrAA5euhYXkwW0M7IT5kYC7Kp7o8mK2hGZDgj1BeHszWUFtkBX+E8vJZYLaeHkMCkIGlyKsxDkNCw0yNLYcE4T3+QBQwU1/NEQ2xJBrM1Nt2iCXM0l9nREEMiwKzzLQCYhYzDFYf9yCG3AMzzNYd4RDNwtEdVhqHFIgmKRgHqy1AJkRRJhbASZMRr7B8PCbDaQPxFRKkrxiIalF77ENmgC+zD+1R7RqAy5AqXMYAVPu6IQyfCoWhGzTn5eWVC6Pwjab6QBMNAAAAAElFTkSuQmCC', 'base64'),
|
||||
img2xblack48dp: new Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAADIUlEQVR4Ae3aA6xeWxCG4XtwbRdxatu2bcWpGbthbdu2bdsIatvG9K2NX5219543eWJ1vp51+I1HsizLsizLsizL+hWV0RRNUB4/wYph36EaZuM+5B13MAFlEA8rSmVDb1yAfKGT6Ig0CCPrf7TDLkiENqAJ/kAE2RMThjCeKHtiIqDwRNkTo/NE2ROj8ETZE+P8E2VPjD1RyTES9yE+cwcD8D+crCguQ3zuAgrCqXLgNiQgbiErnOg7HIQEzHbEQb1GkICqCPXmQQJqKtQ7CwmovVDvISSg7kE9CTYbwAYINhvABgg2G8AGCDgbwAbQZwN4xHJ0x1RcsAG+ntMoiTf7F/NsgNg7jdT4UL/iqA2gcnwiam8DaB2fqL4NoHd8+whQPr59DlA8fgImQWwAneOPg0ROv0eQCNxHe2TCvyiLLR45/iOodyPCf0BxvFsihjp9fOCG1/8qYiQ+VjyGOnt84CzUOwwJUyNQGCNoHx84DPW2QsLUABTyCPrHB7ZCvamQMA0FhTSCG8cHpkK9rpAwPUS+EEbo7Mzxga5QrwUkAheQCRGkcHygBdQrAlEYQff4QBGo9yseKYygffxH+BVOtA+iMILO8YF9cKbhEIURdI4PDIcz1YIojKBzfKAWnOkPPFAYQev4D/AHnGolJMYj6B8fWAnnagmJgQsojzf7B7MgSlrCuf7GXUiMrEFPTMV5iJK7+BtONgXic1PgbGUgPlcGzhaH3RCf2o04OF0DiE81gPMl4jDEZw4jEZ6ogf3v1y0OmyA+sQlx8FT58BjicY+RD55sKMTjhsKz/YZjEI86ht/g6UrisUefnpLwRV0gHtMFvikByyAesQwJ8FX/4CjEcUfxD3xZWlyAOOoC0sLX5cR1iGOuIycCURHcgDjiBoogUOXGRYiyi8iNQJYWxyFKjiMtAl0SrFA4/gokAVkJ6ITHkBh7jE5IwDtZpXEEEiNHUBqfyPoFPfEQEiUP0RO/4AuzMmEOJEJzkAlWmOXDQkiIFiIfopSVEt1wCfIRl9ANKRGjrO9RCv1x/IX+KIXv4XSWZVmWZVmWZVlPAET6QNBhhZWqAAAAAElFTkSuQmCC', 'base64'),
|
||||
img1xwhite48dp: new Buffer.from('iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAABs0lEQVRYw+2WsUsCURzHn1RDLWZgc7UI2dIQONVWEDYILs0GDULQ7l9gDUXRHxA0tTRFDeXgIhTSENhkUGQYCllgotGnxRS78957d2cQ+B3v3u/zgd/de+8nRD//KIwT54hD1hlzGz1EhBPq/KTGMWEG3YHPssMLZnlmixlnLdnkBlmuiGu3zNASWfRaxgoP2Mk9yyr4BRrYTZ15uSCFk1zKBe+OBG9ygcP0BX8qeOXauBndE1zgE4I5PnojuGCkuf60F4I2foA79wUtvBDs63+D2q+KDUZZpGCK3zOeq3LBY0dBqvk00FRY4+FRLsh2tqP1PEBBioesXHDeUfBFtPVmSoqHc7lg23DGRwxr9rr+ANtyQdjkGoko4iEsF3j5tFJY4j/xqlyaGdPLcFUIhjiw3CEZtUs/1qX8lifJFoypCYYp2zqpywyrDi5JW4Kk+uDlp6SNL+HXme3WtAVresOjh7QWPo1Hdz6dpKiMLzIp9EOIqhK+SkjYC1GFObXRPg7tKJaoWOIrLAlnIUi+Kz5PUDgPPnZNWtVgF59wK0xz1oE/Y1q4HSZIkCNHggnRzz/KN71MawEqqdc4AAAAAElFTkSuQmCC', 'base64'),
|
||||
img2xwhite48dp: new Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAADKElEQVR4Ae3aM6BsZxSG4XUQ22pj27ZttTH7Il1s27Zt22iubRtPynCCOXff/c/Mevrqe2fWMFJKKaWUUkqpFWAZHIYzcDoOwpKRqoNFcSSew2x/NQMPY390R1owsCWuwxj/3VBcgvUj/X9YDRfiW333MU7H8tEHeWKalyeqghPTSJ6oGk5MnqhCTkyeqOpPTJ6okk9MniishXswW/uZgZuxWpQIe2C89jcGu0RJsDWm6xzTsEVJ725+0Xm+QlfUDafqXIdE3fCizvVE1A0jda4fom6Yq3PNirrpcBkgA3S0DJABOlsGyAAdLgNkgPJlgHK8havwBMZkgIVnOPaJ38EqeDEDVG841mv8J18DM0Dl4zeGizJA5eM3hpMyQPXj5zOgsPHzNaCA8XvwKGSAesZ/ENohwDx9MxsXYVOsggPwOeWPj3lRN0zRvHnYK/4Evbij8PFhSqv/K+KeaADduKPg8WFk1A39Ne/UaKxxhDLGh/5RN3yheSdHY40jlDE+fBF1wxOad0c01ihCKeMX88+4KzRvLnb8HxEuK2h8uCLqhrP1zRhsGn1Uw/hwdtQNu0P1EYobH3aPumEZzKs+QnHjz8MyUQL8CNVHKGZ8+DFKgbug+gjFjA93RSlwLFQfoZjx4dgoBZbHnOojFDP+HCwfJcE7UHWEAsaHd6I0OEc1xuCg+B2sjGfV55woDVbCTNV5H9fgCYxWn5lYKUqEx7W/x6NU2F/72z9KhS58p319h64oGU7Wvk6O0qEX/bWf/uiNVoCT89FfI3ThU+3jU3RFK8GOmK/1zceO0Ypwh9Z3R7QqLItBWtcgLButDPtgvtYzH/tEO8DlWs/l0S7Qgze1jjfRE+0EK2Og8g3EytGOsAHGKNcYbBDtDNtgsvJMxjbRCbA7pijHFOwenQTbYaz6jcV20YmwAQarz2BsEJ0Mq+NtC9/bWD1SBHpwKear3nxcip5If4T9MEB1BmC/aCxhaVyDuRacubgGS0f6b7Apntd3z2PTaE7CjnjF//cKdowFI2EdXIlxGhuHK7FOVCNhMeyLmzAYg3ET9sVikVJKKaWUUkqF+xW+vCJnJJaqGwAAAABJRU5ErkJggg==', 'base64')
|
||||
}
|
@ -63,7 +63,5 @@ export function decodeData(data) {
|
||||
let plaintext = data[2]
|
||||
let decoded = cbor.decode(typedArrayToBufferSliced(plaintext))
|
||||
|
||||
console.log(JSON.stringify(decoded, null, 4))
|
||||
|
||||
return decoded
|
||||
}
|
38
traefik.yml
38
traefik.yml
@ -1,38 +0,0 @@
|
||||
# Configuration for Traefik v2.
|
||||
|
||||
global:
|
||||
checkNewVersion: true
|
||||
sendAnonymousUsage: false
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: :80
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
|
||||
websecure:
|
||||
address: :443
|
||||
|
||||
log:
|
||||
level: DEBUG
|
||||
filePath: log/traefik.log
|
||||
|
||||
api:
|
||||
dashboard: true
|
||||
|
||||
providers:
|
||||
docker:
|
||||
|
||||
certificatesResolvers:
|
||||
myresolver:
|
||||
acme:
|
||||
email: "marvin.sextro@gmail.com"
|
||||
storage: "acme.json"
|
||||
# Staging: "https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
caServer: "https://acme-v02.api.letsencrypt.org/directory"
|
||||
tlsChallenge:
|
||||
httpChallenge:
|
||||
entryPoint: web
|
Loading…
x
Reference in New Issue
Block a user