]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add certificate creation and handling to websites
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 16 May 2019 21:23:05 +0000 (23:23 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 16 May 2019 22:04:47 +0000 (00:04 +0200)
30 files changed:
modules/websites/default.nix
nixops/modules/certificates.nix
nixops/modules/task/default.nix
nixops/modules/websites/aten/default.nix
nixops/modules/websites/capitaines/default.nix
nixops/modules/websites/chloe/default.nix
nixops/modules/websites/connexionswing/default.nix
nixops/modules/websites/emilia/default.nix
nixops/modules/websites/ftp/denisejerome.nix
nixops/modules/websites/ftp/florian.nix
nixops/modules/websites/ftp/immae.nix
nixops/modules/websites/ftp/jerome.nix
nixops/modules/websites/ftp/leila.nix
nixops/modules/websites/ftp/nassime.nix
nixops/modules/websites/ftp/papa.nix
nixops/modules/websites/ftp/release.nix
nixops/modules/websites/ftp/temp.nix
nixops/modules/websites/ludivine/default.nix
nixops/modules/websites/piedsjaloux/default.nix
nixops/modules/websites/tellesflorian/default.nix
nixops/modules/websites/tools/cloud.nix
nixops/modules/websites/tools/dav/default.nix
nixops/modules/websites/tools/db.nix
nixops/modules/websites/tools/diaspora.nix
nixops/modules/websites/tools/ether.nix
nixops/modules/websites/tools/git/default.nix
nixops/modules/websites/tools/mastodon.nix
nixops/modules/websites/tools/mediagoblin.nix
nixops/modules/websites/tools/peertube.nix
nixops/modules/websites/tools/tools/default.nix

index 6a18c8afb1829f153ea852ee225f67dac9f1fb7a..b76aeead489cea4b2810c9f2537637489c835506 100644 (file)
@@ -3,6 +3,9 @@ let
   cfg = config.services.websites;
 in
 {
+  options.services.websitesCerts = mkOption {
+    description = "Default websites configuration for certificates as accepted by acme";
+  };
   options.services.websites = with types; mkOption {
     default = {};
     description = "Each type of website to enable will target a distinct httpd server";
@@ -72,6 +75,16 @@ in
           type = attrsOf (submodule {
             options = {
               certName = mkOption { type = string; };
+              addToCerts = mkOption {
+                type = bool;
+                default = false;
+                description = "Use these to certificates. Is ignored (considered true) if certMainHost is not null";
+              };
+              certMainHost = mkOption {
+                type = nullOr string;
+                description = "Use that host as 'main host' for acme certs";
+                default = null;
+              };
               hosts    = mkOption { type = listOf string; };
               root     = mkOption { type = nullOr path; };
               extraConfig = mkOption { type = listOf lines; default = []; };
@@ -145,4 +158,42 @@ in
         ++ [ (redirectVhost icfg.ips) ];
     })
   ) cfg;
+
+  config.security.acme.certs = let
+    typesToManage = attrsets.filterAttrs (k: v: v.enable) cfg;
+    flatVhosts = lists.flatten (attrsets.mapAttrsToList (k: v:
+      attrValues v.vhostConfs
+    ) typesToManage);
+    groupedCerts = attrsets.filterAttrs
+      (_: group: builtins.any (v: v.addToCerts || !isNull v.certMainHost) group)
+      (lists.groupBy (v: v.certName) flatVhosts);
+    groupToDomain = group:
+      let
+        nonNull = builtins.filter (v: !isNull v.certMainHost) group;
+        domains = lists.unique (map (v: v.certMainHost) nonNull);
+      in
+        if builtins.length domains == 0
+          then null
+          else assert (builtins.length domains == 1); (elemAt domains 0);
+    extraDomains = group:
+      let
+        mainDomain = groupToDomain group;
+      in
+        lists.remove mainDomain (
+          lists.unique (
+            lists.flatten (map (c: optionals (c.addToCerts || !isNull c.certMainHost) c.hosts) group)
+          )
+        );
+  in attrsets.mapAttrs (k: g:
+    if (!isNull (groupToDomain g))
+    then config.services.websitesCerts // {
+      domain = groupToDomain g;
+      extraDomains = builtins.listToAttrs (
+        map (d: attrsets.nameValuePair d null) (extraDomains g));
+    }
+    else {
+      extraDomains = builtins.listToAttrs (
+        map (d: attrsets.nameValuePair d null) (extraDomains g));
+    }
+  ) groupedCerts;
 }
index 08f84fd1786c1a1ee13ae01b6071852b4ec3ecb7..d648ff765a6642e6979d4dbd8dfd52c434e1a66d 100644 (file)
@@ -15,6 +15,8 @@
   };
 
   config = {
+    services.websitesCerts = config.services.myCertificates.certConfig;
+
     security.acme.preliminarySelfsigned = true;
 
     security.acme.certs = {
index feb3be81977a5fb6a00a118876dcc1ec09fc07d3..426aa68f1f94ac348de2c8051cb007c7108a8469 100644 (file)
@@ -101,10 +101,10 @@ in {
           SetEnv TASKD_LDAP_FILTER   "${env.ldap.search}"
         '';
     }];
-    security.acme.certs."eldiron".extraDomains.${fqdn} = null;
     services.websites.tools.modules = [ "proxy_fcgi" "sed" ];
     services.websites.tools.vhostConfs.task = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "task.immae.eu" ];
       root        = "/run/current-system/webapps/_task";
       extraConfig = [ ''
index fd002a5a114fd9413e5688a073097e896fdf51e0..a9e75b6bcb80733e9048fa250f4698a0d50b0c7b 100644 (file)
@@ -25,13 +25,6 @@ in {
       secrets.keys = aten_prod.keys;
       services.webstats.sites = [ { name = "aten.pro"; } ];
 
-      security.acme.certs."aten" = config.services.myCertificates.certConfig // {
-        domain = "aten.pro";
-        extraDomains = {
-          "www.aten.pro" = null;
-        };
-      };
-
       services.myPhpfpm.preStart.aten_prod = aten_prod.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.aten_prod = aten_prod.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.aten_prod = aten_prod.phpFpm.pool;
@@ -42,15 +35,15 @@ in {
         '';
       services.websites.production.modules = aten_prod.apache.modules;
       services.websites.production.vhostConfs.aten = {
-        certName    = "aten";
-        hosts       = [ "aten.pro" "www.aten.pro" ];
-        root        = aten_prod.apache.root;
-        extraConfig = [ aten_prod.apache.vhostConf ];
+        certName     = "aten";
+        certMainHost = "aten.pro";
+        hosts        = [ "aten.pro" "www.aten.pro" ];
+        root         = aten_prod.apache.root;
+        extraConfig  = [ aten_prod.apache.vhostConf ];
       };
     })
     (lib.mkIf cfg.integration.enable {
       secrets.keys = aten_dev.keys;
-      security.acme.certs."eldiron".extraDomains."dev.aten.pro" = null;
       services.myPhpfpm.preStart.aten_dev = aten_dev.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.aten_dev = aten_dev.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.aten_dev = aten_dev.phpFpm.pool;
@@ -62,6 +55,7 @@ in {
       services.websites.integration.modules = aten_dev.apache.modules;
       services.websites.integration.vhostConfs.aten = {
         certName    = "eldiron";
+        addToCerts  = true;
         hosts       = [ "dev.aten.pro" ];
         root        = aten_dev.apache.root;
         extraConfig = [ aten_dev.apache.vhostConf ];
index 0d852667ee66e8c308953fe0fbb7894826a2311c..4bbf48806e73501779fe5dafe422273d816ca6f4 100644 (file)
@@ -13,20 +13,17 @@ in {
   };
 
   config = lib.mkIf cfg.production.enable {
-    security.acme.certs."capitaines" = config.services.myCertificates.certConfig // {
-      domain = "mastodon.capitaines.fr";
-      extraDomains = { "capitaines.fr" = null; };
-    };
     system.extraSystemBuilderCmds = ''
       mkdir -p $out/webapps
       ln -s ${siteDir} $out/webapps/${webappName}
       '';
 
     services.websites.production.vhostConfs.capitaines_mastodon = {
-      certName    = "capitaines";
-      hosts       = [ "mastodon.capitaines.fr" ];
-      root        = root;
-      extraConfig = [
+      certName     = "capitaines";
+      certMainHost = "mastodon.capitaines.fr";
+      hosts        = [ "mastodon.capitaines.fr" ];
+      root         = root;
+      extraConfig  = [
         ''
         ErrorDocument 404 /index.html
         <Directory ${root}>
@@ -39,9 +36,10 @@ in {
     };
 
     services.websites.production.vhostConfs.capitaines = {
-      certName = "capitaines";
-      hosts    = [ "capitaines.fr" ];
-      root     = "/run/current-system/webapps/_www";
+      certName   = "capitaines";
+      addToCerts = true;
+      hosts      = [ "capitaines.fr" ];
+      root       = "/run/current-system/webapps/_www";
       extraConfig = [ ''
         <Directory /run/current-system/webapps/_www>
           DirectoryIndex index.htm
index ba72d92d799b4ed0b5deb17e9c66263ebc7c410e..8e801b59b2d918d3357919ec9ff96163fe42c145 100644 (file)
@@ -25,13 +25,6 @@ in {
       secrets.keys = chloe_prod.keys;
       services.webstats.sites = [ { name = "osteopathe-cc.fr"; } ];
 
-      security.acme.certs."chloe" = config.services.myCertificates.certConfig // {
-        domain = "osteopathe-cc.fr";
-        extraDomains = {
-          "www.osteopathe-cc.fr" = null;
-        };
-      };
-
       services.myPhpfpm.serviceDependencies.chloe_prod = chloe_prod.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.chloe_prod = chloe_prod.phpFpm.pool;
       services.myPhpfpm.poolPhpConfigs.chloe_prod = ''
@@ -44,15 +37,15 @@ in {
         '';
       services.websites.production.modules = chloe_prod.apache.modules;
       services.websites.production.vhostConfs.chloe = {
-        certName    = "chloe";
-        hosts       = ["osteopathe-cc.fr" "www.osteopathe-cc.fr" ];
-        root        = chloe_prod.apache.root;
-        extraConfig = [ chloe_prod.apache.vhostConf ];
+        certName     = "chloe";
+        certMainHost = "osteopathe-cc.fr";
+        hosts        = ["osteopathe-cc.fr" "www.osteopathe-cc.fr" ];
+        root         = chloe_prod.apache.root;
+        extraConfig  = [ chloe_prod.apache.vhostConf ];
       };
     })
     (lib.mkIf cfg.integration.enable {
       secrets.keys = chloe_dev.keys;
-      security.acme.certs."eldiron".extraDomains."chloe.immae.eu" = null;
       services.myPhpfpm.serviceDependencies.chloe_dev = chloe_dev.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.chloe_dev = chloe_dev.phpFpm.pool;
       services.myPhpfpm.poolPhpConfigs.chloe_dev = ''
@@ -66,6 +59,7 @@ in {
       services.websites.integration.modules = chloe_dev.apache.modules;
       services.websites.integration.vhostConfs.chloe = {
         certName    = "eldiron";
+        addToCerts  = true;
         hosts       = ["chloe.immae.eu" ];
         root        = chloe_dev.apache.root;
         extraConfig = [ chloe_dev.apache.vhostConf ];
index 3643e190a19439c5a83a6ea51ed03e1149fdefd4..20c5166d53144a7b8d53a725a35c008cc7de55cd 100644 (file)
@@ -25,15 +25,6 @@ in {
       secrets.keys = connexionswing_prod.keys;
       services.webstats.sites = [ { name = "connexionswing.com"; } ];
 
-      security.acme.certs."connexionswing" = config.services.myCertificates.certConfig // {
-        domain = "connexionswing.com";
-        extraDomains = {
-          "www.connexionswing.com" = null;
-          "sandetludo.com" = null;
-          "www.sandetludo.com" = null;
-        };
-      };
-
       services.myPhpfpm.preStart.connexionswing_prod = connexionswing_prod.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.connexionswing_prod = connexionswing_prod.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.connexionswing_prod = connexionswing_prod.phpFpm.pool;
@@ -45,16 +36,15 @@ in {
         '';
       services.websites.production.modules = connexionswing_prod.apache.modules;
       services.websites.production.vhostConfs.connexionswing = {
-        certName    = "connexionswing";
-        hosts       = ["connexionswing.com" "sandetludo.com" "www.connexionswing.com" "www.sandetludo.com" ];
-        root        = connexionswing_prod.apache.root;
-        extraConfig = [ connexionswing_prod.apache.vhostConf ];
+        certName     = "connexionswing";
+        certMainHost = "connexionswing.com";
+        hosts        = ["connexionswing.com" "sandetludo.com" "www.connexionswing.com" "www.sandetludo.com" ];
+        root         = connexionswing_prod.apache.root;
+        extraConfig  = [ connexionswing_prod.apache.vhostConf ];
       };
     })
     (lib.mkIf cfg.integration.enable {
       secrets.keys = connexionswing_dev.keys;
-      security.acme.certs."eldiron".extraDomains."sandetludo.immae.eu" = null;
-      security.acme.certs."eldiron".extraDomains."connexionswing.immae.eu" = null;
       services.myPhpfpm.preStart.connexionswing_dev = connexionswing_dev.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.connexionswing_dev = connexionswing_dev.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.connexionswing_dev = connexionswing_dev.phpFpm.pool;
@@ -67,6 +57,7 @@ in {
       services.websites.integration.modules = connexionswing_dev.apache.modules;
       services.websites.integration.vhostConfs.connexionswing = {
         certName    = "eldiron";
+        addToCerts  = true;
         hosts       = ["connexionswing.immae.eu" "sandetludo.immae.eu" ];
         root        = connexionswing_dev.apache.root;
         extraConfig = [ connexionswing_dev.apache.vhostConf ];
index 4e32beceb010fb87fee2aa0f73fd9ffab548798f..47257b7a2f1e668b74db880a71341f08211cedfb 100644 (file)
@@ -47,13 +47,6 @@ in {
   };
 
   config = lib.mkIf cfg.production.enable {
-    security.acme.certs."emilia" = config.services.myCertificates.certConfig // {
-      domain = "saison-photo.org";
-      extraDomains = {
-        "www.saison-photo.org" = null;
-      };
-    };
-
     system.activationScripts.emilia = ''
       install -m 0755 -o wwwrun -g wwwrun -d ${varDir}
       '';
@@ -62,10 +55,11 @@ in {
       ln -s ${siteDir} $out/webapps/${webappName}
       '';
     services.websites.production.vhostConfs.emilia = {
-      certName    = "emilia";
-      hosts       = [ "saison-photo.org" "www.saison-photo.org" ];
-      root        = root;
-      extraConfig = [
+      certName     = "emilia";
+      certMainHost = "saison-photo.org";
+      hosts        = [ "saison-photo.org" "www.saison-photo.org" ];
+      root         = root;
+      extraConfig  = [
         ''
         <Directory ${root}>
           DirectoryIndex pause.html
index fa31430c211921ba18a57a9822a12ea783a2c1f2..884fb62d5f8867a520523af1597ba52759960e67 100644 (file)
@@ -13,15 +13,12 @@ in {
   config = lib.mkIf cfg.production.enable {
     services.webstats.sites = [ { name = "denisejerome.piedsjaloux.fr"; } ];
 
-    security.acme.certs."denisejerome" = config.services.myCertificates.certConfig // {
-      domain = "denisejerome.piedsjaloux.fr";
-    };
-
     services.websites.production.vhostConfs.denisejerome = {
-      certName    = "denisejerome";
-      hosts       = ["denisejerome.piedsjaloux.fr" ];
-      root        = varDir;
-      extraConfig = [
+      certName     = "denisejerome";
+      certMainHost = "denisejerome.piedsjaloux.fr";
+      hosts        = ["denisejerome.piedsjaloux.fr" ];
+      root         = varDir;
+      extraConfig  = [
         ''
         Use Stats denisejerome.piedsjaloux.fr
 
index 8097507ea82474d99033f343e7004fc55befc794..ebd461e4e95c8957afc68fc8ff4f484dedd77385 100644 (file)
@@ -17,19 +17,14 @@ in {
   config = lib.mkMerge [
     (lib.mkIf cfg.production.enable {
       security.acme.certs."ftp".extraDomains."tellesflorian.com" = null;
-      security.acme.certs."florian" = config.services.myCertificates.certConfig // {
-        domain = "tellesflorian.com";
-        extraDomains = {
-          "www.tellesflorian.com" = null;
-        };
-      };
 
       services.websites.production.modules = adminer.apache.modules;
       services.websites.production.vhostConfs.florian = {
-        certName    = "florian";
-        hosts       = [ "tellesflorian.com" "www.tellesflorian.com" ];
-        root        = "${varDir}/tellesflorian.com";
-        extraConfig = [
+        certName     = "florian";
+        certMainHost = "tellesflorian.com";
+        hosts        = [ "tellesflorian.com" "www.tellesflorian.com" ];
+        root         = "${varDir}/tellesflorian.com";
+        extraConfig  = [
           adminer.apache.vhostConf
           ''
           ServerAdmin ${env.server_admin}
@@ -47,11 +42,11 @@ in {
 
     (lib.mkIf cfg.integration.enable {
       security.acme.certs."ftp".extraDomains."florian.immae.eu" = null;
-      security.acme.certs."eldiron".extraDomains."florian.immae.eu" = null;
 
       services.websites.integration.modules = adminer.apache.modules;
       services.websites.integration.vhostConfs.florian = {
         certName    = "eldiron";
+        addToCerts  = true;
         hosts       = [ "florian.immae.eu" ];
         root        = "${varDir}/florian.immae.eu";
         extraConfig = [
index e188d95d8787e7f255e64d67e165ec33bae9d8d1..2ba30a138f836de220a9c14d4ad715baf32e7e5f 100644 (file)
@@ -13,8 +13,6 @@ in {
   config = lib.mkIf cfg.production.enable {
     services.webstats.sites = [ { name = "www.immae.eu"; } ];
 
-    security.acme.certs."eldiron".extraDomains."www.immae.eu" = null;
-
     services.myPhpfpm.poolConfigs.immae = ''
       listen = /run/phpfpm/immae.sock
       user = wwwrun
@@ -31,6 +29,7 @@ in {
     services.websites.production.modules = [ "proxy_fcgi" ];
     services.websites.production.vhostConfs.immae = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "www.immae.eu" ];
       root        = varDir;
       extraConfig = [
@@ -56,10 +55,9 @@ in {
       ];
     };
 
-    security.acme.certs."eldiron".extraDomains."bouya.org" = null;
-    security.acme.certs."eldiron".extraDomains."www.bouya.org" = null;
     services.websites.production.vhostConfs.bouya = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "bouya.org" "www.bouya.org" ];
       root        = null;
       extraConfig = [ ''
index a340644e60be27dbd18a44f4586a9e224764028e..d00c42dd7bf26461791893fba4e0788bfb92d234 100644 (file)
@@ -15,9 +15,6 @@ in {
     services.webstats.sites = [ { name = "naturaloutil.immae.eu"; } ];
 
     security.acme.certs."ftp".extraDomains."naturaloutil.immae.eu" = null;
-    security.acme.certs."naturaloutil" = config.services.myCertificates.certConfig // {
-      domain = "naturaloutil.immae.eu";
-    };
 
     secrets.keys = [{
       dest = "webapps/prod-naturaloutil";
@@ -60,10 +57,11 @@ in {
       '';
     services.websites.production.modules = adminer.apache.modules ++ [ "proxy_fcgi" ];
     services.websites.production.vhostConfs.naturaloutil = {
-      certName    = "naturaloutil";
-      hosts       = ["naturaloutil.immae.eu" ];
-      root        = varDir;
-      extraConfig = [
+      certName     = "naturaloutil";
+      certMainHost = "naturaloutil.immae.eu";
+      hosts        = ["naturaloutil.immae.eu" ];
+      root         = varDir;
+      extraConfig  = [
         adminer.apache.vhostConf
         ''
         Use Stats naturaloutil.immae.eu
index 518537214430d911c0e032dd994086e663f21c0e..14bfa20941c797bb887631779e3343007619f0ee 100644 (file)
@@ -10,15 +10,6 @@ in {
   };
 
   config = (lib.mkIf cfg.production.enable {
-      security.acme.certs."leila" = config.services.myCertificates.certConfig // {
-        domain = "leila.bouya.org";
-        extraDomains = {
-          "chorale.leila.bouya.org" = null;
-          "chorale-vocanta.fr.nf" = null;
-          "www.chorale-vocanta.fr.nf" = null;
-        };
-      };
-
       services.myPhpfpm.poolConfigs.leila = ''
         listen = /run/phpfpm/leila.sock
         user = wwwrun
@@ -41,6 +32,7 @@ in {
       services.websites.production.modules = [ "proxy_fcgi" ];
       services.websites.production.vhostConfs.leila_chorale = {
         certName    = "leila";
+        addToCerts  = true;
         hosts       = [ "chorale.leila.bouya.org" "chorale-vocanta.fr.nf" "www.chorale-vocanta.fr.nf" ];
         root        = "${varDir}/Chorale";
         extraConfig = [
@@ -62,10 +54,11 @@ in {
         ];
       };
       services.websites.production.vhostConfs.leila = {
-        certName    = "leila";
-        hosts       = [ "leila.bouya.org" ];
-        root        = varDir;
-        extraConfig = [
+        certName     = "leila";
+        certMainHost = "leila.bouya.org";
+        hosts        = [ "leila.bouya.org" ];
+        root         = varDir;
+        extraConfig  = [
           ''
           Use Stats leila.bouya.org
           <Directory ${varDir}/Chorale>
index 9ed8a809bb50be8c1751089b20a18754f9e8bcd3..3c982d3f4cebe217ecbd13e692368ed23afdced1 100644 (file)
@@ -14,15 +14,13 @@ in {
     services.webstats.sites = [ { name = "nassime.bouya.org"; } ];
 
     security.acme.certs."ftp".extraDomains."nassime.bouya.org" = null;
-    security.acme.certs."nassime" = config.services.myCertificates.certConfig // {
-      domain = "nassime.bouya.org";
-    };
 
     services.websites.production.vhostConfs.nassime = {
-      certName    = "nassime";
-      hosts       = ["nassime.bouya.org" ];
-      root        = varDir;
-      extraConfig = [
+      certName     = "nassime";
+      certMainHost = "nassime.bouya.org";
+      hosts        = ["nassime.bouya.org" ];
+      root         = varDir;
+      extraConfig  = [
         ''
         Use Stats nassime.bouya.org
         ServerAdmin ${env.server_admin}
index cdbc1b0b7c0fd46ee6155e2baff139fdd562f629..c8d05ef8348fdb25d5320ad84519950da308935d 100644 (file)
@@ -11,9 +11,6 @@ in {
 
   config = lib.mkIf cfg.production.enable {
     security.acme.certs."ftp".extraDomains."surveillance.maison.bbc.bouya.org" = null;
-    security.acme.certs."papa" = config.services.myCertificates.certConfig // {
-      domain = "surveillance.maison.bbc.bouya.org";
-    };
 
     services.cron = {
       systemCronJobs = let
@@ -35,10 +32,11 @@ in {
     };
 
     services.websites.production.vhostConfs.papa = {
-      certName    = "papa";
-      hosts       = [ "surveillance.maison.bbc.bouya.org" ];
-      root        = varDir;
-      extraConfig = [
+      certName     = "papa";
+      certMainHost = "surveillance.maison.bbc.bouya.org";
+      hosts        = [ "surveillance.maison.bbc.bouya.org" ];
+      root         = varDir;
+      extraConfig  = [
         ''
         Use Apaxy "${varDir}" "title .duplicity-ignore"
         <Directory ${varDir}>
index 2ddd8bca4b394ad6cdcd05f08c262f08ffcac735..db3487f425d9732f21a6219aadf1142fcfd2f73a 100644 (file)
@@ -13,10 +13,9 @@ in {
   config = lib.mkIf cfg.production.enable {
     services.webstats.sites = [ { name = "release.immae.eu"; } ];
 
-    security.acme.certs."eldiron".extraDomains."release.immae.eu" = null;
-
     services.websites.production.vhostConfs.release = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "release.immae.eu" ];
       root        = varDir;
       extraConfig = [
index bdd80c0d83e84dbd35302d85544cd17ca4af5a58..86dfde35fab7c923db6ce06fb8b49463302e9a12 100644 (file)
@@ -11,11 +11,10 @@ in {
   };
 
   config = lib.mkIf cfg.production.enable {
-    security.acme.certs."eldiron".extraDomains."temp.immae.eu" = null;
-
     services.websites.production.modules = [ "headers" ];
     services.websites.production.vhostConfs.temp = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "temp.immae.eu" ];
       root        = varDir;
       extraConfig = [
index dfeff0ad6542646ed8860a959a9c68e712dffe69..70d5199f28d92cf700be1d2924e2129d12ad03c6 100644 (file)
@@ -25,13 +25,6 @@ in {
       secrets.keys = ludivinecassal_prod.keys;
       services.webstats.sites = [ { name = "ludivinecassal.com"; } ];
 
-      security.acme.certs."ludivinecassal" = config.services.myCertificates.certConfig // {
-        domain = "ludivinecassal.com";
-        extraDomains = {
-          "www.ludivinecassal.com" = null;
-        };
-      };
-
       services.myPhpfpm.preStart.ludivinecassal_prod = ludivinecassal_prod.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.ludivinecassal_prod = ludivinecassal_prod.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.ludivinecassal_prod = ludivinecassal_prod.phpFpm.pool;
@@ -42,15 +35,15 @@ in {
         '';
       services.websites.production.modules = ludivinecassal_prod.apache.modules;
       services.websites.production.vhostConfs.ludivine = {
-        certName    = "ludivinecassal";
-        hosts       = ["ludivinecassal.com" "www.ludivinecassal.com" ];
-        root        = ludivinecassal_prod.apache.root;
-        extraConfig = [ ludivinecassal_prod.apache.vhostConf ];
+        certName     = "ludivinecassal";
+        certMainHost = "ludivinecassal.com";
+        hosts        = ["ludivinecassal.com" "www.ludivinecassal.com" ];
+        root         = ludivinecassal_prod.apache.root;
+        extraConfig  = [ ludivinecassal_prod.apache.vhostConf ];
       };
     })
     (lib.mkIf cfg.integration.enable {
       secrets.keys = ludivinecassal_dev.keys;
-      security.acme.certs."eldiron".extraDomains."ludivine.immae.eu" = null;
 
       services.myPhpfpm.preStart.ludivinecassal_dev = ludivinecassal_dev.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.ludivinecassal_dev = ludivinecassal_dev.phpFpm.serviceDeps;
@@ -63,6 +56,7 @@ in {
       services.websites.integration.modules = ludivinecassal_dev.apache.modules;
       services.websites.integration.vhostConfs.ludivine = {
         certName    = "eldiron";
+        addToCerts  = true;
         hosts       = [ "ludivine.immae.eu" ];
         root        = ludivinecassal_dev.apache.root;
         extraConfig = [ ludivinecassal_dev.apache.vhostConf ];
index 6ffb19c034547ca6d7cf78aa2f701a780b0e0f60..a5ee24fda923dd10df255f98228bd09ecf48e68c 100644 (file)
@@ -25,13 +25,6 @@ in {
       secrets.keys = piedsjaloux_prod.keys;
       services.webstats.sites = [ { name = "piedsjaloux.fr"; } ];
 
-      security.acme.certs."piedsjaloux" = config.services.myCertificates.certConfig // {
-        domain = "piedsjaloux.fr";
-        extraDomains = {
-          "www.piedsjaloux.fr" = null;
-        };
-      };
-
       services.myPhpfpm.preStart.piedsjaloux_prod = piedsjaloux_prod.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.piedsjaloux_prod = piedsjaloux_prod.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.piedsjaloux_prod = piedsjaloux_prod.phpFpm.pool;
@@ -42,15 +35,15 @@ in {
         '';
       services.websites.production.modules = piedsjaloux_prod.apache.modules;
       services.websites.production.vhostConfs.piedsjaloux = {
-        certName    = "piedsjaloux";
-        hosts       = [ "piedsjaloux.fr" "www.piedsjaloux.fr" ];
-        root        = piedsjaloux_prod.apache.root;
-        extraConfig = [ piedsjaloux_prod.apache.vhostConf ];
+        certName     = "piedsjaloux";
+        certMainHost = "piedsjaloux.fr";
+        hosts        = [ "piedsjaloux.fr" "www.piedsjaloux.fr" ];
+        root         = piedsjaloux_prod.apache.root;
+        extraConfig  = [ piedsjaloux_prod.apache.vhostConf ];
       };
     })
     (lib.mkIf cfg.integration.enable {
       secrets.keys = piedsjaloux_dev.keys;
-      security.acme.certs."eldiron".extraDomains."piedsjaloux.immae.eu" = null;
       services.myPhpfpm.preStart.piedsjaloux_dev = piedsjaloux_dev.phpFpm.preStart;
       services.myPhpfpm.serviceDependencies.piedsjaloux_dev = piedsjaloux_dev.phpFpm.serviceDeps;
       services.myPhpfpm.poolConfigs.piedsjaloux_dev = piedsjaloux_dev.phpFpm.pool;
@@ -62,6 +55,7 @@ in {
       services.websites.integration.modules = piedsjaloux_dev.apache.modules;
       services.websites.integration.vhostConfs.piedsjaloux = {
         certName    = "eldiron";
+        addToCerts  = true;
         hosts       = [ "piedsjaloux.immae.eu" ];
         root        = piedsjaloux_dev.apache.root;
         extraConfig = [ piedsjaloux_dev.apache.vhostConf ];
index eb02174c6727e47d3d4caa1f197d1fccf8495088..bbbde07ff7cb93a9b14320b6966252a9c05a76c7 100644 (file)
@@ -17,7 +17,6 @@ in {
 
   config = lib.mkIf cfg.integration.enable {
     secrets.keys = tellesflorian_dev.keys;
-    security.acme.certs."eldiron".extraDomains."app.tellesflorian.com" = null;
     services.myPhpfpm.preStart.tellesflorian_dev = tellesflorian_dev.phpFpm.preStart;
     services.myPhpfpm.serviceDependencies.tellesflorian_dev = tellesflorian_dev.phpFpm.serviceDeps;
     services.myPhpfpm.poolConfigs.tellesflorian_dev = tellesflorian_dev.phpFpm.pool;
@@ -29,6 +28,7 @@ in {
     services.websites.integration.modules = adminer.apache.modules ++ tellesflorian_dev.apache.modules;
     services.websites.integration.vhostConfs.tellesflorian = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["app.tellesflorian.com" ];
       root        = tellesflorian_dev.apache.root;
       extraConfig = [
index 69b5fb07dabd2e6889768e8b07fc453137ef0b86..5e010f4332cb9aac9859d26d15dbe30edf4afed5 100644 (file)
@@ -49,12 +49,11 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
-    security.acme.certs."eldiron".extraDomains."cloud.immae.eu" = null;
-
     services.websites.tools.modules = [ "proxy_fcgi" ];
 
     services.websites.tools.vhostConfs.cloud = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["cloud.immae.eu" ];
       root        = apacheRoot;
       extraConfig = [
index ea2105b495ffca6391080830657d6670380c50e1..075cf48d440a4f906d46f17e3064f2ab744d90d1 100644 (file)
@@ -27,13 +27,12 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
-    security.acme.certs."eldiron".extraDomains."dav.immae.eu" = null;
-
     secrets.keys = davical.keys;
     services.websites.tools.modules = davical.apache.modules;
 
     services.websites.tools.vhostConfs.dav = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["dav.immae.eu" ];
       root        = null;
       extraConfig = [
index 70650fa6090acea960e7ae2e2f71057c4603c091..7c15c23a2374c885135bc9cd46e01df176382f0f 100644 (file)
@@ -9,11 +9,10 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
-    security.acme.certs."eldiron".extraDomains."db-1.immae.eu" = null;
-
     services.websites.tools.modules = adminer.apache.modules;
     services.websites.tools.vhostConfs.db-1 = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["db-1.immae.eu" ];
       root        = null;
       extraConfig = [ adminer.apache.vhostConf ];
index 221e01c27af101270f2819e16156581a4a5617ae..ee5507d9c95848aebbb82192dedd97343c03a775 100644 (file)
@@ -148,13 +148,13 @@ in {
     services.websites.tools.modules = [
       "headers" "proxy" "proxy_http"
     ];
-    security.acme.certs."eldiron".extraDomains."diaspora.immae.eu" = null;
     system.extraSystemBuilderCmds = ''
       mkdir -p $out/webapps
       ln -s ${dcfg.workdir}/public/ $out/webapps/tools_diaspora
       '';
     services.websites.tools.vhostConfs.diaspora = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "diaspora.immae.eu" ];
       root        = root;
       extraConfig = [ ''
index 6222b22d6d09dcb3891db0463ca6202b21451a17..8c9bbb181390021536716bb7c3a8650fcefc8d42 100644 (file)
@@ -136,9 +136,9 @@ in {
     services.websites.tools.modules = [
       "headers" "proxy" "proxy_http" "proxy_wstunnel"
     ];
-    security.acme.certs."eldiron".extraDomains."ether.immae.eu" = null;
     services.websites.tools.vhostConfs.etherpad-lite = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "ether.immae.eu" ];
       root        = null;
       extraConfig = [ ''
index ea0d9717ae152f2df53d288a048d74da56888a11..064d3ddb50fa92a84cc72fd445b2df1dafaaab76 100644 (file)
@@ -13,8 +13,6 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
-    security.acme.certs."eldiron".extraDomains."git.immae.eu" = null;
-
     secrets.keys = mantisbt.keys;
     services.websites.tools.modules =
       gitweb.apache.modules ++
@@ -27,6 +25,7 @@ in {
 
     services.websites.tools.vhostConfs.git = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["git.immae.eu" ];
       root        = gitweb.apache.root;
       extraConfig = [
index 38b21074ac02cdbfc39050ed5c202fb89f3077a0..ffd59dd6fb1a3775668ce796c31991529b707976 100644 (file)
@@ -67,13 +67,13 @@ in {
     services.websites.tools.modules = [
       "headers" "proxy" "proxy_wstunnel" "proxy_http"
     ];
-    security.acme.certs."eldiron".extraDomains."mastodon.immae.eu" = null;
     system.extraSystemBuilderCmds = ''
       mkdir -p $out/webapps
       ln -s ${mcfg.workdir}/public/ $out/webapps/tools_mastodon
       '';
     services.websites.tools.vhostConfs.mastodon = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["mastodon.immae.eu" ];
       root        = root;
       extraConfig = [ ''
index 8a6f03f1b13548dcba7a67ee0907046edc871a47..eb56b3593972b5e6d15bdabf661b5f461776d160 100644 (file)
@@ -83,9 +83,9 @@ in {
       "proxy" "proxy_http"
     ];
     users.users.wwwrun.extraGroups = [ "mediagoblin" ];
-    security.acme.certs."eldiron".extraDomains."mgoblin.immae.eu" = null;
     services.websites.tools.vhostConfs.mgoblin = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["mgoblin.immae.eu" ];
       root        = null;
       extraConfig = [ ''
index 6cc6d3834b25f4f07c1138f8e09484743a8263d9..12ab3c4312dea598778221637072af5588be4f53 100644 (file)
@@ -153,9 +153,9 @@ in {
     services.websites.tools.modules = [
       "headers" "proxy" "proxy_http" "proxy_wstunnel"
     ];
-    security.acme.certs."eldiron".extraDomains."peertube.immae.eu" = null;
     services.websites.tools.vhostConfs.peertube = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = [ "peertube.immae.eu" ];
       root        = null;
       extraConfig = [ ''
index 5e84f45a15cd641540114252bfeb97f1e4322333..061c0043637e3caed1dfc34db3da35920878ad8d 100644 (file)
@@ -46,9 +46,6 @@ in {
   };
 
   config = lib.mkIf cfg.enable {
-    security.acme.certs."eldiron".extraDomains."tools.immae.eu" = null;
-    security.acme.certs."eldiron".extraDomains."devtools.immae.eu" = null;
-
     secrets.keys =
       kanboard.keys
       ++ ldap.keys
@@ -86,6 +83,7 @@ in {
 
     services.websites.integration.vhostConfs.devtools = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["devtools.immae.eu" ];
       root        = "/var/lib/ftp/devtools.immae.eu";
       extraConfig = [
@@ -105,6 +103,7 @@ in {
 
     services.websites.tools.vhostConfs.tools = {
       certName    = "eldiron";
+      addToCerts  = true;
       hosts       = ["tools.immae.eu" ];
       root        = "/var/lib/ftp/tools.immae.eu";
       extraConfig = [
@@ -132,11 +131,11 @@ in {
       ];
     };
 
-    security.acme.certs."eldiron".extraDomains."outils.immae.eu" = null;
     services.websites.tools.vhostConfs.outils = {
-      certName = "eldiron";
-      hosts    = [ "outils.immae.eu" ];
-      root     = null;
+      certName   = "eldiron";
+      addToCerts = true;
+      hosts      = [ "outils.immae.eu" ];
+      root       = null;
       extraConfig = [
         ''
         RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1