summaryrefslogtreecommitdiff
path: root/scripts/cron/warning.php
blob: 8d59ddf969a671d9913579c28597891cb4645da4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/php -q
<? /*
    LibreSSL - CAcert web application
    Copyright (C) 2004-2008  CAcert Inc.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

	require_once(dirname(__FILE__).'/../../includes/mysql.php');

	$days = array("1" => "3", "15" => "2", "30" => "1", "45" => "0");

	foreach($days as $day => $warning)
	{
		$query = "SELECT `emailcerts`.`id`,`users`.`fname`,`users`.`lname`,`users`.`email`,`emailcerts`.`memid`,
				`emailcerts`.`subject`, `emailcerts`.`crt_name`,`emailcerts`.`CN`,
				(UNIX_TIMESTAMP(`emailcerts`.`expire`) - UNIX_TIMESTAMP(NOW())) / 86400 as `daysleft`
				FROM `users`,`emailcerts`
				WHERE UNIX_TIMESTAMP(`emailcerts`.`expire`) - UNIX_TIMESTAMP(NOW()) > -7 * 86400 and
				UNIX_TIMESTAMP(`emailcerts`.`expire`) - UNIX_TIMESTAMP(NOW()) < $day * 86400 and
				`emailcerts`.`renewed`=0 and `emailcerts`.`warning` <= '$warning' and
				`emailcerts`.`revoked`=0 and `users`.`id`=`emailcerts`.`memid`";
		$res = mysql_query($query);
		while($row = mysql_fetch_assoc($res))
		{
			if($row['subject'] == "")
			{
				$row['crt_name'] = str_replace("../", "www/", $row['crt_name']);
				$row['crt_name'] = "/home/cacert/".$row['crt_name'];
				$subject = `openssl x509 -in '$row[crt_name]' -text -noout|grep Subject:`;
				$bits = explode("/", $subject);
				foreach($bits as $val)
				{
					$sub = explode("=", trim($val));
					if($sub['0'] == "emailAddress")
					{
						$row['subject'] = "/CN=".$row['CN']."/emailAddress=".$sub['1'];
						break;
					}
				}
			}
			if($row['subject'] == "")
				$row['subject'] = "/CN=".$row['CN'];
			$row['daysleft'] = ceil($row['daysleft']);
			$body = sprintf(_("Hi %s"), $row['fname']).",\n\n";
			$body .= _("You are receiving this email as you are the listed contact for:")."\n\n";
			$body .= $row['subject']."\n\n";
			$body .= sprintf(_("Your certificate is set to expire in approximately %s days time, you can renew this by going to the following URL:"), $row['daysleft'])."\n\n";
			$body .= "https://www.cacert.org/account.php?id=5\n\n";
			$body .= _("Best Regards")."\n"._("CAcert Support");
			sendmail($row['email'], "[CAcert.org] "._("Your Certificate is about to expire"), $body, "support@cacert.org", "", "", "CAcert Support");
echo $row['fname']." ".$row['lname']." <".$row['email']."> (memid: ".$row['memid']." Subj: ".$row['subject']." timeleft: ".$row['daysleft'].")\n";
			$query = "update `emailcerts` set `warning`='".($warning+1)."' where `id`='".$row['id']."'";
			mysql_query($query);
		}
	}

	foreach($days as $day => $warning)
	{
		$query = 
			"SELECT `domaincerts`.`id`,
					`users`.`fname`, `users`.`lname`, `users`.`email`,
					`domains`.`memid`,
					`domaincerts`.`subject`, `domaincerts`.`crt_name`,
					`domaincerts`.`CN`,
					(UNIX_TIMESTAMP(`domaincerts`.`expire`) - 
						UNIX_TIMESTAMP(NOW())) / 86400 AS `daysleft`
					
				FROM `users`, `domaincerts`, `domlink`, `domains`
				WHERE UNIX_TIMESTAMP(`domaincerts`.`expire`) -
						UNIX_TIMESTAMP(NOW()) > -7 * 86400
				AND UNIX_TIMESTAMP(`domaincerts`.`expire`) -
						UNIX_TIMESTAMP(NOW()) < $day * 86400
				AND `domaincerts`.`renewed` = 0
				AND `domaincerts`.`warning` <= '$warning'
				AND `domaincerts`.`revoked` = 0
				AND (
					`domaincerts`.`domid` = `domains`.`id`
					OR (
						`domaincerts`.`id` = `domlink`.`certid`
						AND `domlink`.`domid` = `domains`.id`
						)
					)
				AND `domains`.`memid` = `users`.`id`";
		$res = mysql_query($query);
		while($row = mysql_fetch_assoc($res))
		{
			if($row['subject'] == "")
				$row['subject'] = $row['CN'];

			$row['daysleft'] = ceil($row['daysleft']);
			$body = sprintf(_("Hi %s"), $row['fname']).",\n\n";
			$body .= _("You are receiving this email as you are the listed contact for:")."\n\n";
			$body .= $row['subject']."\n\n";
			$body .= sprintf(_("Your certificate is set to expire in approximately %s days time, you can renew this by going to the following URL:"), $row['daysleft'])."\n\n";
			$body .= "https://www.cacert.org/account.php?id=12\n\n";
			$body .= _("Best Regards")."\n"._("CAcert Support");
			sendmail($row['email'], "[CAcert.org] "._("Your Certificate is about to expire"), $body, "support@cacert.org", "", "", "CAcert Support");
echo $row['fname']." ".$row['lname']." <".$row['email']."> (memid: ".$row['memid']." Subj: ".$row['CN']." timeleft: ".$row['daysleft'].")\n";
			$query = "update `domaincerts` set `warning`='".($warning+1)."' where `id`='".$row['id']."'";
			mysql_query($query);
		}
	}
?>