55 lines
1.6 KiB
Nix
55 lines
1.6 KiB
Nix
{ lib, ... }:
|
|
|
|
{
|
|
name = "zipline";
|
|
meta.maintainers = with lib.maintainers; [ defelo ];
|
|
|
|
nodes.machine = {
|
|
services.zipline = {
|
|
enable = true;
|
|
settings = {
|
|
CORE_HOSTNAME = "127.0.0.1";
|
|
CORE_PORT = 8000;
|
|
};
|
|
environmentFiles = [
|
|
(builtins.toFile "zipline.env" ''
|
|
CORE_SECRET=DMlouex3W0QLRbVwkUafNnNws5jpgRDX
|
|
'')
|
|
];
|
|
};
|
|
|
|
networking.hosts."127.0.0.1" = [ "zipline.local" ];
|
|
};
|
|
|
|
interactive.nodes.machine = {
|
|
services.zipline.settings.CORE_HOSTNAME = lib.mkForce "0.0.0.0";
|
|
networking.firewall.allowedTCPPorts = [ 8000 ];
|
|
virtualisation.forwardPorts = [
|
|
{
|
|
from = "host";
|
|
host.port = 8000;
|
|
guest.port = 8000;
|
|
}
|
|
];
|
|
};
|
|
|
|
testScript = ''
|
|
import json
|
|
import re
|
|
|
|
machine.wait_for_unit("zipline.service")
|
|
machine.wait_for_open_port(8000)
|
|
|
|
resp = machine.succeed("curl zipline.local:8000/api/setup -v -X POST -H 'Content-Type: application/json' -d '{\"username\": \"administrator\", \"password\": \"password\"}' 2>&1")
|
|
data = json.loads(resp.splitlines()[-1])
|
|
assert data["firstSetup"] is True
|
|
assert data["user"]["username"] == "administrator"
|
|
assert data["user"]["role"] == "SUPERADMIN"
|
|
|
|
resp = machine.succeed("curl zipline.local:8000/api/auth/login -v -X POST -H 'Content-Type: application/json' -d '{\"username\": \"administrator\", \"password\": \"password\"}' 2>&1")
|
|
|
|
assert (cookie := re.search(r"(?m)^< set-cookie: ([^;]*)", resp))
|
|
resp = machine.succeed(f"curl zipline.local:8000/api/user -H 'Cookie: {cookie[1]}'")
|
|
assert json.loads(resp)["user"]["id"] == data["user"]["id"]
|
|
'';
|
|
}
|