bitvend/bitvend/__init__.py

81 lines
2.2 KiB
Python

import flask
import os
from bitvend.processor import PaymentProcessor
from bitvend.mdb import BitvendCashlessMDBDevice
from spaceauth import SpaceAuth
dev = BitvendCashlessMDBDevice()
proc = PaymentProcessor(dev)
spaceauth = SpaceAuth()
from bitvend.utils import to_local_currency, from_local_currency, format_btc, sat_to_btc
from bitvend.models import db, Transaction, User
import bitvend.views
import bitvend.admin
@spaceauth.user_loader
def bitvend_user_loader(username, profile=None):
u = User.find(username)
if not u:
u = User(uid=username)
db.session.add(u)
db.session.commit()
return u
def create_app():
app = flask.Flask(__name__)
app.config.from_object("bitvend.default_settings")
print(
"Loading extra settings from {}...".format(
os.environ.get("BITVEND_SETTINGS", "")
)
)
app.config.from_pyfile(os.environ.get("BITVEND_SETTINGS", ""), silent=True)
# Use proper proxy headers, this fixes invalid scheme in
# url_for(_external=True)
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
db.init_app(app)
spaceauth.init_app(app)
dev.init_app(app)
proc.init_app(app)
app.register_blueprint(bitvend.views.bp)
app.register_blueprint(bitvend.admin.bp, url_prefix="/admin")
@app.context_processor
def ctx_utils():
return {
"from_local_currency": from_local_currency,
"to_local_currency": to_local_currency,
"format_btc": format_btc,
"sat_to_btc": sat_to_btc,
"qrcode": lambda data: flask.url_for("bitvend.qrcode_gen", data=data),
"current_transaction": Transaction.query.filter(
Transaction.finished == False
).first(),
"mdb_online": dev.online,
"proc_online": proc.online,
"static": lambda fn, **kwargs: flask.url_for(
"static", filename=fn, **kwargs
),
}
def url_for_other_page(page):
args = flask.request.view_args.copy()
args["page"] = page
return flask.url_for(flask.request.endpoint, **args)
app.jinja_env.globals["url_for_other_page"] = url_for_other_page
return app