This commit is contained in:
2026-04-26 01:44:36 +02:00
parent cbc2462ea4
commit 72cb5b8d1d
166 changed files with 2712 additions and 135 deletions

View File

@@ -0,0 +1,169 @@
<#
.SYNOPSIS
Audit wszystkich paczek aktualizacji cmsPRO pod katem buggy http:// URL.
.DESCRIPTION
Skanuje rekursywnie kazdy ZIP w updates/ (cmsPro.zip oraz updates/**/ver_*.zip).
Dla kazdego ZIP-a sprawdza czy zawiera pliki kandydujace
(autoload/class.S.php, autoload/Shared/Helpers/Helpers.php,
autoload/admin/factory/class.Update.php) i czy te pliki zawieraja
ciag 'http://www.cmspro.project-dc.pl'.
Output: audit-report.md (tabela markdown sortowana po wersji).
Skrypt NIE modyfikuje paczek.
#>
[CmdletBinding()]
param(
[string]$UpdatesDir = "C:\visual studio code\projekty\cmsPRO\updates",
[string]$ReportPath = "C:\visual studio code\projekty\cmsPRO\.paul\phases\04h-hotfix-https-updates\audit-report.md"
)
$ErrorActionPreference = "Stop"
Add-Type -AssemblyName System.IO.Compression.FileSystem
$BuggyPattern = 'http://www.cmspro.project-dc.pl'
$SuspectFiles = @(
'autoload/class.S.php',
'autoload/Shared/Helpers/Helpers.php',
'autoload/admin/factory/class.Update.php'
)
function Test-ZipForBug {
param([string]$ZipPath)
$result = [PSCustomObject]@{
Package = (Resolve-Path $ZipPath).Path.Substring($UpdatesDir.Length).TrimStart('\','/')
FilesPresent = @()
BuggyFiles = @()
HasBuggyUrl = $false
Action = 'N/A'
Error = $null
}
try {
$zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
foreach ($entry in $zip.Entries) {
$name = $entry.FullName.Replace('\','/')
if ($SuspectFiles -contains $name) {
$result.FilesPresent += $name
$reader = New-Object System.IO.StreamReader($entry.Open())
$content = $reader.ReadToEnd()
$reader.Close()
if ($content -match [regex]::Escape($BuggyPattern)) {
$result.BuggyFiles += $name
$result.HasBuggyUrl = $true
}
}
}
$zip.Dispose()
} catch {
$result.Error = $_.Exception.Message
}
if ($result.HasBuggyUrl) { $result.Action = 'PATCH' }
elseif ($result.FilesPresent) { $result.Action = 'OK (already https)' }
else { $result.Action = 'N/A (no suspect files)' }
return $result
}
Write-Host "Skanuje $UpdatesDir ..." -ForegroundColor Cyan
$zips = @()
$baseInstall = Join-Path $UpdatesDir 'cmsPro.zip'
if (Test-Path $baseInstall) { $zips += $baseInstall }
$zips += Get-ChildItem -Path $UpdatesDir -Filter 'ver_*.zip' -Recurse | Sort-Object FullName | ForEach-Object { $_.FullName }
Write-Host "Znaleziono $($zips.Count) paczek." -ForegroundColor Cyan
$results = @()
$i = 0
foreach ($zip in $zips) {
$i++
Write-Progress -Activity "Audit paczek" -Status "$i / $($zips.Count): $(Split-Path $zip -Leaf)" -PercentComplete (($i / $zips.Count) * 100)
$results += Test-ZipForBug -ZipPath $zip
}
Write-Progress -Activity "Audit paczek" -Completed
# --- Raport ---
$buggy = $results | Where-Object { $_.HasBuggyUrl }
$ok = $results | Where-Object { $_.FilesPresent -and -not $_.HasBuggyUrl }
$none = $results | Where-Object { -not $_.FilesPresent }
$errored = $results | Where-Object { $_.Error }
$lines = @()
$lines += '# Audit Report: paczki aktualizacji cmsPRO (HTTP -> HTTPS bug)'
$lines += ''
$lines += "**Data:** $(Get-Date -Format 'yyyy-MM-dd HH:mm')"
$lines += "**Katalog:** ``$UpdatesDir``"
$lines += "**Wzorzec buggy:** ``$BuggyPattern``"
$lines += ''
$lines += '## Podsumowanie'
$lines += ''
$lines += "| Kategoria | Liczba |"
$lines += "|-----------|--------|"
$lines += "| Paczek przeskanowanych | $($results.Count) |"
$lines += "| **PATCH (buggy http://)** | **$($buggy.Count)** |"
$lines += "| OK (juz https albo brak URL) | $($ok.Count) |"
$lines += "| N/A (brak plikow podejrzanych) | $($none.Count) |"
$lines += "| Bledy | $($errored.Count) |"
$lines += ''
$lines += '## Paczki wymagajace patcha (HasBuggyUrl=true)'
$lines += ''
if ($buggy) {
$lines += '| # | Paczka | Buggy pliki |'
$lines += '|---|--------|-------------|'
$idx = 0
foreach ($r in $buggy) {
$idx++
$lines += "| $idx | ``$($r.Package)`` | $($r.BuggyFiles -join ', ') |"
}
} else {
$lines += '_Brak paczek do patcha._'
}
$lines += ''
$lines += '## Paczki zawierajace pliki ale juz na https (OK)'
$lines += ''
if ($ok) {
$lines += '| # | Paczka | Pliki obecne |'
$lines += '|---|--------|--------------|'
$idx = 0
foreach ($r in $ok) {
$idx++
$lines += "| $idx | ``$($r.Package)`` | $($r.FilesPresent -join ', ') |"
}
} else {
$lines += '_Brak._'
}
$lines += ''
$lines += '## Bledy odczytu'
$lines += ''
if ($errored) {
foreach ($r in $errored) {
$lines += "- ``$($r.Package)`` -- $($r.Error)"
}
} else {
$lines += '_Brak._'
}
$lines += ''
$lines += '## Pelna lista (raw)'
$lines += ''
$lines += '| Paczka | FilesPresent | HasBuggyUrl | Action |'
$lines += '|--------|--------------|-------------|--------|'
foreach ($r in $results) {
$files = if ($r.FilesPresent) { ($r.FilesPresent -join '; ') } else { '-' }
$lines += "| ``$($r.Package)`` | $files | $($r.HasBuggyUrl) | $($r.Action) |"
}
$utf8 = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllText($ReportPath, ($lines -join "`r`n"), $utf8)
Write-Host ""
Write-Host "Audit zakonczony." -ForegroundColor Green
Write-Host " Paczek: $($results.Count)"
Write-Host " Do patcha: $($buggy.Count)" -ForegroundColor Yellow
Write-Host " OK: $($ok.Count)"
Write-Host " N/A: $($none.Count)"
Write-Host " Bledy: $($errored.Count)"
Write-Host "Raport: $ReportPath" -ForegroundColor Cyan