mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-12 02:36:39 +01:00
124 lines
3.6 KiB
Nix
124 lines
3.6 KiB
Nix
{ ... }:
|
|
|
|
let
|
|
cert =
|
|
pkgs:
|
|
pkgs.runCommand "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
|
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 365 \
|
|
-subj '/C=GB/CN=example.com/CN=uploads.example.com/CN=conference.example.com' -addext "subjectAltName = DNS:example.com,DNS:uploads.example.com,DNS:conference.example.com"
|
|
mkdir -p $out
|
|
cp key.pem cert.pem $out
|
|
'';
|
|
|
|
# Creates and set password for the 2 xmpp test users.
|
|
#
|
|
# Doing that in a bash script instead of doing that in the test
|
|
# script allow us to easily provision the users when running that
|
|
# test interactively.
|
|
createUsers =
|
|
pkgs:
|
|
pkgs.writeShellScriptBin "create-prosody-users" ''
|
|
set -e
|
|
prosodyctl register cthon98 example.com nothunter2
|
|
prosodyctl register azurediamond example.com hunter2
|
|
'';
|
|
# Deletes the test users.
|
|
delUsers =
|
|
pkgs:
|
|
pkgs.writeShellScriptBin "delete-prosody-users" ''
|
|
set -e
|
|
prosodyctl deluser cthon98@example.com
|
|
prosodyctl deluser azurediamond@example.com
|
|
'';
|
|
in
|
|
{
|
|
name = "prosody";
|
|
nodes = {
|
|
client-a =
|
|
{ nodes, pkgs, ... }:
|
|
{
|
|
security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
|
|
networking.extraHosts = ''
|
|
${nodes.server.networking.primaryIPAddress} example.com
|
|
'';
|
|
|
|
imports = [ ./go-sendxmpp-listen.nix ];
|
|
};
|
|
|
|
client-b =
|
|
{
|
|
nodes,
|
|
pkgs,
|
|
...
|
|
}:
|
|
{
|
|
security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
|
|
networking.extraHosts = ''
|
|
${nodes.server.networking.primaryIPAddress} example.com
|
|
${nodes.server.networking.primaryIPAddress} conference.example.com
|
|
${nodes.server.networking.primaryIPAddress} uploads.example.com
|
|
'';
|
|
environment.systemPackages = [
|
|
(pkgs.callPackage ./xmpp-sendmessage.nix { connectTo = "example.com"; })
|
|
];
|
|
};
|
|
|
|
server =
|
|
{ config, pkgs, ... }:
|
|
{
|
|
security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
|
|
networking.extraHosts = ''
|
|
${config.networking.primaryIPAddress} example.com
|
|
${config.networking.primaryIPAddress} conference.example.com
|
|
${config.networking.primaryIPAddress} uploads.example.com
|
|
'';
|
|
networking.firewall.enable = false;
|
|
environment.systemPackages = [
|
|
(createUsers pkgs)
|
|
(delUsers pkgs)
|
|
];
|
|
services.prosody = {
|
|
enable = true;
|
|
ssl.cert = "${cert pkgs}/cert.pem";
|
|
ssl.key = "${cert pkgs}/key.pem";
|
|
virtualHosts.example = {
|
|
domain = "example.com";
|
|
enabled = true;
|
|
ssl.cert = "${cert pkgs}/cert.pem";
|
|
ssl.key = "${cert pkgs}/key.pem";
|
|
};
|
|
muc = [
|
|
{
|
|
domain = "conference.example.com";
|
|
}
|
|
];
|
|
httpFileShare = {
|
|
domain = "uploads.example.com";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = _: ''
|
|
# Check with sqlite storage
|
|
start_all()
|
|
server.wait_for_unit("prosody.service")
|
|
server.succeed('prosodyctl status | grep "Prosody is running"')
|
|
|
|
server.succeed("create-prosody-users")
|
|
|
|
for machine in client_a, client_b:
|
|
machine.systemctl("start network-online.target")
|
|
machine.wait_for_unit("network-online.target")
|
|
|
|
client_a.wait_for_unit("go-sendxmpp-listen")
|
|
client_b.succeed("send-message")
|
|
|
|
client_a.wait_until_succeeds(
|
|
"journalctl -o cat -u go-sendxmpp-listen.service | grep 'cthon98@example.com: Hello, this is dog.'"
|
|
)
|
|
|
|
server.succeed("delete-prosody-users")
|
|
'';
|
|
}
|