81 lines
2.2 KiB
Python
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
|