]> git.wh0rd.org - tt-rss.git/blame - classes/auth/internal.php
auth internal: fix login screen warning
[tt-rss.git] / classes / auth / internal.php
CommitLineData
0d421af8
AD
1<?php
2class Auth_Internal extends Auth_Base {
3
4 function authenticate($login, $password) {
5
6 $pwd_hash1 = encrypt_password($password);
7 $pwd_hash2 = encrypt_password($password, $login);
8 $login = db_escape_string($login);
fb70f26e
AD
9 $otp = db_escape_string($_REQUEST["otp"]);
10
11 if (get_schema_version($this->link) > 96) {
12 $result = db_query($this->link, "SELECT otp_enabled,salt FROM ttrss_users WHERE
13 login = '$login'");
14
4e70344b
AD
15 if (db_num_rows($result) > 0) {
16 require_once "lib/otphp/vendor/base32.php";
17 require_once "lib/otphp/lib/otp.php";
18 require_once "lib/otphp/lib/totp.php";
19
20 $base32 = new Base32();
21
22 $otp_enabled = sql_bool_to_bool(db_fetch_result($result, 0, "otp_enabled"));
23 $secret = $base32->encode(sha1(db_fetch_result($result, 0, "salt")));
24
25 $topt = new \OTPHP\TOTP($secret);
26 $otp_check = $topt->now();
27
28 if ($otp_enabled) {
29 if ($otp) {
30 if ($otp != $otp_check) {
31 return false;
32 }
33 } else {
34 ?><html>
35 <head><title>Tiny Tiny RSS</title></head>
36 <body>
37 <form method="POST">
38 <input type="hidden" name="login_action" value="do_login">
39 <input type="hidden" name="login" value="<?php echo htmlspecialchars($login) ?>">
40 <input type="hidden" name="password" value="<?php echo htmlspecialchars($password) ?>">
41
42 <label><?php echo __("Please enter your one time password:") ?></label>
43 <input type="password" size="6" name="otp"/>
44 <input type="submit" value="Continue"/>
45 </form>
46 </form>
47 <?php
48 exit;
fb70f26e 49 }
fb70f26e
AD
50 }
51 }
52 }
0d421af8
AD
53
54 if (get_schema_version($this->link) > 87) {
55
56 $result = db_query($this->link, "SELECT salt FROM ttrss_users WHERE
57 login = '$login'");
58
59 if (db_num_rows($result) != 1) {
60 return false;
61 }
62
63 $salt = db_fetch_result($result, 0, "salt");
64
65 if ($salt == "") {
66
67 $query = "SELECT id
68 FROM ttrss_users WHERE
69 login = '$login' AND (pwd_hash = '$pwd_hash1' OR
70 pwd_hash = '$pwd_hash2')";
71
72 // verify and upgrade password to new salt base
73
74 $result = db_query($this->link, $query);
75
76 if (db_num_rows($result) == 1) {
77 // upgrade password to MODE2
78
79 $salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
80 $pwd_hash = encrypt_password($password, $salt, true);
81
82 db_query($this->link, "UPDATE ttrss_users SET
83 pwd_hash = '$pwd_hash', salt = '$salt' WHERE login = '$login'");
84
85 $query = "SELECT id
86 FROM ttrss_users WHERE
87 login = '$login' AND pwd_hash = '$pwd_hash'";
88
89 } else {
90 return false;
91 }
92
93 } else {
94
95 $pwd_hash = encrypt_password($password, $salt, true);
96
97 $query = "SELECT id
98 FROM ttrss_users WHERE
99 login = '$login' AND pwd_hash = '$pwd_hash'";
100
101 }
102
103 } else {
104 $query = "SELECT id
105 FROM ttrss_users WHERE
106 login = '$login' AND (pwd_hash = '$pwd_hash1' OR
107 pwd_hash = '$pwd_hash2')";
108 }
109
110 $result = db_query($this->link, $query);
111
112 if (db_num_rows($result) == 1) {
113 return db_fetch_result($result, 0, "id");
114 }
115
116 return false;
117 }
d5fd183d
AD
118
119 function change_password($owner_uid, $old_password, $new_password) {
120 $owner_uid = db_escape_string($owner_uid);
121
dc0374df 122 $result = db_query($this->link, "SELECT salt,login FROM ttrss_users WHERE
d5fd183d
AD
123 id = '$owner_uid'");
124
125 $salt = db_fetch_result($result, 0, "salt");
dc0374df 126 $login = db_fetch_result($result, 0, "login");
d5fd183d
AD
127
128 if (!$salt) {
129 $old_password_hash1 = encrypt_password($old_password);
dc0374df 130 $old_password_hash2 = encrypt_password($old_password, $login);
d5fd183d
AD
131
132 $query = "SELECT id FROM ttrss_users WHERE
133 id = '$owner_uid' AND (pwd_hash = '$old_password_hash1' OR
134 pwd_hash = '$old_password_hash2')";
135
136 } else {
137 $old_password_hash = encrypt_password($old_password, $salt, true);
138
139 $query = "SELECT id FROM ttrss_users WHERE
140 id = '$owner_uid' AND pwd_hash = '$old_password_hash'";
141 }
142
143 $result = db_query($this->link, $query);
144
145 if (db_num_rows($result) == 1) {
146
147 $new_salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
148 $new_password_hash = encrypt_password($new_password, $new_salt, true);
149
150 db_query($this->link, "UPDATE ttrss_users SET
fb70f26e 151 pwd_hash = '$new_password_hash', salt = '$new_salt', otp_enabled = false
d5fd183d
AD
152 WHERE id = '$owner_uid'");
153
154 $_SESSION["pwd_hash"] = $new_password_hash;
155
156 return __("Password has been changed.");
157 } else {
158 return "ERROR: ".__('Old password is incorrect.');
159 }
160 }
0d421af8
AD
161}
162?>