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