diff --git a/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix b/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix new file mode 100644 index 000000000000..6f1f67970f6c --- /dev/null +++ b/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix @@ -0,0 +1,196 @@ +{ config, lib, pkgs, serverInfo, php, ... }: + +with lib; + +let + + httpd = serverInfo.serverConfig.package; + + version24 = !versionOlder httpd.version "2.4"; + + allGranted = if version24 then '' + Require all granted + '' else '' + Order allow,deny + Allow from all + ''; + + limesurveyConfig = pkgs.writeText "config.php" '' + + ''; + + limesurveyRoot = "${pkgs.limesurvey}/share/limesurvey/"; + +in rec { + + extraConfig = '' + Alias ${config.urlPrefix}/tmp ${config.dataDir}/tmp + + + ${allGranted} + Options -Indexes +FollowSymlinks + + + Alias ${config.urlPrefix}/upload ${config.dataDir}/upload + + + ${allGranted} + Options -Indexes + + + ${if config.urlPrefix != "" then '' + Alias ${config.urlPrefix} ${limesurveyRoot} + '' else '' + RewriteEngine On + RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f + RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d + ''} + + + DirectoryIndex index.php + + ''; + + globalEnvVars = [ + { name = "LIMESURVEY_CONFIG"; value = limesurveyConfig; } + ]; + + documentRoot = if config.urlPrefix == "" then limesurveyRoot else null; + + enablePHP = true; + + options = { + + id = mkOption { + default = "main"; + description = '' + A unique identifier necessary to keep multiple owncloud server + instances on the same machine apart. This is used to + disambiguate the administrative scripts, which get names like + mediawiki-$id-change-password. + ''; + }; + + urlPrefix = mkOption { + default = ""; + description = "Url prefix for site."; + type = types.str; + }; + + dbType = mkOption { + default = "pgsql"; + description = "Type of database for limesurvey, for now, only pgsql."; + type = types.enum ["pgsql"]; + }; + + dbName = mkOption { + default = "limesurvey"; + description = "Name of the database that holds the limesurvey data."; + type = types.str; + }; + + dbHost = mkOption { + default = "localhost"; + description = "Limesurvey database host."; + type = types.str; + }; + + dbPort = mkOption { + default = 5432; + description = "Limesurvey database port."; + type = types.int; + }; + + dbUser = mkOption { + default = "limesurvey"; + description = "Limesurvey database user."; + type = types.str; + }; + + dbPassword = mkOption { + example = "foobar"; + description = "Limesurvey database password."; + type = types.str; + }; + + adminUser = mkOption { + description = "Limesurvey admin username."; + default = "admin"; + type = types.str; + }; + + adminPassword = mkOption { + description = "Default limesurvey admin password."; + default = "admin"; + type = types.str; + }; + + adminEmail = mkOption { + description = "Limesurvey admin email."; + default = "admin@admin.com"; + type = types.str; + }; + + forceSSL = mkOption { + default = false; + description = "Force use of HTTPS connection."; + type = types.bool; + }; + + siteName = mkOption { + default = "LimeSurvey"; + description = "LimeSurvey name of the site."; + type = types.str; + }; + + defaultLang = mkOption { + default = "en"; + description = "LimeSurvey default language."; + type = types.str; + }; + + dataDir = mkOption { + default = "/var/lib/limesurvey"; + description = "LimeSurvey data directory."; + type = types.path; + }; + }; + + startupScript = pkgs.writeScript "limesurvey_startup.sh" '' + if [ ! -f ${config.dataDir}/.created ]; then + mkdir -p ${config.dataDir}/{tmp/runtime,tmp/assets,tmp/upload,upload} + chmod -R ug+rw ${config.dataDir} + chmod -R o-rwx ${config.dataDir} + chown -R wwwrun:wwwrun ${config.dataDir} + + ${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole "${config.dbUser}" || true + ${pkgs.postgresql}/bin/createdb "${config.dbName}" -O "${config.dbUser}" || true + ${pkgs.sudo}/bin/sudo -u postgres ${pkgs.postgresql}/bin/psql -U postgres -d postgres -c "alter user ${config.dbUser} with password '${config.dbPassword}';" || true + + ${pkgs.limesurvey}/bin/limesurvey-console install '${config.adminUser}' '${config.adminPassword}' '${config.adminUser}' '${config.adminEmail}' + + touch ${config.dataDir}/.created + fi + ''; +} diff --git a/pkgs/servers/limesurvey/default.nix b/pkgs/servers/limesurvey/default.nix new file mode 100644 index 000000000000..89ce5a644d80 --- /dev/null +++ b/pkgs/servers/limesurvey/default.nix @@ -0,0 +1,41 @@ +{ stdenv, lib, fetchFromGitHub, writeText, makeWrapper, php }: + +stdenv.mkDerivation rec { + name = "limesurvey-${version}"; + version = "2.05_plus_141210"; + + src = fetchFromGitHub { + owner = "LimeSurvey"; + repo = "LimeSurvey"; + rev = version; + sha256 = "1b5yixrlrjm055ag07c7phk84mk1892v20nsss1y0xzvgn6s14gq"; + }; + + buildInputs = [ makeWrapper ]; + + phpConfig = writeText "config.php" '' + + ''; + + patchPhase = '' + substituteInPlace application/core/LSYii_Application.php \ + --replace "'basePath" "//'basePath" + ''; + + installPhase = '' + mkdir -p $out/{bin,share/limesurvey} + cp -R . $out/share/limesurvey + cp ${phpConfig} $out/share/limesurvey/application/config/config.php + makeWrapper ${php}/bin/php $out/bin/limesurvey-console \ + --add-flags "$out/share/limesurvey/application/commands/console.php" + ''; + + meta = with lib; { + description = "Open source survey application"; + license = licenses.gpl2; + homepage = https://www.limesurvey.org; + maintainers = with maintainers; [offline]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bc94200c4087..0d7eaafa6cce 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1761,6 +1761,8 @@ let librdmacm = callPackage ../development/libraries/librdmacm { }; + limesurvey = callPackage ../servers/limesurvey { }; + logcheck = callPackage ../tools/system/logcheck { inherit (perlPackages) mimeConstruct; };