tools: Update translated versions of the donation page
[gnupg-doc.git] / tools / getkey.sh
1 #!/bin/sh
2 # Retrieve a key from the keyserver and store it as a local file.
3 # An option allows to run this as cronjob to refresh the existing
4 # keys from the keyserver
5
6 set -e
7
8 pgm="$0"
9
10 htdocs="/var/www/alberti/k.gnupg.net/htdocs"
11 keys="/var/www/alberti/k.gnupg.net/keys"
12 keyserver="hkp://keys.mayfirst.org"
13
14 usage()
15 {
16     cat <<EOF
17 Usage: $0 [OPTIONS] [FINGERPRINTS]
18 Options:
19         --cron     Refresh all keys
20         --verbose  Run in verbose mode
21         --test     Run in test environment
22 EOF
23     exit "$1"
24 }
25
26
27 cronmode=no
28 verbose=no
29 testmode=no
30 while [ $# -gt 0 ]; do
31     case "$1" in
32         # Set up `optarg'.
33         --*=*)
34             optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
35             ;;
36         *)
37             optarg=""
38             ;;
39     esac
40
41     case "$1" in
42         --cron)
43             cronmode=yes
44             ;;
45         --verbose)
46             verbose=yes
47             ;;
48         --test)
49             testmode=yes
50             ;;
51         --help)
52             usage 0
53             ;;
54         --*)
55             usage 1 1>&2
56             ;;
57         *)
58             break
59     esac
60     shift
61 done
62
63
64 if [ ! -d "$htdocs" ]; then
65   echo "$pgm: '$htdocs' not found" >&2;
66   exit 1
67 fi
68 if [ ! -d "$keys" ]; then
69   echo "$pgm: '$keys' not found" >&2;
70   exit 1
71 fi
72 if [ -z "$keyserver" ]; then
73   echo "$pgm: No keyserver configured" >&2;
74   exit 1
75 fi
76 if [ $cronmode = yes ]; then
77   if [ $# -ne 0 ]; then
78     echo "$pgm: Unexpected arguments in cron mode" >&2
79     usage 1
80   fi
81 else
82   if [ $# -eq 0 ]; then
83     echo "$pgm: No arguments given" >&2
84     usage 1
85   fi
86 fi
87 if ! cd "$keys" ; then
88   echo "$pgm: cd to '$keys' failed" >&2
89   exit 1
90 fi
91
92 GNUPGHOME="$keys"
93 export GNUPGHOME
94 gpgopts="--no-permission-warning --quiet"
95
96
97 errors=no
98 # Note that the loop is not entered in cron mode
99 while [ $# -gt 0 ]; do
100     fpr="$1"
101     shift
102     b=$(echo "$fpr" | tr -cd '[:xdigit:]')
103     if [ ${#fpr} -lt 40 -o ${#fpr} -ne ${#b} ]; then
104         echo "$pgm: '$fpr' does not look like a fingerprint" >&2
105         errors=yes
106         continue
107     fi
108     [ $verbose = yes ] && echo "$pgm: Retrieving $fpr ..." >&2
109     if ! gpg $gpgopts --keyserver $keyserver --recv-key $fpr ; then
110         echo "$pgm: error retrieving '$fpr'" >&2
111         errors=yes
112         continue
113     fi
114     [ $verbose = yes ] && echo "$pgm: Storing $fpr ..." >&2
115     if ! gpg $gpgopts --export --yes --output "$htdocs/$fpr" $fpr ; then
116         echo "$pgm: error storing '$fpr'" >&2
117         errors=yes
118         continue
119     fi
120 done
121
122
123 if [ "$cronmode" = yes ]; then
124   find "$htdocs" -type f -name '[0-9A-F][0-9A-F]*[0-9A-F]' -printf '%P\n' \
125     | ( while read fpr rest ; do
126         b=$(echo "$fpr" | tr -cd '[:xdigit:]')
127         if [ ${#fpr} -lt 40 -o ${#fpr} -ne ${#b} ]; then
128           echo "$pgm: '$fpr' does not look like a fingerprint" >&2
129           continue
130         fi
131         [ $verbose = yes ] && echo "$pgm: refreshing $fpr ..." >&2
132         if ! gpg $gpgopts --keyserver $keyserver --refresh-key $fpr ; then
133           echo "$pgm: error refreshing '$fpr'" >&2
134           continue
135         fi
136         [ $verbose = yes ] && echo "$pgm: Storing $fpr ..." >&2
137         if ! gpg $gpgopts --export --yes --output "$htdocs/tmp-$fpr" $fpr ; then
138            echo "$pgm: error exporting '$fpr'" >&2
139            continue
140         fi
141         if cmp  "$htdocs/tmp-$fpr" "$htdocs/$fpr"; then
142            rm "$htdocs/tmp-$fpr" || true
143         else
144            mv "$htdocs/tmp-$fpr" "$htdocs/$fpr"
145            [ $verbose = yes ] && echo "$pgm: '$fpr' has been updated" >&2
146         fi
147     done
148   )
149 fi
150
151 if [ $errors != no ]; then
152     echo "$pgm: error encountered during processing" >&2
153     exit 1
154 fi
155 exit 0