141 lines
4.3 KiB
PowerShell
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
|
|
}
|