riseup-squad18/apply-hybrid-auth.ps1

76 lines
3.0 KiB
PowerShell

# Aplicar padrão de autenticação híbrida em TODOS os 63 endpoints
Write-Host "=== BULK UPDATE: HYBRID AUTH PATTERN ===" -ForegroundColor Cyan
$functionsPath = "supabase/functions"
$indexFiles = Get-ChildItem -Path $functionsPath -Filter "index.ts" -Recurse
$updated = 0
$skipped = 0
$alreadyDone = 0
foreach ($file in $indexFiles) {
$relativePath = $file.FullName.Replace((Get-Location).Path + "\", "")
$functionName = $file.Directory.Name
# Pular _shared
if ($functionName -eq "_shared") {
continue
}
$content = Get-Content $file.FullName -Raw
# Verificar se já foi atualizado
if ($content -match "validateExternalAuth|x-external-jwt") {
Write-Host "$functionName - Already updated" -ForegroundColor DarkGray
$alreadyDone++
continue
}
# Verificar se tem autenticação para substituir
$hasOldAuth = $content -match 'auth\.getUser\(\)|Authorization.*req\.headers'
if (-not $hasOldAuth) {
Write-Host "$functionName - No auth found" -ForegroundColor Gray
$skipped++
continue
}
Write-Host "🔄 $functionName - Updating..." -ForegroundColor Yellow
# 1. Adicionar import do helper (após imports do supabase-js)
if ($content -match 'import.*supabase-js') {
$content = $content -replace '(import.*from.*supabase-js.*?\n)', "`$1import { validateExternalAuth } from ""../_shared/auth.ts"";`n"
}
# 2. Substituir padrão de autenticação
# Padrão antigo 1: const authHeader = req.headers.get("Authorization"); + createClient + auth.getUser()
$content = $content -replace '(?s)const authHeader = req\.headers\.get\("Authorization"\);?\s*const supabase = createClient\([^)]+\)[^;]*;?\s*const \{ data: \{ user \}[^}]*\} = await supabase\.auth\.getUser\(\);?\s*if \(!user\)[^}]*\{[^}]*\}', @'
const { user, externalSupabase, ownSupabase } = await validateExternalAuth(req);
const supabase = ownSupabase;
'@
# Padrão antigo 2: apenas createClient + auth.getUser() sem authHeader
$content = $content -replace '(?s)const supabase = createClient\([^)]+,[^)]+,\s*\{ global: \{ headers: \{ Authorization: authHeader[^}]*\}[^)]*\);?\s*const \{ data: \{ user \}[^}]*\} = await supabase\.auth\.getUser\(\);?\s*if \(!user\)[^}]*\{[^}]*\}', @'
const { user, externalSupabase, ownSupabase } = await validateExternalAuth(req);
const supabase = ownSupabase;
'@
# Salvar
Set-Content -Path $file.FullName -Value $content -NoNewline
$updated++
Write-Host "$functionName" -ForegroundColor Green
}
Write-Host ""
Write-Host "=== SUMMARY ===" -ForegroundColor Cyan
Write-Host "✅ Updated: $updated" -ForegroundColor Green
Write-Host "✓ Already done: $alreadyDone" -ForegroundColor Gray
Write-Host "⊘ Skipped: $skipped" -ForegroundColor Yellow
Write-Host ""
if ($updated -gt 0) {
Write-Host "Next step: Deploy all functions" -ForegroundColor Yellow
Write-Host "Run: pnpx supabase functions deploy" -ForegroundColor Cyan
}