Skip to content
This repository was archived by the owner on Apr 12, 2021. It is now read-only.
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs-channels
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ef716bb5cf0c
Choose a base ref
...
head repository: NixOS/nixpkgs-channels
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 510fd552ebe9
Choose a head ref
  • 11 commits
  • 11 files changed
  • 4 contributors

Commits on Mar 22, 2018

  1. linux-copperhead: 4.15.11.a -> 4.15.12.a

    (cherry picked from commit b7dff1f41fec299eb4b7e09813bfd09aa52a5c5e)
    NeQuissimus committed Mar 22, 2018
    Copy the full SHA
    d011c7b View commit details
  2. linux: 4.4.122 -> 4.4.123

    (cherry picked from commit 8b18ed859285127c40a2cf90c0ad8b172b532732)
    NeQuissimus committed Mar 22, 2018
    Copy the full SHA
    bbde130 View commit details
  3. linux: 4.9.88 -> 4.9.89

    (cherry picked from commit d9e21f3270a3dcc2a67b6e20248a3f83e98dada3)
    NeQuissimus committed Mar 22, 2018
    Copy the full SHA
    d01e443 View commit details
  4. luaevent: 0.4.3 -> 0.4.4

    (cherry picked from commit 0c74665)
    florianjacob authored and globin committed Mar 22, 2018
    Copy the full SHA
    64301d0 View commit details
  5. prosody: 0.9.12 -> 0.10.0

    updating config options, removing luazlib as mod_compression was removed
    for security reasons.
    
    (cherry picked from commit 226965d)
    florianjacob authored and globin committed Mar 22, 2018
    Copy the full SHA
    7ef13f5 View commit details
  6. prosody: update community modules

    (cherry picked from commit 2c0b230)
    florianjacob authored and globin committed Mar 22, 2018
    Copy the full SHA
    05f206c View commit details
  7. nixos/prosody: add a basic test

    (cherry picked from commit 88f06c5)
    florianjacob authored and globin committed Mar 22, 2018
    Copy the full SHA
    b9084d0 View commit details
  8. prosody: improve module handling

    (cherry picked from commit 0a80f2c)
    globin committed Mar 22, 2018
    Copy the full SHA
    766a80e View commit details
  9. prosody: add test to release.nix

    (cherry picked from commit faaf32a)
    globin committed Mar 22, 2018
    Copy the full SHA
    ba11500 View commit details
  10. xcodeenv: replace deprecated package application procedure by the new…

    … export archive operation
    
    (cherry picked from commit f2bd9d4)
    svanderburg committed Mar 22, 2018
    Copy the full SHA
    d200e2c View commit details
  11. xcodeenv: publish xcarchive directory in the output store path if req…

    …uested
    
    (cherry picked from commit 112ebed)
    svanderburg committed Mar 22, 2018
    Copy the full SHA
    510fd55 View commit details
32 changes: 32 additions & 0 deletions nixos/doc/manual/release-notes/rl-1803.xml
Original file line number Diff line number Diff line change
@@ -322,6 +322,38 @@ following incompatible changes:</para>
<link xlink:href="https://github.com/rvl/pump.io-nixos">external module</link>.
</para>
</listitem>
<listitem>
<para>
The Prosody XMPP server has received a major update. The following modules were renamed:
<itemizedlist>
<listitem>
<para>
<option>services.prosody.modules.httpserver</option> is now <option>services.prosody.modules.http_files</option>
</para>
</listitem>
<listitem>
<para>
<option>services.prosody.modules.console</option> is now <option>services.prosody.modules.admin_telnet</option>
</para>
</listitem>
</itemizedlist>
</para>

<para>
Many new modules are now core modules, most notably <option>services.prosody.modules.carbons</option>
and <option>services.prosody.modules.mam</option>.
</para>

<para>
The better-performing <literal>libevent</literal> backend is now enabled by default.
</para>

<para>
<literal>withCommunityModules</literal> now passes through the modules to <option>services.prosody.extraModules</option>.
Use <literal>withOnlyInstalledCommunityModules</literal> for modules that should not be enabled directly, e.g <literal>lib_ldap</literal>.
</para>
</listitem>

