76 lines
3.0 KiB
PowerShell
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
|
|
}
|