This commit is contained in:
Christian Grothoff 2020-02-11 15:40:37 +01:00
commit 3ad698d018
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
81 changed files with 4868 additions and 1264 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@
*app.info
*.gcno
*.gcda
*.mo
.dirstamp
doc/coverage/
doc/taler-exchange.cps

View File

@ -474,10 +474,8 @@ AM_CONDITIONAL([HAVE_TWISTER], [false])
AC_CONFIG_FILES([Makefile
contrib/Makefile
contrib/pp/Makefile
contrib/tos/Makefile
doc/Makefile
doc/doxygen/Makefile
doc/doxygen/Makefile
src/Makefile
src/auditor/Makefile
src/auditordb/Makefile

View File

@ -1,12 +1,62 @@
SUBDIRS = . tos pp
SUBDIRS = .
# English (en)
tosendir=$(pkgdatadir)/tos/en
# English (en)
ppendir=$(pkgdatadir)/pp/en
tosen_DATA = \
tos/en/0.txt \
tos/en/0.pdf \
tos/en/0.epub \
tos/en/0.xml \
tos/en/0.html
ppen_DATA = \
pp/en/0.txt \
pp/en/0.pdf \
pp/en/0.epub \
pp/en/0.xml \
pp/en/0.html
bin_SCRIPTS = \
taler-bank-manage-testing
taler-bank-manage-testing \
taler-exchange-revoke
EXTRA_DIST = \
$(bin_SCRIPTS) \
$(tosen_DATA) \
update-tos.sh \
update-pp.sh \
tos/Makefile \
tos/README \
tos/tos.rst \
tos/conf.py \
tos/locale/de/LC_MESSAGES/tos.po \
pp/Makefile \
pp/README \
pp/tos.rst \
pp/conf.py \
pp/locale/pp/LC_MESSAGES/pp.po \
auditor-report.tex.j2 \
coverage.sh \
gnunet.tag \
microhttpd.tag \
render.py
# Change the set of supported languages here. You should
# also update tos'XX'data and EXTRA_DIST accordingly.
TOS_LANGUAGES="en de"
PP_LANGUAGES="en de"
# Change the terms-of-service version (Etag) to generate here!
# This value should be incremented whenever there is a substantive
# change in the original text (but not for the translations).
TOS_VERSION=0
PP_VERSION=0
update-tos:
VERSION=$(TOS_VERSION) ./update-tos.sh $(TOS_LANGUAGES)
update-pp:
VERSION=$(PP_VERSION) ./update-pp.sh $(PP_LANGUAGES)

3
contrib/pp/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
sphinx.err
sphinx.log
_build/

View File

@ -1,11 +0,0 @@
# English (en)
ppendir=$(pkgdatadir)/pp/en
ppen_DATA = \
en/0.txt \
en/0.docx \
en/0.html
EXTRA_DIST = \
$(ppen_DATA)

58
contrib/pp/README Normal file
View File

@ -0,0 +1,58 @@
This directory contains the privacy policy (template) for exchange
operators.
Dependencies
============
Generating a new Privacy Policy requires Sphinx, LaTeX with babel
packages for all supported languages. On Debian, you should
at least install:
$ apt install python3-sphinx sphinx-intl texlive-lang-german texlive-lang-english
(NOTE: List may be incomplete.)
Updating the Privacy Policy
===========================
The master file with the Privacy Policy is 'pp.rst'.
If you make substantial changes, you MUST change the "PP_VERSION"
in contrib/Makefile.am to the new Etag.
To begin the translation into other languages after editing the master
file, run
$ make gettext
to generate the master PO file. Then, run
$ sphinx-intl update -p _build/locale/ -l de -l fr -l it
to update the PO files for the various languages (extend the list of
languages as necessary). The PO files for the translators are kept
at locale/$LANG/LC_MESSAGES/pp.po for the language $LANG.
Once all PO files have been updated with new translations, run
$ make update-pp
in the "contrib/" directory to generate all of the formats. The
respective make rule calls the '../update-pp.sh' script in the
contrib/ directory, which calls the 'Makefile' in the pp/
directory for the various supported languages and file formats
and then moves the generated files to the target directory
('contrib/pp/$LANG/$VERSION.$FORMAT')
Adding a new language
=====================
To add a new language $LANG, add $LANG to "PP_LANGUAGES" in
'contrib/Makefile.am' and run
$ sphinx-intl update -p _build/gettext -l $LANG
to generate the PO template.

282
contrib/pp/conf.py Normal file
View File

@ -0,0 +1,282 @@
"""
This file is part of GNU TALER.
Copyright (C) 2014-2020 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2.1, 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
@author Florian Dold
@author Benedikt Muller
@author Sree Harsha Totakura
@author Marcello Stanisci
"""
# -*- coding: utf-8 -*-
#
# neuro documentation build configuration file, created by
# sphinx-quickstart on Sat May 31 13:11:06 2014.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
sys.path.append(os.path.abspath('_exts'))
#import taler_sphinx_theme
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '1.8.5'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.todo',
'sphinx.ext.imgmath',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
source_suffix = {
'.rst': 'restructuredtext',
}
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'pp'
# General information about the project.
project = u'pp'
copyright = u'2014-2020 Taler Systems SA (GPLv3+ or GFDL 1.3+)'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '0'
# The full version, including alpha/beta/rc tags.
release = '0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# language = "en de"
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build', '_exts', 'cf', 'prebuilt']
# The reST default role (used for this markup: `text`) to use for all
# documents.
# default_role = "ts:type"
locale_dirs = ['locale/']
gettext_compact = False
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'epub'
#html_theme_path = taler_sphinx_theme.html_theme_path()
#html_sidebars = {'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']}
rst_epilog = ""
html_show_sphinx = False
html_theme_options = {
# Set the name of the project to appear in the sidebar
"relbar1": "false",
"footer": "false",
}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
html_title = "Taler Privacy Policy"
# A shorter title for the navigation bar. Default is the same as html_title.
html_short_title = "Privacy Policy"
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('pp', 'pp.tex',
'Privacy Policy', 'GNU Taler team', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
# latex_appendices = ["fdl-1.3"]
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# If true, show URL addresses after external links.
#man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
# -- Options for epub output ----------------------------
epub_basename = "pp"
epub_title = "Privacy Policy"

Binary file not shown.

BIN
contrib/pp/en/0.epub Normal file

Binary file not shown.

View File

@ -1,217 +1,180 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Our Privacy Policy</title>
<meta name="author" content="Michael Widmer"/>
<meta name="created" content="2019-12-11T15:01:00"/>
</head>
<body>
<h1>Privacy Policy</h1>
<p>
Last Updated: 11.12.2019
</p>
<p>
This
Privacy Policy describes the policies and procedures of Taler Systems
SA (“we,” “our,” or “us”) pertaining to the collection,
use, and disclosure of your information on our sites and related
mobile applications and products we offer (the “Services” or
“Taler Wallet”). This Privacy Statement applies to your personal
data when you use our Services, and does not apply to online websites
or services that we do not own or control.
</p>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Privacy Policy &#8212; Taler Privacy Policy</title>
<link rel="stylesheet" href="_static/epub.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
</head><body>
<h2>OVERVIEW</h2>
<p>Your
privacy is important to us. We follow a few fundamental principles:
We dont ask you for personally identifiable information (defined
below). That being said, your contact information, such as your phone
number, social media handle, or email address (depending on how you
contact us), may be collected when you communicate with us, for
example to report a bug or other error related to the Taler Wallet.
We dont share your information with third parties except when
strictly required to deliver you our Services and products, or to
comply with the law. If you have any questions or concerns about this
policy, please reach out to us at privacy@taler-systems.net.
</p>
<h2>HOW YOU ACCEPT THIS POLICY</h2>
<p>By
using our Services or visiting our sites, you agree to the use,
disclosure, and procedures outlined in this Privacy Policy.
</p>
<h2>WHAT PERSONAL INFORMATION DO WE COLLECT FROM OUR USERS?</h2>
<p>The
information we collect from you falls into two categories: (i)
personally identifiable information (i.e., data that could
potentially identify you as an individual) (“Personal
Information”), and (ii) non-personally identifiable information
(i.e., information that cannot be used to identify who you are)
(“Non-Personal Information”). This Privacy Policy covers both
categories and will tell you how we might collect and use each type.
</p>
<p>We
do our best to not collect any Personal Information from Taler Wallet
users. We believe that the Taler Wallet never transmits personal
information to our services without at least clear implied consent,
and we only process and retain information with a strict business
need. That being said, when using our Services, we inherently have
to collect the following information:
</p>
<p>
<ul>
<li>Bank
account details necessary when receiving funds from you to top-up
your wallet or to transfer funds to you when you are being paid via
Taler. At the current experimental stage, only the pseudonym and
password you entered in the bank demonstrator is stored.</p>
<li>The
amounts being withdrawn or deposited, with associated unique
transaction identifiers and cryptographic signatures authorizing the
transaction. Note that for purchases, we cannot identify the buyer
from the collected data, so when you spend money, we only receive
non-personal information.</p>
<li>When
you contact us. We may collect certain information if you choose to
contact us, for example to report a bug or other error with the
Taler Wallet. This may include contact information such as your
name, email address or phone number depending on the method you
choose to contact us. </p>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="privacy-policy">
<h1>Privacy Policy<a class="headerlink" href="#privacy-policy" title="Permalink to this headline"></a></h1>
<p>Last Updated: 11.12.2019</p>
<p>This Privacy Policy describes the policies and procedures of Taler Systems SA
(“we,” “our,” or “us”) pertaining to the collection, use, and disclosure of
your information on our sites and related mobile applications and products we
offer (the “Services” or “Taler Wallet”). This Privacy Statement applies to
your personal data when you use our Services, and does not apply to online
websites or services that we do not own or control.</p>
<div class="section" id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>Your privacy is important to us. We follow a few fundamental principles: We
dont ask you for personally identifiable information (defined below). That
being said, your contact information, such as your phone number, social media
handle, or email address (depending on how you contact us), may be collected
when you communicate with us, for example to report a bug or other error
related to the Taler Wallet. We dont share your information with third
parties except when strictly required to deliver you our Services and
products, or to comply with the law. If you have any questions or concerns
about this policy, please reach out to us at <a class="reference external" href="mailto:privacy&#37;&#52;&#48;taler-systems&#46;net">privacy<span>&#64;</span>taler-systems<span>&#46;</span>net</a>.</p>
</div>
<div class="section" id="how-you-accept-this-policy">
<h2>How you accept this policy<a class="headerlink" href="#how-you-accept-this-policy" title="Permalink to this headline"></a></h2>
<p>By using our Services or visiting our sites, you agree to the use, disclosure,
and procedures outlined in this Privacy Policy.</p>
</div>
<div class="section" id="what-personal-information-do-we-collect-from-our-users">
<h2>What personal information do we collect from our users?<a class="headerlink" href="#what-personal-information-do-we-collect-from-our-users" title="Permalink to this headline"></a></h2>
<p>The information we collect from you falls into two categories: (i) personally
identifiable information (i.e., data that could potentially identify you as an
individual) (“Personal Information”), and (ii) non-personally identifiable
information (i.e., information that cannot be used to identify who you are)
(“Non-Personal Information”). This Privacy Policy covers both categories and
will tell you how we might collect and use each type.</p>
<p>We do our best to not collect any Personal Information from Taler Wallet
users. We believe that the Taler Wallet never transmits personal information
to our services without at least clear implied consent, and we only process
and retain information with a strict business need. That being said, when
using our Services, we inherently have to collect the following information:</p>
<blockquote>
<div><ul class="simple">
<li>Bank account details necessary when receiving funds from you to top-up your wallet or to transfer funds to you when you are being paid via Taler. At the current experimental stage, only the pseudonym and password you entered in the bank demonstrator is stored.</li>
<li>The amounts being withdrawn or deposited, with associated unique transaction identifiers and cryptographic signatures authorizing the transaction. Note that for purchases, we cannot identify the buyer from the collected data, so when you spend money, we only receive non-personal information.</li>
<li>When you contact us. We may collect certain information if you choose to contact us, for example to report a bug or other error with the Taler Wallet. This may include contact information such as your name, email address or phone number depending on the method you choose to contact us.</li>
</ul>
</p>
<h2>HOW WE COLLECT AND PROCESS INFORMATION</h2>
</div></blockquote>
</div>
<div class="section" id="how-we-collect-and-process-information">
<h2>How we collect and process information<a class="headerlink" href="#how-we-collect-and-process-information" title="Permalink to this headline"></a></h2>
<p>We may process your information for the following reasons:</p>
<p>
<ul>
<li>to
transfer money as specified by our users (Taler transactions);</p>
<li>to
assist government entities in linking income to the underlying contract</p>
<li>to
support you using the Taler Wallet or to improve our Services</p>
<blockquote>
<div><ul class="simple">
<li>to transfer money as specified by our users (Taler transactions);</li>
<li>to assist government entities in linking income to the underlying contract</li>
<li>to support you using the Taler Wallet or to improve our Services</li>
</ul>
</p>
</div></blockquote>
</div>
<div class="section" id="how-we-share-and-use-the-information-we-gather">
<h2>How we share and use the information we gather<a class="headerlink" href="#how-we-share-and-use-the-information-we-gather" title="Permalink to this headline"></a></h2>
<p>We may share your Personal Data or other information about you only if you are
a merchant receiving income, with your bank, to the degree necessary to
execute the payment.</p>
<p>We retain Personal Data to transfer funds to the accounts designated by our
users. We may retain Personal Data only for as long as mandated by law and
required for the wire transfers.</p>
<p>We primarily use the limited information we receive directly from you to
enhance the Taler Wallet. Some ways we may use your Personal Information are
to: Contact you when necessary to respond to your comments, answer your
questions, or obtain additional information on issues related to bugs or
errors with the Taler Wallet that you reported.</p>
</div>
<div class="section" id="agents-or-third-party-partners">
<h2>Agents or third party partners<a class="headerlink" href="#agents-or-third-party-partners" title="Permalink to this headline"></a></h2>
<p>We may provide your Personal Information to our employees, contractors,
agents, service providers, and designees (“Agents”) to enable them to perform
certain services for us exclusively, including: improvement and maintenance of
our software and Services. By accepting this Privacy Policy, as outlined
above, you consent to any such transfer.</p>
</div>
<div class="section" id="protection-of-us-and-others">
<h2>Protection of us and others<a class="headerlink" href="#protection-of-us-and-others" title="Permalink to this headline"></a></h2>
<p>We reserve the right to access, read, preserve, and disclose any information
that we reasonably believe is necessary to comply with the law or a court
order.</p>
</div>
<div class="section" id="what-personal-information-can-i-access-or-change">
<h2>What personal information can I access or change?<a class="headerlink" href="#what-personal-information-can-i-access-or-change" title="Permalink to this headline"></a></h2>
<p>You can request access to the information we have collected from you. You can
do this by contacting us at <a class="reference external" href="mailto:privacy&#37;&#52;&#48;taler-systems&#46;net">privacy<span>&#64;</span>taler-systems<span>&#46;</span>net</a>. We will make sure to
provide you with a copy of the data we process about you. To comply with your
request, we may ask you to verify your identity. We will fulfill your request
by sending your copy electronically. For any subsequent access request, we may
charge you with an administrative fee. If you believe that the information we
have collected is incorrect, you are welcome to contact us so we can update it
and keep your data accurate. Any data that is no longer needed for purposes
specified in the “How We Use the Information We Gather” section will be
deleted after ninety (90) days.</p>
</div>
<div class="section" id="data-retention">
<h2>Data retention<a class="headerlink" href="#data-retention" title="Permalink to this headline"></a></h2>
<p>If you uninstall the Taler Wallet mobile applications from your device, or
request that your information be deleted, we still may retain some information
that you have provided to us to maintain the Taler Wallet or to comply with
relevant laws.</p>
</div>
<div class="section" id="data-security">
<h2>Data security<a class="headerlink" href="#data-security" title="Permalink to this headline"></a></h2>
<p>We are committed to making sure your information is protected. We employ
several physical and electronic safeguards to keep your information safe,
including encrypted user passwords, two factor verification and authentication
on passwords where possible, and securing connections with industry standard
transport layer security. You are also welcome to contact us using GnuPG
encrypted e-mail. Even with all these precautions, we cannot fully guarantee
against the access, disclosure, alteration, or deletion of data through
events, including but not limited to hardware or software failure or
unauthorized use. Any information that you provide to us is done so entirely
at your own risk.</p>
</div>
<div class="section" id="changes-and-updates-to-privacy-policy">
<h2>Changes and updates to privacy policy<a class="headerlink" href="#changes-and-updates-to-privacy-policy" title="Permalink to this headline"></a></h2>
<p>We reserve the right to update and revise this privacy policy at any time. We
occasionally review this Privacy Policy to make sure it complies with
applicable laws and conforms to changes in our business. We may need to update
this Privacy Policy, and we reserve the right to do so at any time. If we do
revise this Privacy Policy, we will update the “Effective Date” at the bottom
of this page so that you can tell if it has changed since your last visit. As
we generally do not collect contact information and also do not track your
visits, we will not be able to notify you directly. However, the Taler Wallet
may inform you about a change in the privacy policy once it detects that the
policy has changed. Please review this Privacy Policy regularly to ensure that
you are aware of its terms. Any use of our Services after an amendment to our
Privacy Policy constitutes your acceptance to the revised or amended
agreement.</p>
</div>
<div class="section" id="international-users-and-visitors">
<h2>International users and visitors<a class="headerlink" href="#international-users-and-visitors" title="Permalink to this headline"></a></h2>
<p>Our Services are hosted in Switzerland. If you are a user accessing the
Services from the European Union, Asia, US, or any other region with laws or
regulations governing personal data collection, use, and disclosure that
differ from Swiss laws, please be advised that through your continued use of
the Services, which is governed by Swiss law, you are transferring your
Personal Information to Switzerland and you consent to that transfer.</p>
</div>
<div class="section" id="questions">
<h2>Questions<a class="headerlink" href="#questions" title="Permalink to this headline"></a></h2>
<p>Please contact us at <a class="reference external" href="mailto:privacy&#37;&#52;&#48;taler-systems&#46;net">privacy<span>&#64;</span>taler-systems<span>&#46;</span>net</a> if you have questions about our
privacy practices that are not addressed in this Privacy Statement.</p>
</div>
</div>
<h2>HOW WE SHARE AND USE THE INFORMATION WE GATHER</h2>
<p>We
may share your Personal Data or other information about you only if
you are a merchant receiving income, with your bank, to the degree
necessary to execute the payment.</p>
<p>We
retain Personal Data to transfer funds to the accounts designated by
our users. We may retain Personal Data only for as long as mandated
by law and required for the wire transfers.</p>
<p>We
primarily use the limited information we receive directly from you to
enhance the Taler Wallet. Some ways we may use your Personal
Information are to: Contact you when necessary to respond to your
comments, answer your questions, or obtain additional information on
issues related to bugs or errors with the Taler Wallet that you
reported.</p>
<h2>AGENTS OR THIRD PARTY PARTNERS</h2>
<p>We
may provide your Personal Information to our employees, contractors,
agents, service providers, and designees (“Agents”) to enable
them to perform certain services for us exclusively, including:
improvement and maintenance of our software and Services. By
accepting this Privacy Policy, as outlined above, you consent to any
such transfer.
</p>
<h2>PROTECTION OF US AND OTHERS</h2>
<p>We
reserve the right to access, read, preserve, and disclose any
information that we reasonably believe is necessary to comply with
the law or a court order.
</p>
<h2>WHAT PERSONAL INFORMATION CAN I ACCESS OR CHANGE?</h2>
<p>You
can request access to the information we have collected from you. You
can do this by contacting us at privacy@taler-systems.net. We will
make sure to provide you with a copy of the data we process about
you. To comply with your request, we may ask you to verify your
identity. We will fulfill your request by sending your copy
electronically. For any subsequent access request, we may charge you
with an administrative fee. If you believe that the information we
have collected is incorrect, you are welcome to contact us so we can
update it and keep your data accurate. Any data that is no longer
needed for purposes specified in the “How We Use the Information We
Gather” section will be deleted after ninety (90) days.
</p>
<h2>DATA RETENTION</h2>
<p>If
you uninstall the Taler Wallet mobile applications from your device,
or request that your information be deleted, we still may retain some
information that you have provided to us to maintain the Taler Wallet
or to comply with relevant laws.
</p>
<h2>DATA SECURITY</h2>
<p>We are committed to making sure your information
is protected. We employ several physical and electronic safeguards to
keep your information safe, including encrypted user passwords, two
factor verification and authentication on passwords where possible,
and securing connections with industry standard transport layer
security. You are also welcome to contact us using GnuPG encrypted
e-mail. Even with all these precautions, we cannot fully guarantee
against the access, disclosure, alteration, or deletion of data
through events, including but not limited to hardware or software
failure or unauthorized use. Any information that you provide to us
is done so entirely at your own risk.</p>
<h2>CHANGES AND UPDATES TO PRIVACY POLICY</p>
<p>We
reserve the right to update and revise this privacy policy at any
time. We occasionally review this Privacy Policy to make sure it
complies with applicable laws and conforms to changes in our
business. We may need to update this Privacy Policy, and we reserve
the right to do so at any time. If we do revise this Privacy Policy,
we will update the “Effective Date” at the bottom of this page so
that you can tell if it has changed since your last visit. As we
generally do not collect contact information and also do not track
your visits, we will not be able to notify you directly. However, the
Taler Wallet may inform you about a change in the privacy policy once
it detects that the policy has changed. Please review this Privacy
Policy regularly to ensure that you are aware of its terms. Any use
of our Services after an amendment to our Privacy Policy constitutes
your acceptance to the revised or amended agreement.
</p>
<h2>INTERNATIONAL USERS AND VISITORS</h2>
<p>Our
Services are hosted in Switzerland. If you are a user accessing the
Services from the European Union, Asia, US, or any other region with
laws or regulations governing personal data collection, use, and
disclosure that differ from Swiss laws, please be advised that
through your continued use of the Services, which is governed by
Swiss law, you are transferring your Personal Information to
Switzerland and you consent to that transfer.
</p>
<h2>QUESTIONS</h2>
<p>Please
contact us at privacy@taler-systems.net if you have questions about
our privacy practices that are not addressed in this Privacy
Statement.
</p>
</body>
</html>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
</body>
</html>

BIN
contrib/pp/en/0.pdf Normal file

Binary file not shown.

View File

@ -1,102 +1,202 @@
'''Privacy Policy'''
Privacy Policy
**************
Last Updated: 11.12.2019
This Privacy Policy describes the policies and procedures of Taler Systems SA (“we,” “our,” or “us”) pertaining to the collection, use, and disclosure of your information on our sites and related mobile applications and products we offer (the “Services” or “Taler Wallet”). This Privacy Statement applies to your personal data when you use our Services, and does not apply to online websites or services that we do not own or control.
This Privacy Policy describes the policies and procedures of Taler
Systems SA (“we,” “our,” or “us”) pertaining to the collection, use,
and disclosure of your information on our sites and related mobile
applications and products we offer (the “Services” or “Taler Wallet”).
This Privacy Statement applies to your personal data when you use our
Services, and does not apply to online websites or services that we do
not own or control.
OVERVIEW
Overview
========
Your privacy is important to us. We follow a few fundamental principles: We dont ask you for personally identifiable information (defined below). That being said, your contact information, such as your phone number, social media handle, or email address (depending on how you contact us), may be collected when you communicate with us, for example to report a bug or other error related to the Taler Wallet. We dont share your information with third parties except when strictly required to deliver you our Services and products, or to comply with the law. If you have any questions or concerns about this policy, please reach out to us at privacy@taler-systems.net.
Your privacy is important to us. We follow a few fundamental
principles: We dont ask you for personally identifiable information
(defined below). That being said, your contact information, such as
your phone number, social media handle, or email address (depending on
how you contact us), may be collected when you communicate with us,
for example to report a bug or other error related to the Taler
Wallet. We dont share your information with third parties except when
strictly required to deliver you our Services and products, or to
comply with the law. If you have any questions or concerns about this
policy, please reach out to us at privacy@taler-systems.net.
HOW YOU ACCEPT THIS POLICY
How you accept this policy
==========================
By using our Services or visiting our sites, you agree to the use, disclosure, and procedures outlined in this Privacy Policy.
By using our Services or visiting our sites, you agree to the use,
disclosure, and procedures outlined in this Privacy Policy.
WHAT PERSONAL INFORMATION DO WE COLLECT FROM OUR USERS?
What personal information do we collect from our users?
=======================================================
The information we collect from you falls into two categories: (i) personally identifiable information (i.e., data that could potentially identify you as an individual) (“Personal Information”), and (ii) non-personally identifiable information (i.e., information that cannot be used to identify who you are) (“Non-Personal Information”). This Privacy Policy covers both categories and will tell you how we might collect and use each type.
The information we collect from you falls into two categories: (i)
personally identifiable information (i.e., data that could potentially
identify you as an individual) (“Personal Information”), and (ii) non-
personally identifiable information (i.e., information that cannot be
used to identify who you are) (“Non-Personal Information”). This
Privacy Policy covers both categories and will tell you how we might
collect and use each type.
We do our best to not collect any Personal Information from Taler Wallet users. We believe that the Taler Wallet never transmits personal information to our services without at least clear implied consent, and we only process and retain information with a strict business need. That being said, when using our Services, we inherently have to collect the following information:
We do our best to not collect any Personal Information from Taler
Wallet users. We believe that the Taler Wallet never transmits
personal information to our services without at least clear implied
consent, and we only process and retain information with a strict
business need. That being said, when using our Services, we inherently
have to collect the following information:
* Bank account details necessary when receiving funds from you to top-up your wallet or to transfer funds to you when you are being paid via Taler. At the current experimental stage, only the pseudonym and password you entered in the bank demonstrator is stored.
* Bank account details necessary when receiving funds from you to
top-up your wallet or to transfer funds to you when you are being
paid via Taler. At the current experimental stage, only the
pseudonym and password you entered in the bank demonstrator is
stored.
* The amounts being withdrawn or deposited, with associated unique transaction identifiers and cryptographic signatures authorizing the transaction. Note that for purchases, we cannot identify the buyer from the collected data, so when you spend money, we only receive non-personal information.
* The amounts being withdrawn or deposited, with associated unique
transaction identifiers and cryptographic signatures authorizing
the transaction. Note that for purchases, we cannot identify the
buyer from the collected data, so when you spend money, we only
receive non-personal information.
* When you contact us. We may collect certain information if you choose to contact us, for example to report a bug or other error with the Taler Wallet. This may include contact information such as your name, email address or phone number depending on the method you choose to contact us.
* When you contact us. We may collect certain information if you
choose to contact us, for example to report a bug or other error
with the Taler Wallet. This may include contact information such
as your name, email address or phone number depending on the
method you choose to contact us.
HOW WE COLLECT AND PROCESS INFORMATION
How we collect and process information
======================================
We may process your information for the following reasons:
* to transfer money as specified by our users (Taler transactions);
* to transfer money as specified by our users (Taler transactions);
* to assist government entities in linking income to the underlying contract
* to assist government entities in linking income to the underlying
contract
* to support you using the Taler Wallet or to improve our Services
* to support you using the Taler Wallet or to improve our Services
HOW WE SHARE AND USE THE INFORMATION WE GATHER
How we share and use the information we gather
==============================================
We may share your Personal Data or other information about you only if you are a merchant receiving income, with your bank, to the degree necessary to execute the payment.
We may share your Personal Data or other information about you only if
you are a merchant receiving income, with your bank, to the degree
necessary to execute the payment.
We retain Personal Data to transfer funds to the accounts designated by our users. We may retain Personal Data only for as long as mandated by law and required for the wire transfers.
We retain Personal Data to transfer funds to the accounts designated
by our users. We may retain Personal Data only for as long as mandated
by law and required for the wire transfers.
We primarily use the limited information we receive directly from you to enhance the Taler Wallet. Some ways we may use your Personal Information are to: Contact you when necessary to respond to your comments, answer your questions, or obtain additional information on issues related to bugs or errors with the Taler Wallet that you reported.
We primarily use the limited information we receive directly from you
to enhance the Taler Wallet. Some ways we may use your Personal
Information are to: Contact you when necessary to respond to your
comments, answer your questions, or obtain additional information on
issues related to bugs or errors with the Taler Wallet that you
reported.
AGENTS OR THIRD PARTY PARTNERS
Agents or third party partners
==============================
We may provide your Personal Information to our employees, contractors, agents, service providers, and designees (“Agents”) to enable them to perform certain services for us exclusively, including: improvement and maintenance of our software and Services. By accepting this Privacy Policy, as outlined above, you consent to any such transfer.
We may provide your Personal Information to our employees,
contractors, agents, service providers, and designees (“Agents”) to
enable them to perform certain services for us exclusively, including:
improvement and maintenance of our software and Services. By accepting
this Privacy Policy, as outlined above, you consent to any such
transfer.
PROTECTION OF US AND OTHERS
Protection of us and others
===========================
We reserve the right to access, read, preserve, and disclose any information that we reasonably believe is necessary to comply with the law or a court order.
We reserve the right to access, read, preserve, and disclose any
information that we reasonably believe is necessary to comply with the
law or a court order.
WHAT PERSONAL INFORMATION CAN I ACCESS OR CHANGE?
What personal information can I access or change?
=================================================
You can request access to the information we have collected from you. You can do this by contacting us at privacy@taler-systems.net. We will make sure to provide you with a copy of the data we process about you. To comply with your request, we may ask you to verify your identity. We will fulfill your request by sending your copy electronically. For any subsequent access request, we may charge you with an administrative fee. If you believe that the information we have collected is incorrect, you are welcome to contact us so we can update it and keep your data accurate. Any data that is no longer needed for purposes specified in the “How We Use the Information We Gather” section will be deleted after ninety (90) days.
You can request access to the information we have collected from you.
You can do this by contacting us at privacy@taler-systems.net. We will
make sure to provide you with a copy of the data we process about you.
To comply with your request, we may ask you to verify your identity.
We will fulfill your request by sending your copy electronically. For
any subsequent access request, we may charge you with an
administrative fee. If you believe that the information we have
collected is incorrect, you are welcome to contact us so we can update
it and keep your data accurate. Any data that is no longer needed for
purposes specified in the “How We Use the Information We Gather”
section will be deleted after ninety (90) days.
DATA RETENTION
Data retention
==============
If you uninstall the Taler Wallet mobile applications from your device, or request that your information be deleted, we still may retain some information that you have provided to us to maintain the Taler Wallet or to comply with relevant laws.
If you uninstall the Taler Wallet mobile applications from your
device, or request that your information be deleted, we still may
retain some information that you have provided to us to maintain the
Taler Wallet or to comply with relevant laws.
DATA SECURITY
Data security
=============
We are committed to making sure your information is protected. We employ several physical and electronic safeguards to keep your information safe, including encrypted user passwords, two factor verification and authentication on passwords where possible, and securing connections with industry standard transport layer security. You are also welcome to contact us using GnuPG encrypted e-mail. Even with all these precautions, we cannot fully guarantee against the access, disclosure, alteration, or deletion of data through events, including but not limited to hardware or software failure or unauthorized use. Any information that you provide to us is done so entirely at your own risk.
We are committed to making sure your information is protected. We
employ several physical and electronic safeguards to keep your
information safe, including encrypted user passwords, two factor
verification and authentication on passwords where possible, and
securing connections with industry standard transport layer security.
You are also welcome to contact us using GnuPG encrypted e-mail. Even
with all these precautions, we cannot fully guarantee against the
access, disclosure, alteration, or deletion of data through events,
including but not limited to hardware or software failure or
unauthorized use. Any information that you provide to us is done so
entirely at your own risk.
CHANGES AND UPDATES TO PRIVACY POLICY
Changes and updates to privacy policy
=====================================
We reserve the right to update and revise this privacy policy at any time. We occasionally review this Privacy Policy to make sure it complies with applicable laws and conforms to changes in our business. We may need to update this Privacy Policy, and we reserve the right to do so at any time. If we do revise this Privacy Policy, we will update the “Effective Date” at the bottom of this page so that you can tell if it has changed since your last visit. As we generally do not collect contact information and also do not track your visits, we will not be able to notify you directly. However, the Taler Wallet may inform you about a change in the privacy policy once it detects that the policy has changed. Please review this Privacy Policy regularly to ensure that you are aware of its terms. Any use of our Services after an amendment to our Privacy Policy constitutes your acceptance to the revised or amended agreement.
We reserve the right to update and revise this privacy policy at any
time. We occasionally review this Privacy Policy to make sure it
complies with applicable laws and conforms to changes in our business.
We may need to update this Privacy Policy, and we reserve the right to
do so at any time. If we do revise this Privacy Policy, we will update
the “Effective Date” at the bottom of this page so that you can tell
if it has changed since your last visit. As we generally do not
collect contact information and also do not track your visits, we will
not be able to notify you directly. However, the Taler Wallet may
inform you about a change in the privacy policy once it detects that
the policy has changed. Please review this Privacy Policy regularly to
ensure that you are aware of its terms. Any use of our Services after
an amendment to our Privacy Policy constitutes your acceptance to the
revised or amended agreement.
INTERNATIONAL USERS AND VISITORS
International users and visitors
================================
Our Services are hosted in Switzerland. If you are a user accessing the Services from the European Union, Asia, US, or any other region with laws or regulations governing personal data collection, use, and disclosure that differ from Swiss laws, please be advised that through your continued use of the Services, which is governed by Swiss law, you are transferring your Personal Information to Switzerland and you consent to that transfer.
Our Services are hosted in Switzerland. If you are a user accessing
the Services from the European Union, Asia, US, or any other region
with laws or regulations governing personal data collection, use, and
disclosure that differ from Swiss laws, please be advised that through
your continued use of the Services, which is governed by Swiss law,
you are transferring your Personal Information to Switzerland and you
consent to that transfer.
QUESTIONS
Questions
=========
Please contact us at privacy@taler-systems.net if you have questions about our privacy practices that are not addressed in this Privacy Statement.
Please contact us at privacy@taler-systems.net if you have questions
about our privacy practices that are not addressed in this Privacy
Statement.

167
contrib/pp/en/0.xml Normal file
View File

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "+//IDN docutils.sourceforge.net//DTD Docutils Generic//EN//XML" "http://docutils.sourceforge.net/docs/ref/docutils.dtd">
<!-- Generated by Docutils 0.14 -->
<document source="/home/grothoff/research/taler/exchange/contrib/pp/pp.rst">
<section ids="privacy-policy" names="privacy\ policy">
<title>Privacy Policy</title>
<paragraph>Last Updated: 11.12.2019</paragraph>
<paragraph>This Privacy Policy describes the policies and procedures of Taler Systems SA
(“we,” “our,” or “us”) pertaining to the collection, use, and disclosure of
your information on our sites and related mobile applications and products we
offer (the “Services” or “Taler Wallet”). This Privacy Statement applies to
your personal data when you use our Services, and does not apply to online
websites or services that we do not own or control.</paragraph>
<section ids="overview" names="overview">
<title>Overview</title>
<paragraph>Your privacy is important to us. We follow a few fundamental principles: We
dont ask you for personally identifiable information (defined below). That
being said, your contact information, such as your phone number, social media
handle, or email address (depending on how you contact us), may be collected
when you communicate with us, for example to report a bug or other error
related to the Taler Wallet. We dont share your information with third
parties except when strictly required to deliver you our Services and
products, or to comply with the law. If you have any questions or concerns
about this policy, please reach out to us at <reference refuri="mailto:privacy@taler-systems.net">privacy@taler-systems.net</reference>.</paragraph>
</section>
<section ids="how-you-accept-this-policy" names="how\ you\ accept\ this\ policy">
<title>How you accept this policy</title>
<paragraph>By using our Services or visiting our sites, you agree to the use, disclosure,
and procedures outlined in this Privacy Policy.</paragraph>
</section>
<section ids="what-personal-information-do-we-collect-from-our-users" names="what\ personal\ information\ do\ we\ collect\ from\ our\ users?">
<title>What personal information do we collect from our users?</title>
<paragraph>The information we collect from you falls into two categories: (i) personally
identifiable information (i.e., data that could potentially identify you as an
individual) (“Personal Information”), and (ii) non-personally identifiable
information (i.e., information that cannot be used to identify who you are)
(“Non-Personal Information”). This Privacy Policy covers both categories and
will tell you how we might collect and use each type.</paragraph>
<paragraph>We do our best to not collect any Personal Information from Taler Wallet
users. We believe that the Taler Wallet never transmits personal information
to our services without at least clear implied consent, and we only process
and retain information with a strict business need. That being said, when
using our Services, we inherently have to collect the following information:</paragraph>
<block_quote>
<bullet_list bullet="*">
<list_item>
<paragraph>Bank account details necessary when receiving funds from you to top-up your wallet or to transfer funds to you when you are being paid via Taler. At the current experimental stage, only the pseudonym and password you entered in the bank demonstrator is stored.</paragraph>
</list_item>
<list_item>
<paragraph>The amounts being withdrawn or deposited, with associated unique transaction identifiers and cryptographic signatures authorizing the transaction. Note that for purchases, we cannot identify the buyer from the collected data, so when you spend money, we only receive non-personal information.</paragraph>
</list_item>
<list_item>
<paragraph>When you contact us. We may collect certain information if you choose to contact us, for example to report a bug or other error with the Taler Wallet. This may include contact information such as your name, email address or phone number depending on the method you choose to contact us.</paragraph>
</list_item>
</bullet_list>
</block_quote>
</section>
<section ids="how-we-collect-and-process-information" names="how\ we\ collect\ and\ process\ information">
<title>How we collect and process information</title>
<paragraph>We may process your information for the following reasons:</paragraph>
<block_quote>
<bullet_list bullet="*">
<list_item>
<paragraph>to transfer money as specified by our users (Taler transactions);</paragraph>
</list_item>
<list_item>
<paragraph>to assist government entities in linking income to the underlying contract</paragraph>
</list_item>
<list_item>
<paragraph>to support you using the Taler Wallet or to improve our Services</paragraph>
</list_item>
</bullet_list>
</block_quote>
</section>
<section ids="how-we-share-and-use-the-information-we-gather" names="how\ we\ share\ and\ use\ the\ information\ we\ gather">
<title>How we share and use the information we gather</title>
<paragraph>We may share your Personal Data or other information about you only if you are
a merchant receiving income, with your bank, to the degree necessary to
execute the payment.</paragraph>
<paragraph>We retain Personal Data to transfer funds to the accounts designated by our
users. We may retain Personal Data only for as long as mandated by law and
required for the wire transfers.</paragraph>
<paragraph>We primarily use the limited information we receive directly from you to
enhance the Taler Wallet. Some ways we may use your Personal Information are
to: Contact you when necessary to respond to your comments, answer your
questions, or obtain additional information on issues related to bugs or
errors with the Taler Wallet that you reported.</paragraph>
</section>
<section ids="agents-or-third-party-partners" names="agents\ or\ third\ party\ partners">
<title>Agents or third party partners</title>
<paragraph>We may provide your Personal Information to our employees, contractors,
agents, service providers, and designees (“Agents”) to enable them to perform
certain services for us exclusively, including: improvement and maintenance of
our software and Services. By accepting this Privacy Policy, as outlined
above, you consent to any such transfer.</paragraph>
</section>
<section ids="protection-of-us-and-others" names="protection\ of\ us\ and\ others">
<title>Protection of us and others</title>
<paragraph>We reserve the right to access, read, preserve, and disclose any information
that we reasonably believe is necessary to comply with the law or a court
order.</paragraph>
</section>
<section ids="what-personal-information-can-i-access-or-change" names="what\ personal\ information\ can\ i\ access\ or\ change?">
<title>What personal information can I access or change?</title>
<paragraph>You can request access to the information we have collected from you. You can
do this by contacting us at <reference refuri="mailto:privacy@taler-systems.net">privacy@taler-systems.net</reference>. We will make sure to
provide you with a copy of the data we process about you. To comply with your
request, we may ask you to verify your identity. We will fulfill your request
by sending your copy electronically. For any subsequent access request, we may
charge you with an administrative fee. If you believe that the information we
have collected is incorrect, you are welcome to contact us so we can update it
and keep your data accurate. Any data that is no longer needed for purposes
specified in the “How We Use the Information We Gather” section will be
deleted after ninety (90) days.</paragraph>
</section>
<section ids="data-retention" names="data\ retention">
<title>Data retention</title>
<paragraph>If you uninstall the Taler Wallet mobile applications from your device, or
request that your information be deleted, we still may retain some information
that you have provided to us to maintain the Taler Wallet or to comply with
relevant laws.</paragraph>
</section>
<section ids="data-security" names="data\ security">
<title>Data security</title>
<paragraph>We are committed to making sure your information is protected. We employ
several physical and electronic safeguards to keep your information safe,
including encrypted user passwords, two factor verification and authentication
on passwords where possible, and securing connections with industry standard
transport layer security. You are also welcome to contact us using GnuPG
encrypted e-mail. Even with all these precautions, we cannot fully guarantee
against the access, disclosure, alteration, or deletion of data through
events, including but not limited to hardware or software failure or
unauthorized use. Any information that you provide to us is done so entirely
at your own risk.</paragraph>
</section>
<section ids="changes-and-updates-to-privacy-policy" names="changes\ and\ updates\ to\ privacy\ policy">
<title>Changes and updates to privacy policy</title>
<paragraph>We reserve the right to update and revise this privacy policy at any time. We
occasionally review this Privacy Policy to make sure it complies with
applicable laws and conforms to changes in our business. We may need to update
this Privacy Policy, and we reserve the right to do so at any time. If we do
revise this Privacy Policy, we will update the “Effective Date” at the bottom
of this page so that you can tell if it has changed since your last visit. As
we generally do not collect contact information and also do not track your
visits, we will not be able to notify you directly. However, the Taler Wallet
may inform you about a change in the privacy policy once it detects that the
policy has changed. Please review this Privacy Policy regularly to ensure that
you are aware of its terms. Any use of our Services after an amendment to our
Privacy Policy constitutes your acceptance to the revised or amended
agreement.</paragraph>
</section>
<section ids="international-users-and-visitors" names="international\ users\ and\ visitors">
<title>International users and visitors</title>
<paragraph>Our Services are hosted in Switzerland. If you are a user accessing the
Services from the European Union, Asia, US, or any other region with laws or
regulations governing personal data collection, use, and disclosure that
differ from Swiss laws, please be advised that through your continued use of
the Services, which is governed by Swiss law, you are transferring your
Personal Information to Switzerland and you consent to that transfer.</paragraph>
</section>
<section ids="questions" names="questions">
<title>Questions</title>
<paragraph>Please contact us at <reference refuri="mailto:privacy@taler-systems.net">privacy@taler-systems.net</reference> if you have questions about our
privacy practices that are not addressed in this Privacy Statement.</paragraph>
</section>
</section>
</document>

View File

@ -0,0 +1,283 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2014-2020 Taler Systems SA (GPLv3+ or GFDL 1.3+)
# This file is distributed under the same license as the pp package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: pp 0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-07 00:51+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
#: ../../pp.rst:2
msgid "Privacy Policy"
msgstr ""
#: ../../pp.rst:4
msgid "Last Updated: 11.12.2019"
msgstr ""
#: ../../pp.rst:6
msgid ""
"This Privacy Policy describes the policies and procedures of Taler "
"Systems SA (“we,” “our,” or “us”) pertaining to the collection, use, and "
"disclosure of your information on our sites and related mobile "
"applications and products we offer (the “Services” or “Taler Wallet”). "
"This Privacy Statement applies to your personal data when you use our "
"Services, and does not apply to online websites or services that we do "
"not own or control."
msgstr ""
#: ../../pp.rst:15
msgid "Overview"
msgstr ""
#: ../../pp.rst:17
msgid ""
"Your privacy is important to us. We follow a few fundamental principles: "
"We dont ask you for personally identifiable information (defined below)."
" That being said, your contact information, such as your phone number, "
"social media handle, or email address (depending on how you contact us), "
"may be collected when you communicate with us, for example to report a "
"bug or other error related to the Taler Wallet. We dont share your "
"information with third parties except when strictly required to deliver "
"you our Services and products, or to comply with the law. If you have any"
" questions or concerns about this policy, please reach out to us at "
"privacy@taler-systems.net."
msgstr ""
#: ../../pp.rst:29
msgid "How you accept this policy"
msgstr ""
#: ../../pp.rst:31
msgid ""
"By using our Services or visiting our sites, you agree to the use, "
"disclosure, and procedures outlined in this Privacy Policy."
msgstr ""
#: ../../pp.rst:36
msgid "What personal information do we collect from our users?"
msgstr ""
#: ../../pp.rst:38
msgid ""
"The information we collect from you falls into two categories: (i) "
"personally identifiable information (i.e., data that could potentially "
"identify you as an individual) (“Personal Information”), and (ii) non-"
"personally identifiable information (i.e., information that cannot be "
"used to identify who you are) (“Non-Personal Information”). This Privacy "
"Policy covers both categories and will tell you how we might collect and "
"use each type."
msgstr ""
#: ../../pp.rst:45
msgid ""
"We do our best to not collect any Personal Information from Taler Wallet "
"users. We believe that the Taler Wallet never transmits personal "
"information to our services without at least clear implied consent, and "
"we only process and retain information with a strict business need. That "
"being said, when using our Services, we inherently have to collect the "
"following information:"
msgstr ""
#: ../../pp.rst:51
msgid ""
"Bank account details necessary when receiving funds from you to top-up "
"your wallet or to transfer funds to you when you are being paid via "
"Taler. At the current experimental stage, only the pseudonym and password"
" you entered in the bank demonstrator is stored."
msgstr ""
#: ../../pp.rst:53
msgid ""
"The amounts being withdrawn or deposited, with associated unique "
"transaction identifiers and cryptographic signatures authorizing the "
"transaction. Note that for purchases, we cannot identify the buyer from "
"the collected data, so when you spend money, we only receive non-personal"
" information."
msgstr ""
#: ../../pp.rst:55
msgid ""
"When you contact us. We may collect certain information if you choose to "
"contact us, for example to report a bug or other error with the Taler "
"Wallet. This may include contact information such as your name, email "
"address or phone number depending on the method you choose to contact us."
msgstr ""
#: ../../pp.rst:59
msgid "How we collect and process information"
msgstr ""
#: ../../pp.rst:61
msgid "We may process your information for the following reasons:"
msgstr ""
#: ../../pp.rst:63
msgid "to transfer money as specified by our users (Taler transactions);"
msgstr ""
#: ../../pp.rst:64
msgid "to assist government entities in linking income to the underlying contract"
msgstr ""
#: ../../pp.rst:65
msgid "to support you using the Taler Wallet or to improve our Services"
msgstr ""
#: ../../pp.rst:69
msgid "How we share and use the information we gather"
msgstr ""
#: ../../pp.rst:71
msgid ""
"We may share your Personal Data or other information about you only if "
"you are a merchant receiving income, with your bank, to the degree "
"necessary to execute the payment."
msgstr ""
#: ../../pp.rst:75
msgid ""
"We retain Personal Data to transfer funds to the accounts designated by "
"our users. We may retain Personal Data only for as long as mandated by "
"law and required for the wire transfers."
msgstr ""
#: ../../pp.rst:79
msgid ""
"We primarily use the limited information we receive directly from you to "
"enhance the Taler Wallet. Some ways we may use your Personal Information "
"are to: Contact you when necessary to respond to your comments, answer "
"your questions, or obtain additional information on issues related to "
"bugs or errors with the Taler Wallet that you reported."
msgstr ""
#: ../../pp.rst:87
msgid "Agents or third party partners"
msgstr ""
#: ../../pp.rst:89
msgid ""
"We may provide your Personal Information to our employees, contractors, "
"agents, service providers, and designees (“Agents”) to enable them to "
"perform certain services for us exclusively, including: improvement and "
"maintenance of our software and Services. By accepting this Privacy "
"Policy, as outlined above, you consent to any such transfer."
msgstr ""
#: ../../pp.rst:97
msgid "Protection of us and others"
msgstr ""
#: ../../pp.rst:99
msgid ""
"We reserve the right to access, read, preserve, and disclose any "
"information that we reasonably believe is necessary to comply with the "
"law or a court order."
msgstr ""
#: ../../pp.rst:105
msgid "What personal information can I access or change?"
msgstr ""
#: ../../pp.rst:107
msgid ""
"You can request access to the information we have collected from you. You"
" can do this by contacting us at privacy@taler-systems.net. We will make "
"sure to provide you with a copy of the data we process about you. To "
"comply with your request, we may ask you to verify your identity. We will"
" fulfill your request by sending your copy electronically. For any "
"subsequent access request, we may charge you with an administrative fee. "
"If you believe that the information we have collected is incorrect, you "
"are welcome to contact us so we can update it and keep your data "
"accurate. Any data that is no longer needed for purposes specified in the"
" “How We Use the Information We Gather” section will be deleted after "
"ninety (90) days."
msgstr ""
#: ../../pp.rst:120
msgid "Data retention"
msgstr ""
#: ../../pp.rst:122
msgid ""
"If you uninstall the Taler Wallet mobile applications from your device, "
"or request that your information be deleted, we still may retain some "
"information that you have provided to us to maintain the Taler Wallet or "
"to comply with relevant laws."
msgstr ""
#: ../../pp.rst:129
msgid "Data security"
msgstr ""
#: ../../pp.rst:131
msgid ""
"We are committed to making sure your information is protected. We employ "
"several physical and electronic safeguards to keep your information safe,"
" including encrypted user passwords, two factor verification and "
"authentication on passwords where possible, and securing connections with"
" industry standard transport layer security. You are also welcome to "
"contact us using GnuPG encrypted e-mail. Even with all these precautions,"
" we cannot fully guarantee against the access, disclosure, alteration, or"
" deletion of data through events, including but not limited to hardware "
"or software failure or unauthorized use. Any information that you provide"
" to us is done so entirely at your own risk."
msgstr ""
#: ../../pp.rst:144
msgid "Changes and updates to privacy policy"
msgstr ""
#: ../../pp.rst:146
msgid ""
"We reserve the right to update and revise this privacy policy at any "
"time. We occasionally review this Privacy Policy to make sure it complies"
" with applicable laws and conforms to changes in our business. We may "
"need to update this Privacy Policy, and we reserve the right to do so at "
"any time. If we do revise this Privacy Policy, we will update the "
"“Effective Date” at the bottom of this page so that you can tell if it "
"has changed since your last visit. As we generally do not collect contact"
" information and also do not track your visits, we will not be able to "
"notify you directly. However, the Taler Wallet may inform you about a "
"change in the privacy policy once it detects that the policy has changed."
" Please review this Privacy Policy regularly to ensure that you are aware"
" of its terms. Any use of our Services after an amendment to our Privacy "
"Policy constitutes your acceptance to the revised or amended agreement."
msgstr ""
#: ../../pp.rst:162
msgid "International users and visitors"
msgstr ""
#: ../../pp.rst:164
msgid ""
"Our Services are hosted in Switzerland. If you are a user accessing the "
"Services from the European Union, Asia, US, or any other region with laws"
" or regulations governing personal data collection, use, and disclosure "
"that differ from Swiss laws, please be advised that through your "
"continued use of the Services, which is governed by Swiss law, you are "
"transferring your Personal Information to Switzerland and you consent to "
"that transfer."
msgstr ""
#: ../../pp.rst:173
msgid "Questions"
msgstr ""
#: ../../pp.rst:175
msgid ""
"Please contact us at privacy@taler-systems.net if you have questions "
"about our privacy practices that are not addressed in this Privacy "
"Statement."
msgstr ""

176
contrib/pp/pp.rst Normal file
View File

@ -0,0 +1,176 @@
Privacy Policy
==============
Last Updated: 11.12.2019
This Privacy Policy describes the policies and procedures of Taler Systems SA
(“we,” “our,” or “us”) pertaining to the collection, use, and disclosure of
your information on our sites and related mobile applications and products we
offer (the “Services” or “Taler Wallet”). This Privacy Statement applies to
your personal data when you use our Services, and does not apply to online
websites or services that we do not own or control.
Overview
--------
Your privacy is important to us. We follow a few fundamental principles: We
dont ask you for personally identifiable information (defined below). That
being said, your contact information, such as your phone number, social media
handle, or email address (depending on how you contact us), may be collected
when you communicate with us, for example to report a bug or other error
related to the Taler Wallet. We dont share your information with third
parties except when strictly required to deliver you our Services and
products, or to comply with the law. If you have any questions or concerns
about this policy, please reach out to us at privacy@taler-systems.net.
How you accept this policy
--------------------------
By using our Services or visiting our sites, you agree to the use, disclosure,
and procedures outlined in this Privacy Policy.
What personal information do we collect from our users?
-------------------------------------------------------
The information we collect from you falls into two categories: (i) personally
identifiable information (i.e., data that could potentially identify you as an
individual) (“Personal Information”), and (ii) non-personally identifiable
information (i.e., information that cannot be used to identify who you are)
(“Non-Personal Information”). This Privacy Policy covers both categories and
will tell you how we might collect and use each type.
We do our best to not collect any Personal Information from Taler Wallet
users. We believe that the Taler Wallet never transmits personal information
to our services without at least clear implied consent, and we only process
and retain information with a strict business need. That being said, when
using our Services, we inherently have to collect the following information:
* Bank account details necessary when receiving funds from you to top-up your wallet or to transfer funds to you when you are being paid via Taler. At the current experimental stage, only the pseudonym and password you entered in the bank demonstrator is stored.
* The amounts being withdrawn or deposited, with associated unique transaction identifiers and cryptographic signatures authorizing the transaction. Note that for purchases, we cannot identify the buyer from the collected data, so when you spend money, we only receive non-personal information.
* When you contact us. We may collect certain information if you choose to contact us, for example to report a bug or other error with the Taler Wallet. This may include contact information such as your name, email address or phone number depending on the method you choose to contact us.
How we collect and process information
--------------------------------------
We may process your information for the following reasons:
* to transfer money as specified by our users (Taler transactions);
* to assist government entities in linking income to the underlying contract
* to support you using the Taler Wallet or to improve our Services
How we share and use the information we gather
----------------------------------------------
We may share your Personal Data or other information about you only if you are
a merchant receiving income, with your bank, to the degree necessary to
execute the payment.
We retain Personal Data to transfer funds to the accounts designated by our
users. We may retain Personal Data only for as long as mandated by law and
required for the wire transfers.
We primarily use the limited information we receive directly from you to
enhance the Taler Wallet. Some ways we may use your Personal Information are
to: Contact you when necessary to respond to your comments, answer your
questions, or obtain additional information on issues related to bugs or
errors with the Taler Wallet that you reported.
Agents or third party partners
------------------------------
We may provide your Personal Information to our employees, contractors,
agents, service providers, and designees (“Agents”) to enable them to perform
certain services for us exclusively, including: improvement and maintenance of
our software and Services. By accepting this Privacy Policy, as outlined
above, you consent to any such transfer.
Protection of us and others
---------------------------
We reserve the right to access, read, preserve, and disclose any information
that we reasonably believe is necessary to comply with the law or a court
order.
What personal information can I access or change?
-------------------------------------------------
You can request access to the information we have collected from you. You can
do this by contacting us at privacy@taler-systems.net. We will make sure to
provide you with a copy of the data we process about you. To comply with your
request, we may ask you to verify your identity. We will fulfill your request
by sending your copy electronically. For any subsequent access request, we may
charge you with an administrative fee. If you believe that the information we
have collected is incorrect, you are welcome to contact us so we can update it
and keep your data accurate. Any data that is no longer needed for purposes
specified in the “How We Use the Information We Gather” section will be
deleted after ninety (90) days.
Data retention
--------------
If you uninstall the Taler Wallet mobile applications from your device, or
request that your information be deleted, we still may retain some information
that you have provided to us to maintain the Taler Wallet or to comply with
relevant laws.
Data security
-------------
We are committed to making sure your information is protected. We employ
several physical and electronic safeguards to keep your information safe,
including encrypted user passwords, two factor verification and authentication
on passwords where possible, and securing connections with industry standard
transport layer security. You are also welcome to contact us using GnuPG
encrypted e-mail. Even with all these precautions, we cannot fully guarantee
against the access, disclosure, alteration, or deletion of data through
events, including but not limited to hardware or software failure or
unauthorized use. Any information that you provide to us is done so entirely
at your own risk.
Changes and updates to privacy policy
-------------------------------------
We reserve the right to update and revise this privacy policy at any time. We
occasionally review this Privacy Policy to make sure it complies with
applicable laws and conforms to changes in our business. We may need to update
this Privacy Policy, and we reserve the right to do so at any time. If we do
revise this Privacy Policy, we will update the “Effective Date” at the bottom
of this page so that you can tell if it has changed since your last visit. As
we generally do not collect contact information and also do not track your
visits, we will not be able to notify you directly. However, the Taler Wallet
may inform you about a change in the privacy policy once it detects that the
policy has changed. Please review this Privacy Policy regularly to ensure that
you are aware of its terms. Any use of our Services after an amendment to our
Privacy Policy constitutes your acceptance to the revised or amended
agreement.
International users and visitors
--------------------------------
Our Services are hosted in Switzerland. If you are a user accessing the
Services from the European Union, Asia, US, or any other region with laws or
regulations governing personal data collection, use, and disclosure that
differ from Swiss laws, please be advised that through your continued use of
the Services, which is governed by Swiss law, you are transferring your
Personal Information to Switzerland and you consent to that transfer.
Questions
---------
Please contact us at privacy@taler-systems.net if you have questions about our
privacy practices that are not addressed in this Privacy Statement.

View File

@ -10,6 +10,12 @@
set -eu
if [ "$#" -ne 3 ];
then
echo "illegal number of parameters"
exit 1
fi
# Ensure starting accounts exist
taler-bank-manage -c $1 --with-db $2 django provide_accounts
taler-bank-manage -c $1 --with-db $2 django add_bank_account 42

24
contrib/taler-exchange-revoke Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# This file is in the public domain
#
# Used to first revoke a key and then restart the exchange
# to ensure it notices the revocation.
#
# Takes 2 arguments:
# $1: the configuration file name
# $2: the denomination key hash (DKH) of the denomination to revoke
set -eu
if [ "$#" -ne 2 ];
then
echo "illegal number of parameters"
exit 1
fi
taler-exchange-keyup -c $1 -r $2
EXCHANGE_PID=`ps x | grep taler-exchange-httpd | awk '{print $1}'`
kill -SIGUSR1 $EXCHANGE_PID
exit 0

3
contrib/tos/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
sphinx.err
sphinx.log
_build/

109
contrib/tos/Makefile Normal file
View File

@ -0,0 +1,109 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html json epub latex latexpdf text man doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make a single large HTML file"
@echo " json to make JSON files"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " pdf to make LaTeX files and run them through pdflatex"
@echo " txt to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
# The html-linked builder does not support caching, so we
# remove all cached state first.
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/html."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
pdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/pdf
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/pdf all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/pdf."
txt:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/txt
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/txt."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/info
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/info."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."

View File

@ -1,11 +0,0 @@
# English (en)
tosendir=$(pkgdatadir)/tos/en
tosen_DATA = \
en/0.txt \
en/0.docx \
en/0.html
EXTRA_DIST = \
$(tosen_DATA)

58
contrib/tos/README Normal file
View File

@ -0,0 +1,58 @@
This directory contains the terms of service (template) for exchange
operators.
Dependencies
============
Generating new Terms of Service requires Sphinx, LaTeX with babel
packages for all supported languages. On Debian, you should
at least install:
$ apt install python3-sphinx sphinx-intl texlive-lang-german texlive-lang-english
(NOTE: List may be incomplete.)
Updating the Terms of Service
=============================
The master file with the Terms of service is 'tos.rst'.
If you make substantial changes, you MUST change the "TOS_VERSION"
in contrib/Makefile.am to the new Etag.
To begin the translation into other languages after editing the master
file, run
$ make gettext
to generate the master PO file. Then, run
$ sphinx-intl update -p _build/locale/ -l de -l fr -l it
to update the PO files for the various languages (extend the list of
languages as necessary). The PO files for the translators are kept
at locale/$LANG/LC_MESSAGES/tos.po for the language $LANG.
Once all PO files have been updated with new translations, run
$ make update-tos
in the "contrib/" directory to generate all of the formats. The
respective make rule calls the '../update-tos.sh' script in the
contrib/ directory, which calls the 'Makefile' in the tos/
directory for the various supported languages and file formats
and then moves the generated files to the target directory
('contrib/tos/$LANG/$VERSION.$FORMAT')
Adding a new language
=====================
To add a new language $LANG, add $LANG to "TOS_LANGUAGES" in
'contrib/Makefile.am' and run
$ sphinx-intl update -p _build/gettext -l $LANG
to generate the PO template.

282
contrib/tos/conf.py Normal file
View File

@ -0,0 +1,282 @@
"""
This file is part of GNU TALER.
Copyright (C) 2014-2020 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2.1, 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
@author Florian Dold
@author Benedikt Muller
@author Sree Harsha Totakura
@author Marcello Stanisci
"""
# -*- coding: utf-8 -*-
#
# neuro documentation build configuration file, created by
# sphinx-quickstart on Sat May 31 13:11:06 2014.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
sys.path.append(os.path.abspath('_exts'))
#import taler_sphinx_theme
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '1.8.5'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.todo',
'sphinx.ext.imgmath',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
source_suffix = {
'.rst': 'restructuredtext',
}
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'tos'
# General information about the project.
project = u'tos'
copyright = u'2014-2020 Taler Systems SA (GPLv3+ or GFDL 1.3+)'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '0'
# The full version, including alpha/beta/rc tags.
release = '0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# language = "en de"
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build', '_exts', 'cf', 'prebuilt']
# The reST default role (used for this markup: `text`) to use for all
# documents.
# default_role = "ts:type"
locale_dirs = ['locale/']
gettext_compact = False
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'epub'
#html_theme_path = taler_sphinx_theme.html_theme_path()
#html_sidebars = {'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']}
rst_epilog = ""
html_show_sphinx = False
html_theme_options = {
# Set the name of the project to appear in the sidebar
"relbar1": "false",
"footer": "false",
}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
html_title = "Taler Terms of Service"
# A shorter title for the navigation bar. Default is the same as html_title.
html_short_title = "Terms of Service"
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('tos', 'tos.tex',
'Terms of Service', 'GNU Taler team', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
# latex_appendices = ["fdl-1.3"]
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# If true, show URL addresses after external links.
#man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
# -- Options for epub output ----------------------------
epub_basename = "tos"
epub_title = "Terms of Service"

Binary file not shown.

BIN
contrib/tos/en/0.epub Normal file

Binary file not shown.

View File

@ -1,364 +1,337 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title></title>
<meta name="author" content="Michael Widmer"/>
<meta name="created" content="2019-12-01T07:06:00"/>
<meta name="changed" content="2019-12-04T00:01:19.809905379"/>
</head>
<body lang="en">
<h1>Terms Of Service - Last Updated: 12.4.2019</h1>
<p>
Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment service
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Terms Of Service &#8212; Taler Terms of Service</title>
<link rel="stylesheet" href="_static/epub.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="terms-of-service">
<h1>Terms Of Service<a class="headerlink" href="#terms-of-service" title="Permalink to this headline"></a></h1>
<p>Last Updated: 12.4.2019</p>
<p>Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment service
through our Internet presence (collectively the “Services”). Before using our
Services, please read the Terms of Service (the “Terms” or the “Agreement”)
carefully.
</p>
<h2>Overview</h2>
<p>
This
section provides a brief summary of the highlights of this Agreement.
Please note that when you accept this Agreement, you are accepting
all of the terms and conditions and not just this section. We and
possibly other third parties provide Internet services which interact
with the Taler Wallets self-hosted personal payment application.
When using the Taler Wallet to interact with our Services, you are
agreeing to our Terms, so please read carefully.
</p>
<p>Highlights:
<ul>
<li>You
are responsible for keeping the data in your Taler Wallet at all
times under your control. Any losses arising from you not being in
control of your private information are your problem.
<li>We
will try to transfer funds we hold in escrow for our users to any
legal recipient to the best of our ability within the limitations of
the law and our implementation. However, the Services offered today
are highly experimental and the set of recipients of funds is
severely restricted.
<li>For
our Services, we may charge transaction fees. The specific fee
structure is provided based on the Taler protocol and should be
shown to you when you withdraw electronic coins using a Taler
Wallet. You agree and understand that the Taler protocol allows for
the fee structure to change.
<li>You
agree to not intentionally overwhelm our systems with requests and
follow responsible disclosure if you find security issues in our
services.
<li>We
cannot be held accountable for our Services not being available due
to circumstances beyond our control. If we modify or terminate our
services, we will try to give you the opportunity to recover your
funds. However, given the experimental state of the Services today,
this may not be possible. You are strongly advised to limit your use
of the Service to small-scale experiments expecting total loss of
all funds.
</ul></p>
<p>These
terms outline approved uses of our Services. The Services and these
Terms are still at an experimental stage. If you have any questions
or comments related to this Agreement, please send us a message to
legal@taler-systems.com. If you do not agree to this Agreement, you
must not use our Services.
</p>
<h2>How you accept this policy</h2>
<p>By
sending funds to us (to top-up your Taler Wallet), you acknowledge
that you have read, understood, and agreed to these Terms. We reserve
the right to change these Terms at any time. If you disagree with the
change, we may in the future offer you with an easy option to recover
your unspent funds. However, in the current experimental period you
acknowledge that this feature is not yet available, resulting in your
funds being lost unless you accept the new Terms. If you continue to
use our Services other than to recover your unspent funds, your
continued use of our Services following any such change will signify
your acceptance to be bound by the then current Terms. Please check
the effective date above to determine if there have been any changes
since you have last reviewed these Terms.</p>
<h2>Services</h2>
<p>We
will try to transfer funds that we hold in escrow for our users to
any legal recipient to the best of our ability and within the
limitations of the law and our implementation. However, the Services
offered today are highly experimental and the set of recipients of
funds is severely restricted.</p>
<p>The
Taler Wallet can be loaded by exchanging fiat currencies against
electronic coins. We are providing this exchange service. Once your
Taler Wallet is loaded with electronic coins they can be spent for
purchases if the seller is accepting Taler as a means of payment. We
are not guaranteeing that any seller is accepting Taler at all or a
particular seller.</p>
<p>The
seller or recipient of deposits of electronic coins must specify the
target account, as per the design of the Taler protocol. They are
responsible for following the protocol and specifying the correct
bank account, and are solely liable for any losses that may arise
from specifying the wrong account. We will allow the government to
link wire transfers to the underlying contract hash. It is the
responsibility of recipients to preserve the full contracts and to
pay whatever taxes and charges may be applicable. Technical issues
may lead to situations where we are unable to make transfers at all
or lead to incorrect transfers that cannot be reversed. We will only
refuse to execute transfers if the transfers are prohibited by a
competent legal authority and we are ordered to do so.</p>
<p lang="en" class="western" style="margin-bottom: 0.19in; line-height: 100%">
<br/>
<br/>
</p>
<h2>FEES</h2>
<p>You
agree to pay the fees for exchanges and withdrawals completed via the
Taler Wallet (&quot;Fees&quot;) as defined by us, which we may change
from time to time. With the exception of wire transfer fees, Taler
transaction fees are set for any electronic coin at the time of
withdrawal and fixed throughout the validity period of the respective
electronic coin. Your wallet should obtain and display applicable
fees when withdrawing funds. Fees for coins obtained as change may
differ from the fees applicable to the original coin. Wire transfer
fees that are independent from electronic coins may change annually.
</p>
<p>You
authorize us to charge or deduct applicable fees owed in connection
with deposits, exchanges and withdrawals following the rules of the
Taler protocol.</p>
<p>We
reserve the right to provide different types of rewards to users
either in the form of discount for our Services or in any other form
at our discretion and without prior notice to you.</p>
<h2>ELIGIBILITY</h2>
<p>To
be eligible to use our Services, you must be able to form legally
binding contracts or have the permission of your legal guardian. By
using our Services, you represent and warrant that you meet all
eligibility requirements that we outline in these Terms.
</p>
<p>FINANCIAL SELF-RESPONSIBILITY</p>
<p>You
will be responsible for maintaining the availability, integrity and
confidentiality of the data stored in your wallet. When you setup a
Taler Wallet, you are strongly advised to follow the precautionary
measures offered by the software to minimize the chances to losse
access to or control over your Wallet data. We will not be liable for
any loss or damage arising from your failure to comply with this
paragraph.
</p>
<h2>COPYRIGHTS and TRADEMARKS</h2>
<p>The
Taler Wallet is released under the terms of the GNU General Public
License (GNU GPL). You have the right to access, use, and share the
Taler Wallet, in modified or unmodified form. However, the GPL is a
strong copyleft license, which means that any derivative works must
be distributed under the same license terms as the original software.
If you have any questions, you should review the GNU GPLs full
terms and conditions at https://www.gnu.org/licenses/gpl-3.0.en.html.
</p>
<p>"Taler"
itself is a trademark of Taler Systems SA. You are welcome to use the
name in relation to processing payments using the Taler protocol,
assuming your use is compatible with an official release from the GNU
Project that is not older than two years.
</p>
<h2>YOUR USE OF OUR SERVICES</h2>
<p>When
using our Services, you agree to not take any action that
intentionally imposes an unreasonable load on our infrastructure. If
you find security problems in our Services, you agree to first report
them to <a href="mailto:security@taler-systems.com">security@taler-systems.com</a>
and grant us the right to publish your report. We warrant that we
will ourselves publicly disclose any issues reported within 3 months,
and that we will not prosecute anyone reporting security issues if
they did not exploit the issue beyond a proof-of-concept, and
followed the above responsible disclosure practice.</p>
<h2>LIMITATION OF LIABILITY &amp; DISCLAIMER OF WARRANTIES</h2>
<p>You
understand and agree that we have no control over, and no duty to
take any action regarding: Failures, disruptions, errors, or delays
in processing that you may experience while using our Services; The
risk of failure of hardware, software, and Internet connections; The
risk of malicious software being introduced or found in the software
underlying the Taler Wallet; The risk that third parties may obtain
unauthorized access to information stored within your Taler Wallet,
including, but not limited to your Taler Wallet coins or backup
encryption keys.
</p>
<p>You
release us from all liability related to any losses, damages, or
claims arising from:
<ol>
<li>user error such as forgotten passwords, incorrectly constructed
carefully.</p>
<div class="section" id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p>This section provides a brief summary of the highlights of this
Agreement. Please note that when you accept this Agreement, you are accepting
all of the terms and conditions and not just this section. We and possibly
other third parties provide Internet services which interact with the Taler
Wallets self-hosted personal payment application. When using the Taler Wallet
to interact with our Services, you are agreeing to our Terms, so please read
carefully.</p>
<div class="section" id="highlights">
<h3>Highlights:<a class="headerlink" href="#highlights" title="Permalink to this headline"></a></h3>
<blockquote>
<div><ul class="simple">
<li>You are responsible for keeping the data in your Taler Wallet at all times
under your control. Any losses arising from you not being in control of
your private information are your problem.</li>
<li>We will try to transfer funds we hold in escrow for our users to any legal
recipient to the best of our ability within the limitations of the law and
our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted.</li>
<li>For our Services, we may charge transaction fees. The specific fee structure
is provided based on the Taler protocol and should be shown to you when you
withdraw electronic coins using a Taler Wallet. You agree and understand
that the Taler protocol allows for the fee structure to change.</li>
<li>You agree to not intentionally overwhelm our systems with requests and
follow responsible disclosure if you find security issues in our services.</li>
<li>We cannot be held accountable for our Services not being available due to
circumstances beyond our control. If we modify or terminate our services,
we will try to give you the opportunity to recover your funds. However,
given the experimental state of the Services today, this may not be
possible. You are strongly advised to limit your use of the Service
to small-scale experiments expecting total loss of all funds.</li>
</ul>
</div></blockquote>
<p>These terms outline approved uses of our Services. The Services and these
Terms are still at an experimental stage. If you have any questions or
comments related to this Agreement, please send us a message to
<a class="reference external" href="mailto:legal&#37;&#52;&#48;taler-systems&#46;com">legal<span>&#64;</span>taler-systems<span>&#46;</span>com</a>. If you do not agree to this Agreement, you must not
use our Services.</p>
</div>
</div>
<div class="section" id="how-you-accept-this-policy">
<h2>How you accept this policy<a class="headerlink" href="#how-you-accept-this-policy" title="Permalink to this headline"></a></h2>
<p>By sending funds to us (to top-up your Taler Wallet), you acknowledge that you
have read, understood, and agreed to these Terms. We reserve the right to
change these Terms at any time. If you disagree with the change, we may in the
future offer you with an easy option to recover your unspent funds. However,
in the current experimental period you acknowledge that this feature is not
yet available, resulting in your funds being lost unless you accept the new
Terms. If you continue to use our Services other than to recover your unspent
funds, your continued use of our Services following any such change will
signify your acceptance to be bound by the then current Terms. Please check
the effective date above to determine if there have been any changes since you
have last reviewed these Terms.</p>
</div>
<div class="section" id="services">
<h2>Services<a class="headerlink" href="#services" title="Permalink to this headline"></a></h2>
<p>We will try to transfer funds that we hold in escrow for our users to any
legal recipient to the best of our ability and within the limitations of the
law and our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted. The
Taler Wallet can be loaded by exchanging fiat currencies against electronic
coins. We are providing this exchange service. Once your Taler Wallet is
loaded with electronic coins they can be spent for purchases if the seller is
accepting Taler as a means of payment. We are not guaranteeing that any seller
is accepting Taler at all or a particular seller. The seller or recipient of
deposits of electronic coins must specify the target account, as per the
design of the Taler protocol. They are responsible for following the protocol
and specifying the correct bank account, and are solely liable for any losses
that may arise from specifying the wrong account. We will allow the government
to link wire transfers to the underlying contract hash. It is the
responsibility of recipients to preserve the full contracts and to pay
whatever taxes and charges may be applicable. Technical issues may lead to
situations where we are unable to make transfers at all or lead to incorrect
transfers that cannot be reversed. We will only refuse to execute transfers if
the transfers are prohibited by a competent legal authority and we are ordered
to do so.</p>
</div>
<div class="section" id="fees">
<h2>Fees<a class="headerlink" href="#fees" title="Permalink to this headline"></a></h2>
<p>You agree to pay the fees for exchanges and withdrawals completed via the
Taler Wallet (“Fees”) as defined by us, which we may change from time to
time. With the exception of wire transfer fees, Taler transaction fees are set
for any electronic coin at the time of withdrawal and fixed throughout the
validity period of the respective electronic coin. Your wallet should obtain
and display applicable fees when withdrawing funds. Fees for coins obtained as
change may differ from the fees applicable to the original coin. Wire transfer
fees that are independent from electronic coins may change annually. You
authorize us to charge or deduct applicable fees owed in connection with
deposits, exchanges and withdrawals following the rules of the Taler protocol.
We reserve the right to provide different types of rewards to users either in
the form of discount for our Services or in any other form at our discretion
and without prior notice to you.</p>
</div>
<div class="section" id="eligibility">
<h2>Eligibility<a class="headerlink" href="#eligibility" title="Permalink to this headline"></a></h2>
<p>To be eligible to use our Services, you must be able to form legally binding
contracts or have the permission of your legal guardian. By using our
Services, you represent and warrant that you meet all eligibility requirements
that we outline in these Terms.</p>
</div>
<div class="section" id="financial-self-responsibility">
<h2>Financial self-responsibility<a class="headerlink" href="#financial-self-responsibility" title="Permalink to this headline"></a></h2>
<p>You will be responsible for maintaining the availability, integrity and
confidentiality of the data stored in your wallet. When you setup a Taler
Wallet, you are strongly advised to follow the precautionary measures offered
by the software to minimize the chances to losse access to or control over
your Wallet data. We will not be liable for any loss or damage arising from
your failure to comply with this paragraph.</p>
</div>
<div class="section" id="copyrights-and-trademarks">
<h2>Copyrights and trademarks<a class="headerlink" href="#copyrights-and-trademarks" title="Permalink to this headline"></a></h2>
<p>The Taler Wallet is released under the terms of the GNU General Public License
(GNU GPL). You have the right to access, use, and share the Taler Wallet, in
modified or unmodified form. However, the GPL is a strong copyleft license,
which means that any derivative works must be distributed under the same
license terms as the original software. If you have any questions, you should
review the GNU GPLs full terms and conditions at
<a class="reference external" href="https://www.gnu.org/licenses/gpl-3.0.en.html">https://www.gnu.org/licenses/gpl-3.0.en.html</a>. “Taler” itself is a trademark
of Taler Systems SA. You are welcome to use the name in relation to processing
payments using the Taler protocol, assuming your use is compatible with an
official release from the GNU Project that is not older than two years.</p>
</div>
<div class="section" id="your-use-of-our-services">
<h2>Your use of our services<a class="headerlink" href="#your-use-of-our-services" title="Permalink to this headline"></a></h2>
<p>When using our Services, you agree to not take any action that intentionally
imposes an unreasonable load on our infrastructure. If you find security
problems in our Services, you agree to first report them to
<a class="reference external" href="mailto:security&#37;&#52;&#48;taler-systems&#46;com">security<span>&#64;</span>taler-systems<span>&#46;</span>com</a> and grant us the right to publish your report. We
warrant that we will ourselves publicly disclose any issues reported within 3
months, and that we will not prosecute anyone reporting security issues if
they did not exploit the issue beyond a proof-of-concept, and followed the
above responsible disclosure practice.</p>
</div>
<div class="section" id="limitation-of-liability-disclaimer-of-warranties">
<h2>Limitation of liability &amp; disclaimer of warranties<a class="headerlink" href="#limitation-of-liability-disclaimer-of-warranties" title="Permalink to this headline"></a></h2>
<p>You understand and agree that we have no control over, and no duty to take any
action regarding: Failures, disruptions, errors, or delays in processing that
you may experience while using our Services; The risk of failure of hardware,
software, and Internet connections; The risk of malicious software being
introduced or found in the software underlying the Taler Wallet; The risk that
third parties may obtain unauthorized access to information stored within your
Taler Wallet, including, but not limited to your Taler Wallet coins or backup
encryption keys. You release us from all liability related to any losses,
damages, or claims arising from:</p>
<ol class="loweralpha simple">
<li>user error such as forgotten passwords, incorrectly constructed
transactions;</li>
<li>server failure or data loss;</li>
<li>unauthorized access to the Taler Wallet application;</li>
<li>bugs or other errors in the Taler Wallet software; and</li>
<li>any unauthorized third party activities, including, but not limited
to, the use of viruses, phishing, brute forcing, or other means of
attack against the Taler Wallet. We make no representations
concerning any Third Party Content contained in or accessed through
our Services.</li>
</ol>
</p>
Any
other terms, conditions, warranties, or representations associated
with such content, are solely between you and such organizations
and/or individuals.
</p>
<h2>LIMITATION OF LIABILITY</h2>
</p>
<p>To
the fullest extent permitted by applicable law, in no event will we
or any of our officers, directors, representatives, agents, servants,
counsel, employees, consultants, lawyers, and other personnel
authorized to act, acting, or purporting to act on our behalf
(collectively the “Taler Parties”) be liable to you under
contract, tort, strict liability, negligence, or any other legal or
equitable theory, for:
<ol>
<li>
any lost profits, data loss, cost of procurement of substitute goods
or services, or direct, indirect, incidental, special, punitive,
compensatory, or consequential damages of any kind whatsoever
resulting from:
<ol>
<li>
your use of, or conduct in connection with, our services;</li>
<li>
any unauthorized use of your wallet and/or private key due to your
<li>server failure or data loss;</li>
<li>unauthorized access to the Taler Wallet application;</li>
<li>bugs or other errors in the Taler Wallet software; and</li>
<li>any unauthorized third party activities, including, but not limited to,
the use of viruses, phishing, brute forcing, or other means of attack
against the Taler Wallet. We make no representations concerning any
Third Party Content contained in or accessed through our Services.</li>
</ol>
<p>Any other terms, conditions, warranties, or representations associated with
such content, are solely between you and such organizations and/or
individuals.</p>
</div>
<div class="section" id="limitation-of-liability">
<h2>Limitation of liability<a class="headerlink" href="#limitation-of-liability" title="Permalink to this headline"></a></h2>
<p>To the fullest extent permitted by applicable law, in no event will we or any
of our officers, directors, representatives, agents, servants, counsel,
employees, consultants, lawyers, and other personnel authorized to act,
acting, or purporting to act on our behalf (collectively the “Taler Parties”)
be liable to you under contract, tort, strict liability, negligence, or any
other legal or equitable theory, for:</p>
<ol class="loweralpha simple">
<li>any lost profits, data loss, cost of procurement of substitute goods or
services, or direct, indirect, incidental, special, punitive, compensatory,
or consequential damages of any kind whatsoever resulting from:</li>
</ol>
<blockquote>
<div><ol class="lowerroman simple">
<li>your use of, or conduct in connection with, our services;</li>
<li>any unauthorized use of your wallet and/or private key due to your
failure to maintain the confidentiality of your wallet;</li>
<li>any interruption or cessation of transmission to or from the
services; or</li>
<li>any bugs, viruses, trojan horses, or the like that are found in the
Taler Wallet software or that may be transmitted to or through our
services by any third party (regardless of the source of
origination)</li>
<li>any interruption or cessation of transmission to or from the services; or</li>
<li>any bugs, viruses, trojan horses, or the like that are found in the Taler
Wallet software or that may be transmitted to or through our services by
any third party (regardless of the source of origination), or</li>
</ol>
<li>or any direct damages.</li>
</div></blockquote>
<ol class="loweralpha simple" start="2">
<li>any direct damages.</li>
</ol>
</p>
<p>These
limitations apply regardless of legal theory, whether based on tort,
strict liability, breach of contract, breach of warranty, or any
other legal theory, and whether or not we were advised of the
possibility of such damages. Some jurisdictions do not allow the
exclusion or limitation of liability for consequential or incidental
damages, so the above limitation may not apply to you.
</p>
<h2>WARRANTY DISCLAIMER</h2>
<p>Our
services are provided &quot;as is&quot; and without warranty of any
kind. To the maximum extent permitted by law, we disclaim all
representations and warranties, express or implied, relating to the
services and underlying software or any content on the services,
whether provided or owned by us or by any third party, including
without limitation, warranties of merchantability, fitness for a
particular purpose, title, non-infringement, freedom from computer
virus, and any implied warranties arising from course of dealing,
<p>These limitations apply regardless of legal theory, whether based on tort,
strict liability, breach of contract, breach of warranty, or any other legal
theory, and whether or not we were advised of the possibility of such
damages. Some jurisdictions do not allow the exclusion or limitation of
liability for consequential or incidental damages, so the above limitation may
not apply to you.</p>
</div>
<div class="section" id="warranty-disclaimer">
<h2>Warranty disclaimer<a class="headerlink" href="#warranty-disclaimer" title="Permalink to this headline"></a></h2>
<p>Our services are provided “as is” and without warranty of any kind. To the
maximum extent permitted by law, we disclaim all representations and
warranties, express or implied, relating to the services and underlying
software or any content on the services, whether provided or owned by us or by
any third party, including without limitation, warranties of merchantability,
fitness for a particular purpose, title, non-infringement, freedom from
computer virus, and any implied warranties arising from course of dealing,
course of performance, or usage in trade, all of which are expressly
disclaimed. In addition, we do not represent or warrant that the
content accessible via the services is accurate, complete, available,
current, free of viruses or other harmful components, or that the
results of using the services will meet your requirements. Some
states do not allow the disclaimer of implied warranties, so the
foregoing disclaimers may not apply to you. This paragraph gives you
specific legal rights and you may also have other legal rights that
vary from state to state.
</p>
<h2>INDEMNITY</h2>
<p>To
the extent permitted by applicable law, you agree to defend,
indemnify, and hold harmless the Taler Parties from and against any
and all claims, damages, obligations, losses, liabilities, costs or
debt, and expenses (including, but not limited to, attorneys fees)
arising from: (a) your use of and access to the Services; (b) any
feedback or submissions you provide to us concerning the Taler
Wallet; (c) your violation of any term of this Agreement; or (d) your
violation of any law, rule, or regulation, or the rights of any third
party.
</p>
<h2>TIME LIMITATION ON CLAIMS</h2>
<p>You
agree that any claim you may have arising out of or related to your
relationship with us must be filed within one year after such claim
arises, otherwise, your claim in permanently barred.
</p>
<h2>GOVERNING LAW</h2>
<p>No
matter where youre located, the laws of Switzerland will govern
these Terms. If any provisions of these Terms are inconsistent with
any applicable law, those provisions will be superseded or modified
only to the extent such provisions are inconsistent. The parties
agree to submit to the ordinary courts in Zurich, Switzerland for
exclusive jurisdiction of any dispute arising out of or related to
your use of the Services or your breach of these Terms.
</p>
<h2>TERMINATION</h2>
<p>
the event of termination concerning your use of our Services, your
obligations under this Agreement will still continue.
</p>
<h2>DISCONTINUANCE OF SERVICES</h2>
<p>We
may, in our sole discretion and without cost to you, with or without
prior notice, and at any time, modify or discontinue, temporarily or
permanently, any portion of our Services. We will use the Taler
protocols provisions to notify Wallets if our Services are to be
discontinued. It is your responsibility to ensure that the Taler
Wallet is online at least once every three months to observe these
notifications. We shall not be held responsible or liable for any
loss of funds in the event that we discontinue or depreciate the
Services and your Taler Wallet fails to transfer out the coins within
a three months notification period.
</p>
<h2>NO WAIVER</h2>
<p>Our
failure to exercise or delay in exercising any right, power, or
privilege under this Agreement shall not operate as a waiver; nor
shall any single or partial exercise of any right, power, or
privilege preclude any other or further exercise thereof.
</p>
<h2>SEVERABILITY</h2>
<p>If
it turns out that any part of this Agreement is invalid, void, or for
any reason unenforceable, that term will be deemed severable and
limited or eliminated to the minimum extent necessary.
</p>
<h2>FORCE MAJEURE</h2>
<p>We
shall not be held liable for any delays, failure in performance, or
interruptions of service which result directly or indirectly from any
cause or condition beyond our reasonable control, including but not
limited to: any delay or failure due to any act of God, act of civil
or military authorities, act of terrorism, civil disturbance, war,
strike or other labor dispute, fire, interruption in
telecommunications or Internet services or network provider services,
failure of equipment and/or software, other catastrophe, or any other
occurrence which is beyond our reasonable control and shall not
affect the validity and enforceability of any remaining provisions.
</p>
<h2>ASSIGNMENT</h2>
<p>You
agree that we may assign any of our rights and/or transfer,
sub-contract, or delegate any of our obligations under these Terms.
</p>
<h2>ENTIRE AGREEMENT</h2>
<p>This
Agreement sets forth the entire understanding and agreement as to the
disclaimed. In addition, we do not represent or warrant that the content
accessible via the services is accurate, complete, available, current, free of
viruses or other harmful components, or that the results of using the services
will meet your requirements. Some states do not allow the disclaimer of
implied warranties, so the foregoing disclaimers may not apply to you. This
paragraph gives you specific legal rights and you may also have other legal
rights that vary from state to state.</p>
</div>
<div class="section" id="indemnity">
<h2>Indemnity<a class="headerlink" href="#indemnity" title="Permalink to this headline"></a></h2>
<p>To the extent permitted by applicable law, you agree to defend, indemnify, and
hold harmless the Taler Parties from and against any and all claims, damages,
obligations, losses, liabilities, costs or debt, and expenses (including, but
not limited to, attorneys fees) arising from: (a) your use of and access to
the Services; (b) any feedback or submissions you provide to us concerning the
Taler Wallet; (c) your violation of any term of this Agreement; or (d) your
violation of any law, rule, or regulation, or the rights of any third party.</p>
</div>
<div class="section" id="time-limitation-on-claims">
<h2>Time limitation on claims<a class="headerlink" href="#time-limitation-on-claims" title="Permalink to this headline"></a></h2>
<p>You agree that any claim you may have arising out of or related to your
relationship with us must be filed within one year after such claim arises,
otherwise, your claim in permanently barred.</p>
</div>
<div class="section" id="governing-law">
<h2>Governing law<a class="headerlink" href="#governing-law" title="Permalink to this headline"></a></h2>
<p>No matter where youre located, the laws of Switzerland will govern these
Terms. If any provisions of these Terms are inconsistent with any applicable
law, those provisions will be superseded or modified only to the extent such
provisions are inconsistent. The parties agree to submit to the ordinary
courts in Zurich, Switzerland for exclusive jurisdiction of any dispute
arising out of or related to your use of the Services or your breach of these
Terms.</p>
</div>
<div class="section" id="termination">
<h2>Termination<a class="headerlink" href="#termination" title="Permalink to this headline"></a></h2>
<p>In the event of termination concerning your use of our Services, your
obligations under this Agreement will still continue.</p>
</div>
<div class="section" id="discontinuance-of-services">
<h2>Discontinuance of services<a class="headerlink" href="#discontinuance-of-services" title="Permalink to this headline"></a></h2>
<p>We may, in our sole discretion and without cost to you, with or without prior
notice, and at any time, modify or discontinue, temporarily or permanently,
any portion of our Services. We will use the Taler protocols provisions to
notify Wallets if our Services are to be discontinued. It is your
responsibility to ensure that the Taler Wallet is online at least once every
three months to observe these notifications. We shall not be held responsible
or liable for any loss of funds in the event that we discontinue or depreciate
the Services and your Taler Wallet fails to transfer out the coins within a
three months notification period.</p>
</div>
<div class="section" id="no-waiver">
<h2>No waiver<a class="headerlink" href="#no-waiver" title="Permalink to this headline"></a></h2>
<p>Our failure to exercise or delay in exercising any right, power, or privilege
under this Agreement shall not operate as a waiver; nor shall any single or
partial exercise of any right, power, or privilege preclude any other or
further exercise thereof.</p>
</div>
<div class="section" id="severability">
<h2>Severability<a class="headerlink" href="#severability" title="Permalink to this headline"></a></h2>
<p>If it turns out that any part of this Agreement is invalid, void, or for any
reason unenforceable, that term will be deemed severable and limited or
eliminated to the minimum extent necessary.</p>
</div>
<div class="section" id="force-majeure">
<h2>Force majeure<a class="headerlink" href="#force-majeure" title="Permalink to this headline"></a></h2>
<p>We shall not be held liable for any delays, failure in performance, or
interruptions of service which result directly or indirectly from any cause or
condition beyond our reasonable control, including but not limited to: any
delay or failure due to any act of God, act of civil or military authorities,
act of terrorism, civil disturbance, war, strike or other labor dispute, fire,
interruption in telecommunications or Internet services or network provider
services, failure of equipment and/or software, other catastrophe, or any
other occurrence which is beyond our reasonable control and shall not affect
the validity and enforceability of any remaining provisions.</p>
</div>
<div class="section" id="assignment">
<h2>Assignment<a class="headerlink" href="#assignment" title="Permalink to this headline"></a></h2>
<p>You agree that we may assign any of our rights and/or transfer, sub-contract,
or delegate any of our obligations under these Terms.</p>
</div>
<div class="section" id="entire-agreement">
<h2>Entire agreement<a class="headerlink" href="#entire-agreement" title="Permalink to this headline"></a></h2>
<p>This Agreement sets forth the entire understanding and agreement as to the
subject matter hereof and supersedes any and all prior discussions,
agreements, and understandings of any kind (including, without
limitation, any prior versions of this Agreement) and every nature
between us. Except as provided for above, any modification to this
Agreement must be in writing and must be signed by both parties.
</p>
<h2>QUESTIONS OR COMMENTS</h2>
<p>We
welcome comments, questions, concerns, or suggestions. Please send us
a message on our contact page at <tt>legal@taler-systems.com</tt>.
</p>
</body>
</html>
agreements, and understandings of any kind (including, without limitation, any
prior versions of this Agreement) and every nature between us. Except as
provided for above, any modification to this Agreement must be in writing and
must be signed by both parties.</p>
</div>
<div class="section" id="questions-or-comments">
<h2>Questions or comments<a class="headerlink" href="#questions-or-comments" title="Permalink to this headline"></a></h2>
<p>We welcome comments, questions, concerns, or suggestions. Please send us a
message on our contact page at <a class="reference external" href="mailto:legal&#37;&#52;&#48;taler-systems&#46;com">legal<span>&#64;</span>taler-systems<span>&#46;</span>com</a>.</p>
</div>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
</body>
</html>

BIN
contrib/tos/en/0.pdf Normal file

Binary file not shown.

View File

@ -1,295 +1,381 @@
Terms Of Service - Last Updated: 12.4.2019
Terms Of Service
****************
Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment service
through our Internet presence (collectively the “Services”). Before using our
Services, please read the Terms of Service (the “Terms” or the “Agreement”)
carefully.
Last Updated: 12.4.2019
OVERVIEW
Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment
service through our Internet presence (collectively the “Services”).
Before using our Services, please read the Terms of Service (the
“Terms” or the “Agreement”) carefully.
Overview
========
This section provides a brief summary of the highlights of this
Agreement. Please note that when you accept this Agreement, you are accepting
all of the terms and conditions and not just this section. We and possibly
other third parties provide Internet services which interact with the Taler
Wallets self-hosted personal payment application. When using the Taler Wallet
to interact with our Services, you are agreeing to our Terms, so please read
carefully.
Agreement. Please note that when you accept this Agreement, you are
accepting all of the terms and conditions and not just this section.
We and possibly other third parties provide Internet services which
interact with the Taler Wallets self-hosted personal payment
application. When using the Taler Wallet to interact with our
Services, you are agreeing to our Terms, so please read carefully.
Highlights:
• You are responsible for keeping the data in your Taler Wallet at all times
under your control. Any losses arising from you not being in control of
your private information are your problem.
• We will try to transfer funds we hold in escrow for our users to any legal
recipient to the best of our ability within the limitations of the law and
our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted.
• For our Services, we may charge transaction fees. The specific fee structure
is provided based on the Taler protocol and should be shown to you when you
withdraw electronic coins using a Taler Wallet. You agree and understand
that the Taler protocol allows for the fee structure to change.
• You agree to not intentionally overwhelm our systems with requests and
follow responsible disclosure if you find security issues in our services.
• We cannot be held accountable for our Services not being available due to
circumstances beyond our control. If we modify or terminate our services,
we will try to give you the opportunity to recover your funds. However,
given the experimental state of the Services today, this may not be
possible. You are strongly advised to limit your use of the Service
to small-scale experiments expecting total loss of all funds.
-----------
These terms outline approved uses of our Services. The Services and these
Terms are still at an experimental stage. If you have any questions or
comments related to this Agreement, please send us a message to
legal@taler-systems.com. If you do not agree to this Agreement, you must not
use our Services.
* You are responsible for keeping the data in your Taler Wallet at
all times under your control. Any losses arising from you not
being in control of your private information are your problem.
HOW YOU ACCEPT THIS POLICY
* We will try to transfer funds we hold in escrow for our users to
any legal recipient to the best of our ability within the
limitations of the law and our implementation. However, the
Services offered today are highly experimental and the set of
recipients of funds is severely restricted.
By sending funds to us (to top-up your Taler Wallet), you acknowledge that you
have read, understood, and agreed to these Terms. We reserve the right to
change these Terms at any time. If you disagree with the change, we may in the
future offer you with an easy option to recover your unspent funds. However,
in the current experimental period you acknowledge that this feature is not
yet available, resulting in your funds being lost unless you accept the new
Terms. If you continue to use our Services other than to recover your unspent
funds, your continued use of our Services following any such change will
signify your acceptance to be bound by the then current Terms. Please check
the effective date above to determine if there have been any changes since you
have last reviewed these Terms.
* For our Services, we may charge transaction fees. The specific
fee structure is provided based on the Taler protocol and should
be shown to you when you withdraw electronic coins using a Taler
Wallet. You agree and understand that the Taler protocol allows
for the fee structure to change.
SERVICES
* You agree to not intentionally overwhelm our systems with
requests and follow responsible disclosure if you find security
issues in our services.
We will try to transfer funds that we hold in escrow for our users to any
legal recipient to the best of our ability and within the limitations of the
law and our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted. The
Taler Wallet can be loaded by exchanging fiat currencies against electronic
coins. We are providing this exchange service. Once your Taler Wallet is
loaded with electronic coins they can be spent for purchases if the seller is
accepting Taler as a means of payment. We are not guaranteeing that any seller
is accepting Taler at all or a particular seller. The seller or recipient of
deposits of electronic coins must specify the target account, as per the
design of the Taler protocol. They are responsible for following the protocol
and specifying the correct bank account, and are solely liable for any losses
that may arise from specifying the wrong account. We will allow the government
to link wire transfers to the underlying contract hash. It is the
* We cannot be held accountable for our Services not being
available due to circumstances beyond our control. If we modify
or terminate our services, we will try to give you the
opportunity to recover your funds. However, given the
experimental state of the Services today, this may not be
possible. You are strongly advised to limit your use of the
Service to small-scale experiments expecting total loss of all
funds.
These terms outline approved uses of our Services. The Services and
these Terms are still at an experimental stage. If you have any
questions or comments related to this Agreement, please send us a
message to legal@taler-systems.com. If you do not agree to this
Agreement, you must not use our Services.
How you accept this policy
==========================
By sending funds to us (to top-up your Taler Wallet), you acknowledge
that you have read, understood, and agreed to these Terms. We reserve
the right to change these Terms at any time. If you disagree with the
change, we may in the future offer you with an easy option to recover
your unspent funds. However, in the current experimental period you
acknowledge that this feature is not yet available, resulting in your
funds being lost unless you accept the new Terms. If you continue to
use our Services other than to recover your unspent funds, your
continued use of our Services following any such change will signify
your acceptance to be bound by the then current Terms. Please check
the effective date above to determine if there have been any changes
since you have last reviewed these Terms.
Services
========
We will try to transfer funds that we hold in escrow for our users to
any legal recipient to the best of our ability and within the
limitations of the law and our implementation. However, the Services
offered today are highly experimental and the set of recipients of
funds is severely restricted. The Taler Wallet can be loaded by
exchanging fiat currencies against electronic coins. We are providing
this exchange service. Once your Taler Wallet is loaded with
electronic coins they can be spent for purchases if the seller is
accepting Taler as a means of payment. We are not guaranteeing that
any seller is accepting Taler at all or a particular seller. The
seller or recipient of deposits of electronic coins must specify the
target account, as per the design of the Taler protocol. They are
responsible for following the protocol and specifying the correct bank
account, and are solely liable for any losses that may arise from
specifying the wrong account. We will allow the government to link
wire transfers to the underlying contract hash. It is the
responsibility of recipients to preserve the full contracts and to pay
whatever taxes and charges may be applicable. Technical issues may lead to
situations where we are unable to make transfers at all or lead to incorrect
transfers that cannot be reversed. We will only refuse to execute transfers if
the transfers are prohibited by a competent legal authority and we are ordered
to do so.
whatever taxes and charges may be applicable. Technical issues may
lead to situations where we are unable to make transfers at all or
lead to incorrect transfers that cannot be reversed. We will only
refuse to execute transfers if the transfers are prohibited by a
competent legal authority and we are ordered to do so.
FEES
You agree to pay the fees for exchanges and withdrawals completed via the
Taler Wallet ("Fees") as defined by us, which we may change from time to
time. With the exception of wire transfer fees, Taler transaction fees are set
for any electronic coin at the time of withdrawal and fixed throughout the
validity period of the respective electronic coin. Your wallet should obtain
and display applicable fees when withdrawing funds. Fees for coins obtained as
change may differ from the fees applicable to the original coin. Wire transfer
fees that are independent from electronic coins may change annually. You
authorize us to charge or deduct applicable fees owed in connection with
deposits, exchanges and withdrawals following the rules of the Taler protocol.
We reserve the right to provide different types of rewards to users either in
the form of discount for our Services or in any other form at our discretion
and without prior notice to you.
Fees
====
ELIGIBILITY
You agree to pay the fees for exchanges and withdrawals completed via
the Taler Wallet ("Fees") as defined by us, which we may change from
time to time. With the exception of wire transfer fees, Taler
transaction fees are set for any electronic coin at the time of
withdrawal and fixed throughout the validity period of the respective
electronic coin. Your wallet should obtain and display applicable fees
when withdrawing funds. Fees for coins obtained as change may differ
from the fees applicable to the original coin. Wire transfer fees that
are independent from electronic coins may change annually. You
authorize us to charge or deduct applicable fees owed in connection
with deposits, exchanges and withdrawals following the rules of the
Taler protocol. We reserve the right to provide different types of
rewards to users either in the form of discount for our Services or in
any other form at our discretion and without prior notice to you.
To be eligible to use our Services, you must be able to form legally binding
contracts or have the permission of your legal guardian. By using our
Services, you represent and warrant that you meet all eligibility requirements
that we outline in these Terms.
FINANCIAL SELF-RESPONSIBILITY
Eligibility
===========
You will be responsible for maintaining the availability, integrity and
confidentiality of the data stored in your wallet. When you setup a Taler
Wallet, you are strongly advised to follow the precautionary measures offered
by the software to minimize the chances to losse access to or control over
your Wallet data. We will not be liable for any loss or damage arising from
your failure to comply with this paragraph.
To be eligible to use our Services, you must be able to form legally
binding contracts or have the permission of your legal guardian. By
using our Services, you represent and warrant that you meet all
eligibility requirements that we outline in these Terms.
COPYRIGHTS and TRADEMARKS
The Taler Wallet is released under the terms of the GNU General Public License
(GNU GPL). You have the right to access, use, and share the Taler Wallet, in
modified or unmodified form. However, the GPL is a strong copyleft license,
which means that any derivative works must be distributed under the same
license terms as the original software. If you have any questions, you should
review the GNU GPLs full terms and conditions at
https://www.gnu.org/licenses/gpl-3.0.en.html. “Taler” itself is a trademark
of Taler Systems SA. You are welcome to use the name in relation to processing
payments using the Taler protocol, assuming your use is compatible with an
official release from the GNU Project that is not older than two years.
Financial self-responsibility
=============================
YOUR USE OF OUR SERVICES
You will be responsible for maintaining the availability, integrity
and confidentiality of the data stored in your wallet. When you setup
a Taler Wallet, you are strongly advised to follow the precautionary
measures offered by the software to minimize the chances to losse
access to or control over your Wallet data. We will not be liable for
any loss or damage arising from your failure to comply with this
paragraph.
When using our Services, you agree to not take any action that intentionally
imposes an unreasonable load on our infrastructure. If you find security
problems in our Services, you agree to first report them to
security@taler-systems.com and grant us the right to publish your report. We
warrant that we will ourselves publicly disclose any issues reported within 3
months, and that we will not prosecute anyone reporting security issues if
they did not exploit the issue beyond a proof-of-concept, and followed the
above responsible disclosure practice.
LIMITATION OF LIABILITY & DISCLAIMER OF WARRANTIES
Copyrights and trademarks
=========================
You understand and agree that we have no control over, and no duty to take any
action regarding: Failures, disruptions, errors, or delays in processing that
you may experience while using our Services; The risk of failure of hardware,
software, and Internet connections; The risk of malicious software being
introduced or found in the software underlying the Taler Wallet; The risk that
third parties may obtain unauthorized access to information stored within your
Taler Wallet, including, but not limited to your Taler Wallet coins or backup
encryption keys. You release us from all liability related to any losses,
damages, or claims arising from:
The Taler Wallet is released under the terms of the GNU General Public
License (GNU GPL). You have the right to access, use, and share the
Taler Wallet, in modified or unmodified form. However, the GPL is a
strong copyleft license, which means that any derivative works must be
distributed under the same license terms as the original software. If
you have any questions, you should review the GNU GPLs full terms and
conditions at https://www.gnu.org/licenses/gpl-3.0.en.html. “Taler”
itself is a trademark of Taler Systems SA. You are welcome to use the
name in relation to processing payments using the Taler protocol,
assuming your use is compatible with an official release from the GNU
Project that is not older than two years.
(a) user error such as forgotten passwords, incorrectly constructed
transactions;
(b) server failure or data loss;
(c) unauthorized access to the Taler Wallet application;
(d) bugs or other errors in the Taler Wallet software; and
(e) any unauthorized third party activities, including, but not limited to,
the use of viruses, phishing, brute forcing, or other means of attack
against the Taler Wallet. We make no representations concerning any
Third Party Content contained in or accessed through our Services.
Any other terms, conditions, warranties, or representations associated with
such content, are solely between you and such organizations and/or
individuals.
Your use of our services
========================
LIMITATION OF LIABILITY
When using our Services, you agree to not take any action that
intentionally imposes an unreasonable load on our infrastructure. If
you find security problems in our Services, you agree to first report
them to security@taler-systems.com and grant us the right to publish
your report. We warrant that we will ourselves publicly disclose any
issues reported within 3 months, and that we will not prosecute anyone
reporting security issues if they did not exploit the issue beyond a
proof-of-concept, and followed the above responsible disclosure
practice.
To the fullest extent permitted by applicable law, in no event will we or any
of our officers, directors, representatives, agents, servants, counsel,
employees, consultants, lawyers, and other personnel authorized to act,
acting, or purporting to act on our behalf (collectively the “Taler Parties”)
be liable to you under contract, tort, strict liability, negligence, or any
other legal or equitable theory, for:
(a) any lost profits, data loss, cost of procurement of substitute goods or
services, or direct, indirect, incidental, special, punitive, compensatory,
or consequential damages of any kind whatsoever resulting from:
(i) your use of, or conduct in connection with, our services;
(ii) any unauthorized use of your wallet and/or private key due to your
failure to maintain the confidentiality of your wallet;
(iii) any interruption or cessation of transmission to or from the services; or
(iv) any bugs, viruses, trojan horses, or the like that are found in the Taler
Wallet software or that may be transmitted to or through our services by
any third party (regardless of the source of origination), or
(b) any direct damages.
Limitation of liability & disclaimer of warranties
==================================================
These limitations apply regardless of legal theory, whether based on tort,
strict liability, breach of contract, breach of warranty, or any other legal
theory, and whether or not we were advised of the possibility of such
damages. Some jurisdictions do not allow the exclusion or limitation of
liability for consequential or incidental damages, so the above limitation may
not apply to you.
You understand and agree that we have no control over, and no duty to
take any action regarding: Failures, disruptions, errors, or delays in
processing that you may experience while using our Services; The risk
of failure of hardware, software, and Internet connections; The risk
of malicious software being introduced or found in the software
underlying the Taler Wallet; The risk that third parties may obtain
unauthorized access to information stored within your Taler Wallet,
including, but not limited to your Taler Wallet coins or backup
encryption keys. You release us from all liability related to any
losses, damages, or claims arising from:
WARRANTY DISCLAIMER
1. user error such as forgotten passwords, incorrectly constructed
transactions;
Our services are provided "as is" and without warranty of any kind. To the
maximum extent permitted by law, we disclaim all representations and
warranties, express or implied, relating to the services and underlying
software or any content on the services, whether provided or owned by us or by
any third party, including without limitation, warranties of merchantability,
fitness for a particular purpose, title, non-infringement, freedom from
computer virus, and any implied warranties arising from course of dealing,
course of performance, or usage in trade, all of which are expressly
disclaimed. In addition, we do not represent or warrant that the content
accessible via the services is accurate, complete, available, current, free of
viruses or other harmful components, or that the results of using the services
will meet your requirements. Some states do not allow the disclaimer of
implied warranties, so the foregoing disclaimers may not apply to you. This
paragraph gives you specific legal rights and you may also have other legal
rights that vary from state to state.
2. server failure or data loss;
INDEMNITY
3. unauthorized access to the Taler Wallet application;
To the extent permitted by applicable law, you agree to defend, indemnify, and
hold harmless the Taler Parties from and against any and all claims, damages,
obligations, losses, liabilities, costs or debt, and expenses (including, but
not limited to, attorneys fees) arising from: (a) your use of and access to
the Services; (b) any feedback or submissions you provide to us concerning the
Taler Wallet; (c) your violation of any term of this Agreement; or (d) your
violation of any law, rule, or regulation, or the rights of any third party.
4. bugs or other errors in the Taler Wallet software; and
TIME LIMITATION ON CLAIMS
5. any unauthorized third party activities, including, but not limited
to, the use of viruses, phishing, brute forcing, or other means of
attack against the Taler Wallet. We make no representations
concerning any Third Party Content contained in or accessed through
our Services.
You agree that any claim you may have arising out of or related to your
relationship with us must be filed within one year after such claim arises,
otherwise, your claim in permanently barred.
Any other terms, conditions, warranties, or representations associated
with such content, are solely between you and such organizations
and/or individuals.
GOVERNING LAW
No matter where youre located, the laws of Switzerland will govern these
Terms. If any provisions of these Terms are inconsistent with any applicable
law, those provisions will be superseded or modified only to the extent such
provisions are inconsistent. The parties agree to submit to the ordinary
courts in Zurich, Switzerland for exclusive jurisdiction of any dispute
arising out of or related to your use of the Services or your breach of these
Terms.
Limitation of liability
=======================
TERMINATION
To the fullest extent permitted by applicable law, in no event will we
or any of our officers, directors, representatives, agents, servants,
counsel, employees, consultants, lawyers, and other personnel
authorized to act, acting, or purporting to act on our behalf
(collectively the “Taler Parties”) be liable to you under contract,
tort, strict liability, negligence, or any other legal or equitable
theory, for:
1. any lost profits, data loss, cost of procurement of substitute
goods or services, or direct, indirect, incidental, special,
punitive, compensatory, or consequential damages of any kind
whatsoever resulting from:
1. your use of, or conduct in connection with, our services;
2. any unauthorized use of your wallet and/or private key due to
your failure to maintain the confidentiality of your wallet;
3. any interruption or cessation of transmission to or from the
services; or
4. any bugs, viruses, trojan horses, or the like that are found in
the Taler Wallet software or that may be transmitted to or
through our services by any third party (regardless of the
source of origination), or
2. any direct damages.
These limitations apply regardless of legal theory, whether based on
tort, strict liability, breach of contract, breach of warranty, or any
other legal theory, and whether or not we were advised of the
possibility of such damages. Some jurisdictions do not allow the
exclusion or limitation of liability for consequential or incidental
damages, so the above limitation may not apply to you.
Warranty disclaimer
===================
Our services are provided "as is" and without warranty of any kind. To
the maximum extent permitted by law, we disclaim all representations
and warranties, express or implied, relating to the services and
underlying software or any content on the services, whether provided
or owned by us or by any third party, including without limitation,
warranties of merchantability, fitness for a particular purpose,
title, non-infringement, freedom from computer virus, and any implied
warranties arising from course of dealing, course of performance, or
usage in trade, all of which are expressly disclaimed. In addition, we
do not represent or warrant that the content accessible via the
services is accurate, complete, available, current, free of viruses or
other harmful components, or that the results of using the services
will meet your requirements. Some states do not allow the disclaimer
of implied warranties, so the foregoing disclaimers may not apply to
you. This paragraph gives you specific legal rights and you may also
have other legal rights that vary from state to state.
Indemnity
=========
To the extent permitted by applicable law, you agree to defend,
indemnify, and hold harmless the Taler Parties from and against any
and all claims, damages, obligations, losses, liabilities, costs or
debt, and expenses (including, but not limited to, attorneys fees)
arising from: (a) your use of and access to the Services; (b) any
feedback or submissions you provide to us concerning the Taler Wallet;
(c) your violation of any term of this Agreement; or (d) your
violation of any law, rule, or regulation, or the rights of any third
party.
Time limitation on claims
=========================
You agree that any claim you may have arising out of or related to
your relationship with us must be filed within one year after such
claim arises, otherwise, your claim in permanently barred.
Governing law
=============
No matter where youre located, the laws of Switzerland will govern
these Terms. If any provisions of these Terms are inconsistent with
any applicable law, those provisions will be superseded or modified
only to the extent such provisions are inconsistent. The parties agree
to submit to the ordinary courts in Zurich, Switzerland for exclusive
jurisdiction of any dispute arising out of or related to your use of
the Services or your breach of these Terms.
Termination
===========
In the event of termination concerning your use of our Services, your
obligations under this Agreement will still continue.
DISCONTINUANCE OF SERVICES
We may, in our sole discretion and without cost to you, with or without prior
notice, and at any time, modify or discontinue, temporarily or permanently,
any portion of our Services. We will use the Taler protocols provisions to
notify Wallets if our Services are to be discontinued. It is your
responsibility to ensure that the Taler Wallet is online at least once every
three months to observe these notifications. We shall not be held responsible
or liable for any loss of funds in the event that we discontinue or depreciate
the Services and your Taler Wallet fails to transfer out the coins within a
three months notification period.
Discontinuance of services
==========================
NO WAIVER
We may, in our sole discretion and without cost to you, with or
without prior notice, and at any time, modify or discontinue,
temporarily or permanently, any portion of our Services. We will use
the Taler protocols provisions to notify Wallets if our Services are
to be discontinued. It is your responsibility to ensure that the Taler
Wallet is online at least once every three months to observe these
notifications. We shall not be held responsible or liable for any loss
of funds in the event that we discontinue or depreciate the Services
and your Taler Wallet fails to transfer out the coins within a three
months notification period.
Our failure to exercise or delay in exercising any right, power, or privilege
under this Agreement shall not operate as a waiver; nor shall any single or
partial exercise of any right, power, or privilege preclude any other or
further exercise thereof.
SEVERABILITY
No waiver
=========
If it turns out that any part of this Agreement is invalid, void, or for any
reason unenforceable, that term will be deemed severable and limited or
eliminated to the minimum extent necessary.
Our failure to exercise or delay in exercising any right, power, or
privilege under this Agreement shall not operate as a waiver; nor
shall any single or partial exercise of any right, power, or privilege
preclude any other or further exercise thereof.
FORCE MAJEURE
Severability
============
If it turns out that any part of this Agreement is invalid, void, or
for any reason unenforceable, that term will be deemed severable and
limited or eliminated to the minimum extent necessary.
Force majeure
=============
We shall not be held liable for any delays, failure in performance, or
interruptions of service which result directly or indirectly from any cause or
condition beyond our reasonable control, including but not limited to: any
delay or failure due to any act of God, act of civil or military authorities,
act of terrorism, civil disturbance, war, strike or other labor dispute, fire,
interruption in telecommunications or Internet services or network provider
services, failure of equipment and/or software, other catastrophe, or any
other occurrence which is beyond our reasonable control and shall not affect
interruptions of service which result directly or indirectly from any
cause or condition beyond our reasonable control, including but not
limited to: any delay or failure due to any act of God, act of civil
or military authorities, act of terrorism, civil disturbance, war,
strike or other labor dispute, fire, interruption in
telecommunications or Internet services or network provider services,
failure of equipment and/or software, other catastrophe, or any other
occurrence which is beyond our reasonable control and shall not affect
the validity and enforceability of any remaining provisions.
ASSIGNMENT
You agree that we may assign any of our rights and/or transfer, sub-contract,
or delegate any of our obligations under these Terms.
Assignment
==========
ENTIRE AGREEMENT
You agree that we may assign any of our rights and/or transfer, sub-
contract, or delegate any of our obligations under these Terms.
This Agreement sets forth the entire understanding and agreement as to the
subject matter hereof and supersedes any and all prior discussions,
agreements, and understandings of any kind (including, without limitation, any
prior versions of this Agreement) and every nature between us. Except as
provided for above, any modification to this Agreement must be in writing and
must be signed by both parties.
QUESTIONS OR COMMENTS
Entire agreement
================
We welcome comments, questions, concerns, or suggestions. Please send us a
message on our contact page at legal@taler-systems.com.
This Agreement sets forth the entire understanding and agreement as to
the subject matter hereof and supersedes any and all prior
discussions, agreements, and understandings of any kind (including,
without limitation, any prior versions of this Agreement) and every
nature between us. Except as provided for above, any modification to
this Agreement must be in writing and must be signed by both parties.
Questions or comments
=====================
We welcome comments, questions, concerns, or suggestions. Please send
us a message on our contact page at legal@taler-systems.com.

344
contrib/tos/en/0.xml Normal file
View File

@ -0,0 +1,344 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "+//IDN docutils.sourceforge.net//DTD Docutils Generic//EN//XML" "http://docutils.sourceforge.net/docs/ref/docutils.dtd">
<!-- Generated by Docutils 0.14 -->
<document source="/home/grothoff/research/taler/exchange/contrib/tos/tos.rst">
<section ids="terms-of-service" names="terms\ of\ service">
<title>Terms Of Service</title>
<paragraph>Last Updated: 12.4.2019</paragraph>
<paragraph>Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment service
through our Internet presence (collectively the “Services”). Before using our
Services, please read the Terms of Service (the “Terms” or the “Agreement”)
carefully.</paragraph>
<section ids="overview" names="overview">
<title>Overview</title>
<paragraph>This section provides a brief summary of the highlights of this
Agreement. Please note that when you accept this Agreement, you are accepting
all of the terms and conditions and not just this section. We and possibly
other third parties provide Internet services which interact with the Taler
Wallets self-hosted personal payment application. When using the Taler Wallet
to interact with our Services, you are agreeing to our Terms, so please read
carefully.</paragraph>
<section ids="highlights" names="highlights:">
<title>Highlights:</title>
<block_quote>
<bullet_list bullet="•">
<list_item>
<paragraph>You are responsible for keeping the data in your Taler Wallet at all times
under your control. Any losses arising from you not being in control of
your private information are your problem.</paragraph>
</list_item>
<list_item>
<paragraph>We will try to transfer funds we hold in escrow for our users to any legal
recipient to the best of our ability within the limitations of the law and
our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted.</paragraph>
</list_item>
<list_item>
<paragraph>For our Services, we may charge transaction fees. The specific fee structure
is provided based on the Taler protocol and should be shown to you when you
withdraw electronic coins using a Taler Wallet. You agree and understand
that the Taler protocol allows for the fee structure to change.</paragraph>
</list_item>
<list_item>
<paragraph>You agree to not intentionally overwhelm our systems with requests and
follow responsible disclosure if you find security issues in our services.</paragraph>
</list_item>
<list_item>
<paragraph>We cannot be held accountable for our Services not being available due to
circumstances beyond our control. If we modify or terminate our services,
we will try to give you the opportunity to recover your funds. However,
given the experimental state of the Services today, this may not be
possible. You are strongly advised to limit your use of the Service
to small-scale experiments expecting total loss of all funds.</paragraph>
</list_item>
</bullet_list>
</block_quote>
<paragraph>These terms outline approved uses of our Services. The Services and these
Terms are still at an experimental stage. If you have any questions or
comments related to this Agreement, please send us a message to
<reference refuri="mailto:legal@taler-systems.com">legal@taler-systems.com</reference>. If you do not agree to this Agreement, you must not
use our Services.</paragraph>
</section>
</section>
<section ids="how-you-accept-this-policy" names="how\ you\ accept\ this\ policy">
<title>How you accept this policy</title>
<paragraph>By sending funds to us (to top-up your Taler Wallet), you acknowledge that you
have read, understood, and agreed to these Terms. We reserve the right to
change these Terms at any time. If you disagree with the change, we may in the
future offer you with an easy option to recover your unspent funds. However,
in the current experimental period you acknowledge that this feature is not
yet available, resulting in your funds being lost unless you accept the new
Terms. If you continue to use our Services other than to recover your unspent
funds, your continued use of our Services following any such change will
signify your acceptance to be bound by the then current Terms. Please check
the effective date above to determine if there have been any changes since you
have last reviewed these Terms.</paragraph>
</section>
<section ids="services" names="services">
<title>Services</title>
<paragraph>We will try to transfer funds that we hold in escrow for our users to any
legal recipient to the best of our ability and within the limitations of the
law and our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted. The
Taler Wallet can be loaded by exchanging fiat currencies against electronic
coins. We are providing this exchange service. Once your Taler Wallet is
loaded with electronic coins they can be spent for purchases if the seller is
accepting Taler as a means of payment. We are not guaranteeing that any seller
is accepting Taler at all or a particular seller. The seller or recipient of
deposits of electronic coins must specify the target account, as per the
design of the Taler protocol. They are responsible for following the protocol
and specifying the correct bank account, and are solely liable for any losses
that may arise from specifying the wrong account. We will allow the government
to link wire transfers to the underlying contract hash. It is the
responsibility of recipients to preserve the full contracts and to pay
whatever taxes and charges may be applicable. Technical issues may lead to
situations where we are unable to make transfers at all or lead to incorrect
transfers that cannot be reversed. We will only refuse to execute transfers if
the transfers are prohibited by a competent legal authority and we are ordered
to do so.</paragraph>
</section>
<section ids="fees" names="fees">
<title>Fees</title>
<paragraph>You agree to pay the fees for exchanges and withdrawals completed via the
Taler Wallet (“Fees”) as defined by us, which we may change from time to
time. With the exception of wire transfer fees, Taler transaction fees are set
for any electronic coin at the time of withdrawal and fixed throughout the
validity period of the respective electronic coin. Your wallet should obtain
and display applicable fees when withdrawing funds. Fees for coins obtained as
change may differ from the fees applicable to the original coin. Wire transfer
fees that are independent from electronic coins may change annually. You
authorize us to charge or deduct applicable fees owed in connection with
deposits, exchanges and withdrawals following the rules of the Taler protocol.
We reserve the right to provide different types of rewards to users either in
the form of discount for our Services or in any other form at our discretion
and without prior notice to you.</paragraph>
</section>
<section ids="eligibility" names="eligibility">
<title>Eligibility</title>
<paragraph>To be eligible to use our Services, you must be able to form legally binding
contracts or have the permission of your legal guardian. By using our
Services, you represent and warrant that you meet all eligibility requirements
that we outline in these Terms.</paragraph>
</section>
<section ids="financial-self-responsibility" names="financial\ self-responsibility">
<title>Financial self-responsibility</title>
<paragraph>You will be responsible for maintaining the availability, integrity and
confidentiality of the data stored in your wallet. When you setup a Taler
Wallet, you are strongly advised to follow the precautionary measures offered
by the software to minimize the chances to losse access to or control over
your Wallet data. We will not be liable for any loss or damage arising from
your failure to comply with this paragraph.</paragraph>
</section>
<section ids="copyrights-and-trademarks" names="copyrights\ and\ trademarks">
<title>Copyrights and trademarks</title>
<paragraph>The Taler Wallet is released under the terms of the GNU General Public License
(GNU GPL). You have the right to access, use, and share the Taler Wallet, in
modified or unmodified form. However, the GPL is a strong copyleft license,
which means that any derivative works must be distributed under the same
license terms as the original software. If you have any questions, you should
review the GNU GPLs full terms and conditions at
<reference refuri="https://www.gnu.org/licenses/gpl-3.0.en.html">https://www.gnu.org/licenses/gpl-3.0.en.html</reference>. “Taler” itself is a trademark
of Taler Systems SA. You are welcome to use the name in relation to processing
payments using the Taler protocol, assuming your use is compatible with an
official release from the GNU Project that is not older than two years.</paragraph>
</section>
<section ids="your-use-of-our-services" names="your\ use\ of\ our\ services">
<title>Your use of our services</title>
<paragraph>When using our Services, you agree to not take any action that intentionally
imposes an unreasonable load on our infrastructure. If you find security
problems in our Services, you agree to first report them to
<reference refuri="mailto:security@taler-systems.com">security@taler-systems.com</reference> and grant us the right to publish your report. We
warrant that we will ourselves publicly disclose any issues reported within 3
months, and that we will not prosecute anyone reporting security issues if
they did not exploit the issue beyond a proof-of-concept, and followed the
above responsible disclosure practice.</paragraph>
</section>
<section ids="limitation-of-liability-disclaimer-of-warranties" names="limitation\ of\ liability\ &amp;\ disclaimer\ of\ warranties">
<title>Limitation of liability &amp; disclaimer of warranties</title>
<paragraph>You understand and agree that we have no control over, and no duty to take any
action regarding: Failures, disruptions, errors, or delays in processing that
you may experience while using our Services; The risk of failure of hardware,
software, and Internet connections; The risk of malicious software being
introduced or found in the software underlying the Taler Wallet; The risk that
third parties may obtain unauthorized access to information stored within your
Taler Wallet, including, but not limited to your Taler Wallet coins or backup
encryption keys. You release us from all liability related to any losses,
damages, or claims arising from:</paragraph>
<enumerated_list enumtype="loweralpha" prefix="(" suffix=")">
<list_item>
<paragraph>user error such as forgotten passwords, incorrectly constructed
transactions;</paragraph>
</list_item>
<list_item>
<paragraph>server failure or data loss;</paragraph>
</list_item>
<list_item>
<paragraph>unauthorized access to the Taler Wallet application;</paragraph>
</list_item>
<list_item>
<paragraph>bugs or other errors in the Taler Wallet software; and</paragraph>
</list_item>
<list_item>
<paragraph>any unauthorized third party activities, including, but not limited to,
the use of viruses, phishing, brute forcing, or other means of attack
against the Taler Wallet. We make no representations concerning any
Third Party Content contained in or accessed through our Services.</paragraph>
</list_item>
</enumerated_list>
<paragraph>Any other terms, conditions, warranties, or representations associated with
such content, are solely between you and such organizations and/or
individuals.</paragraph>
</section>
<section ids="limitation-of-liability" names="limitation\ of\ liability">
<title>Limitation of liability</title>
<paragraph>To the fullest extent permitted by applicable law, in no event will we or any
of our officers, directors, representatives, agents, servants, counsel,
employees, consultants, lawyers, and other personnel authorized to act,
acting, or purporting to act on our behalf (collectively the “Taler Parties”)
be liable to you under contract, tort, strict liability, negligence, or any
other legal or equitable theory, for:</paragraph>
<enumerated_list enumtype="loweralpha" prefix="(" suffix=")">
<list_item>
<paragraph>any lost profits, data loss, cost of procurement of substitute goods or
services, or direct, indirect, incidental, special, punitive, compensatory,
or consequential damages of any kind whatsoever resulting from:</paragraph>
</list_item>
</enumerated_list>
<block_quote>
<enumerated_list enumtype="lowerroman" prefix="(" suffix=")">
<list_item>
<paragraph>your use of, or conduct in connection with, our services;</paragraph>
</list_item>
<list_item>
<paragraph>any unauthorized use of your wallet and/or private key due to your
failure to maintain the confidentiality of your wallet;</paragraph>
</list_item>
<list_item>
<paragraph>any interruption or cessation of transmission to or from the services; or</paragraph>
</list_item>
<list_item>
<paragraph>any bugs, viruses, trojan horses, or the like that are found in the Taler
Wallet software or that may be transmitted to or through our services by
any third party (regardless of the source of origination), or</paragraph>
</list_item>
</enumerated_list>
</block_quote>
<enumerated_list enumtype="loweralpha" prefix="(" start="2" suffix=")">
<list_item>
<paragraph>any direct damages.</paragraph>
</list_item>
</enumerated_list>
<paragraph>These limitations apply regardless of legal theory, whether based on tort,
strict liability, breach of contract, breach of warranty, or any other legal
theory, and whether or not we were advised of the possibility of such
damages. Some jurisdictions do not allow the exclusion or limitation of
liability for consequential or incidental damages, so the above limitation may
not apply to you.</paragraph>
</section>
<section ids="warranty-disclaimer" names="warranty\ disclaimer">
<title>Warranty disclaimer</title>
<paragraph>Our services are provided “as is” and without warranty of any kind. To the
maximum extent permitted by law, we disclaim all representations and
warranties, express or implied, relating to the services and underlying
software or any content on the services, whether provided or owned by us or by
any third party, including without limitation, warranties of merchantability,
fitness for a particular purpose, title, non-infringement, freedom from
computer virus, and any implied warranties arising from course of dealing,
course of performance, or usage in trade, all of which are expressly
disclaimed. In addition, we do not represent or warrant that the content
accessible via the services is accurate, complete, available, current, free of
viruses or other harmful components, or that the results of using the services
will meet your requirements. Some states do not allow the disclaimer of
implied warranties, so the foregoing disclaimers may not apply to you. This
paragraph gives you specific legal rights and you may also have other legal
rights that vary from state to state.</paragraph>
</section>
<section ids="indemnity" names="indemnity">
<title>Indemnity</title>
<paragraph>To the extent permitted by applicable law, you agree to defend, indemnify, and
hold harmless the Taler Parties from and against any and all claims, damages,
obligations, losses, liabilities, costs or debt, and expenses (including, but
not limited to, attorneys fees) arising from: (a) your use of and access to
the Services; (b) any feedback or submissions you provide to us concerning the
Taler Wallet; (c) your violation of any term of this Agreement; or (d) your
violation of any law, rule, or regulation, or the rights of any third party.</paragraph>
</section>
<section ids="time-limitation-on-claims" names="time\ limitation\ on\ claims">
<title>Time limitation on claims</title>
<paragraph>You agree that any claim you may have arising out of or related to your
relationship with us must be filed within one year after such claim arises,
otherwise, your claim in permanently barred.</paragraph>
</section>
<section ids="governing-law" names="governing\ law">
<title>Governing law</title>
<paragraph>No matter where youre located, the laws of Switzerland will govern these
Terms. If any provisions of these Terms are inconsistent with any applicable
law, those provisions will be superseded or modified only to the extent such
provisions are inconsistent. The parties agree to submit to the ordinary
courts in Zurich, Switzerland for exclusive jurisdiction of any dispute
arising out of or related to your use of the Services or your breach of these
Terms.</paragraph>
</section>
<section ids="termination" names="termination">
<title>Termination</title>
<paragraph>In the event of termination concerning your use of our Services, your
obligations under this Agreement will still continue.</paragraph>
</section>
<section ids="discontinuance-of-services" names="discontinuance\ of\ services">
<title>Discontinuance of services</title>
<paragraph>We may, in our sole discretion and without cost to you, with or without prior
notice, and at any time, modify or discontinue, temporarily or permanently,
any portion of our Services. We will use the Taler protocols provisions to
notify Wallets if our Services are to be discontinued. It is your
responsibility to ensure that the Taler Wallet is online at least once every
three months to observe these notifications. We shall not be held responsible
or liable for any loss of funds in the event that we discontinue or depreciate
the Services and your Taler Wallet fails to transfer out the coins within a
three months notification period.</paragraph>
</section>
<section ids="no-waiver" names="no\ waiver">
<title>No waiver</title>
<paragraph>Our failure to exercise or delay in exercising any right, power, or privilege
under this Agreement shall not operate as a waiver; nor shall any single or
partial exercise of any right, power, or privilege preclude any other or
further exercise thereof.</paragraph>
</section>
<section ids="severability" names="severability">
<title>Severability</title>
<paragraph>If it turns out that any part of this Agreement is invalid, void, or for any
reason unenforceable, that term will be deemed severable and limited or
eliminated to the minimum extent necessary.</paragraph>
</section>
<section ids="force-majeure" names="force\ majeure">
<title>Force majeure</title>
<paragraph>We shall not be held liable for any delays, failure in performance, or
interruptions of service which result directly or indirectly from any cause or
condition beyond our reasonable control, including but not limited to: any
delay or failure due to any act of God, act of civil or military authorities,
act of terrorism, civil disturbance, war, strike or other labor dispute, fire,
interruption in telecommunications or Internet services or network provider
services, failure of equipment and/or software, other catastrophe, or any
other occurrence which is beyond our reasonable control and shall not affect
the validity and enforceability of any remaining provisions.</paragraph>
</section>
<section ids="assignment" names="assignment">
<title>Assignment</title>
<paragraph>You agree that we may assign any of our rights and/or transfer, sub-contract,
or delegate any of our obligations under these Terms.</paragraph>
</section>
<section ids="entire-agreement" names="entire\ agreement">
<title>Entire agreement</title>
<paragraph>This Agreement sets forth the entire understanding and agreement as to the
subject matter hereof and supersedes any and all prior discussions,
agreements, and understandings of any kind (including, without limitation, any
prior versions of this Agreement) and every nature between us. Except as
provided for above, any modification to this Agreement must be in writing and
must be signed by both parties.</paragraph>
</section>
<section ids="questions-or-comments" names="questions\ or\ comments">
<title>Questions or comments</title>
<paragraph>We welcome comments, questions, concerns, or suggestions. Please send us a
message on our contact page at <reference refuri="mailto:legal@taler-systems.com">legal@taler-systems.com</reference>.</paragraph>
</section>
</section>
</document>

View File

@ -0,0 +1,517 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2014-2020 Taler Systems SA (GPLv3+ or GFDL 1.3+)
# This file is distributed under the same license as the tos package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: tos 0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-07 01:00+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
#: ../../tos.rst:2
msgid "Terms Of Service"
msgstr ""
#: ../../tos.rst:4
msgid "Last Updated: 12.4.2019"
msgstr ""
#: ../../tos.rst:6
msgid ""
"Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment "
"service through our Internet presence (collectively the “Services”). "
"Before using our Services, please read the Terms of Service (the “Terms” "
"or the “Agreement”) carefully."
msgstr ""
#: ../../tos.rst:12
msgid "Overview"
msgstr ""
#: ../../tos.rst:14
msgid ""
"This section provides a brief summary of the highlights of this "
"Agreement. Please note that when you accept this Agreement, you are "
"accepting all of the terms and conditions and not just this section. We "
"and possibly other third parties provide Internet services which interact"
" with the Taler Wallets self-hosted personal payment application. When "
"using the Taler Wallet to interact with our Services, you are agreeing to"
" our Terms, so please read carefully."
msgstr ""
#: ../../tos.rst:23
msgid "Highlights:"
msgstr ""
#: ../../tos.rst:25
msgid ""
"You are responsible for keeping the data in your Taler Wallet at all "
"times under your control. Any losses arising from you not being in "
"control of your private information are your problem."
msgstr ""
#: ../../tos.rst:28
msgid ""
"We will try to transfer funds we hold in escrow for our users to any "
"legal recipient to the best of our ability within the limitations of the "
"law and our implementation. However, the Services offered today are "
"highly experimental and the set of recipients of funds is severely "
"restricted."
msgstr ""
#: ../../tos.rst:32
msgid ""
"For our Services, we may charge transaction fees. The specific fee "
"structure is provided based on the Taler protocol and should be shown to "
"you when you withdraw electronic coins using a Taler Wallet. You agree "
"and understand that the Taler protocol allows for the fee structure to "
"change."
msgstr ""
#: ../../tos.rst:36
msgid ""
"You agree to not intentionally overwhelm our systems with requests and "
"follow responsible disclosure if you find security issues in our "
"services."
msgstr ""
#: ../../tos.rst:38
msgid ""
"We cannot be held accountable for our Services not being available due to"
" circumstances beyond our control. If we modify or terminate our "
"services, we will try to give you the opportunity to recover your funds. "
"However, given the experimental state of the Services today, this may not"
" be possible. You are strongly advised to limit your use of the Service "
"to small-scale experiments expecting total loss of all funds."
msgstr ""
#: ../../tos.rst:45
msgid ""
"These terms outline approved uses of our Services. The Services and these"
" Terms are still at an experimental stage. If you have any questions or "
"comments related to this Agreement, please send us a message to legal"
"@taler-systems.com. If you do not agree to this Agreement, you must not "
"use our Services."
msgstr ""
#: ../../tos.rst:52
msgid "How you accept this policy"
msgstr ""
#: ../../tos.rst:54
msgid ""
"By sending funds to us (to top-up your Taler Wallet), you acknowledge "
"that you have read, understood, and agreed to these Terms. We reserve the"
" right to change these Terms at any time. If you disagree with the "
"change, we may in the future offer you with an easy option to recover "
"your unspent funds. However, in the current experimental period you "
"acknowledge that this feature is not yet available, resulting in your "
"funds being lost unless you accept the new Terms. If you continue to use "
"our Services other than to recover your unspent funds, your continued use"
" of our Services following any such change will signify your acceptance "
"to be bound by the then current Terms. Please check the effective date "
"above to determine if there have been any changes since you have last "
"reviewed these Terms."
msgstr ""
#: ../../tos.rst:67
msgid "Services"
msgstr ""
#: ../../tos.rst:69
msgid ""
"We will try to transfer funds that we hold in escrow for our users to any"
" legal recipient to the best of our ability and within the limitations of"
" the law and our implementation. However, the Services offered today are "
"highly experimental and the set of recipients of funds is severely "
"restricted. The Taler Wallet can be loaded by exchanging fiat currencies"
" against electronic coins. We are providing this exchange service. Once "
"your Taler Wallet is loaded with electronic coins they can be spent for "
"purchases if the seller is accepting Taler as a means of payment. We are "
"not guaranteeing that any seller is accepting Taler at all or a "
"particular seller. The seller or recipient of deposits of electronic "
"coins must specify the target account, as per the design of the Taler "
"protocol. They are responsible for following the protocol and specifying "
"the correct bank account, and are solely liable for any losses that may "
"arise from specifying the wrong account. We will allow the government to "
"link wire transfers to the underlying contract hash. It is the "
"responsibility of recipients to preserve the full contracts and to pay "
"whatever taxes and charges may be applicable. Technical issues may lead "
"to situations where we are unable to make transfers at all or lead to "
"incorrect transfers that cannot be reversed. We will only refuse to "
"execute transfers if the transfers are prohibited by a competent legal "
"authority and we are ordered to do so."
msgstr ""
#: ../../tos.rst:91
msgid "Fees"
msgstr ""
#: ../../tos.rst:93
msgid ""
"You agree to pay the fees for exchanges and withdrawals completed via the"
" Taler Wallet (\"Fees\") as defined by us, which we may change from time "
"to time. With the exception of wire transfer fees, Taler transaction fees"
" are set for any electronic coin at the time of withdrawal and fixed "
"throughout the validity period of the respective electronic coin. Your "
"wallet should obtain and display applicable fees when withdrawing funds. "
"Fees for coins obtained as change may differ from the fees applicable to "
"the original coin. Wire transfer fees that are independent from "
"electronic coins may change annually. You authorize us to charge or "
"deduct applicable fees owed in connection with deposits, exchanges and "
"withdrawals following the rules of the Taler protocol. We reserve the "
"right to provide different types of rewards to users either in the form "
"of discount for our Services or in any other form at our discretion and "
"without prior notice to you."
msgstr ""
#: ../../tos.rst:108
msgid "Eligibility"
msgstr ""
#: ../../tos.rst:110
msgid ""
"To be eligible to use our Services, you must be able to form legally "
"binding contracts or have the permission of your legal guardian. By using"
" our Services, you represent and warrant that you meet all eligibility "
"requirements that we outline in these Terms."
msgstr ""
#: ../../tos.rst:116
msgid "Financial self-responsibility"
msgstr ""
#: ../../tos.rst:118
msgid ""
"You will be responsible for maintaining the availability, integrity and "
"confidentiality of the data stored in your wallet. When you setup a Taler"
" Wallet, you are strongly advised to follow the precautionary measures "
"offered by the software to minimize the chances to losse access to or "
"control over your Wallet data. We will not be liable for any loss or "
"damage arising from your failure to comply with this paragraph."
msgstr ""
#: ../../tos.rst:126
msgid "Copyrights and trademarks"
msgstr ""
#: ../../tos.rst:128
msgid ""
"The Taler Wallet is released under the terms of the GNU General Public "
"License (GNU GPL). You have the right to access, use, and share the Taler"
" Wallet, in modified or unmodified form. However, the GPL is a strong "
"copyleft license, which means that any derivative works must be "
"distributed under the same license terms as the original software. If you"
" have any questions, you should review the GNU GPLs full terms and "
"conditions at https://www.gnu.org/licenses/gpl-3.0.en.html. “Taler” "
"itself is a trademark of Taler Systems SA. You are welcome to use the "
"name in relation to processing payments using the Taler protocol, "
"assuming your use is compatible with an official release from the GNU "
"Project that is not older than two years."
msgstr ""
#: ../../tos.rst:140
msgid "Your use of our services"
msgstr ""
#: ../../tos.rst:142
msgid ""
"When using our Services, you agree to not take any action that "
"intentionally imposes an unreasonable load on our infrastructure. If you "
"find security problems in our Services, you agree to first report them to"
" security@taler-systems.com and grant us the right to publish your "
"report. We warrant that we will ourselves publicly disclose any issues "
"reported within 3 months, and that we will not prosecute anyone reporting"
" security issues if they did not exploit the issue beyond a proof-of-"
"concept, and followed the above responsible disclosure practice."
msgstr ""
#: ../../tos.rst:152
msgid "Limitation of liability & disclaimer of warranties"
msgstr ""
#: ../../tos.rst:154
msgid ""
"You understand and agree that we have no control over, and no duty to "
"take any action regarding: Failures, disruptions, errors, or delays in "
"processing that you may experience while using our Services; The risk of "
"failure of hardware, software, and Internet connections; The risk of "
"malicious software being introduced or found in the software underlying "
"the Taler Wallet; The risk that third parties may obtain unauthorized "
"access to information stored within your Taler Wallet, including, but not"
" limited to your Taler Wallet coins or backup encryption keys. You "
"release us from all liability related to any losses, damages, or claims "
"arising from:"
msgstr ""
#: ../../tos.rst:164
msgid ""
"user error such as forgotten passwords, incorrectly constructed "
"transactions;"
msgstr ""
#: ../../tos.rst:166
msgid "server failure or data loss;"
msgstr ""
#: ../../tos.rst:167
msgid "unauthorized access to the Taler Wallet application;"
msgstr ""
#: ../../tos.rst:168
msgid "bugs or other errors in the Taler Wallet software; and"
msgstr ""
#: ../../tos.rst:169
msgid ""
"any unauthorized third party activities, including, but not limited to, "
"the use of viruses, phishing, brute forcing, or other means of attack "
"against the Taler Wallet. We make no representations concerning any Third"
" Party Content contained in or accessed through our Services."
msgstr ""
#: ../../tos.rst:174
msgid ""
"Any other terms, conditions, warranties, or representations associated "
"with such content, are solely between you and such organizations and/or "
"individuals."
msgstr ""
#: ../../tos.rst:179
msgid "Limitation of liability"
msgstr ""
#: ../../tos.rst:181
msgid ""
"To the fullest extent permitted by applicable law, in no event will we or"
" any of our officers, directors, representatives, agents, servants, "
"counsel, employees, consultants, lawyers, and other personnel authorized "
"to act, acting, or purporting to act on our behalf (collectively the "
"“Taler Parties”) be liable to you under contract, tort, strict liability,"
" negligence, or any other legal or equitable theory, for:"
msgstr ""
#: ../../tos.rst:188
msgid ""
"any lost profits, data loss, cost of procurement of substitute goods or "
"services, or direct, indirect, incidental, special, punitive, "
"compensatory, or consequential damages of any kind whatsoever resulting "
"from:"
msgstr ""
#: ../../tos.rst:192
msgid "your use of, or conduct in connection with, our services;"
msgstr ""
#: ../../tos.rst:193
msgid ""
"any unauthorized use of your wallet and/or private key due to your "
"failure to maintain the confidentiality of your wallet;"
msgstr ""
#: ../../tos.rst:195
msgid "any interruption or cessation of transmission to or from the services; or"
msgstr ""
#: ../../tos.rst:196
msgid ""
"any bugs, viruses, trojan horses, or the like that are found in the Taler"
" Wallet software or that may be transmitted to or through our services by"
" any third party (regardless of the source of origination), or"
msgstr ""
#: ../../tos.rst:200
msgid "any direct damages."
msgstr ""
#: ../../tos.rst:202
msgid ""
"These limitations apply regardless of legal theory, whether based on "
"tort, strict liability, breach of contract, breach of warranty, or any "
"other legal theory, and whether or not we were advised of the possibility"
" of such damages. Some jurisdictions do not allow the exclusion or "
"limitation of liability for consequential or incidental damages, so the "
"above limitation may not apply to you."
msgstr ""
#: ../../tos.rst:210
msgid "Warranty disclaimer"
msgstr ""
#: ../../tos.rst:212
msgid ""
"Our services are provided \"as is\" and without warranty of any kind. To "
"the maximum extent permitted by law, we disclaim all representations and "
"warranties, express or implied, relating to the services and underlying "
"software or any content on the services, whether provided or owned by us "
"or by any third party, including without limitation, warranties of "
"merchantability, fitness for a particular purpose, title, non-"
"infringement, freedom from computer virus, and any implied warranties "
"arising from course of dealing, course of performance, or usage in trade,"
" all of which are expressly disclaimed. In addition, we do not represent "
"or warrant that the content accessible via the services is accurate, "
"complete, available, current, free of viruses or other harmful "
"components, or that the results of using the services will meet your "
"requirements. Some states do not allow the disclaimer of implied "
"warranties, so the foregoing disclaimers may not apply to you. This "
"paragraph gives you specific legal rights and you may also have other "
"legal rights that vary from state to state."
msgstr ""
#: ../../tos.rst:229
msgid "Indemnity"
msgstr ""
#: ../../tos.rst:231
msgid ""
"To the extent permitted by applicable law, you agree to defend, "
"indemnify, and hold harmless the Taler Parties from and against any and "
"all claims, damages, obligations, losses, liabilities, costs or debt, and"
" expenses (including, but not limited to, attorneys fees) arising from: "
"(a) your use of and access to the Services; (b) any feedback or "
"submissions you provide to us concerning the Taler Wallet; (c) your "
"violation of any term of this Agreement; or (d) your violation of any "
"law, rule, or regulation, or the rights of any third party."
msgstr ""
#: ../../tos.rst:240
msgid "Time limitation on claims"
msgstr ""
#: ../../tos.rst:242
msgid ""
"You agree that any claim you may have arising out of or related to your "
"relationship with us must be filed within one year after such claim "
"arises, otherwise, your claim in permanently barred."
msgstr ""
#: ../../tos.rst:247
msgid "Governing law"
msgstr ""
#: ../../tos.rst:249
msgid ""
"No matter where youre located, the laws of Switzerland will govern these"
" Terms. If any provisions of these Terms are inconsistent with any "
"applicable law, those provisions will be superseded or modified only to "
"the extent such provisions are inconsistent. The parties agree to submit "
"to the ordinary courts in Zurich, Switzerland for exclusive jurisdiction "
"of any dispute arising out of or related to your use of the Services or "
"your breach of these Terms."
msgstr ""
#: ../../tos.rst:258
msgid "Termination"
msgstr ""
#: ../../tos.rst:260
msgid ""
"In the event of termination concerning your use of our Services, your "
"obligations under this Agreement will still continue."
msgstr ""
#: ../../tos.rst:264
msgid "Discontinuance of services"
msgstr ""
#: ../../tos.rst:266
msgid ""
"We may, in our sole discretion and without cost to you, with or without "
"prior notice, and at any time, modify or discontinue, temporarily or "
"permanently, any portion of our Services. We will use the Taler "
"protocols provisions to notify Wallets if our Services are to be "
"discontinued. It is your responsibility to ensure that the Taler Wallet "
"is online at least once every three months to observe these "
"notifications. We shall not be held responsible or liable for any loss of"
" funds in the event that we discontinue or depreciate the Services and "
"your Taler Wallet fails to transfer out the coins within a three months "
"notification period."
msgstr ""
#: ../../tos.rst:277
msgid "No waiver"
msgstr ""
#: ../../tos.rst:279
msgid ""
"Our failure to exercise or delay in exercising any right, power, or "
"privilege under this Agreement shall not operate as a waiver; nor shall "
"any single or partial exercise of any right, power, or privilege preclude"
" any other or further exercise thereof."
msgstr ""
#: ../../tos.rst:285
msgid "Severability"
msgstr ""
#: ../../tos.rst:287
msgid ""
"If it turns out that any part of this Agreement is invalid, void, or for "
"any reason unenforceable, that term will be deemed severable and limited "
"or eliminated to the minimum extent necessary."
msgstr ""
#: ../../tos.rst:292
msgid "Force majeure"
msgstr ""
#: ../../tos.rst:294
msgid ""
"We shall not be held liable for any delays, failure in performance, or "
"interruptions of service which result directly or indirectly from any "
"cause or condition beyond our reasonable control, including but not "
"limited to: any delay or failure due to any act of God, act of civil or "
"military authorities, act of terrorism, civil disturbance, war, strike or"
" other labor dispute, fire, interruption in telecommunications or "
"Internet services or network provider services, failure of equipment "
"and/or software, other catastrophe, or any other occurrence which is "
"beyond our reasonable control and shall not affect the validity and "
"enforceability of any remaining provisions."
msgstr ""
#: ../../tos.rst:305
msgid "Assignment"
msgstr ""
#: ../../tos.rst:307
msgid ""
"You agree that we may assign any of our rights and/or transfer, sub-"
"contract, or delegate any of our obligations under these Terms."
msgstr ""
#: ../../tos.rst:311
msgid "Entire agreement"
msgstr ""
#: ../../tos.rst:313
msgid ""
"This Agreement sets forth the entire understanding and agreement as to "
"the subject matter hereof and supersedes any and all prior discussions, "
"agreements, and understandings of any kind (including, without "
"limitation, any prior versions of this Agreement) and every nature "
"between us. Except as provided for above, any modification to this "
"Agreement must be in writing and must be signed by both parties."
msgstr ""
#: ../../tos.rst:321
msgid "Questions or comments"
msgstr ""
#: ../../tos.rst:323
msgid ""
"We welcome comments, questions, concerns, or suggestions. Please send us "
"a message on our contact page at legal@taler-systems.com."
msgstr ""
#~ msgid "Indemntiy"
#~ msgstr ""

324
contrib/tos/tos.rst Normal file
View File

@ -0,0 +1,324 @@
Terms Of Service
================
Last Updated: 12.4.2019
Welcome! Taler Systems SA (“we,” “our,” or “us”) provides a payment service
through our Internet presence (collectively the “Services”). Before using our
Services, please read the Terms of Service (the “Terms” or the “Agreement”)
carefully.
Overview
--------
This section provides a brief summary of the highlights of this
Agreement. Please note that when you accept this Agreement, you are accepting
all of the terms and conditions and not just this section. We and possibly
other third parties provide Internet services which interact with the Taler
Wallets self-hosted personal payment application. When using the Taler Wallet
to interact with our Services, you are agreeing to our Terms, so please read
carefully.
Highlights:
~~~~~~~~~~~
• You are responsible for keeping the data in your Taler Wallet at all times
under your control. Any losses arising from you not being in control of
your private information are your problem.
• We will try to transfer funds we hold in escrow for our users to any legal
recipient to the best of our ability within the limitations of the law and
our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted.
• For our Services, we may charge transaction fees. The specific fee structure
is provided based on the Taler protocol and should be shown to you when you
withdraw electronic coins using a Taler Wallet. You agree and understand
that the Taler protocol allows for the fee structure to change.
• You agree to not intentionally overwhelm our systems with requests and
follow responsible disclosure if you find security issues in our services.
• We cannot be held accountable for our Services not being available due to
circumstances beyond our control. If we modify or terminate our services,
we will try to give you the opportunity to recover your funds. However,
given the experimental state of the Services today, this may not be
possible. You are strongly advised to limit your use of the Service
to small-scale experiments expecting total loss of all funds.
These terms outline approved uses of our Services. The Services and these
Terms are still at an experimental stage. If you have any questions or
comments related to this Agreement, please send us a message to
legal@taler-systems.com. If you do not agree to this Agreement, you must not
use our Services.
How you accept this policy
--------------------------
By sending funds to us (to top-up your Taler Wallet), you acknowledge that you
have read, understood, and agreed to these Terms. We reserve the right to
change these Terms at any time. If you disagree with the change, we may in the
future offer you with an easy option to recover your unspent funds. However,
in the current experimental period you acknowledge that this feature is not
yet available, resulting in your funds being lost unless you accept the new
Terms. If you continue to use our Services other than to recover your unspent
funds, your continued use of our Services following any such change will
signify your acceptance to be bound by the then current Terms. Please check
the effective date above to determine if there have been any changes since you
have last reviewed these Terms.
Services
--------
We will try to transfer funds that we hold in escrow for our users to any
legal recipient to the best of our ability and within the limitations of the
law and our implementation. However, the Services offered today are highly
experimental and the set of recipients of funds is severely restricted. The
Taler Wallet can be loaded by exchanging fiat currencies against electronic
coins. We are providing this exchange service. Once your Taler Wallet is
loaded with electronic coins they can be spent for purchases if the seller is
accepting Taler as a means of payment. We are not guaranteeing that any seller
is accepting Taler at all or a particular seller. The seller or recipient of
deposits of electronic coins must specify the target account, as per the
design of the Taler protocol. They are responsible for following the protocol
and specifying the correct bank account, and are solely liable for any losses
that may arise from specifying the wrong account. We will allow the government
to link wire transfers to the underlying contract hash. It is the
responsibility of recipients to preserve the full contracts and to pay
whatever taxes and charges may be applicable. Technical issues may lead to
situations where we are unable to make transfers at all or lead to incorrect
transfers that cannot be reversed. We will only refuse to execute transfers if
the transfers are prohibited by a competent legal authority and we are ordered
to do so.
Fees
----
You agree to pay the fees for exchanges and withdrawals completed via the
Taler Wallet ("Fees") as defined by us, which we may change from time to
time. With the exception of wire transfer fees, Taler transaction fees are set
for any electronic coin at the time of withdrawal and fixed throughout the
validity period of the respective electronic coin. Your wallet should obtain
and display applicable fees when withdrawing funds. Fees for coins obtained as
change may differ from the fees applicable to the original coin. Wire transfer
fees that are independent from electronic coins may change annually. You
authorize us to charge or deduct applicable fees owed in connection with
deposits, exchanges and withdrawals following the rules of the Taler protocol.
We reserve the right to provide different types of rewards to users either in
the form of discount for our Services or in any other form at our discretion
and without prior notice to you.
Eligibility
-----------
To be eligible to use our Services, you must be able to form legally binding
contracts or have the permission of your legal guardian. By using our
Services, you represent and warrant that you meet all eligibility requirements
that we outline in these Terms.
Financial self-responsibility
-----------------------------
You will be responsible for maintaining the availability, integrity and
confidentiality of the data stored in your wallet. When you setup a Taler
Wallet, you are strongly advised to follow the precautionary measures offered
by the software to minimize the chances to losse access to or control over
your Wallet data. We will not be liable for any loss or damage arising from
your failure to comply with this paragraph.
Copyrights and trademarks
-------------------------
The Taler Wallet is released under the terms of the GNU General Public License
(GNU GPL). You have the right to access, use, and share the Taler Wallet, in
modified or unmodified form. However, the GPL is a strong copyleft license,
which means that any derivative works must be distributed under the same
license terms as the original software. If you have any questions, you should
review the GNU GPLs full terms and conditions at
https://www.gnu.org/licenses/gpl-3.0.en.html. “Taler” itself is a trademark
of Taler Systems SA. You are welcome to use the name in relation to processing
payments using the Taler protocol, assuming your use is compatible with an
official release from the GNU Project that is not older than two years.
Your use of our services
------------------------
When using our Services, you agree to not take any action that intentionally
imposes an unreasonable load on our infrastructure. If you find security
problems in our Services, you agree to first report them to
security@taler-systems.com and grant us the right to publish your report. We
warrant that we will ourselves publicly disclose any issues reported within 3
months, and that we will not prosecute anyone reporting security issues if
they did not exploit the issue beyond a proof-of-concept, and followed the
above responsible disclosure practice.
Limitation of liability & disclaimer of warranties
--------------------------------------------------
You understand and agree that we have no control over, and no duty to take any
action regarding: Failures, disruptions, errors, or delays in processing that
you may experience while using our Services; The risk of failure of hardware,
software, and Internet connections; The risk of malicious software being
introduced or found in the software underlying the Taler Wallet; The risk that
third parties may obtain unauthorized access to information stored within your
Taler Wallet, including, but not limited to your Taler Wallet coins or backup
encryption keys. You release us from all liability related to any losses,
damages, or claims arising from:
(a) user error such as forgotten passwords, incorrectly constructed
transactions;
(b) server failure or data loss;
(c) unauthorized access to the Taler Wallet application;
(d) bugs or other errors in the Taler Wallet software; and
(e) any unauthorized third party activities, including, but not limited to,
the use of viruses, phishing, brute forcing, or other means of attack
against the Taler Wallet. We make no representations concerning any
Third Party Content contained in or accessed through our Services.
Any other terms, conditions, warranties, or representations associated with
such content, are solely between you and such organizations and/or
individuals.
Limitation of liability
-----------------------
To the fullest extent permitted by applicable law, in no event will we or any
of our officers, directors, representatives, agents, servants, counsel,
employees, consultants, lawyers, and other personnel authorized to act,
acting, or purporting to act on our behalf (collectively the “Taler Parties”)
be liable to you under contract, tort, strict liability, negligence, or any
other legal or equitable theory, for:
(a) any lost profits, data loss, cost of procurement of substitute goods or
services, or direct, indirect, incidental, special, punitive, compensatory,
or consequential damages of any kind whatsoever resulting from:
(i) your use of, or conduct in connection with, our services;
(ii) any unauthorized use of your wallet and/or private key due to your
failure to maintain the confidentiality of your wallet;
(iii) any interruption or cessation of transmission to or from the services; or
(iv) any bugs, viruses, trojan horses, or the like that are found in the Taler
Wallet software or that may be transmitted to or through our services by
any third party (regardless of the source of origination), or
(b) any direct damages.
These limitations apply regardless of legal theory, whether based on tort,
strict liability, breach of contract, breach of warranty, or any other legal
theory, and whether or not we were advised of the possibility of such
damages. Some jurisdictions do not allow the exclusion or limitation of
liability for consequential or incidental damages, so the above limitation may
not apply to you.
Warranty disclaimer
-------------------
Our services are provided "as is" and without warranty of any kind. To the
maximum extent permitted by law, we disclaim all representations and
warranties, express or implied, relating to the services and underlying
software or any content on the services, whether provided or owned by us or by
any third party, including without limitation, warranties of merchantability,
fitness for a particular purpose, title, non-infringement, freedom from
computer virus, and any implied warranties arising from course of dealing,
course of performance, or usage in trade, all of which are expressly
disclaimed. In addition, we do not represent or warrant that the content
accessible via the services is accurate, complete, available, current, free of
viruses or other harmful components, or that the results of using the services
will meet your requirements. Some states do not allow the disclaimer of
implied warranties, so the foregoing disclaimers may not apply to you. This
paragraph gives you specific legal rights and you may also have other legal
rights that vary from state to state.
Indemnity
---------
To the extent permitted by applicable law, you agree to defend, indemnify, and
hold harmless the Taler Parties from and against any and all claims, damages,
obligations, losses, liabilities, costs or debt, and expenses (including, but
not limited to, attorneys fees) arising from: (a) your use of and access to
the Services; (b) any feedback or submissions you provide to us concerning the
Taler Wallet; (c) your violation of any term of this Agreement; or (d) your
violation of any law, rule, or regulation, or the rights of any third party.
Time limitation on claims
-------------------------
You agree that any claim you may have arising out of or related to your
relationship with us must be filed within one year after such claim arises,
otherwise, your claim in permanently barred.
Governing law
-------------
No matter where youre located, the laws of Switzerland will govern these
Terms. If any provisions of these Terms are inconsistent with any applicable
law, those provisions will be superseded or modified only to the extent such
provisions are inconsistent. The parties agree to submit to the ordinary
courts in Zurich, Switzerland for exclusive jurisdiction of any dispute
arising out of or related to your use of the Services or your breach of these
Terms.
Termination
-----------
In the event of termination concerning your use of our Services, your
obligations under this Agreement will still continue.
Discontinuance of services
--------------------------
We may, in our sole discretion and without cost to you, with or without prior
notice, and at any time, modify or discontinue, temporarily or permanently,
any portion of our Services. We will use the Taler protocols provisions to
notify Wallets if our Services are to be discontinued. It is your
responsibility to ensure that the Taler Wallet is online at least once every
three months to observe these notifications. We shall not be held responsible
or liable for any loss of funds in the event that we discontinue or depreciate
the Services and your Taler Wallet fails to transfer out the coins within a
three months notification period.
No waiver
---------
Our failure to exercise or delay in exercising any right, power, or privilege
under this Agreement shall not operate as a waiver; nor shall any single or
partial exercise of any right, power, or privilege preclude any other or
further exercise thereof.
Severability
------------
If it turns out that any part of this Agreement is invalid, void, or for any
reason unenforceable, that term will be deemed severable and limited or
eliminated to the minimum extent necessary.
Force majeure
-------------
We shall not be held liable for any delays, failure in performance, or
interruptions of service which result directly or indirectly from any cause or
condition beyond our reasonable control, including but not limited to: any
delay or failure due to any act of God, act of civil or military authorities,
act of terrorism, civil disturbance, war, strike or other labor dispute, fire,
interruption in telecommunications or Internet services or network provider
services, failure of equipment and/or software, other catastrophe, or any
other occurrence which is beyond our reasonable control and shall not affect
the validity and enforceability of any remaining provisions.
Assignment
----------
You agree that we may assign any of our rights and/or transfer, sub-contract,
or delegate any of our obligations under these Terms.
Entire agreement
----------------
This Agreement sets forth the entire understanding and agreement as to the
subject matter hereof and supersedes any and all prior discussions,
agreements, and understandings of any kind (including, without limitation, any
prior versions of this Agreement) and every nature between us. Except as
provided for above, any modification to this Agreement must be in writing and
must be signed by both parties.
Questions or comments
---------------------
We welcome comments, questions, concerns, or suggestions. Please send us a
message on our contact page at legal@taler-systems.com.

28
contrib/update-pp.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh
# This file is in the public domain
# Should be called with the list of languages to generate, i.e.
# $ ./update-pp.sh en de fr it
# Error checking on
set -eu
echo "Generating PP for ETag $VERSION"
rm -f sphinx.log sphinx.err
# We process inputs using Makefile in tos/ directory
cd pp
for l in $@
do
mkdir -p $l
echo Generating PP for language $l
# 'f' is for the supported formats, note that the 'make' target
# MUST match the file extension.
for f in html txt pdf epub xml
do
rm -rf _build
echo " Generating format $f"
make -e SPHINXOPTS="-D language='$l'" $f >>sphinx.log 2>>sphinx.err < /dev/null
mv _build/$f/pp.$f $l/${VERSION}.$f
done
done
cd ..

28
contrib/update-tos.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh
# This file is in the public domain
# Should be called with the list of languages to generate, i.e.
# $ ./update-tos.sh en de fr it
# Error checking on
set -eu
echo "Generating TOS for ETag $VERSION"
rm -f sphinx.log sphinx.err
# We process inputs using Makefile in tos/ directory
cd tos
for l in $@
do
mkdir -p $l
echo Generating TOS for language $l
# 'f' is for the supported formats, note that the 'make' target
# MUST match the file extension.
for f in html txt pdf epub xml
do
rm -rf _build
echo " Generating format $f"
make -e SPHINXOPTS="-D language='$l'" $f >>sphinx.log 2>>sphinx.err < /dev/null
mv _build/$f/tos.$f $l/${VERSION}.$f
done
done
cd ..

View File

@ -594,7 +594,7 @@ main (int argc,
if (GNUNET_OK !=
auditor_serve_process_config ())
return 1;
TEAH_DEPOSIT_CONFIRMATION_init ();
/* check for systemd-style FD passing */
listen_pid = getenv ("LISTEN_PID");
listen_fds = getenv ("LISTEN_FDS");
@ -635,7 +635,10 @@ main (int argc,
fh = TALER_MHD_open_unix_path (serve_unixpath,
unixpath_mode);
if (-1 == fh)
{
TEAH_DEPOSIT_CONFIRMATION_done ();
return 1;
}
}
mhd
@ -659,6 +662,7 @@ main (int argc,
{
fprintf (stderr,
"Failed to start HTTP server.\n");
TEAH_DEPOSIT_CONFIRMATION_done ();
return 1;
}
@ -732,6 +736,7 @@ main (int argc,
break;
}
TALER_AUDITORDB_plugin_unload (TAH_plugin);
TEAH_DEPOSIT_CONFIRMATION_done ();
return (GNUNET_SYSERR == ret) ? 1 : 0;
}

View File

@ -32,6 +32,19 @@
#include "taler-auditor-httpd_deposit-confirmation.h"
/**
* Cache of already verified exchange signing keys. Maps the hash of the
* `struct TALER_ExchangeSigningKeyValidityPS` to the (static) string
* "verified". Access to this map is guarded by the #lock.
*/
static struct GNUNET_CONTAINER_MultiHashMap *cache;
/**
* Lock for operations on #cache.
*/
static pthread_mutex_t lock;
/**
* We have parsed the JSON information about the deposit, do some
* basic sanity checks (especially that the signature on the coin is
@ -55,6 +68,8 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
struct TALER_AUDITORDB_Session *session;
enum GNUNET_DB_QueryStatus qs;
struct GNUNET_TIME_Absolute now;
struct GNUNET_HashCode h;
int cached;
now = GNUNET_TIME_absolute_get ();
if ( (es->ep_start.abs_value_us > now.abs_value_us) ||
@ -68,10 +83,6 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
"master_sig (expired)");
}
/* TODO (#6052): consider having an in-memory cache of already
verified exchange signing keys, this could save us
a signature check AND a database transaction per
operation. */
/* check exchange signing key signature */
skv.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY);
skv.purpose.size = htonl (sizeof (struct TALER_ExchangeSigningKeyValidityPS));
@ -80,18 +91,15 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
skv.expire = GNUNET_TIME_absolute_hton (es->ep_expire);
skv.end = GNUNET_TIME_absolute_hton (es->ep_end);
skv.signkey_pub = es->exchange_pub;
if (GNUNET_OK !=
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY,
&skv.purpose,
&es->master_sig.eddsa_signature,
&es->master_public_key.eddsa_pub))
{
TALER_LOG_WARNING ("Invalid signature on exchange signing key\n");
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_FORBIDDEN,
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
"master_sig");
}
/* check our cache */
GNUNET_CRYPTO_hash (&skv,
sizeof (skv),
&h);
GNUNET_assert (0 == pthread_mutex_lock (&lock));
cached = GNUNET_CONTAINER_multihashmap_contains (cache,
&h);
GNUNET_assert (0 == pthread_mutex_unlock (&lock));
session = TAH_plugin->get_session (TAH_plugin->cls);
if (NULL == session)
@ -102,18 +110,45 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
TALER_EC_DB_SETUP_FAILED,
"failed to establish session with database");
}
/* execute transaction */
qs = TAH_plugin->insert_exchange_signkey (TAH_plugin->cls,
session,
es);
if (0 > qs)
if (! cached)
{
GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
TALER_LOG_WARNING ("Failed to store exchange signing key in database\n");
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_AUDITOR_EXCHANGE_STORE_DB_ERROR,
"failed to persist exchange signing key");
/* Not in cache, need to verify the signature, persist it, and possibly cache it */
if (GNUNET_OK !=
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY,
&skv.purpose,
&es->master_sig.eddsa_signature,
&es->master_public_key.eddsa_pub))
{
TALER_LOG_WARNING ("Invalid signature on exchange signing key\n");
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_FORBIDDEN,
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
"master_sig");
}
/* execute transaction */
qs = TAH_plugin->insert_exchange_signkey (TAH_plugin->cls,
session,
es);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
TALER_LOG_WARNING ("Failed to store exchange signing key in database\n");
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_AUDITOR_EXCHANGE_STORE_DB_ERROR,
"failed to persist exchange signing key");
}
/* Cache it, due to concurreny it might already be in the cache,
so we do not cache it twice but also don't insist on the 'put' to
succeed. */
GNUNET_assert (0 == pthread_mutex_lock (&lock));
(void) GNUNET_CONTAINER_multihashmap_put (cache,
&h,
"verified",
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
GNUNET_assert (0 == pthread_mutex_unlock (&lock));
}
/* check deposit confirmation signature */
@ -237,4 +272,28 @@ TAH_DEPOSIT_CONFIRMATION_handler (struct TAH_RequestHandler *rh,
}
/**
* Initialize subsystem.
*/
void
TEAH_DEPOSIT_CONFIRMATION_init (void)
{
cache = GNUNET_CONTAINER_multihashmap_create (32,
GNUNET_NO);
GNUNET_assert (0 == pthread_mutex_init (&lock, NULL));
}
/**
* Shut down subsystem.
*/
void
TEAH_DEPOSIT_CONFIRMATION_done (void)
{
GNUNET_CONTAINER_multihashmap_destroy (cache);
cache = NULL;
GNUNET_assert (0 == pthread_mutex_destroy (&lock));
}
/* end of taler-auditor-httpd_deposit-confirmation.c */