</itemizedlist>

</section>
214 changes: 193 additions & 21 deletions nixos/modules/services/networking/prosody.nix
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@ let
description = "Path to the key file.";
};

# TODO: rename to certificate to match the prosody config
cert = mkOption {
type = types.path;
description = "Path to the certificate file.";
@@ -30,7 +31,7 @@ let
};

moduleOpts = {

# Generally required
roster = mkOption {
type = types.bool;
default = true;
@@ -61,12 +62,38 @@ let
description = "Service discovery";
};

legacyauth = mkOption {
# Not essential, but recommended
carbons = mkOption {
type = types.bool;
default = true;
description = "Legacy authentication. Only used by some old clients and bots";
description = "Keep multiple clients in sync";
};

pep = mkOption {
type = types.bool;
default = true;
description = "Enables users to publish their mood, activity, playing music and more";
};

private = mkOption {
type = types.bool;
default = true;
description = "Private XML storage (for room bookmarks, etc.)";
};

blocklist = mkOption {
type = types.bool;
default = true;
description = "Allow users to block communications with other users";
};

vcard = mkOption {
type = types.bool;
default = true;
description = "Allow users to set vCards";
};

# Nice to have
version = mkOption {
type = types.bool;
default = true;
@@ -91,36 +118,112 @@ let
description = "Replies to XMPP pings with pongs";
};

console = mkOption {
register = mkOption {
type = types.bool;
default = true;
description = "Allow users to register on this server using a client and change passwords";
};

mam = mkOption {
type = types.bool;
default = false;
description = "telnet to port 5582";
description = "Store messages in an archive and allow users to access it";
};

# Admin interfaces
admin_adhoc = mkOption {
type = types.bool;
default = true;
description = "Allows administration via an XMPP client that supports ad-hoc commands";
};

admin_telnet = mkOption {
type = types.bool;
default = false;
description = "Opens telnet console interface on localhost port 5582";
};

# HTTP modules
bosh = mkOption {
type = types.bool;
default = false;
description = "Enable BOSH clients, aka 'Jabber over HTTP'";
};

httpserver = mkOption {
websocket = mkOption {
type = types.bool;
default = false;
description = "Enable WebSocket support";
};

http_files = mkOption {
type = types.bool;
default = false;
description = "Serve static files from a directory over HTTP";
};

websocket = mkOption {
# Other specific functionality
limits = mkOption {
type = types.bool;
default = false;
description = "Enable WebSocket support";
description = "Enable bandwidth limiting for XMPP connections";
};

groups = mkOption {
type = types.bool;
default = false;
description = "Shared roster support";
};

server_contact_info = mkOption {
type = types.bool;
default = false;
description = "Publish contact information for this service";
};

announce = mkOption {
type = types.bool;
default = false;
description = "Send announcement to all online users";
};

welcome = mkOption {
type = types.bool;
default = false;
description = "Welcome users who register accounts";
};

watchregistrations = mkOption {
type = types.bool;
default = false;
description = "Alert admins of registrations";
};

motd = mkOption {
type = types.bool;
default = false;
description = "Send a message to users when they log in";
};

legacyauth = mkOption {
type = types.bool;
default = false;
description = "Legacy authentication. Only used by some old clients and bots";
};

proxy65 = mkOption {
type = types.bool;
default = false;
description = "Enables a file transfer proxy service which clients behind NAT can use";
};

};

toLua = x:
if builtins.isString x then ''"${x}"''
else if builtins.isBool x then toString x
else if builtins.isBool x then (if x == true then "true" else "false")
else if builtins.isInt x then toString x
else if builtins.isList x then ''{ ${lib.concatStringsSep ", " (map (n: toLua n) x) } }''
else throw "Invalid Lua value";

createSSLOptsStr = o: ''
@@ -198,6 +301,59 @@ in
description = "Allow account creation";
};

c2sRequireEncryption = mkOption {
type = types.bool;
default = true;
description = ''
Force clients to use encrypted connections? This option will
prevent clients from authenticating unless they are using encryption.
'';
};

s2sRequireEncryption = mkOption {
type = types.bool;
default = true;
description = ''
Force servers to use encrypted connections? This option will
prevent servers from authenticating unless they are using encryption.
Note that this is different from authentication.
'';
};

s2sSecureAuth = mkOption {
type = types.bool;
default = false;
description = ''
Force certificate authentication for server-to-server connections?
This provides ideal security, but requires servers you communicate
with to support encryption AND present valid, trusted certificates.
For more information see https://prosody.im/doc/s2s#security
'';
};

s2sInsecureDomains = mkOption {
type = types.listOf types.str;
default = [];
example = [ "insecure.example.com" ];
description = ''
Some servers have invalid or self-signed certificates. You can list
remote domains here that will not be required to authenticate using
certificates. They will be authenticated using DNS instead, even
when s2s_secure_auth is enabled.
'';
};

s2sSecureDomains = mkOption {
type = types.listOf types.str;
default = [];
example = [ "jabber.org" ];
description = ''
Even if you leave s2s_secure_auth disabled, you can still require valid
certificates for some domains by specifying a list here.
'';
};


modules = moduleOpts;

extraModules = mkOption {
@@ -206,6 +362,12 @@ in
description = "Enable custom modules";
};

extraPluginPaths = mkOption {
type = types.listOf types.path;
default = [];
description = "Addtional path in which to look find plugins/modules";
};

virtualHosts = mkOption {

description = "Define the virtual hosts";
@@ -255,37 +417,47 @@ in

config = mkIf cfg.enable {

environment.systemPackages = [ pkgs.prosody ];
environment.systemPackages = [ cfg.package ];

environment.etc."prosody/prosody.cfg.lua".text = ''
pidfile = "/var/lib/prosody/prosody.pid"
log = "*syslog"
data_path = "/var/lib/prosody"
allow_registration = ${boolToString cfg.allowRegistration};
${ optionalString cfg.modules.console "console_enabled = true;" }
plugin_paths = {
${lib.concatStringsSep ", " (map (n: "\"${n}\"") cfg.extraPluginPaths) }
}
${ optionalString (cfg.ssl != null) (createSSLOptsStr cfg.ssl) }
admins = { ${lib.concatStringsSep ", " (map (n: "\"${n}\"") cfg.admins) } };
admins = ${toLua cfg.admins}
-- we already build with libevent, so we can just enable it for a more performant server
use_libevent = true
modules_enabled = {
${ lib.concatStringsSep "\n\ \ " (lib.mapAttrsToList
(name: val: optionalString val ''"${name}";'')
(name: val: optionalString val "${toLua name};")
cfg.modules) }
${ lib.concatStringsSep "\n" (map (x: "${toLua x};") cfg.package.communityModules)}
${ lib.concatStringsSep "\n" (map (x: "${toLua x};") cfg.extraModules)}
};
${ optionalString cfg.allowRegistration "\"register\"\;" }
allow_registration = ${toLua cfg.allowRegistration}
${ lib.concatStringsSep "\n" (map (x: "\"${x}\";") cfg.extraModules)}
c2s_require_encryption = ${toLua cfg.c2sRequireEncryption}
s2s_require_encryption = ${toLua cfg.s2sRequireEncryption}
s2s_secure_auth = ${toLua cfg.s2sSecureAuth}
s2s_insecure_domains = ${toLua cfg.s2sInsecureDomains}
s2s_secure_domains = ${toLua cfg.s2sSecureDomains}
"posix";
};
${ cfg.extraConfig }
1 change: 1 addition & 0 deletions nixos/release.nix
Original file line number Diff line number Diff line change
@@ -344,6 +344,7 @@ in rec {
tests.predictable-interface-names = callSubTests tests/predictable-interface-names.nix {};
tests.printing = callTest tests/printing.nix {};
tests.prometheus = callTest tests/prometheus.nix {};
tests.prosody = callTest tests/prosody.nix {};
tests.proxy = callTest tests/proxy.nix {};
# tests.quagga = callTest tests/quagga.nix {};
tests.quake3 = callTest tests/quake3.nix {};
Loading