]> Git — Sourcephile - sourcephile-nix.git/blob - machines/losurdo/prosody.nix
prosody: wrap up coturn tests
[sourcephile-nix.git] / machines / losurdo / prosody.nix
1 { pkgs, lib, config, machines, ... }:
2 let
3 inherit (builtins.extraBuiltins) pass-chomp;
4 inherit (config) networking;
5 inherit (config.services) prosody;
6 inherit (machines.mermet.config.services) coturn;
7 in
8 {
9 imports = [
10 #prosody/biboumi.nix
11 ];
12 networking.nftables.ruleset = ''
13 add rule inet filter net2fw tcp dport {5222,5269} counter accept comment "XMPP"
14 add rule inet filter net2fw tcp dport 5000 counter accept comment "XMPP XEP-0065 File Transfer Proxy"
15 add rule inet filter net2fw tcp dport {${lib.concatMapStringsSep "," toString prosody.httpsPorts}} counter accept comment "XMPP HTTPS"
16 add rule inet filter fw2net meta skuid ${prosody.user} counter accept comment "Prosody"
17 '';
18 users.groups.acme.members = [ prosody.user ];
19 security.acme.certs."${networking.domain}" = {
20 postRun = "systemctl reload prosody";
21 };
22 systemd.services.prosody = {
23 wants = [ "acme-selfsigned-${networking.domain}.service" "acme-${networking.domain}.service"];
24 after = [ "acme-selfsigned-${networking.domain}.service" ];
25 };
26 # sudo -u prosody prosodyctl check
27 services.prosody = {
28 enable = true;
29 xmppComplianceSuite = true;
30 modules = {
31 announce = true;
32 cloud_notify = true;
33 groups = true;
34 limits = false;
35 motd = true;
36 watchregistrations = true;
37 websocket = false;
38 welcome = true;
39 proxy65 = false;
40 };
41 extraModules = [
42 "turncredentials"
43 #"net_multiplex"
44 #"extdisco"
45 ];
46 extraConfig = ''
47 turncredentials_host = "turn.${networking.domain}"
48 turncredentials_secret = "${pass-chomp "machines/mermet/coturn/static-auth-secret"}"
49 turncredentials_port = 3478
50
51 --external_services = {
52 -- ["turn.${networking.domain}"] = {
53 -- type="stun";
54 -- transport="udp";
55 -- port="${toString coturn.alt-listening-port}";
56 -- };
57 -- ["turn.${networking.domain}"] = {
58 -- type="turn";
59 -- transport="udp";
60 -- port="${toString coturn.listening-port}";
61 -- username="xmpp-user";
62 -- password="base64.encode(hmac_sha1(\"${pass-chomp "machines/mermet/coturn/static-auth-secret"}\", "xmpp-user", false))";
63 -- };
64 --}
65
66 --http_files_dir = "/var/lib/prosody/files"
67 --http_external_url = "https://tmp.${networking.domain}:5281"
68 --https_certificate = "/var/lib/acme/${networking.domain}/fullchain.pem"
69 --https_key = "/var/lib/acme/${networking.domain}/key.pem"
70 --certificates = "/var/lib/acme"
71
72 proxy65_ports = 5000
73 Component "proxy65.${networking.domain}" "proxy65"
74 proxy65_address = "proxy65.${networking.domain}"
75 proxy65_acl = { "${networking.domain}" }
76
77 -- Component "irc.${networking.domain}"
78 -- component_secret = "useless-secret-on-loopback"
79 '';
80 #ports = {80};
81 #ssl_ports = {443};
82 c2sRequireEncryption = true;
83 s2sRequireEncryption = true;
84 s2sSecureAuth = true;
85 uploadHttp = {
86 domain = "tmp.${networking.domain}";
87 # Prosody's HTTP parser limit on body size
88 uploadFileSizeLimit = "10485760";
89 userQuota = 100 * 1024 * 1024;
90 uploadExpireAfter = "60 * 60 * 24 * 7";
91 httpUploadPath = "/var/lib/prosody/upload";
92 };
93 muc = [
94 { domain = "salons.${networking.domain}";
95 extraConfig = ''
96 restrict_room_creation = "local"
97 max_history_messages = 42
98 muc_room_locking = true
99 muc_room_lock_timeout = 600
100 muc_tombstones = true
101 muc_tombstone_expiry = 31 * 24 * 60 * 60
102 muc_room_default_public = true
103 muc_room_default_members_only = false
104 muc_room_default_moderated = true
105 muc_room_default_public_jids = false
106 muc_room_default_change_subject = true
107 muc_room_default_history_length = 42
108 muc_room_default_language = "fr"
109 '';
110 }
111 ];
112 ssl.key = "/var/lib/acme/${networking.domain}/key.pem";
113 ssl.cert = "/var/lib/acme/${networking.domain}/fullchain.pem";
114 admins = [
115 "julm@${networking.domain}"
116 ];
117 virtualHosts."${networking.domain}" = {
118 enabled = true;
119 domain = "${networking.domain}";
120 ssl.key = "/var/lib/acme/${networking.domain}/key.pem";
121 ssl.cert = "/var/lib/acme/${networking.domain}/fullchain.pem";
122 };
123 allowRegistration = false;
124 authentication = "internal_hashed";
125 httpPorts = [];
126 httpsPorts = [5281];
127 disco_items = [];
128 package = pkgs.prosody.override {
129 withCommunityModules = [
130 "turncredentials"
131 #"extdisco"
132 ];
133 };
134 };
135 }