fix cookie/session issues

This commit is contained in:
lza_menace 2020-09-27 05:38:31 -07:00
parent a41aa23282
commit 3674712998
3 changed files with 44 additions and 59 deletions

View File

@ -1,4 +1,5 @@
from wowstash.factory import create_app from wowstash.factory import create_app
from wowstash import config
app = create_app() app = create_app()

View File

@ -18,11 +18,13 @@ SECRET_KEY = 'secret session key here' # encrypts the session token
# Session # Session
PERMANENT_SESSION_LIFETIME = 1800 # 60 minute session expiry PERMANENT_SESSION_LIFETIME = 1800 # 60 minute session expiry
SESSION_TYPE = 'redis'
SESSION_COOKIE_NAME = 'wowstash' SESSION_COOKIE_NAME = 'wowstash'
SESSION_COOKIE_DOMAIN = '127.0.0.1'
SESSION_COOKIE_SECURE = False SESSION_COOKIE_SECURE = False
SESSION_USE_SIGNER = True SESSION_USE_SIGNER = True
SESSION_PERMANENT = True SESSION_PERMANENT = True
# Redis
REDIS_HOST = 'localhost' REDIS_HOST = 'localhost'
REDIS_PORT = 6379 REDIS_PORT = 6379

View File

@ -9,12 +9,10 @@ from datetime import datetime
from wowstash import config from wowstash import config
app = None db = SQLAlchemy()
db = None bcrypt = Bcrypt()
bcrypt = None
def _setup_db(app: Flask): def _setup_db(app: Flask):
global db
uri = 'postgresql+psycopg2://{user}:{pw}@{host}:{port}/{db}'.format( uri = 'postgresql+psycopg2://{user}:{pw}@{host}:{port}/{db}'.format(
user=config.DB_USER, user=config.DB_USER,
pw=config.DB_PASS, pw=config.DB_PASS,
@ -28,70 +26,54 @@ def _setup_db(app: Flask):
import wowstash.models import wowstash.models
db.create_all() db.create_all()
def _setup_session(app: Flask):
app.config['SESSION_REDIS'] = Redis(
host=app.config['REDIS_HOST'],
port=app.config['REDIS_PORT']
)
Session(app)
def _setup_bcrypt(app: Flask):
global bcrypt
bcrypt = Bcrypt(app)
def create_app(): def create_app():
global app
global db
global bcrypt
global login_manager
app = Flask(__name__) app = Flask(__name__)
app.config.from_envvar('FLASK_SECRETS') app.config.from_envvar('FLASK_SECRETS')
app.secret_key = app.config['SECRET_KEY']
# Setup backends # Setup backends
_setup_db(app) _setup_db(app)
_setup_session(app) bcrypt = Bcrypt(app)
_setup_bcrypt(app) login_manager = LoginManager(app)
CSRFProtect(app)
login_manager = LoginManager() with app.app_context():
login_manager.init_app(app)
login_manager.login_view = 'auth.login'
login_manager.logout_view = 'auth.logout'
@login_manager.user_loader # Login manager
def load_user(user_id): login_manager.login_view = 'auth.login'
from wowstash.models import User login_manager.logout_view = 'auth.logout'
user = User.query.get(user_id)
return user
# template filters @login_manager.user_loader
@app.template_filter('datestamp') def load_user(user_id):
def datestamp(s): from wowstash.models import User
d = datetime.fromtimestamp(s) user = User.query.get(user_id)
return d.strftime('%Y-%m-%d %H:%M:%S') return user
@app.template_filter('from_atomic') # Template filters
def from_atomic(a): @app.template_filter('datestamp')
from wowstash.library.jsonrpc import from_atomic def datestamp(s):
atomic = from_atomic(a) d = datetime.fromtimestamp(s)
if atomic == 0: return d.strftime('%Y-%m-%d %H:%M:%S')
return 0
else:
return float(atomic)
@app.cli.command('clean_containers') @app.template_filter('from_atomic')
def clean_containers(): def from_atomic(a):
from wowstash.library.docker import docker from wowstash.library.jsonrpc import from_atomic
docker.cleanup() atomic = from_atomic(a)
if atomic == 0:
return 0
else:
return float(atomic)
# Routes # CLI
from wowstash.blueprints.auth import auth_bp @app.cli.command('clean_containers')
from wowstash.blueprints.wallet import wallet_bp def clean_containers():
from wowstash.blueprints.meta import meta_bp from wowstash.library.docker import docker
app.register_blueprint(meta_bp) docker.cleanup()
app.register_blueprint(auth_bp)
app.register_blueprint(wallet_bp)
app.app_context().push() # Routes/blueprints
return app from wowstash.blueprints.auth import auth_bp
from wowstash.blueprints.wallet import wallet_bp
from wowstash.blueprints.meta import meta_bp
app.register_blueprint(meta_bp)
app.register_blueprint(auth_bp)
app.register_blueprint(wallet_bp)
return app