Improve portable USB pack and credentials-based tunnel launcher.
Expand pack-usb.bat to sync LAUNCH.bat, cloudflare assets, and data dirs while preserving operator state; align usb/LAUNCH.bat with credentials.json tunnel flow instead of a baked token.
This commit is contained in:
124
usb/LAUNCH.bat
124
usb/LAUNCH.bat
@@ -123,81 +123,108 @@ if not exist "%ROOT%\data\spread-kits" mkdir "%ROOT%\data\spread-kits"
|
||||
if not exist "%ROOT%\data\uploads" mkdir "%ROOT%\data\uploads"
|
||||
if not exist "%ROOT%\data\blueprints" mkdir "%ROOT%\data\blueprints"
|
||||
if not exist "%ROOT%\data\preps" mkdir "%ROOT%\data\preps"
|
||||
if not exist "%ROOT%\data\cloudflare" mkdir "%ROOT%\data\cloudflare"
|
||||
|
||||
:: ----------------------------------------------------------------
|
||||
:: 5. Cloudflare Tunnel — install MSI, register service with token
|
||||
:: 5. Cloudflare Tunnel — auto-install, configure, start
|
||||
:: ----------------------------------------------------------------
|
||||
set "CF_MSI=%ROOT%\cloudflare\cloudflared-windows-amd64.msi"
|
||||
set "CF_TOKEN=eyJhIjoiODk1NDc5YWIzNTQwZGFhNmQ2MWFlNzAyYTUxNjQ0NzUiLCJ0IjoiYWFhYzYzMTctMzgyYS00OTM3LTgxY2YtYjM2ZjVkNjZjYTU4IiwicyI6Ik1XRXlaV0FqTlRndE5XTTRPUzAwT0RCa0xXRTNaR010WkdRNU56UTJZMlJoTmpNMiJ9"
|
||||
set "CF_DIR=%ROOT%\cloudflare"
|
||||
set "CF_CREDS_BUNDLE=%CF_DIR%\credentials.json"
|
||||
set "CF_MSI=%CF_DIR%\cloudflared-windows-amd64.msi"
|
||||
set "CF_HOSTNAME=killa.thetempleofdoom.com"
|
||||
set "CF_DATA=%ROOT%\data\cloudflare"
|
||||
set "SERVER_PORT=8989"
|
||||
set "CF_BIN="
|
||||
set "CF_TUNNEL_ID="
|
||||
set "CF_READY=0"
|
||||
|
||||
:: Step A — locate cloudflared binary (system PATH or default install paths)
|
||||
:: Check credentials exist and are real (not the placeholder)
|
||||
if not exist "%CF_CREDS_BUNDLE%" goto cf_no_creds
|
||||
powershell -NoProfile -Command "exit ([string](Get-Content '%CF_CREDS_BUNDLE%') | ConvertFrom-Json | Select-Object -ExpandProperty TunnelID) -eq ''" >nul 2>nul
|
||||
if errorlevel 1 goto cf_no_creds
|
||||
|
||||
:: Parse tunnel ID from credentials JSON
|
||||
for /f "usebackq delims=" %%i in (`powershell -NoProfile -Command "(Get-Content '%CF_CREDS_BUNDLE%' | ConvertFrom-Json).TunnelID" 2^>nul`) do set "CF_TUNNEL_ID=%%i"
|
||||
if "!CF_TUNNEL_ID!"=="" goto cf_no_creds
|
||||
echo [CF] Tunnel ID: !CF_TUNNEL_ID!
|
||||
|
||||
:: Stage credentials into data\cloudflare\ (idempotent)
|
||||
set "CF_CREDS_LOCAL=%CF_DATA%\!CF_TUNNEL_ID!.json"
|
||||
if not exist "!CF_CREDS_LOCAL!" (
|
||||
copy "%CF_CREDS_BUNDLE%" "!CF_CREDS_LOCAL!" >nul
|
||||
echo [CF] Credentials staged to data\cloudflare\
|
||||
)
|
||||
|
||||
:: Always regenerate config.yml with current absolute paths
|
||||
:: (handles drive-letter changes when USB is moved)
|
||||
set "CF_CONFIG=%CF_DATA%\config.yml"
|
||||
powershell -NoProfile -Command "$cfg='%CF_DATA%\config.yml'; $creds='!CF_CREDS_LOCAL!'; $port='%SERVER_PORT%'; $host='%CF_HOSTNAME%'; $id='!CF_TUNNEL_ID!'; Set-Content -Path $cfg -Value @('tunnel: ' + $id, 'credentials-file: ' + $creds, '', 'ingress:', ' - hostname: ' + $host, ' service: http://127.0.0.1:' + $port, ' - service: http_status:404')" >nul 2>nul
|
||||
echo [CF] Config written for !CF_HOSTNAME! -^> 127.0.0.1:%SERVER_PORT%
|
||||
|
||||
:: ---- Locate or install cloudflared ----
|
||||
where cloudflared >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
set "CF_BIN=cloudflared"
|
||||
goto cf_check_service
|
||||
goto cf_have_bin
|
||||
)
|
||||
if exist "%ProgramFiles%\cloudflare\cloudflared\cloudflared.exe" (
|
||||
set "CF_BIN=%ProgramFiles%\cloudflare\cloudflared\cloudflared.exe"
|
||||
goto cf_check_service
|
||||
goto cf_have_bin
|
||||
)
|
||||
if exist "%ProgramFiles(x86)%\cloudflare\cloudflared\cloudflared.exe" (
|
||||
set "CF_BIN=%ProgramFiles(x86)%\cloudflare\cloudflared\cloudflared.exe"
|
||||
goto cf_check_service
|
||||
goto cf_have_bin
|
||||
)
|
||||
|
||||
:: Step B — cloudflared not found, install from bundled MSI
|
||||
if not exist "%CF_MSI%" (
|
||||
echo [CF] WARNING: cloudflared not found and no MSI bundled. Skipping tunnel.
|
||||
:: Not found — install from bundled MSI
|
||||
if exist "%CF_MSI%" (
|
||||
echo [CF] cloudflared not found. Installing from bundled MSI...
|
||||
msiexec /i "%CF_MSI%" /quiet /norestart /l*v "%CF_DATA%\cf-install.log"
|
||||
echo [CF] MSI install launched - waiting...
|
||||
ping -n 8 127.0.0.1 >nul
|
||||
if exist "%ProgramFiles%\cloudflare\cloudflared\cloudflared.exe" (
|
||||
set "CF_BIN=%ProgramFiles%\cloudflare\cloudflared\cloudflared.exe"
|
||||
echo [CF] cloudflared installed successfully.
|
||||
goto cf_have_bin
|
||||
)
|
||||
where cloudflared >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
set "CF_BIN=cloudflared"
|
||||
echo [CF] cloudflared installed successfully.
|
||||
goto cf_have_bin
|
||||
)
|
||||
echo [CF] WARNING: MSI completed but cloudflared not found in PATH.
|
||||
echo [CF] Try re-running LAUNCH.bat after a reboot.
|
||||
goto cf_done
|
||||
) else (
|
||||
echo [CF] WARNING: cloudflared not installed and no MSI bundled.
|
||||
goto cf_done
|
||||
)
|
||||
echo [CF] Installing cloudflared from bundled MSI...
|
||||
msiexec /i "%CF_MSI%" /quiet /norestart
|
||||
echo [CF] Waiting for MSI to complete...
|
||||
ping -n 10 127.0.0.1 >nul
|
||||
|
||||
:: Re-locate after install
|
||||
where cloudflared >nul 2>nul
|
||||
if not errorlevel 1 ( set "CF_BIN=cloudflared" & goto cf_check_service )
|
||||
if exist "%ProgramFiles%\cloudflare\cloudflared\cloudflared.exe" (
|
||||
set "CF_BIN=%ProgramFiles%\cloudflare\cloudflared\cloudflared.exe"
|
||||
goto cf_check_service
|
||||
)
|
||||
echo [CF] WARNING: MSI installed but cloudflared still not found. Try running as Administrator.
|
||||
goto cf_done
|
||||
|
||||
:cf_check_service
|
||||
:cf_have_bin
|
||||
echo [CF] Binary: !CF_BIN!
|
||||
|
||||
:: Step C — register tunnel as Windows service if not already installed
|
||||
sc query cloudflared >nul 2>nul
|
||||
:: Check if cloudflared tunnel already running (same process = skip)
|
||||
tasklist 2>nul | findstr /I "cloudflared" >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
echo [CF] Tunnel service already registered.
|
||||
goto cf_start_service
|
||||
)
|
||||
echo [CF] Registering tunnel service with token...
|
||||
"!CF_BIN!" service install %CF_TOKEN%
|
||||
if errorlevel 1 (
|
||||
echo [CF] WARNING: service install failed. Run LAUNCH.bat as Administrator once.
|
||||
goto cf_done
|
||||
)
|
||||
echo [CF] Tunnel service registered.
|
||||
ping -n 3 127.0.0.1 >nul
|
||||
|
||||
:cf_start_service
|
||||
:: Step D — start the service if not already running
|
||||
sc query cloudflared | findstr /I "RUNNING" >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
echo [CF] Tunnel already running.
|
||||
echo [CF] Tunnel already running on this machine.
|
||||
echo [CF] https://!CF_HOSTNAME!
|
||||
set "CF_READY=1"
|
||||
goto cf_done
|
||||
)
|
||||
net start cloudflared >nul 2>nul
|
||||
ping -n 4 127.0.0.1 >nul
|
||||
echo [CF] Tunnel live: https://%CF_HOSTNAME%
|
||||
|
||||
:: Start cloudflared tunnel in background
|
||||
echo [CF] Starting Cloudflare tunnel...
|
||||
start "" /B "!CF_BIN!" tunnel --config "!CF_CONFIG!" run
|
||||
ping -n 5 127.0.0.1 >nul
|
||||
echo [CF] Tunnel live: https://!CF_HOSTNAME!
|
||||
set "CF_READY=1"
|
||||
goto cf_done
|
||||
|
||||
:cf_no_creds
|
||||
echo [CF] No valid credentials.json in cloudflare\
|
||||
echo [CF] See cloudflare\SETUP.txt to configure your tunnel once.
|
||||
echo [CF] Running in LAN-only mode this session.
|
||||
|
||||
:cf_done
|
||||
|
||||
@@ -244,7 +271,8 @@ if "!EC!"=="0" (
|
||||
echo If port %SERVER_PORT% is in use, close other AetherForge windows and retry.
|
||||
)
|
||||
|
||||
:: Cloudflare tunnel runs as a Windows service — leave it up between sessions
|
||||
:: On exit, also stop the cloudflared tunnel
|
||||
taskkill /F /IM cloudflared.exe >nul 2>nul
|
||||
|
||||
echo.
|
||||
pause
|
||||
|
||||
Reference in New Issue
Block a user