#!/bin/sh
set -eu

# Patch soju to support a hostname-cloak config directive.
# When set, downstream connections display the cloak value
# in whois instead of the connecting client's IP address.
#
# Targets soju master branch (post-v0.8.0) where Config embeds
# config.BasicServer, so adding a field to BasicServer makes it
# available via srv.Config().HostnameCloak.

cd /src

# 1. config/config.go: add HostnameCloak to BasicServer struct
sed -i '/Hostname .*string$/a\
\tHostnameCloak             string' config/config.go

# 2. config/config.go: add HostnameCloak to raw parsing struct
sed -i '/scfg:"hostname"/a\
\tHostnameCloak string \x60scfg:"hostname-cloak"\x60' config/config.go

# 3. config/config.go: parse HostnameCloak in Load()
sed -i '/srv\.Hostname = raw\.Hostname/{
N
N
a\
\tif raw.HostnameCloak != "" {\
\t\tsrv.HostnameCloak = raw.HostnameCloak\
\t}
}' config/config.go

# 4. downstream.go: use cloak for hostname when configured
sed -i '/if host, _, err := net\.SplitHostPort(remoteAddr)/c\
\tif cloak := dc.srv.Config().HostnameCloak; cloak != "" {\
\t\tdc.hostname = cloak\
\t} else if host, _, err := net.SplitHostPort(remoteAddr); err == nil {' downstream.go

echo "hostname-cloak patch applied"
