]> WPIA git - infra.git/blob - commands
upd: changes according to current gigi changes
[infra.git] / commands
1 #!/bin/bash
2 com="$SSH_ORIGINAL_COMMAND"
3 if [[ "$UID" == 0 ]]; then
4     echo "Run script as non-root-user"
5     exit
6 fi
7 if [[ "$com" == "ask quiz certs" ]]; then
8     folder=$(mktemp -d)
9     # In argument 1 is the path of the certificates to update: $1.crt and $1.key
10     function update_cert {
11         name=$1
12         if [[ -f $name.crt ]] && openssl x509 -checkend $((365*24*60*60)) -in $name.crt > /dev/null; then
13             echo "SKIP $name"
14         else
15             echo "ISSUE $name"
16             openssl req -newkey rsa:4096 -subj "/CN=will-be-ignored" -nodes -out $folder/web.req -keyout $folder/web.key 2>/dev/null
17             cat $folder/web.req
18             read -r response
19             if [[ "$response" == "SUCCESS" ]]; then
20                 # read certificate count
21                 read -r len
22                 printf '' > $folder/web.crt
23                 for ((i=0;i<len;i++)); do
24                     # read one certificate
25                     openssl x509 -out $folder/web1.crt
26                     cat $folder/web1.crt >> $folder/web.crt
27                 done
28                 rm $folder/web1.crt
29                 crt=$(openssl x509 -in $folder/web.crt -noout -modulus)
30                 key=$(openssl rsa -in $folder/web.key -noout -modulus)
31                 if [[ $crt == $key ]]; then
32                     echo "SUCCESS: $len";
33                     cp $folder/web.crt $name.crt
34                     chmod +r $folder/web.key
35                     cp $folder/web.key $name.key
36                 else
37                     echo "MISMATCH";
38                 fi
39             else
40                 printf "%s\n" "$response"
41             fi
42         fi
43     }
44     update_cert "modules/quiz/files/web"
45     update_cert "modules/quiz/files/client"
46     update_cert "modules/gigi/files/gigi"
47     update_cert "modules/gigi/files/client"
48     echo "DONE"
49     [[ -f $folder/web.crt ]] && rm $folder/web.crt
50     [[ -f $folder/web.req ]] && rm $folder/web.req
51     [[ -f $folder/web.key ]] && rm $folder/web.key
52     rmdir $folder
53 elif [[ "$com" == "reload quiz certs" ]]; then
54     sudo puppet apply /etc/puppet/code/environments/production/manifests --verbose
55     sudo lxc-attach -n front-nginx -- puppet agent --verbose --test
56     sudo lxc-attach -n quiz -- puppet agent --verbose --test
57     sudo lxc-attach -n gigi -- puppet agent --verbose --test
58 elif [[ "$com" == "update crls" ]]; then
59     if ! tar xv -C /data/crl; then
60         echo "requiring tar"
61         exit;
62     fi
63     echo "Updating crls"
64     mkdir -p /data/crl/htdocs/g2
65     for i in /data/crl/*.crl; do
66         if ! [[ -h /data/crl/htdocs/g2/${i#/data/crl/} ]]; then
67             ln -vs /data-crl/${i#/data/crl/} /data/crl/htdocs/g2/${i#/data/crl/}
68         fi
69     done
70
71     for i in  /data/gigi-crl/*/ca.crl; do
72         j=$(echo $i | sed "s#^/data/gigi-crl/\([a-zA-Z]*\)_\([0-9]*\)_\([0-9]\)/ca.crl#\2/\1-\3.crl#")
73         mkdir -p /data/crl/htdocs/g2/$(dirname $j)
74         if ! [[ -h /data/crl/htdocs/g2/$j ]]; then
75             ln -vs /data-crl-gigi/${i#/data/gigi-crl/} /data/crl/htdocs/g2/$j
76         fi
77     done
78
79     mkdir -p /data/crl/crt-htdocs/g2
80     for i in modules/nre/files/config/ca/*; do
81         [[ $i == *_* ]] && continue
82         if ! [[ -f /data/crl/crt-htdocs/g2/$(basename $i) ]]; then
83             cp -v $i /data/crl/crt-htdocs/g2/$(basename $i)
84         fi
85     done
86     for i in  /data/gigi-crl/*/ca.crt; do
87         j=$(echo $i | sed "s#^/data/gigi-crl/\([a-zA-Z]*\)_\([0-9]*\)_\([0-9]\)/ca.crt#\2/\1-\3.crt#")
88         mkdir -p /data/crl/crt-htdocs/g2/$(dirname $j)
89         if ! [[ -h /data/crl/crt-htdocs/g2/$j ]]; then
90             ln -vs /data-crl-gigi/${i#/data/gigi-crl/} /data/crl/crt-htdocs/g2/$j
91         fi
92     done
93
94 else
95     printf "%s\n" $com
96 fi