aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README3
-rw-r--r--website/fake_wire_transfer.php91
-rw-r--r--website/index.html115
-rw-r--r--website/style.css328
4 files changed, 537 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..d883173
--- /dev/null
+++ b/README
@@ -0,0 +1,3 @@
+This directory is the root of the "demo" bank website. The
+page being served (under the directory 'website') simulates
+what a real bank does when transferring funds to some mint via SEPA.
diff --git a/website/fake_wire_transfer.php b/website/fake_wire_transfer.php
new file mode 100644
index 0000000..c370f21
--- /dev/null
+++ b/website/fake_wire_transfer.php
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Fake Wire Transfer</title>
+ <script>
+ /*
+ @licstart The following is the entire license notice for the
+ JavaScript code in this page.
+
+ Copyright (C) 2014,2015 GNUnet e.V.
+
+ The JavaScript code in this page is free software: you can
+ redistribute it and/or modify it under the terms of the GNU
+ Lesser General Public License (GNU LGPL) as published by the Free Software
+ Foundation, either version 2.1 of the License, or (at your option)
+ any later version. The code is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU LGPL for more details.
+
+ As additional permission under GNU LGPL version 2.1 section 7, you
+ may distribute non-source (e.g., minimized or compacted) forms of
+ that code without the copy of the GNU LGPL normally required by
+ section 4, provided you include this license notice and a URL
+ through which recipients can access the Corresponding Source.
+
+ @licend The above is the entire license notice
+ for the JavaScript code in this page.
+ */
+ </script>
+</head>
+<body>
+<!--
+ This page's main aim is to forward the fake wire transfer
+ request to the demonstrator and to inform the customer
+ about the result. In a real-world deployment, this
+ page would not be required as the customer would do a
+ wire transfer with his bank instead.
+ -->
+<?php
+
+// Evaluate form
+$reserve_pk = $_POST['reserve_pk'];
+$kudos_amount = $_POST['kudos_amount'];
+$mint = $_POST['mint_rcv'];
+// check if the webform has given a well formed amount
+$ret = preg_match ('/[0-9]+(\.[0-9][0-9]?)? [A-Z]+/', $kudos_amount, $matches);
+if ($matches[0] != $_POST['kudos_amount'])
+{
+ http_response_code(400); // BAD REQUEST
+ echo "Malformed amount given";
+ return;
+}
+$amount_chunks = preg_split('/[ \.]/', $_POST['kudos_amount']);
+$amount_fraction = 0;
+if (count($amount_chunks) > 2)
+ $amount_fraction = (double) ("0." . $amount_chunks[1]);
+$amount_fraction = $amount_fraction * 1000000;
+// pack the JSON
+$json = json_encode (array ('reserve_pub' => $reserve_pk,
+ 'execution_date' => "/Date(" . time() . ")/",
+ 'wire' => array ('type' => 'test'),
+ 'amount' => array ('value' => intval($amount_chunks[0]),
+ 'fraction' => $amount_fraction,
+ 'currency' => $amount_chunks[count($amount_chunks) - 1])));
+
+// craft the HTTP request
+$req = new http\Client\Request ("POST",
+ "http://" . $mint . "/admin/add/incoming",
+ array ("Content-Type" => "application/json"));
+$req->getBody()->append ($json);
+
+// execute HTTP request
+$client = new http\Client;
+$client->enqueue($req)->send ();
+$resp = $client->getResponse ();
+
+// evaluate response
+$status_code = $resp->getResponseCode ();
+http_response_code ($status_code);
+
+if ($status_code != 200)
+{
+ echo "Error $status_code when faking the wire transfer. Please report to taler@gnu.org";
+}
+else
+{
+ echo "Pretend wire transfer successful. Exit through the <a href=\"http://shop.demo.taler.net\">gift shop</a> and enjoy shopping!";
+}
+?>
+</body>
+</html>
diff --git a/website/index.html b/website/index.html
new file mode 100644
index 0000000..7746e1e
--- /dev/null
+++ b/website/index.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <title>Taler's "demo" bank</title>
+ <link rel="stylesheet" type="text/css" href="style.css">
+ <script>
+ /*
+ @licstart The following is the entire license notice for the
+ JavaScript code in this page.
+
+ Copyright (C) 2015 GNUnet e.V.
+
+ The JavaScript code in this page is free software: you can
+ redistribute it and/or modify it under the terms of the GNU
+ Lesser General Public License (GNU LGPL) as published by the Free Software
+ Foundation, either version 2.1 of the License, or (at your option)
+ any later version. The code is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU LGPL for more details.
+
+ As additional permission under GNU LGPL version 2.1 section 7, you
+ may distribute non-source (e.g., minimized or compacted) forms of
+ that code without the copy of the GNU LGPL normally required by
+ section 4, provided you include this license notice and a URL
+ through which recipients can access the Corresponding Source.
+
+ @licend The above is the entire license notice
+ for the JavaScript code in this page.
+ */
+ </script>
+</head>
+<body id="css-zen-garden" onload="signal_me()">
+ <div class="explanation" id="zen-explanation" role="article">
+ <h1>Welcome to the KUDOS bank!</h1>
+ <p>Through this page, you can wire funds to our demonstrator mint
+ in order to create your reserves from where withdraw your coins.
+ Once the reserve is created, the withdrawing of coins will be
+ entirely handled by the wallet, with no intervention required
+ to the user.
+ </p>
+ <p>
+ Enter the deisired amount, and click 'Select mint'. Your wallet
+ will make you choose a mint and will automatically submit all the
+ needed data into the bank's system. At the end of the withdrawal,
+ the wallet will show you the 'All coins withdrawn' nice message.
+ </p>
+
+ <p>Still missing a wallet? <a href="http://demo.taler.net/extension">Install one!</a>
+ </p>
+ </div>
+ <form id="reserve-form" name="tform" action="/fake_wire_transfer.php" method="POST">
+ <input type="text" id="reserve-pk-input" name="reserve_pk" hidden></input>
+ Amount to withdraw:
+ <select id="reserve-amn-id" name="kudos_amount">
+ <option value="1 KUDOS">1 KUDOS</option>
+ <option value="2 KUDOS">2 KUDOS</option>
+ <option value="3.01 KUDOS">3.01 KUDOS</option>
+ <option value="5 KUDOS">5 KUDOS</option>
+ <option value="10 KUDOS">10 KUDOS</option>
+ <option value="10.50 KUDOS">10.50 KUDOS</option>
+ <option value="1000.3 KUDOS">1000.3 KUDOS</option>
+ </select>
+ <input type="text" name="mint_rcv" id="kudos-mint" hidden></input>
+ <input id="select-mint"
+ type="button"
+ value="Select mint"
+ onclick="wire_funds()"
+ disabled></input>
+ </form>
+ </div>
+ <script type="text/javascript">
+
+ document.body.addEventListener("taler-wallet-present",
+ has_taler_wallet_cb,
+ false);
+
+ document.body.addEventListener("taler-unload",
+ no_taler_wallet_cb,
+ false);
+
+ document.body.addEventListener("taler-load",
+ signal_me,
+ false);
+
+ function wire_funds(){
+ var wallet_param = {
+ form_id : 'reserve-form',
+ input_amount : 'reserve-amn-id',
+ input_pub : 'reserve-pk-input',
+ mint_rcv : 'kudos-mint'
+ //'base_url' : window.location.host not anymore: must be given by the mint
+ };
+ var trigger = new CustomEvent("taler-create-reserve", {detail: wallet_param});
+ document.body.dispatchEvent(trigger);
+ };
+
+ /* The mint signals itself to the wallet */
+ function signal_me(){
+ var eve = new Event('taler-checkout-probe');
+ document.body.dispatchEvent(eve);
+ };
+
+ function has_taler_wallet_cb(){
+ var button = document.getElementById("select-mint");
+ button.removeAttribute("disabled");
+ }
+
+ function no_taler_wallet_cb(){
+ var button = document.getElementById("select-mint");
+ button.setAttribute("disabled", "true");
+ }
+
+ </script>
+</body>
+</html>
diff --git a/website/style.css b/website/style.css
new file mode 100644
index 0000000..a476a63
--- /dev/null
+++ b/website/style.css
@@ -0,0 +1,328 @@
+/* css Zen Garden submission 020 - 'Friendly Beaches' by Sophie G - www.sophie-g.net */
+/* css released under Creative Commons ShareAlike License v1.0 - http://creativecommons.org/licenses/sa/1.0/ */
+/* All associated graphics copyright 2003, Sophie G */
+
+
+/* IMPORTANT */
+/* This design is not a template. You may not reproduce it elsewhere without the designer's written permission. */
+/* The CSS itself may freely be used for anything you wish, but the associated graphics belong to the designer. */
+/* What you may use - .css files. What you may not use - .jpg, .gif, and .png files. */
+
+
+
+body {
+ background-color: #FFFFFF;
+ margin: 0px;
+ padding: 10px;
+ font-family: Ubuntu, Tahoma, Sans;
+ font-size: 90%;
+}
+
+p {
+ line-height: 180%;
+}
+.page-wrapper {
+ background-color: #EDEEF0;
+ border: 1px solid #DAD5D9;
+ padding: 0px;
+ margin: 0px;
+}
+abbr {
+ border-bottom: 1px #6BA0D2 dashed;
+}
+header,h1 {
+ font-family: Impact, Georgia, serif;
+ background-color: #FFFFFF;
+}
+header h1 {
+ height: 190px;
+ margin: 0px;
+ background-color: black;
+ background-image: url(Gala.jpg);
+ background-repeat: no-repeat;
+}
+header h1, header h2 {
+ text-indent: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+}
+header h2 {
+ background-color: #EDEEF0;
+ margin: 0px;
+ height: 24px;
+ padding: 0px 14px 2px 14px;
+ background-image: url(headerh2.gif);
+ background-repeat: no-repeat;
+}
+header h2 abbr {
+ color: #FFF;
+ border-bottom: 1px #FFF dashed;
+}
+.summary p:first-child {
+ position: absolute;
+ right: 21px;
+ top: 21px;
+ width: 12em;
+ height: 165px;
+ padding: 3px 0 0 0;
+ margin: 0px;
+ border: 1px solid #0C2953;
+ text-align: center;
+ font-size: 90%;
+ font-family: Impact, Georgia, serif;
+ line-height: 110%;
+ color: #FFF;
+ background-image: url(summary.jpg);
+ background-repeat: no-repeat;
+ background-position: 50% 100%;
+ background-color: #0C2953;
+}
+.preamble {
+ padding: 0px 15em 0px 3em;
+}
+.preamble h3 {
+ margin: 15px 0px 0px 0px;
+ padding: 6px 20px 2px 6px;
+ text-align: left;
+ font-size: 180%;
+ font-variant: small-caps;
+ color: #6BA0D2;
+ background-image: url(bordDroitPreambleh3.gif);
+ background-repeat: no-repeat;
+ background-position: 100% 0px;
+ background-color: #F6F7F7;
+}
+.preamble h3::before {
+ content: " ";
+ display: inline-block;
+ padding: 35px 0px 30px 48px;
+ background-image: url(preambleShell.jpg);
+ background-repeat: no-repeat;
+ background-position: 0px 50%;
+ vertical-align: middle;
+}
+.preamble p {
+ text-align: justify;
+}
+.preamble p:nth-child(2), .preamble p:nth-child(3) {
+ margin: 0px;
+ padding: 10px 20px 2px 6px;
+ background-image: url(bordDroitPreamble.gif);
+ background-repeat: repeat-y;
+ background-position: 100% 0px;
+ background-color: #F6F7F7;
+}
+.preamble p:nth-child(4) {
+ margin: 0px;
+ padding: 0px;
+ background-image: url(bordBasPreamble.gif);
+ background-repeat: no-repeat;
+ background-position: 100% 100%;
+ background-color: #F6F7F7;
+ padding: 10px 20px 20px 6px;
+}
+.preamble p:nth-child(4)::after {
+ content: " ";
+ display: block;
+ margin: 0px;
+ padding: 0 20px 0 6px;
+ background-image: url(bordBasPreambleGauche.gif);
+ background-repeat: no-repeat;
+ background-position: 0% 100%;
+}
+.supporting {
+ margin: 0px;
+ padding: 10px 16em 0px 1em;
+ font-size: 90%;
+}
+.explanation, .participation, .benefits, .requirements {
+ border: 2px solid #FFF;
+ padding: 0px;
+}
+.explanation {
+ margin: 0px 0px 10px 0px;
+}
+.participation {
+ margin: 0px 0px 10px 0px;
+ float: left;
+ width: 30%;
+}
+.benefits {
+ margin: 0px 0px 10px 32%;
+}
+.requirements {
+ margin: 0px 0px 10px 32%;
+}
+.supporting h3 {
+ margin: 0px;
+ padding: 5px 30px 1px 2px;
+ text-align: left;
+ font-size: 120%;
+ font-variant: small-caps;
+ color: #6BA0D2;
+ border-bottom: 1px solid #6BA0D2;
+ background-color: #F6F7F7;
+ background-repeat: no-repeat;
+ background-position: 100% 50%;
+}
+.explanation h3 {
+ background-image: url(explanationShell.jpg);
+}
+.supporting form {
+ padding: 30px;
+ display: inline-block;
+ clear: both;
+ width: 120em;
+}
+.supporting input {
+ margin: 8px;
+}
+.participation h3 {
+ background-image: url(participationShell.jpg);
+}
+.benefits h3 {
+ background-image: url(benefitsShell.jpg);
+}
+.requirements h3 {
+ background-image: url(requirementsRock.jpg);
+}
+.supporting p {
+ text-align: justify;
+ margin: 10px 0px 0px 0px;
+ padding: 1px 3px 2px 3px;
+}
+.supporting a:link {
+ color: #0083FF;
+ font-weight: bold;
+}
+.supporting a:visited {
+ color: #204160;
+ font-weight: bold;
+}
+.supporting a:hover, .supporting a:active {
+ color: #8C0000;
+ font-weight: bold;
+ text-decoration: none;
+}
+.sidebar, .summary p:last-child {
+ font-size: 90%;
+ font-family: Impact, Georgia, serif;
+ position: absolute;
+ right: 21px;
+ width: 12em;
+ border: 1px solid #0C2953;
+ padding: 0px;
+ margin: 0px;
+ background-color: #A4ACB3;
+}
+.summary p:last-child {
+ height: 50px;
+ text-align: center;
+ top: 217px;
+ font-size: 90%;
+ display: block;
+ padding: 3px 0;
+ color: #FFF;
+}
+.sidebar {
+ top: 266px;
+}
+.sidebar h3 {
+ background-color: #0C2953;
+ color: #FFF;
+ margin: 0px;
+ padding: 30px 1px 1px 1px;
+ background-repeat: no-repeat;
+}
+.sidebar h3.select {
+ background-image: url(selecth3.jpg);
+ background-position: 50% 0%;
+}
+.sidebar h3.favorites {
+ border-top: 1px solid #0C2953;
+ background-image: url(favoritesh3.jpg);
+ background-position: 40% 100%;
+}
+.sidebar h3.archives {
+ border-top: 1px solid #0C2953;
+ background-image: url(archivesh3.jpg);
+ background-position: 40% 100%;
+}
+.sidebar h3.resources {
+ border-top: 1px solid #0C2953;
+ background-image: url(resourcesh3.jpg);
+ background-position: 50% 30%;
+}
+.sidebar ul {
+ list-style-type: none;
+ font-size: 90%;
+ color: #FFF;
+ margin: 0px;
+ padding: 0px;
+ background-color: #A4ACB3;
+}
+.sidebar li {
+ padding: 3px 2px 3px 2px;
+ margin-bottom: 4px;
+}
+.sidebar li:hover {
+ padding: 2px 1px 2px 1px;
+ border: 1px dotted #0C2953;
+ background-color: #6BA0D2;
+}
+.summary p:last-child a:link {
+ color: #FFF;
+ font-weight: bold;
+}
+.summary p:last-child a:visited {
+ color: #204160;
+}
+.summary p:last-child a:hover, .summary p:last-child a:active {
+ color: #FFD800;
+ font-weight: bold;
+ text-decoration: none;
+}
+.sidebar a:link, .sidebar a:visited {
+ border-left: 6px solid #FFF;
+ padding-left: 2px;
+ font-weight: bold;
+ color: #FFF;
+}
+.sidebar a:visited {
+ color: #204160;
+}
+.sidebar a:hover, .sidebar a:active {
+ border-left: 6px solid #FFD800;
+ padding-left: 2px;
+ color: #FFD800;
+ text-decoration: none;
+ font-weight: bold;
+}
+.sidebar a.designer-name:link, .sidebar a.designer-name:visited {
+ border-left: none;
+ padding-left: 0px;
+ font-weight: normal;
+ color: #FFF;
+}
+.sidebar a.designer-name:hover, .sidebar a.designer-name:active {
+ border-left: none;
+ padding-left: 0px;
+ color: #FFD800;
+ text-decoration: none;
+}
+.sidebar abbr {
+ border-bottom: 1px #FFF dashed;
+}
+footer {
+ clear: both;
+ text-align: right;
+ margin: 0px -16em 0px 0px;
+ padding: 25px 0px 0px 0px;
+ background-repeat: no-repeat;
+ background-image: url(signSoph.gif);
+ background-position: 0% 95%;
+}
+footer a {
+ font-size: 70%;
+ font-family: Impact, Georgia, serif;
+}