Unverified Commit 83b8193b authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

Merge pull request #201780 from helsinki-systems/init/nextcloud-notify-push

nextcloud-notify-push: init at 0.5.0
parents 1cdbf440 bdb0566f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1168,6 +1168,7 @@
  ./services/web-apps/moodle.nix
  ./services/web-apps/netbox.nix
  ./services/web-apps/nextcloud.nix
  ./services/web-apps/nextcloud-notify_push.nix
  ./services/web-apps/nexus.nix
  ./services/web-apps/nifi.nix
  ./services/web-apps/node-red.nix
+96 −0
Original line number Diff line number Diff line
{ config, options, lib, pkgs, ... }:

let
  cfg = config.services.nextcloud.notify_push;
in
{
  options.services.nextcloud.notify_push = {
    enable = lib.mkEnableOption (lib.mdDoc "Notify push");

    package = lib.mkOption {
      type = lib.types.package;
      default = pkgs.nextcloud-notify_push;
      defaultText = lib.literalMD "pkgs.nextcloud-notify_push";
      description = lib.mdDoc "Which package to use for notify_push";
    };

    socketPath = lib.mkOption {
      type = lib.types.str;
      default = "/run/nextcloud-notify_push/sock";
      description = lib.mdDoc "Socket path to use for notify_push";
    };

    logLevel = lib.mkOption {
      type = lib.types.enum [ "error" "warn" "info" "debug" "trace" ];
      default = "error";
      description = lib.mdDoc "Log level";
    };
  } // (
    lib.genAttrs [
      "dbtype"
      "dbname"
      "dbuser"
      "dbpassFile"
      "dbhost"
      "dbport"
      "dbtableprefix"
    ] (
      opt: options.services.nextcloud.config.${opt} // {
        default = config.services.nextcloud.config.${opt};
        defaultText = "config.services.nextcloud.config.${opt}";
      }
    )
  );

  config = lib.mkIf cfg.enable {
    systemd.services.nextcloud-notify_push = let
      nextcloudUrl = "http${lib.optionalString config.services.nextcloud.https "s"}://${config.services.nextcloud.hostName}";
    in {
      description = "Push daemon for Nextcloud clients";
      documentation = [ "https://github.com/nextcloud/notify_push" ];
      after = [ "phpfpm-nextcloud.service" ];
      wantedBy = [ "multi-user.target" ];
      environment = {
        NEXTCLOUD_URL = nextcloudUrl;
        SOCKET_PATH = cfg.socketPath;
        DATABASE_PREFIX = cfg.dbtableprefix;
        LOG = cfg.logLevel;
      };
      postStart = ''
        ${config.services.nextcloud.occ}/bin/nextcloud-occ notify_push:setup ${nextcloudUrl}/push
      '';
      script = let
        dbType = if cfg.dbtype == "pgsql" then "postgresql" else cfg.dbtype;
        dbUser = lib.optionalString (cfg.dbuser != null) cfg.dbuser;
        dbPass = lib.optionalString (cfg.dbpassFile != null) ":$DATABASE_PASSWORD";
        isSocket = lib.hasPrefix "/" (toString cfg.dbhost);
        dbHost = lib.optionalString (cfg.dbhost != null) (if
          isSocket then
            if dbType == "postgresql" then "?host=${cfg.dbhost}" else
            if dbType == "mysql" then "?socket=${cfg.dbhost}" else throw "unsupported dbtype"
          else
            "@${cfg.dbhost}");
        dbName = lib.optionalString (cfg.dbname != null) "/${cfg.dbname}";
        dbUrl = "${dbType}://${dbUser}${dbPass}${lib.optionalString (!isSocket) dbHost}${dbName}${lib.optionalString isSocket dbHost}";
      in lib.optionalString (dbPass != "") ''
        export DATABASE_PASSWORD="$(<"${cfg.dbpassFile}")"
      '' + ''
        export DATABASE_URL="${dbUrl}"
        ${cfg.package}/bin/notify_push --glob-config '${config.services.nextcloud.datadir}/config/config.php'
      '';
      serviceConfig = {
        User = "nextcloud";
        Group = "nextcloud";
        RuntimeDirectory = [ "nextcloud-notify_push" ];
        Restart = "on-failure";
        RestartSec = "5s";
      };
    };

    services.nginx.virtualHosts.${config.services.nextcloud.hostName}.locations."^~ /push/" = {
      proxyPass = "http://unix:${cfg.socketPath}";
      proxyWebsockets = true;
      recommendedProxySettings = true;
    };
  };
}
+12 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ in {
    # The only thing the client needs to do is download a file.
    client = { ... }: {};

    nextcloud = { config, pkgs, ... }: {
    nextcloud = { config, pkgs, lib, ... }: {
      networking.firewall.allowedTCPPorts = [ 80 ];

      services.nextcloud = {
@@ -34,6 +34,15 @@ in {
          adminpassFile = toString (pkgs.writeText "admin-pass-file" ''
            ${adminpass}
          '');
          trustedProxies = [ "::1" ];
        };
        notify_push = {
          enable = true;
          logLevel = "debug";
        };
        extraAppsEnable = true;
        extraApps = {
          inherit (pkgs."nextcloud${lib.versions.major config.services.nextcloud.package.version}Packages".apps) notify_push;
        };
      };

@@ -94,8 +103,10 @@ in {
        "${withRcloneEnv} ${copySharedFile}"
    )
    client.wait_for_unit("multi-user.target")
    client.execute("${pkgs.nextcloud-notify_push.passthru.test_client}/bin/test_client http://nextcloud ${adminuser} ${adminpass} >&2 &")
    client.succeed(
        "${withRcloneEnv} ${diffSharedFile}"
    )
    nextcloud.wait_until_succeeds("journalctl -u nextcloud-notify_push | grep -q \"Sending ping to ${adminuser}\"")
  '';
})) args
+41 −0
Original line number Diff line number Diff line
{ lib, fetchFromGitHub, fetchpatch, rustPlatform }:

