You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.5 KiB
67 lines
2.5 KiB
# dsh-memory pair script |
|
# Generates a random 64-hex token, writes it into bridge/config.json, |
|
# copies it to the clipboard, and starts the bridge if not running. |
|
# Usage: powershell -NoProfile -ExecutionPolicy Bypass -File pair.ps1 |
|
$ErrorActionPreference = 'Stop' |
|
|
|
$root = Split-Path -Parent $PSScriptRoot |
|
$cfgPath = Join-Path $root 'bridge\config.json' |
|
|
|
# Load or create config |
|
if (Test-Path $cfgPath) { |
|
$raw = Get-Content $cfgPath -Raw -Encoding UTF8 |
|
$cfg = $raw | ConvertFrom-Json |
|
} else { |
|
Write-Host "[dsh-memory] config.json not found, creating defaults." |
|
$cfg = [pscustomobject]@{ |
|
token = '' |
|
port = 8766 |
|
allowedRoots = @((Split-Path -Parent $root)) |
|
bashTimeoutMs = 20000 |
|
bashTimeoutMaxMs = 120000 |
|
handoffTimeoutMs = 300000 |
|
handoffTimeoutMaxMs = 1800000 |
|
dailySendLimit = 200 |
|
} |
|
} |
|
|
|
# Generate 32 random bytes -> 64 hex chars |
|
$bytes = New-Object byte[] 32 |
|
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create() |
|
$rng.GetBytes($bytes) |
|
$token = -join ($bytes | ForEach-Object { $_.ToString('x2') }) |
|
$rng.Dispose() |
|
|
|
$cfg.token = $token |
|
if (-not $cfg.allowedRoots -or $cfg.allowedRoots.Count -eq 0) { |
|
$cfg | Add-Member -NotePropertyName allowedRoots -NotePropertyValue @((Split-Path -Parent $root)) -Force |
|
} |
|
$cfg | ConvertTo-Json -Depth 5 | Set-Content $cfgPath -Encoding UTF8 |
|
Write-Host "[dsh-memory] token written to $cfgPath" |
|
|
|
# Copy token to clipboard |
|
try { |
|
Set-Clipboard -Value $token |
|
Write-Host "[dsh-memory] token copied to clipboard. Paste it into the dsh-memory panel." |
|
} catch { |
|
Write-Host "[dsh-memory] Could not access clipboard. Token value:" |
|
Write-Host $token |
|
} |
|
|
|
# Start bridge if not already listening |
|
$port = if ($cfg.port) { [int]$cfg.port } else { 8766 } |
|
$listening = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue |
|
if ($listening) { |
|
Write-Host "[dsh-memory] bridge already running on port $port." |
|
} else { |
|
Write-Host "[dsh-memory] starting bridge on port $port ..." |
|
$serverJs = Join-Path $root 'bridge\server.js' |
|
Start-Process -FilePath 'cmd.exe' -ArgumentList '/c', "title dsh-memory bridge && node `"$serverJs`" & pause" -WorkingDirectory $root |
|
Start-Sleep -Seconds 2 |
|
$check = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue |
|
if ($check) { |
|
Write-Host "[dsh-memory] bridge started." |
|
} else { |
|
Write-Host "[dsh-memory] bridge may have failed to start. Is node in PATH? Check the bridge window for errors." |
|
} |
|
}
|
|
|