diff options
Diffstat (limited to 'netzbon')
-rw-r--r-- | netzbon/.gitignore | 5 | ||||
-rwxr-xr-x | netzbon/generate-letter.sh | 40 | ||||
-rwxr-xr-x | netzbon/generate-qr.sh | 40 | ||||
-rw-r--r-- | netzbon/qr.tex.j2 | 13 | ||||
-rwxr-xr-x | netzbon/render.py | 49 | ||||
-rwxr-xr-x | netzbon/setup-merchants.sh | 39 | ||||
-rw-r--r-- | netzbon/template.tex.j2 | 79 | ||||
-rw-r--r-- | netzbon/template_de.tex.j2 | 110 | ||||
-rw-r--r-- | netzbon/test.json | 7 |
9 files changed, 382 insertions, 0 deletions
diff --git a/netzbon/.gitignore b/netzbon/.gitignore new file mode 100644 index 0000000..8a9cd7b --- /dev/null +++ b/netzbon/.gitignore @@ -0,0 +1,5 @@ +export/ +tmp/ +result.pdf +qre/ +qr.pdf diff --git a/netzbon/generate-letter.sh b/netzbon/generate-letter.sh new file mode 100755 index 0000000..272463c --- /dev/null +++ b/netzbon/generate-letter.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# This script is in the public domain. +# +# Call with the JSON file (like test.json) with +# an array of merchants to generate letters for! +# +# You must export +# +# export BASE_URL=https://e.netzbon-basel.ch/ +# +# before running this script! +# + +set -eu +LENGTH=$(jq length < $1) +echo "Generating $LENGTH letters for ${BASE_URL}" +DOMAIN=$( echo "${BASE_URL}" | sed -e "s/https:\/\///" | sed -e "s/\/$//") +mkdir -p export +mkdir -p tmp + +for n in $(seq 1 $LENGTH) +do + echo "Processing merchant $n" + INDEX=$(expr $n - 1 || true) + ID=$(jq -r .[$INDEX].id < $1) + + jq ".[$INDEX]" < $1 | jq '.domain="'"${DOMAIN}"'"' > "tmp/${ID}.json" + cd tmp + ../render.py "${ID}.json" < ../template_de.tex.j2 > "${ID}.tex" + pdflatex "${ID}.tex" < /dev/null &> /dev/null || true + pdflatex "${ID}.tex" < /dev/null &> /dev/null || true + pdflatex "${ID}.tex" < /dev/null + mv "${ID}.pdf" ../export/ + cd .. + + echo "Done with ${ID}" +done + +pdftk export/*.pdf cat output result.pdf +echo "Combined letters are in 'result.pdf'" diff --git a/netzbon/generate-qr.sh b/netzbon/generate-qr.sh new file mode 100755 index 0000000..e5c01c6 --- /dev/null +++ b/netzbon/generate-qr.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# This script is in the public domain. +# +# Call with the JSON file (like test.json) with +# an array of merchants to generate letters for! +# +# You must export +# +# export BASE_URL=https://e.netzbon-basel.ch/ +# +# before running this script! +# + +set -eu +LENGTH=$(jq length < $1) +echo "Generating $LENGTH QR codes for ${BASE_URL}" +DOMAIN=$( echo "${BASE_URL}" | sed -e "s/https:\/\///" | sed -e "s/\/$//") +mkdir -p qre +mkdir -p tmp + +for n in $(seq 1 $LENGTH) +do + echo "Processing merchant $n" + INDEX=$(expr $n - 1 || true) + ID=$(jq -r .[$INDEX].id < $1) + + jq ".[$INDEX]" < $1 | jq '.domain="'"${DOMAIN}"'"' > "tmp/${ID}.json" + cd tmp + ../render.py "${ID}.json" < ../qr.tex.j2 > "${ID}.tex" + pdflatex "${ID}.tex" < /dev/null &> /dev/null || true + pdflatex "${ID}.tex" < /dev/null &> /dev/null || true + pdflatex "${ID}.tex" < /dev/null + mv "${ID}.pdf" ../qre/ + cd .. + + echo "Done with ${ID}" +done + +pdftk qre/*.pdf cat output qr.pdf +echo "Combined letters are in 'qr.pdf'" diff --git a/netzbon/qr.tex.j2 b/netzbon/qr.tex.j2 new file mode 100644 index 0000000..ff7b52d --- /dev/null +++ b/netzbon/qr.tex.j2 @@ -0,0 +1,13 @@ +\documentclass[a4paper]{minimal} +\usepackage[ + paperwidth=53mm, + paperheight=53mm, + total={53mm,53mm}]{geometry} +\usepackage[nolinks,final,forget]{qrcode} + +\begin{document} +\vspace*{0.6mm} +\begin{center} +\qrcode[hyperlink,level=M,height=45mm]{taler://pay-template/backend.{{data.domain}}/instances/{{data.id}}/default} +\end{center} +\end{document} diff --git a/netzbon/render.py b/netzbon/render.py new file mode 100755 index 0000000..8bce600 --- /dev/null +++ b/netzbon/render.py @@ -0,0 +1,49 @@ +#!/usr/bin/python3 +# This file is in the public domain. + +"""Expand Jinja2 templates based on JSON input. + +The tool then reads the template from stdin and writes the expanded +output to stdout. + +TODO: proper installation, man page, error handling, --help option. + +@author Christian Grothoff + +""" + +import sys +import json +import jinja2 +from jinja2 import BaseLoader + + +class StdinLoader(BaseLoader): + def __init__ (self): + self.path = '-' + def get_source(self, environment, template): + source = sys.stdin.read() + return source, self.path, lambda: false + + +jsonFile1 = open (sys.argv[1], 'r') +jsonData1 = json.load(jsonFile1) + +jinjaEnv = jinja2.Environment(loader=StdinLoader(), + lstrip_blocks=True, + trim_blocks=True, + undefined=jinja2.StrictUndefined, + autoescape=False) +tmpl = jinjaEnv.get_template('stdin'); + +try: + print(tmpl.render(data = jsonData1)) +except jinja2.TemplateSyntaxError as error: + print("Template syntax error: {error.message} on line {error.lineno}.".format(error=error)) + exit(1) +except jinja2.UndefinedError as error: + print("Template undefined error: {error.message}.".format(error=error)) + exit(1) +except TypeError as error: + print("Template type error: {0}.".format(error.args[0])) + exit(1) diff --git a/netzbon/setup-merchants.sh b/netzbon/setup-merchants.sh new file mode 100755 index 0000000..7fa1d3b --- /dev/null +++ b/netzbon/setup-merchants.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# This script is in the public domain. +# +# You must export +# +# export BASE_URL=e.netzbon-basel.ch +# export MERCHANT_TOKEN=password +# export BANK_TOKEN=password +# +# before running this script! +# +# Call with the JSON file (like test.json) with +# an array of merchants to set up as the first argument! +# +# FIXME: nice error handling is non-existent... +# +set -eu +LENGTH=$(jq length < $1) +echo "Setting up $LENGTH merchants at ${BASE_URL}" + +for n in $(seq 1 $LENGTH) +do + echo "Processing merchant $n" + INDEX=$(expr $n - 1 || true) + NAME=$(jq ".[$INDEX].name" < $1) + ID=$(jq .[$INDEX].id < $1) + PW=$(jq .[$INDEX].pass < $1) + + taler-harness deployment provision-bank-and-merchant \ + "merchant.${BASE_URL}" \ + "bank.${BASE_URL}" \ + "--merchant-management-token=${MERCHANT_TOKEN}" \ + "--bank-admin-token=${BANK_ADMIN_TOKEN}" \ + "--id=${ID}" \ + "--legal-name=${NAME}" \ + "--password=${PW}" + + echo "Done with ${ID}" +done diff --git a/netzbon/template.tex.j2 b/netzbon/template.tex.j2 new file mode 100644 index 0000000..81ec978 --- /dev/null +++ b/netzbon/template.tex.j2 @@ -0,0 +1,79 @@ +\documentclass[12pt,a4paper]{letter} +\usepackage[utf8]{inputenc} +\usepackage[english]{babel} +\usepackage[nolinks,final,forget]{qrcode} +\usepackage[top=2cm, +bottom=2cm, +includefoot, +left=2.5cm, +right=2cm, +footskip=1cm]{geometry} +\usepackage{url} +\usepackage[colorlinks=true, allcolors=black]{hyperref} +\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{} +\date{\today} +% +\selectlanguage{english} + +\signature{Isidor} +\begin{document} +% +\begin{letter}{To \\ {{data.name}}} + +\opening{Dear {{data.name}},} + +We are excited to introduce you to the new digital Netzbon {\bf eNetzBon} using GNU Taler. +In the enclosed brochure, you will find some introduction on how you can +set up your business to accept payments in eNetzBon. + +This letter provides you with your personalized credentials to access your +{\bf eNetzBon bank account} and {\bf merchant backend}. Please keep the password +confidential as otherwise others might gain control over your eNetzBon! You +are encouraged to set up second-factor authentication (via SMS or email) +before using the system. + +Your initial password is {\bf {{data.pass}}}. + +Using this password and the username {\tt {{data.id}}} you can log into +your eNetzBon bank account at {\url{https://bank.{{data.domain}}/}}. + +Furthermore, we are happy to provide you with a GNU Taler merchant +backend at {\url{https://backend.{{data.domain}}/instances/{{data.id}}/}}. +The backend is already configured to use your eNetzBon bank account +and uses the same password. + +You are encouraged to change the password (separately) in both systems. + +If you want to use a GNU Taler wallet (from {\url{https://wallet.taler.net/}}) +you need to add eNetzBon as a payment service provider before you can use it to +invoice your customers. To do so, please scan the following QR code with your Taler wallet: +\begin{center} +{\qrcode[hyperlink,level=M,height=3cm]{\tt taler://exchange/exchange.{{data.domain}}/}} + +{\tt taler://exchange/exchange.{{data.domain}}/} +\end{center} + +This welcome package includes five identical stickers with a QR code which is +pre-configured to link all your customers' payments into your eNetzBon bank account. Your +specific QR code looks like this: +\begin{center} +{\qrcode[hyperlink,level=M,height=3cm]{\tt taler://pay-template/backend.{{data.domain}}/instances/{{data.id}}/default}} + +{\tt taler://pay-template/backend.{{data.domain}}/instances/{{data.id}}/default} +\end{center} +You are free to create additional QR codes or change the contents for this QR code +in the merchant backend. + +Please sign the included Terms of service on the attached paper slip and return it to us. +If you want us to set up the Taler Point-of-sale app, please complete the form in the +introduction brochure and return that form to us as well. + +We hope your customers enjoy paying you with eNetzBon! + + +\closing{Best regards} +\encl{Five similar QR code stickers, \\ Introduction to GNU Taler for merchants, \\ +eNetzBon Terms of service (to sign), \\ Return envelope} + +\end{letter} +\end{document} diff --git a/netzbon/template_de.tex.j2 b/netzbon/template_de.tex.j2 new file mode 100644 index 0000000..2ee1c31 --- /dev/null +++ b/netzbon/template_de.tex.j2 @@ -0,0 +1,110 @@ +\documentclass[12pt,a4paper]{letter} +\usepackage[utf8]{inputenc} +\usepackage[ngerman]{babel} +\usepackage[nolinks,final,forget]{qrcode} +\usepackage[top=2cm, +bottom=2cm, +includefoot, +left=2.5cm, +right=2cm, +footskip=1cm]{geometry} +\usepackage{url} +\usepackage{graphicx} +\usepackage[colorlinks=true, allcolors=black]{hyperref} +\usepackage{enumitem} +\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{} +\date{\today} +% +\selectlanguage{german} +\address{Verein Soziale \"Okonomie \\Klybeckstrasse 95 \\4057 Basel \\ enetzbon@netzbon.ch } +\signature{ + \vspace{-1cm} + \includegraphics[height=1cm]{../wallimann.jpg} \\ + Isidor Wallimann im Namen des Vorstandes Soziale \"Okonomie} +\begin{document} +% +\begin{letter}{An \\ {{data.name}}} +\opening{Lieber NetzBon-Betrieb,} + +Unser Projekt eines digitalen Netzbon - der {\bf eNetzBon} - ist in der Testphase. Daf\"ur brauchen wir eure +Unterst\"utzung. Wir m\"ochten euch hier eine erste Anleitung geben, wie ihr als Betrieb den {\bf eNetzBon} nutzen +k\"onnt. Der Verein Soziale \"Okonomie betreibt dieses Bezahlsystem basierend auf der Technik von {\bf GNU Taler} und +l\"adt dich ein, es praktisch kennenzulernen. + +Die beiliegende Brosch\"ure erkl\"art, wie du die Software ausprobierst und so einstellst, dass dein Betrieb Zahlungen +von Kundinnen und Kunden in eNetzBon auf deinem internen Konto beim Verein gratis empfangen kann. + +%Du erh\"alst heute Zugangslinks zu +%\begin{enumerate}[noitemsep] +%\item eNetzBon-Konto, +%\item Verwaltungsprogramm (GNU Taler Merchant) und +%\item Elektronische Geldb\"orse (Taler wallet). +%\end{enumerate} + +Die {\bf pers\"onlichen Zugangsdaten} gelten sowohl f\"ur das {\bf eNetzBon-Konto} als auch f\"ur das {\bf +Verwaltungsprogramm GNU Taler Merchant}, mit dem du deine Buchungen in eNetzBon verwalten kannst. + +{\bf 1.} Um Zugang zu deinem eNetzBon-Konto zu erhalten, rufst du in deinem Browser die Seite +\begin{center} +{\url{https://bank.{{data.domain}}/}} +\end{center} +auf und gibst den Benutzernamen {\tt {{data.id}}} und das Passwort {\bf {{data.pass}}} ein. +Dein Passwort musst du nach dem ersten Besuch \"andern und es dauerhaft vor dem Zugriff +Unbefugter sch\"utzen, weil diese sonst Kontrolle \"uber die eNetzBon erlangen k\"onnten! +Wir empfehlen daf\"ur eine Zwei-Faktor-Authentifizierung (mittels SMS oder E-Mail), bevor +das System in Betrieb genommen wird. + +{\bf 2.} Das Verwaltungsprogramm {\bf GNU Taler Merchant} ist zug\"anglich unter +\begin{center} +{\url{https://backend.{{data.domain}}/instances/{{data.id}}/}}. +\end{center} +Es ist bereits mit deinem eNetzBon-Konto verbunden und verwendet {\bf dasselbe +Passwort}. + +Wir empfehlen zugunsten h\"oherer Sicherheit die beiden Passw\"orter unabh\"angig +voneinander in beiden Systemen zu \"andern. + +{\bf 3.} Wenn du die {\bf elektronische Geldb\"orse GNU Taler Wallet} verwenden willst, um von +deiner Kundschaft eNetzBon an dieses gezahlt zu bekommen bzw. um selbst mit eNetzBon zu +bezahlen, besuchst du {\url{https://wallet.taler.net/}} +und installierst das passende Wallet f\"ur dein Smartphone (Android oder iOS). + +Bevor du {\bf Rechnungen an deine Kundschaft stellen} kannst, musst du im Wallet zuerst +eNetzBon als Zahlungsdienst hinzuf\"ugen. Um dies zu tun, aktiviere bitte dein GNU Taler +Wallet und scanne folgenden QR-Code: +\begin{center} +{\qrcode[hyperlink,level=M,height=3cm]{taler://exchange/exchange.{{data.domain}}/}} + +{\tt taler://exchange/exchange.{{data.domain}}/} +\end{center} + +Anbei erh\"altst du {\bf f\"unf gleichartige Aufkleber mit einem QR-Code}, der den Verweis +auf dein eNetzBon-Konto enth\"alt bzw. deinen Betrieb eindeutig bezeichnet. Die Kundinnen und Kunden +m\"ussen diesen QR-Code beim Bezahlen mit ihren GNU Taler Wallets scannen, damit ihre +Zahlungen auf dein eNetzBon-Konto gelenkt werden. So sieht dein QR-Code aus: +\begin{center} +{\qrcode[hyperlink,level=M,height=3cm]{taler://pay-template/backend.{{data.domain}}/instances/{{data.id}}/default}} + +{\tt taler://pay-template/backend.{{data.domain}}/instances/{{data.id}}/default} +\end{center} +Im Verwaltungsprogramm GNU Taler Merchant besteht die M\"oglichkeit, weitere QR-Codes zu +erzeugen und zus\"atzliche Daten des QR-Codes festzulegen, z.B. QR-Codes mit festen +oder variablen Preisen f\"ur deine angebotenen Waren oder Dienstleistungen. + +Eine Bitte haben wir noch, bevor es losgehen kann: +Wir ben\"otigen die {\bf Allgemeinen Ge\-schäfts\-be\-ding\-ungen (AGB)} zur eNetzBon-Nutzung +unterschrieben an den Verein Soziale \"Okonomie zur\"uckgesendet. + +F\"ur den Fall deines Interesses, dass wir dir die Anwendung {\bf GNU Taler +Point-of-sale App} (Download unter \url{https://pos.taler.net/}) aufsetzen und in Betrieb +nehmen sollen, f\"ulle bitte den Antrag in der Anleitungsbrosch\"ure aus und +sende auch diesen an uns zur\"uck. + +Und nun w\"unschen wir dir gutes Gelingen und viel Freude beim Entdecken des eNetzBon! +\closing{Herzliche Gr\"usse} +\encl{F\"unf identische Aufkleber mit dem QR-Code deines eNetzBon-Kontos, \\ +Anleitungsbrosch\"ure GNU Taler f\"ur NetzBon-Betriebe, \\ +eNetzBon-AGB (bitte mit Unterschrift zur\"ucksenden), \\ Antwortcouvert} + +\end{letter} +\end{document} diff --git a/netzbon/test.json b/netzbon/test.json new file mode 100644 index 0000000..9a47fe6 --- /dev/null +++ b/netzbon/test.json @@ -0,0 +1,7 @@ +[ + { + "name": "Test shop", + "id": "test", + "pass": "password" + } +] |