X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=modules%2Fprivate%2Fsystem%2Fquatresaisons.nix;fp=modules%2Fprivate%2Fsystem%2Fquatresaisons.nix;h=395b604f3ce9b3067d3cf9026a94aafe1e20280f;hb=75489e72e379af8aeac64bc4967717d9ae776ff0;hp=0000000000000000000000000000000000000000;hpb=e43fdf341072e4a0150324196fc7af8f383860ec;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/modules/private/system/quatresaisons.nix b/modules/private/system/quatresaisons.nix new file mode 100644 index 0000000..395b604 --- /dev/null +++ b/modules/private/system/quatresaisons.nix @@ -0,0 +1,449 @@ +{ privateFiles }: +{ config, pkgs, lib, ... }: +let + serverSpecificConfig = config.myEnv.serverSpecific.quatresaisons; + yarnModules = pkgs.yarn2nix-moretea.mkYarnModules rec { + name = "landing"; + pname = name; + version = "v1.0.0"; + packageJSON = "${pkgs.sources.webapps-landing}/package.json"; + yarnLock = "${pkgs.sources.webapps-landing}/yarn.lock"; + yarnNix = ../websites/tools/tools/landing/yarn-packages.nix; + }; + toLanding = landingConfig: pkgs.stdenv.mkDerivation rec { + pname = "landing"; + version = "v1.0.0"; + src = pkgs.sources.webapps-landing; + + buildInputs = [ yarnModules pkgs.yarn2nix-moretea.yarn ]; + configurePhase = '' + ln -s ${yarnModules}/node_modules . + ''; + buildPhase = '' + yarn build + ''; + installPhase = '' + cp -a dist $out + cp -f ${landingConfig} $out/config.yml + ln -s service-worker.js $out/worker.js + ''; + }; + normalUsers = serverSpecificConfig.users; + sponsoredUser = pkgs.writeScriptBin "sponsored_user" '' + #!/usr/bin/env bash + + set -euo pipefail + [ -z "''${SUDO_USER+x}" ] && echo "Must be run with sudo" && exit 1 + + mygroup=$(id -ng $SUDO_USER) + + sponsored=$(getent group $mygroup | cut -d':' -f4) + + echo "Sponsored users: ''${sponsored:-}" + + log () { + touch /var/log/sponsored_users + chmod go-rwx /var/log/sponsored_users + echo "`date` $mygroup $1" | LANG=C cat -v | tr '\012' ' ' | sed 's:$:\x0a:' >> /var/log/sponsored_users + } + + create_user () { + log "creates $1: $2" + useradd -m -G users,$mygroup -g $mygroup -p '!' "$1" + touch /var/lib/nixos/sponsored_users + chmod go-rwx /var/lib/nixos/sponsored_users + echo "$mygroup $1 $2" >> /var/lib/nixos/sponsored_users + (${pkgs.openldap}/bin/ldapadd -c -D cn=root,dc=salle-s,dc=org \ + -y /var/secrets/ldap/sync_password 2>/dev/null >/dev/null || true) </dev/null >/dev/null || true + + # Remove obsolete users + ${pkgs.openldap}/bin/ldapsearch -LLL ${com} -s one -b "ou=users,dc=salle-s,dc=org" "uid" |\ + grep "^uid" | ${pkgs.gnused}/bin/sed -e "s/uid: //" | while read ldapuser; do + + for user in ${builtins.concatStringsSep " " (builtins.attrNames normalUsers)}; do + if [ "$user" = "$ldapuser" ]; then + continue 2 + fi + done + ${pkgs.openldap}/bin/ldapdelete -r ${com} uid=$ldapuser,ou=users,dc=salle-s,dc=org + done + + # Subusers + if [ -f /var/lib/nixos/sponsored_users ]; then + cat /var/lib/nixos/sponsored_users | while read mainUser subUser name; do + (${pkgs.openldap}/bin/ldapadd -c ${com} 2>/dev/null >/dev/null || true) <s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost + Protocols h2 http/1.1 + AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript + '' ]; + ips = + let ips = config.hostEnv.ips.main; + in [ips.ip4] ++ (ips.ip6 or []); + + fallbackVhost = { + certName = "quatresaisons"; + hosts = [ "quatresaisons.immae.eu" ]; + root = pkgs.runCommand "empty" {} "mkdir $out && touch $out/index.html"; + extraConfig = [ "DirectoryIndex index.html" ]; + }; + vhostConfs.salle-s = { + certName = "quatresaisons"; + addToCerts = true; + hosts = [ "salle-s.org" ]; + root = toLanding ./quatresaisons/landing.yml; + extraConfig = [ + '' + + AllowOverride None + Require all granted + DirectoryIndex index.html + + '' + ]; + }; + vhostConfs.tools = { + certName = "quatresaisons"; + addToCerts = true; + hosts = [ "4c.salle-s.org" "quatresaisons.salle-s.org" "quatre-saisons.salle-s.org" ]; + root = toLanding ./quatresaisons/landing_4c.yml; + extraConfig = [ + '' + Alias /charte ${serverSpecificConfig.charte_path} + + AllowOverride None + Require all granted + DirectoryIndex index.html index.txt + + + + AllowOverride None + Require all granted + DirectoryIndex index.html + + '' + ]; + }; + }; + system.activationScripts.httpd = '' + install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php + install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions + ''; + + services.phpfpm = { + phpOptions = '' + session.save_path = "/var/lib/php/sessions" + post_max_size = 20M + ; 15 days (seconds) + session.gc_maxlifetime = 1296000 + ; 30 days (minutes) + session.cache_expire = 43200 + ''; + settings = { + log_level = "notice"; + }; + }; + +}