7e891a293b9e0678b398cade7d4d3e2ae2a39f76
[mirror/dsa-puppet.git] / modules / apache2 / templates / ssl-key-pins.erb
1 ##
2 ## THIS FILE IS UNDER PUPPET CONTROL. DON'T EDIT IT HERE.
3 ## USE: git clone git+ssh://$USER@puppet.debian.org/srv/puppet.debian.org/git/dsa-puppet.git
4 ##
5
6 <IfModule mod_macro.c>
7
8 <%=
9   $cert_dir_le = '/srv/puppet.debian.org/from-letsencrypt'
10   $cert_dir_backup = '/srv/puppet.debian.org/backup-keys'
11
12   def make_pin_macro(site)
13     pin_info = []
14     pinfiles = [ "#{$cert_dir_le}/#{site}.pin",
15                  "#{$cert_dir_backup}/#{site}.pin" ]
16     pinfiles.each do |fn|
17       if File.exist?(fn)
18         pin_info << File.read(fn).chomp()
19       end
20     end
21
22     res = []
23     res << "<Macro http-pkp-#{site}>"
24     if pin_info.size >= 2 then
25       pin_info = pin_info.map{ |x| x.gsub('"', '\"') }
26       # 60 days
27       pin_info << "max-age=5184000"
28       pin_str = pin_info.join("; ")
29       res << "  Header always set Public-Key-Pins \"#{pin_str}\""
30     else
31       res << "  # mod macro does not like empty macros, so here's some content:"
32       res << "  <Directory /non-existant>"
33       res << "  </Directory>"
34     end
35     res << "</Macro>"
36     res << ""
37     return res.join("\n")
38   end
39
40   macros = []
41   Dir.glob("#{$cert_dir_le}/*.pin") do |pinfile|
42     site = File.basename(pinfile, '.pin')
43     macros << make_pin_macro(site)
44   end
45   macros.join("\n")
46 -%>
47
48 </IfModule>