|
11 | 11 | from utils.config_utils import get_settings |
12 | 12 | from utils.cookie_utils import set_conditional_cookie |
13 | 13 | from utils.credential_service import save_credentials |
| 14 | +from utils.billing_utils import is_premium_eligible |
14 | 15 | from utils.redirect_utils import Redirects |
15 | 16 | from routes.email_routes import fetch_emails_to_db |
16 | 17 | import database |
@@ -46,8 +47,13 @@ async def login( |
46 | 47 | ) |
47 | 48 | try: |
48 | 49 | if not code: |
49 | | - # Check if we have a refresh token in session |
50 | | - has_refresh_token = get_refresh_token_status(request.session.get("creds")) |
| 50 | + # Check if we have a refresh token (DB first, then session fallback) |
| 51 | + session_user_id = request.session.get("user_id") |
| 52 | + has_refresh_token = get_refresh_token_status( |
| 53 | + session_creds=request.session.get("creds"), |
| 54 | + db_session=db_session, |
| 55 | + user_id=session_user_id, |
| 56 | + ) |
51 | 57 | authorization_url, state = get_google_authorization_url( |
52 | 58 | flow, has_refresh_token |
53 | 59 | ) |
@@ -87,11 +93,13 @@ async def login( |
87 | 93 | request.session["access_token"] = creds.token |
88 | 94 | request.session["creds"] = get_latest_refresh_token(old_creds=request.session.get("creds"), new_creds=creds) |
89 | 95 |
|
90 | | - # Persist encrypted credentials to database for background task support |
91 | | - save_credentials(db_session, user.user_id, creds, credential_type="primary") |
92 | | - |
93 | 96 | existing_user, last_fetched_date = user_exists(user, db_session) |
94 | | - |
| 97 | + |
| 98 | + # Only persist credentials to DB for premium users (data minimization) |
| 99 | + if existing_user and is_premium_eligible(db_session, existing_user): |
| 100 | + save_credentials(db_session, user.user_id, creds, credential_type="primary") |
| 101 | + logger.info("Saved credentials for premium user %s", user.user_id) |
| 102 | + |
95 | 103 | # Default to False for existing users, will be overwritten if needed |
96 | 104 | request.session["is_new_user"] = False |
97 | 105 |
|
@@ -231,7 +239,13 @@ async def signup(request: Request, db_session: database.DBSession): |
231 | 239 | ) |
232 | 240 | try: |
233 | 241 | if not code: |
234 | | - has_refresh_token = get_refresh_token_status(request.session.get("creds")) |
| 242 | + # Check if we have a refresh token (DB first, then session fallback) |
| 243 | + session_user_id = request.session.get("user_id") |
| 244 | + has_refresh_token = get_refresh_token_status( |
| 245 | + session_creds=request.session.get("creds"), |
| 246 | + db_session=db_session, |
| 247 | + user_id=session_user_id, |
| 248 | + ) |
235 | 249 | authorization_url, state = get_google_authorization_url( |
236 | 250 | flow, has_refresh_token |
237 | 251 | ) |
@@ -337,7 +351,12 @@ async def email_sync_auth( |
337 | 351 | logger.warning("Email sync auth attempted without session. Redirecting to login.") |
338 | 352 | return Redirects.to_error("auth_required") |
339 | 353 |
|
340 | | - has_refresh_token = get_refresh_token_status(request.session.get("email_sync_creds")) |
| 354 | + # Check for email_sync credentials (DB first, then session fallback) |
| 355 | + has_refresh_token = get_refresh_token_status( |
| 356 | + session_creds=request.session.get("email_sync_creds"), |
| 357 | + db_session=db_session, |
| 358 | + user_id=user_id, |
| 359 | + ) |
341 | 360 | authorization_url, state = get_google_authorization_url( |
342 | 361 | flow, has_refresh_token |
343 | 362 | ) |
@@ -375,12 +394,14 @@ async def email_sync_auth( |
375 | 394 | request.session["token_expiry"] = get_token_expiry(creds) |
376 | 395 | request.session["access_token"] = creds.token |
377 | 396 |
|
378 | | - # Persist encrypted email_sync credentials to database for background task support |
379 | | - save_credentials(db_session, user_id, creds, credential_type="email_sync") |
380 | | - |
381 | 397 | # Update user record with email sync info |
382 | 398 | user = db_session.exec(select(Users).where(Users.user_id == user_id)).first() |
383 | 399 | if user: |
| 400 | + # Only persist credentials to DB for premium users (data minimization) |
| 401 | + if is_premium_eligible(db_session, user): |
| 402 | + save_credentials(db_session, user_id, creds, credential_type="email_sync") |
| 403 | + logger.info("Saved email_sync credentials for premium user %s", user_id) |
| 404 | + |
384 | 405 | user.has_email_sync_configured = True |
385 | 406 | user.sync_email_address = sync_user.user_email |
386 | 407 | db_session.add(user) |
|
0 commit comments