aboutsummaryrefslogtreecommitdiffstats
path: root/mod/lostpass.php
blob: 20d35133a47db0b6b5e31f3b02f83c9c1699b481 (plain) (blame)
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
<?php


function lostpass_post(&$a) {

	$email = notags(trim($_POST['login-name']));
	if(! $email)
		goaway($a->get_baseurl());

	$r = q("SELECT * FROM `user` WHERE `email` = '%s' LIMIT 1",
		dbesc($email)
	);
	if(! count($r))
		goaway($a->get_baseurl());
	$uid = $r[0]['uid'];
	$username = $r[0]['username'];

	$new_password = autoname(12) . mt_rand(100,9999);
	$new_password_encoded = hash('whirlpool',$new_password);

	$r = q("UPDATE `user` SET `pwdreset` = '%s' WHERE `uid` = %d LIMIT 1",
		dbesc($new_password_encoded),
		intval($uid)
	);
	if($r)
		notice("Password reset request issued. Check your email.");

	$email_tpl = load_view_file("view/lostpass_eml.tpl");
	$email_tpl = replace_macros($email_tpl, array(
			'$sitename' => $a->config['sitename'],
			'$siteurl' =>  $a->get_baseurl(),
			'$username' => $username,
			'$email' => $email,
			'$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
	));

	$res = mail($email,"Password reset requested at {$a->config['sitename']}",$email_tpl,"From: Administrator@{$_SERVER[SERVER_NAME]}");

	

	goaway($a->get_baseurl());
}


function lostpass_content(&$a) {


	if(x($_GET,'verify')) {
		$verify = $_GET['verify'];
		$hash = hash('whirlpool', $verify);

		$r = q("SELECT * FROM `user` WHERE `pwdreset` = '%s' LIMIT 1",
			dbesc($hash)
		);
		if(! count($r)) {
			notice("Request could not be verified. (You may have previously submitted it.) Password reset failed." . EOL);
			goaway($a->get_baseurl());
			return;
		}
		$uid = $r[0]['uid'];
		$username = $r[0]['username'];
		$email = $r[0]['email'];

		$new_password = autoname(6) . mt_rand(100,9999);
		$new_password_encoded = hash('whirlpool',$new_password);

		$r = q("UPDATE `user` SET `password` = '%s', `pwdreset` = ''  WHERE `uid` = %d LIMIT 1",
			dbesc($new_password_encoded),
			intval($uid)
		);
		if($r) {
			$tpl = load_view_file('view/pwdreset.tpl');
			$o .= replace_macros($tpl,array(
				'$newpass' => $new_password,
				'$baseurl' => $a->get_baseurl()
			));
				notice("Your password has been reset." . EOL);



			$email_tpl = load_view_file("view/passchanged_eml.tpl");
			$email_tpl = replace_macros($email_tpl, array(
			'$sitename' => $a->config['sitename'],
			'$siteurl' =>  $a->get_baseurl(),
			'$username' => $username,
			'$email' => $email,
			'$new_password' => $new_password,
			'$uid' => $newuid ));

			$res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,"From: Administrator@{$_SERVER[SERVER_NAME]}");

			return $o;
		}
	
	}
	else {
		$tpl = load_view_file('view/lostpass.tpl');

		$o .= $tpl;

		return $o;
	}

}