From fbd4260ef9d26c017462de0c61a1148886e77c65 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 15 Oct 2017 17:13:58 +0200 Subject: clean up tutorials --- .gitignore | 11 + common/html/js-wallet.html | 26 ++ common/texi/api-reference.texi | 88 ++++++ common/texi/fdl-1.3.texi | 506 ++++++++++++++++++++++++++++++++ common/texi/fulfillment-page.texi | 30 ++ common/texi/instances.texi | 24 ++ common/texi/js-payments.texi | 69 +++++ common/texi/lgpl.texi | 549 +++++++++++++++++++++++++++++++++++ common/texi/normalized-base-url.texi | 22 ++ common/texi/proposals.texi | 186 ++++++++++++ common/texi/syntax.texi | 43 +++ common/texi/wallet-detection.texi | 62 ++++ php/doc/inline-proposals.texi | 22 ++ php/doc/tutorial.texi | 545 ++-------------------------------- python/doc/fdl-1.3.texi | 506 -------------------------------- python/doc/lgpl.texi | 549 ----------------------------------- python/doc/syntax.texi | 43 --- python/doc/tutorial.texi | 240 +++++++++------ 18 files changed, 1807 insertions(+), 1714 deletions(-) create mode 100644 common/html/js-wallet.html create mode 100644 common/texi/api-reference.texi create mode 100644 common/texi/fdl-1.3.texi create mode 100644 common/texi/fulfillment-page.texi create mode 100644 common/texi/instances.texi create mode 100644 common/texi/js-payments.texi create mode 100644 common/texi/lgpl.texi create mode 100644 common/texi/normalized-base-url.texi create mode 100644 common/texi/proposals.texi create mode 100644 common/texi/syntax.texi create mode 100644 common/texi/wallet-detection.texi create mode 100644 php/doc/inline-proposals.texi delete mode 100644 python/doc/fdl-1.3.texi delete mode 100644 python/doc/lgpl.texi delete mode 100644 python/doc/syntax.texi diff --git a/.gitignore b/.gitignore index a1aef6c..e8425a9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,14 @@ php/doc/arch.* common/graphics/*.png common/graphics/*.pdf common/graphics/*.jpg +*~ +python/doc/arch.png +python/doc/arch_nobo.jpg +python/doc/arch_nobo.pdf +python/doc/tutorial.aux +python/doc/tutorial.cp +python/doc/tutorial.cps +python/doc/tutorial.html +python/doc/tutorial.log +python/doc/tutorial.pdf +python/doc/tutorial.toc diff --git a/common/html/js-wallet.html b/common/html/js-wallet.html new file mode 100644 index 0000000..1154eba --- /dev/null +++ b/common/html/js-wallet.html @@ -0,0 +1,26 @@ + + + + + +
+
+ + + diff --git a/common/texi/api-reference.texi b/common/texi/api-reference.texi new file mode 100644 index 0000000..6e3cd52 --- /dev/null +++ b/common/texi/api-reference.texi @@ -0,0 +1,88 @@ +@node Reference +@chapter Reference + +@menu +* Headers for HTTP 402:: Headers for the 402 status code and their effect on the user agent's operation +* JavaScript API:: JavaScript API to communicate with the wallet +* Stylesheet-based presence detection:: Presence detection using CSS style sheets and no JavaScript +@end menu + +@node Headers for HTTP 402 +@section Headers for HTTP 402 +The HTTP status code @code{402 Payment Required} can be used by the merchant +frontend to trigger operations related to payments in the user agent. The user +agent associates at most one proposal with every URL via the proposal's +@code{fulfillment_url} field. The associated proposal is either missing (in +case it doesn't exist), paid (in case the payment for it was successfully sent +to the merchant) or unpaid. If the associated proposal is unpaid, @code{402 +Payment Required} will cause the user agent to pay for the associated proposal. + +The following headers for @code{402 Payment Required} are recognized by Taler and further influence the processing: +@table @code +@item X-Taler-Refund-Url +If this header present, the value of this header must be a URL that the user agent can use to request and process refunds. + +@item X-Taler-Contract-Url +If there is no associated proposal, the user agent will fetch a proposal from +this URL and process it. This typically prompts the user to agree to pay. + +@item X-Taler-Offer-Url +If there is no associated proposal and @code{X-Taler-Contract-Url} is not +specified, the browser will navigate to this URL. + +@item X-Taler-User-Tipping-Url +If this header present, the value of this header must be a URL that the user agent can use to obtain tips (small, non-binding +financial rewards) payed from the merchant to the user's wallet. If this field is present, @code{X-Taler-User-Tipping-Exchange} +and @code{X-Taler-User-Tipping-Amount} must also be present. + +@item X-Taler-User-Tipping-Exchange +Exchange base URL for the exchange that the merchant helps withdrawing the tip from. + +@item X-Taler-User-Tipping-Amount +Amount of tip that the user is receiving, in the standard amount format (CURR:X.Y). + +@end table + +@node JavaScript API +@section JavaScript API + +The following functions are defined in the @code{taler} namespace of the @code{taler-wallet-lib} helper library +available at @url{https://git.taler.net/web-common.git/tree/taler-wallet-lib.js}. + +@table @code +@item onPresent(callback: () => void) +Add a callback to be called when support for Taler payments is detected. + +@item onAbsent(callback: () => void) +Add a callback to be called when support for Taler payments is disabled. + +@item pay(@{contract_url: string, offer_url: string@}) +Results in the same action as a @code{402 Payment Required} with @code{contract_url} in +the @code{X-Taler-Contract-Url} header and @code{offer_url} in the @code{X-Taler-Payment-Url} header. + +@item refund(refund_url: string) +Results in the same action as a @code{402 Payment Required} with @code{refund_url} in +the @code{X-Taler-Refund-Url} header. + +@end table + +@node Stylesheet-based presence detection +@section Stylesheet-based presence detection + +Stylesheet-based presence detection will be applied on all pages that have the +@code{data-taler-nojs} attribute of the @code{html} element set @code{true}. +The default/fallback stylesheet, that will be taken over by the wallet once +installed, must be included with the id @code{taler-presence-stylesheet}, like +this: + +The following CSS classes can be used: +@table @code +@item taler-installed-hide +A CSS rule will set the @code{display} property for this class to @code{none} once the Taler wallet is installed and enabled. +If the wallet is not installed, @code{display} will be @code{inherit}. + +@item taler-installed-show +A CSS rule will set the @code{display} property for this class to @code{inherit} once the Taler wallet is installed and enabled. +If the wallet is not installed, @code{display} will be @code{none}. + +@end table diff --git a/common/texi/fdl-1.3.texi b/common/texi/fdl-1.3.texi new file mode 100644 index 0000000..8805f1a --- /dev/null +++ b/common/texi/fdl-1.3.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/common/texi/fulfillment-page.texi b/common/texi/fulfillment-page.texi new file mode 100644 index 0000000..5ae9628 --- /dev/null +++ b/common/texi/fulfillment-page.texi @@ -0,0 +1,30 @@ +@c Section of advanced topics discussing the fulfillment page in more depth. + +@node The fulfillment page +@section The fulfillment page +@cindex fulfillment page + +This section describes some of the design considerations for the fulfillment page. +They are primarily relevant for high-performance setups. + +The fulfillment page mechanism is designed to provide the following two properties: + +@enumerate +@item Taler payments @emph{can} be implemented in DB-less frontends. + +@item Taler payments are replayable, meaning that each purchase is associated with +a URL (the fulfillment URL) that shows the product each time it gets visited (and +of course, only the first time takes the user's money). +@end enumerate + +Both properties are gotten "for free" by the way replayable payments are +implemented. Since @code{pay.php} simply relays payments to the backend, +if the latter returns "200 OK", then the frontend delivers what is mentioned +in the backend's response. Note that along with the "200 OK" response, +the backend returns the whole proposal associated with the fulfillment +URL that triggered the payment, so the frontend has all the information +useful to pick the right product to deliver. +The "payment" relayed to the backend contains the @emph{order id}, +that allows the backend to perform all the integrity checks on the +payment. +This way, the frontend does not need any database to replay payments. diff --git a/common/texi/instances.texi b/common/texi/instances.texi new file mode 100644 index 0000000..42f0099 --- /dev/null +++ b/common/texi/instances.texi @@ -0,0 +1,24 @@ +@c Section from ``advanced topics'' introducing the concept of instances + +@node Instances +@section Instances +@cindex instances + +Taler's design allows a single backend to manage multiple frontends. +In other words, we might have multiple shops relying on the same backend. +As of terminology, we call @emph{instance} any of the frontends accounted +by the same backend. + +The backend's RESTful API allows frontends to specify which instance they are. +However, this specification is optional, and a ``default'' instance will be +used whenever the frontend does not specify one. + +Please note that in this stage of development, the backend's REST call @code{/history} +returns records for @emph{any} instance. The rationale behind is to allow grouping +``public'' business entities under the same backend. + +This way, a single frontend can expose multiple donation buttons for multiple +receivers, and still operate against one backend. So in this scenario, there is no +harm if the operator of instance `a' sees history entries related to instance `b'. + +See @code{https://donations.demo.taler.net/}, which uses this functionality. diff --git a/common/texi/js-payments.texi b/common/texi/js-payments.texi new file mode 100644 index 0000000..6c88069 --- /dev/null +++ b/common/texi/js-payments.texi @@ -0,0 +1,69 @@ +@c Section about triggering payments via JavaScript, currently not used! + +@node Payments using JavaScript +@section Triggering payments using JavaScript +@c +Please note that the following examples are purely instructional and NOT TESTED +along with the tutorial code. +@c +@cindex JavaScript +@c +@subsection Offering contracts +@c +Offering contracts the JavaScript way doesn't require us to set HTTP +headers, and so -- in a minimalistic implementation -- the donation button +should just hit a HTML page that invokes the @code{offerContractFrom} function, +from the @code{taler-wallet-lib.js} library. +@c +Thus our homepage can now look as follows +@c +@smallexample +// ../index-js.html +@verbatiminclude ../index-js.html +@end smallexample +@c +@code{donate-js.html} is now in charge of calling @code{offerContractFrom} +passing the contract URL to it, which is @code{"/generate-order.php"} in +our example. See below. + +@c +@smallexample +// ../donate-js.html +@verbatiminclude ../donate-js.html +@end smallexample +@c +Please make sure that @code{taler-wallet-lib.js} location is valid. +@c +@subsection Receiving payments +@cindex payment +@c +In the example in section @ref{Initiating the payment process}, the fulfillment +handler @code{/fulfillment.php} triggers the payment in the wallet by returing +the three needed values (contract hashcode, pay URL, offer URL) via HTTP headers. +@c +The same action can be accomplished @emph{with} JavaScript, thanks to +@code{taler-wallet-lib.js} of @emph{web-common} repository. +The fulfillment handler needs just to call the function @code{executePayment}, feeding it +with the three needed parameters. The wallet will then get triggered and proceed with the +payment. See below a full example: +@c +@smallexample +// ../fulfillment-js.php +@verbatiminclude ../fulfillment-js.php +@end smallexample +@c +Note that, in order to use this fulfillment handler for the tutorial, you need to +specify it in the contract's ``fulfillment_url'' field: +@c +@smallexample +@{ +... contract fields .. +@c +"fulfillment_url": "/fulfillment-js.php?transaction_id=& \ + timestamp=" +... +@} +@end smallexample +@c +Additionally, you should also make sure that @code{taler-wallet-lib.js} location +is valid. diff --git a/common/texi/lgpl.texi b/common/texi/lgpl.texi new file mode 100644 index 0000000..ab03d6c --- /dev/null +++ b/common/texi/lgpl.texi @@ -0,0 +1,549 @@ +@c The GNU Lesser General Public License. +@center Version 2.1, February 1999 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts +as the successor of the GNU Library Public License, version 2, hence the +version number 2.1.] +@end display + +@subheading Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software---to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software---typically libraries---of the Free +Software Foundation and other authors who decide to use it. You can use +it too, but we suggest you first think carefully about whether this +license or the ordinary General Public License is the better strategy to +use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of it +in new free programs; and that you are informed that you can do these +things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the @dfn{Lesser} General Public License because it +does @emph{Less} to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +``work based on the library'' and a ``work that uses the library''. The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +@subheading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +@enumerate 0 +@item +This License Agreement applies to any software library or other program +which contains a notice placed by the copyright holder or other +authorized party saying it may be distributed under the terms of this +Lesser General Public License (also called ``this License''). Each +licensee is addressed as ``you''. + + A ``library'' means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The ``Library'', below, refers to any such software library or work +which has been distributed under these terms. A ``work based on the +Library'' means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term ``modification''.) + + ``Source code'' for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + +@item +You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + +@item +You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +@enumerate a +@item +The modified work must itself be a software library. + +@item +You must cause the files modified to carry prominent notices +stating that you changed the files and the date of any change. + +@item +You must cause the whole of the work to be licensed at no +charge to all third parties under the terms of this License. + +@item +If a facility in the modified Library refers to a function or a +table of data to be supplied by an application program that uses +the facility, other than as an argument passed when the facility +is invoked, then you must make a good faith effort to ensure that, +in the event an application does not supply such function or +table, the facility still operates, and performs whatever part of +its purpose remains meaningful. + +(For example, a function in a library to compute square roots has +a purpose that is entirely well-defined independent of the +application. Therefore, Subsection 2d requires that any +application-supplied function or table used by this function must +be optional: if the application does not supply it, the square +root function must still compute square roots.) +@end enumerate + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +@item +You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + +@item +You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + +@item +A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a ``work that uses the Library''. Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a ``work that uses the Library'' with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a ``work that uses the +library''. The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a ``work that uses the Library'' uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + +@item +As an exception to the Sections above, you may also combine or +link a ``work that uses the Library'' with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + +@enumerate a +@item +Accompany the work with the complete corresponding +machine-readable source code for the Library including whatever +changes were used in the work (which must be distributed under +Sections 1 and 2 above); and, if the work is an executable linked +with the Library, with the complete machine-readable ``work that +uses the Library'', as object code and/or source code, so that the +user can modify the Library and then relink to produce a modified +executable containing the modified Library. (It is understood +that the user who changes the contents of definitions files in the +Library will not necessarily be able to recompile the application +to use the modified definitions.) + +@item +Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (1) uses at run time a copy of the +library already present on the user's computer system, rather than +copying library functions into the executable, and (2) will operate +properly with a modified version of the library, if the user installs +one, as long as the modified version is interface-compatible with the +version that the work was made with. + +@item +Accompany the work with a written offer, valid for at +least three years, to give the same user the materials +specified in Subsection 6a, above, for a charge no more +than the cost of performing this distribution. + +@item +If distribution of the work is made by offering access to copy +from a designated place, offer equivalent access to copy the above +specified materials from the same place. + +@item +Verify that the user has already received a copy of these +materials or that you have already sent this user a copy. +@end enumerate + + For an executable, the required form of the ``work that uses the +Library'' must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies the +executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + +@item +You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + +@enumerate a +@item +Accompany the combined library with a copy of the same work +based on the Library, uncombined with any other library +facilities. This must be distributed under the terms of the +Sections above. + +@item +Give prominent notice with the combined library of the fact +that part of it is a work based on the Library, and explaining +where to find the accompanying uncombined form of the same work. +@end enumerate + +@item +You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + +@item +You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +@item +Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + +@item +If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +@item +If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + +@item +The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +``any later version'', you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + +@item +If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +@center @b{NO WARRANTY} + +@item +BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +@item +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +@end enumerate + +@subheading END OF TERMS AND CONDITIONS + +@page +@subheading How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the library's name and an idea of what it does.} +Copyright (C) @var{year} @var{name of author} + +This library 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 of the License, or (at +your option) any later version. + +This library 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 this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +USA. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a ``copyright disclaimer'' for the library, if +necessary. Here is a sample; alter the names: + +@smallexample +Yoyodyne, Inc., hereby disclaims all copyright interest in the library +`Frob' (a library for tweaking knobs) written by James Random Hacker. + +@var{signature of Ty Coon}, 1 April 1990 +Ty Coon, President of Vice +@end smallexample + +That's all there is to it! diff --git a/common/texi/normalized-base-url.texi b/common/texi/normalized-base-url.texi new file mode 100644 index 0000000..b06d468 --- /dev/null +++ b/common/texi/normalized-base-url.texi @@ -0,0 +1,22 @@ +@c Section from ``advanced topics'' about how to normalize base URLs + +@node Normalized base URLs +@section Normalized base URLs + +Exchanges and merchants have a base URL for their service. This URL @b{must} +be in a canonical form when it is stored (e.g. in the wallet's database) or +transmitted (e.g. to a bank page). + +@itemize +@item The URL must be absolute. This implies that the URL has a schema. +@item The path component of the URL must end with a slash. +@item The URL must not contain a fragment or query. +@end itemize + +When a user enters a URL that is, technically, relative (such as "alice.example.com/exchange"), wallets +*may* transform it into a canonical base URL ("http://alice.example.com/exchange/"). Other components *should not* accept +URLs that are not canonical. + +Rationale: Joining non-canonical URLs with relative URLs (e.g. "exchange.example.com" with "reserve/status") +results in different and slightly unexpected behavior in some URL handling libraries. +Canonical URLs give more predictable results with standard URL joining. diff --git a/common/texi/proposals.texi b/common/texi/proposals.texi new file mode 100644 index 0000000..f234c49 --- /dev/null +++ b/common/texi/proposals.texi @@ -0,0 +1,186 @@ +@c Section describing the format of Taler contracts/proposals in detail + +@node The Taler proposal format +@section The Taler proposal format +@cindex contract + +A Taler proposal can specify many details about the transaction. +This section describes each of the fields in depth. + +@table @var +@item amount +@cindex amount +Specifies the total amount to be paid to the merchant by the customer. +The amount is broken up into a @var{value}, a @var{fraction} +(100.000.000 @var{fraction} units correspond to one @var{value}) and +the @var{currency}. For example, @code{EUR 1.50} would be represented +as the tuple @code{value = 1, fraction = 50000000, currency = "EUR"}. + +@item max_fee +@cindex fees +@cindex maximum deposit fee +This is the maximum total amount of deposit fees that the merchant is +willing to pay. If the deposit fees for the coins exceed this amount, +the customer has to include it in the payment total. The fee is +specified using the same triplet used for @var{amount}. + + +@item max_wire_fee +@cindex fees +@cindex maximum wire fee +Maximum wire fee accepted by the merchant (customer share to be +divided by the 'wire_fee_amortization' factor, and further reduced +if deposit fees are below 'max_fee'). Default if missing is zero. + + +@item wire_fee_amortization +@cindex fees +@cindex maximum fee amortization +Over how many customer transactions does the merchant expect to +amortize wire fees on average? If the exchange's wire fee is +above 'max_wire_fee', the difference is divided by this number +to compute the expected customer's contribution to the wire fee. +The customer's contribution may further be reduced by the difference +between the 'max_fee' and the sum of the actual deposit fees. +Optional, default value if missing is 1. 0 and negative values are +invalid and also interpreted as 1. + +@item pay_url +@cindex pay_url +Which URL accepts payments. This is the URL where the wallet will POST +coins. + +@item fulfillment_url +@cindex fulfillment URL +Which URL should the wallet go to for obtaining the fulfillment, +for example the HTML or PDF of an article that was bought, or an +order tracking system for shipments, or a simple human-readable +Web page indicating the status of the contract. + +@item order_id +@cindex order ID +Alphanumeric identifier, freely definable by the merchant. +Used by the merchant to uniquely identify the transaction. + +@item summary +@cindex summary +Short, human-readable summary of the contract. To be used when +displaying the contract in just one line, for example in the +transaction history of the customer. + +@item timestamp +Time at which the offer was generated. +@c FIXME: describe time format in detail here + +@item pay_deadline +@cindex payment deadline +Timestamp of the time by which the merchant wants the exchange +to definitively wire the money due from this contract. Once +this deadline expires, the exchange will aggregate all +deposits where the contracts are past the @var{refund_deadline} +and execute one large wire payment for them. Amounts will be +rounded down to the wire transfer unit; if the total amount is +still below the wire transfer unit, it will not be disbursed. + +@item refund_deadline +@cindex refund deadline +Timestamp until which the merchant willing (and able) to give refunds +for the contract using Taler. Note that the Taler exchange will hold +the payment in escrow at least until this deadline. Until this time, +the merchant will be able to sign a message to trigger a refund to the +customer. After this time, it will no longer be possible to refund +the customer. Must be smaller than the @var{pay_deadline}. + +@item products +@cindex product description +Array of products that are being sold to the customer. Each +entry contains a tuple with the following values: + +@table @var +@item description +Description of the product. +@item quantity +Quantity of the items to be shipped. May specify a unit (@code{1 kg}) +or just the count. +@item price +Price for @var{quantity} units of this product shipped to the +given @var{delivery_location}. Note that usually the sum of all +of the prices should add up to the total amount of the contract, +but it may be different due to discounts or because individual +prices are unavailable. +@item product_id +Unique ID of the product in the merchant's catalog. Can generally +be chosen freely as it only has meaning for the merchant, but +should be a number in the range @math{[0,2^{51})}. +@item taxes +Map of applicable taxes to be paid by the merchant. The label is the +name of the tax, i.e. @var{VAT}, @var{sales tax} or @var{income tax}, +and the value is the applicable tax amount. Note that arbitrary +labels are permitted, as long as they are used to identify the +applicable tax regime. Details may be specified by the regulator. +This is used to declare to the customer which taxes the merchant +intends to pay, and can be used by the customer as a receipt. +@c FIXME: a receipt not including the item's price? +The information is also likely to be used by tax audits of the merchant. +@item delivery_date +Time by which the product is to be delivered to the +@var{delivery_location}. +@item delivery_location +This should give a label in the @var{locations} map, specifying +where the item is to be delivered. +@end table +Values can be omitted if they are not applicable. For example, if a +purchase is about a bundle of products that have no individual prices +or product IDs, the @var{product_id} or @var{price} may not be +specified in the contract. Similarly, for virtual products delivered +directly via the fulfillment URI, there is no delivery location. + +@item merchant +@table @var +@item address +This should give a label in the @var{locations} map, specifying +where the merchant is located. +@item name +This should give a human-readable name for the merchant's business. +@item jurisdiction +This should give a label in the @var{locations} map, specifying +the jurisdiction under which this contract is to be arbitrated. +@end table + +@item locations +@cindex location +Associative map of locations used in the contract. Labels for +locations in this map can be freely chosen and used whenever +a location is required in other parts of the contract. This way, +if the same location is required many times (such as the business +address of the customer or the merchant), it only needs to be +listed (and transmitted) once, and can otherwise be referred to +via the label. A non-exhaustive list of location attributes +is the following: +@table @var +@item country +Name of the country for delivery, as found on a postal package, i.e. ``France''. +@item state +Name of the state for delivery, as found on a postal package, i.e. ``NY''. +@item region +Name of the region for delivery, as found on a postal package. +@item province +Name of the province for delivery, as found on a postal package. +@item city +Name of the city for delivery, as found on a postal package. +@item ZIP code +ZIP code for delivery, as found on a postal package. +@item street +Street name for delivery, as found on a postal package. +@item street number +Street number (number of the house) for delivery, as found on a postal package. +@item name receiver name for delivery, either business or person name. + +@end table + +Note that locations are not required to specify all of these fields, +and it is also allowed to have additional fields. Contract renderers +must render at least the fields listed above, and should render fields +that they do not understand as a key-value list. + +@end table diff --git a/common/texi/syntax.texi b/common/texi/syntax.texi new file mode 100644 index 0000000..8bb37b3 --- /dev/null +++ b/common/texi/syntax.texi @@ -0,0 +1,43 @@ +@c Syntax highlighting for texinfo's HTML output + +@html + + +@end html + +@macro setsyntax{lang} +@html + +@end html +@end macro + +@macro setsyntaxnoauto{} +@html + +@end html +@end macro diff --git a/common/texi/wallet-detection.texi b/common/texi/wallet-detection.texi new file mode 100644 index 0000000..a4b9a34 --- /dev/null +++ b/common/texi/wallet-detection.texi @@ -0,0 +1,62 @@ +@c Section on how to detect the Taler wallet + +@node Detecting the presence of the Taler wallet +@section Detecting the presence of the Taler wallet +@cindex wallet + +Taler offers the way to the frontend developer to detect whether +a user has the wallet installed in their browser, and take actions +accordingly. + +@subsection The no-JavaScript way +The follwing example shows all that is needed to perform the detection +without using JavaScript: + +@smallexample + + + + Tutorial + + + +

+ No wallet found. +

+

+ Wallet found! +

+ + +@end smallexample + +The @code{taler-fallback.css} is part of the Taler's @emph{web-common} repository, +available at @code{https://git.taler.net/web-common.git}. Please adjust the @code{href} +attribute in order to make it work with your Web site. + +The detection works by @code{taler-fallback.css} hiding any tag from the +@code{taler-installed-show} class, in case no wallet is installed. If otherwise +the wallet is installed, the wallet takes action by hiding any tag from the +@code{taler-installed-hide} class and overriding @code{taler-fallback.css} logic +by showing any tag from the @code{taler-installed-show} class. + +@subsection The JavaScript way + +@code{taler-wallet-lib.js} helps the frontend, by providing the way to register two +callbacks: one to be executed if a wallet is present, the other if it is not. +See the example below: + +@smallexample +// js-wallet.html +@verbatiminclude ../../common/html/js-wallet.html +@end smallexample + +@code{taler-wallet-lib.js} exports the @code{taler} object that +exposes the @code{onPresent} and the @code{onAbsent} functions needed +to register the frontend's callbacks. Thus the function @code{walletInstalled} +will be executed whenever a wallet is installed, and @code{walletNotInstalled} +if not. Note that since now we can use JavaScript we can register +callbacks that do more than just showing and hiding elements. diff --git a/php/doc/inline-proposals.texi b/php/doc/inline-proposals.texi new file mode 100644 index 0000000..3613e9a --- /dev/null +++ b/php/doc/inline-proposals.texi @@ -0,0 +1,22 @@ +@node Inlining proposals in HTTP headers +@section Inlining proposals in HTTP headers +@cindex optimization +@cindex contract + +In the example in @ref{Prompting for payment}, we told the wallet the URL +from where it should fetch the proposal. Instead of specifying the proposal +via an URL, it is also possible to inline short proposals directly. + +That may be accomplished by the frontend including the @code{X-Taler-Proposal} +HTTP header, whenever the requested page is meant to trigger a payment. +The example shown below may be an alternative version of @code{/donate.php}, +which implements inline contracts. + +@smallexample +// ../inline.php +@verbatiminclude ../inline.php +@end smallexample + +The wallet will then look for the @code{X-Taler-Proposal} header, and fetch the +inlined contract if this header is found. Please note that this feature is not +yet implemented in the wallet. diff --git a/php/doc/tutorial.texi b/php/doc/tutorial.texi index 7b8d31b..27ef83a 100644 --- a/php/doc/tutorial.texi +++ b/php/doc/tutorial.texi @@ -2,6 +2,7 @@ @c %**start of header @setfilename tutorial.info @include version.texi +@include ../../common/texi/syntax.texi @settitle The GNU Taler tutorial for PHP Web shop developers @value{VERSION} @c Define a new index for options. @@ -15,7 +16,7 @@ This tutorial is about implementing a merchant frontend to run against a GNU Taler merchant backend (version @value{VERSION}, @value{UPDATED}), -Copyright @copyright{} 2016 INRIA +Copyright @copyright{} 2016, 2017 Taler Systems SA @quotation Permission is granted to copy, distribute and/or modify this document @@ -37,7 +38,8 @@ Texts. A copy of the license is included in the section entitled @subtitle Version @value{VERSION} @subtitle @value{UPDATED} @author Marcello Stanisci (@email{marcello.stanisci@@inria.fr}) -@author Christian Grothoff (@email{christian.grothoff@@inria.fr}) +@author Christian Grothoff (@email{christian.grothoff@@inria.fr} +@author Florian Dold (@email{florian.dold@@inria.fr}) @page @vskip 0pt plus 1filll @insertcopying @@ -432,7 +434,7 @@ transfer. The Taler exchange may aggregate multiple payments from transactions into one larger wire transfer. The @var{refund_deadline} and the @var{pay_deadline} values in the contract specify the timeframes within which the exchange is permitted to perform such -aggregations, see @ref{Taler contracts}. +aggregations, see @ref{The Taler proposal format}. In this chapter, we will see how a merchant can obtain the mapping from transactions to wire transfers and vice versa. @@ -562,529 +564,24 @@ See below both parts: @chapter Advanced topics @menu -* Presence detection:: Reacting to the presence of a Taler wallet -* Taler contracts:: Building Taler contracts -* Inline proposals:: Snding proposals with the HTTP header -* The Fulfillment page:: The rationale behind the fulfillment page design -* Normalized base URLs:: Format URLs are expected to be in Taler +* Detecting the presence of the Taler wallet:: Detecting the presence of the Taler wallet +* The Taler proposal format:: The Taler proposal format +* Inlining proposals in HTTP headers:: Inlining proposals in HTTP headers +* Instances:: Instances +* The fulfillment page:: The fulfillment page +* Normalized base URLs:: Normalized base URLs @end menu -@c FIXME. Add section about including images (or extra files in general) -@c along with payed content. +@include ../../common/texi/wallet-detection.texi +@include ../../common/texi/proposals.texi +@include inline-proposals.texi +@include ../../common/texi/instances.texi +@include ../../common/texi/fulfillment-page.texi +@include ../../common/texi/normalized-base-url.texi -@node Presence detection -@section Reacting to the presence of a Taler wallet -@cindex wallet - -Taler offers the way to the frontend developer to detect whether -a user has the wallet installed in their browser, and take actions -accordingly. - -@subsection The no-JavaScript way -The follwing example shows all that is needed to perform the detection -without using JavaScript: - -@smallexample - - - - Tutorial - - - -

- No wallet found. -

-

- Wallet found! -

- - -@end smallexample - -The @code{taler-fallback.css} is part of the Taler's @emph{web-common} repository, -available at @code{https://git.taler.net/web-common.git}. Please adjust the @code{href} -attribute in order to make it work with your Web site. - -The detection works by @code{taler-fallback.css} hiding any tag from the -@code{taler-installed-show} class, in case no wallet is installed. If otherwise -the wallet is installed, the wallet takes action by hiding any tag from the -@code{taler-installed-hide} class and overriding @code{taler-fallback.css} logic -by showing any tag from the @code{taler-installed-show} class. - -@subsection The JavaScript way - -@code{taler-wallet-lib.js} helps the frontend, by providing the way to register two -callbacks: one to be executed if a wallet is present, the other if it is not. -See the example below: - -@smallexample - - - - - -
-
- - - -@end smallexample - -@code{taler-wallet-lib.js} exports the @code{taler} object that -exposes the @code{onPresent} and the @code{onAbsent} functions needed -to register the frontend's callbacks. Thus the function @code{walletInstalled} -will be executed whenever a wallet is installed, and @code{walletNotInstalled} -if not. Note that since now we can use JavaScript we can register -callbacks that do more than just showing and hiding elements. - - -@node Taler proposals -@section Building Taler proposals -@cindex contract - -A Taler proposal can specify many details about the transaction. -This section describes each of the fields in depth. - -@table @var -@item amount -@cindex amount -Specifies the total amount to be paid to the merchant by the customer. -The amount is broken up into a @var{value}, a @var{fraction} -(100.000.000 @var{fraction} units correspond to one @var{value}) and -the @var{currency}. For example, @code{EUR 1.50} would be represented -as the tuple @code{value = 1, fraction = 50000000, currency = "EUR"}. - -@item max_fee -@cindex fees -@cindex maximum deposit fee -This is the maximum total amount of deposit fees that the merchant is -willing to pay. If the deposit fees for the coins exceed this amount, -the customer has to include it in the payment total. The fee is -specified using the same triplet used for @var{amount}. - - -@item max_wire_fee -@cindex fees -@cindex maximum wire fee -Maximum wire fee accepted by the merchant (customer share to be -divided by the 'wire_fee_amortization' factor, and further reduced -if deposit fees are below 'max_fee'). Default if missing is zero. - - -@item wire_fee_amortization -@cindex fees -@cindex maximum fee amortization -Over how many customer transactions does the merchant expect to -amortize wire fees on average? If the exchange's wire fee is -above 'max_wire_fee', the difference is divided by this number -to compute the expected customer's contribution to the wire fee. -The customer's contribution may further be reduced by the difference -between the 'max_fee' and the sum of the actual deposit fees. -Optional, default value if missing is 1. 0 and negative values are -invalid and also interpreted as 1. - -@item pay_url -@cindex pay_url -Which URL accepts payments. This is the URL where the wallet will POST -coins. - -@item fulfillment_url -@cindex fulfillment URL -Which URL should the wallet go to for obtaining the fulfillment, -for example the HTML or PDF of an article that was bought, or an -order tracking system for shipments, or a simple human-readable -Web page indicating the status of the contract. - -@item order_id -@cindex order ID -Alphanumeric identifier, freely definable by the merchant. -Used by the merchant to uniquely identify the transaction. - -@item summary -@cindex summary -Short, human-readable summary of the contract. To be used when -displaying the contract in just one line, for example in the -transaction history of the customer. - -@item timestamp -Time at which the offer was generated. -@c FIXME: describe time format in detail here - -@item pay_deadline -@cindex payment deadline -Timestamp of the time by which the merchant wants the exchange -to definitively wire the money due from this contract. Once -this deadline expires, the exchange will aggregate all -deposits where the contracts are past the @var{refund_deadline} -and execute one large wire payment for them. Amounts will be -rounded down to the wire transfer unit; if the total amount is -still below the wire transfer unit, it will not be disbursed. - -@item refund_deadline -@cindex refund deadline -Timestamp until which the merchant willing (and able) to give refunds -for the contract using Taler. Note that the Taler exchange will hold -the payment in escrow at least until this deadline. Until this time, -the merchant will be able to sign a message to trigger a refund to the -customer. After this time, it will no longer be possible to refund -the customer. Must be smaller than the @var{pay_deadline}. - -@item products -@cindex product description -Array of products that are being sold to the customer. Each -entry contains a tuple with the following values: - -@table @var -@item description -Description of the product. -@item quantity -Quantity of the items to be shipped. May specify a unit (@code{1 kg}) -or just the count. -@item price -Price for @var{quantity} units of this product shipped to the -given @var{delivery_location}. Note that usually the sum of all -of the prices should add up to the total amount of the contract, -but it may be different due to discounts or because individual -prices are unavailable. -@item product_id -Unique ID of the product in the merchant's catalog. Can generally -be chosen freely as it only has meaning for the merchant, but -should be a number in the range @math{[0,2^{51})}. -@item taxes -Map of applicable taxes to be paid by the merchant. The label is the -name of the tax, i.e. @var{VAT}, @var{sales tax} or @var{income tax}, -and the value is the applicable tax amount. Note that arbitrary -labels are permitted, as long as they are used to identify the -applicable tax regime. Details may be specified by the regulator. -This is used to declare to the customer which taxes the merchant -intends to pay, and can be used by the customer as a receipt. -@c FIXME: a receipt not including the item's price? -The information is also likely to be used by tax audits of the merchant. -@item delivery_date -Time by which the product is to be delivered to the -@var{delivery_location}. -@item delivery_location -This should give a label in the @var{locations} map, specifying -where the item is to be delivered. -@end table -Values can be omitted if they are not applicable. For example, if a -purchase is about a bundle of products that have no individual prices -or product IDs, the @var{product_id} or @var{price} may not be -specified in the contract. Similarly, for virtual products delivered -directly via the fulfillment URI, there is no delivery location. - -@item merchant -@table @var -@item address -This should give a label in the @var{locations} map, specifying -where the merchant is located. -@item name -This should give a human-readable name for the merchant's business. -@item jurisdiction -This should give a label in the @var{locations} map, specifying -the jurisdiction under which this contract is to be arbitrated. -@end table - -@item locations -@cindex location -Associative map of locations used in the contract. Labels for -locations in this map can be freely chosen and used whenever -a location is required in other parts of the contract. This way, -if the same location is required many times (such as the business -address of the customer or the merchant), it only needs to be -listed (and transmitted) once, and can otherwise be referred to -via the label. A non-exhaustive list of location attributes -is the following: -@table @var -@item country -Name of the country for delivery, as found on a postal package, i.e. ``France''. -@item state -Name of the state for delivery, as found on a postal package, i.e. ``NY''. -@item region -Name of the region for delivery, as found on a postal package. -@item province -Name of the province for delivery, as found on a postal package. -@item city -Name of the city for delivery, as found on a postal package. -@item ZIP code -ZIP code for delivery, as found on a postal package. -@item street -Street name for delivery, as found on a postal package. -@item street number -Street number (number of the house) for delivery, as found on a postal package. -@item name receiver name for delivery, either business or person name. - -@end table - -Note that locations are not required to specify all of these fields, -and it is also allowed to have additional fields. Contract renderers -must render at least the fields listed above, and should render fields -that they do not understand as a key-value list. - -@end table - -@node Inline proposals -@section Inlining proposals in HTTP headers -@cindex optimization -@cindex contract - -In the example in @ref{Prompting for payment}, we told the wallet the URL -from where it should fetch the proposal. Instead of specifying the proposal -via an URL, it is also possible to inline short proposals directly. - -That may be accomplished by the frontend including the @code{X-Taler-Proposal} -HTTP header, whenever the requested page is meant to trigger a payment. -The example shown below may be an alternative version of @code{/donate.php}, -which implements inline contracts. - -@smallexample -// ../inline.php -@verbatiminclude ../inline.php -@end smallexample - -The wallet will then look for the @code{X-Taler-Proposal} header, and fetch the -inlined contract if this header is found. Please note that this feature is not -yet implemented in the wallet. - -@c @node Payments using JavaScript -@c @section Triggering payments using JavaScript -@c -@c Please note that the following examples are purely instructional and NOT TESTED -@c along with the tutorial code. -@c -@c @cindex JavaScript -@c -@c @subsection Offering contracts -@c -@c Offering contracts the JavaScript way doesn't require us to set HTTP -@c headers, and so -- in a minimalistic implementation -- the donation button -@c should just hit a HTML page that invokes the @code{offerContractFrom} function, -@c from the @code{taler-wallet-lib.js} library. -@c -@c Thus our homepage can now look as follows -@c -@c @smallexample -@c // ../index-js.html -@c @verbatiminclude ../index-js.html -@c @end smallexample -@c -@c @code{donate-js.html} is now in charge of calling @code{offerContractFrom} -@c passing the contract URL to it, which is @code{"/generate-order.php"} in -@c our example. See below. -@c -@c @smallexample -@c // ../donate-js.html -@c @verbatiminclude ../donate-js.html -@c @end smallexample -@c -@c Please make sure that @code{taler-wallet-lib.js} location is valid. -@c -@c @subsection Receiving payments -@c @cindex payment -@c -@c In the example in section @ref{Initiating the payment process}, the fulfillment -@c handler @code{/fulfillment.php} triggers the payment in the wallet by returing -@c the three needed values (contract hashcode, pay URL, offer URL) via HTTP headers. -@c -@c The same action can be accomplished @emph{with} JavaScript, thanks to -@c @code{taler-wallet-lib.js} of @emph{web-common} repository. -@c The fulfillment handler needs just to call the function @code{executePayment}, feeding it -@c with the three needed parameters. The wallet will then get triggered and proceed with the -@c payment. See below a full example: -@c -@c @smallexample -@c // ../fulfillment-js.php -@c @verbatiminclude ../fulfillment-js.php -@c @end smallexample -@c -@c Note that, in order to use this fulfillment handler for the tutorial, you need to -@c specify it in the contract's ``fulfillment_url'' field: -@c -@c @smallexample -@c @{ -@c ... contract fields .. -@c -@c "fulfillment_url": "/fulfillment-js.php?transaction_id=& \ -@c timestamp=" -@c ... -@c @} -@c @end smallexample -@c -@c Additionally, you should also make sure that @code{taler-wallet-lib.js} location -@c is valid. - -@node The fulfillment page -@section Design considerations for the fulfillment page -@cindex fulfillment page - -The fulfillment page mechanism is designed to provide the following two properties: - -@enumerate -@item Taler payments @emph{can} be implemented in DB-less frontends. - -@item Taler payments are replayable, meaning that each purchase is associated with -a URL (the fulfillment URL) that shows the product each time it gets visited (and -of course, only the first time takes the user's money). -@end enumerate - -Both properties are gotten "for free" by the way replayable payments are -implemented. Since @code{pay.php} simply relays payments to the backend, -if the latter returns "200 OK", then the frontend delivers what is mentioned -in the backend's response. Note that along with the "200 OK" response, -the backend returns the whole proposal associated with the fulfillment -URL that triggered the payment, so the frontend has all the information -useful to pick the right product to deliver. -The "payment" relayed to the backend contains the @emph{order id}, -that allows the backend to perform all the integrity checks on the -payment. -This way, the frontend doesn't need any database to replay payments. - -@node Instances -@section Instances -@cindex instances - -Taler's design allows a single backend to manage multiple frontends. -In other words, we might have multiple shops relying on the same backend. -As of terminology, we call @emph{instance} any of the frontends accounted -by the same backend. - -The backend's RESTful API allows frontends to specify which instance they are. -However, this specification is optional, and a ``default'' instance will be -used whenever the frontend does not specify one. - -Please note that in this stage of development, the backend's REST call @code{/history} -returns records for @emph{any} instance. The rationale behind is to allow grouping -``public'' business entities under the same backend. - -This way, a single frontend can expose multiple donation buttons for multiple -receivers, and still operate against one backend. So in this scenario, there is no -harm if the operator of instance `a' sees history entries related to instance `b'. - -See @code{https://donations.demo.taler.net/}, which uses this functionality. - -@node Normalized base URLs -@section Normalized base URLs - -Exchanges and merchants have a base URL for their service. This URL @b{must} -be in a canonical form when it is stored (e.g. in the wallet's database) or -transmitted (e.g. to a bank page). - -@itemize -@item The URL must be absolute. This implies that the URL has a schema. -@item The path component of the URL must end with a slash. -@item The URL must not contain a fragment or query. -@end itemize - -When a user enters a URL that is, technically, relative (such as "alice.example.com/exchange"), wallets -*may* transform it into a canonical base URL ("http://alice.example.com/exchange/"). Other components *should not* accept -URLs that are not canonical. - -Rationale: Joining non-canonical URLs with relative URLs (e.g. "exchange.example.com" with "reserve/status") -results in different and slightly unexpected behavior in some URL handling libraries. -Canonical URLs give more predictable results with standard URL joining. - - -@c The following section is copied from the Python manual, -@c changes should be done there and then copied back here. -@node Reference -@chapter Reference - -@menu -* Headers for HTTP 402:: Headers for the 402 status code and their effect on the user agent's operation -* JavaScript API:: JavaScript API to communicate with the wallet -* Stylesheet-based presence detection:: Presence detection using CSS style sheets and no JavaScript -@end menu - -@node Headers for HTTP 402 -@section Headers for HTTP 402 -The HTTP status code @code{402 Payment Required} can be used by the merchant -frontend to trigger operations related to payments in the user agent. The user -agent associates at most one proposal with every URL via the proposal's -@code{fulfillment_url} field. The associated proposal is either missing (in -case it doesn't exist), paid (in case the payment for it was successfully sent -to the merchant) or unpaid. If the associated proposal is unpaid, @code{402 -Payment Required} will cause the user agent to pay for the associated proposal. - -The following headers for @code{402 Payment Required} are recognized by Taler and further influence the processing: -@table @code -@item X-Taler-Refund-Url -If this header present, the value of this header must be a URL that the user agent can use to request and process refunds. - -@item X-Taler-Contract-Url -If there is no associated proposal, the user agent will fetch a proposal from -this URL and process it. This typically prompts the user to agree to pay. - -@item X-Taler-Offer-Url -If there is no associated proposal and @code{X-Taler-Contract-Url} is not -specified, the browser will navigate to this URL. - -@end table - -@node JavaScript API -@section JavaScript API - -The following functions are defined in the @code{taler} namespace of the @code{taler-wallet-lib} helper library -available at @url{https://git.taler.net/web-common.git/tree/taler-wallet-lib.js}. - -@table @code -@item onPresent(callback: () => void) -Add a callback to be called when support for Taler payments is detected. - -@item onAbsent(callback: () => void) -Add a callback to be called when support for Taler payments is disabled. - -@item pay(@{contract_url: string, offer_url: string@}) -Results in the same action as a @code{402 Payment Required} with @code{contract_url} in -the @code{X-Taler-Contract-Url} header and @code{offer_url} in the @code{X-Taler-Payment-Url} header. - -@item refund(refund_url: string) -Results in the same action as a @code{402 Payment Required} with @code{refund_url} in -the @code{X-Taler-Refund-Url} header. - -@end table - -@node Stylesheet-based presence detection -@section Stylesheet-based presence detection - -Stylesheet-based presence detection will be applied on all pages that have the -@code{data-taler-nojs} attribute of the @code{html} element set @code{true}. -The default/fallback stylesheet, that will be taken over by the wallet once -installed, must be included with the id @code{taler-presence-stylesheet}, like -this: - -The following CSS classes can be used: -@table @code -@item taler-installed-hide -A CSS rule will set the @code{display} property for this class to @code{none} once the Taler wallet is installed and enabled. -If the wallet is not installed, @code{display} will be @code{inherit}. - -@item taler-installed-show -A CSS rule will set the @code{display} property for this class to @code{inherit} once the Taler wallet is installed and enabled. -If the wallet is not installed, @code{display} will be @code{none}. - -@end table - +@c ************ Reference chapter *********** +@include ../../common/texi/api-reference.texi @c ********************************************************** @c ******************* Appendices ************************* @@ -1094,13 +591,13 @@ If the wallet is not installed, @code{display} will be @code{none}. @unnumbered GNU-LGPL @cindex license @cindex LGPL -@include lgpl.texi +@include ../../common/texi/lgpl.texi @node GNU-FDL @unnumbered GNU-FDL @cindex license @cindex GNU Free Documentation License -@include fdl-1.3.texi +@include ../../common/texi/fdl-1.3.texi @node Concept Index @unnumbered Concept Index diff --git a/python/doc/fdl-1.3.texi b/python/doc/fdl-1.3.texi deleted file mode 100644 index 8805f1a..0000000 --- a/python/doc/fdl-1.3.texi +++ /dev/null @@ -1,506 +0,0 @@ -@c The GNU Free Documentation License. -@center Version 1.3, 3 November 2008 - -@c This file is intended to be included within another document, -@c hence no sectioning command or @node. - -@display -Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. -@uref{http://fsf.org/} - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document @dfn{free} in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of ``copyleft'', which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - -@item -APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The ``Document'', below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as ``you''. You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A ``Modified Version'' of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A ``Secondary Section'' is a named appendix or a front-matter section -of the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall -subject (or to related matters) and contains nothing that could fall -directly within that overall subject. (Thus, if the Document is in -part a textbook of mathematics, a Secondary Section may not explain -any mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The ``Invariant Sections'' are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The ``Cover Texts'' are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A ``Transparent'' copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not ``Transparent'' is called ``Opaque''. - -Examples of suitable formats for Transparent copies include plain -@sc{ascii} without markup, Texinfo input format, La@TeX{} input -format, @acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML}, -PostScript or @acronym{PDF} designed for human modification. Examples -of transparent image formats include @acronym{PNG}, @acronym{XCF} and -@acronym{JPG}. Opaque formats include proprietary formats that can be -read and edited only by proprietary word processors, @acronym{SGML} or -@acronym{XML} for which the @acronym{DTD} and/or processing tools are -not generally available, and the machine-generated @acronym{HTML}, -PostScript or @acronym{PDF} produced by some word processors for -output purposes only. - -The ``Title Page'' means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, ``Title Page'' means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -The ``publisher'' means any person or entity that distributes copies -of the Document to the public. - -A section ``Entitled XYZ'' means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as ``Acknowledgements'', -``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' -of such a section when you modify the Document means that it remains a -section ``Entitled XYZ'' according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - -@item -VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - -@item -COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - -@item -MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -@enumerate A -@item -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. - -@item -List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has fewer than five), -unless they release you from this requirement. - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -Preserve the section Entitled ``History'', Preserve its Title, and add -to it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section Entitled ``History'' in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. - -@item -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the ``History'' section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. - -@item -For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve -the Title of the section, and preserve in the section all the -substance and tone of each of the contributor acknowledgements and/or -dedications given therein. - -@item -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. - -@item -Delete any section Entitled ``Endorsements''. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section to be Entitled ``Endorsements'' or -to conflict in title with any Invariant Section. - -@item -Preserve any Warranty Disclaimers. -@end enumerate - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled ``Endorsements'', provided it contains -nothing but endorsements of your Modified Version by various -parties---for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - -@item -COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled ``History'' -in the various original documents, forming one section Entitled -``History''; likewise combine any sections Entitled ``Acknowledgements'', -and any sections Entitled ``Dedications''. You must delete all -sections Entitled ``Endorsements.'' - -@item -COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - -@item -AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an ``aggregate'' if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included in an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - -@item -TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled ``Acknowledgements'', -``Dedications'', or ``History'', the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - -@item -TERMINATION - -You may not copy, modify, sublicense, or distribute the Document -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense, or distribute it is void, and -will automatically terminate your rights under this License. - -However, if you cease all violation of this License, then your license -from a particular copyright holder is reinstated (a) provisionally, -unless and until the copyright holder explicitly and finally -terminates your license, and (b) permanently, if the copyright holder -fails to notify you of the violation by some reasonable means prior to -60 days after the cessation. - -Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, receipt of a copy of some or all of the same material does -not give you any rights to use it. - -@item -FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -@uref{http://www.gnu.org/copyleft/}. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License ``or any later version'' applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. If the Document -specifies that a proxy can decide which future versions of this -License can be used, that proxy's public statement of acceptance of a -version permanently authorizes you to choose that version for the -Document. - -@item -RELICENSING - -``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any -World Wide Web server that publishes copyrightable works and also -provides prominent facilities for anybody to edit those works. A -public wiki that anybody can edit is an example of such a server. A -``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the -site means any set of copyrightable works thus published on the MMC -site. - -``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 -license published by Creative Commons Corporation, a not-for-profit -corporation with a principal place of business in San Francisco, -California, as well as future copyleft versions of that license -published by that same organization. - -``Incorporate'' means to publish or republish a Document, in whole or -in part, as part of another Document. - -An MMC is ``eligible for relicensing'' if it is licensed under this -License, and if all works that were first published under this License -somewhere other than this MMC, and subsequently incorporated in whole -or in part into the MMC, (1) had no cover texts or invariant sections, -and (2) were thus incorporated prior to November 1, 2008. - -The operator of an MMC Site may republish an MMC contained in the site -under CC-BY-SA on the same site at any time before August 1, 2009, -provided the MMC is eligible for relicensing. - -@end enumerate - -@page -@heading ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample -@group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. -@end group -@end smallexample - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the ``with@dots{}Texts.'' line with this: - -@smallexample -@group - with the Invariant Sections being @var{list their titles}, with - the Front-Cover Texts being @var{list}, and with the Back-Cover Texts - being @var{list}. -@end group -@end smallexample - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - diff --git a/python/doc/lgpl.texi b/python/doc/lgpl.texi deleted file mode 100644 index ab03d6c..0000000 --- a/python/doc/lgpl.texi +++ /dev/null @@ -1,549 +0,0 @@ -@c The GNU Lesser General Public License. -@center Version 2.1, February 1999 - -@c This file is intended to be included within another document, -@c hence no sectioning command or @node. - -@display -Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts -as the successor of the GNU Library Public License, version 2, hence the -version number 2.1.] -@end display - -@subheading Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software---to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software---typically libraries---of the Free -Software Foundation and other authors who decide to use it. You can use -it too, but we suggest you first think carefully about whether this -license or the ordinary General Public License is the better strategy to -use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of it -in new free programs; and that you are informed that you can do these -things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the @dfn{Lesser} General Public License because it -does @emph{Less} to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -``work based on the library'' and a ``work that uses the library''. The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - -@subheading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -@enumerate 0 -@item -This License Agreement applies to any software library or other program -which contains a notice placed by the copyright holder or other -authorized party saying it may be distributed under the terms of this -Lesser General Public License (also called ``this License''). Each -licensee is addressed as ``you''. - - A ``library'' means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The ``Library'', below, refers to any such software library or work -which has been distributed under these terms. A ``work based on the -Library'' means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term ``modification''.) - - ``Source code'' for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - -@item -You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - -@item -You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -@enumerate a -@item -The modified work must itself be a software library. - -@item -You must cause the files modified to carry prominent notices -stating that you changed the files and the date of any change. - -@item -You must cause the whole of the work to be licensed at no -charge to all third parties under the terms of this License. - -@item -If a facility in the modified Library refers to a function or a -table of data to be supplied by an application program that uses -the facility, other than as an argument passed when the facility -is invoked, then you must make a good faith effort to ensure that, -in the event an application does not supply such function or -table, the facility still operates, and performs whatever part of -its purpose remains meaningful. - -(For example, a function in a library to compute square roots has -a purpose that is entirely well-defined independent of the -application. Therefore, Subsection 2d requires that any -application-supplied function or table used by this function must -be optional: if the application does not supply it, the square -root function must still compute square roots.) -@end enumerate - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -@item -You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - -@item -You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - -@item -A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a ``work that uses the Library''. Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a ``work that uses the Library'' with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a ``work that uses the -library''. The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a ``work that uses the Library'' uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - -@item -As an exception to the Sections above, you may also combine or -link a ``work that uses the Library'' with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - -@enumerate a -@item -Accompany the work with the complete corresponding -machine-readable source code for the Library including whatever -changes were used in the work (which must be distributed under -Sections 1 and 2 above); and, if the work is an executable linked -with the Library, with the complete machine-readable ``work that -uses the Library'', as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified -executable containing the modified Library. (It is understood -that the user who changes the contents of definitions files in the -Library will not necessarily be able to recompile the application -to use the modified definitions.) - -@item -Use a suitable shared library mechanism for linking with the Library. A -suitable mechanism is one that (1) uses at run time a copy of the -library already present on the user's computer system, rather than -copying library functions into the executable, and (2) will operate -properly with a modified version of the library, if the user installs -one, as long as the modified version is interface-compatible with the -version that the work was made with. - -@item -Accompany the work with a written offer, valid for at -least three years, to give the same user the materials -specified in Subsection 6a, above, for a charge no more -than the cost of performing this distribution. - -@item -If distribution of the work is made by offering access to copy -from a designated place, offer equivalent access to copy the above -specified materials from the same place. - -@item -Verify that the user has already received a copy of these -materials or that you have already sent this user a copy. -@end enumerate - - For an executable, the required form of the ``work that uses the -Library'' must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies the -executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - -@item -You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - -@enumerate a -@item -Accompany the combined library with a copy of the same work -based on the Library, uncombined with any other library -facilities. This must be distributed under the terms of the -Sections above. - -@item -Give prominent notice with the combined library of the fact -that part of it is a work based on the Library, and explaining -where to find the accompanying uncombined form of the same work. -@end enumerate - -@item -You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - -@item -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - -@item -Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - -@item -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -@item -If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - -@item -The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -``any later version'', you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - -@item -If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - -@center @b{NO WARRANTY} - -@item -BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -@item -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. -@end enumerate - -@subheading END OF TERMS AND CONDITIONS - -@page -@subheading How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -``copyright'' line and a pointer to where the full notice is found. - -@smallexample -@var{one line to give the library's name and an idea of what it does.} -Copyright (C) @var{year} @var{name of author} - -This library 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 of the License, or (at -your option) any later version. - -This library 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 this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -USA. -@end smallexample - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a ``copyright disclaimer'' for the library, if -necessary. Here is a sample; alter the names: - -@smallexample -Yoyodyne, Inc., hereby disclaims all copyright interest in the library -`Frob' (a library for tweaking knobs) written by James Random Hacker. - -@var{signature of Ty Coon}, 1 April 1990 -Ty Coon, President of Vice -@end smallexample - -That's all there is to it! diff --git a/python/doc/syntax.texi b/python/doc/syntax.texi deleted file mode 100644 index 8bb37b3..0000000 --- a/python/doc/syntax.texi +++ /dev/null @@ -1,43 +0,0 @@ -@c Syntax highlighting for texinfo's HTML output - -@html - - -@end html - -@macro setsyntax{lang} -@html - -@end html -@end macro - -@macro setsyntaxnoauto{} -@html - -@end html -@end macro diff --git a/python/doc/tutorial.texi b/python/doc/tutorial.texi index 3d11468..d4b66dc 100644 --- a/python/doc/tutorial.texi +++ b/python/doc/tutorial.texi @@ -2,7 +2,7 @@ @c %**start of header @setfilename tutorial.info @include version.texi -@include syntax.texi +@include ../../common/texi/syntax.texi @settitle The GNU Taler tutorial for Python Web shop developers @value{VERSION} @c Define a new index for options. @@ -16,7 +16,7 @@ This tutorial is about implementing a merchant frontend to run against a GNU Taler merchant backend (version @value{VERSION}, @value{UPDATED}), -Copyright @copyright{} 2016, 2017 INRIA +Copyright @copyright{} 2016, 2017 Taler Systems SA @quotation Permission is granted to copy, distribute and/or modify this document @@ -57,6 +57,7 @@ Texts. A copy of the license is included in the section entitled @menu * Introduction:: What this tutorial is about * Setting up a simple donation page:: How to set up a donation page +* Back-office-integration:: How to integrate with the back office * Advanced topics:: Detailed solutions to specific issues * Reference:: Merchant integration reference @@ -252,7 +253,7 @@ If the wallet is not present, the error message ``No wallet installed!'' will be shown and the Taler ``X-Taler-Contract-Url'' header and the 402 status code ought to be ignored by the browser. -@section A helper function to generate the order +@section A helper function to generate the order We make distinction between @emph{three} different stages of what it informally called "contract". @@ -369,7 +370,7 @@ def fulfillment(): # make the payment, assuming the user already accepted the # proposal. response = flask.Response(status=402) - + # At this URL, the wallet may request a regeneration of the proposal. response.headers["X-Taler-Contract-Url"] = make_url("/generate-proposal") # This URL will be visited in case the user has opened @@ -471,122 +472,177 @@ should be able to point your browser at @code{http://localhost:5000/} and make a donation. -@node Advanced topics -@chapter Advanced topics -@menu -* Normalized base URLs:: Format URLs are expected to be in Taler -@end menu -@node Normalized base URLs -@section Normalized base URLs -Exchanges and merchants have a base URL for their service. This URL @b{must} -be in a canonical form when it is stored (e.g. in the wallet's database) or -transmitted (e.g. to a bank page). +@node Back-office-integration +@chapter Integration with the back office + +This chapter shows how to implement the back office Web interface. + +We will use the term @emph{transaction} to refer to the business +transaction that a merchant has with a customer (and the related +communication with the Taler exchange for payment), and the term +@emph{wire transfer} to refer to the exchange settling its accounts +with the merchant. + +However, from the frontend's perspective, any transaction is denoted +by the @emph{order id} contained in the proposal that led to the +transaction. + +Given that Taler deals with microtransactions, not every customer +payment processed with Taler will necessarily correspond to a wire +transfer. The Taler exchange may aggregate multiple payments from +transactions into one larger wire transfer. The @var{refund_deadline} +and the @var{pay_deadline} values in the contract specify the +timeframes within which the exchange is permitted to perform such +aggregations, see @ref{The Taler proposal format}. + +In this chapter, we will see how a merchant can obtain the +mapping from transactions to wire transfers and vice versa. +Additionally, we will describe how to obtain a list of all +transactions known to the backend. + +@section Entry page + +Given this charge, the back office's main tasks are: @itemize -@item The URL must be absolute. This implies that the URL has a schema. -@item The path component of the URL must end with a slash. -@item The URL must not contain a fragment or query. +@item +Allow the back office operator to specify a order id, and display the +corresponding wire transfer identifiers. +@item +Allow the back office operator to specify a wire transfer ID, and +display all of the corresponding order ids. +@item +Allow the back office operator to obtain a list of all transactions. @end itemize -When a user enters a URL that is, technically, relative (such as "alice.example.com/exchange"), wallets -*may* transform it into a canonical base URL ("http://alice.example.com/exchange/"). Other components *should not* accept -URLs that are not canonical. +We implement these with a simple HTML form. For simplicity, we have +one single page for gathering input data for both tracking directions: -Rationale: Joining non-canonical URLs with relative URLs (e.g. "exchange.example.com" with "reserve/status") -results in different and slightly unexpected behavior in some URL handling libraries. -Canonical URLs give more predictable results with standard URL joining. +@smallexample +TBD. +@end smallexample -@node Reference -@chapter Reference +The imported script @code{history.js} is responsible for dynamically +get the list of known transactions. See below. -@menu -* Headers for HTTP 402:: Headers for the 402 status code and their effect on the user agent's operation -* JavaScript API:: JavaScript API to communicate with the wallet -* Stylesheet-based presence detection:: Presence detection using CSS style sheets and no JavaScript -@end menu +@section Tracking a transaction -@node Headers for HTTP 402 -@section Headers for HTTP 402 -The HTTP status code @code{402 Payment Required} can be used by the merchant -frontend to trigger operations related to payments in the user agent. The user -agent associates at most one proposal with every URL via the proposal's -@code{fulfillment_url} field. The associated proposal is either missing (in -case it doesn't exist), paid (in case the payment for it was successfully sent -to the merchant) or unpaid. If the associated proposal is unpaid, @code{402 -Payment Required} will cause the user agent to pay for the associated proposal. +The TBD is now responsible for taking +all the URL query parameter and use them on the @code{/track/transaction} +request to the backend, see @url{http://api.taler.net/api-merchant.html#get--track-transaction}. +The parameters are the @emph{order_id} and the @emph{instance} (see @ref{Instances}) +of this merchant. +Note that the backend may then request this information from the +exchange, or retrieve it from its own cache if it has already obtained +it. The backend will also check signatures from the exchange, persist +the information obtained, and complain if the exchange ever changes +its facts in an inconsistent manner. -The following headers for @code{402 Payment Required} are recognized by Taler and further influence the processing: -@table @code -@item X-Taler-Refund-Url -If this header present, the value of this header must be a URL that the user agent can use to request and process refunds. +@smallexample +TBD. +@end smallexample + +If the backend returned an HTTP status code @code{202} (Accepted), +this means that the exchange simply did not yet perform the wire +transfer. This is usually the case before @var{pay_deadline}, as the +exchange is waiting for additional opportunities to aggregate transactions. +In this case, we tell the user when to retry this operation later. + +In the @code{foreach} loop, we construct the list of all the +wire transfers which paid back transaction @emph{order_id}. For +simplicity, the list will report only two values: the wire transfer +identifier and the date when the transfer occurred. Nonetheless, +the data returned by the backend contains more information that +can be shown to the user. + +@section Tracking a wire transfer + +To track a wire transfer, the frontend just needs to forward the request +it got from the Web form, to the backend. +Again, the backend may request missing information from the exchange, +verify signatures, persist the result and complain if there are +inconsistencies. + +In the case that the backend detects inconsistencies, an HTTP status +code of @code{402} is returned. In this case, we report this +situation to the user, who should now report this situation to the +exchange's auditors as the exchange is misbehaving. + +In the usual case where everything went fine, we first output the +amount that was supposed to have been transfered under the given +@code{wtid}, and when it was performed (according to the exchange). +Finally, in the @code{foreach} loop, we construct the list of the +order ids paid by the wire transfer: + +@smallexample +TBD. +@end smallexample -@item X-Taler-Contract-Url -If there is no associated proposal, the user agent will fetch a proposal from -this URL and process it. This typically prompts the user to agree to pay. -@item X-Taler-Offer-Url -If there is no associated proposal and @code{X-Taler-Contract-Url} is not -specified, the browser will navigate to this URL. +@node History +@section Listing all transactions -@item X-Taler-User-Tipping-Url -If this header present, the value of this header must be a URL that the user agent can use to obtain tips (small, non-binding -financial rewards) payed from the merchant to the user's wallet. If this field is present, @code{X-Taler-User-Tipping-Exchange} -and @code{X-Taler-User-Tipping-Amount} must also be present. +In order to track transactions, order ids are needed as input. +To that purpose, the frontend needs to make a HTTP GET request to +@code{/history}, which is offered by the backend. -@item X-Taler-User-Tipping-Exchange -Exchange base URL for the exchange that the merchant helps withdrawing the tip from. +The returned data lists the transactions from the youngest back to +the oldest. -@item X-Taler-User-Tipping-Amount -Amount of tip that the user is receiving, in the standard amount format (CURR:X.Y). +The @code{/history} API is actually more rich, as it offers the way +to skim results based on time or on index, but that goes beyond the +scope of this tutorial. -@end table +Our example frontend implements this feature by orchestrating two +parts: -@node JavaScript API -@section JavaScript API +@itemize +@item A JavaScript function, imported within @code{backoffice.html}, + that issues the HTTP GET to TBD + and modifies the current page by adding a table showing the result. +@item The TBD, which is in charge of serving the request + coming from the JavaScript. Its task is to relay that request to the + backend, and echo the result back. +@end itemize -The following functions are defined in the @code{taler} namespace of the @code{taler-wallet-lib} helper library -available at @url{https://git.taler.net/web-common.git/tree/taler-wallet-lib.js}. +See below both parts: -@table @code -@item onPresent(callback: () => void) -Add a callback to be called when support for Taler payments is detected. +@smallexample +TBD +@end smallexample -@item onAbsent(callback: () => void) -Add a callback to be called when support for Taler payments is disabled. +@smallexample +TBD +@end smallexample -@item pay(@{contract_url: string, offer_url: string@}) -Results in the same action as a @code{402 Payment Required} with @code{contract_url} in -the @code{X-Taler-Contract-Url} header and @code{offer_url} in the @code{X-Taler-Payment-Url} header. -@item refund(refund_url: string) -Results in the same action as a @code{402 Payment Required} with @code{refund_url} in -the @code{X-Taler-Refund-Url} header. -@end table +@node Advanced topics +@chapter Advanced topics -@node Stylesheet-based presence detection -@section Stylesheet-based presence detection +@menu +* Detecting the presence of the Taler wallet:: Detecting the presence of the Taler wallet +* The Taler proposal format:: The Taler proposal format +@c * Inline proposals:: Sending proposals with the HTTP header +* Instances:: Instances +* The fulfillment page:: The fulfillment page +* Normalized base URLs:: Normalized base URLs +@end menu -Stylesheet-based presence detection will be applied on all pages that have the -@code{data-taler-nojs} attribute of the @code{html} element set @code{true}. -The default/fallback stylesheet, that will be taken over by the wallet once -installed, must be included with the id @code{taler-presence-stylesheet}, like -this: +@include ../../common/texi/wallet-detection.texi +@include ../../common/texi/proposals.texi +@c @include inline-proposals.texi -- not yet written for Python! +@include ../../common/texi/instances.texi +@include ../../common/texi/fulfillment-page.texi +@include ../../common/texi/normalized-base-url.texi -The following CSS classes can be used: -@table @code -@item taler-installed-hide -A CSS rule will set the @code{display} property for this class to @code{none} once the Taler wallet is installed and enabled. -If the wallet is not installed, @code{display} will be @code{inherit}. -@item taler-installed-show -A CSS rule will set the @code{display} property for this class to @code{inherit} once the Taler wallet is installed and enabled. -If the wallet is not installed, @code{display} will be @code{none}. -@end table +@c ************ Reference chapter *********** +@include ../../common/texi/api-reference.texi @@ -598,13 +654,13 @@ If the wallet is not installed, @code{display} will be @code{none}. @unnumbered GNU-LGPL @cindex license @cindex LGPL -@include lgpl.texi +@include ../../common/texi/lgpl.texi @node GNU-FDL @unnumbered GNU-FDL @cindex license @cindex GNU Free Documentation License -@include fdl-1.3.texi +@include ../../common/texi/fdl-1.3.texi @node Concept Index @unnumbered Concept Index -- cgit v1.2.3