· 9 years ago · Oct 11, 2016, 08:32 PM
1<?php
2require('../../../includes/config.php');
3require('../../../structure/database.php');
4require('../../../structure/base.php');
5require('../../../structure/user.php');
6
7$database = new database($db_host, $db_name, $db_user, $db_password);
8$base = new base($database);
9$user = new user($database);
10
11//set some basic vars
12$username = $user->getUsername($_COOKIE['user'], 2);
13$rank = $user->getRank($username);
14?>
15<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
16<html xmlns:IE>
17
18<head>
19 <meta http-equiv="Expires" content="0">
20 <meta http-equiv="Pragma" content="no-cache">
21 <meta http-equiv="Cache-Control" content="no-cache">
22 <meta name="MSSmartTagsPreventParsing" content="TRUE">
23 <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
24 <title><?php echo $data['wb_title']; ?></title>
25 <link href="../../../css/basic-3.css" rel="stylesheet" type="text/css" media="all">
26 <link href="../../../css/main/title-5.css" rel="stylesheet" type="text/css" media="all">
27 <link rel="shortcut icon" href="../../../img/favicon.ico"/>
28 <?php include('../../../includes/google_analytics.html'); ?>
29 <style>
30 fieldset {
31 text-align: left;
32 border: 2px solid #625437;
33 width: 95%;
34 position: relative;
35 margin: 10px;
36 padding-left: 10px;
37 background-color: transparent;
38 }
39
40 legend {
41 color: #625437;
42 font-weight: bold;
43 font-size: 15px;
44 }
45
46 label {
47 display: block;
48 height: 20px;
49 text-align: center;
50 }
51
52 textarea {
53 display: block;
54 width: 200px;
55 height: 100px;
56 }
57
58 </style>
59 <script type="text/javascript">
60 function goBack() {
61 window.history.back();
62 }
63 </script>
64</head>
65
66<div id="body">
67 <?php //$base->getNavBar($username, $path, $rank); ?>
68
69 <div style="text-align: center; background: none;">
70 <div class="titleframe e">
71 <b>Password Support</b><br/>
72 <a href="../../../index">ScapeRune Home</a>
73 </div>
74 </div>
75</div>
76
77<div class="frame e" style="overflow:auto;">
78 <?php
79 //make sure user doesn't already have a recovery request submitted
80 $database->processQuery("SELECT * FROM `tracking` WHERE " . time() . " - `time` < 7200 AND `ip` = ? LIMIT 1", array($_SERVER['REMOTE_ADDR']), false);
81
82 if ($database->getRowCount() >= 1) {
83 echo '<center>Oops! You have already submitted a recovery request.<br /><br /> <a href="../../../index"Main Menu</a></center>';
84
85 } elseif (!isset($_POST['username'])) {
86 ?>
87
88 <form action="recover_password" method="POST">
89 <input type="text" name="username" maxlength="12"><input type="submit" value="Continue">
90 </form>
91
92 <?php
93 } elseif (!$user->doesExist($_POST['username'])) {
94 echo 'No user exists with that username!<br /> <input type="button" value="Back" onclick="goBack()" />';
95 } else {
96
97 $questions[] = array();
98 $questions[0] = 'Where was your first vacation?:';
99 $questions[1] = 'Who was your first best friend?:';
100 $questions[2] = 'What was your first pets name?:';
101 $questions[3] = 'Who was your first boyfriend/girlfriend?:';
102 $questions[4] = 'What color was your first bedroom?:';
103 $questions[5] = 'Who is your favorite musical artist?';
104
105 //extract data
106 $data = $database->processQuery("SELECT * FROM `recoveries` WHERE `id` = ? LIMIT 1", array($user->getIdByName($_POST['username'])), false);
107
108 if ($database->getRowCount() == 0 || $user->getUsername($_COOKIE['user'], 2) == $_POST['username']) {
109 echo 'Temporarily disabled! <input type="button" value="Back" onclick="goBack()" />';
110 } elseif (!isset($_POST['answer'])) {
111 ?>
112 <fieldset class="question">
113 <legend>Important Information</legend>
114 This form will allow you to request that a new password is set for your account.<br/><br/>
115 <img style="float: left" src="/img/title2/lock.gif">
116 <span style="font-weight: bold; color: rgb(255, 187, 34);">Want to be back in game sooner? If you want to get back in game quickly, here are a few tips:</span><br/><br/>
117
118 Please answer all the questions below to confirm that you are the real owner of the account.<br/><br/>
119 Enter the earliest and most specific information about the account that you can.<br/><br/>
120 Take the time to remember as much detail as possible. The more detail you give us, <b>the quicker you
121 can be
122 back in game</b>
123 <br/><br/>
124 If you really don't know the answer to a question, leave the answer box blank.<br/><br/>
125 <b>Remember:</b> The more questions you answer correctly, the sooner you can be back in game!
126 </fieldset>
127 <br/>
128
129 <fieldset class="question">
130 <legend>Answer Recovery Questions</legend>
131 <p style="text-align: center">If you have set these, you must try to answer at least three. Recovery
132 answers
133 have a minimum length of 3 characters.
134 Recovery answers can only contain the characters A-Z, 0-9 and accented characters such as é or
135 ü.
136 Other characters will not count towards the length.</p>
137
138 <label><b>I have not set any recovery questions</b>
139 <input type="checkbox" class="input_control" value="subject"/></label>
140
141 <form action="recover_password" method="POST">
142 <table cellpadding="6" style="margin-left:auto;margin-right:auto;">
143 <?php
144 $i = 0;
145 foreach ($questions as $question) {
146 $i++;
147 ?>
148 <tr>
149 </tr>
150 <tr>
151 <td><?php echo $question; ?> 
152 <input type="text" class="textbox" name="answer[]" maxlength="40"
153 style="display: block;"></td>
154 </tr>
155 <?php
156 }
157 ?>
158 </table>
159 <input type="hidden" id="fuck" value="Submit Recovery">
160 </form>
161 </fieldset>
162
163 <fieldset class="question">
164 <legend>Your New Password</legend>
165 <p style="text-align: center">These must match exactly for the appeal to proceed.<br/>
166 For advice on setting a good password, please click <a style="color: rgb(255, 187, 34);"
167 target="_blank"
168 href="/kbase/viewarticle7564.html?article_id=2087">here</a>
169 (Opens in a new window).</p>
170 <table>
171 <tr>
172 <td style="vertical-align: middle"><b>Enter a new password for your account: <input type="text"
173 name="username"></b>
174 </td>
175 </tr>
176 <tr>
177 <td style="vertical-align: middle"><b>          Please
178 enter it again: <input type="text" name="username"></b></td>
179 </tr>
180 </table>
181 </fieldset>
182 <fieldset class="question">
183
184 <legend>Other Details</legend>
185 When did you create this account?
186 <form action="recover_password.php" method="POST">
187 <table>
188 <tr>
189 <td style="vertical-align: middle">
190 If you have any other details which would help you prove your ownership of this
191 account, please enter them here.<br/>
192 Please <b>do not</b> provide us with any of this following personal information, your
193 full
194 name, home
195 address, email address or telephone number.<br/><br/>
196 <span class='textcounter' id="counter1">You have 300 characters remaining</span>
197 </td>
198 <td>
199 <textarea style="height: 120px; width: 450px;" class="textlimited"
200 data-textcounterid="counter1" maxlength="300" rows="4" cols="50"></textarea><br/>
201 </td>
202 </tr>
203 </table>
204 <input type="submit" value="Submit Recovery">
205 </form>
206 </fieldset>
207 <?php
208 } else {
209 //validate answers
210 $errors = array();
211 $answers = $_POST['answer'];
212 $i = 0;
213
214 foreach ($answers as $answer) {
215 $i++;
216
217 if (strlen($answer) < 3 || strlen($answer) > 35) {
218 $errors[] = 'Question #' . $i . ' must be at least three characters and no more than 26 characters.';
219 }
220
221 if (preg_match('#[^a-zA-Z0-9$/^[\p{L}-]*$/u ]#', $answer)) {
222 $errors[] = 'Question #' . $i . ' contains illegal characters.';
223 }
224 }
225
226 if (count($errors) >= 1) {
227 //back button
228 ?>
229 <center><input type="button" value="Back" onclick="goBack()"/></center> <?php
230
231 //display errors
232 foreach ($errors as $error) {
233 echo $error . '<br/>';
234 }
235 } else {
236 //generate a tracking ID
237 $rand_hash = $base->randomString(11);
238 $tracking_id = substr($rand_hash, 0, 3) . '-' . substr($rand_hash, 4, 3) . '-' . substr($rand_hash, 7, 3);
239
240 //create the recovery request
241 $database->processQuery("INSERT INTO `tracking` VALUES (null, ?, ?, NOW(), ?, ?, 0, ?, ?, ?, ?, ?, ?)", array($user->getIdByName($_POST['username']), $_SERVER['REMOTE_ADDR'], time(), $tracking_id, $answers[0], $answers[1], $answers[2], $answers[3], $answers[4], $answers[5]), false);
242
243 ?>
244 <fieldset class="question">
245 <legend>Success!</legend>
246 You have successfully submitted an account recovery request. Your request will be
247 reviewed and processed within the next 48 hours. To track your account recovery
248 progress you can use the <b>recovery tracking ID</b>.<br><br> <b>Please make
249 note</b> of the the tracking ID provided to you and store it in a <b>safe</b>,
250 <b>secure</b> location so you don't lose or forget it.</b>
251 </fieldset>
252 <br/>
253 <br/>
254 <b>Tracking ID: <?php echo $tracking_id; ?></b>
255
256 <?php
257 }
258 }
259 }
260 ?>
261 <br/>
262 <br/>
263
264 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
265 <script src="http://code.jquery.com/jquery-latest.min.js"></script>
266 <script type="text/javascript">
267 //checks how many characters are remaining
268 // the selector below will catch the keyup events of elements decorated with class textlimited and have a maxlength
269 $('.textlimited[maxlength]').keyup(function () {
270 //get the fields limit
271 var maxLength = $(this).attr("maxlength");
272
273 // check if the limit is passed
274 if (this.value.length > maxLength) {
275 return false;
276 }
277
278 // find the counter element by the id specified in the source input element
279 var counterElement = $(".textcounter#" + $(this).data("textcounterid"));
280 // update counter 's text
281 counterElement.html("You have " + (maxLength - this.value.length) + " chararacters remaining");
282 });
283
284 //checks if the user has selected no recoveries and disables the textareas
285 $(document).ready(function () {
286 $('.input_control').change(function () {
287 $(".textbox").prop('disabled', this.checked);
288 $(".textarea").prop('disabled', this.checked);
289 });
290 $('.input_control').prop('checked', false);
291 $('.input_control').trigger('change');
292 });
293
294 // for future development
295 var months = [
296 {DaysInMonth: 31, Name: "January"},
297 {DaysInMonth: 31, Name: "February"},
298 {DaysInMonth: 31, Name: "March"},
299 {DaysInMonth: 31, Name: "April"},
300 {DaysInMonth: 31, Name: "May"},
301 {DaysInMonth: 31, Name: "June"},
302 {DaysInMonth: 31, Name: "July"},
303 {DaysInMonth: 31, Name: "August"},
304 {DaysInMonth: 31, Name: "September"},
305 {DaysInMonth: 31, Name: "October"},
306 {DaysInMonth: 31, Name: "November"},
307 {DaysInMonth: 31, Name: "December"}
308 ];
309 $(function () {
310 var monthSelector = $('select[name=month]');
311 $.each(months, function (index, month) {
312 $('<option></option>')
313 .attr('label', month.Name)
314 .attr('value', index)
315 .html(month.DaysInMonth)
316 .appendTo(monthSelector);
317 });
318
319 var yearSelector = $('select[name=ano]');
320 for (var year = 2015; year <= 2016; year++)
321 $('<option></option>')
322 .attr('label', year)
323 .attr('value', year)
324 .html(year)
325 .appendTo(yearSelector);
326 });
327
328 //limits the characters input in the 'other details' text area
329 function charLimit(limitField, limitNum) {
330 if (limitField.value.length > limitNum) {
331 limitField.value = limitField.value.substring(0, limitNum);
332 }
333 }
334 </script>
335 <div style="clear: both;"></div>
336</div>
337</div>
338</div>
339</div>
340
341<div class="tandc"><?php echo $data['wb_foot']; ?></div>
342</div>
343</body>
344</html>