dbconfig athelyezese
[certwatch.git/.git] / functions.php
1 <?php
2
3 include('/var/www/certwatch.niif.hu/include/dbconfig.php');
4
5 $conn = mysql_connect (DBHOST, DBUSER, DBPASSWD);
6 mysql_select_db(DBNAME, $conn) or die(mysql_error());
7
8 $errorMessages = array(
9     "mail" => array(
10         "invalid_address" => "Please provide a valid e-mail address.",
11     ),
12     "cert" => array(
13         "invalid_cert" => "This certificate cannot be read.",
14         "already_in" => "This certificate is already in our database.",
15         "not_valid_yet" => "This certificate is not valid yet.",
16         "expired" => "This certificate has been already expired.",
17     )
18 );
19
20 function formatCert($cert) {
21     $cert = ltrim(rtrim($cert));
22     if (strlen($cert)>1) {
23         if (!preg_match("/-----BEGIN CERTIFICATE-----/", $cert)) {
24             $cert = "-----BEGIN CERTIFICATE-----\n" . $cert;
25         }
26         if (!preg_match("/-----END CERTIFICATE-----/", $cert)) {
27             $cert = $cert . "\n-----END CERTIFICATE-----";
28         }
29     }
30     return $cert;
31 }
32
33 function checkCert($string) {
34
35     $cert = ltrim(rtrim($string));
36     return openssl_x509_parse($cert);
37
38 }
39
40 function getX509Field($cert, $field = 'subject') {
41     $descriptorspec = array(
42             0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
43             1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
44             2 => array("pipe", "r") // stderr is a file to write to
45     );
46
47
48     // Check field
49     if (
50     $field != 'subject'
51             && $field != 'serial'
52             && $field != 'fingerprint'
53             && $field != 'startdate'
54             && $field != 'issuer'
55             && $field != 'enddate'
56             && $field != 'clean'
57     ) {
58         return false;
59     }
60
61     // Set switches
62     if ($field == 'fingerprint') {
63         $field .= ' -sha1';
64     }
65
66     if ($field == 'clean') {
67         $process = proc_open('/usr/bin/openssl x509', $descriptorspec, $pipes);
68     } else {
69         $process = proc_open('/usr/bin/openssl x509 -noout -'.$field, $descriptorspec, $pipes);
70     }
71
72     if (is_resource($process)) {
73         // $pipes now looks like this:
74         // 0 => writeable handle connected to child stdin
75         // 1 => readable handle connected to child stdout
76         // Any error output will be appended to /tmp/error-output.txt
77
78         fwrite($pipes[0],  $cert);
79         fclose($pipes[0]);
80
81         $result = '';
82         while ($i = fgets($pipes[1])) {
83             $result .= $i;
84         }
85         fclose($pipes[1]);
86
87         // It is important that you close any pipes before calling
88         // proc_close in order to avoid a deadlock
89         $return_value = proc_close($process);
90
91
92         // Returns false on error or the data part after the = in
93         // e.g. Fingerprint=D6:E7:7D:94:51:8C:3E:7C:62:BD:FE:77:E4:CB:B0:0F
94         if(!$return_value && $field == 'clean') {
95             return trim($result);
96         } else if(!$return_value) {
97             return trim(substr($result, (strpos($result, '=')+1)));
98         } else {
99             return false;
100         }
101     }
102 }
103
104 function getCertNR(){
105     global $conn;
106     $query = mysql_query("SELECT fingerprint FROM main",$conn);
107     return mysql_num_rows($query);
108 }
109
110 function mailEncode($in_str, $charset) {
111     $out_str = $in_str;
112     if ($out_str && $charset) {
113
114         // define start delimimter, end delimiter and spacer
115         $end = "?=";
116         $start = "=?" . $charset . "?B?";
117         $spacer = $end . "\r\n " . $start;
118
119         // determine length of encoded text within chunks
120         // and ensure length is even
121         $length = 200 - strlen($start) - strlen($end);
122         $length = floor($length/2) * 2;
123
124         // encode the string and split it into chunks
125         // with spacers after each chunk
126         $out_str = base64_encode($out_str);
127         $out_str = chunk_split($out_str, $length, $spacer);
128
129         // remove trailing spacer and
130         // add start and end delimiters
131         $spacer = preg_quote($spacer);
132         $out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
133         $out_str = $start . $out_str . $end;
134     }
135     return $out_str;
136 }
137
138 function sendReminder($email,$fingerprint,$dn,$expire,$expireTS){
139     
140     $eol="\n";
141
142     $headers .= 'From: certwatch <no-reply@niif.hu>' . $eol;
143     $headers .= 'MIME-Version: 1.0' . $eol;
144     $headers .= 'Reply-To: no-reply@niif.hu' . $eol;
145     $headers .= 'Content-type: text/plain; charset=UTF-8' . $eol;
146     $headers .= 'Content-Transfer-Encoding: 8bit' . $eol;
147
148     $subject = "Certificate expiration";
149
150     $body = "Hello,
151
152 your certificate expires in $expire. It will be purged from our database afterwards.
153
154 DN: $dn 
155 Fingerprint: $fingerprint 
156 Expire: $expireTS
157
158 Cheers,
159 certwatch.niif.hu
160
161 This is an automatically generated message, please do not reply.
162     ";
163
164     mail($email,$subject,$body,$headers);
165
166 }
167
168 function expireDays($dayNR){
169     return ($dayNR==1) ? $dayNR . " day" : $dayNR . " days";
170 }
171
172
173 function certWrap($attrs){
174         $attrs=preg_replace("/\n|\t| /","",$attrs);
175         if (strlen($attrs)>256){
176                 $i=0;
177                 $attr="";
178                 while ($i<strlen($attrs)){
179                         $attr.=substr($attrs,$i,64)."\n";
180                         $i=$i+64;
181                 }
182         } else {
183                 $attr=$attrs;
184         }
185         return $attr;
186 }
187
188
189 ?>