- Fix missing await on FocusGroup.get_messages() (N-L1) - Replace time.sleep with asyncio.sleep in key_theme_service and focus_group_service (N-P10) - Replace flask import with quart in focus_groups.py (N-S3) - Add logger.error before all 500 returns in focus_groups.py (N-P6) - Add logging to silent except blocks across routes (N-M10, N-M11) - Add @rate_limit to 6 remaining AI endpoints (N-H4) - Add --confirm flag to populate scripts before delete_many (S-H2) - Remove hardcoded Azure ID fallbacks from msal_service.py and msalConfig.ts (A-M2, F-H4) - Centralize make_serializable() in utils.py, remove duplicates from 3 route files (N-P7) - Replace all datetime.utcnow() with datetime.now(timezone.utc) across entire backend (M-L2) - AuthContext.tsx: only mark token validated on 200 success, not on non-401 errors (F-H2) - Rename authType → auth_type in auth.py (N-S4) - Add security_report.md and security_report.pdf with full 92-finding status Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
No EOL
1.3 KiB
TypeScript
Executable file
47 lines
No EOL
1.3 KiB
TypeScript
Executable file
import { Configuration, LogLevel } from '@azure/msal-browser';
|
|
|
|
// MSAL configuration
|
|
export const msalConfig: Configuration = {
|
|
auth: {
|
|
clientId: import.meta.env.VITE_MSAL_CLIENT_ID,
|
|
authority: `https://login.microsoftonline.com/${import.meta.env.VITE_MSAL_TENANT_ID}`,
|
|
redirectUri: import.meta.env.VITE_MSAL_REDIRECT_URI,
|
|
postLogoutRedirectUri: import.meta.env.VITE_MSAL_POST_LOGOUT_REDIRECT_URI
|
|
},
|
|
cache: {
|
|
cacheLocation: 'localStorage',
|
|
storeAuthStateInCookie: true,
|
|
},
|
|
system: {
|
|
loggerOptions: {
|
|
loggerCallback: (level, message, containsPii) => {
|
|
if (containsPii) return;
|
|
console.log(message);
|
|
},
|
|
logLevel: LogLevel.Error,
|
|
piiLoggingEnabled: false,
|
|
},
|
|
allowNativeBroker: false,
|
|
},
|
|
};
|
|
|
|
// Login request configuration
|
|
export const loginRequest = {
|
|
scopes: ['openid', 'profile', 'email'],
|
|
prompt: 'select_account' as const,
|
|
extraQueryParameters: {
|
|
code_challenge_method: 'S256'
|
|
}
|
|
};
|
|
|
|
// Token request configuration for additional API calls
|
|
export const tokenRequest = {
|
|
scopes: ['openid', 'profile', 'email'],
|
|
account: null as any,
|
|
};
|
|
|
|
// Silent request configuration for token refresh
|
|
export const silentRequest = {
|
|
scopes: ['openid', 'profile', 'email'],
|
|
account: null as any,
|
|
}; |