Initial SQL-only 1C adapter baseline

This commit is contained in:
2026-07-22 03:03:47 +03:00
commit e2503b77e7
545 changed files with 184711 additions and 0 deletions
+175
View File
@@ -0,0 +1,175 @@
[CmdletBinding()]
param(
[string]$Cookie,
[string]$CookieStore = "plugins/1c/rag/official-docs/.local/its-cookie.dpapi.txt",
[switch]$Console,
[switch]$SkipValidate,
[switch]$PrintEnvCommand
)
$ErrorActionPreference = "Stop"
Add-Type -AssemblyName System.Security
function Decode-Utf8Base64([string]$Text) {
return [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($Text))
}
function Get-CookieFromDialog {
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = "1C:ITS Cookie"
$form.Width = 820
$form.Height = 360
$form.StartPosition = "CenterScreen"
$form.TopMost = $true
$form.Font = New-Object System.Drawing.Font("Segoe UI", 9)
$label = New-Object System.Windows.Forms.Label
$label.Text = "Paste Cookie header from an authorized its.1c.ru request."
$label.Left = 12
$label.Top = 12
$label.Width = 770
$label.Height = 24
$form.Controls.Add($label)
$hint = New-Object System.Windows.Forms.Label
$hint.Text = "Chrome DevTools -> Network -> open its.1c.ru page -> Request Headers -> Cookie. Do not paste yandex.com cookies."
$hint.Left = 12
$hint.Top = 34
$hint.Width = 770
$hint.Height = 24
$hint.ForeColor = [System.Drawing.Color]::DarkRed
$form.Controls.Add($hint)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Left = 12
$textBox.Top = 64
$textBox.Width = 780
$textBox.Height = 198
$textBox.Multiline = $true
$textBox.ScrollBars = "Vertical"
$textBox.AcceptsReturn = $true
$textBox.AcceptsTab = $true
$form.Controls.Add($textBox)
$ok = New-Object System.Windows.Forms.Button
$ok.Text = Decode-Utf8Base64 "0KHQvtGF0YDQsNC90LjRgtGM"
$ok.Left = 606
$ok.Top = 276
$ok.Width = 90
$ok.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $ok
$form.Controls.Add($ok)
$cancel = New-Object System.Windows.Forms.Button
$cancel.Text = Decode-Utf8Base64 "0J7RgtC80LXQvdCw"
$cancel.Left = 704
$cancel.Top = 276
$cancel.Width = 90
$cancel.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancel
$form.Controls.Add($cancel)
$result = $form.ShowDialog()
if ($result -ne [System.Windows.Forms.DialogResult]::OK) {
throw "Cookie input cancelled."
}
return $textBox.Text.Trim()
}
function Test-CookieShape([string]$Text) {
$warnings = New-Object System.Collections.Generic.List[string]
if ($Text -match '(?i)yandex\.') {
$warnings.Add("Cookie text contains yandex.* marker. This is probably not the 1C:ITS auth cookie.")
}
if ($Text -match '(?i)\bdomain\s*=\s*\.?(?!its\.1c\.ru)') {
$warnings.Add("Cookie text contains a non-its.1c.ru Domain attribute.")
}
if ($Text -notmatch '=') {
$warnings.Add("Cookie text does not look like name=value pairs.")
}
return $warnings.ToArray()
}
function Normalize-ItsCookie([string]$Text) {
$tempFile = [System.IO.Path]::GetTempFileName()
try {
Set-Content -LiteralPath $tempFile -Value $Text -Encoding UTF8
$json = python -X utf8 scripts/normalize_1c_its_cookie.py --input-file $tempFile 2>&1
if ($LASTEXITCODE -ne 0) {
throw "Cookie normalization failed: $json"
}
$result = $json | ConvertFrom-Json
if (-not $result.ok) {
throw "Cookie normalization rejected input: $($result.errors -join ', ')"
}
if ($result.warnings -and $result.warnings.Count -gt 0) {
Write-Warning "Cookie normalization warnings: $($result.warnings -join ', ')"
}
Write-Host "Normalized cookie format: $($result.format), pairs: $($result.pair_count)"
return [string]$result.cookie
} finally {
Remove-Item -LiteralPath $tempFile -Force -ErrorAction SilentlyContinue
}
}
function Protect-Text([string]$Text) {
$bytes = [System.Text.Encoding]::UTF8.GetBytes($Text)
$protected = [System.Security.Cryptography.ProtectedData]::Protect(
$bytes,
$null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser
)
return [Convert]::ToBase64String($protected)
}
if (-not $Cookie) {
if ($Console) {
$Cookie = Read-Host "Paste 1C:ITS Cookie"
} else {
try {
$Cookie = Get-CookieFromDialog
} catch {
Write-Warning "GUI input failed: $($_.Exception.Message)"
$Cookie = Read-Host "Paste 1C:ITS Cookie"
}
}
}
if ($null -eq $Cookie) {
$Cookie = ""
}
$Cookie = $Cookie.Trim()
if (-not $Cookie) {
throw "Cookie is empty."
}
$shapeWarnings = Test-CookieShape $Cookie
if ($shapeWarnings.Count -gt 0) {
Write-Warning "Cookie shape warning:"
foreach ($warning in $shapeWarnings) {
Write-Warning " - $warning"
}
}
$Cookie = Normalize-ItsCookie $Cookie
$storePath = Resolve-Path -LiteralPath (Split-Path -Parent $CookieStore) -ErrorAction SilentlyContinue
if (-not $storePath) {
New-Item -ItemType Directory -Path (Split-Path -Parent $CookieStore) -Force | Out-Null
}
Protect-Text $Cookie | Set-Content -LiteralPath $CookieStore -Encoding UTF8
Write-Host "Saved encrypted 1C:ITS cookie to $CookieStore"
if (-not $SkipValidate) {
$env:ONEC_ITS_COOKIE = $Cookie
Write-Host "Validating 1C:ITS protected access..."
python -X utf8 scripts/check_1c_its_access.py --print
}
if ($PrintEnvCommand) {
Write-Host '$env:ONEC_ITS_COOKIE = "<stored encrypted; use scripts/run_1c_its_docs_pipeline.ps1>"'
}