How it works
WoW addons can't reach the internet, so the Olympus Guild addon's data only leaves the game through its saved file: WTF\Account\<ACCOUNT>\SavedVariables\Olympus.lua. WoW writes it when you log out, /reload or exit.
The uploader checks that file every 20 seconds and sends it to this site when it changes. The site keeps only the guild census (guild sizes, online counts, leaders, officers, zones) and, for officer keys, tabard inspections. Everything else in the file (chat history, logs, the addon's channel key, your settings) is discarded on arrival and never stored.
It's plain PowerShell, built into Windows. Nothing is installed except a shortcut in your Startup folder, no admin rights are needed, and uninstall.cmd removes it. It never touches the game itself, only reads the saved file, the same way Raider.IO and Warcraft Logs' companion apps work.
1. Review the code
This is every file in the download, exactly as shipped. Read it before you run it.
README.txt19 lines
ONN census uploader
===================
Sends the Olympus Guild addon's census to https://olympusnewsnetwork.com/army.
Get a key: request one at https://olympusnewsnetwork.com/uploader (the download from your
claim link includes config.json with your key already in it)
Install: double-click install.cmd (runs now and at every Windows sign-in)
Remove: double-click uninstall.cmd
Log: uploader.log in this folder
How it works: WoW addons can't reach the internet, so the addon's data only leaves the game
through its saved file, WTF\Account\<ACCOUNT>\SavedVariables\Olympus.lua. WoW writes that file
when you log out, /reload or exit. The uploader checks every 20 seconds and sends the file when
it changes. The website keeps only the guild census and tabard inspections; everything else in
the file (chat history, logs, the channel key) is discarded on arrival.
If WoW is installed somewhere unusual, add "wowPath": "D:\\Games\\World of Warcraft" to config.json.
Keep config.json private: it holds the upload key.
install.cmd4 lines
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1"
pause
install.ps133 lines
# Installs the ONN census uploader for the current Windows user (no admin needed).
$ErrorActionPreference = 'Stop'
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$script = Join-Path $here 'onn-uploader.ps1'
if (-not (Test-Path (Join-Path $here 'config.json'))) {
Write-Host 'config.json is missing. Request a key at https://olympusnewsnetwork.com/uploader and use the download from your claim link.'
exit 1
}
$args1 = '-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File "{0}"' -f $script
# Stop an older copy so we never run two.
Get-CimInstance Win32_Process -Filter "Name='powershell.exe'" |
Where-Object { $_.CommandLine -like '*onn-uploader.ps1*' -and $_.ProcessId -ne $PID } |
ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
$lnk = Join-Path ([Environment]::GetFolderPath('Startup')) 'ONN Uploader.lnk'
$s = (New-Object -ComObject WScript.Shell).CreateShortcut($lnk)
$s.TargetPath = 'powershell.exe'
$s.Arguments = $args1
$s.WorkingDirectory = $here
$s.WindowStyle = 7
$s.Description = 'Sends the Olympus addon census to olympusnewsnetwork.com'
$s.Save()
Write-Host "Added to Windows startup: $lnk"
Write-Host 'Looking for your Olympus.lua and sending it once...'
& $script -Once
Start-Process powershell.exe -ArgumentList $args1 -WindowStyle Hidden
Write-Host ''
Write-Host 'Done. The uploader now runs in the background and starts with Windows.'
Write-Host ('Log: ' + (Join-Path $here 'uploader.log'))
onn-uploader.ps194 lines
# ONN census uploader
# Watches the Olympus Guild addon's saved file (WTF\Account\<ACCOUNT>\SavedVariables\Olympus.lua)
# and sends it to olympusnewsnetwork.com whenever WoW saves it (logout, /reload, exit).
# Settings live in config.json next to this script. Run once by hand with: -Once
param([switch]$Once)
$ErrorActionPreference = 'Stop'
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$logFile = Join-Path $here 'uploader.log'
$stateFile = Join-Path $here 'state.json'
function Log($msg) {
$line = '{0} {1}' -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $msg
Write-Host $line
try {
if ((Test-Path $logFile) -and (Get-Item $logFile).Length -gt 512KB) { Move-Item $logFile "$logFile.old" -Force }
Add-Content -Path $logFile -Value $line
} catch {}
}
$config = Get-Content (Join-Path $here 'config.json') -Raw | ConvertFrom-Json
if (-not $config.token) { Log 'config.json has no token'; exit 1 }
$source = if ($config.source) { $config.source } else { $env:COMPUTERNAME }
# Every place WoW might be installed; each game version folder (_classic_, _anniversary_, ...)
# has its own WTF folder, so we look inside all of them.
function Get-WowRoots {
$roots = New-Object System.Collections.Generic.List[string]
if ($config.wowPath) { $roots.Add($config.wowPath) }
foreach ($key in 'HKLM:\SOFTWARE\WOW6432Node\Blizzard Entertainment\World of Warcraft', 'HKLM:\SOFTWARE\Blizzard Entertainment\World of Warcraft') {
try {
$p = (Get-ItemProperty -Path $key -ErrorAction Stop).InstallPath
if ($p) { $roots.Add((Split-Path -Parent ($p.TrimEnd('\')))) ; $roots.Add($p) }
} catch {}
}
foreach ($drive in (Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Free -ne $null }).Root) {
foreach ($sub in 'Program Files (x86)\World of Warcraft', 'Program Files\World of Warcraft', 'World of Warcraft', 'Games\World of Warcraft', 'Blizzard\World of Warcraft') {
$roots.Add((Join-Path $drive $sub))
}
}
$roots | Where-Object { $_ -and (Test-Path $_) } | Select-Object -Unique
}
function Find-SavedFiles {
$found = @()
foreach ($root in Get-WowRoots) {
foreach ($base in @($root) + @(Get-ChildItem -Path $root -Directory -ErrorAction SilentlyContinue | ForEach-Object { $_.FullName })) {
$acct = [IO.Path]::Combine($base, 'WTF', 'Account')
if (Test-Path $acct) {
$found += Get-ChildItem -Path $acct -Directory -ErrorAction SilentlyContinue |
ForEach-Object { [IO.Path]::Combine($_.FullName, 'SavedVariables', 'Olympus.lua') } |
Where-Object { Test-Path $_ }
}
}
}
$found | Select-Object -Unique
}
$state = @{}
if (Test-Path $stateFile) { try { (Get-Content $stateFile -Raw | ConvertFrom-Json).psobject.Properties | ForEach-Object { $state[$_.Name] = $_.Value } } catch {} }
function Send-File($path) {
# WoW writes the file at logout; wait until its size stops changing.
$size = -1
for ($i = 0; $i -lt 10; $i++) { $now = (Get-Item $path).Length; if ($now -eq $size) { break }; $size = $now; Start-Sleep -Seconds 2 }
$headers = @{ 'x-onn-token' = $config.token; 'x-onn-source' = $source }
$r = Invoke-RestMethod -Method Post -Uri $config.url -Headers $headers -InFile $path -ContentType 'text/plain; charset=utf-8' -TimeoutSec 120
Log ("uploaded {0}: {1} guild reports, {2} tabard inspections" -f $path, $r.guilds, $r.players)
}
Log "ONN uploader started ($source)"
$lastScan = [DateTime]::MinValue
$files = @()
while ($true) {
if (((Get-Date) - $lastScan).TotalMinutes -ge 10 -or -not $files) {
$files = @(Find-SavedFiles)
$lastScan = Get-Date
if (-not $files) { Log 'No Olympus.lua found yet. Is the Olympus Guild addon installed, and have you logged in once?' }
}
foreach ($f in $files) {
try {
$stamp = 'ticks:' + (Get-Item $f).LastWriteTimeUtc.Ticks
if ([string]$state[$f] -ne $stamp) {
Send-File $f
$state[$f] = $stamp
($state | ConvertTo-Json) | Set-Content -Path $stateFile
}
} catch { Log ("upload failed for {0}: {1}" -f $f, $_.Exception.Message) }
}
if ($Once) { break }
Start-Sleep -Seconds 20
}
uninstall.cmd4 lines
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0uninstall.ps1"
pause
uninstall.ps17 lines
$lnk = Join-Path ([Environment]::GetFolderPath('Startup')) 'ONN Uploader.lnk'
Remove-Item $lnk -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process -Filter "Name='powershell.exe'" |
Where-Object { $_.CommandLine -like '*onn-uploader.ps1*' } |
ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
Write-Host 'ONN uploader removed.'
SHA-256 of onn-uploader.zip: feeeeac9fd56cc4eef380d4bf6a417b59d6f59875c4037209cef42444e4556d3
Download without a key (.zip, 8 KB)
2. Request your upload key
Keys are personal and approved by the officers, so a bad upload can be switched off without affecting anyone else. After you submit, you'll get a private link: bookmark it. Once approved, that link gives you the uploader with your key already filled in.
3. Install
1. Download your personal .zip from your claim link.
2. Right-click the .zip, choose Properties, tick Unblock, then OK (this stops Windows from warning about downloaded scripts).
3. Extract it anywhere, for example your Documents folder.
4. Double-click install.cmd. It sends your file once, then runs in the background and starts with Windows.
You need the Olympus Guild addon installed and to have logged in once. The log is uploader.log in the same folder.