separate merchant UI from main project
This commit is contained in:
parent
453cc263f7
commit
4a40b3a0b2
8
electrum
8
electrum
@ -92,7 +92,7 @@ from electrum import SimpleConfig, Network
|
|||||||
from electrum.wallet import Wallet, Imported_Wallet
|
from electrum.wallet import Wallet, Imported_Wallet
|
||||||
from electrum.storage import WalletStorage
|
from electrum.storage import WalletStorage
|
||||||
from electrum.util import print_msg, print_stderr, json_encode, json_decode
|
from electrum.util import print_msg, print_stderr, json_encode, json_decode
|
||||||
from electrum.util import set_verbosity, InvalidPassword, check_www_dir
|
from electrum.util import set_verbosity, InvalidPassword
|
||||||
from electrum.commands import get_parser, known_commands, Commands, config_variables
|
from electrum.commands import get_parser, known_commands, Commands, config_variables
|
||||||
from electrum import daemon
|
from electrum import daemon
|
||||||
from electrum import keystore
|
from electrum import keystore
|
||||||
@ -399,7 +399,11 @@ if __name__ == '__main__':
|
|||||||
from electrum import websockets
|
from electrum import websockets
|
||||||
websockets.WebSocketServer(config, d.network).start()
|
websockets.WebSocketServer(config, d.network).start()
|
||||||
if config.get('requests_dir'):
|
if config.get('requests_dir'):
|
||||||
check_www_dir(config.get('requests_dir'))
|
path = os.path.join(config.get('requests_dir'), 'index.html')
|
||||||
|
if not os.path.exists(path):
|
||||||
|
print("Requests directory not configured.")
|
||||||
|
print("You can configure it using https://github.com/spesmilo/electrum-merchant")
|
||||||
|
sys.exit(1)
|
||||||
d.join()
|
d.join()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
|
|||||||
22
lib/util.py
22
lib/util.py
@ -703,25 +703,3 @@ class QueuePipe:
|
|||||||
self.send(request)
|
self.send(request)
|
||||||
|
|
||||||
|
|
||||||
def check_www_dir(rdir):
|
|
||||||
import urllib, shutil, os
|
|
||||||
if not os.path.exists(rdir):
|
|
||||||
os.mkdir(rdir)
|
|
||||||
index = os.path.join(rdir, 'index.html')
|
|
||||||
if not os.path.exists(index):
|
|
||||||
print_error("copying index.html")
|
|
||||||
src = os.path.join(os.path.dirname(__file__), 'www', 'index.html')
|
|
||||||
shutil.copy(src, index)
|
|
||||||
files = [
|
|
||||||
"https://code.jquery.com/jquery-1.9.1.min.js",
|
|
||||||
"https://raw.githubusercontent.com/davidshimjs/qrcodejs/master/qrcode.js",
|
|
||||||
"https://code.jquery.com/ui/1.10.3/jquery-ui.js",
|
|
||||||
"https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"
|
|
||||||
]
|
|
||||||
for URL in files:
|
|
||||||
path = urllib.parse.urlsplit(URL).path
|
|
||||||
filename = os.path.basename(path)
|
|
||||||
path = os.path.join(rdir, filename)
|
|
||||||
if not os.path.exists(path):
|
|
||||||
print_error("downloading ", URL)
|
|
||||||
urllib.request.urlretrieve(URL, path)
|
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'jsonRPCClient.php';
|
|
||||||
$electrum = new jsonRPCClient('http://localhost:7777');
|
|
||||||
|
|
||||||
echo '<b>Wallet balance</b><br />'."\n";
|
|
||||||
try {
|
|
||||||
|
|
||||||
$balance = $electrum->getbalance();
|
|
||||||
echo 'confirmed: <i>'.$balance['confirmed'].'</i><br />'."\n";
|
|
||||||
echo 'unconfirmed: <i>'.$balance['unconfirmed'].'</i><br />'."\n";
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
echo nl2br($e->getMessage()).'<br />'."\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@ -1,111 +0,0 @@
|
|||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
||||||
<title>Payment request</title>
|
|
||||||
<script type="text/javascript" charset="utf-8" src="jquery-1.9.1.min.js"></script>
|
|
||||||
<script type="text/javascript" src="qrcode.js"></script>
|
|
||||||
<script type="text/javascript" src="jquery-ui.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="jquery-ui.css">
|
|
||||||
<script type="text/javascript">
|
|
||||||
function getUrlParameter(sParam)
|
|
||||||
{
|
|
||||||
var sPageURL = window.location.search.substring(1);
|
|
||||||
var sURLVariables = sPageURL.split('&');
|
|
||||||
for (var i = 0; i < sURLVariables.length; i++)
|
|
||||||
{
|
|
||||||
var sParameterName = sURLVariables[i].split('=');
|
|
||||||
if (sParameterName[0] == sParam)
|
|
||||||
{
|
|
||||||
return sParameterName[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var id = getUrlParameter('id');
|
|
||||||
|
|
||||||
if (id) {
|
|
||||||
var uri_path = location.pathname;
|
|
||||||
var jqxhr = $.getJSON(uri_path.replace("index.html", "req/"+ id[0] + "/"+ id[1] + "/"+ id + "/"+ id + ".json"), function() {
|
|
||||||
console.log("getJSON:success");
|
|
||||||
})
|
|
||||||
.done( function(data) {
|
|
||||||
new QRCode(document.getElementById("qrcode"), data.URI);
|
|
||||||
$("<p />").text(data.memo).appendTo($("p#reason"));
|
|
||||||
$("<p />").text(data.amount/100000000 + "BTC").appendTo($("p#amount"));
|
|
||||||
$("a").attr("href", data.URI);
|
|
||||||
$("<p />").text("Powered by Electrum").appendTo($("p#powered"));
|
|
||||||
var websocket_server = data.websocket_server;
|
|
||||||
var websocket_port = data.websocket_port;
|
|
||||||
$(function () {
|
|
||||||
var current;
|
|
||||||
var max = 100;
|
|
||||||
var initial = data.time;
|
|
||||||
var duration = data.exp;
|
|
||||||
if(duration){
|
|
||||||
var current = 100 * (Math.floor(Date.now()/1000) - initial)/duration;
|
|
||||||
$("#progressbar").progressbar({
|
|
||||||
value: current,
|
|
||||||
max: max
|
|
||||||
});
|
|
||||||
function update() {
|
|
||||||
current = 100 * (Math.floor(Date.now()/1000) - initial)/duration;
|
|
||||||
$("#progressbar").progressbar({
|
|
||||||
value: current
|
|
||||||
});
|
|
||||||
if (current >= max) {
|
|
||||||
$("#container").html("This invoice has expired");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var interval = setInterval(update, 1000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var wss_address = "wss://" + websocket_server + ":" + websocket_port +"/";
|
|
||||||
console.log("Opening WSS: " + wss_address)
|
|
||||||
var ws = new WebSocket(wss_address);
|
|
||||||
|
|
||||||
ws.onopen = function() {
|
|
||||||
ws.send('id:' + id);
|
|
||||||
};
|
|
||||||
ws.onmessage = function (evt) {
|
|
||||||
var received_msg = evt.data;
|
|
||||||
if(received_msg == 'paid'){
|
|
||||||
$("#container").html("This invoice has been paid.");
|
|
||||||
}
|
|
||||||
else alert("Message is received:"+ received_msg);
|
|
||||||
};
|
|
||||||
|
|
||||||
})
|
|
||||||
.fail(function() {
|
|
||||||
console.log("error fail");
|
|
||||||
$("<p />").text("error").appendTo($("p#error"));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// See http://stackoverflow.com/questions/29186154/chrome-clicking-mailto-links-closes-websocket-connection
|
|
||||||
$(document).on('click', 'a[href^="bitcoin:"]', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
var btcWindow = window.open($(e.currentTarget).attr('href'));
|
|
||||||
btcWindow.close();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="container" style="width:20em; text-align:center; margin:auto; font-family:arial, serif;">
|
|
||||||
<p id="error"></p>
|
|
||||||
<p id="reason"></p>
|
|
||||||
<p id="amount"></p>
|
|
||||||
<div style="background-color:#7777aa; border-radius: 5px; padding:10px;">
|
|
||||||
<a style="color:#ffffff; text-decoration:none;" id="paylink" target="_blank">Pay with Bitcoin</a>
|
|
||||||
</div>
|
|
||||||
<br/>
|
|
||||||
<div id="qrcode" align="center"></div>
|
|
||||||
<p id="powered" style="font-size:80%;"></p>
|
|
||||||
<div id="progressbar"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Loading…
Reference in New Issue
Block a user