]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - nixops/modules/websites/default.nix
Allow all vhosts to read www
[perso/Immae/Config/Nix.git] / nixops / modules / websites / default.nix
index 4a6a26fae37dc2cd739fd59fbfe7fa78083c83fd..1d0c1d73cdd516b69efba74223d5687b5ec27f2c 100644 (file)
@@ -16,6 +16,23 @@ let
       documentRoot = vhostConf.root;
       extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig;
     };
+    nosslVhost = {
+      listen = [ { ip = cfg.ip; port = 80; } ];
+      hostName = "nossl.immae.eu";
+      enableSSL = false;
+      logFormat = "combinedVhost";
+      documentRoot = ../../www;
+      extraConfig = ''
+        <Directory ${../../www}>
+          DirectoryIndex nossl.html
+          AllowOverride None
+          Require all granted
+
+          RewriteEngine on
+          RewriteRule ^/(.+)   /   [L]
+        </Directory>
+        '';
+    };
     redirectVhost = { # Should go last, catchall http -> https redirect
       listen = [ { ip = cfg.ip; port = 80; } ];
       hostName = "redirectSSL";
@@ -51,6 +68,7 @@ let
     extraModules = pkgs.lib.lists.unique (pkgs.lib.lists.flatten cfg.modules);
     extraConfig = builtins.concatStringsSep "\n" cfg.extraConfig;
     virtualHosts = [ fallbackVhost ]
+      ++ lib.optionals (name == "tools") [ nosslVhost ]
       ++ (pkgs.lib.attrsets.mapAttrsToList (n: v: toVhost v) cfg.vhostConfs)
       ++ [ redirectVhost ];
   };
@@ -91,10 +109,15 @@ in
     ./piedsjaloux
     ./connexionswing
     ./tellesflorian
+    ./emilia
+    ./capitaines
     ./ftp/jerome.nix
     ./ftp/nassime.nix
     ./ftp/florian.nix
     ./ftp/denisejerome.nix
+    ./ftp/immae.nix
+    ./ftp/release.nix
+    ./ftp/temp.nix
     ./tools/db
     ./tools/tools
     ./tools/dav
@@ -195,6 +218,11 @@ in
     services.myWebsites.Nassime.production.enable = cfg.production.enable;
     services.myWebsites.Florian.production.enable = cfg.production.enable;
     services.myWebsites.DeniseJerome.production.enable = cfg.production.enable;
+    services.myWebsites.Emilia.production.enable = cfg.production.enable;
+    services.myWebsites.Capitaines.production.enable = cfg.production.enable;
+    services.myWebsites.Immae.production.enable = cfg.production.enable;
+    services.myWebsites.Release.production.enable = cfg.production.enable;
+    services.myWebsites.Temp.production.enable = cfg.production.enable;
 
     services.myWebsites.Chloe.integration.enable = cfg.integration.enable;
     services.myWebsites.Ludivine.integration.enable = cfg.integration.enable;
@@ -214,6 +242,22 @@ in
       macros = {
         modules = [ "macro" ];
       };