View File

@ -25,6 +25,18 @@
#include <microhttpd.h>
#include "taler-auditor-httpd.h"
/**
* Initialize subsystem.
*/
void
TEAH_DEPOSIT_CONFIRMATION_init (void);
/**
* Shut down subsystem.
*/
void
TEAH_DEPOSIT_CONFIRMATION_done (void);
/**
* Handle a "/deposit-confirmation" request. Parses the JSON, and, if

View File

@ -5709,6 +5709,8 @@ main (int argc,
"restart",
"restart audit from the beginning (required on first run)",
&restart),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
};

View File

@ -704,13 +704,15 @@ check_pending_rc (void *cls,
TALER_amount_add (&total_closure_amount_lag,
&total_closure_amount_lag,
&rc->amount));
report (report_closure_lags,
json_pack ("{s:I, s:o, s:o, s:o, s:s}",
"row", (json_int_t) rc->rowid,
"amount", TALER_JSON_from_amount (&rc->amount),
"deadline", json_from_time_abs (rc->execution_date),
"wtid", GNUNET_JSON_from_data_auto (&rc->wtid),
"account", rc->receiver_account));
if ( (0 != rc->amount.value) ||
(0 != rc->amount.fraction) )
report (report_closure_lags,
json_pack ("{s:I, s:o, s:o, s:o, s:s}",
"row", (json_int_t) rc->rowid,
"amount", TALER_JSON_from_amount (&rc->amount),
"deadline", json_from_time_abs (rc->execution_date),
"wtid", GNUNET_JSON_from_data_auto (&rc->wtid),
"account", rc->receiver_account));
pp.last_reserve_close_uuid
= GNUNET_MIN (pp.last_reserve_close_uuid,
rc->rowid);
@ -2312,6 +2314,8 @@ main (int argc,
"restart",
"restart audit from the beginning (required on first run)",
&restart),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_OPTION_END
};

View File

@ -1473,6 +1473,49 @@ echo "UPDATE deposits SET wire='$OLD_WIRE' WHERE deposit_serial_id=${SERIAL}" |
}
# Test for duplicate wire transfer subject
function test_27() {
echo "===========27: duplicate WTID detection ================="
# Check wire transfer lag reported (no aggregator!)
# NOTE: This test is EXPECTED to fail for ~1h after
# re-generating the test database as we do not
# report lag of less than 1h (see GRACE_PERIOD in
# taler-wire-auditor.c)
if [ $DATABASE_AGE -gt 3600 ]
then
pre_audit aggregator
# Obtain data to duplicate.
ID=`echo "SELECT id FROM app_banktransaction WHERE debit_account_id=2 LIMIT 1" | psql $DB -Aqt`
WTID=`echo "SELECT subject FROM app_banktransaction WHERE debit_account_id=2 LIMIT 1" | psql $DB -Aqt`
echo "INSERT INTO app_banktransaction (amount,subject,date,credit_account_id,debit_account_id,cancelled) VALUES ('TESTKUDOS:1','$WTID',NOW(),12,2,'f')" | psql -Aqt $DB
audit_only
post_audit
echo -n "Testing inconsistency detection... "
AMOUNT=`jq -r .wire_format_inconsistencies[0].amount < test-wire-audit.json`
if test "${AMOUNT}" != "TESTKUDOS:1"
then
exit_fail "Amount wrong, got ${AMOUNT}"
fi
AMOUNT=`jq -r .total_wire_format_amount < test-wire-audit.json`
if test "${AMOUNT}" != "TESTKUDOS:1"
then
exit_fail "Wrong total wire format amount, got $AMOUNT"
fi
# cannot easily undo aggregator, hence full reload
full_reload
else
echo "Test skipped (database too new)"
fi
}
# **************************************************

View File

@ -14,8 +14,8 @@ pkgcfg_DATA = \
sqldir = $(prefix)/share/taler/sql/auditor/
sql_DATA = \
0000.sql \
0001.sql \
auditor-0000.sql \
auditor-0001.sql \
drop0000.sql \
restart0000.sql

View File

@ -115,7 +115,7 @@ CREATE TABLE IF NOT EXISTS auditor_reserves
,auditor_reserves_rowid BIGSERIAL UNIQUE
,origin_account TEXT
);
CREATE INDEX auditor_reserves_by_reserve_pub
CREATE INDEX IF NOT EXISTS auditor_reserves_by_reserve_pub
ON auditor_reserves
(reserve_pub);
-- Table with the sum of the balances of all customer reserves
@ -203,7 +203,7 @@ CREATE TABLE IF NOT EXISTS auditor_historic_reserve_summary
,reserve_profits_val INT8 NOT NULL
,reserve_profits_frac INT4 NOT NULL
);
CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date
CREATE INDEX IF NOT EXISTS auditor_historic_reserve_summary_by_master_pub_start_date
ON auditor_historic_reserve_summary
(master_pub
,start_date);

View File

@ -35,7 +35,6 @@ TALER_AUDITORDB_plugin_load (const struct GNUNET_CONFIGURATION_Handle *cfg)
{
char *plugin_name;
char *lib_name;
struct GNUNET_CONFIGURATION_Handle *cfg_dup;
struct TALER_AUDITORDB_Plugin *plugin;
if (GNUNET_SYSERR ==
@ -53,14 +52,12 @@ TALER_AUDITORDB_plugin_load (const struct GNUNET_CONFIGURATION_Handle *cfg)
"libtaler_plugin_auditordb_%s",
plugin_name);
GNUNET_free (plugin_name);
cfg_dup = GNUNET_CONFIGURATION_dup (cfg);
plugin = GNUNET_PLUGIN_load (lib_name,
cfg_dup);
(void *) cfg);
if (NULL != plugin)
plugin->library_name = lib_name;
else
GNUNET_free (lib_name);
GNUNET_CONFIGURATION_destroy (cfg_dup);
return plugin;
}

View File

@ -80,15 +80,9 @@ struct PostgresClosure
pthread_key_t db_conn_threadlocal;
/**
* Directory with SQL statements to run to create tables.
* Our configuration.
*/
char *sql_dir;
/**
* Database connection string, as read from
* the configuration.
*/
char *connection_cfg_str;
const struct GNUNET_CONFIGURATION_Handle *cfg;
/**
* Which currency should we assume all amounts to be in?
@ -114,16 +108,12 @@ postgres_drop_tables (void *cls,
{
struct PostgresClosure *pc = cls;
struct GNUNET_PQ_Context *conn;
char *exec_dir;
GNUNET_asprintf (&exec_dir,
(drop_exchangelist) ? "%sdrop" : "%srestart",
pc->sql_dir);
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
exec_dir,
NULL,
NULL);
GNUNET_free (exec_dir);
conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"auditordb-postgres",
(drop_exchangelist) ? "drop" : "restart",
NULL,
NULL);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_PQ_disconnect (conn);
@ -143,10 +133,11 @@ postgres_create_tables (void *cls)
struct PostgresClosure *pc = cls;
struct GNUNET_PQ_Context *conn;
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
pc->sql_dir,
NULL,
NULL);
conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"auditordb-postgres",
"auditor-",
NULL,
NULL);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_PQ_disconnect (conn);
@ -734,10 +725,11 @@ postgres_get_session (void *cls)
GNUNET_PQ_reconnect_if_down (session->conn);
return session;
}
db_conn = GNUNET_PQ_connect (pc->connection_cfg_str,
NULL,
NULL,
ps);
db_conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"auditordb-postgres",
NULL,
NULL,
ps);
if (NULL == db_conn)
return NULL;
session = GNUNET_new (struct TALER_AUDITORDB_Session);
@ -897,10 +889,11 @@ postgres_gc (void *cls)
};
now = GNUNET_TIME_absolute_get ();
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
NULL,
NULL,
ps);
conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"auditordb-postgres",
NULL,
NULL,
ps);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@ -3244,53 +3237,19 @@ postgres_get_predicted_balance (void *cls,
void *
libtaler_plugin_auditordb_postgres_init (void *cls)
{
struct GNUNET_CONFIGURATION_Handle *cfg = cls;
const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
struct PostgresClosure *pg;
struct TALER_AUDITORDB_Plugin *plugin;
const char *ec;
pg = GNUNET_new (struct PostgresClosure);
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (cfg,
"auditordb-postgres",
"SQL_DIR",
&pg->sql_dir))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"auditordb-postgres",
"SQL_DIR");
GNUNET_free (pg);
return NULL;
}
pg->cfg = cfg;
if (0 != pthread_key_create (&pg->db_conn_threadlocal,
&db_conn_destroy))
{
TALER_LOG_ERROR ("Cannnot create pthread key.\n");
GNUNET_free (pg->sql_dir);
GNUNET_free (pg);
return NULL;
}
ec = getenv ("TALER_AUDITORDB_POSTGRES_CONFIG");
if (NULL != ec)
{
pg->connection_cfg_str = GNUNET_strdup (ec);
}
else
{
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"auditordb-postgres",
"CONFIG",
&pg->connection_cfg_str))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"auditordb-postgres",
"CONFIG");
GNUNET_free (pg->sql_dir);
GNUNET_free (pg);
return NULL;
}
}
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"taler",
@ -3300,8 +3259,6 @@ libtaler_plugin_auditordb_postgres_init (void *cls)
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY");
GNUNET_free (pg->connection_cfg_str);
GNUNET_free (pg->sql_dir);
GNUNET_free (pg);
return NULL;
}
@ -3407,8 +3364,6 @@ libtaler_plugin_auditordb_postgres_done (void *cls)
struct TALER_AUDITORDB_Plugin *plugin = cls;
struct PostgresClosure *pg = plugin->cls;
GNUNET_free (pg->connection_cfg_str);
GNUNET_free (pg->sql_dir);
GNUNET_free (pg->currency);
GNUNET_free (pg);
GNUNET_free (plugin);

View File

@ -38,6 +38,7 @@ libtalerbank_la_LDFLAGS = \
libtalerbank_la_SOURCES = \
bank_api_admin.c \
bank_api_common.c bank_api_common.h \
bank_api_config.c \
bank_api_credit.c \
bank_api_debit.c \
bank_api_transfer.c \

View File

@ -0,0 +1,255 @@
/*
This file is part of TALER
Copyright (C) 2017--2020 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/bank_api_config.c
* @brief Implementation of the /config request
* @author Christian Grothoff
*/
#include "platform.h"
#include "bank_api_common.h"
#include <microhttpd.h> /* just for HTTP status codes */
#include "taler_signatures.h"
/**
* Protocol version we implement.
*/
#define BANK_PROTOCOL_CURRENT 0
/**
* How many revisions back are we compatible to.
*/
#define BANK_PROTOCOL_AGE 0
/**
* @brief A /config Handle
*/
struct TALER_BANK_ConfigHandle
{
/**
* The url for this request.
*/
char *request_url;
/**
* Handle for the request.
*/
struct GNUNET_CURL_Job *job;
/**
* Function to call with the result.
*/
TALER_BANK_ConfigCallback hcb;
/**
* Closure for @a cb.
*/
void *hcb_cls;
};
/**
* Parse configuration given in JSON format and invoke the callback on each item.
*
* @param ch handle to the account configuration request
* @param config JSON object with the configuration
* @return #GNUNET_OK if configuration was valid and @a rconfiguration and @a balance
* were set,
* #GNUNET_SYSERR if there was a protocol violation in @a configuration
*/
static int
parse_config (struct TALER_BANK_ConfigHandle *ch,
const json_t *config)
{
struct TALER_BANK_Configuration cfg;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_string ("version",
&cfg.version),
GNUNET_JSON_spec_string ("currency",
&cfg.version),
GNUNET_JSON_spec_end ()
};
if (GNUNET_OK !=
GNUNET_JSON_parse (config,
spec,
NULL, NULL))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
ch->hcb (ch->hcb_cls,
MHD_HTTP_OK,
TALER_EC_NONE,
&cfg);
GNUNET_JSON_parse_free (spec);
return GNUNET_OK;
}
/**
* Function called when we're done processing the
* HTTP /config request.
*
* @param cls the `struct TALER_BANK_ConfigHandle`
* @param response_code HTTP response code, 0 on error
* @param response parsed JSON result, NULL on error
*/
static void
handle_configuration_finished (void *cls,
long response_code,
const void *response)
{
struct TALER_BANK_ConfigHandle *ch = cls;
enum TALER_ErrorCode ec;
const json_t *j = response;
ch->job = NULL;
switch (response_code)
{
case 0:
ec = TALER_EC_INVALID_RESPONSE;
break;
case MHD_HTTP_OK:
if (GNUNET_OK !=
parse_config (ch,
j))
{
GNUNET_break_op (0);
response_code = 0;
ec = TALER_EC_INVALID_RESPONSE;
break;
}
response_code = MHD_HTTP_NO_CONTENT; /* signal end of list */
ec = TALER_EC_NONE;
break;
case MHD_HTTP_BAD_REQUEST:
/* This should never happen, either us or the bank is buggy
(or API version conflict); just pass JSON reply to the application */
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_UNAUTHORIZED:
/* Nothing really to verify, bank says the HTTP Authentication
failed. May happen if HTTP authentication is used and the
user supplied a wrong username/password combination. */
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_INTERNAL_SERVER_ERROR:
/* Server had an internal issue; we should retry, but this API
leaves this to the application */
ec = TALER_JSON_get_error_code (j);
break;
default:
/* unexpected response code */
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Unexpected response code %u\n",
(unsigned int) response_code);
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
response_code = 0;
break;
}
ch->hcb (ch->hcb_cls,
response_code,
ec,
NULL);
TALER_BANK_configuration_cancel (ch);
}
/**
* Request the configuration of the bank.
*
* @param ctx curl context for the event loop
* @param auth authentication data to use
* @param hres_cb the callback to call with the
* configuration
* @param hres_cb_cls closure for the above callback
* @return NULL if the inputs are invalid
*/
struct TALER_BANK_ConfigHandle *
TALER_BANK_configuration (struct GNUNET_CURL_Context *ctx,
const struct TALER_BANK_AuthenticationData *auth,
TALER_BANK_ConfigCallback hres_cb,
void *hres_cb_cls)
{
struct TALER_BANK_ConfigHandle *ch;
CURL *eh;
ch = GNUNET_new (struct TALER_BANK_ConfigHandle);
ch->hcb = hres_cb;
ch->hcb_cls = hres_cb_cls;
ch->request_url = TALER_url_join (auth->wire_gateway_url,
"config",
NULL);
if (NULL == ch->request_url)
{
GNUNET_free (ch);
GNUNET_break (0);
return NULL;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Requesting configuration at `%s'\n",
ch->request_url);
eh = curl_easy_init ();
if ( (GNUNET_OK !=
TALER_BANK_setup_auth_ (eh,
auth)) ||
(CURLE_OK !=
curl_easy_setopt (eh,
CURLOPT_URL,
ch->request_url)) )
{
GNUNET_break (0);
TALER_BANK_configuration_cancel (ch);
curl_easy_cleanup (eh);
return NULL;
}
ch->job = GNUNET_CURL_job_add2 (ctx,
eh,
NULL,
&handle_configuration_finished,
ch);
return ch;
}
/**
* Cancel a configuration request. This function cannot be
* used on a request handle if a response is already
* served for it.
*
* @param ch the configuration request handle
*/
void
TALER_BANK_configuration_cancel (struct TALER_BANK_ConfigHandle *ch)
{
if (NULL != ch->job)
{
GNUNET_CURL_job_cancel (ch->job);
ch->job = NULL;
}
GNUNET_free (ch->request_url);
GNUNET_free (ch);
}
/* end of bank_api_config.c */

View File

@ -30,7 +30,7 @@
/**
* @brief A /history Handle
* @brief A /history/incoming Handle
*/
struct TALER_BANK_CreditHistoryHandle
{
@ -173,30 +173,21 @@ handle_credit_history_finished (void *cls,
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_FORBIDDEN:
/* Access denied */
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_UNAUTHORIZED:
/* FIXME(dold): I don't get this comment below. What signatures would the
bank even verify?! */
/* Nothing really to verify, bank says one of the signatures is
invalid; as we checked them, this should never happen, we
should pass the JSON reply to the application */
GNUNET_break_op (0);
/* Nothing really to verify, bank says the HTTP Authentication
failed. May happen if HTTP authentication is used and the
user supplied a wrong username/password combination. */
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_NOT_FOUND:
/* Nothing really to verify, this should never
happen, we should pass the JSON reply to the application */
GNUNET_break_op (0);
/* Nothing really to verify: the bank is either unaware
of the endpoint (not a bank), or of the account.
We should pass the JSON (?) reply to the application */
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_INTERNAL_SERVER_ERROR:
/* Server had an internal issue; we should retry, but this API
leaves this to the application */
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
break;
default:

View File

@ -30,7 +30,7 @@
/**
* @brief A /history Handle
* @brief A /history/outgoing Handle
*/
struct TALER_BANK_DebitHistoryHandle
{
@ -129,16 +129,16 @@ parse_account_history (struct TALER_BANK_DebitHistoryHandle *hh,
/**
* Function called when we're done processing the
* HTTP /history request.
* HTTP /history/outgoing request.
*
* @param cls the `struct TALER_BANK_DebitHistoryHandle`
* @param response_code HTTP response code, 0 on error
* @param response parsed JSON result, NULL on error
*/
static void
handle_history_finished (void *cls,
long response_code,
const void *response)
handle_debit_history_finished (void *cls,
long response_code,
const void *response)
{
struct TALER_BANK_DebitHistoryHandle *hh = cls;
enum TALER_ErrorCode ec;
@ -169,21 +169,19 @@ handle_history_finished (void *cls,
case MHD_HTTP_BAD_REQUEST:
/* This should never happen, either us or the bank is buggy
(or API version conflict); just pass JSON reply to the application */
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_FORBIDDEN:
/* Access denied */
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_UNAUTHORIZED:
/* Nothing really to verify, bank says one of the signatures is
invalid; as we checked them, this should never happen, we
should pass the JSON reply to the application */
/* Nothing really to verify, bank says the HTTP Authentication
failed. May happen if HTTP authentication is used and the
user supplied a wrong username/password combination. */
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_NOT_FOUND:
/* Nothing really to verify, this should never
happen, we should pass the JSON reply to the application */
/* Nothing really to verify: the bank is either unaware
of the endpoint (not a bank), or of the account.
We should pass the JSON (?) reply to the application */
ec = TALER_JSON_get_error_code (j);
break;
case MHD_HTTP_INTERNAL_SERVER_ERROR:
@ -196,7 +194,7 @@ handle_history_finished (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Unexpected response code %u\n",
(unsigned int) response_code);
GNUNET_break (0);
GNUNET_break_op (0);
ec = TALER_JSON_get_error_code (j);
response_code = 0;
break;
@ -292,7 +290,7 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
hh->job = GNUNET_CURL_job_add2 (ctx,
eh,
NULL,
&handle_history_finished,
&handle_debit_history_finished,
hh);
return hh;
}

View File

@ -26,6 +26,24 @@
#include "taler_bank_service.h"
#include "taler_mhd_lib.h"
/**
* Taler protocol version in the format CURRENT:REVISION:AGE
* as used by GNU libtool. See
* https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
*
* Please be very careful when updating and follow
* https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
* precisely. Note that this version has NOTHING to do with the
* release version, and the format is NOT the same that semantic
* versioning uses either.
*
* When changing this version, you likely want to also update
* #BANK_PROTOCOL_CURRENT and #BANK_PROTOCOL_AGE in
* bank_api_config.c!
*/
#define BANK_PROTOCOL_VERSION "0:0:0"
/**
* Maximum POST request size (for /admin/add-incoming)
*/
@ -172,6 +190,11 @@ struct TALER_FAKEBANK_Handle
*/
uint64_t serial_counter;
/**
* Currency used by the fakebank.
*/
char *currency;
/**
* BaseURL of the fakebank.
*/
@ -527,6 +550,7 @@ TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h)
h->mhd_bank = NULL;
}
GNUNET_free (h->my_baseurl);
GNUNET_free (h->currency);
GNUNET_free (h);
}
@ -776,7 +800,7 @@ handle_transfer (struct TALER_FAKEBANK_Handle *h,
/**
* Handle incoming HTTP request for /
* Handle incoming HTTP request for / (home page).
*
* @param h the fakebank handle
* @param connection the connection
@ -808,6 +832,29 @@ handle_home_page (struct TALER_FAKEBANK_Handle *h,
}
/**
* Handle incoming HTTP request for /config
*
* @param h the fakebank handle
* @param connection the connection
* @param con_cls place to store state, not used
* @return MHD result code
*/
static int
handle_config (struct TALER_FAKEBANK_Handle *h,
struct MHD_Connection *connection,
void **con_cls)
{
return TALER_MHD_reply_json_pack (connection,
MHD_HTTP_OK,
"{s:s, s:s}",
"currency",
h->currency,
"version"
BANK_PROTOCOL_VERSION);
}
/**
* This is the "base" structure for both the /history and the
* /history-range API calls.
@ -1220,6 +1267,13 @@ serve (struct TALER_FAKEBANK_Handle *h,
return handle_home_page (h,
connection,
con_cls);
if ( (0 == strcmp (url,
"/config")) &&
(0 == strcasecmp (method,
MHD_HTTP_METHOD_GET)) )
return handle_config (h,
connection,
con_cls);
if ( (0 == strcmp (url,
"/admin/add-incoming")) &&
(0 == strcasecmp (method,
@ -1451,15 +1505,19 @@ run_mhd (void *cls)
* would have issued the correct wire transfer orders.
*
* @param port port to listen to
* @param currency currency the bank uses
* @return NULL on error
*/
struct TALER_FAKEBANK_Handle *
TALER_FAKEBANK_start (uint16_t port)
TALER_FAKEBANK_start (uint16_t port,
const char *currency)
{
struct TALER_FAKEBANK_Handle *h;
GNUNET_assert (strlen (currency) < TALER_CURRENCY_LEN);
h = GNUNET_new (struct TALER_FAKEBANK_Handle);
h->port = port;
h->currency = GNUNET_strdup (currency);
GNUNET_asprintf (&h->my_baseurl,
"http://localhost:%u/",
(unsigned int) port);
@ -1480,6 +1538,7 @@ TALER_FAKEBANK_start (uint16_t port)
MHD_OPTION_END);
if (NULL == h->mhd_bank)
{
GNUNET_free (h->currency);
GNUNET_free (h);
return NULL;
}

View File

@ -43,12 +43,38 @@ run (void *cls,
const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
char *currency_string;
(void) cls;
(void) args;
(void) cfgfile;
(void) cfg;
if (NULL == TALER_FAKEBANK_start (8082))
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"taler",
"CURRENCY",
&currency_string))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY");
ret = 1;
return;
}
if (strlen (currency_string) >= TALER_CURRENCY_LEN)
{
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY",
"Value is too long");
GNUNET_free (currency_string);
ret = 1;
return;
}
if (NULL == TALER_FAKEBANK_start (8082,
currency_string))
ret = 1;
GNUNET_free (currency_string);
ret = 0;
}

View File

@ -156,9 +156,9 @@ static char *mode_str;
static enum BenchmarkMode mode;
/**
* Config filename.
* Configuration.
*/
static char *cfg_filename;
static struct GNUNET_CONFIGURATION_Handle *cfg;
/**
* Currency used.
@ -445,7 +445,8 @@ launch_fakebank (void *cls)
(void) cls;
fakebank
= TALER_TESTING_run_fakebank (exchange_bank_account.wire_gateway_url);
= TALER_TESTING_run_fakebank (exchange_bank_account.wire_gateway_url,
currency);
if (NULL == fakebank)
{
GNUNET_break (0);
@ -624,12 +625,11 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
NULL == loglev ? "INFO" : loglev,
logfile);
result = TALER_TESTING_setup
(main_cb,
main_cb_cls,
cfg_filename,
exchanged,
GNUNET_YES);
result = TALER_TESTING_setup (main_cb,
main_cb_cls,
cfg,
exchanged,
GNUNET_YES);
if (GNUNET_OK != result)
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failure in child process test suite!\n");
@ -746,7 +746,7 @@ int
main (int argc,
char *const *argv)
{
struct GNUNET_CONFIGURATION_Handle *cfg;
char *cfg_filename = NULL;
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_option_mandatory
(GNUNET_GETOPT_option_cfgfile (&cfg_filename)),
@ -798,6 +798,7 @@ main (int argc,
argc,
argv)))
{
GNUNET_free_non_null (cfg_filename);
return BAD_CLI_ARG;
}
GNUNET_log_setup ("taler-exchange-benchmark",
@ -814,6 +815,7 @@ main (int argc,
else
{
TALER_LOG_ERROR ("Unknown mode given: '%s'\n", mode_str);
GNUNET_free_non_null (cfg_filename);
return BAD_CONFIG_FILE;
}
if (NULL == cfg_filename)
@ -825,8 +827,10 @@ main (int argc,
cfg_filename))
{
TALER_LOG_ERROR ("Could not parse configuration\n");
GNUNET_free (cfg_filename);
return BAD_CONFIG_FILE;
}
GNUNET_free (cfg_filename);
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"taler",
@ -839,6 +843,16 @@ main (int argc,
GNUNET_CONFIGURATION_destroy (cfg);
return BAD_CONFIG_FILE;
}
if (strlen (currency) >= TALER_CURRENCY_LEN)
{
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY",
"Value is too long");
GNUNET_CONFIGURATION_destroy (cfg);
return BAD_CONFIG_FILE;
}
if (howmany_clients > 10240)
{
TALER_LOG_ERROR ("-p option value given is too large\n");
@ -950,11 +964,11 @@ main (int argc,
return BAD_CONFIG_FILE;
}
}
GNUNET_CONFIGURATION_destroy (cfg);
result = parallel_benchmark (&run,
NULL,
cfg_filename);
GNUNET_CONFIGURATION_destroy (cfg);
/* If we're the exchange worker, we're done now. No need to print results */
if (MODE_EXCHANGE == mode)

View File

@ -1437,6 +1437,8 @@ main (int argc,
"DKH",
"revoke denomination key hash (DKH) and request wallets to initiate /recoup",
&revoke_dkh),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_option_absolute_time ('t',
"time",
"TIMESTAMP",

View File

@ -228,6 +228,8 @@ main (int argc,
char *const *argv)
{
const struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_option_filename ('m',
"master-key",
"FILENAME",

View File

@ -83,7 +83,8 @@ taler_exchange_httpd_LDADD = \
AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
check_SCRIPTS = \
test_taler_exchange_httpd.sh
test_taler_exchange_httpd.sh \
test_taler_exchange_httpd_restart.sh
if HAVE_EXPENSIVE_TESTS
check_SCRIPTS += \
test_taler_exchange_httpd_afl.sh
@ -97,6 +98,7 @@ TESTS = \
EXTRA_DIST = \
test_taler_exchange_httpd_home/.local/share/taler/exchange/offline-keys/master.priv \
test_taler_exchange_httpd.conf \
test_taler_exchange_unix.conf \
test_taler_exchange_httpd.get \
test_taler_exchange_httpd.post \
exchange.conf \

View File

@ -582,6 +582,7 @@ shutdown_task (void *cls)
ctc = NULL;
}
TALER_EXCHANGEDB_plugin_unload (db_plugin);
db_plugin = NULL;
{
struct WireAccount *wa;
@ -670,6 +671,7 @@ parse_wirewatch_config ()
fprintf (stderr,
"Failed to initialize DB tables\n");
TALER_EXCHANGEDB_plugin_unload (db_plugin);
db_plugin = NULL;
return GNUNET_SYSERR;
}
TALER_EXCHANGEDB_find_accounts (cfg,
@ -680,6 +682,7 @@ parse_wirewatch_config ()
fprintf (stderr,
"No wire accounts configured for debit!\n");
TALER_EXCHANGEDB_plugin_unload (db_plugin);
db_plugin = NULL;
return GNUNET_SYSERR;
}
return GNUNET_OK;
@ -1179,10 +1182,9 @@ expired_reserve_cb (void *cls,
/* Reserve balance was almost zero OR soft error */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Reserve was virtually empty, moving on\n");
(void) commit_or_warn (ctc->session);
GNUNET_free (ctc->method);
GNUNET_free (ctc);
ctc = NULL;
(void) commit_or_warn (session);
erc->async_cont = GNUNET_YES;
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
return qs;
@ -1223,6 +1225,7 @@ expired_reserve_cb (void *cls,
return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
}
erc->async_cont = GNUNET_YES;
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
GNUNET_free (ctc->method);
@ -1299,6 +1302,7 @@ run_reserve_closures (void *cls)
case GNUNET_DB_STATUS_SOFT_ERROR:
db_plugin->rollback (db_plugin->cls,
session);
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,
NULL);
return;
@ -1308,6 +1312,7 @@ run_reserve_closures (void *cls)
reserves_idle = GNUNET_YES;
db_plugin->rollback (db_plugin->cls,
session);
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1315,6 +1320,7 @@ run_reserve_closures (void *cls)
(void) commit_or_warn (session);
if (GNUNET_YES == erc.async_cont)
break;
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,
NULL);
return;
@ -1345,6 +1351,7 @@ run_aggregation (void *cls)
return;
if (0 == (++swap % 2))
{
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,
NULL);
return;
@ -1392,6 +1399,7 @@ run_aggregation (void *cls)
{
/* should re-try immediately */
swap--; /* do not count failed attempts */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1408,15 +1416,21 @@ run_aggregation (void *cls)
{
if ( (GNUNET_NO == reserves_idle) ||
(GNUNET_YES == test_mode) )
{
/* Possibly more to on reserves, go for it immediately */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_reserve_closures,
NULL);
}
else
{
/* FIXME(dold): We might want to read the duration to sleep from the config */
/* nothing to do, sleep for a minute and try again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
&run_aggregation,
NULL);
}
}
return;
}
@ -1451,6 +1465,7 @@ run_aggregation (void *cls)
"Serialization issue, trying again later!\n");
db_plugin->rollback (db_plugin->cls,
session);
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1515,6 +1530,7 @@ run_aggregation (void *cls)
session);
cleanup_au ();
/* start again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1531,6 +1547,7 @@ run_aggregation (void *cls)
(void) commit_or_warn (session);
cleanup_au ();
/* start again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1587,6 +1604,7 @@ run_aggregation (void *cls)
db_plugin->rollback (db_plugin->cls,
session);
/* start again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1613,6 +1631,7 @@ run_aggregation (void *cls)
/* try again */
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Commit issue for prepared wire data; trying again later!\n");
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1625,6 +1644,7 @@ run_aggregation (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Preparation complete, switching to transfer mode\n");
/* run alternative task: actually do wire transfer! */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
return;
@ -1685,6 +1705,7 @@ wire_confirm_cb (void *cls,
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
{
/* try again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
}
@ -1703,6 +1724,7 @@ wire_confirm_cb (void *cls,
{
case GNUNET_DB_STATUS_SOFT_ERROR:
/* try again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1716,6 +1738,7 @@ wire_confirm_cb (void *cls,
"Wire transfer complete\n");
/* continue with #run_transfers(), just to guard
against the unlikely case that there are more. */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
return;
@ -1846,6 +1869,7 @@ run_transfers (void *cls)
return;
case GNUNET_DB_STATUS_SOFT_ERROR:
/* try again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
return;
@ -1853,6 +1877,7 @@ run_transfers (void *cls)
/* no more prepared wire transfers, go back to aggregation! */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"No more pending wire transfers, starting aggregation\n");
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_aggregation,
NULL);
return;
@ -1898,6 +1923,7 @@ run (void *cls,
return;
}
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&run_transfers,
NULL);
GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
@ -1917,6 +1943,8 @@ main (int argc,
char *const *argv)
{
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_option_flag ('t',
"test",
"run in test mode and exit when idle",

View File

@ -999,6 +999,8 @@ main (int argc,
"SECONDS",
"after how long do connections timeout by default (in seconds)",
&connection_timeout),
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
#if HAVE_DEVELOPER
GNUNET_GETOPT_option_filename ('f',
"file-input",

View File

@ -128,11 +128,10 @@ TEH_MHD_handler_send_json_pack_error (struct TEH_RequestHandler *rh,
(void) connection_cls;
(void) upload_data;
(void) upload_data_size;
return TALER_MHD_reply_json_pack (connection,
rh->response_code,
"{s:s}",
"error",
rh->data);
return TALER_MHD_reply_with_error (connection,
rh->response_code,
TALER_EC_METHOD_INVALID,
rh->data);
}

View File

@ -69,7 +69,7 @@ reply_refresh_melt_insufficient_funds (struct MHD_Connection *connection,
return TALER_MHD_reply_json_pack (connection,
MHD_HTTP_CONFLICT,
"{s:s, s:I, s:o, s:o, s:o, s:o, s:o}",
"error",
"hint",
"insufficient funds",
"code",
(json_int_t)

View File

@ -108,7 +108,7 @@ reply_refresh_reveal_mismatch (struct MHD_Connection *connection,
return TALER_MHD_reply_json_pack (connection,
MHD_HTTP_CONFLICT,
"{s:s, s:I, s:o}",
"error", "commitment violation",
"hint", "commitment violation",
"code",
(json_int_t)
TALER_EC_REFRESH_REVEAL_COMMITMENT_VIOLATION,

View File

@ -82,28 +82,6 @@ reply_refund_success (struct MHD_Connection *connection,
}
/**
* Generate generic refund failure message. All the details
* are in the @a response_code. The body can be empty.
*
* @param connection connection to the client
* @param response_code response code to generate
* @param ec taler error code to include
* @return MHD result code
*/
static int
reply_refund_failure (struct MHD_Connection *connection,
unsigned int response_code,
enum TALER_ErrorCode ec)
{
return TALER_MHD_reply_json_pack (connection,
response_code,
"{s:s, s:I}",
"hint", "refund failure",
"code", (json_int_t) ec);
}
/**
* Generate refund conflict failure message. Returns the
* transaction list @a tl with the details about the conflict.
@ -194,9 +172,10 @@ refund_transaction (void *cls,
if (0 > qs)
{
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
*mhd_ret = reply_refund_failure (connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_REFUND_COIN_NOT_FOUND);
*mhd_ret = TALER_MHD_reply_with_error (connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_REFUND_COIN_NOT_FOUND,
"database transaction failure");
return qs;
}
deposit_found = GNUNET_NO;
@ -319,9 +298,10 @@ refund_transaction (void *cls,
GNUNET_break_op (0); /* currency mismatch */
TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
tl);
*mhd_ret = reply_refund_failure (connection,
MHD_HTTP_PRECONDITION_FAILED,
TALER_EC_REFUND_CURRENCY_MISSMATCH);
*mhd_ret = TALER_MHD_reply_with_error (connection,
MHD_HTTP_PRECONDITION_FAILED,
TALER_EC_REFUND_CURRENCY_MISSMATCH,
"currencies involved do not match");
return GNUNET_DB_STATUS_HARD_ERROR;
}
@ -353,9 +333,10 @@ refund_transaction (void *cls,
/* money was already transferred to merchant, can no longer refund */
TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
tl);
*mhd_ret = reply_refund_failure (connection,
MHD_HTTP_GONE,
TALER_EC_REFUND_MERCHANT_ALREADY_PAID);
*mhd_ret = TALER_MHD_reply_with_error (connection,
MHD_HTTP_GONE,
TALER_EC_REFUND_MERCHANT_ALREADY_PAID,
"money already sent to merchant");
return GNUNET_DB_STATUS_HARD_ERROR;
}
@ -366,9 +347,10 @@ refund_transaction (void *cls,
GNUNET_break_op (0); /* cannot refund more than original value */
TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
tl);
*mhd_ret = reply_refund_failure (connection,
MHD_HTTP_PRECONDITION_FAILED,
TALER_EC_REFUND_INSUFFICIENT_FUNDS);
*mhd_ret = TALER_MHD_reply_with_error (connection,
MHD_HTTP_PRECONDITION_FAILED,
TALER_EC_REFUND_INSUFFICIENT_FUNDS,
"refund requested exceeds original value");
return GNUNET_DB_STATUS_HARD_ERROR;
}
/* Check refund fee matches fee of denomination key! */
@ -481,9 +463,10 @@ verify_and_execute_refund (struct MHD_Connection *connection,
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
return reply_refund_failure (connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_REFUND_COIN_NOT_FOUND);
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_REFUND_COIN_NOT_FOUND,
"denomination of coin to be refunded not found in DB");
}
}

View File

@ -164,7 +164,7 @@ TEH_RESERVE_handler_reserve_status (struct TEH_RequestHandler *rh,
return TALER_MHD_reply_json_pack (connection,
MHD_HTTP_NOT_FOUND,
"{s:s, s:s, s:I}",
"error", "Reserve not found",
"hint", "Reserve not found",
"parameter", "reserve_pub",
"code",
(json_int_t)

View File

@ -74,7 +74,7 @@ reply_reserve_withdraw_insufficient_funds (struct MHD_Connection *connection,
return TALER_MHD_reply_json_pack (connection,
MHD_HTTP_CONFLICT,
"{s:s, s:I, s:o, s:o}",
"error", "Insufficient funds",
"hint", "insufficient funds",
"code",
(json_int_t)
TALER_EC_WITHDRAW_INSUFFICIENT_FUNDS,

View File

@ -446,7 +446,7 @@ TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection,
return TALER_MHD_reply_json_pack (connection,
MHD_HTTP_CONFLICT,
"{s:s, s:I, s:o}",
"error", "insufficient funds",
"hint", "insufficient funds",
"code", (json_int_t) ec,
"history", history);
}

View File

@ -340,7 +340,7 @@ history_cb (void *cls,
hh = NULL;
if (TALER_EC_NONE != ec)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Error fetching history: ec=%u, http_status=%u\n",
(unsigned int) ec,
http_status);
@ -597,7 +597,9 @@ main (int argc,
char *const *argv)
{
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_option_flag ('T',
GNUNET_GETOPT_option_timetravel ('T',
"timetravel"),
GNUNET_GETOPT_option_flag ('t',
"test",
"run in test mode and exit when idle",
&test_mode),

View File

@ -0,0 +1,114 @@
#!/bin/bash
#
# This file is part of TALER
# Copyright (C) 2020 Taler Systems SA
#
# TALER is free software; you can redistribute it and/or modify it under the
# terms of the GNU Affero 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License along with
# TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
#
#
# This script launches an exchange (binding to a UNIX domain socket) and then
# restarts it in various ways (SIGHUP to re-read configuration, and SIGUSR1 to
# re-spawn a new binary). Basically, the goal is to make sure that the HTTP
# server survives these less common operations.
#
#
set -eu
# Exit, with status code "skip" (no 'real' failure)
function exit_skip() {
echo $1
exit 77
}
# Exit, with error message (hard failure)
function exit_fail() {
echo $1
kill `jobs -p` >/dev/null 2>/dev/null || true
wait
exit 1
}
echo -n "Testing for curl"
curl --version >/dev/null </dev/null || exit_skip " MISSING"
echo " FOUND"
# Clear environment from variables that override config.
unset XDG_DATA_HOME
unset XDG_CONFIG_HOME
#
echo -n "Launching exchange ..."
PREFIX=
# Uncomment this line to run with valgrind...
# PREFIX="valgrind --trace-children=yes --leak-check=yes --track-fds=yes --error-exitcode=1 --log-file=valgrind.%p"
# Setup keys.
taler-exchange-keyup -c test_taler_exchange_unix.conf || exit 1
# Setup wire accounts.
taler-exchange-wire -c test_taler_exchange_unix.conf > /dev/null || exit 1
# Run Exchange HTTPD (in background)
$PREFIX taler-exchange-httpd -c test_taler_exchange_unix.conf -i 2> test-exchange.log &
# Where should we be bound to?
UNIXPATH=`taler-config -s exchange -f -o UNIXPATH`
# Give HTTP time to start
for n in `seq 1 100`
do
echo -n "."
sleep 0.1
OK=1
curl --unix-socket "${UNIXPATH}" "http://ignored/" >/dev/null 2> /dev/null && break
OK=0
done
if [ 1 != $OK ]
then
exit_fail "Failed to launch exchange"
fi
echo " DONE"
# Finally run test...
echo -n "Reloading keys ..."
kill -SIGUSR1 $!
sleep 1
curl --unix-socket "${UNIXPATH}" "http://ignored/" >/dev/null 2> /dev/null || exit_fail "SIGUSR1 killed HTTP service"
echo " DONE"
# Finally run test...
echo -n "Restarting program ..."
kill -SIGHUP $!
sleep 1
curl --unix-socket "${UNIXPATH}" "http://ignored/" >/dev/null 2> /dev/null || exit_fail "SIGHUP killed HTTP service"
echo " DONE"
echo -n "Waiting for parent to die ..."
wait $!
echo " DONE"
echo -n "Testing child still alive ..."
curl --unix-socket "${UNIXPATH}" "http://ignored/" >/dev/null 2> /dev/null || exit_fail "SIGHUP killed HTTP service"
echo " DONE"
echo -n "Killing grandchild ..."
CPID=`ps x | grep taler-exchange-httpd | grep -v grep | awk '{print $1}'`
kill -TERM $CPID
while true
do
ps x | grep -v grep | grep taler-exchange-httpd > /dev/null || break
sleep 0.1
done
echo " DONE"
# Return status code from exchange for this script
exit 0

View File

@ -0,0 +1,137 @@
[PATHS]
# Persistant data storage for the testcase
TALER_TEST_HOME = test_taler_exchange_httpd_home/
[taler]
# Currency supported by the exchange (can only be one)
CURRENCY = EUR
CURRENCY_ROUND_UNIT = EUR:0.01
[exchange]
# Directory with our terms of service.
TERMS_DIR = ../../contrib/tos
# Etag / filename for the terms of service.
TERMS_ETAG = 0
# Directory with our privacy policy.
PRIVACY_DIR = ../../contrib/pp
# Etag / filename for the privacy policy.
PRIVACY_ETAG = 0
# MAX_REQUESTS = 2
# how long is one signkey valid?
SIGNKEY_DURATION = 4 weeks
# how long are the signatures with the signkey valid?
LEGAL_DURATION = 2 years
# how long do we generate denomination and signing keys
# ahead of time?
LOOKAHEAD_SIGN = 32 weeks 1 day
# how long do we provide to clients denomination and signing keys
# ahead of time?
LOOKAHEAD_PROVIDE = 4 weeks 1 day
# HTTP port the exchange listens to (we want to use UNIX domain sockets,
# so we use a port that just won't work on GNU/Linux without root rights)
PORT = 999
# Here we say we want to use a UNIX domain socket (to test that logic).
SERVE = unix
# Master public key used to sign the exchange's various keys
MASTER_PUBLIC_KEY = 98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG
# How to access our database
DB = postgres
[exchangedb]
# After how long do we close idle reserves? The exchange
# and the auditor must agree on this value. We currently
# expect it to be globally defined for the whole system,
# as there is no way for wallets to query this value. Thus,
# it is only configurable for testing, and should be treated
# as constant in production.
IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
[exchangedb-postgres]
CONFIG = "postgres:///talercheck"
[exchange-account-1]
PAYTO_URI = "payto://x-taler-bank/localhost:8082/3"
WIRE_RESPONSE = ${TALER_CONFIG_HOME}/account-1.json
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
TALER_BANK_AUTH_METHOD = NONE
# Wire fees are specified by wire method
[fees-x-taler-bank]
# Fees for the forseeable future...
# If you see this after 2018, update to match the next 10 years...
WIRE-FEE-2018 = EUR:0.01
WIRE-FEE-2019 = EUR:0.01
WIRE-FEE-2020 = EUR:0.01
WIRE-FEE-2021 = EUR:0.01
WIRE-FEE-2022 = EUR:0.01
WIRE-FEE-2023 = EUR:0.01
WIRE-FEE-2024 = EUR:0.01
WIRE-FEE-2025 = EUR:0.01
WIRE-FEE-2026 = EUR:0.01
WIRE-FEE-2027 = EUR:0.01
CLOSING-FEE-2018 = EUR:0.01
CLOSING-FEE-2019 = EUR:0.01
CLOSING-FEE-2020 = EUR:0.01
CLOSING-FEE-2021 = EUR:0.01
CLOSING-FEE-2022 = EUR:0.01
CLOSING-FEE-2023 = EUR:0.01
CLOSING-FEE-2024 = EUR:0.01
CLOSING-FEE-2025 = EUR:0.01
CLOSING-FEE-2026 = EUR:0.01
CLOSING-FEE-2027 = EUR:0.01
# Coins for the tests.
[coin_eur_ct_1]
value = EUR:0.01
duration_overlap = 5 minutes
duration_withdraw = 7 days
duration_spend = 2 years
duration_legal = 3 years
fee_withdraw = EUR:0.00
fee_deposit = EUR:0.00
fee_refresh = EUR:0.01
fee_refund = EUR:0.01
rsa_keysize = 1024
[coin_eur_ct_10]
value = EUR:0.10
duration_overlap = 5 minutes
duration_withdraw = 7 days
duration_spend = 2 years
duration_legal = 3 years
fee_withdraw = EUR:0.01
fee_deposit = EUR:0.01
fee_refresh = EUR:0.03
fee_refund = EUR:0.01
rsa_keysize = 1024
[coin_eur_1]
value = EUR:1
duration_overlap = 5 minutes
duration_withdraw = 7 days
duration_spend = 2 years
duration_legal = 3 years
fee_withdraw = EUR:0.01
fee_deposit = EUR:0.01
fee_refresh = EUR:0.03
fee_refund = EUR:0.01
rsa_keysize = 1024

View File

@ -15,8 +15,8 @@ pkgcfg_DATA = \
sqldir = $(prefix)/share/taler/sql/exchange/
sql_DATA = \
0000.sql \
0001.sql \
exchange-0000.sql \
exchange-0001.sql \
drop0000.sql
EXTRA_DIST = \

View File

@ -42,7 +42,7 @@ CREATE TABLE IF NOT EXISTS denominations
,fee_refund_val INT8 NOT NULL
,fee_refund_frac INT4 NOT NULL
);
CREATE INDEX denominations_expire_legal_index
CREATE INDEX IF NOT EXISTS denominations_expire_legal_index
ON denominations
(expire_legal);
@ -65,18 +65,18 @@ CREATE TABLE IF NOT EXISTS reserves
,gc_date INT8 NOT NULL
);
-- index on reserves table (TODO: useless due to primary key!?)
CREATE INDEX reserves_reserve_pub_index
CREATE INDEX IF NOT EXISTS reserves_reserve_pub_index
ON reserves
(reserve_pub);
-- index for get_expired_reserves
CREATE INDEX reserves_expiration_index
CREATE INDEX IF NOT EXISTS reserves_expiration_index
ON reserves
(expiration_date
,current_balance_val
,current_balance_frac
);
-- index for reserve GC operations
CREATE INDEX reserves_gc_index
CREATE INDEX IF NOT EXISTS reserves_gc_index
ON reserves
(gc_date);
-- reserves_in table collects the transactions which transfer funds
@ -94,12 +94,12 @@ CREATE TABLE IF NOT EXISTS reserves_in
,PRIMARY KEY (reserve_pub, wire_reference)
);
-- Create indices on reserves_in
CREATE INDEX reserves_in_execution_index
CREATE INDEX IF NOT EXISTS reserves_in_execution_index
ON reserves_in
(exchange_account_section
,execution_date
);
CREATE INDEX reserves_in_exchange_account_serial
CREATE INDEX IF NOT EXISTS reserves_in_exchange_account_serial
ON reserves_in
(exchange_account_section,
reserve_in_serial_id DESC
@ -116,7 +116,7 @@ CREATE TABLE IF NOT EXISTS reserves_close
,amount_frac INT4 NOT NULL
,closing_fee_val INT8 NOT NULL
,closing_fee_frac INT4 NOT NULL);
CREATE INDEX reserves_close_by_reserve
CREATE INDEX IF NOT EXISTS reserves_close_by_reserve
ON reserves_close
(reserve_pub);
-- Table with the withdraw operations that have been performed on a reserve.
@ -137,13 +137,13 @@ CREATE TABLE IF NOT EXISTS reserves_out
,amount_with_fee_frac INT4 NOT NULL
);
-- Index blindcoins(reserve_pub) for get_reserves_out statement
CREATE INDEX reserves_out_reserve_pub_index
CREATE INDEX IF NOT EXISTS reserves_out_reserve_pub_index
ON reserves_out
(reserve_pub);
CREATE INDEX reserves_out_execution_date
CREATE INDEX IF NOT EXISTS reserves_out_execution_date
ON reserves_out
(execution_date);
CREATE INDEX reserves_out_for_get_withdraw_info
CREATE INDEX IF NOT EXISTS reserves_out_for_get_withdraw_info
ON reserves_out
(denom_pub_hash
,h_blind_ev
@ -155,7 +155,7 @@ CREATE TABLE IF NOT EXISTS known_coins
,denom_pub_hash BYTEA NOT NULL REFERENCES denominations (denom_pub_hash) ON DELETE CASCADE
,denom_sig BYTEA NOT NULL
);
CREATE INDEX known_coins_by_denomination
CREATE INDEX IF NOT EXISTS known_coins_by_denomination
ON known_coins
(denom_pub_hash);
-- Table with the commitments made when melting a coin. */
@ -168,7 +168,7 @@ CREATE TABLE IF NOT EXISTS refresh_commitments
,amount_with_fee_frac INT4 NOT NULL
,noreveal_index INT4 NOT NULL
);
CREATE INDEX refresh_commitments_old_coin_pub_index
CREATE INDEX IF NOT EXISTS refresh_commitments_old_coin_pub_index
ON refresh_commitments
(old_coin_pub);
-- Table with the revelations about the new coins that are to be created
@ -188,7 +188,7 @@ CREATE TABLE IF NOT EXISTS refresh_revealed_coins
,PRIMARY KEY (rc, newcoin_index)
,UNIQUE (h_coin_ev)
);
CREATE INDEX refresh_revealed_coins_coin_pub_index
CREATE INDEX IF NOT EXISTS refresh_revealed_coins_coin_pub_index
ON refresh_revealed_coins
(denom_pub_hash);
-- Table with the transfer keys of a refresh operation; includes
@ -203,7 +203,7 @@ CREATE TABLE IF NOT EXISTS refresh_transfer_keys
-- for get_link (not sure if this helps, as there should be very few
-- transfer_pubs per rc, but at least in theory this helps the ORDER BY
-- clause.
CREATE INDEX refresh_transfer_keys_coin_tpub
CREATE INDEX IF NOT EXISTS refresh_transfer_keys_coin_tpub
ON refresh_transfer_keys
(rc
,transfer_pub
@ -228,14 +228,14 @@ CREATE TABLE IF NOT EXISTS deposits
,UNIQUE (coin_pub, merchant_pub, h_contract_terms)
);
-- Index for get_deposit_for_wtid and get_deposit_statement */
CREATE INDEX deposits_coin_pub_merchant_contract_index
CREATE INDEX IF NOT EXISTS deposits_coin_pub_merchant_contract_index
ON deposits
(coin_pub
,merchant_pub
,h_contract_terms
);
-- Index for deposits_get_ready
CREATE INDEX deposits_get_ready_index
CREATE INDEX IF NOT EXISTS deposits_get_ready_index
ON deposits
(tiny
,done
@ -243,7 +243,7 @@ CREATE INDEX deposits_get_ready_index
,refund_deadline
);
-- Index for deposits_iterate_matching
CREATE INDEX deposits_iterate_matching
CREATE INDEX IF NOT EXISTS deposits_iterate_matching
ON deposits
(merchant_pub
,h_wire
@ -265,7 +265,7 @@ CREATE TABLE IF NOT EXISTS refunds
,amount_with_fee_frac INT4 NOT NULL
,PRIMARY KEY (coin_pub, merchant_pub, h_contract_terms, rtransaction_id)
);
CREATE INDEX refunds_coin_pub_index
CREATE INDEX IF NOT EXISTS refunds_coin_pub_index
ON refunds
(coin_pub);
-- This table contains the data for
@ -287,7 +287,7 @@ CREATE TABLE IF NOT EXISTS aggregation_tracking
,wtid_raw BYTEA CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE
);
-- Index for lookup_transactions statement on wtid
CREATE INDEX aggregation_tracking_wtid_index
CREATE INDEX IF NOT EXISTS aggregation_tracking_wtid_index
ON aggregation_tracking
(wtid_raw);
-- Table for the wire fees.
@ -302,7 +302,7 @@ CREATE TABLE IF NOT EXISTS wire_fee
,master_sig BYTEA NOT NULL CHECK (LENGTH(master_sig)=64)
,PRIMARY KEY (wire_method, start_date)
);
CREATE INDEX wire_fee_gc_index
CREATE INDEX IF NOT EXISTS wire_fee_gc_index
ON wire_fee
(end_date);
-- Table for /recoup information
@ -317,13 +317,13 @@ CREATE TABLE IF NOT EXISTS recoup
,timestamp INT8 NOT NULL
,h_blind_ev BYTEA NOT NULL REFERENCES reserves_out (h_blind_ev) ON DELETE CASCADE
);
CREATE INDEX recoup_by_coin_index
CREATE INDEX IF NOT EXISTS recoup_by_coin_index
ON recoup
(coin_pub);
CREATE INDEX recoup_by_h_blind_ev
CREATE INDEX IF NOT EXISTS recoup_by_h_blind_ev
ON recoup
(h_blind_ev);
CREATE INDEX recoup_for_by_reserve
CREATE INDEX IF NOT EXISTS recoup_for_by_reserve
ON recoup
(coin_pub
,h_blind_ev
@ -340,13 +340,13 @@ CREATE TABLE IF NOT EXISTS recoup_refresh
,timestamp INT8 NOT NULL
,h_blind_ev BYTEA NOT NULL REFERENCES refresh_revealed_coins (h_coin_ev) ON DELETE CASCADE
);
CREATE INDEX recoup_refresh_by_coin_index
CREATE INDEX IF NOT EXISTS recoup_refresh_by_coin_index
ON recoup_refresh
(coin_pub);
CREATE INDEX recoup_refresh_by_h_blind_ev
CREATE INDEX IF NOT EXISTS recoup_refresh_by_h_blind_ev
ON recoup_refresh
(h_blind_ev);
CREATE INDEX recoup_refresh_for_by_reserve
CREATE INDEX IF NOT EXISTS recoup_refresh_for_by_reserve
ON recoup_refresh
(coin_pub
,h_blind_ev
@ -360,7 +360,7 @@ CREATE TABLE IF NOT EXISTS prewire
,buf BYTEA NOT NULL
);
-- Index for wire_prepare_data_get and gc_prewire statement
CREATE INDEX prepare_iteration_index
CREATE INDEX IF NOT EXISTS prepare_iteration_index
ON prewire
(finished);

View File

@ -35,7 +35,6 @@ TALER_EXCHANGEDB_plugin_load (const struct GNUNET_CONFIGURATION_Handle *cfg)
{
char *plugin_name;
char *lib_name;
struct GNUNET_CONFIGURATION_Handle *cfg_dup;
struct TALER_EXCHANGEDB_Plugin *plugin;
if (GNUNET_SYSERR ==
@ -53,13 +52,12 @@ TALER_EXCHANGEDB_plugin_load (const struct GNUNET_CONFIGURATION_Handle *cfg)
"libtaler_plugin_exchangedb_%s",
plugin_name);
GNUNET_free (plugin_name);
cfg_dup = GNUNET_CONFIGURATION_dup (cfg);
plugin = GNUNET_PLUGIN_load (lib_name, cfg_dup);
plugin = GNUNET_PLUGIN_load (lib_name,
(void *) cfg);
if (NULL != plugin)
plugin->library_name = lib_name;
else
GNUNET_free (lib_name);
GNUNET_CONFIGURATION_destroy (cfg_dup);
return plugin;
}

View File

@ -109,10 +109,9 @@ struct PostgresClosure
pthread_key_t db_conn_threadlocal;
/**
* Database connection string, as read from
* the configuration.
* Our configuration.
*/
char *connection_cfg_str;
const struct GNUNET_CONFIGURATION_Handle *cfg;
/**
* Directory with SQL statements to run to create tables.
@ -158,16 +157,12 @@ postgres_drop_tables (void *cls)
{
struct PostgresClosure *pc = cls;
struct GNUNET_PQ_Context *conn;
char *drop_dir;
GNUNET_asprintf (&drop_dir,
"%sdrop",
pc->sql_dir);
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
drop_dir,
NULL,
NULL);
GNUNET_free (drop_dir);
conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"exchangedb-postgres",
"drop",
NULL,
NULL);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_PQ_disconnect (conn);
@ -187,10 +182,11 @@ postgres_create_tables (void *cls)
struct PostgresClosure *pc = cls;
struct GNUNET_PQ_Context *conn;
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
pc->sql_dir,
NULL,
NULL);
conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"exchangedb-postgres",
"exchange-",
NULL,
NULL);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_PQ_disconnect (conn);
@ -1387,10 +1383,11 @@ postgres_get_session (void *cls)
GNUNET_PQ_PREPARED_STATEMENT_END
};
db_conn = GNUNET_PQ_connect (pc->connection_cfg_str,
NULL,
es,
ps);
db_conn = GNUNET_PQ_connect_with_cfg (pc->cfg,
"exchangedb-postgres",
NULL,
es,
ps);
}
if (NULL == db_conn)
return NULL;
@ -5371,10 +5368,11 @@ postgres_gc (void *cls)
GNUNET_PQ_PREPARED_STATEMENT_END
};
conn = GNUNET_PQ_connect (pg->connection_cfg_str,
NULL,
NULL,
ps);
conn = GNUNET_PQ_connect_with_cfg (pg->cfg,
"exchangedb-postgres",
NULL,
NULL,
ps);
}
if (NULL == conn)
return GNUNET_SYSERR;
@ -7212,12 +7210,12 @@ postgres_select_deposits_missing_wire (void *cls,
void *
libtaler_plugin_exchangedb_postgres_init (void *cls)
{
struct GNUNET_CONFIGURATION_Handle *cfg = cls;
const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
struct PostgresClosure *pg;
struct TALER_EXCHANGEDB_Plugin *plugin;
const char *ec;
pg = GNUNET_new (struct PostgresClosure);
pg->cfg = cfg;
pg->main_self = pthread_self (); /* loaded while single-threaded! */
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (cfg,
@ -7239,28 +7237,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
GNUNET_free (pg);
return NULL;
}
ec = getenv ("TALER_EXCHANGEDB_POSTGRES_CONFIG");
if (NULL != ec)
{
pg->connection_cfg_str = GNUNET_strdup (ec);
}
else
{
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"exchangedb-postgres",
"CONFIG",
&pg->connection_cfg_str))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"exchangedb-postgres",
"CONFIG");
GNUNET_free (pg->sql_dir);
GNUNET_free (pg);
return NULL;
}
}
if ( (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_time (cfg,
"exchangedb",
@ -7276,7 +7252,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"exchangedb",
"LEGAL/IDLE_RESERVE_EXPIRATION_TIME");
GNUNET_free (pg->connection_cfg_str);
GNUNET_free (pg->sql_dir);
GNUNET_free (pg);
return NULL;
@ -7290,7 +7265,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY");
GNUNET_free (pg->connection_cfg_str);
GNUNET_free (pg->sql_dir);
GNUNET_free (pg);
return NULL;
@ -7406,7 +7380,6 @@ libtaler_plugin_exchangedb_postgres_done (void *cls)
/* If we launched a session for the main thread,
kill it here before we unload */
db_conn_destroy (pg->main_session);
GNUNET_free (pg->connection_cfg_str);
GNUNET_free (pg->sql_dir);
GNUNET_free (pg->currency);
GNUNET_free (pg);

View File

@ -89,6 +89,73 @@ struct TALER_BANK_AuthenticationData
};
/* ********************* /config *********************** */
/**
* @brief A /config Handle
*/
struct TALER_BANK_ConfigHandle;
/**
* Configuration data provided by the bank.
*/
struct TALER_BANK_Configuration
{
/**
* Current protocol version. Libtool style.
*/
const char *version;
/**
* Currency used by the bank.
*/
const char *currency;
};
/**
* Function called with configuration details from the bank.
*
* @param cls closure
* @param http status code
* @param ec taler error code
* @param config the configuration, NULL on error
*/
typedef void
(*TALER_BANK_ConfigCallback)(void *cls,
unsigned int http_status,
enum TALER_ErrorCode ec,
const struct TALER_BANK_Configuration *config);
/**
* Request the configuration of the bank.
*
* @param ctx curl context for the event loop
* @param auth authentication data to use
* @param hres_cb the callback to call with the
* configuration
* @param hres_cb_cls closure for the above callback
* @return NULL if the inputs are invalid (i.e. zero value for
* @e num_results). In this case, the callback is not
* called.
*/
struct TALER_BANK_ConfigHandle *
TALER_BANK_configuration (struct GNUNET_CURL_Context *ctx,
const struct TALER_BANK_AuthenticationData *auth,
TALER_BANK_ConfigCallback hres_cb,
void *hres_cb_cls);
/**
* Cancel a configuration request. This function cannot be
* used on a request handle if a response is already
* served for it.
*
* @param ch the configuration request handle
*/
void
TALER_BANK_configuration_cancel (struct TALER_BANK_ConfigHandle *ch);
/* ********************* /admin/add/incoming *********************** */
@ -160,7 +227,7 @@ TALER_BANK_admin_add_incoming_cancel (struct
TALER_BANK_AdminAddIncomingHandle *aai);
/* ********************* /taler/transfer *********************** */
/* ********************* /transfer *********************** */
/**
* Prepare for exeuction of a wire transfer.
@ -243,7 +310,7 @@ TALER_BANK_execute_wire_transfer_cancel (struct
TALER_BANK_WireExecuteHandle *weh);
/* ********************* /taler/credits *********************** */
/* ********************* /history/incoming *********************** */
/**
* Handle for querying the bank for transactions
@ -347,7 +414,7 @@ void
TALER_BANK_credit_history_cancel (struct TALER_BANK_CreditHistoryHandle *hh);
/* ********************* /taler/debits *********************** */
/* ********************* /history/outgoing *********************** */
/**
* Handle for querying the bank for transactions

View File

@ -80,6 +80,11 @@ enum TALER_ErrorCode
*/
TALER_EC_JSON_ALLOCATION_FAILURE = 7,
/**
* HTTP method invalid for this URL.
*/
TALER_EC_METHOD_INVALID = 8,
/**
* The exchange failed to even just initialize its connection to the
* database. This response is provided with HTTP status code

View File

@ -44,10 +44,12 @@ struct TALER_FAKEBANK_Handle;
* would have issued the correct wire transfer orders.
*
* @param port port to listen to
* @param currency which currency should the bank offer
* @return NULL on error
*/
struct TALER_FAKEBANK_Handle *
TALER_FAKEBANK_start (uint16_t port);
TALER_FAKEBANK_start (uint16_t port,
const char *currency);
/**

View File

@ -635,7 +635,7 @@ typedef void
* @param main_cb the "run" method which coontains all the
* commands.
* @param main_cb_cls a closure for "run", typically NULL.
* @param config_filename configuration filename.
* @param cfg configuration to use
* @param exchanged exchange process handle: will be put in the
* state as some commands - e.g. revoke - need to send
* signal to it, for example to let it know to reload the
@ -650,7 +650,7 @@ typedef void
int
TALER_TESTING_setup (TALER_TESTING_Main main_cb,
void *main_cb_cls,
const char *config_filename,
const struct GNUNET_CONFIGURATION_Handle *cfg,
struct GNUNET_OS_Process *exchanged,
int exchange_connect);
@ -789,11 +789,13 @@ TALER_TESTING_run_bank (const char *config_filename,
* from the base URL.
*
* @param bank_url bank's base URL.
* @param currency currency the bank uses
* @return the fakebank process handle, or NULL if any
* error occurs.
*/
struct TALER_FAKEBANK_Handle *
TALER_TESTING_run_fakebank (const char *bank_url);
TALER_TESTING_run_fakebank (const char *bank_url,
const char *currency);
/**

View File

@ -81,7 +81,8 @@ TALER_JSON_get_error_code (const json_t *json)
so we are dealing with a missing error code here. */
if (NULL == jc)
{
GNUNET_break_op (0);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Expected Taler error code `code' in JSON, but field does not exist!\n");
return TALER_EC_INVALID;
}
if (json_is_integer (jc))

View File

@ -52,6 +52,7 @@ static struct GNUNET_OS_Process *bankd;
*/
static int with_fakebank;
/**
* Main function that will tell the interpreter what commands to
* run.
@ -116,12 +117,32 @@ run (void *cls,
}
/**
* Runs #TALER_TESTING_setup() using the configuration.
*
* @param cls unused
* @param cfg configuration to use
* @return status code
*/
static int
setup_with_cfg (void *cls,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
(void) cls;
return TALER_TESTING_setup (&run,
NULL,
cfg,
NULL,
GNUNET_NO);
}
int
main (int argc,
char *const *argv)
{
int rv;
const char *cfgfilename;
int rv;
/* These environment variables get in the way... */
unsetenv ("XDG_DATA_HOME");
@ -165,12 +186,13 @@ main (int argc,
return 77;
}
}
rv = (GNUNET_OK == TALER_TESTING_setup (&run,
NULL,
cfgfilename,
NULL,
GNUNET_NO)) ? 0 : 1;
if (GNUNET_OK !=
GNUNET_CONFIGURATION_parse_and_run (cfgfilename,
&setup_with_cfg,
NULL))
rv = 1;
else
rv = 0;
if (GNUNET_NO == with_fakebank)
{

View File

@ -57,36 +57,6 @@ static char *config_filename;
#define USER42_ACCOUNT "42"
/**
* @return GNUNET_NO if database could not be prepared,
* otherwise GNUNET_OK
*/
static int
prepare_database (void *cls,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
dbc.plugin = TALER_EXCHANGEDB_plugin_load (cfg);
if (NULL == dbc.plugin)
{
GNUNET_break (0);
result = 77;
return GNUNET_NO;
}
if (GNUNET_OK !=
dbc.plugin->create_tables (dbc.plugin->cls))
{
GNUNET_break (0);
TALER_EXCHANGEDB_plugin_unload (dbc.plugin);
dbc.plugin = NULL;
result = 77;
return GNUNET_NO;
}
dbc.session = dbc.plugin->get_session (dbc.plugin->cls);
GNUNET_assert (NULL != dbc.session);
return GNUNET_OK;
}
/**
* Collects all the tests.
@ -454,6 +424,48 @@ run (void *cls,
}
/**
* Prepare database an launch the test.
*
* @param cls unused
* @param cfg our configuration
* @return #GNUNET_NO if database could not be prepared,
* otherwise #GNUNET_OK
*/
static int
prepare_database (void *cls,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
dbc.plugin = TALER_EXCHANGEDB_plugin_load (cfg);
if (NULL == dbc.plugin)
{
GNUNET_break (0);
result = 77;
return GNUNET_NO;
}
if (GNUNET_OK !=
dbc.plugin->create_tables (dbc.plugin->cls))
{
GNUNET_break (0);
TALER_EXCHANGEDB_plugin_unload (dbc.plugin);
dbc.plugin = NULL;
result = 77;
return GNUNET_NO;
}
dbc.session = dbc.plugin->get_session (dbc.plugin->cls);
GNUNET_assert (NULL != dbc.session);
result = TALER_TESTING_setup (&run,
NULL,
cfg,
NULL, // no exchange process handle.
GNUNET_NO); // do not try to connect to the exchange
return GNUNET_OK;
}
int
main (int argc,
char *const argv[])
@ -507,12 +519,6 @@ main (int argc,
return result;
}
result = TALER_TESTING_setup (&run,
NULL,
config_filename,
NULL, // no exchange process handle.
GNUNET_NO); // do not try to connect to the exchange
GNUNET_free (config_filename);
GNUNET_free (testname);
dbc.plugin->drop_tables (dbc.plugin->cls);

View File

@ -67,7 +67,7 @@ wirewatch_run (void *cls,
"taler-exchange-wirewatch",
"taler-exchange-wirewatch",
"-c", ws->config_filename,
"-T", /* exit when done */
"-t", /* exit when done */
NULL);
if (NULL == ws->wirewatch_proc)
{

View File

@ -36,11 +36,13 @@
* from the base URL.
*
* @param bank_url bank's base URL.
* @param currency currency the bank uses
* @return the fakebank process handle, or NULL if any
* error occurs.
*/
struct TALER_FAKEBANK_Handle *
TALER_TESTING_run_fakebank (const char *bank_url)
TALER_TESTING_run_fakebank (const char *bank_url,
const char *currency)
{
const char *port;
long pnum;
@ -56,7 +58,8 @@ TALER_TESTING_run_fakebank (const char *bank_url)
"Starting Fakebank on port %u (%s)\n",
(unsigned int) pnum,
bank_url);
fakebankd = TALER_FAKEBANK_start ((uint16_t) pnum);
fakebankd = TALER_FAKEBANK_start ((uint16_t) pnum,
currency);
if (NULL == fakebankd)
{
GNUNET_break (0);

View File

@ -788,7 +788,7 @@ TALER_TESTING_setup_with_exchange_cfg (void *cls,
/* NOTE: this call blocks. */
result = TALER_TESTING_setup (setup_ctx->main_cb,
setup_ctx->main_cb_cls,
setup_ctx->config_filename,
cfg,
exchanged,
GNUNET_YES);
GNUNET_break (0 ==

View File

@ -124,7 +124,33 @@ TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
struct TALER_TESTING_Command *commands,
const char *bank_url)
{
is->fakebank = TALER_TESTING_run_fakebank (bank_url);
char *currency;
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (is->cfg,
"taler",
"CURRENCY",
&currency))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY");
is->result = GNUNET_SYSERR;
return;
}
if (strlen (currency) >= TALER_CURRENCY_LEN)
{
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
"taler",
"CURRENCY",
"Value is too long");
GNUNET_free (currency);
is->result = GNUNET_SYSERR;
return;
}
is->fakebank = TALER_TESTING_run_fakebank (bank_url,
currency);
GNUNET_free (currency);
if (NULL == is->fakebank)
{
GNUNET_break (0);
@ -529,14 +555,6 @@ struct MainContext
*/
struct TALER_TESTING_Interpreter *is;
/**
* Configuration filename. The wrapper uses it to fetch
* the exchange port number; We could have passed the port
* number here, but having the config filename seems more
* generic.
*/
const char *config_filename;
/**
* URL of the exchange.
*/
@ -683,18 +701,16 @@ do_abort (void *cls)
* and responsible to run the "run" method.
*
* @param cls a `struct MainContext *`
* @param cfg configuration to use
*/
static int
main_exchange_connect_with_cfg (void *cls,
const struct GNUNET_CONFIGURATION_Handle *cfg)
static void
main_wrapper_exchange_connect (void *cls)
{
struct MainContext *main_ctx = cls;
struct TALER_TESTING_Interpreter *is = main_ctx->is;
char *exchange_url;
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
GNUNET_CONFIGURATION_get_value_string (is->cfg,
"exchange",
"BASE_URL",
&exchange_url))
@ -702,40 +718,18 @@ main_exchange_connect_with_cfg (void *cls,
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"exchange",
"BASE_URL");
return GNUNET_SYSERR;
return;
}
main_ctx->exchange_url = exchange_url;
is->cfg = cfg;
is->timeout_task = GNUNET_SCHEDULER_add_shutdown (&do_abort,
main_ctx);
GNUNET_break
(NULL != (is->exchange = TALER_EXCHANGE_connect
(is->ctx,
exchange_url,
&TALER_TESTING_cert_cb,
main_ctx,
TALER_EXCHANGE_OPTION_END)));
is->cfg = NULL;
return GNUNET_OK;
}
/**
* Initialize scheduler loop and curl context for the testcase,
* and responsible to run the "run" method.
*
* @param cls a `struct MainContext *`
*/
static void
main_wrapper_exchange_connect (void *cls)
{
struct MainContext *main_ctx = cls;
GNUNET_break (GNUNET_OK ==
GNUNET_CONFIGURATION_parse_and_run (main_ctx->config_filename,
&
main_exchange_connect_with_cfg,
main_ctx));
(NULL != (is->exchange =
TALER_EXCHANGE_connect (is->ctx,
exchange_url,
&TALER_TESTING_cert_cb,
main_ctx,
TALER_EXCHANGE_OPTION_END)));
}
@ -746,7 +740,7 @@ main_wrapper_exchange_connect (void *cls)
* @param main_cb the "run" method which contains all the
* commands.
* @param main_cb_cls a closure for "run", typically NULL.
* @param config_filename configuration filename.
* @param cfg configuration to use
* @param exchanged exchange process handle: will be put in the
* state as some commands - e.g. revoke - need to send
* signal to it, for example to let it know to reload the
@ -761,7 +755,7 @@ main_wrapper_exchange_connect (void *cls)
int
TALER_TESTING_setup (TALER_TESTING_Main main_cb,
void *main_cb_cls,
const char *config_filename,
const struct GNUNET_CONFIGURATION_Handle *cfg,
struct GNUNET_OS_Process *exchanged,
int exchange_connect)
{
@ -771,9 +765,6 @@ TALER_TESTING_setup (TALER_TESTING_Main main_cb,
.main_cb_cls = main_cb_cls,
/* needed to init the curl ctx */
.is = &is,
/* needed to read values like exchange port
* number to construct the exchange url.*/
.config_filename = config_filename
};
struct GNUNET_SIGNAL_Context *shc_chld;
@ -781,6 +772,7 @@ TALER_TESTING_setup (TALER_TESTING_Main main_cb,
0,
sizeof (is));
is.exchanged = exchanged;
is.cfg = cfg;
sigpipe = GNUNET_DISK_pipe (GNUNET_NO, GNUNET_NO,
GNUNET_NO, GNUNET_NO);
GNUNET_assert (NULL != sigpipe);