riseup-squad18/update-all-auth.ps1

141 lines
4.3 KiB
PowerShell

# Script para aplicar padrão de autenticação híbrida em TODOS os endpoints
#
# PADRÃO:
# 1. Import validateExternalAuth from _shared/auth.ts
# 2. Trocar validação de JWT local por validateExternalAuth()
# 3. Usar externalSupabase e ownSupabase do resultado
Write-Host "=== UPDATING ALL ENDPOINTS TO HYBRID AUTH ===" -ForegroundColor Cyan
Write-Host ""
$endpoints = @(
"user-info",
"user-update-preferences",
"availability-create",
"availability-update",
"availability-delete",
"availability-list",
"availability-slots",
"exceptions-create",
"exceptions-delete",
"exceptions-list",
"appointments-create",
"appointments-update",
"appointments-cancel",
"waitlist-match",
"waitlist-remove",
"virtual-queue-checkin",
"notifications-subscription",
"analytics-heatmap",
"analytics-demand-curve",
"analytics-ranking-reasons",
"analytics-monthly-no-show",
"analytics-specialty-heatmap",
"analytics-custom-report",
"reports-list-extended",
"reports-export-csv",
"reports-integrity-check",
"reports-export",
"doctor-occupancy",
"doctor-delay-suggestion",
"patients-history",
"patients-preferences",
"patients-update-preferences",
"patients-portal",
"accessibility-preferences",
"accessibility-update-preferences",
"audit-list",
"system-health-check",
"system-cache-rebuild",
"system-cron-runner",
"appointments-list",
"appointments-stats",
"waitlist-add",
"waitlist-list",
"virtual-queue-status",
"virtual-queue-call-next",
"notifications-send",
"notifications-mark-read",
"notifications-preferences",
"analytics-overview",
"analytics-no-show-prediction",
"teleconsult-start",
"teleconsult-end",
"teleconsult-status",
"gamification-points",
"gamification-badges",
"gamification-leaderboard",
"privacy-consent",
"privacy-data-export",
"privacy-data-delete",
"flags-list",
"flags-toggle",
"offline-sync"
)
$updated = 0
$failed = 0
foreach ($endpoint in $endpoints) {
$path = "supabase/functions/$endpoint/index.ts"
if (-not (Test-Path $path)) {
Write-Host "⚠️ $endpoint - File not found" -ForegroundColor Yellow
$failed++
continue
}
# Ler conteúdo atual
$content = Get-Content $path -Raw
# Verificar se já tem validateExternalAuth
if ($content -match "validateExternalAuth") {
Write-Host "$endpoint - Already updated" -ForegroundColor Gray
continue
}
# Verificar se tem auth.getUser() pattern que precisa ser substituído
if ($content -notmatch "auth\.getUser\(\)") {
Write-Host "$endpoint - No auth pattern found" -ForegroundColor DarkGray
continue
}
Write-Host "🔄 $endpoint - Updating..." -ForegroundColor Yellow
# Adicionar import se não existir
if ($content -notmatch "validateExternalAuth") {
$content = $content -replace '(import.*from.*supabase-js.*\n)', "`$1import { validateExternalAuth, createAuthErrorResponse } from ""../_shared/auth.ts"";`n"
}
# Substituir padrão de autenticação
# Pattern: const { data: { user } } = await supabase.auth.getUser();
$oldPattern = '(?s)(const authHeader = req\.headers\.get\("Authorization"\);.*?)(const \{ data: \{ user \} \} = await supabase\.auth\.getUser\(\);.*?if \(!user\).*?\n)'
$newPattern = 'const { user, externalSupabase, ownSupabase } = await validateExternalAuth(req);
const supabase = ownSupabase; // For backward compatibility
'
if ($content -match $oldPattern) {
$content = $content -replace $oldPattern, $newPattern
# Salvar
Set-Content -Path $path -Value $content -NoNewline
Write-Host "$endpoint - Updated!" -ForegroundColor Green
$updated++
} else {
Write-Host "⚠️ $endpoint - Pattern not matched" -ForegroundColor Yellow
$failed++
}
}
Write-Host ""
Write-Host "=== SUMMARY ===" -ForegroundColor Cyan
Write-Host "Updated: $updated" -ForegroundColor Green
Write-Host "Failed/Skipped: $failed" -ForegroundColor Yellow
Write-Host ""
if ($updated -gt 0) {
Write-Host "Deploying all updated endpoints..." -ForegroundColor Yellow
pnpx supabase functions deploy
}