+      stats = {
+        extraConfig = ''
+          <Macro Stats %{domain}>
+            Alias /awstats /var/lib/goaccess/%{domain}
+            <Directory /var/lib/goaccess/%{domain}>
+              DirectoryIndex index.html
+              AllowOverride None
+              Require all granted
+            </Directory>
+            <Location /awstats>
+              Use LDAPConnect
+              Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu
+            </Location>
+          </Macro>
+        '';
+      };
       ldap = {
         modules = [ "ldap" "authnz_ldap" ];
         extraConfig = ''
@@ -235,20 +279,10 @@ in
               AuthBasicProvider    ldap
             </IfModule>
           </Macro>
-
-          <Macro Stats %{domain}>
-            Alias /awstats /var/lib/goaccess/%{domain}
-            <Directory /var/lib/goaccess/%{domain}>
-              DirectoryIndex index.html
-              AllowOverride None
-              Require all granted
-            </Directory>
-            <Location /awstats>
-              Use LDAPConnect
-              Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu
-            </Location>
-          </Macro>
-
+        '';
+      };
+      global = {
+        extraConfig = ''
           ErrorDocument 500 /maintenance_immae.html
           ErrorDocument 501 /maintenance_immae.html
           ErrorDocument 502 /maintenance_immae.html
@@ -258,6 +292,94 @@ in
           ProxyPass /maintenance_immae.html !
 
           AliasMatch "(.*)/googleb6d69446ff4ca3e5.html" ${../../www}/googleb6d69446ff4ca3e5.html
+          <Directory ${../../www}>
+            AllowOverride None
+            Require all granted
+          </Directory>
+        '';
+      };
+      apaxy = {
+        extraConfig = ''
+          <Macro Apaxy %{folder} %{ignored}>
+            Alias /theme ${./apache/theme}
+            <Directory ${./apache/theme}>
+              Options -Indexes
+              AllowOverride None
+              Require all granted
+            </Directory>
+
+            # mod_autoindex
+            <Directory %{folder}>
+              Options Indexes
+              AllowOverride None
+              Require all granted
+
+              # Inspired from Apaxy by @adamwhitcroft
+
+              IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks +ShowForbidden
+
+              IndexHeadInsert "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />"
+
+              IndexIgnoreReset ON
+              IndexIgnore /theme .htaccess %{ignored}
+
+              AddIcon /theme/icons/blank.png ^^BLANKICON^^
+              AddIcon /theme/icons/folder.png ^^DIRECTORY^^
+              AddIcon /theme/icons/folder-home.png ..
+
+              AddIconByType (TXT,/theme/icons/text.png) text/*
+              AddIconByType (IMG,/theme/icons/image.png) image/*
+              AddIconByType (SND,/theme/icons/audio.png) audio/*
+              AddIconByType (VID,/theme/icons/video.png) video/*
+
+              AddIcon /theme/icons/archive.png .7z .bz2 .cab .gz .tar
+              AddIcon /theme/icons/audio.png .aac .aif .aifc .aiff .ape .au .flac .iff .m4a .mid .mp3 .mpa .ra .wav .wma .f4a .f4b .oga .ogg .xm .it .s3m .mod
+              AddIcon /theme/icons/bin.png .bin .hex
+              AddIcon /theme/icons/bmp.png .bmp
+              AddIcon /theme/icons/c.png .c
+              AddIcon /theme/icons/calc.png .xlsx .xlsm .xltx .xltm .xlam .xlr .xls .csv
+              AddIcon /theme/icons/cd.png .iso
+              AddIcon /theme/icons/cpp.png .cpp
+              AddIcon /theme/icons/css.png .css .sass .scss
+              AddIcon /theme/icons/deb.png .deb
+              AddIcon /theme/icons/doc.png .doc .docx .docm .dot .dotx .dotm .log .msg .odt .pages .rtf .tex .wpd .wps
+              AddIcon /theme/icons/draw.png .svg .svgz
+              AddIcon /theme/icons/eps.png .ai .eps
+              AddIcon /theme/icons/exe.png .exe
+              AddIcon /theme/icons/gif.png .gif
+              AddIcon /theme/icons/h.png .h
+              AddIcon /theme/icons/html.png .html .xhtml .shtml .htm .URL .url
+              AddIcon /theme/icons/ico.png .ico
+              AddIcon /theme/icons/java.png .jar
+              AddIcon /theme/icons/jpg.png .jpg .jpeg .jpe
+              AddIcon /theme/icons/js.png .js .json
+              AddIcon /theme/icons/markdown.png .md
+              AddIcon /theme/icons/package.png .pkg .dmg
+              AddIcon /theme/icons/pdf.png .pdf
+              AddIcon /theme/icons/php.png .php .phtml
+              AddIcon /theme/icons/playlist.png .m3u .m3u8 .pls .pls8
+              AddIcon /theme/icons/png.png .png
+              AddIcon /theme/icons/ps.png .ps
+              AddIcon /theme/icons/psd.png .psd
+              AddIcon /theme/icons/py.png .py
+              AddIcon /theme/icons/rar.png .rar
+              AddIcon /theme/icons/rb.png .rb
+              AddIcon /theme/icons/rpm.png .rpm
+              AddIcon /theme/icons/rss.png .rss
+              AddIcon /theme/icons/script.png .bat .cmd .sh
+              AddIcon /theme/icons/sql.png .sql
+              AddIcon /theme/icons/tiff.png .tiff .tif
+              AddIcon /theme/icons/text.png .txt .nfo
+              AddIcon /theme/icons/video.png .asf .asx .avi .flv .mkv .mov .mp4 .mpg .rm .srt .swf .vob .wmv .m4v .f4v .f4p .ogv
+              AddIcon /theme/icons/xml.png .xml
+              AddIcon /theme/icons/zip.png .zip
+              DefaultIcon /theme/icons/default.png
+
+              HeaderName /theme/header.html
+              ReadmeName /theme/footer.html
+              IndexStyleSheet /theme/style.css
+            </Directory>
+          </Macro>
         '';
       };
       http2 = {
@@ -287,6 +409,7 @@ in
       phpPackage = pkgs.php;
       phpOptions = ''
         session.save_path = "/var/lib/php/sessions"
+        post_max_size = 20M
         session.gc_maxlifetime = 60*60*24*15
         session.cache_expire = 60*24*30
         '';