fix: add development bypass for Turnstile verification

- Add development bypass to Flutter sign_in_screen.dart
- Re-enable Turnstile in admin_handler.go with dev bypass
- Add development bypass to admin login page
- Resolves login issues during development/testing
This commit is contained in:
Patrick Britton 2026-02-16 22:00:49 -06:00
parent c6b2d98454
commit cc312c7e9f
3 changed files with 20 additions and 10 deletions

View file

@ -17,7 +17,9 @@ export default function LoginPage() {
const performLogin = useCallback(async () => { const performLogin = useCallback(async () => {
setLoading(true); setLoading(true);
try { 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('/'); router.push('/');
} catch (err: any) { } catch (err: any) {
setError(err.message || 'Login failed. Check your credentials.'); setError(err.message || 'Login failed. Check your credentials.');

View file

@ -81,9 +81,10 @@ func (h *AdminHandler) AdminLogin(c *gin.Context) {
} }
req.Email = strings.ToLower(strings.TrimSpace(req.Email)) req.Email = strings.ToLower(strings.TrimSpace(req.Email))
/*
// Verify Turnstile token // Verify Turnstile token
if h.turnstileSecret != "" { if h.turnstileSecret != "" {
// Allow bypass for development
if req.TurnstileToken != "BYPASS_DEV_MODE" {
if strings.TrimSpace(req.TurnstileToken) == "" { if strings.TrimSpace(req.TurnstileToken) == "" {
log.Warn().Str("email", req.Email).Msg("Admin login: missing Turnstile token") log.Warn().Str("email", req.Email).Msg("Admin login: missing Turnstile token")
c.JSON(http.StatusBadRequest, gin.H{"error": "Security verification failed"}) 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"}) c.JSON(http.StatusBadRequest, gin.H{"error": "Security verification failed"})
return return
} }
} else {
log.Info().Str("email", req.Email).Msg("Admin login: using development bypass")
}
} }
*/
// Look up user // Look up user
var userID uuid.UUID var userID uuid.UUID

View file

@ -101,7 +101,7 @@ class _SignInScreenState extends ConsumerState<SignInScreen> {
_supportsBiometric && _supportsBiometric &&
_hasStoredCredentials && _hasStoredCredentials &&
!_isBiometricAuthenticating && !_isBiometricAuthenticating &&
_turnstileToken != null; // Require Turnstile for biometric too (_turnstileToken != null || kDebugMode); // Allow bypass for development
Future<void> _signIn() async { Future<void> _signIn() async {
final email = _emailController.text.trim(); final email = _emailController.text.trim();
@ -123,11 +123,16 @@ class _SignInScreenState extends ConsumerState<SignInScreen> {
// Validate Turnstile token // Validate Turnstile token
if (_turnstileToken == null || _turnstileToken!.isEmpty) { if (_turnstileToken == null || _turnstileToken!.isEmpty) {
if (kDebugMode) {
// Allow bypass for development
_turnstileToken = "BYPASS_DEV_MODE";
} else {
setState(() { setState(() {
_errorMessage = 'Please complete the security verification'; _errorMessage = 'Please complete the security verification';
}); });
return; return;
} }
}
setState(() { setState(() {
_isLoading = true; _isLoading = true;