···
9
+
# Host1 is a fresh install of tuwunel
11
+
services.matrix-tuwunel = {
15
+
address = [ "0.0.0.0" ];
16
+
allow_registration = true;
17
+
yes_i_am_very_very_sure_i_want_an_open_registration_server_prone_to_abuse = true;
19
+
extraEnvironment.RUST_BACKTRACE = "yes";
21
+
networking.firewall.allowedTCPPorts = [ 6167 ];
24
+
# Host2 was upgraded from the matrix-conduit service
26
+
users.users.conduit = {
28
+
home = "/var/lib/matrix-conduit";
29
+
isSystemUser = true;
31
+
users.groups.conduit = { };
32
+
services.matrix-tuwunel = {
36
+
stateDirectory = "matrix-conduit";
39
+
address = [ "0.0.0.0" ];
40
+
allow_registration = true;
41
+
yes_i_am_very_very_sure_i_want_an_open_registration_server_prone_to_abuse = true;
43
+
extraEnvironment.RUST_BACKTRACE = "yes";
45
+
networking.firewall.allowedTCPPorts = [ 6167 ];
51
+
environment.systemPackages = [
52
+
(pkgs.writers.writePython3Bin "do_test" { libraries = [ pkgs.python3Packages.matrix-nio ]; } ''
58
+
async def main(host) -> None:
60
+
client = nio.AsyncClient(f"http://{host}:6167", "alice")
62
+
# Register as user alice
63
+
response = await client.register("alice", "my-secret-password")
65
+
# Log in as user alice
66
+
response = await client.login("my-secret-password")
69
+
response = await client.room_create(federate=False)
70
+
print("Matrix room create response:", response)
71
+
assert isinstance(response, nio.RoomCreateResponse)
72
+
room_id = response.room_id
75
+
response = await client.join(room_id)
76
+
print("Matrix join response:", response)
77
+
assert isinstance(response, nio.JoinResponse)
79
+
# Send a message to the room
80
+
response = await client.room_send(
82
+
message_type="m.room.message",
84
+
"msgtype": "m.text",
85
+
"body": "Hello matrix!"
88
+
print("Matrix room send response:", response)
89
+
assert isinstance(response, nio.RoomSendResponse)
92
+
response = await client.sync(timeout=30000)
93
+
print("Matrix sync response:", response)
94
+
assert isinstance(response, nio.SyncResponse)
96
+
# Check the message was received by server
97
+
last_message = response.rooms.join[room_id].timeline.events[-1].body
98
+
assert last_message == "Hello matrix!"
101
+
response = await client.room_leave(room_id)
102
+
print("Matrix room leave response:", response)
103
+
assert isinstance(response, nio.RoomLeaveResponse)
106
+
await client.close()
109
+
if __name__ == "__main__":
110
+
asyncio.run(main(sys.argv[1]))
119
+
with subtest("start tuwunel on host1"):
120
+
host1.wait_for_unit("tuwunel.service")
121
+
host1.wait_for_open_port(6167)
123
+
with subtest("start tuwunel on host2"):
124
+
host1.wait_for_unit("tuwunel.service")
125
+
host1.wait_for_open_port(6167)
127
+
with subtest("ensure messages can be sent to servers"):
128
+
client.succeed("do_test host1 >&2")
129
+
client.succeed("do_test host2 >&2")
132
+
meta.maintainers = with lib.maintainers; [