refactor container start process, setup wallet secrets

mm-logging
lza_menace 4 years ago
parent d018d375bc
commit bb6997e7a4

@ -39,6 +39,10 @@ def dashboard():
username=current_user.id,
password=current_user.wallet_password
)
if not docker.container_exists(current_user.wallet_container):
current_user.clear_wallet_data()
return redirect(url_for('wallet.loading'))
if not wallet.connected:
return redirect(url_for('wallet.loading'))
@ -51,6 +55,9 @@ def dashboard():
qr_uri = f'wownero:{address}?tx_description={current_user.email}'
address_qr = qrcode_make(qr_uri).save(_address_qr)
qrcode = b64encode(_address_qr.getvalue()).decode()
seed = wallet.seed()
spend_key = wallet.spend_key()
view_key = wallet.view_key()
return render_template(
'wallet/dashboard.html',
transfers=all_transfers,
@ -58,7 +65,10 @@ def dashboard():
address=address,
qrcode=qrcode,
send_form=send_form,
user=current_user
user=current_user,
seed=seed,
spend_key=spend_key,
view_key=view_key,
)
@wallet_bp.route('/wallet/connect')

@ -1,5 +1,5 @@
from docker import from_env, APIClient
from docker.errors import NotFound
from docker.errors import NotFound, NullResource, APIError
from socket import socket
from wowstash import config
from wowstash.models import User
@ -42,6 +42,7 @@ class Docker(object):
def start_wallet(self, user_id):
u = User.query.get(user_id)
container_name = f'start_wallet_{u.id}'
command = f"""wownero-wallet-rpc \
--non-interactive \
--rpc-bind-port {self.listen_port} \
@ -54,24 +55,29 @@ class Docker(object):
--daemon-login {config.DAEMON_USER}:{config.DAEMON_PASS} \
--log-file /wallet/{u.id}-rpc.log
"""
container = self.client.containers.run(
self.wownero_image,
command=command,
auto_remove=True,
name=f'start_wallet_{u.id}',
remove=True,
detach=True,
ports={
f'{self.listen_port}/tcp': ('127.0.0.1', None)
},
volumes={
f'{self.wallet_dir}/{u.id}': {
'bind': '/wallet',
'mode': 'rw'
try:
container = self.client.containers.run(
self.wownero_image,
command=command,
auto_remove=True,
name=container_name,
remove=True,
detach=True,
ports={
f'{self.listen_port}/tcp': ('127.0.0.1', None)
},
volumes={
f'{self.wallet_dir}/{u.id}': {
'bind': '/wallet',
'mode': 'rw'
}
}
}
)
return container.short_id
)
return container.short_id
except APIError as e:
if str(e).startswith('409'):
container = self.client.containers.get(container_name)
return container.short_id
def get_port(self, container_id):
client = APIClient()
@ -85,6 +91,8 @@ class Docker(object):
return True
except NotFound:
return False
except NullResource:
return False
def stop_container(self, container_id):
if self.container_exists(container_id):

@ -49,6 +49,15 @@ class Wallet(JSONRPC):
def height(self):
return self.make_rpc('get_height', {})
def spend_key(self):
return self.make_rpc('query_key', {'key_type': 'spend_key'})['key']
def view_key(self):
return self.make_rpc('query_key', {'key_type': 'view_key'})['key']
def seed(self):
return self.make_rpc('query_key', {'key_type': 'mnemonic'})['key']
def new_address(self, account_index=0, label=None):
data = {'account_index': account_index, 'label': label}
_address = self.make_rpc('create_address', data)

@ -20,10 +20,13 @@
<p class="inline">{{ balances[1] | from_atomic }} WOW ({{ balances[0] | from_atomic }} locked)</p>
<span class="dashboard-buttons">
<div class="col-sm-6 dashboard-button">
<a class="btn btn-lg btn-link btn-outline btn-xl js-scroll-trigger" href="#transfers">List</a>
<a class="btn btn-lg btn-link btn-outline btn-xl js-scroll-trigger" href="#transfers">See Txes</a>
</div>
<div class="col-sm-6 dashboard-button">
<a class="btn btn-lg btn-link btn-outline btn-xl js-scroll-trigger" href="#send">Send</a>
<a class="btn btn-lg btn-link btn-outline btn-xl js-scroll-trigger" href="#send">Send Tx</a>
</div>
<div class="col-sm-6 dashboard-button">
<a class="btn btn-lg btn-link btn-outline btn-xl js-scroll-trigger" href="#secrets">See Secrets</a>
</div>
</span>
</div>
@ -96,6 +99,24 @@
</div>
</section>
<section class="section1" id="secrets">
<div class="container">
<div class="section-heading text-center">
<h2>Secrets</h2>
<p>You need to save the secrets below; write them down on a physical medium and keep it in a safe location. These can be used to restore your funds to another device in the future.</p>
<hr><br>
<h3>Mnemonic Seed</h3>
<p class="small">{{ seed }}</p>
<br>
<h3>Spend Key</h3>
<p class="small">{{ spend_key }}</p>
<br>
<h3>View Key</h3>
<p class="small">{{ view_key }}</p>
</div>
</div>
</section>
{% include 'footer.html' %}
{% include 'scripts.html' %}