merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 48de11406b70731ccaf7192d1710720d023d8bbf
parent ab7198d130ea352824f7c3d6f0fa4a061df88dee
Author: Marcello Stanisci <marcello.stanisci@inria.fr>
Date:   Wed, 29 Mar 2017 00:25:15 +0200

stubs for #4781

Diffstat:
Asrc/mitm/README | 14++++++++++++++
Asrc/mitm/mitm.py | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/src/mitm/README b/src/mitm/README @@ -0,0 +1,14 @@ + +=== INTRODUCTION === + +This directory contain a Web server that listens for +requests addressed to the exchange, relays them to the +exchange, and returns a modified response to the caller. + +The modifications are made to test error management in the +merchant, and are driven by a HTTP header that instructs the +proxy about the modifications to be made. + +=== INVOCATION === + +FIXME diff --git a/src/mitm/mitm.py b/src/mitm/mitm.py @@ -0,0 +1,69 @@ +#This file is part of TALER +#Copyright (C) 2014, 2015, 2016, 2017 GNUnet e.V. and INRIA +# +#TALER is free software; you can redistribute it and/or modify it under the +#terms of the GNU Lesser General Public License as published by the Free Software +#Foundation; either version 2.1, or (at your option) any later version. +# +#TALER is distributed in the hope that it will be useful, but WITHOUT ANY +#WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +#A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +# +#You should have received a copy of the GNU Lesser General Public License along with +#TALER; see the file COPYING.LGPL. If not, see <http://www.gnu.org/licenses/> + +# @author Marcello Stanisci +# @brief Error generator for responses coming from the exchange + +from flask import (request, + Flask, + jsonify) +import requests +from urllib.parse import (urljoin, + urlencode, + urlparse, + urlunparse) +from pytaler import amount +import base64 +import os +import logging +import json +from random import randint +from datetime import datetime + +# FIXME make this as a standalone executable, and accept +# the exchange url as a cli option. + +app = Flask(__name__) +app.secret_key = base64.b64encode(os.urandom(64)).decode('utf-8') +logger = logging.getLogger(__name__) +exchange_url = os.environ.get("TALER_EXCHANGE_URL") +assert(None != exchange_url) + +def track_transaction(resp): + return resp + +def track_transfer(resp): + return resp + +@app.route('/', defaults={'path': ''}) +@app.route('/<path:path>', methods=["GET", "POST"]) +def all(path): + body = request.get_json() + url = list(urlparse(request.url)) + xurl = urlparse(exchange_url) + url[0] = xurl[0] + url[1] = xurl[1] + url = urlunparse(url) + print("Querying " + url) + r = requests.post(urljoin(url, path), json=body) + resp = dict() + if "application/json" == r.headers["Content-Type"]: + resp = r.json() + dispatcher = { + "track_transaction": track_transaction, + "track_transfer": track_transfer + } + func = dispatcher.get(request.headers.get("X-Taler-Mitm"), + lambda x: x) + return jsonify(func(resp)), r.status_code