diff options
Diffstat (limited to 'nixpkgs/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix')
-rw-r--r-- | nixpkgs/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix b/nixpkgs/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix new file mode 100644 index 000000000000..5c387700a5d5 --- /dev/null +++ b/nixpkgs/nixos/modules/services/web-servers/apache-httpd/limesurvey.nix @@ -0,0 +1,196 @@ +{ config, lib, pkgs, serverInfo, ... }: + +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" '' + <?php + $config = array(); + $config['name'] = "${config.siteName}"; + $config['runtimePath'] = "${config.dataDir}/tmp/runtime"; + $config['components'] = array(); + $config['components']['db'] = array(); + $config['components']['db']['connectionString'] = '${config.dbType}:host=${config.dbHost};port=${toString config.dbPort};user=${config.dbUser};password=${config.dbPassword};dbname=${config.dbName};'; + $config['components']['db']['username'] = '${config.dbUser}'; + $config['components']['db']['password'] = '${config.dbPassword}'; + $config['components']['db']['charset'] = 'utf-8'; + $config['components']['db']['tablePrefix'] = "prefix_"; + $config['components']['assetManager'] = array(); + $config['components']['assetManager']['basePath'] = '${config.dataDir}/tmp/assets'; + $config['config'] = array(); + $config['config']['debug'] = 1; + $config['config']['tempdir'] = "${config.dataDir}/tmp"; + $config['config']['tempdir'] = "${config.dataDir}/tmp"; + $config['config']['uploaddir'] = "${config.dataDir}/upload"; + $config['config']['force_ssl'] = '${if config.forceSSL then "on" else ""}'; + $config['config']['defaultlang'] = '${config.defaultLang}'; + return $config; + ?> + ''; + + limesurveyRoot = "${pkgs.limesurvey}/share/limesurvey/"; + +in rec { + + extraConfig = '' + Alias ${config.urlPrefix}/tmp ${config.dataDir}/tmp + + <Directory ${config.dataDir}/tmp> + ${allGranted} + Options -Indexes +FollowSymlinks + </Directory> + + Alias ${config.urlPrefix}/upload ${config.dataDir}/upload + + <Directory ${config.dataDir}/upload> + ${allGranted} + Options -Indexes + </Directory> + + ${if config.urlPrefix != "" then '' + Alias ${config.urlPrefix} ${limesurveyRoot} + '' else '' + RewriteEngine On + RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f + RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d + ''} + + <Directory ${limesurveyRoot}> + DirectoryIndex index.php + </Directory> + ''; + + 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 Limesurvey 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 + ''; +} |