# app.py from flask import Flask, session, request, redirect, url_for from utils.config import Config from blueprints.auth import auth_bp from blueprints.auth.routes import log_email, get_oauth, session_url_setter # Import get_oauth function from blueprints.main import main_bp # from blueprints.roas import roas_bp # ROAS-only blueprint from utils.sme_ds_utilities import DatabaseUtils import jwt from urllib.parse import urlsplit, urlunsplit, parse_qs, urlencode app = Flask(__name__) app.config.from_object(Config) oauth = get_oauth() oauth.init_app(app) smeds = DatabaseUtils(Config.DB_SOURCE) print("THIS IS OUR DB SOURCE", Config.DB_SOURCE) app.register_blueprint(auth_bp, url_prefix='/auth') app.register_blueprint(main_bp, url_prefix='/') # app.register_blueprint(roas_bp, url_prefix="/mkt_effect") app_first_request = True @app.before_request def before_request(): if request.path.startswith('/static') or request.path == '/favicon.ico': return if request.endpoint in ['auth.login', 'auth.callback', 'auth.email_register']: return if 'user_id' in session and 'email' in session: return # getting intended destination (store RELATIVE path+query, not absolute) if request.path not in ('/auth/login', '/auth/callback'): intended_path = request.full_path if request.query_string else request.path session_url_setter(intended_path) auth_header = request.headers.get('Authorization') if auth_header and auth_header.startswith('Bearer '): auth_token = auth_header.split(" ")[1] try: decoded = jwt.decode(auth_token, Config.JWT_SECRET, algorithms=["HS256"]) email = decoded.get('data').lower() user_query = f"SELECT user_id, is_active FROM tadas_sandbox.tadas_users WHERE email_address = '{email}'" user_df = smeds.query_db(user_query, 'main') if not user_df.empty and user_df.iloc[0]['is_active']: session['user_id'] = user_df.iloc[0]['user_id'] session['email'] = email else: print("User not active or not found.") return redirect(url_for('auth.login')) except jwt.ExpiredSignatureError: print("JWT expired.") return redirect(url_for('auth.login')) except jwt.InvalidTokenError: print("Invalid JWT.") return redirect(url_for('auth.login')) else: try: login_url = url_for('auth.login') except Exception as e: print(f"Error building URL: {e}") return redirect(url_for('auth.login')) @app.before_first_request def initialize_session(): global app_first_request if app_first_request: print("Clearing session data on app launch...") session.clear() session['selected_filters'] = [] session['visit_logged'] = False app_first_request = False if __name__ == '__main__': app.run(debug=True, port=5003)