85 lines
1.8 KiB
Nix
85 lines
1.8 KiB
Nix
{
|
|
lib,
|
|
stdenvNoCC,
|
|
hiawatha,
|
|
curl,
|
|
mbedtls,
|
|
enableTls,
|
|
}:
|
|
|
|
stdenvNoCC.mkDerivation {
|
|
name = "hiawatha-test";
|
|
|
|
nativeBuildInputs = [
|
|
hiawatha
|
|
curl
|
|
] ++ lib.optional enableTls mbedtls;
|
|
|
|
env = {
|
|
inherit enableTls;
|
|
};
|
|
|
|
buildCommand = ''
|
|
cp -r --no-preserve=mode ${hiawatha}/etc/hiawatha config
|
|
sed "1i set TEST_DIR = $(pwd)" $serverConfigPath > config/hiawatha.conf
|
|
|
|
mkdir www
|
|
echo "it works" > www/index.html
|
|
|
|
if [ -n "$enableTls" ]; then
|
|
echo "Generating self-signed certificate"
|
|
gen_key type=ec filename=server.key
|
|
cert_write selfsign=1 issuer_key=server.key output_file=server.crt
|
|
cat server.crt server.key > config/server.crt
|
|
fi
|
|
|
|
echo "Checking server configuration"
|
|
hiawatha -c ./config -k
|
|
|
|
echo "Starting server"
|
|
hiawatha -c ./config
|
|
|
|
testUrl() {
|
|
echo "Testing $1"
|
|
curl --verbose --insecure --fail "$1" | tee response
|
|
grep -q "it works" response
|
|
}
|
|
|
|
testUrl http://127.0.0.1:8000
|
|
if [ -n "$enableTls" ]; then
|
|
testUrl https://127.0.0.1:8443
|
|
fi
|
|
|
|
touch $out
|
|
'';
|
|
|
|
serverConfig = ''
|
|
# By default the server uses read-only directories like /var/lib and /etc
|
|
WorkDirectory = TEST_DIR
|
|
PIDfile = TEST_DIR/hiawatha.pid
|
|
SystemLogfile = TEST_DIR/system.log
|
|
GarbageLogfile = TEST_DIR/garbage.log
|
|
ExploitLogfile = TEST_DIR/exploit.log
|
|
AccessLogfile = TEST_DIR/access.log
|
|
ErrorLogfile = TEST_DIR/error.log
|
|
|
|
Binding {
|
|
Interface = 127.0.0.1
|
|
Port = 8000
|
|
}
|
|
|
|
${lib.optionalString enableTls ''
|
|
Binding {
|
|
Interface = 127.0.0.1
|
|
Port = 8443
|
|
TLScertFile = TEST_DIR/config/server.crt
|
|
}
|
|
''}
|
|
|
|
Hostname = 127.0.0.1
|
|
WebsiteRoot = TEST_DIR/www
|
|
StartFile = index.html
|
|
'';
|
|
|
|
passAsFile = [ "serverConfig" ];
|
|
}
|