mirror of
https://git.wownero.com/lza_menace/wowstash.git
synced 2024-08-15 00:33:15 +00:00
add wallet cleanup functionality
This commit is contained in:
parent
46189e716d
commit
9c51cabdfa
3 changed files with 19 additions and 3 deletions
|
@ -84,6 +84,7 @@ def connect():
|
||||||
current_user.wallet_connected = docker.container_exists(wallet)
|
current_user.wallet_connected = docker.container_exists(wallet)
|
||||||
current_user.wallet_port = port
|
current_user.wallet_port = port
|
||||||
current_user.wallet_container = wallet
|
current_user.wallet_container = wallet
|
||||||
|
current_user.wallet_start = datetime.utcnow()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return 'ok'
|
return 'ok'
|
||||||
|
|
|
@ -3,6 +3,8 @@ from docker.errors import NotFound, NullResource, APIError
|
||||||
from socket import socket
|
from socket import socket
|
||||||
from os.path import expanduser
|
from os.path import expanduser
|
||||||
from secrets import token_urlsafe
|
from secrets import token_urlsafe
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from time import sleep
|
||||||
from wowstash import config
|
from wowstash import config
|
||||||
from wowstash.models import User
|
from wowstash.models import User
|
||||||
from wowstash.factory import db
|
from wowstash.factory import db
|
||||||
|
@ -140,9 +142,20 @@ class Docker(object):
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
users = User.query.all()
|
users = User.query.all()
|
||||||
for u in users:
|
for u in users:
|
||||||
if u.wallet_container:
|
# Delete inactive wallet sessions
|
||||||
if not self.container_exists(u.wallet_container):
|
if u.wallet_start:
|
||||||
u.clear_wallet_data()
|
session_lifetime = getattr(config, 'PERMANENT_SESSION_LIFETIME', 3600)
|
||||||
|
expiration_time = u.wallet_start + timedelta(seconds=session_lifetime)
|
||||||
|
now = datetime.utcnow()
|
||||||
|
time_diff = expiration_time - now
|
||||||
|
if time_diff.total_seconds() <= 0:
|
||||||
|
print(f'[+] Found expired container for {u}. killing it')
|
||||||
|
self.stop_container(u.wallet_container)
|
||||||
|
sleep(2)
|
||||||
|
# Remove wallet db data if not running but it's in db
|
||||||
|
if u.wallet_container and not self.container_exists(u.wallet_container):
|
||||||
|
print(f'[+] Found stale data for {u}')
|
||||||
|
u.clear_wallet_data()
|
||||||
|
|
||||||
|
|
||||||
docker = Docker()
|
docker = Docker()
|
||||||
|
|
|
@ -19,6 +19,7 @@ class User(db.Model):
|
||||||
wallet_connected = db.Column(db.Boolean, default=False)
|
wallet_connected = db.Column(db.Boolean, default=False)
|
||||||
wallet_port = db.Column(db.Integer, nullable=True)
|
wallet_port = db.Column(db.Integer, nullable=True)
|
||||||
wallet_container = db.Column(db.String(30), nullable=True)
|
wallet_container = db.Column(db.String(30), nullable=True)
|
||||||
|
wallet_start = db.Column(db.DateTime, nullable=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_authenticated(self):
|
def is_authenticated(self):
|
||||||
|
@ -43,6 +44,7 @@ class User(db.Model):
|
||||||
self.wallet_connected = False
|
self.wallet_connected = False
|
||||||
self.wallet_port = None
|
self.wallet_port = None
|
||||||
self.wallet_container = None
|
self.wallet_container = None
|
||||||
|
self.wallet_start = None
|
||||||
if reset_password:
|
if reset_password:
|
||||||
self.wallet_password = None
|
self.wallet_password = None
|
||||||
if reset_wallet:
|
if reset_wallet:
|
||||||
|
|
Loading…
Reference in a new issue