mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2024-11-20 10:39:59 +01:00
f01028eac7
also remove all flaskiness from static file serving. and reference all vendored scripts on the base tempĺate for simplicity.
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
from quart import g, abort, redirect, request, render_template, send_from_directory, url_for
|
|
from http import HTTPStatus
|
|
from os import path
|
|
|
|
from lnbits.core import core_app
|
|
from lnbits.decorators import check_user_exists, validate_uuids
|
|
from lnbits.settings import LNBITS_ALLOWED_USERS, SERVICE_FEE
|
|
|
|
from ..crud import (
|
|
create_account,
|
|
get_user,
|
|
update_user_extension,
|
|
create_wallet,
|
|
delete_wallet,
|
|
)
|
|
|
|
|
|
@core_app.route("/favicon.ico")
|
|
async def favicon():
|
|
return await send_from_directory(path.join(core_app.root_path, "static"), "favicon.ico")
|
|
|
|
|
|
@core_app.route("/")
|
|
async def home():
|
|
return await render_template("core/index.html", lnurl=request.args.get("lightning", None))
|
|
|
|
|
|
@core_app.route("/extensions")
|
|
@validate_uuids(["usr"], required=True)
|
|
@check_user_exists()
|
|
async def extensions():
|
|
extension_to_enable = request.args.get("enable", type=str)
|
|
extension_to_disable = request.args.get("disable", type=str)
|
|
|
|
if extension_to_enable and extension_to_disable:
|
|
abort(HTTPStatus.BAD_REQUEST, "You can either `enable` or `disable` an extension.")
|
|
|
|
if extension_to_enable:
|
|
update_user_extension(user_id=g.user.id, extension=extension_to_enable, active=1)
|
|
elif extension_to_disable:
|
|
update_user_extension(user_id=g.user.id, extension=extension_to_disable, active=0)
|
|
|
|
return await render_template("core/extensions.html", user=get_user(g.user.id))
|
|
|
|
|
|
@core_app.route("/wallet")
|
|
@validate_uuids(["usr", "wal"])
|
|
async def wallet():
|
|
user_id = request.args.get("usr", type=str)
|
|
wallet_id = request.args.get("wal", type=str)
|
|
wallet_name = request.args.get("nme", type=str)
|
|
service_fee = int(SERVICE_FEE) if int(SERVICE_FEE) == SERVICE_FEE else SERVICE_FEE
|
|
|
|
# just wallet_name: create a new user, then create a new wallet for user with wallet_name
|
|
# just user_id: return the first user wallet or create one if none found (with default wallet_name)
|
|
# user_id and wallet_name: create a new wallet for user with wallet_name
|
|
# user_id and wallet_id: return that wallet if user is the owner
|
|
# nothing: create everything
|
|
|
|
if not user_id:
|
|
user = get_user(create_account().id)
|
|
else:
|
|
user = get_user(user_id) or abort(HTTPStatus.NOT_FOUND, "User does not exist.")
|
|
|
|
if LNBITS_ALLOWED_USERS and user_id not in LNBITS_ALLOWED_USERS:
|
|
abort(HTTPStatus.UNAUTHORIZED, "User not authorized.")
|
|
|
|
if not wallet_id:
|
|
if user.wallets and not wallet_name:
|
|
wallet = user.wallets[0]
|
|
else:
|
|
wallet = create_wallet(user_id=user.id, wallet_name=wallet_name)
|
|
|
|
return redirect(url_for("core.wallet", usr=user.id, wal=wallet.id))
|
|
|
|
if wallet_id not in user.wallet_ids:
|
|
abort(HTTPStatus.FORBIDDEN, "Not your wallet.")
|
|
|
|
return await render_template(
|
|
"core/wallet.html", user=user, wallet=user.get_wallet(wallet_id), service_fee=service_fee
|
|
)
|
|
|
|
|
|
@core_app.route("/deletewallet")
|
|
@validate_uuids(["usr", "wal"], required=True)
|
|
@check_user_exists()
|
|
async def deletewallet():
|
|
wallet_id = request.args.get("wal", type=str)
|
|
user_wallet_ids = g.user.wallet_ids
|
|
|
|
if wallet_id not in user_wallet_ids:
|
|
abort(HTTPStatus.FORBIDDEN, "Not your wallet.")
|
|
else:
|
|
delete_wallet(user_id=g.user.id, wallet_id=wallet_id)
|
|
user_wallet_ids.remove(wallet_id)
|
|
|
|
if user_wallet_ids:
|
|
return redirect(url_for("core.wallet", usr=g.user.id, wal=user_wallet_ids[0]))
|
|
|
|
return redirect(url_for("core.home"))
|