Skip to content
Snippets Groups Projects
Verified Commit 07ba53f7 authored by Jan Pavlíček's avatar Jan Pavlíček
Browse files

feat: sqlalchemy for flask-sessions

parent a41db7e4
No related branches found
No related tags found
1 merge request!100feat: sqlalchemy for flask-sessions
Pipeline #509343 passed
......@@ -136,9 +136,11 @@ host: # REQUIRED
open_api:
filename: "openapi" # REQUIRED filename of loaded file (previous verion of api) to compare changes
session_database: # REQUIRED for logout system
session_type: mongodb # possible values sqlalchemy, mongodb
connection_string: connection_string
database_name: database_name
collection_name: collection_name
collection_name: collection_name # for sqlalchemy represents table_name
database_name: database_name # required only for mongodb
# --------------------------------------------------------------------------------------------------
# Bellow are parts of ProxyIDP_GUI that can be turned on/of
......
......@@ -7,6 +7,7 @@ from flask_babel import Babel
from flask_pyoidc import OIDCAuthentication
from flask_pyoidc.provider_configuration import ClientMetadata, ProviderConfiguration
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
from idpyoidc.client.configure import Configuration, RPHConfiguration
from idpyoidc.client.rp_handler import RPHandler
from idpyoidc.configure import create_from_config_file, Base
......@@ -99,14 +100,30 @@ def get_flask_app(cfg, openapi_version=None, return_with_api=False):
if "session_database" in cfg:
app.config["SESSION_PERMANENT"] = True
app.config["SESSION_TYPE"] = "mongodb"
app.config["SESSION_MONGODB"] = MongoClient(
cfg["session_database"]["connection_string"]
)
app.config["SESSION_MONGODB_DB"] = cfg["session_database"]["database_name"]
app.config["SESSION_MONGODB_COLLECT"] = cfg["session_database"][
"collection_name"
]
if cfg["session_database"]["session_type"] == "mongodb":
app.config["SESSION_TYPE"] = "mongodb"
app.config["SESSION_MONGODB"] = MongoClient(
cfg["session_database"]["connection_string"]
)
app.config["SESSION_MONGODB_DB"] = cfg["session_database"]["database_name"]
app.config["SESSION_MONGODB_COLLECT"] = cfg["session_database"][
"collection_name"
]
elif cfg["session_database"]["session_type"] == "sqlalchemy":
app.config["SESSION_TYPE"] = "sqlalchemy"
app.config["SQLALCHEMY_DATABASE_URI"] = cfg["session_database"][
"connection_string"
]
app.config["SESSION_SQLALCHEMY_TABLE"] = cfg["session_database"][
"collection_name"
]
session_db = SQLAlchemy(app)
app.config["SESSION_SQLALCHEMY"] = session_db
else:
raise ValueError(
"session_database.session_type must be mongodb or sqlalchemy"
)
Session(app)
app, api = api_setup(app, openapi_version)
......
......@@ -89,7 +89,8 @@ def construct_gui_blueprint(cfg, auth: OIDCAuthentication):
MFA_CFG = GUI_CFG["mfa_provider"]
WITHOUT_MFA_CFG = GUI_CFG["without_mfa_provider"]
consent_db_manager = ConsentManager(GUI_CFG)
if GUI_CFG.get("consent", None):
consent_db_manager = ConsentManager(GUI_CFG)
user_manager = UserManager(GUI_CFG)
jwt_service = SingletonJWTServiceProvider.get_provider().get_service()
......
......@@ -56,6 +56,7 @@ def client():
return_value=OIDCAuthenticationMock(),
), patch("perun.proxygui.logout_manager.LogoutManager.__init__", return_value=None):
cfg = ConfigStore.get_config()
cfg.pop("session_database")
app = get_flask_app(cfg)
app.config["TESTING"] = True
app.config["SESSION_TYPE"] = "filesystem"
......
......@@ -40,6 +40,7 @@ def app():
return_value={"RPS": {}},
):
cfg = ConfigStore.get_config()
cfg.pop("session_database")
app = get_flask_app(cfg)
app.config["TESTING"] = True
......
......@@ -39,6 +39,7 @@ def client():
return_value=MOCK_SERVICES_CONFIG,
):
cfg = ConfigStore.get_config()
cfg.pop("session_database")
app = get_flask_app(cfg)
app.config["TESTING"] = True
......
......@@ -25,13 +25,13 @@ setup(
"perun.connector==3.8.1",
"python-smail==0.9.0",
"SQLAlchemy==2.0.29",
"pymongo==3.13.0", # downgrade pymongo for Flask (internal) Sessions to work
"pymongo~=4.6",
"validators==0.28.1",
"idpyoidc==2.1.0",
"python-dateutil==2.9.0",
"Jinja2==3.1.3",
"requests==2.31.0",
"Flask-Session==0.5.0",
"Flask-Session[mongodb]~=0.8",
"pysaml2==7.4.2",
"cryptojwt==1.8.3",
"user-agents==2.2.0",
......@@ -40,8 +40,6 @@ setup(
"deepdiff==6.7.1",
],
extras_require={
"postgresql": [
"psycopg2-binary==2.9.9",
],
"postgresql": ["psycopg2-binary==2.9.9", "Flask-session[sqlalchemy]~=0.8"],
},
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment