]> git.wh0rd.org - tt-rss.git/blame - register.php
Logger: add implementation for logger->log(message)
[tt-rss.git] / register.php
CommitLineData
4f7956b3 1<?php
a53f3dc4 2 // This file uses two additional include files:
4f7956b3 3 //
a53f3dc4
AD
4 // 1) templates/register_notice.txt - displayed above the registration form
5 // 2) register_expire_do.php - contains user expiration queries when necessary
4f7956b3 6
88e8fb3a
AD
7 set_include_path(dirname(__FILE__) ."/include" . PATH_SEPARATOR .
8 get_include_path());
107d0cf3 9
1b2afd2b 10 require_once 'classes/ttrssmailer.php';
404e2e36 11 require_once "autoload.php";
fb074239 12 require_once "functions.php";
4f7956b3 13 require_once "sessions.php";
4f7956b3 14 require_once "sanity_check.php";
4f7956b3
AD
15 require_once "config.php";
16 require_once "db.php";
4f7956b3 17
67e0cf9a
AD
18 startup_gettext();
19
f9c0fc6e
AD
20 $action = $_REQUEST["action"];
21
6322ac79 22 if (!init_plugins()) return;
4f7956b3 23
870a70e1
AD
24 if ($_REQUEST["format"] == "feed") {
25 header("Content-Type: text/xml");
26
27 print '<?xml version="1.0" encoding="utf-8"?>';
28 print "<feed xmlns=\"http://www.w3.org/2005/Atom\">
29 <id>".htmlspecialchars(SELF_URL_PATH . "/register.php")."</id>
99534a3d 30 <title>Tiny Tiny RSS registration slots</title>
870a70e1
AD
31 <link rel=\"self\" href=\"".htmlspecialchars(SELF_URL_PATH . "/register.php?format=feed")."\"/>
32 <link rel=\"alternate\" href=\"".htmlspecialchars(SELF_URL_PATH)."\"/>";
33
34 if (ENABLE_REGISTRATION) {
6322ac79 35 $result = db_query( "SELECT COUNT(*) AS cu FROM ttrss_users");
870a70e1
AD
36 $num_users = db_fetch_result($result, 0, "cu");
37
410c0b3a 38 $num_users = REG_MAX_USERS - $num_users;
870a70e1
AD
39 if ($num_users < 0) $num_users = 0;
40 $reg_suffix = "enabled";
41 } else {
42 $num_users = 0;
43 $reg_suffix = "disabled";
44 }
45
46 print "<entry>
47 <id>".htmlspecialchars(SELF_URL_PATH)."/register.php?$num_users"."</id>
48 <link rel=\"alternate\" href=\"".htmlspecialchars(SELF_URL_PATH . "/register.php")."\"/>";
49
50 print "<title>$num_users slots are currently available, registration $reg_suffix</title>";
51 print "<summary>$num_users slots are currently available, registration $reg_suffix</summary>";
52
53 print "</entry>";
54
55 print "</feed>";
56
57 return;
58 }
59
4f7956b3
AD
60 /* Remove users which didn't login after receiving their registration information */
61
62 if (DB_TYPE == "pgsql") {
6322ac79 63 db_query( "DELETE FROM ttrss_users WHERE last_login IS NULL
4f7956b3
AD
64 AND created < NOW() - INTERVAL '1 day' AND access_level = 0");
65 } else {
6322ac79 66 db_query( "DELETE FROM ttrss_users WHERE last_login IS NULL
4f7956b3
AD
67 AND created < DATE_SUB(NOW(), INTERVAL 1 DAY) AND access_level = 0");
68 }
69
a53f3dc4
AD
70 if (file_exists("register_expire_do.php")) {
71 require_once "register_expire_do.php";
72 }
73
4f7956b3
AD
74 if ($action == "check") {
75 header("Content-Type: application/xml");
76
6322ac79 77 $login = trim(db_escape_string( $_REQUEST['login']));
4f7956b3 78
6322ac79 79 $result = db_query( "SELECT id FROM ttrss_users WHERE
4f7956b3 80 LOWER(login) = LOWER('$login')");
133ab8c7 81
4f7956b3
AD
82 $is_registered = db_num_rows($result) > 0;
83
84 print "<result>";
85
86 printf("%d", $is_registered);
87
88 print "</result>";
89
90 return;
91 }
92?>
93
94<html>
95<head>
96<title>Create new account</title>
97<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
9dd336a2 98<?php echo stylesheet_tag("css/default.css") ?>
5a801bd6
AD
99<?php echo javascript_tag("js/functions.js") ?>
100<?php echo javascript_tag("lib/prototype.js") ?>
101<?php echo javascript_tag("lib/scriptaculous/scriptaculous.js?load=effects,controls") ?>
4f7956b3
AD
102</head>
103
104<script type="text/javascript">
105
106 function checkUsername() {
107
108 try {
109 var f = document.forms['register_form'];
110 var login = f.login.value;
111
112 if (login == "") {
113 new Effect.Highlight(f.login);
114 f.sub_btn.disabled = true;
115 return false;
116 }
117
133ab8c7 118 var query = "register.php?action=check&login=" +
4f7956b3
AD
119 param_escape(login);
120
121 new Ajax.Request(query, {
133ab8c7 122 onComplete: function(transport) {
4f7956b3
AD
123
124 try {
125
126 var reply = transport.responseXML;
127
128 var result = reply.getElementsByTagName('result')[0];
129 var result_code = result.firstChild.nodeValue;
130
131 if (result_code == 0) {
132 new Effect.Highlight(f.login, {startcolor : '#00ff00'});
133 f.sub_btn.disabled = false;
134 } else {
135 new Effect.Highlight(f.login, {startcolor : '#ff0000'});
136 f.sub_btn.disabled = true;
133ab8c7 137 }
4f7956b3
AD
138 } catch (e) {
139 exception_error("checkUsername_callback", e);
140 }
141
142 } });
143
144 } catch (e) {
145 exception_error("checkUsername", e);
146 }
147
148 return false;
149
150 }
151
152 function validateRegForm() {
153 try {
154
155 var f = document.forms['register_form'];
156
157 if (f.login.value.length == 0) {
158 new Effect.Highlight(f.login);
159 return false;
160 }
161
162 if (f.email.value.length == 0) {
163 new Effect.Highlight(f.email);
164 return false;
165 }
166
167 if (f.turing_test.value.length == 0) {
168 new Effect.Highlight(f.turing_test);
169 return false;
170 }
171
172 return true;
173
174 } catch (e) {
175 exception_error("validateRegForm", e);
176 return false;
177 }
178 }
179
180</script>
181
09bc54c6 182<body class="claro ttrss_utility">
4f7956b3 183
884d1650 184<div class="floatingLogo"><img src="images/logo_small.png"></div>
4f7956b3
AD
185
186<h1><?php echo __("Create new account") ?></h1>
187
884d1650
AD
188<div class="content">
189
4f7956b3
AD
190<?php
191 if (!ENABLE_REGISTRATION) {
192 print_error(__("New user registrations are administratively disabled."));
193
2376ad49
AD
194 print "<p><form method=\"GET\" action=\"backend.php\">
195 <input type=\"hidden\" name=\"op\" value=\"logout\">
4f7956b3
AD
196 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
197 </form>";
198 return;
199 }
200?>
201
4f7956b3 202<?php if (REG_MAX_USERS > 0) {
6322ac79 203 $result = db_query( "SELECT COUNT(*) AS cu FROM ttrss_users");
4f7956b3
AD
204 $num_users = db_fetch_result($result, 0, "cu");
205} ?>
206
0844d6a9 207<?php if (!REG_MAX_USERS || $num_users < REG_MAX_USERS) { ?>
4f7956b3 208
4ca3d8c4
AD
209 <!-- If you have any rules or ToS you'd like to display, enter them here -->
210
211 <?php if (file_exists("templates/register_notice.txt")) {
212 require_once "templates/register_notice.txt";
213 } ?>
214
0844d6a9 215 <?php if (!$action) { ?>
133ab8c7
AD
216
217 <p><?php echo __('Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent.') ?></p>
218
4f7956b3
AD
219 <form action="register.php" method="POST" name="register_form">
220 <input type="hidden" name="action" value="do_register">
221 <table>
222 <tr>
223 <td><?php echo __('Desired login:') ?></td><td>
5ce9d43e 224 <input name="login" required>
4f7956b3
AD
225 </td><td>
226 <input type="submit" value="<?php echo __('Check availability') ?>" onclick='return checkUsername()'>
227 </td></tr>
e331188f 228 <tr><td><?php echo __('Email:') ?></td><td>
5ce9d43e 229 <input name="email" type="email" required>
4f7956b3 230 </td></tr>
e331188f 231 <tr><td><?php echo __('How much is two plus two:') ?></td><td>
5ce9d43e 232 <input name="turing_test" required></td></tr>
4f7956b3 233 <tr><td colspan="2" align="right">
2a52d96f 234 <input type="submit" name="sub_btn" value="<?php echo __('Submit registration') ?>"
a2998811 235 disabled="disabled" onclick='return validateRegForm()'>
4f7956b3
AD
236 </td></tr>
237 </table>
238 </form>
1da195e2 239
107d0cf3 240 <?php print "<p><form method=\"GET\" action=\"index.php\">
1da195e2
AD
241 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
242 </form>"; ?>
243
0844d6a9 244 <?php } else if ($action == "do_register") { ?>
133ab8c7 245
0844d6a9 246 <?php
6322ac79
AD
247 $login = mb_strtolower(trim(db_escape_string( $_REQUEST["login"])));
248 $email = trim(db_escape_string( $_REQUEST["email"]));
249 $test = trim(db_escape_string( $_REQUEST["turing_test"]));
133ab8c7 250
4f7956b3 251 if (!$login || !$email || !$test) {
c46a4a05 252 print_error(__("Your registration information is incomplete."));
107d0cf3 253 print "<p><form method=\"GET\" action=\"index.php\">
c46a4a05
AD
254 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
255 </form>";
4f7956b3
AD
256 return;
257 }
133ab8c7 258
4f7956b3 259 if ($test == "four" || $test == "4") {
133ab8c7 260
6322ac79 261 $result = db_query( "SELECT id FROM ttrss_users WHERE
4f7956b3 262 login = '$login'");
133ab8c7 263
4f7956b3 264 $is_registered = db_num_rows($result) > 0;
133ab8c7 265
4f7956b3
AD
266 if ($is_registered) {
267 print_error(__('Sorry, this username is already taken.'));
107d0cf3 268 print "<p><form method=\"GET\" action=\"index.php\">
4f7956b3
AD
269 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
270 </form>";
271 } else {
133ab8c7 272
4f7956b3 273 $password = make_password();
133ab8c7 274
8db5d8ea 275 $salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
098df83b 276 $pwd_hash = encrypt_password($password, $salt, true);
133ab8c7 277
6322ac79 278 db_query( "INSERT INTO ttrss_users
098df83b
AD
279 (login,pwd_hash,access_level,last_login, email, created, salt)
280 VALUES ('$login', '$pwd_hash', 0, null, '$email', NOW(), '$salt')");
133ab8c7 281
6322ac79 282 $result = db_query( "SELECT id FROM ttrss_users WHERE
4f7956b3 283 login = '$login' AND pwd_hash = '$pwd_hash'");
133ab8c7 284
4f7956b3
AD
285 if (db_num_rows($result) != 1) {
286 print_error(__('Registration failed.'));
107d0cf3 287 print "<p><form method=\"GET\" action=\"index.php\">
4f7956b3
AD
288 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
289 </form>";
290 } else {
133ab8c7 291
4f7956b3 292 $new_uid = db_fetch_result($result, 0, "id");
133ab8c7 293
6322ac79 294 initialize_user( $new_uid);
133ab8c7 295
4f7956b3
AD
296 $reg_text = "Hi!\n".
297 "\n".
298 "You are receiving this message, because you (or somebody else) have opened\n".
299 "an account at Tiny Tiny RSS.\n".
300 "\n".
301 "Your login information is as follows:\n".
302 "\n".
303 "Login: $login\n".
304 "Password: $password\n".
305 "\n".
306 "Don't forget to login at least once to your new account, otherwise\n".
307 "it will be deleted in 24 hours.\n".
308 "\n".
309 "If that wasn't you, just ignore this message. Thanks.";
133ab8c7 310
1b2afd2b 311 $mail = new ttrssMailer();
312 $mail->IsHTML(false);
313 $rc = $mail->quickMail($email, "", "Registration information for Tiny Tiny RSS", $reg_text, false);
133ab8c7 314
4f7956b3 315 if (!$rc) print_error($mail->ErrorInfo);
884d1650 316
1b2afd2b 317 unset($reg_text);
318 unset($mail);
319 unset($rc);
4f7956b3
AD
320 $reg_text = "Hi!\n".
321 "\n".
322 "New user had registered at your Tiny Tiny RSS installation.\n".
323 "\n".
324 "Login: $login\n".
325 "Email: $email\n";
884d1650
AD
326
327
1b2afd2b 328 $mail = new ttrssMailer();
329 $mail->IsHTML(false);
330 $rc = $mail->quickMail(REG_NOTIFY_ADDRESS, "", "Registration notice for Tiny Tiny RSS", $reg_text, false);
331 if (!$rc) print_error($mail->ErrorInfo);
884d1650 332
4f7956b3 333 print_notice(__("Account created successfully."));
133ab8c7 334
107d0cf3 335 print "<p><form method=\"GET\" action=\"index.php\">
4f7956b3
AD
336 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
337 </form>";
133ab8c7 338
4f7956b3 339 }
133ab8c7 340
4f7956b3 341 }
133ab8c7 342
4f7956b3
AD
343 } else {
344 print_error('Plese check the form again, you have failed the robot test.');
107d0cf3 345 print "<p><form method=\"GET\" action=\"index.php\">
4f7956b3
AD
346 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
347 </form>";
133ab8c7 348
4f7956b3
AD
349 }
350 }
351 ?>
352
0844d6a9 353<?php } else { ?>
4f7956b3
AD
354
355 <?php print_notice(__('New user registrations are currently closed.')) ?>
356
107d0cf3 357 <?php print "<p><form method=\"GET\" action=\"index.php\">
4f7956b3
AD
358 <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
359 </form>"; ?>
360
0844d6a9 361<?php } ?>
4f7956b3 362
884d1650
AD
363 </div>
364
4f7956b3
AD
365</body>
366</html>
367