Example #1
0
def claim_payment(token):
    payment = Payment.from_token(db.session, token)
    if not payment:
        abort(404)
    dbtx = CreatedTransaction.from_txid(db.session, payment.txid)
    if request.method == "POST":
        dbtx, err_msg = process_claim(payment, dbtx)
        if err_msg:
            flash(err_msg, "danger")
    recipient = None
    if dbtx:
        recipient = json.loads(dbtx.json_data)["recipient"]
    return render_template("claim_payment.html", payment=payment, recipient=recipient)
Example #2
0
def claim_payment(token):
    payment = Payment.from_token(db.session, token)
    if not payment:
        return bad_request('payment not found', 404)
    now = datetime.datetime.now()
    if now > payment.proposal.date_expiry and payment.status != payment.STATE_SENT_FUNDS:
        return bad_request('expired', 404)

    def render(recipient):
        url_parts = urlparse(request.url)
        url = url_parts._replace(scheme=DEEP_LINK_SCHEME,
                                 query='scheme={}'.format(
                                     url_parts.scheme)).geturl()
        qrcode_svg = utils.qrcode_svg_create(url)
        return render_template("claim_payment.html",
                               payment=payment,
                               recipient=recipient,
                               qrcode_svg=qrcode_svg,
                               url=url)

    def render_waves(dbtx):
        recipient = None
        if dbtx:
            recipient = dbtx.tx_with_sigs()["recipient"]
        return render(recipient)

    if SERVER_MODE == SERVER_MODE_WAVES:
        dbtx = WavesTx.from_txid(db.session, payment.txid)

    if request.method == "POST":
        content_type = request.content_type
        using_app = content_type.startswith('application/json')
        logger.info("claim_payment: content type - %s, using_app - %s",
                    content_type, using_app)
        recipient = ""
        asset_id = ""
        if using_app:
            content = request.get_json(force=True)
            if content is None:
                return bad_request("failed to decode JSON object")
            if SERVER_MODE == SERVER_MODE_WAVES:
                params, err_response = get_json_params(
                    content, ["recipient", "asset_id"])
                if err_response:
                    return err_response
                recipient, asset_id = params
            else:  # paydb
                params, err_response = get_json_params(content, ["recipient"])
                if err_response:
                    return err_response
                recipient, = params
        else:  # using html form
            try:
                recipient = request.form["recipient"]
            except:  # pylint: disable=bare-except
                flash("'recipient' parameter not present", "danger")
                return render_waves(dbtx)
            try:
                asset_id = request.form["asset_id"]
            except:  # pylint: disable=bare-except
                pass
        if SERVER_MODE == SERVER_MODE_WAVES:
            dbtx, err_msg = process_claim_waves(payment, dbtx, recipient,
                                                asset_id)
        else:  # paydb
            err_msg = process_claim_paydb(payment, recipient)
        if err_msg:
            logger.error("claim_payment: %s", err_msg)
            if using_app:
                return bad_request(err_msg)
            flash(err_msg, "danger")
    if SERVER_MODE == SERVER_MODE_WAVES:
        return render_waves(dbtx)
    return render(None)