Files
foxhunt/fix_api_gateway_mfa.sh
jgrusewski 589bf7c081 🔧 Wave 112: Automated fix scripts and utilities
- fix_api_gateway_mfa.sh: MFA compilation fixes
- fix_audit_compliance_part2.sh: Audit compliance fixes
- fix_mfa_compilation.sh: MFA-specific compilation fixes
- fix_unsafe_blocks.sh: Unsafe code analysis
- fix_wave112_compilation.sh: Main compilation fix script
- Test management utilities (mark_tests_ignored.sh, stub_ignored_tests.sh)
2025-10-05 22:23:30 +02:00

116 lines
3.7 KiB
Bash

#!/bin/bash
# Wave 112 Agent 28: Fix API Gateway MFA Compilation Errors
# 17 type conversion errors blocking coverage measurement
set -e
echo "=== Wave 112 Agent 28: Fixing API Gateway MFA Compilation Errors ==="
# Fix 1: totp.rs - SecretString boxing (2 fixes)
echo "Fix 1: totp.rs - SecretString boxing..."
sed -i 's/SecretString::new(String::new())/SecretString::new(String::new().into())/' \
services/api_gateway/src/auth/mfa/totp.rs
sed -i 's/Ok(SecretString::new(secret_base32))/Ok(SecretString::new(secret_base32.into()))/' \
services/api_gateway/src/auth/mfa/totp.rs
# Fix 2: mod.rs - String conversion
echo "Fix 2: mod.rs - String conversion..."
sed -i 's/manual_entry_key: secret\.expose_secret()\.clone()/manual_entry_key: secret.expose_secret().to_string()/' \
services/api_gateway/src/auth/mfa/mod.rs
# Fix 3: mod.rs - NaiveDateTime to DateTime conversions
echo "Fix 3: mod.rs - DateTime conversions..."
# Line 199: expires_at binding
sed -i '199s/expires_at$/expires_at.naive_utc()/' \
services/api_gateway/src/auth/mfa/mod.rs
# Line 245: expires_at comparison
sed -i '245s/if session\.expires_at < Utc::now()/if session.expires_at.and_utc() < Utc::now()/' \
services/api_gateway/src/auth/mfa/mod.rs
# Line 291: now binding
sed -i '291s/now$/now.naive_utc()/' \
services/api_gateway/src/auth/mfa/mod.rs
# Line 429: expires_at binding in INSERT
sed -i '429s/expires_at$/expires_at.naive_utc()/' \
services/api_gateway/src/auth/mfa/mod.rs
# Fix 4: mod.rs - IpAddr to String conversion
echo "Fix 4: mod.rs - IpAddr to String..."
sed -i '397s/\.bind(ip)/.bind(ip.map(|addr| addr.to_string()))/' \
services/api_gateway/src/auth/mfa/mod.rs
# Fix 5: mod.rs - earliest_expiry type conversion (line 505)
echo "Fix 5: mod.rs - earliest_expiry conversion..."
sed -i '505s/earliest_expiry: result\.earliest_expiry,/earliest_expiry: result.earliest_expiry.map(|dt| dt.and_utc()),/' \
services/api_gateway/src/auth/mfa/mod.rs
# Fix 6: mod.rs - SQLx query result conversion (line 133)
echo "Fix 6: mod.rs - SQLx query conversion..."
# This requires manual editing - add .map() after query
cat > /tmp/mfa_mod_fix.txt << 'EOF'
// Fix: Convert NaiveDateTime to DateTime<Utc> from SQLx query
let config = sqlx::query_as!(
MfaConfig,
r#"
SELECT
id, user_id, is_enabled, totp_secret,
backup_codes, created_at, updated_at,
last_verified_at
FROM auth.mfa_config
WHERE user_id = $1
"#,
user_id
)
.fetch_optional(pool)
.await?
.map(|c| MfaConfig {
last_verified_at: c.last_verified_at.map(|dt| dt.and_utc()),
created_at: c.created_at.and_utc(),
updated_at: c.updated_at.and_utc(),
..c
});
EOF
# Fix 7: backup_codes.rs - SQLx query conversion (line 188)
echo "Fix 7: backup_codes.rs - SQLx query conversion..."
cat > /tmp/backup_codes_fix.txt << 'EOF'
// Fix: Convert NaiveDateTime to DateTime<Utc> from SQLx query
let history = sqlx::query_as!(
BackupCodeUsage,
r#"
SELECT
id, user_id, code_hash, used_at, ip_address
FROM auth.mfa_backup_code_usage
WHERE user_id = $1
ORDER BY used_at DESC
"#,
user_id
)
.fetch_all(pool)
.await?
.into_iter()
.map(|r| BackupCodeUsage {
used_at: r.used_at.map(|dt| dt.and_utc()),
..r
})
.collect();
EOF
echo ""
echo "=== Simple sed fixes applied (10/17) ==="
echo "Remaining 7 fixes require manual editing:"
echo ""
echo "1. services/api_gateway/src/auth/mfa/mod.rs (line 133)"
echo " - Apply fix from /tmp/mfa_mod_fix.txt"
echo ""
echo "2. services/api_gateway/src/auth/mfa/backup_codes.rs (line 188)"
echo " - Apply fix from /tmp/backup_codes_fix.txt"
echo ""
echo "=== Verification ==="
echo "Run: cargo build --workspace --lib -p api_gateway"
echo "Expected: Clean compilation (0 errors)"