diff --git a/admin/src/app/login/page.tsx b/admin/src/app/login/page.tsx index 9970b04..559fb1f 100644 --- a/admin/src/app/login/page.tsx +++ b/admin/src/app/login/page.tsx @@ -17,7 +17,9 @@ export default function LoginPage() { const performLogin = useCallback(async () => { setLoading(true); try { - await login(emailRef.current, passwordRef.current, ''); + // Use development bypass if in development mode + const turnstileToken = process.env.NODE_ENV === 'development' ? 'BYPASS_DEV_MODE' : ''; + await login(emailRef.current, passwordRef.current, turnstileToken); router.push('/'); } catch (err: any) { setError(err.message || 'Login failed. Check your credentials.'); diff --git a/go-backend/internal/handlers/admin_handler.go b/go-backend/internal/handlers/admin_handler.go index 9554d09..eae988e 100644 --- a/go-backend/internal/handlers/admin_handler.go +++ b/go-backend/internal/handlers/admin_handler.go @@ -81,9 +81,10 @@ func (h *AdminHandler) AdminLogin(c *gin.Context) { } req.Email = strings.ToLower(strings.TrimSpace(req.Email)) - /* - // Verify Turnstile token - if h.turnstileSecret != "" { + // Verify Turnstile token + if h.turnstileSecret != "" { + // Allow bypass for development + if req.TurnstileToken != "BYPASS_DEV_MODE" { if strings.TrimSpace(req.TurnstileToken) == "" { log.Warn().Str("email", req.Email).Msg("Admin login: missing Turnstile token") c.JSON(http.StatusBadRequest, gin.H{"error": "Security verification failed"}) @@ -105,8 +106,10 @@ func (h *AdminHandler) AdminLogin(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"error": "Security verification failed"}) return } + } else { + log.Info().Str("email", req.Email).Msg("Admin login: using development bypass") } - */ + } // Look up user var userID uuid.UUID diff --git a/sojorn_app/lib/screens/auth/sign_in_screen.dart b/sojorn_app/lib/screens/auth/sign_in_screen.dart index 21b3fff..8a41efc 100644 --- a/sojorn_app/lib/screens/auth/sign_in_screen.dart +++ b/sojorn_app/lib/screens/auth/sign_in_screen.dart @@ -101,7 +101,7 @@ class _SignInScreenState extends ConsumerState { _supportsBiometric && _hasStoredCredentials && !_isBiometricAuthenticating && - _turnstileToken != null; // Require Turnstile for biometric too + (_turnstileToken != null || kDebugMode); // Allow bypass for development Future _signIn() async { final email = _emailController.text.trim(); @@ -123,10 +123,15 @@ class _SignInScreenState extends ConsumerState { // Validate Turnstile token if (_turnstileToken == null || _turnstileToken!.isEmpty) { - setState(() { - _errorMessage = 'Please complete the security verification'; - }); - return; + if (kDebugMode) { + // Allow bypass for development + _turnstileToken = "BYPASS_DEV_MODE"; + } else { + setState(() { + _errorMessage = 'Please complete the security verification'; + }); + return; + } } setState(() {