Spaces:
Sleeping
Sleeping
“shubhamdhamal”
commited on
Commit
·
1a3e34b
1
Parent(s):
7362a57
Fix session config and add debug logging
Browse files
config.py
CHANGED
|
@@ -9,11 +9,13 @@ if not os.environ.get('RENDER') and not os.environ.get('SPACE_ID'):
|
|
| 9 |
# Set Flask app for CLI commands (needed for flask db upgrade)
|
| 10 |
os.environ.setdefault('FLASK_APP', 'run.py')
|
| 11 |
|
| 12 |
-
# Check if running in production (Render or HF Spaces)
|
| 13 |
-
IS_PRODUCTION = os.environ.get('RENDER') or os.environ.get('SPACE_ID')
|
| 14 |
-
|
| 15 |
class Config:
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
|
| 18 |
'sqlite:///' + os.path.join(basedir, 'instance', 'app.db')
|
| 19 |
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
|
@@ -21,25 +23,17 @@ class Config:
|
|
| 21 |
# WTF CSRF Settings
|
| 22 |
WTF_CSRF_ENABLED = True
|
| 23 |
WTF_CSRF_TIME_LIMIT = 3600 # 1 hour token validity
|
| 24 |
-
WTF_CSRF_SSL_STRICT = False #
|
| 25 |
|
| 26 |
-
# Session configuration
|
| 27 |
SESSION_COOKIE_HTTPONLY = True
|
| 28 |
-
SESSION_COOKIE_SAMESITE = 'Lax'
|
| 29 |
PERMANENT_SESSION_LIFETIME = 7200 # 2 hours
|
| 30 |
-
|
| 31 |
-
SESSION_USE_SIGNER = True # Sign session cookies for security
|
| 32 |
-
SESSION_COOKIE_NAME = 'learning_path_session' # Custom session cookie name
|
| 33 |
|
| 34 |
-
#
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
REMEMBER_COOKIE_SECURE = True
|
| 39 |
-
REMEMBER_COOKIE_SAMESITE = 'Lax'
|
| 40 |
-
else:
|
| 41 |
-
# Local development - allow HTTP cookies
|
| 42 |
-
SESSION_COOKIE_SECURE = False
|
| 43 |
-
REMEMBER_COOKIE_SECURE = False
|
| 44 |
|
| 45 |
LOG_TO_STDOUT = os.environ.get('LOG_TO_STDOUT')
|
|
|
|
| 9 |
# Set Flask app for CLI commands (needed for flask db upgrade)
|
| 10 |
os.environ.setdefault('FLASK_APP', 'run.py')
|
| 11 |
|
|
|
|
|
|
|
|
|
|
| 12 |
class Config:
|
| 13 |
+
# Check if running in production (Render or HF Spaces)
|
| 14 |
+
IS_PRODUCTION = bool(os.environ.get('RENDER') or os.environ.get('SPACE_ID'))
|
| 15 |
+
|
| 16 |
+
# SECRET_KEY is CRITICAL for sessions and CSRF
|
| 17 |
+
SECRET_KEY = os.environ.get('SECRET_KEY') or os.environ.get('FLASK_SECRET_KEY') or 'dev-secret-key-change-in-production-2024'
|
| 18 |
+
|
| 19 |
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
|
| 20 |
'sqlite:///' + os.path.join(basedir, 'instance', 'app.db')
|
| 21 |
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
|
|
|
| 23 |
# WTF CSRF Settings
|
| 24 |
WTF_CSRF_ENABLED = True
|
| 25 |
WTF_CSRF_TIME_LIMIT = 3600 # 1 hour token validity
|
| 26 |
+
WTF_CSRF_SSL_STRICT = False # Don't require HTTPS for CSRF
|
| 27 |
|
| 28 |
+
# Session configuration - CRITICAL for CSRF to work
|
| 29 |
SESSION_COOKIE_HTTPONLY = True
|
| 30 |
+
SESSION_COOKIE_SAMESITE = 'Lax'
|
| 31 |
PERMANENT_SESSION_LIFETIME = 7200 # 2 hours
|
| 32 |
+
SESSION_COOKIE_NAME = 'learning_path_session'
|
|
|
|
|
|
|
| 33 |
|
| 34 |
+
# Production settings (HF Spaces uses HTTPS)
|
| 35 |
+
SESSION_COOKIE_SECURE = IS_PRODUCTION # True for HTTPS, False for HTTP
|
| 36 |
+
REMEMBER_COOKIE_SECURE = IS_PRODUCTION
|
| 37 |
+
REMEMBER_COOKIE_SAMESITE = 'Lax'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
|
| 39 |
LOG_TO_STDOUT = os.environ.get('LOG_TO_STDOUT')
|
start.sh
CHANGED
|
@@ -6,11 +6,23 @@ echo "=== Starting AI Learning Path Generator ==="
|
|
| 6 |
# Set Flask app for migrations
|
| 7 |
export FLASK_APP=web_app:create_app
|
| 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
# Initialize database if it doesn't exist
|
| 10 |
echo "Initializing database..."
|
| 11 |
python -c "
|
| 12 |
from web_app import create_app
|
| 13 |
from web_app.models import db
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
app = create_app()
|
| 16 |
with app.app_context():
|
|
|
|
| 6 |
# Set Flask app for migrations
|
| 7 |
export FLASK_APP=web_app:create_app
|
| 8 |
|
| 9 |
+
# Debug: Check if SECRET_KEY is set
|
| 10 |
+
if [ -z "$SECRET_KEY" ]; then
|
| 11 |
+
echo "WARNING: SECRET_KEY is not set! Sessions/CSRF will not work properly."
|
| 12 |
+
else
|
| 13 |
+
echo "SECRET_KEY is configured (length: ${#SECRET_KEY})"
|
| 14 |
+
fi
|
| 15 |
+
|
| 16 |
# Initialize database if it doesn't exist
|
| 17 |
echo "Initializing database..."
|
| 18 |
python -c "
|
| 19 |
from web_app import create_app
|
| 20 |
from web_app.models import db
|
| 21 |
+
from config import Config
|
| 22 |
+
|
| 23 |
+
print(f'SECRET_KEY set: {bool(Config.SECRET_KEY)}')
|
| 24 |
+
print(f'IS_PRODUCTION: {Config.IS_PRODUCTION}')
|
| 25 |
+
print(f'SESSION_COOKIE_SECURE: {Config.SESSION_COOKIE_SECURE}')
|
| 26 |
|
| 27 |
app = create_app()
|
| 28 |
with app.app_context():
|