summaryrefslogtreecommitdiff
path: root/netzbon
diff options
context:
space:
mode:
Diffstat (limited to 'netzbon')
-rw-r--r--netzbon/.gitignore5
-rwxr-xr-xnetzbon/generate-letter.sh40
-rwxr-xr-xnetzbon/generate-qr.sh40
-rw-r--r--netzbon/qr.tex.j213
-rwxr-xr-xnetzbon/render.py49
-rwxr-xr-xnetzbon/setup-merchants.sh39
-rw-r--r--netzbon/template.tex.j279
-rw-r--r--netzbon/template_de.tex.j2110
-rw-r--r--netzbon/test.json7
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"
+ }
+]