Add Electrum Server Tor Service
This commit is contained in:
parent
932c7dc7e6
commit
01a8d0a266
|
@ -211,3 +211,7 @@ Log notice stdout
|
||||||
ControlPort 9051
|
ControlPort 9051
|
||||||
CookieAuthentication 1
|
CookieAuthentication 1
|
||||||
CookieAuthFileGroupReadable 1
|
CookieAuthFileGroupReadable 1
|
||||||
|
|
||||||
|
# Hidden Service for Electrum Server
|
||||||
|
HiddenServiceDir /var/lib/tor/electrs_hidden_service/
|
||||||
|
HiddenServicePort 50001 127.0.0.1:50001
|
|
@ -3,6 +3,7 @@ from config import *
|
||||||
from flask import Flask, render_template, Markup, send_from_directory, redirect, request, url_for
|
from flask import Flask, render_template, Markup, send_from_directory, redirect, request, url_for
|
||||||
from bitcoind import mynode_bitcoind
|
from bitcoind import mynode_bitcoind
|
||||||
from bitcoin_cli import mynode_bitcoin_cli
|
from bitcoin_cli import mynode_bitcoin_cli
|
||||||
|
from tor import mynode_tor
|
||||||
from vpn import mynode_vpn
|
from vpn import mynode_vpn
|
||||||
if CONFIG["electrs_enabled"]:
|
if CONFIG["electrs_enabled"]:
|
||||||
from electrum_server import *
|
from electrum_server import *
|
||||||
|
@ -35,6 +36,7 @@ app.config['TEMPLATES_AUTO_RELOAD'] = True
|
||||||
app.register_blueprint(mynode_bitcoind)
|
app.register_blueprint(mynode_bitcoind)
|
||||||
app.register_blueprint(mynode_lnd)
|
app.register_blueprint(mynode_lnd)
|
||||||
app.register_blueprint(mynode_bitcoin_cli)
|
app.register_blueprint(mynode_bitcoin_cli)
|
||||||
|
app.register_blueprint(mynode_tor)
|
||||||
if CONFIG["electrs_enabled"]:
|
if CONFIG["electrs_enabled"]:
|
||||||
app.register_blueprint(mynode_electrum_server)
|
app.register_blueprint(mynode_electrum_server)
|
||||||
app.register_blueprint(mynode_vpn)
|
app.register_blueprint(mynode_vpn)
|
||||||
|
|
|
@ -93,6 +93,19 @@ a:active {
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app_tile_row_divider_left {
|
||||||
|
width: 50%;
|
||||||
|
float: left;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app_tile_row_divider_right {
|
||||||
|
width: 50%;
|
||||||
|
float: right;
|
||||||
|
margin: 0px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
.app_tile_row {
|
.app_tile_row {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -100,6 +113,15 @@ a:active {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
.app_tile_row_section {
|
||||||
|
margin: auto;
|
||||||
|
display: flex;
|
||||||
|
text-align: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
.app_tile {
|
.app_tile {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
BIN
rootfs/standard/var/www/mynode/static/images/tor.png
Normal file
BIN
rootfs/standard/var/www/mynode/static/images/tor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 17 KiB |
|
@ -62,6 +62,19 @@
|
||||||
<a class="ui-button ui-widget ui-corner-all mynode_button" href="#" id="toggle-btcrpcexplorer">{% if btcrpcexplorer_enabled %}Disable{% else %}Enable{% endif %}</a>
|
<a class="ui-button ui-widget ui-corner-all mynode_button" href="#" id="toggle-btcrpcexplorer">{% if btcrpcexplorer_enabled %}Disable{% else %}Enable{% endif %}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="app_tile">
|
||||||
|
<div class="app_status_icon {% if product_key_skipped %}gray{% else %}green{% endif %}"></div>
|
||||||
|
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/tor.png")}}"/></div>
|
||||||
|
<div class="app_title">Tor Services</div>
|
||||||
|
<div class="app_status"></div>
|
||||||
|
<div class="app_contents">
|
||||||
|
{% if product_key_skipped %}
|
||||||
|
Premium Feature
|
||||||
|
{% else %}
|
||||||
|
<a class="ui-button ui-widget ui-corner-all mynode_button" href="/tor">Tor Services</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="app_tile">
|
<div class="app_tile">
|
||||||
<div class="app_status_icon"></div>
|
<div class="app_status_icon"></div>
|
||||||
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/cli.png")}}"/></div>
|
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/cli.png")}}"/></div>
|
||||||
|
@ -70,35 +83,3 @@
|
||||||
<div class="app_contents"><a class="ui-button ui-widget ui-corner-all mynode_button" href="/bitcoin-cli">CLI</a></div>
|
<div class="app_contents"><a class="ui-button ui-widget ui-corner-all mynode_button" href="/bitcoin-cli">CLI</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="main_header">Services</div>
|
|
||||||
<div class="app_tile_row">
|
|
||||||
<div class="app_tile">
|
|
||||||
<div class="app_status_icon {{ electrs_status_color }}"></div>
|
|
||||||
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/electrum_logo.png")}}"/></div>
|
|
||||||
<div class="app_title">Electrum Server</div>
|
|
||||||
<div class="app_status">{{ electrs_status }}</div>
|
|
||||||
<div class="app_contents">
|
|
||||||
{% if electrs_enabled %}
|
|
||||||
<a class="ui-button ui-widget ui-corner-all mynode_button" href="/electrum-server">Info</a>
|
|
||||||
{% endif %}
|
|
||||||
<a class="ui-button ui-widget ui-corner-all mynode_button" href="#" id="toggle-electrs">{% if electrs_enabled %}Disable{% else %}Enable{% endif %}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="app_tile">
|
|
||||||
<div class="app_status_icon {{ vpn_status_color }}"></div>
|
|
||||||
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/vpn.png")}}"/></div>
|
|
||||||
<div class="app_title">VPN</div>
|
|
||||||
<div class="app_status">{{ vpn_status }}</div>
|
|
||||||
<div class="app_contents">
|
|
||||||
{% if product_key_skipped %}
|
|
||||||
Premium Feature
|
|
||||||
{% else %}
|
|
||||||
{% if vpn_enabled %}
|
|
||||||
<a class="ui-button ui-widget ui-corner-all mynode_button" href="/vpn-info">Info</a>
|
|
||||||
{% endif %}
|
|
||||||
<a class="ui-button ui-widget ui-corner-all mynode_button" href="#" id="toggle-vpn">{% if vpn_enabled %}Disable{% else %}Enable{% endif %}</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -98,8 +98,10 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div class="main_header">Core Services</div>
|
|
||||||
<div class="app_tile_row">
|
<div class="app_tile_row">
|
||||||
|
<div>
|
||||||
|
<div class="main_header">Core Services</div>
|
||||||
|
<div class="app_tile_row_section">
|
||||||
<div class="app_tile">
|
<div class="app_tile">
|
||||||
<div class="app_status_icon {{ bitcoind_status_color }}"></div>
|
<div class="app_status_icon {{ bitcoind_status_color }}"></div>
|
||||||
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/bitcoin.png")}}"/></div>
|
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/bitcoin.png")}}"/></div>
|
||||||
|
@ -119,6 +121,41 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="main_header">Services</div>
|
||||||
|
<div class="app_tile_row_section">
|
||||||
|
<div class="app_tile">
|
||||||
|
<div class="app_status_icon {{ electrs_status_color }}"></div>
|
||||||
|
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/electrum_logo.png")}}"/></div>
|
||||||
|
<div class="app_title">Electrum Server</div>
|
||||||
|
<div class="app_status">{{ electrs_status }}</div>
|
||||||
|
<div class="app_contents">
|
||||||
|
{% if electrs_enabled %}
|
||||||
|
<a class="ui-button ui-widget ui-corner-all mynode_button" href="/electrum-server">Info</a>
|
||||||
|
{% endif %}
|
||||||
|
<a class="ui-button ui-widget ui-corner-all mynode_button" href="#" id="toggle-electrs">{% if electrs_enabled %}Disable{% else %}Enable{% endif %}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="app_tile">
|
||||||
|
<div class="app_status_icon {{ vpn_status_color }}"></div>
|
||||||
|
<div class="app_logo"><img class="app_logo_icon" src="{{ url_for('static', filename="images/vpn.png")}}"/></div>
|
||||||
|
<div class="app_title">VPN</div>
|
||||||
|
<div class="app_status">{{ vpn_status }}</div>
|
||||||
|
<div class="app_contents">
|
||||||
|
{% if product_key_skipped %}
|
||||||
|
Premium Feature
|
||||||
|
{% else %}
|
||||||
|
{% if vpn_enabled %}
|
||||||
|
<a class="ui-button ui-widget ui-corner-all mynode_button" href="/vpn-info">Info</a>
|
||||||
|
{% endif %}
|
||||||
|
<a class="ui-button ui-widget ui-corner-all mynode_button" href="#" id="toggle-vpn">{% if vpn_enabled %}Disable{% else %}Enable{% endif %}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% if product_key_error %}
|
{% if product_key_error %}
|
||||||
<div class="main_page_error_block">
|
<div class="main_page_error_block">
|
||||||
|
|
61
rootfs/standard/var/www/mynode/templates/tor.html
Normal file
61
rootfs/standard/var/www/mynode/templates/tor.html
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<!DOCTYPE html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>{{ title }}</title>
|
||||||
|
<link rel="shortcut icon" href="{{ url_for('static', filename='images/favicon.ico') }}">
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename="css/mynode.css")}}">
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename="css/mynode_bitcoind.css")}}">
|
||||||
|
<link href="{{ url_for('static', filename="jquery_ui/jquery-ui.css")}}" rel="stylesheet">
|
||||||
|
<meta http-equiv="Content-Language" content="en">
|
||||||
|
<meta name="google" content="notranslate">
|
||||||
|
<script src="{{ url_for('static', filename="js/jquery-3.3.1.min.js")}}"></script>
|
||||||
|
<script src="{{ url_for('static', filename="jquery_ui/jquery-ui.js")}}"></script>
|
||||||
|
<script src="{{ url_for('static', filename="js/mynode.js")}}"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="logo_header"><a href="/"><img class="logo_image" src="{{ url_for('static', filename="images/logo.png")}}"/></a></div>
|
||||||
|
<div class="mynode_back_div">
|
||||||
|
<a class="ui-button ui-widget ui-corner-all mynode_back" href="/"><span class="ui-icon ui-icon-home"></span>home </a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin: auto; text-align: center;">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main_header">Tor Services</div>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<div class="app_tile_row">
|
||||||
|
<div class="info_tile">
|
||||||
|
<div class="info_tile_header">Bitcoin</div>
|
||||||
|
<div class="info_tile_contents">Tor Enabled</div>
|
||||||
|
</div>
|
||||||
|
<div class="info_tile">
|
||||||
|
<div class="info_tile_header">Lightning</div>
|
||||||
|
<div class="info_tile_contents">Tor Enabled</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="app_tile_row">
|
||||||
|
<div class="info_tile">
|
||||||
|
<div class="info_tile_header">Electrum Server</div>
|
||||||
|
<div class="info_tile_contents">Tor Enabled</div>
|
||||||
|
</div>
|
||||||
|
<div class="info_tile">
|
||||||
|
<div class="info_tile_header">Onion Hostname</div>
|
||||||
|
<div class="info_tile_contents">{{electrs_onion_hostname}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info_tile">
|
||||||
|
<div class="info_tile_header">Electrum Command</div>
|
||||||
|
<div class="info_tile_contents">{{electrs_onion_command}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info_tile">
|
||||||
|
<div class="info_tile_header">Help</div>
|
||||||
|
<div class="info_tile_contents"><a href="http://docs.electrum.org/en/latest/tor.html" target="_blank">Link</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include 'includes/footer.html' %}
|
||||||
|
</body>
|
||||||
|
</html>
|
32
rootfs/standard/var/www/mynode/tor.py
Normal file
32
rootfs/standard/var/www/mynode/tor.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from flask import Blueprint, render_template, session, abort, Markup, request, redirect
|
||||||
|
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
|
||||||
|
from pprint import pprint, pformat
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
mynode_tor = Blueprint('mynode_tor',__name__)
|
||||||
|
|
||||||
|
### Page functions
|
||||||
|
@mynode_tor.route("/tor")
|
||||||
|
def page_tor():
|
||||||
|
electrs_onion_hostname = "..."
|
||||||
|
electrs_onion_command = "..."
|
||||||
|
|
||||||
|
# Get Onion URLs
|
||||||
|
if os.path.isfile("/var/lib/tor/electrs_hidden_service/hostname"):
|
||||||
|
with open("/var/lib/tor/electrs_hidden_service/hostname") as f:
|
||||||
|
electrs_onion_hostname = f.read().strip()
|
||||||
|
electrs_onion_command = "./electrum -1 -s {}:50001:t -p socks5:localhost:9050".format(electrs_onion_hostname)
|
||||||
|
else:
|
||||||
|
electrs_onion_hostname = "disabled"
|
||||||
|
electrs_onion_command = "disabled"
|
||||||
|
|
||||||
|
# Load page
|
||||||
|
templateData = {
|
||||||
|
"title": "myNode Tor Services",
|
||||||
|
"electrs_onion_hostname": electrs_onion_hostname,
|
||||||
|
"electrs_onion_command": electrs_onion_command
|
||||||
|
}
|
||||||
|
return render_template('tor.html', **templateData)
|
Loading…
Reference in New Issue
Block a user