rustPlatform.buildRustPackage rec {
  pname = "notify_push";
  version = "0.5.0";

  src = fetchFromGitHub {
    owner = "nextcloud";
    repo = pname;
    rev = "v${version}";
    hash = "sha256-LkC2mD3klMQRF3z5QuVPcRHzz33VJP+UcN6LxsQXq7Q=";
  };

  cargoHash = "sha256-GZikXM3AvhC2gtwE2wYbGV+aRV+QKothWQG17Vzi2Lc=";

  passthru = {
    test_client = rustPlatform.buildRustPackage {
      pname = "${pname}-test_client";
      inherit src version;

      cargoPatches = [
        # fix test client not being able to connect
        (fetchpatch {
          url = "https://github.com/nextcloud/notify_push/commit/03aa38d917bfcba4d07f72b6aedac6a5057cad81.patch";
          hash = "sha256-dcN62tA05HH1RTvG0puonJjKMQn1EouA8iuz82vh2aU=";
        })
      ];

      buildAndTestSubdir = "test_client";

      cargoHash = "sha256-RALqjI6DlWmfgKvyaH4RiSyqWsIqUyY9f709hOi2ldc=";
    };
  };

  meta = with lib; {
    description = "Update notifications for nextcloud clients";
    homepage = "https://github.com/nextcloud/notify_push";
    license = licenses.agpl3Plus;
    maintainers = with maintainers; [ ajs124 ];
  };
}
+10 −0
Original line number Diff line number Diff line
@@ -129,6 +129,16 @@
      "agpl"
    ]
  },
  "notify_push": {
    "sha256": "1raxkzdcd9mixg30ifv22lzf10j47n79n05yqbf6mjagrgj0rr7f",
    "url": "https://github.com/nextcloud/notify_push/releases/download/v0.5.0/notify_push.tar.gz",
    "version": "0.5.0",
    "description": "Push update support for desktop app.\n\nOnce the app is installed, the push binary needs to be setup. You can either use the setup wizard with `occ notify_push:setup` or see the [README](http://github.com/nextcloud/notify_push) for detailed setup instructions",
    "homepage": "",
    "licenses": [
      "agpl"
    ]
  },
  "onlyoffice": {
    "sha256": "6117b7b8c5c7133975e4ebf482814cdcd3f94a1b3c76ea1b5eed47bdd1fbfcbb",
    "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v7.5.8/onlyoffice.tar.gz",
Loading