bitvend/bitvend/__init__.py

71 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