summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--configure.ac2
-rw-r--r--contrib/Makefile.am.in1
-rw-r--r--contrib/exchange-tos-tops-v0.rst422
m---------contrib/gana0
m---------contrib/wallet-core0
-rw-r--r--debian/changelog19
-rw-r--r--debian/control4
-rw-r--r--debian/taler-exchange.taler-exchange-aggregator.service2
-rw-r--r--debian/taler-exchange.taler-exchange-closer.service2
-rw-r--r--debian/taler-exchange.taler-exchange-expire.service2
-rw-r--r--debian/taler-exchange.taler-exchange-httpd.service2
-rw-r--r--debian/taler-exchange.taler-exchange-transfer.service2
-rw-r--r--debian/taler-exchange.taler-exchange-wirewatch.service2
-rw-r--r--doc/doxygen/taler.doxy2
m---------doc/prebuilt0
-rw-r--r--src/bank-lib/Makefile.am2
-rw-r--r--src/bank-lib/fakebank.h2
-rw-r--r--src/bank-lib/fakebank_bank.c51
-rw-r--r--src/bank-lib/fakebank_bank_accounts_withdrawals.c5
-rw-r--r--src/bank-lib/fakebank_bank_get_withdrawals.c7
-rw-r--r--src/bank-lib/fakebank_bank_post_accounts_withdrawals.c23
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_abort.c74
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_abort.h48
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_confirm.c107
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_confirm.h48
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_id_op.c11
-rw-r--r--src/bank-lib/fakebank_stop.c1
-rw-r--r--src/bank-lib/fakebank_tbi_get_withdrawal_operation.c5
-rw-r--r--src/bank-lib/fakebank_tbi_post_withdrawal_operation.c48
-rw-r--r--src/exchangedb/exchangedb_accounts.c32
-rw-r--r--src/testing/testing_api_cmd_signal.c1
32 files changed, 429 insertions, 501 deletions
diff --git a/ChangeLog b/ChangeLog
index f2232f498..d627c3eab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+Wed May 15 17:43:41 AM CEST 2024
+ Releasing GNU Taler Exchange 0.11.0. -CG
+
Fri Apr 12 10:43:41 AM CEST 2024
Releasing GNU Taler Exchange 0.10.2. -CG
diff --git a/configure.ac b/configure.ac
index 3f8238b42..9a5c570d4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,7 +17,7 @@
#
#
AC_PREREQ([2.69])
-AC_INIT([taler-exchange],[0.10.2],[taler-bug@gnunet.org])
+AC_INIT([taler-exchange],[0.11.2],[taler-bug@gnunet.org])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_SRCDIR([src/util/util.c])
AC_CONFIG_HEADERS([taler_config.h])
diff --git a/contrib/Makefile.am.in b/contrib/Makefile.am.in
index e278fad2f..d3cfa769c 100644
--- a/contrib/Makefile.am.in
+++ b/contrib/Makefile.am.in
@@ -29,6 +29,7 @@ termsdir=$(datadir)/taler/terms/
terms_DATA = \
exchange-tos-v0.rst \
exchange-tos-bfh-v0.rst \
+ exchange-tos-tops-v0.rst \
exchange-pp-v0.rst
install-exec-local:
diff --git a/contrib/exchange-tos-tops-v0.rst b/contrib/exchange-tos-tops-v0.rst
index 3d0effa4c..9079545be 100644
--- a/contrib/exchange-tos-tops-v0.rst
+++ b/contrib/exchange-tos-tops-v0.rst
@@ -1,133 +1,289 @@
-
-1.1. Dienstleistung / Geltungsbereich
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-CG: "Kunden sind Inhaber von durch TOPS signierten und in CHF denominierten Wertmarken
-welche in Taler-Wallets in Eigenverantwortung gespeichert werden und mit denen Kunden
-bezahlen koennen."
-
-[KOMMENTAR SK]
-1. Ich empfehle weiterhin den Rechtsbegriff **Nutzer** anstelle von "Kunden", denn
-Händler/Verkäufer können ja auch Nutzer sein, die untereinander Wertmarken austauschen,
-ohne untereinander Kunden sein zu müssen. Sie sind damit "Nutzer" wie alle anderen Nutzer, die
-wiederum keine Händler sein müssen. Das gilt selbstredend auch für P2P-Transaktionen von Wallets,
-die keine Zahlung auslösen, sondern nur Token an andere Wallets übertragen wollen.
-2. Nutzer sind **Eigentümer** von Wertmarken - denn "Inhaber" oder "Besitzer" wären hierfür
-rechtlich schwache und unzutreffende Rechtsbegriffe. Wir sollten in diesem Punkt exakt sein,
-wenn wir mit der Definition von e-Geld konform bleiben wollen (Wertmarken/Token, die in
-Wallets bis zu ihrer Einlösung als Eigentum der Wallet-Eigentümer verwahrt werden).
-
-Daher nun folgender **Formulierungsvorschlag**:
-- **Nutzer** sind Eigentümer von durch TOPS signierten und in CHF denominierten Wertmarken, welche
-sie in Taler-Wallets in Eigenverantwortung als ihr Eigentum speichern und mit denen sie bezahlen
-können. Ist eine Wertmarke eingelöst worden, kann diese nicht noch ein weiteres Mal eingelöst werden.
-Wer eine Wertmarke zuerst einlöst, hat ihren Wert zur Zahlung verwendet.
-Die Nutzer anerkennen sämtliche getätigten Zahlungen aus dem Taler-Wallet, selbst wenn diese ohne
-ihre Zustimmung erfolgt sind.
-[KOMMENTAR SK]
-
-1.2. Zugang zu den TALER Dienstleistungen
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-[KOMMENTAR SK]
-1.2. **Zugang zum TALER-Zahlungsdienst und zu anderen TOPS-Dienstleistungen**.
-[KOMMENTAR SK]
-
-1.4. Registrierung und Identifizierung
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-[KOMMENTAR SK]
-Meine Vorschläge dazu:
-1.4.1. Zur Nutzung des Zahlungsdiensts sind Nutzer und Begünstigte verpflichtet, TOPS bei
-der Erfüllung regulatorischer und gesetzlicher Vorgaben zu unterstützen. Insbesondere kann
-TOPS über die Identität von **wirtschaftlich Berechtigten** Auskunft verlangen. TOPS hat
-das Recht und ggf. die gesetzliche Pflicht, Nutzer und Begünstigte von der Nutzung des
-Zahlungsdiensts auszuschliessen, sollten diese die erforderlichen Auskünfte verweigern oder unwahre
-Angaben machen.
-
-1.4.2. Zur Nutzung des Zahlungsdiensts gehen **Begünstigte** eine Geschäftsbeziehung mit
-TOPS ein und können ggf. verpflichtet sein, sich bei TOPS zu registrieren und die dabei
-verlangten Informationen zur Verfügung zu stellen. TOPS benötigt zur Registrierung von
-Begünstigten deren IBAN, Adresse und Telefonnummer. TOPS behält sich vor, zur Erfüllung
-regulatorischer Vorgaben jederzeit weitere Informationen verlangen zu können.
-
-1.4.3. Es erfolgt keine Registrierung oder Kontenanlage der **Nutzer** bei TOPS oder dem
-Taler-Zahlungsdienst. Erfasst werden jedoch IBAN-Konten, die CHF an TOPS überweisen.
-Die Nutzer brauchen für das Abheben in Taler-Wallets eine Schweizer Telefonnummer zum
-Empfang von TANs im Fall der TAN-Versendung durch den Taler-Zahlungsdienst.
-[KOMMENTAR SK]
-
-1.10. Kommunikation
-~~~~~~~~~~~~~~~~~~~
-
-[KOMMENTAR SK]
-Die Kommunikation von TOPS zu Nutzern erfolgt grundsätzlich über Benachrichtigungen im Taler-Protokoll.
-Die Nutzer sind dafür verantwortlich, auf entsprechende Benachrichtigungen zu reagieren.
-TOPS hat das Recht, Transaktionen solange nicht auszuführen, bis Nutzer auf diesem Weg angeforderte rechtlich
-notwendige Daten bereitstellen.
-[KOMMENTAR SK]
-
-1.12. Vorbehalt gesetzlicher Regelungen und Beschränkung der Dienstleistungen
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-[KOMMENTAR SK]
-Mein auf das Wesentliche reduzierter Vorschlag, um stets im Rahmen der (unvorhersehbaren) Entwicklung der Regulatorik
-zu bleiben:
-
-1.12.1 Allfällige Gesetzesbestimmungen, die den Betrieb und die Nutzung von digitalen Endgeräten,
-Zahlungsdiensten, des Internets und sonstiger Infrastruktur regeln, bleiben vorbehalten und gelten
-ab ihrer Inkraftsetzung auch für die TOPS-Dienstleistungen.
-
-1.12.2 TOPS behält sich vor, das Angebot von Dienstleistungen jederzeit und ohne vorherige Ankündigung zu ändern, zu
-beschränken oder vollständig einzustellen, insbesondere aufgrund rechtlicher Anforderungen, technischen Problemen,
-zwecks Verhinderung von Missbräuchen, auf behördliche Anordnung oder aus Sicherheitsgründen.
-[KOMMENTAR SK]
-
-1.14 Datenschutz
-~~~~~~~~~~~~~~~~
-
-Weitere Informationen zu den Datenbearbeitungen finden sich in der Datenschutzerklärung auf
-der Webseite der TALER AG (www.TALER.ch).
-
-[KOMMENTAR SK]
-TALER AG (www.TALER.ch) --> TOPS (www.taler-ops.ch)
-[KOMMENTAR SK]
-
-1.15. Dauer und Kündigung
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-[KOMMENTAR SK]
-Mein Vorschlag:
-1.15 Dauer und Kündigung der Geschäftsbeziehung
-
-1.15.1 Die Geschäftsbeziehung zwischen TOPS und **Begünstigten** (Händler, Betriebe, Verkäufer und sonstige
-Empfänger von Überweisungen des Zahlungsdiensts an die begünstigten IBAN-Konten) wird auf eine unbestimmte Dauer
-abgeschlossen. TOPS kann die Geschäftsbeziehung mit den Begünstigten jederzeit - insbesondere in Missbrauchsfällen mit
-sofortiger Wirkung - kündigen. Eine schriftliche Kündigung durch TOPS erfolgt an eine der zuletzt bekanntgegebenen
-Adressen der Geschäftspartner (z.B. per E-Mail oder Brief). Sollten für über 12 Monate keine Transaktionen an die
-Begünstigen erfolgen, gilt die Geschäftsbeziehung als beendet.
-
-1.15.2 Die Geschäftsbeziehung zwischen TOPS und **Nutzern** wird auf die Dauer der Nutzung des Zahlungsdiensts
-abgeschlossen. Die Nutzer von Taler-Wallets können das Guthaben in diesen jederzeit an die Bankkonten zurücküberweisen
-lassen, von denen die Überweisung der Nutzer an den Zahlungsdienst erfolgte, und so das Guthaben saldieren. Bei einer
-Betriebsaufgabe des Zahlungsdiensts der TOPS werden die Nutzer über die bevorstehende Einstellung des Zahlungsdiensts
-durch das Taler-Protokoll informiert und von den Taler-Wallets aufgefordert, das bestehende Guthaben zu saldieren.
-Nutzer, die diese Saldierung unterlassen, verlieren nach 3 Monaten den Anspruch auf das danach noch bestehende
-Guthaben, welches in das Eigentum der TOPS übergeht.
-[KOMMENTAR SK]
-
-1.17. Anwendbares Recht und Gerichtsstand
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-- Satz 2: Zürich --> Biel
-
-CG: TOPS: Ich denke Bern, nicht Biel (so was ist doch bestimmt Kantonal!?)
-
-[KOMMENTAR SK]
-Subkantonal. Das Regionalgericht in Biel ist zuständig als erstinstanzliche Zivilrechtsabteilung und als
-Schlichtungsbehörde (siehe https://www.zsg.justice.be.ch/de/start/ueber-uns/regionalgerichte/berner-jura-seeland.html):
-Regionalgericht Berner Jura-Seeland, Amthaus Biel, Spitalstrasse 14, 2502 Biel.
-
-Hinsichtlich NetzBon gilt der Gerichtsstand, der im Vertrag zwischen Taler Operations AG und dem Verein Soziale
-Ökonomie vereinbart wird.
-[KOMMENTAR SK]
+Allgemeine Geschäftsbedingungen der Taler Operations AG
+=======================================================
+
+Diese Allgemeinen Geschäftsbedingungen (nachfolgend **AGB**) der Taler
+Operations AG regeln die Rechte und Pflichten von Nutzern und
+Zahlungsempfängern (Begünstigten) des angebotenen Zahlungsdiensts.
+
+
+Dienstleistung / Geltungsbereich
+--------------------------------
+
+GNU Taler ist ein technisches System, das bargeldlose Zahlungen ermöglicht.
+Taler Operations AG (nachfolgend **TOPS**) mit Sitz in Biel/Bienne, Schweiz,
+bietet einen **Zahlungsdienst** auf Basis von GNU Taler für Nutzer in der
+Schweiz an. TOPS ist Mitglied im VQF, einer FINMA-akkreditierten
+Selbstregulierungsorganisation. TOPS wird daher nicht direkt von der FINMA
+beaufsichtigt, sondern betreibt eine Finanzdienstleistung nach Art. 6 Abs. 2
+BankV ohne gewerbsmässige Bankeneigenschaft (Nichtbank) und somit ohne
+Kundeneinlagensicherung.
+
+**Nutzer** sind Eigentümer von durch TOPS signierten und in CHF denominierten
+Wertmarken (e-Geld), welche in Taler-Wallets in Eigenverantwortung der Nutzer
+gespeichert werden und mit denen die Nutzer bezahlen können.
+
+**Taler-Wallets** sind Produkte, die digitales Bargeld (e-Geld) nach dem GNU
+Taler-Protokoll verwalten, welches ein Zahlungsdienst emittiert und zur
+Zahlung an Begünstigte wieder einlöst. Die von TOPS emittierten Wertmarken
+(e-CHF) können als Zahlungsmittel im stationären Handel, an Automaten, online
+und in Apps bei autorisierten Händlern oder Dienstleistungsanbietern, die
+dieses Zahlungsmittel akzeptieren (nachfolgend "**Begünstigte**") eingesetzt
+werden. Nutzer können auch Zahlungen mit anderen Nutzern durchführen oder
+das e-Geld auf ein Schweizer Bankkonto zurückübertragen.
+
+
+Technische Voraussetzungen
+--------------------------
+
+Um die angebotenen Dienste wahrnehmen zu können, müssen Nutzer ein Taler-Wallet
+(elektronische Geldbörse) als Taler-App auf ihrem Smartphone oder als
+Erweiterung in einem Browser auf dem PC installieren. Die Nutzer sind frei in
+der Wahl ihrer Taler-Wallet-Anwendung. Begünstigte sind ebenfalls frei in der
+Wahl ihrer Taler-Wallet-Anwendung bzw. ihres Taler-Backends. Verschiedene
+Lösungen werden von diversen Anbietern bereitgestellt. TOPS macht hier keine
+Einschränkungen und übernimmt keine Gewährleistung für die gewählte Lösung. Die
+Nutzer sind eigenverantwortlich für die Sicherheit ihrer Taler-Wallets bzw.
+Taler-Backends und der darin gespeicherten Wertmarken bzw. Transaktionsdaten.
+
+Das Taler-Wallet wird von den Nutzern über die hierfür vorgesehenen
+Mechanismen aufgeladen. Zum Aufbuchen der gewünschten Geldmenge wählt man im
+Taler-Wallet den von TOPS betriebenen Zahlungsdienst, an den man diese
+Geldmenge vom Girokonto überweist und von dem schliesslich das Taler-Wallet die
+elektronischen Repräsentanten der Geldmenge abhebt. TOPS kann weitere
+Aufladeoptionen einführen oder auch bestehende Mechanismen nicht mehr anbieten.
+Allfällige mit der Aufladung verbundene Transaktions- oder sonstige Gebühren
+sind durch die Nutzer zu tragen. Das Guthaben der Nutzer in Wallets wird nicht
+verzinst. Die Nutzer nehmen zur Kenntnis, dass das Guthaben nicht von der
+Einlagensicherung gedeckt ist.
+
+Das Entladen des Taler-Wallet muss auf ein Schweizer Bankkonto
+erfolgen. Internationale Zahlungen sind nicht erlaubt. Die Nutzer können mit
+dem im Smartphone oder Webbrowser installierten Taler-Wallet innerhalb der
+geltenden Limiten bei natürlichen und juristischen Personen bezahlen, die
+diese Bezahloption akzeptieren und ein Schweizer Bankkonto zum Geldempfang
+führen (z.B. Ladengeschäfte, Webshops, Apps und sonstige Begünstigte). Bei
+einer Bezahlung wird der entsprechende Betrag direkt vom Taler-Wallet
+abgebucht. Es muss im Taler-Wallet mindestens der Transaktionsbetrag verfügbar
+sein. Die Nutzer anerkennen sämtliche getätigten Zahlungen, welche mit dem
+Taler-Wallet von ihrem digitalen Endgerät erfolgten, selbst wenn diese
+Zahlungen ohne ihre Zustimmung erfolgt sind. Wer ein Guthaben im Taler-Wallet
+einlöst, hat den Wert des Guthabens zur Zahlung verwendet.
+
+Der Verarbeitungsprozess für das Erhöhen und Verringern des Guthabens im
+Taler-Wallet kann je nach Mechanismus mehrere Tage in Anspruch nehmen.
+
+
+Preise, Gebühren und Limiten
+----------------------------
+
+TOPS kann die Gebühren jederzeit ändern. Änderungen haben nur Wirkung auf nach
+der Änderung bezogene Wertmarken. Korrekte Taler-Wallets informieren Nutzer
+über Gebührenänderungen vor dem Bezug von neuen Wertmarken. Der Bezug von
+Wertmarken der TOPS nach Änderungen der Gebühren gilt als Zustimmung zu den
+geänderten Bedingungen.
+
+Es bestehen Limiten von CHF 3.000 pro Monat und CHF 15.000 pro Kalenderjahr
+für das Abheben von e-Geld von einem Girokonto bzw. für den Empfang von
+Peer-to-Peer-Zahlungen zwischen Taler-Wallets mit bestätigter Schweizer
+Mobilfunknummer.
+
+
+Allgemeine Mitwirkungspflichten
+-------------------------------
+
+Zur Nutzung des Zahlungsdiensts sind Nutzer und Begünstigte verpflichtet, TOPS
+bei der Erfüllung regulatorischer und gesetzlicher Vorgaben zu unterstützen.
+Insbesondere kann TOPS über die Identität von wirtschaftlich Berechtigten
+Auskunft verlangen. TOPS hat das Recht und ggf. die gesetzliche Pflicht,
+Nutzer und Begünstigte von der Nutzung des Zahlungsdiensts auszuschliessen,
+sollten diese die erforderlichen Auskünfte verweigern oder unwahre Angaben
+machen.
+
+Zur Nutzung des Zahlungsdiensts gehen *Begünstigte* eine Geschäftsbeziehung
+mit TOPS ein und können ggf. verpflichtet sein, sich bei TOPS zu registrieren
+und die dabei verlangten Informationen zur Verfügung zu stellen. TOPS behält
+sich vor, zur Erfüllung regulatorischer Vorgaben jederzeit weitere
+Informationen zu verlangen.
+
+Es erfolgt keine Kontenanlage der *Nutzer* bei TOPS. Erfasst werden jedoch
+die IBAN-Konten von Nutzern, die CHF an TOPS überweisen, um Wertmarken zu
+kaufen. Die Nutzer brauchen zum Empfang von Peer-to-Peer-Zahlungen mindestens
+eine Schweizer Mobiltelefonnummer zum Empfang von SMS zur Identifizierung.
+
+
+Sorgfalts- und andere Pflichten der Nutzer
+------------------------------------------
+
+Beim Umgang mit dem Zahlungsdienst sind insbesondere folgende
+Sorgfaltspflichten von Nutzern einzuhalten:
+
+* Das Smartphone, PC, Notebook etc. ist vor unbefugter Benutzung oder
+ Manipulation zu schützen (z.B. mittels Geräte- bzw. Displaysperre).
+* Im Schadenfall haben die Nutzer nach bestem Wissen zur Aufklärung des Falls
+ und zur Schadensminderung beizutragen. Bei strafbaren Handlungen ist Anzeige
+ bei der Polizei zu erstatten.
+* Vor jeder Ausführung einer Zahlung sind die Angaben zum Zahlungsempfänger zu
+ überprüfen, um Fehltransaktionen zu verhindern.
+* Die Nutzer sind für die Nutzung verantwortlich und tragen sämtliche Folgen,
+ die sich aus der Verwendung ergeben. Insbesondere werden Handlungen, die
+ eine Drittperson unberechtigt mit dem Taler-Wallet vornimmt, dem Eigentümer
+ des Wallet zugerechnet.
+* Die Nutzer müssen sich darüber im klaren sein, **elektronisches Geld wie
+ Bargeld zu behandeln** und ebenso zu sichern, d.h. ein Backup der Wallet-Daten
+ anzulegen. Die Nutzer der Taler-App sind daher verpflichtet, den Zugang zum
+ digitalen Endgerät zu sichern und vor unbefugtem Zugriff zu bewahren. Sie
+ müssen die Wallet-Daten mit einer Sicherungskopie auf einem anderen Gerät
+ speichern. Die Exportfunktion des Wallet hilft dabei, ein Backup der
+ Wallet-Daten anzulegen und zu speichern. Ein verlorenes Nutzergerät mit
+ einem Wallet darauf ohne Backup auf einem anderen Gerät oder Datenträger
+ bedeutet einen Totalverlust des Guthabens.
+* Es ist dafür zu sorgen, dass sich das Endgerät mit einem darauf
+ installierten Taler-Wallet **innerhalb eines Jahres** nach der letzten
+ Transaktion **mit dem Zahlungsdienst über das Internet verbindet**, ansonsten
+ kann das Guthaben im Wallet verloren werden. Ein Erneuern des Guthabens
+ erfolgt regulär einen Monat vor dem Ende der Gültigkeit des elektronischen
+ Bargelds, die zum Abhebezeitpunkt ca. ein Jahr beträgt.
+
+Die Kommunikation von TOPS zu Nutzern erfolgt grundsätzlich über
+Benachrichtigungen im Protokoll von GNU Taler. Nutzer sind dafür
+verantwortlich, auf entsprechende Benachrichtigungen zu reagieren. TOPS hat
+das Recht, Transaktionen solange nicht auszuführen, bis Nutzer auf diesem Weg
+angeforderte rechtlich notwendige Daten bereitstellen.
+
+
+Haftung
+-------
+
+TOPS haftet nicht für entstandene Verluste oder Schäden der Nutzer aufgrund
+der Verwendung von GNU Taler, insbesondere nicht für Verluste oder Schäden
+
+* aufgrund von Übermittlungsfehlern, technischen Störungen oder Defekten,
+ Ausfällen und unberechtigten Zugriffen oder Eingriffen auf das digitale
+ Endgerät,
+* die ganz oder teilweise auf einen Verstoss der Nutzer gegen diese AGB oder
+ anwendbare Gesetze zurückzuführen sind,
+* aufgrund einer Störung oder Fehlers von Software oder der verwendeten
+ Hardware,
+* aufgrund von Störungen, Unterbrechungen (einschliesslich
+ Systemwartungsarbeiten) oder Überlastungen der relevanten Informatiksysteme
+ bzw. Netze,
+* aufgrund von Zahlungen, die nicht oder verzögert verarbeitet werden,
+* die auf Handlungen oder Unterlassungen von Dritten (inkl. Hilfspersonen der
+ TOPS) zurückzuführen sind,
+
+es sei denn, diese Verluste oder Schäden sind auf grobe Fahrlässigkeit oder
+vorsätzliches Verschulden von TOPS zurückzuführen. TOPS ersetzt Sach- und
+Vermögensschäden je Schadenereignis bis höchstens CHF 1.000. Die Haftung für
+Folgeschäden, entgangenen Gewinn oder Datenverluste ist – soweit gesetzlich
+zulässig – in jedem Fall ausgeschlossen.
+
+
+Nutzung; Missbräuche
+--------------------
+
+Nutzer halten TOPS schadlos für Schäden oder Verluste, die TOPS aufgrund der
+Nichteinhaltung dieser AGB oder gesetzlicher Vorgaben, aufgrund fehlerhafter
+oder unvollständiger Angaben der Nutzer oder der fehlerhaften Ausführung von
+Anweisungen entstehen.
+
+Weicht die Nutzung erheblich vom üblichen Gebrauch ab oder bestehen Anzeichen
+eines rechts- oder vertragswidrigen Verhaltens, kann TOPS die Nutzer zur
+rechts- und vertragskonformen Nutzung anhalten, die Leistungserbringung ohne
+Vorankündigung entschädigungslos ändern, einschränken oder einstellen, die
+Geschäftsbeziehung frist- und entschädigungslos auflösen und gegebenenfalls
+Schadenersatz sowie die Freistellung von Ansprüchen Dritter verlangen. TOPS
+behält sich vor, bei Verletzung von Regeln oder Missbrauch Zahlungen an
+Begünstigte zurückzuhalten.
+
+
+Vorbehalte zu Änderungen an dieser AGB
+--------------------------------------
+
+TOPS kann die AGB jederzeit ändern. Änderungen haben nur Wirkung auf nach der
+Änderung bezogene Wertmarken. Korrekte Taler-Wallets informieren Nutzer über
+Änderungen vor dem Bezug von neuen Wertmarken. Der Bezug von Wertmarken der
+TOPS nach Änderungen der AGB gilt als Zustimmung zu den geänderten
+Bedingungen.
+
+Allfällige Gesetzesbestimmungen, die den Betrieb und die Nutzung von digitalen
+Endgeräten, Zahlungsdiensten, des Internets und sonstiger Infrastruktur
+regeln, bleiben vorbehalten und gelten ab ihrer Inkraftsetzung auch für die
+TOPS-Dienstleistungen.
+
+TOPS behält sich vor, das Angebot von Dienstleistungen jederzeit und ohne
+vorherige Ankündigung zu ändern, zu beschränken oder vollständig einzustellen,
+insbesondere aufgrund rechtlicher Anforderungen, technischer Probleme, zur
+Verhinderung von Missbräuchen, auf behördliche Anordnung oder aus
+Sicherheitsgründen.
+
+TOPS kann die Vertragsbeziehungen (einschliesslich eines Guthabens) jederzeit
+und ohne vorherige Information auf eine andere Gesellschaft übertragen.
+
+
+Geheimhaltung und Datenschutz
+-----------------------------
+
+Personenbezogene Daten werden von TOPS nur im Rahmen der Erfüllung
+gesetzlicher Verpflichtungen erhoben, verarbeitet, aufbewahrt oder
+weitergegeben. Beim Bezahlvorgang mit e-Geld werden keine Daten zur Identität
+der Nutzer erfasst.
+
+TOPS stellt Nutzern auf Anfrage technischen Support zur Verfügung. An der
+Erbringung dieses Supports können Dritte beteiligt sein. Diese erhalten
+hierfür Zugriff auf notwendige personenbezogene Daten zur Kommunikation mit
+den Nutzern.
+
+TOPS verpflichtet sich hinsichtlich der Beschaffung, Bearbeitung und Nutzung
+personenbezogener Daten von Nutzern, die Bestimmungen der schweizerischen
+Datenschutzgesetzgebung, insbesondere des Bundesgesetzes über den Datenschutz
+und der Verordnung über den Datenschutz, einzuhalten.
+
+Alle Systemdaten werden primär in der Schweiz gehostet.
+
+KYC-Prozesse werden ggf. durch Dienstleister gesteuert. Diese sind ebenfalls
+verpflichtet, die Daten nach Recht und Gesetz der Schweiz zu sichern. Die
+eigentlichen Daten des Kernsystems werden auf verschlüsselten Festplatten
+redundant (d.h. mit Backup) gespeichert und sind nur autorisiertem Personal
+zugänglich. Autorisiertes Personal wird von TOPS einer Sicherheitsprüfung
+unterzogen. Das gesamte Design des Zahlungsdiensts GNU Taler wurde strikt nach
+den Grundsätzen "Privacy-by-Design” und "Privacy-by-Default” umgesetzt.
+
+Weitere Informationen zu den Datenbearbeitungen finden sich in der
+Datenschutzerklärung auf der Webseite der TOPS (www.taler-ops.ch).
+
+
+Dauer und Kündigung
+-------------------
+
+Die Geschäftsbeziehung zwischen TOPS und Begünstigten (Händler, Betriebe,
+Verkäufer und sonstige regelmässige Empfänger von Überweisungen des
+Zahlungsdiensts an die begünstigten IBAN-Konten) wird auf eine unbestimmte
+Dauer abgeschlossen. TOPS kann die Geschäftsbeziehung mit den Begünstigten
+jederzeit - insbesondere in Missbrauchsfällen mit sofortiger Wirkung -
+kündigen. Eine schriftliche Kündigung durch TOPS erfolgt an eine der zuletzt
+bekanntgegebenen Adressen der Geschäftspartner (z.B. per E-Mail oder
+Brief). Sollten für über 12 Monate keine Transaktionen an die Begünstigen
+erfolgen, gilt die Geschäftsbeziehung als beendet.
+
+Die Nutzer von Taler-Wallets können das Guthaben in diesen jederzeit an
+Bankkonten in der Schweiz zurücküberweisen lassen und so das Guthaben
+saldieren. Bei einer
+Betriebsaufgabe des Zahlungsdiensts der TOPS werden die Nutzer über die
+bevorstehende Einstellung des Zahlungsdiensts durch das Taler-Protokoll
+informiert und von den Taler-Wallets aufgefordert, das bestehende Guthaben zu
+saldieren. Nutzer, die diese Saldierung unterlassen, verlieren nach 3 Monaten
+den Anspruch auf das danach noch bestehende Guthaben, welches in das Eigentum
+der TOPS übergeht.
+
+
+Anwendbares Recht und Gerichtsstand
+-----------------------------------
+
+Soweit gesetzlich zulässig unterstehen alle Rechtsbeziehungen zwischen TOPS
+und Nutzern ausschliesslich dem materiellen schweizerischen Recht, unter
+Ausschluss von Kollisionsrecht und unter Ausschluss von Staatsverträgen.
+
+Unter dem Vorbehalt von entgegenstehenden zwingenden gesetzlichen
+Bestimmungen ist Biel ausschliesslicher Gerichtsstand und Erfüllungsort. Für
+Nutzer und Begünstigte mit einem Wohnsitz ausserhalb der Schweiz ist Biel
+sodann auch Betreibungsort.
diff --git a/contrib/gana b/contrib/gana
-Subproject 61556908520df557832b04bb5e1ee91c708aeef
+Subproject 898a5d6c244ea66fc83cd8936db903aad14c4f1
diff --git a/contrib/wallet-core b/contrib/wallet-core
-Subproject 240d647da85de6b575d15c37efec04757541e3d
+Subproject 608c1bb0b435eb64420388a1a5809df3d1146bc
diff --git a/debian/changelog b/debian/changelog
index cab5345dc..8d9f58db1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,22 @@
+taler-exchange (0.11.2) unstable; urgency=low
+
+ * Bump version.
+
+ -- Christian Grothoff <grothoff@gnu.org> Wed, 5 Jun 2024 21:50:12 +0200
+
+taler-exchange (0.11.1) unstable; urgency=low
+
+ * Fixed issues with restarts in service files.
+ * Fixed minor translation issues.
+
+ -- Christian Grothoff <grothoff@gnu.org> Tue, 21 May 2024 14:50:12 +0200
+
+taler-exchange (0.11.0) unstable; urgency=low
+
+ * Releasing 0.11.0 with updated terms of service draft.
+
+ -- Christian Grothoff <grothoff@gnu.org> Wed, 15 May 2024 17:50:12 +0200
+
taler-exchange (0.10.2) unstable; urgency=low
* Updated man pages and other resources for release.
diff --git a/debian/control b/debian/control
index cf99dd1ed..52ab79c5f 100644
--- a/debian/control
+++ b/debian/control
@@ -18,7 +18,7 @@ Build-Depends:
libjansson-dev (>= 2.13),
libltdl-dev (>=2.2),
libmicrohttpd-dev (>=0.9.71),
- libpq-dev (>=14),
+ libpq-dev (>=15),
libsodium-dev (>=1.0.11),
libunistring-dev (>=0.9.2),
po-debconf,
@@ -90,7 +90,7 @@ Recommends:
taler-exchange-offline (= ${binary:Version}),
taler-terms-generator,
apache2 | nginx | httpd,
- postgresql (>=14.0)
+ postgresql (>=15.0)
Description: GNU's payment system operator.
GNU Taler is the privacy-preserving digital payment
system from the GNU project. This package contains the
diff --git a/debian/taler-exchange.taler-exchange-aggregator.service b/debian/taler-exchange.taler-exchange-aggregator.service
index db297270f..84b757eda 100644
--- a/debian/taler-exchange.taler-exchange-aggregator.service
+++ b/debian/taler-exchange.taler-exchange-aggregator.service
@@ -9,7 +9,7 @@ Type=simple
Restart=always
RestartMode=direct
RestartSec=1s
-RestartPreventExitStatus=2 3 4 5 6 9
+RestartPreventExitStatus=9
ExecStart=/usr/bin/taler-exchange-aggregator -c /etc/taler/taler.conf -L INFO
StandardOutput=journal
StandardError=journal
diff --git a/debian/taler-exchange.taler-exchange-closer.service b/debian/taler-exchange.taler-exchange-closer.service
index ba57522b0..9cdc534f9 100644
--- a/debian/taler-exchange.taler-exchange-closer.service
+++ b/debian/taler-exchange.taler-exchange-closer.service
@@ -9,7 +9,7 @@ Type=simple
Restart=always
RestartMode=direct
RestartSec=1s
-RestartPreventExitStatus=2 3 4 5 6 9
+RestartPreventExitStatus=9
ExecStart=/usr/bin/taler-exchange-closer -c /etc/taler/taler.conf -L INFO
StandardOutput=journal
StandardError=journal
diff --git a/debian/taler-exchange.taler-exchange-expire.service b/debian/taler-exchange.taler-exchange-expire.service
index 8fd9a9f74..2a9552f76 100644
--- a/debian/taler-exchange.taler-exchange-expire.service
+++ b/debian/taler-exchange.taler-exchange-expire.service
@@ -9,7 +9,7 @@ Type=simple
Restart=always
RestartMode=direct
RestartSec=1s
-RestartPreventExitStatus=2 3 4 5 6 9
+RestartPreventExitStatus=9
ExecStart=/usr/bin/taler-exchange-expire -c /etc/taler/taler.conf -L INFO
StandardOutput=journal
StandardError=journal
diff --git a/debian/taler-exchange.taler-exchange-httpd.service b/debian/taler-exchange.taler-exchange-httpd.service
index cbde72522..d7e9b1e36 100644
--- a/debian/taler-exchange.taler-exchange-httpd.service
+++ b/debian/taler-exchange.taler-exchange-httpd.service
@@ -14,7 +14,7 @@ Type=simple
Restart=always
RestartMode=direct
RestartSec=1ms
-RestartPreventExitStatus=2 3 4 5 6 9
+RestartPreventExitStatus=9
# Disable the service if more than 5 restarts are encountered within 5s.
# These are usually the systemd defaults, but can be overwritten, thus we set
diff --git a/debian/taler-exchange.taler-exchange-transfer.service b/debian/taler-exchange.taler-exchange-transfer.service
index ffe2f1955..77ada8f86 100644
--- a/debian/taler-exchange.taler-exchange-transfer.service
+++ b/debian/taler-exchange.taler-exchange-transfer.service
@@ -9,7 +9,7 @@ Type=simple
Restart=always
RestartMode=direct
RestartSec=1s
-RestartPreventExitStatus=2 3 4 5 6 9
+RestartPreventExitStatus=9
ExecStart=/usr/bin/taler-exchange-transfer -c /etc/taler/taler.conf -L INFO
StandardOutput=journal
StandardError=journal
diff --git a/debian/taler-exchange.taler-exchange-wirewatch.service b/debian/taler-exchange.taler-exchange-wirewatch.service
index 40103bb51..7a7dc60b0 100644
--- a/debian/taler-exchange.taler-exchange-wirewatch.service
+++ b/debian/taler-exchange.taler-exchange-wirewatch.service
@@ -9,7 +9,7 @@ Type=simple
Restart=always
RestartMode=direct
RestartSec=1s
-RestartPreventExitStatus=2 3 4 5 6 9
+RestartPreventExitStatus=9
RuntimeMaxSec=3600s
ExecStart=/usr/bin/taler-exchange-wirewatch -c /etc/taler/taler.conf -L INFO
StandardOutput=journal
diff --git a/doc/doxygen/taler.doxy b/doc/doxygen/taler.doxy
index 1516811c5..8efcf0c0f 100644
--- a/doc/doxygen/taler.doxy
+++ b/doc/doxygen/taler.doxy
@@ -47,7 +47,7 @@ PROJECT_NAME = "GNU Taler: Exchange"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 0.10.2
+PROJECT_NUMBER = 0.11.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/doc/prebuilt b/doc/prebuilt
-Subproject b8d2d2fa2ed2a771880f451725176f256583cb2
+Subproject c1a885ac1f9d9b2fdef19a976bed01dab4f7d85
diff --git a/src/bank-lib/Makefile.am b/src/bank-lib/Makefile.am
index a292dcece..ef7704684 100644
--- a/src/bank-lib/Makefile.am
+++ b/src/bank-lib/Makefile.am
@@ -72,8 +72,6 @@ libtalerfakebank_la_SOURCES = \
fakebank_bank_get_withdrawals.c fakebank_bank_get_withdrawals.h \
fakebank_bank_get_root.c fakebank_bank_get_root.h \
fakebank_bank_post_accounts_withdrawals.c fakebank_bank_post_accounts_withdrawals.h \
- fakebank_bank_post_withdrawals_abort.c fakebank_bank_post_withdrawals_abort.h \
- fakebank_bank_post_withdrawals_confirm.c fakebank_bank_post_withdrawals_confirm.h \
fakebank_bank_post_withdrawals_id_op.c fakebank_bank_post_withdrawals_id_op.h \
fakebank_bank_testing_register.c fakebank_bank_testing_register.h \
fakebank_tbr.c fakebank_tbr.h \
diff --git a/src/bank-lib/fakebank.h b/src/bank-lib/fakebank.h
index a9d61d8b1..98c1bb020 100644
--- a/src/bank-lib/fakebank.h
+++ b/src/bank-lib/fakebank.h
@@ -161,7 +161,7 @@ struct WithdrawalOperation
/**
* Amount transferred.
*/
- struct TALER_Amount amount;
+ struct TALER_Amount *amount;
/**
* Public key of the reserve, wire transfer subject.
diff --git a/src/bank-lib/fakebank_bank.c b/src/bank-lib/fakebank_bank.c
index 7c2d39ab4..e9a437e21 100644
--- a/src/bank-lib/fakebank_bank.c
+++ b/src/bank-lib/fakebank_bank.c
@@ -34,8 +34,6 @@
#include "fakebank_bank_get_withdrawals.h"
#include "fakebank_bank_get_root.h"
#include "fakebank_bank_post_accounts_withdrawals.h"
-#include "fakebank_bank_post_withdrawals_abort.h"
-#include "fakebank_bank_post_withdrawals_confirm.h"
#include "fakebank_bank_post_withdrawals_id_op.h"
#include "fakebank_bank_testing_register.h"
@@ -167,55 +165,6 @@ TALER_FAKEBANK_bank_main_ (
wid);
}
- if ( (0 == strncmp (url,
- "/withdrawals/",
- strlen ("/withdrawals/"))) &&
- (0 == strcasecmp (method,
- MHD_HTTP_METHOD_POST)) )
- {
- /* POST /withdrawals/$WID* */
- const char *wid = url + strlen ("/withdrawals/");
- const char *opid = strchr (wid,
- '/');
- char *wi;
-
- if (NULL == opid)
- {
- /* POST /withdrawals/$WID (not defined) */
- GNUNET_break_op (0);
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_NOT_FOUND,
- TALER_EC_GENERIC_ENDPOINT_UNKNOWN,
- url);
- }
- wi = GNUNET_strndup (wid,
- opid - wid);
- if (0 == strcmp (opid,
- "/abort"))
- {
- /* POST /withdrawals/$WID/abort */
- MHD_RESULT ret;
-
- ret = TALER_FAKEBANK_bank_withdrawals_abort_ (h,
- connection,
- wi);
- GNUNET_free (wi);
- return ret;
- }
- if (0 == strcmp (opid,
- "/confirm"))
- {
- /* POST /withdrawals/$WID/confirm */
- MHD_RESULT ret;
-
- ret = TALER_FAKEBANK_bank_withdrawals_confirm_ (h,
- connection,
- wi);
- GNUNET_free (wi);
- return ret;
- }
- }
-
if (0 == strncmp (url,
"/accounts/",
strlen ("/accounts/")))
diff --git a/src/bank-lib/fakebank_bank_accounts_withdrawals.c b/src/bank-lib/fakebank_bank_accounts_withdrawals.c
index bb435d975..d956a591f 100644
--- a/src/bank-lib/fakebank_bank_accounts_withdrawals.c
+++ b/src/bank-lib/fakebank_bank_accounts_withdrawals.c
@@ -96,6 +96,7 @@ TALER_FAKEBANK_bank_account_withdrawals_ (
&wo->reserve_pub)
: GNUNET_JSON_pack_string ("selected_reserve_pub",
NULL)),
- TALER_JSON_pack_amount ("amount",
- &wo->amount));
+ GNUNET_JSON_pack_allow_null (
+ TALER_JSON_pack_amount ("amount",
+ wo->amount)));
}
diff --git a/src/bank-lib/fakebank_bank_get_withdrawals.c b/src/bank-lib/fakebank_bank_get_withdrawals.c
index 7f65e8660..84f65cc40 100644
--- a/src/bank-lib/fakebank_bank_get_withdrawals.c
+++ b/src/bank-lib/fakebank_bank_get_withdrawals.c
@@ -82,6 +82,9 @@ TALER_FAKEBANK_bank_get_withdrawals_ (
&wo->reserve_pub)
: GNUNET_JSON_pack_string ("selected_reserve_pub",
NULL)),
- TALER_JSON_pack_amount ("amount",
- &wo->amount));
+ GNUNET_JSON_pack_string ("currency",
+ h->currency),
+ GNUNET_JSON_pack_allow_null (
+ TALER_JSON_pack_amount ("amount",
+ wo->amount)));
}
diff --git a/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c b/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c
index 7fbb93352..7d77f7626 100644
--- a/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c
+++ b/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c
@@ -67,7 +67,11 @@ do_post_account_withdrawals (
}
wo = GNUNET_new (struct WithdrawalOperation);
wo->debit_account = acc;
- wo->amount = *amount;
+ if (NULL != amount)
+ {
+ wo->amount = GNUNET_new (struct TALER_Amount);
+ *wo->amount = *amount;
+ }
if (NULL == h->wops)
{
h->wops = GNUNET_CONTAINER_multishortmap_create (32,
@@ -83,6 +87,8 @@ do_post_account_withdrawals (
&wo->wopid,
wo,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
+
+
break;
}
{
@@ -169,11 +175,15 @@ TALER_FAKEBANK_bank_post_account_withdrawals_ (
{
struct TALER_Amount amount;
+ bool amount_missing;
+ struct TALER_Amount *amount_ptr;
enum GNUNET_GenericReturnValue ret;
struct GNUNET_JSON_Specification spec[] = {
- TALER_JSON_spec_amount ("amount",
- h->currency,
- &amount),
+ GNUNET_JSON_spec_mark_optional (
+ TALER_JSON_spec_amount ("amount",
+ h->currency,
+ &amount),
+ &amount_missing),
GNUNET_JSON_spec_end ()
};
@@ -186,10 +196,13 @@ TALER_FAKEBANK_bank_post_account_withdrawals_ (
json_decref (json);
return (GNUNET_NO == ret) ? MHD_YES : MHD_NO;
}
+
+ amount_ptr = amount_missing ? NULL : &amount;
+
res = do_post_account_withdrawals (h,
connection,
account_name,
- &amount);
+ amount_ptr);
}
json_decref (json);
return res;
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_abort.c b/src/bank-lib/fakebank_bank_post_withdrawals_abort.c
deleted file mode 100644
index f8ebf1b93..000000000
--- a/src/bank-lib/fakebank_bank_post_withdrawals_abort.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- This file is part of TALER
- (C) 2016-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with TALER; see the file COPYING. If not,
- see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file bank-lib/fakebank_bank_post_withdrawals_abort.c
- * @brief implement bank API withdrawals /abort endpoint
- * @author Christian Grothoff <christian@grothoff.org>
- */
-#include "platform.h"
-#include <pthread.h>
-#include "taler_fakebank_lib.h"
-#include "taler_bank_service.h"
-#include "taler_mhd_lib.h"
-#include <gnunet/gnunet_mhd_compat.h>
-#include "fakebank.h"
-#include "fakebank_bank_post_withdrawals_abort.h"
-#include "fakebank_common_lookup.h"
-#include "fakebank_common_lp.h"
-
-
-MHD_RESULT
-TALER_FAKEBANK_bank_withdrawals_abort_ (
- struct TALER_FAKEBANK_Handle *h,
- struct MHD_Connection *connection,
- const char *withdrawal_id)
-{
- struct WithdrawalOperation *wo;
-
- GNUNET_assert (0 ==
- pthread_mutex_lock (&h->big_lock));
- wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h,
- withdrawal_id);
- if (NULL == wo)
- {
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_NOT_FOUND,
- TALER_EC_BANK_TRANSACTION_NOT_FOUND,
- withdrawal_id);
- }
- if (wo->confirmation_done)
- {
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_CONFLICT,
- TALER_EC_BANK_ABORT_CONFIRM_CONFLICT,
- withdrawal_id);
- }
- wo->aborted = true;
- TALER_FAKEBANK_notify_withdrawal_ (h,
- wo);
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_json (connection,
- json_object (), /* FIXME: #7301 */
- MHD_HTTP_OK);
-}
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_abort.h b/src/bank-lib/fakebank_bank_post_withdrawals_abort.h
deleted file mode 100644
index 920b0b802..000000000
--- a/src/bank-lib/fakebank_bank_post_withdrawals_abort.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- This file is part of TALER
- (C) 2016-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with TALER; see the file COPYING. If not,
- see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file bank-lib/fakebank_bank_post_withdrawals_abort.h
- * @brief implement bank API withdrawals /abort endpoint
- * @author Christian Grothoff <christian@grothoff.org>
- */
-#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_ABORT_H
-#define FAKEBANK_BANK_POST_WITHDRAWALS_ABORT_H
-
-#include "taler_fakebank_lib.h"
-#include "taler_bank_service.h"
-#include "taler_mhd_lib.h"
-#include <gnunet/gnunet_mhd_compat.h>
-#include "fakebank.h"
-
-
-/**
- * Handle POST /withdrawals/{withdrawal_id}/abort request.
- *
- * @param h our fakebank handle
- * @param connection the connection
- * @param withdrawal_id the withdrawal operation identifier
- * @return MHD result code
- */
-MHD_RESULT
-TALER_FAKEBANK_bank_withdrawals_abort_ (
- struct TALER_FAKEBANK_Handle *h,
- struct MHD_Connection *connection,
- const char *withdrawal_id);
-
-#endif
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c
deleted file mode 100644
index 2fa67c970..000000000
--- a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- This file is part of TALER
- (C) 2016-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with TALER; see the file COPYING. If not,
- see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file bank-lib/fakebank_bank_post_withdrawals_confirm.c
- * @brief implement bank API withdrawals /confirm endpoint
- * @author Christian Grothoff <christian@grothoff.org>
- */
-#include "platform.h"
-#include <pthread.h>
-#include "taler_fakebank_lib.h"
-#include "taler_bank_service.h"
-#include "taler_mhd_lib.h"
-#include <gnunet/gnunet_mhd_compat.h>
-#include "fakebank.h"
-#include "fakebank_bank_post_withdrawals_confirm.h"
-#include "fakebank_common_lookup.h"
-#include "fakebank_common_lp.h"
-#include "fakebank_common_make_admin_transfer.h"
-
-
-MHD_RESULT
-TALER_FAKEBANK_bank_withdrawals_confirm_ (
- struct TALER_FAKEBANK_Handle *h,
- struct MHD_Connection *connection,
- const char *withdrawal_id)
-{
- struct WithdrawalOperation *wo;
-
- GNUNET_assert (0 ==
- pthread_mutex_lock (&h->big_lock));
- wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h,
- withdrawal_id);
- if (NULL == wo)
- {
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_NOT_FOUND,
- TALER_EC_BANK_TRANSACTION_NOT_FOUND,
- withdrawal_id);
- }
- if (NULL == wo->exchange_account)
- {
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_BAD_REQUEST,
- TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED,
- NULL);
- }
- if (wo->aborted)
- {
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_CONFLICT,
- TALER_EC_BANK_CONFIRM_ABORT_CONFLICT,
- withdrawal_id);
- }
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- if (GNUNET_OK !=
- TALER_FAKEBANK_make_admin_transfer_ (
- h,
- wo->debit_account->account_name,
- wo->exchange_account->account_name,
- &wo->amount,
- &wo->reserve_pub,
- &wo->row_id,
- &wo->timestamp))
- {
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_CONFLICT,
- TALER_EC_BANK_DUPLICATE_RESERVE_PUB_SUBJECT,
- NULL);
- }
- /* Re-acquiring the lock and continuing to operate on 'wo'
- is currently (!) acceptable because we NEVER free 'wo'
- until shutdown. We may want to revise this if keeping
- all withdraw operations in RAM becomes an issue... */
- GNUNET_assert (0 ==
- pthread_mutex_lock (&h->big_lock));
- wo->confirmation_done = true;
- TALER_FAKEBANK_notify_withdrawal_ (h,
- wo);
- GNUNET_assert (0 ==
- pthread_mutex_unlock (&h->big_lock));
- return TALER_MHD_reply_json (connection,
- json_object (),
- MHD_HTTP_OK);
-}
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h
deleted file mode 100644
index 56cd2deda..000000000
--- a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- This file is part of TALER
- (C) 2016-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with TALER; see the file COPYING. If not,
- see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file bank-lib/fakebank_bank_post_withdrawals_confirm.h
- * @brief implement bank API withdrawals /confirm endpoint
- * @author Christian Grothoff <christian@grothoff.org>
- */
-#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_CONFIRM_H
-#define FAKEBANK_BANK_POST_WITHDRAWALS_CONFIRM_H
-
-#include "taler_fakebank_lib.h"
-#include "taler_bank_service.h"
-#include "taler_mhd_lib.h"
-#include <gnunet/gnunet_mhd_compat.h>
-#include "fakebank.h"
-
-
-/**
- * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/confirm request.
- *
- * @param h our fakebank handle
- * @param connection the connection
- * @param withdrawal_id the withdrawal operation identifier
- * @return MHD result code
- */
-MHD_RESULT
-TALER_FAKEBANK_bank_withdrawals_confirm_ (
- struct TALER_FAKEBANK_Handle *h,
- struct MHD_Connection *connection,
- const char *withdrawal_id);
-
-#endif
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c
index fe5cc982d..2adc07df0 100644
--- a/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c
+++ b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c
@@ -91,6 +91,15 @@ bank_withdrawals_confirm (
TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED,
NULL);
}
+ if (NULL == wo->amount)
+ {
+ GNUNET_assert (0 ==
+ pthread_mutex_unlock (&h->big_lock));
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_BAD_REQUEST,
+ TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED,
+ NULL);
+ }
if (wo->aborted)
{
GNUNET_assert (0 ==
@@ -107,7 +116,7 @@ bank_withdrawals_confirm (
h,
wo->debit_account->account_name,
wo->exchange_account->account_name,
- &wo->amount,
+ wo->amount,
&wo->reserve_pub,
&wo->row_id,
&wo->timestamp))
diff --git a/src/bank-lib/fakebank_stop.c b/src/bank-lib/fakebank_stop.c
index e31d47523..ff6b084f4 100644
--- a/src/bank-lib/fakebank_stop.c
+++ b/src/bank-lib/fakebank_stop.c
@@ -77,6 +77,7 @@ free_withdraw_op (void *cls,
(void) cls;
(void) key;
+ GNUNET_free (wo->amount);
GNUNET_free (wo);
return GNUNET_OK;
}
diff --git a/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c b/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c
index 4749bda77..fd6f3b7c4 100644
--- a/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c
+++ b/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c
@@ -123,8 +123,9 @@ TALER_FAKEBANK_tbi_get_withdrawal_operation_ (
GNUNET_JSON_pack_allow_null (
GNUNET_JSON_pack_string ("suggested_exchange",
h->exchange_url)),
- TALER_JSON_pack_amount ("amount",
- &wc->wo->amount),
+ GNUNET_JSON_pack_allow_null (
+ TALER_JSON_pack_amount ("amount",
+ wc->wo->amount)),
GNUNET_JSON_pack_array_steal ("wire_types",
wt));
}
diff --git a/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c b/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c
index 38b92e494..29f1e7475 100644
--- a/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c
+++ b/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c
@@ -40,6 +40,8 @@
* @param wopid the withdrawal operation identifier
* @param reserve_pub public key of the reserve
* @param exchange_payto_uri payto://-URI of the exchange
+ * @param amount chosen by the client, or NULL to use the
+ * pre-determined amount
* @return MHD result code
*/
static MHD_RESULT
@@ -48,7 +50,8 @@ do_post_withdrawal (
struct MHD_Connection *connection,
const char *wopid,
const struct TALER_ReservePublicKeyP *reserve_pub,
- const char *exchange_payto_uri)
+ const char *exchange_payto_uri,
+ const struct TALER_Amount *amount)
{
struct WithdrawalOperation *wo;
char *credit_name;
@@ -134,6 +137,35 @@ do_post_withdrawal (
TALER_EC_BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT,
"exchange account changed");
}
+ if ( (NULL != wo->amount) && (NULL != amount) && (0 != TALER_amount_cmp (wo->
+ amount,
+ amount)) )
+ {
+ GNUNET_assert (0 ==
+ pthread_mutex_unlock (&h->big_lock));
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_CONFLICT,
+ TALER_EC_BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT,
+ "amount changed");
+ }
+ if (NULL == wo->amount)
+ {
+ if (NULL == amount)
+ {
+ GNUNET_assert (0 ==
+ pthread_mutex_unlock (&h->big_lock));
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_BAD_REQUEST,
+ TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED,
+ "amount missing");
+ }
+ else
+ {
+ wo->amount = GNUNET_new (struct TALER_Amount);
+ *wo->amount = *amount;
+ }
+ }
+ GNUNET_assert (NULL != wo->amount);
wo->exchange_account = credit_account;
wo->reserve_pub = *reserve_pub;
wo->selection_done = true;
@@ -203,11 +235,19 @@ TALER_FAKEBANK_tbi_post_withdrawal (
struct TALER_ReservePublicKeyP reserve_pub;
const char *exchange_payto_url;
enum GNUNET_GenericReturnValue ret;
+ struct TALER_Amount amount;
+ bool amount_missing;
+ struct TALER_Amount *amount_ptr;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("reserve_pub",
&reserve_pub),
GNUNET_JSON_spec_string ("selected_exchange",
&exchange_payto_url),
+ GNUNET_JSON_spec_mark_optional (
+ TALER_JSON_spec_amount ("amount",
+ h->currency,
+ &amount),
+ &amount_missing),
GNUNET_JSON_spec_end ()
};
@@ -220,11 +260,15 @@ TALER_FAKEBANK_tbi_post_withdrawal (
json_decref (json);
return (GNUNET_NO == ret) ? MHD_YES : MHD_NO;
}
+
+ amount_ptr = amount_missing ? NULL : &amount;
+
res = do_post_withdrawal (h,
connection,
wopid,
&reserve_pub,
- exchange_payto_url);
+ exchange_payto_url,
+ amount_ptr);
}
json_decref (json);
return res;
diff --git a/src/exchangedb/exchangedb_accounts.c b/src/exchangedb/exchangedb_accounts.c
index e668134e1..3f0e47afb 100644
--- a/src/exchangedb/exchangedb_accounts.c
+++ b/src/exchangedb/exchangedb_accounts.c
@@ -190,27 +190,35 @@ add_account_cb (void *cls,
( (credit) &&
(lc->credit) ) ) )
return; /* not enabled for us, skip */
- if (GNUNET_OK !=
+ if (GNUNET_OK ==
GNUNET_CONFIGURATION_get_value_string (cfg,
section,
"PAYTO_URI",
&payto_uri))
{
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_WARNING,
- section,
- "PAYTO_URI");
- return;
+ method = TALER_payto_get_method (payto_uri);
+ GNUNET_free (payto_uri);
+ if (NULL == method)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "payto URI in config ([%s]/PAYTO_URI) malformed\n",
+ section);
+ lc->res = GNUNET_SYSERR;
+ return;
+ }
}
- method = TALER_payto_get_method (payto_uri);
- GNUNET_free (payto_uri);
- if (NULL == method)
+ else if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_string (cfg,
+ section,
+ "WIRE_METHOD",
+ &method))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "payto URI in config ([%s]/PAYTO_URI) malformed\n",
- section);
- lc->res = GNUNET_SYSERR;
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_WARNING,
+ section,
+ "WIRE_METHOD");
return;
}
+ GNUNET_assert (NULL != method);
wa = GNUNET_new (struct WireAccount);
wa->section_name = GNUNET_strdup (section);
wa->method = method;
diff --git a/src/testing/testing_api_cmd_signal.c b/src/testing/testing_api_cmd_signal.c
index b2116ebf6..be3a58bdd 100644
--- a/src/testing/testing_api_cmd_signal.c
+++ b/src/testing/testing_api_cmd_signal.c
@@ -62,7 +62,6 @@ signal_run (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Signaling '%d'..\n",
ss->signal);
- sleep (6);
TALER_TESTING_interpreter_next (is);
}