· 8 years ago · Jun 11, 2018, 04:42 PM
1<?php
2if (session_id() == "") session_start(); // Init session data
3ob_start(); // Turn on output buffering
4?>
5<?php include_once "ewcfg13.php" ?>
6<?php include_once ((EW_USE_ADODB) ? "adodb5/adodb.inc.php" : "ewmysql13.php") ?>
7<?php include_once "phpfn13.php" ?>
8<?php include_once "t_userinfo.php" ?>
9<?php include_once "userfn13.php" ?>
10<?php
11
12//
13// Page class
14//
15
16$login = NULL; // Initialize page object first
17
18class clogin extends ct_user {
19
20 // Page ID
21 var $PageID = 'login';
22
23 // Project ID
24 var $ProjectID = "{035CBF11-745C-4982-814A-B6768131C8FC}";
25
26 // Page object name
27 var $PageObjName = 'login';
28
29 // Page name
30 function PageName() {
31 return ew_CurrentPage();
32 }
33
34 // Page URL
35 function PageUrl() {
36 $PageUrl = ew_CurrentPage() . "?";
37 return $PageUrl;
38 }
39
40 // Message
41 function getMessage() {
42 return @$_SESSION[EW_SESSION_MESSAGE];
43 }
44
45 function setMessage($v) {
46 ew_AddMessage($_SESSION[EW_SESSION_MESSAGE], $v);
47 }
48
49 function getFailureMessage() {
50 return @$_SESSION[EW_SESSION_FAILURE_MESSAGE];
51 }
52
53 function setFailureMessage($v) {
54 ew_AddMessage($_SESSION[EW_SESSION_FAILURE_MESSAGE], $v);
55 }
56
57 function getSuccessMessage() {
58 return @$_SESSION[EW_SESSION_SUCCESS_MESSAGE];
59 }
60
61 function setSuccessMessage($v) {
62 ew_AddMessage($_SESSION[EW_SESSION_SUCCESS_MESSAGE], $v);
63 }
64
65 function getWarningMessage() {
66 return @$_SESSION[EW_SESSION_WARNING_MESSAGE];
67 }
68
69 function setWarningMessage($v) {
70 ew_AddMessage($_SESSION[EW_SESSION_WARNING_MESSAGE], $v);
71 }
72
73 // Methods to clear message
74 function ClearMessage() {
75 $_SESSION[EW_SESSION_MESSAGE] = "";
76 }
77
78 function ClearFailureMessage() {
79 $_SESSION[EW_SESSION_FAILURE_MESSAGE] = "";
80 }
81
82 function ClearSuccessMessage() {
83 $_SESSION[EW_SESSION_SUCCESS_MESSAGE] = "";
84 }
85
86 function ClearWarningMessage() {
87 $_SESSION[EW_SESSION_WARNING_MESSAGE] = "";
88 }
89
90 function ClearMessages() {
91 $_SESSION[EW_SESSION_MESSAGE] = "";
92 $_SESSION[EW_SESSION_FAILURE_MESSAGE] = "";
93 $_SESSION[EW_SESSION_SUCCESS_MESSAGE] = "";
94 $_SESSION[EW_SESSION_WARNING_MESSAGE] = "";
95 }
96
97 // Show message
98 function ShowMessage() {
99 $hidden = FALSE;
100 $html = "";
101
102 // Message
103 $sMessage = $this->getMessage();
104 if (method_exists($this, "Message_Showing"))
105 $this->Message_Showing($sMessage, "");
106 if ($sMessage <> "") { // Message in Session, display
107 if (!$hidden)
108 $sMessage = "<button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>" . $sMessage;
109 $html .= "<div class=\"alert alert-info ewInfo\">" . $sMessage . "</div>";
110 $_SESSION[EW_SESSION_MESSAGE] = ""; // Clear message in Session
111 }
112
113 // Warning message
114 $sWarningMessage = $this->getWarningMessage();
115 if (method_exists($this, "Message_Showing"))
116 $this->Message_Showing($sWarningMessage, "warning");
117 if ($sWarningMessage <> "") { // Message in Session, display
118 if (!$hidden)
119 $sWarningMessage = "<button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>" . $sWarningMessage;
120 $html .= "<div class=\"alert alert-warning ewWarning\">" . $sWarningMessage . "</div>";
121 $_SESSION[EW_SESSION_WARNING_MESSAGE] = ""; // Clear message in Session
122 }
123
124 // Success message
125 $sSuccessMessage = $this->getSuccessMessage();
126 if (method_exists($this, "Message_Showing"))
127 $this->Message_Showing($sSuccessMessage, "success");
128 if ($sSuccessMessage <> "") { // Message in Session, display
129 if (!$hidden)
130 $sSuccessMessage = "<button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>" . $sSuccessMessage;
131 $html .= "<div class=\"alert alert-success ewSuccess\">" . $sSuccessMessage . "</div>";
132 $_SESSION[EW_SESSION_SUCCESS_MESSAGE] = ""; // Clear message in Session
133 }
134
135 // Failure message
136 $sErrorMessage = $this->getFailureMessage();
137 if (method_exists($this, "Message_Showing"))
138 $this->Message_Showing($sErrorMessage, "failure");
139 if ($sErrorMessage <> "") { // Message in Session, display
140 if (!$hidden)
141 $sErrorMessage = "<button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>" . $sErrorMessage;
142 $html .= "<div class=\"alert alert-danger ewError\">" . $sErrorMessage . "</div>";
143 $_SESSION[EW_SESSION_FAILURE_MESSAGE] = ""; // Clear message in Session
144 }
145 echo "<div class=\"ewMessageDialog\"" . (($hidden) ? " style=\"display: none;\"" : "") . ">" . $html . "</div>";
146 }
147 var $PageHeader;
148 var $PageFooter;
149
150 // Show Page Header
151 function ShowPageHeader() {
152 $sHeader = $this->PageHeader;
153 $this->Page_DataRendering($sHeader);
154 if ($sHeader <> "") { // Header exists, display
155 echo "<p>" . $sHeader . "</p>";
156 }
157 }
158
159 // Show Page Footer
160 function ShowPageFooter() {
161 $sFooter = $this->PageFooter;
162 $this->Page_DataRendered($sFooter);
163 if ($sFooter <> "") { // Footer exists, display
164 echo "<p>" . $sFooter . "</p>";
165 }
166 }
167
168 // Validate page request
169 function IsPageRequest() {
170 return TRUE;
171 }
172 var $Token = "";
173 var $TokenTimeout = 0;
174 var $CheckToken = EW_CHECK_TOKEN;
175 var $CheckTokenFn = "ew_CheckToken";
176 var $CreateTokenFn = "ew_CreateToken";
177
178 // Valid Post
179 function ValidPost() {
180 if (!$this->CheckToken || !ew_IsHttpPost())
181 return TRUE;
182 if (!isset($_POST[EW_TOKEN_NAME]))
183 return FALSE;
184 $fn = $this->CheckTokenFn;
185 if (is_callable($fn))
186 return $fn($_POST[EW_TOKEN_NAME], $this->TokenTimeout);
187 return FALSE;
188 }
189
190 // Create Token
191 function CreateToken() {
192 global $gsToken;
193 if ($this->CheckToken) {
194 $fn = $this->CreateTokenFn;
195 if ($this->Token == "" && is_callable($fn)) // Create token
196 $this->Token = $fn();
197 $gsToken = $this->Token; // Save to global variable
198 }
199 }
200
201 //
202 // Page class constructor
203 //
204 function __construct() {
205 global $conn, $Language;
206 global $UserTable, $UserTableConn;
207 $GLOBALS["Page"] = &$this;
208 $this->TokenTimeout = 48 * 60 * 60; // 48 hours for login
209
210 // Language object
211 if (!isset($Language)) $Language = new cLanguage();
212
213 // Parent constuctor
214 parent::__construct();
215
216 // Table object (t_user)
217 if (!isset($GLOBALS["t_user"]) || get_class($GLOBALS["t_user"]) == "ct_user") {
218 $GLOBALS["t_user"] = &$this;
219 $GLOBALS["Table"] = &$GLOBALS["t_user"];
220 }
221 if (!isset($GLOBALS["t_user"])) $GLOBALS["t_user"] = &$this;
222
223 // Page ID
224 if (!defined("EW_PAGE_ID"))
225 define("EW_PAGE_ID", 'login', TRUE);
226
227 // Start timer
228 if (!isset($GLOBALS["gTimer"])) $GLOBALS["gTimer"] = new cTimer();
229
230 // Open connection
231 if (!isset($conn)) $conn = ew_Connect($this->DBID);
232
233 // User table object (t_user)
234 if (!isset($UserTable)) {
235 $UserTable = new ct_user();
236 $UserTableConn = Conn($UserTable->DBID);
237 }
238 }
239
240 //
241 // Page_Init
242 //
243 function Page_Init() {
244 global $gsExport, $gsCustomExport, $gsExportFile, $UserProfile, $Language, $Security, $objForm;
245
246 // Security
247 $Security = new cAdvancedSecurity();
248 $this->CurrentAction = (@$_GET["a"] <> "") ? $_GET["a"] : @$_POST["a_list"]; // Set up current action
249
250 // Global Page Loading event (in userfn*.php)
251 Page_Loading();
252
253 // Page Load event
254 $this->Page_Load();
255
256 // Check token
257 if (!$this->ValidPost()) {
258 echo $Language->Phrase("InvalidPostRequest");
259 $this->Page_Terminate();
260 exit();
261 }
262
263 // Create Token
264 $this->CreateToken();
265 }
266
267 //
268 // Page_Terminate
269 //
270 function Page_Terminate($url = "") {
271 global $gsExportFile, $gTmpImages;
272
273 // Page Unload event
274 $this->Page_Unload();
275
276 // Global Page Unloaded event (in userfn*.php)
277 Page_Unloaded();
278
279 // Export
280 $this->Page_Redirecting($url);
281
282 // Close connection
283 ew_CloseConn();
284
285 // Go to URL if specified
286 if ($url <> "") {
287 if (!EW_DEBUG_ENABLED && ob_get_length())
288 ob_end_clean();
289 header("Location: " . $url);
290 }
291 exit();
292 }
293 var $Username;
294 var $LoginType;
295
296 //
297 // Page main
298 //
299 function Page_Main() {
300 global $Security, $Language, $UserProfile, $gsFormError;
301 global $Breadcrumb;
302 $url = substr(ew_CurrentUrl(), strrpos(ew_CurrentUrl(), "/")+1);
303 $Breadcrumb = new cBreadcrumb;
304 $Breadcrumb->Add("login", "LoginPage", $url, "", "", TRUE);
305 $sPassword = "";
306 $sLastUrl = $Security->LastUrl(); // Get last URL
307 if ($sLastUrl == "")
308 $sLastUrl = "index.php";
309
310 // If session expired, show session expired message
311 if (@$_GET["expired"] == "1")
312 $this->setFailureMessage($Language->Phrase("SessionExpired"));
313 if (IsLoggingIn()) {
314 $this->Username = @$_SESSION[EW_SESSION_USER_PROFILE_USER_NAME];
315 $sPassword = @$_SESSION[EW_SESSION_USER_PROFILE_PASSWORD];
316 $this->LoginType = @$_SESSION[EW_SESSION_USER_PROFILE_LOGIN_TYPE];
317 $bValidPwd = $Security->ValidateUser($this->Username, $sPassword, FALSE);
318 if ($bValidPwd) {
319 $_SESSION[EW_SESSION_USER_PROFILE_USER_NAME] = "";
320 $_SESSION[EW_SESSION_USER_PROFILE_PASSWORD] = "";
321 $_SESSION[EW_SESSION_USER_PROFILE_LOGIN_TYPE] = "";
322 }
323 } else {
324 if (!$Security->IsLoggedIn())
325 $Security->AutoLogin();
326 $Security->LoadUserLevel(); // Load user level
327 $this->Username = ""; // Initialize
328 $encrypted = FALSE;
329 if (isset($_POST["username"])) {
330 $this->Username = ew_RemoveXSS(ew_StripSlashes($_POST["username"]));
331 $sPassword = ew_RemoveXSS(ew_StripSlashes(@$_POST["password"]));
332 $this->LoginType = strtolower(ew_RemoveXSS(@$_POST["type"]));
333 } else if (EW_ALLOW_LOGIN_BY_URL && isset($_GET["username"])) {
334 $this->Username = ew_RemoveXSS(ew_StripSlashes($_GET["username"]));
335 $sPassword = ew_RemoveXSS(ew_StripSlashes(@$_GET["password"]));
336 $this->LoginType = strtolower(ew_RemoveXSS(@$_GET["type"]));
337 $encrypted = !empty($_GET["encrypted"]);
338 }
339 if ($this->Username <> "") {
340 $bValidate = $this->ValidateForm($this->Username, $sPassword);
341 if (!$bValidate)
342 $this->setFailureMessage($gsFormError);
343 $_SESSION[EW_SESSION_USER_LOGIN_TYPE] = $this->LoginType; // Save user login type
344 $_SESSION[EW_SESSION_USER_PROFILE_USER_NAME] = $this->Username; // Save login user name
345 $_SESSION[EW_SESSION_USER_PROFILE_LOGIN_TYPE] = $this->LoginType; // Save login type
346 } else {
347 if ($Security->IsLoggedIn()) {
348 if ($this->getFailureMessage() == "")
349 $this->Page_Terminate($sLastUrl); // Return to last accessed page
350 }
351 $bValidate = FALSE;
352
353 // Restore settings
354 if (@$_COOKIE[EW_PROJECT_NAME]['Checksum'] == strval(crc32(md5(EW_RANDOM_KEY))))
355 $this->Username = ew_Decrypt(@$_COOKIE[EW_PROJECT_NAME]['Username']);
356 if (@$_COOKIE[EW_PROJECT_NAME]['AutoLogin'] == "autologin") {
357 $this->LoginType = "a";
358 } elseif (@$_COOKIE[EW_PROJECT_NAME]['AutoLogin'] == "rememberusername") {
359 $this->LoginType = "u";
360 } else {
361 $this->LoginType = "";
362 }
363 }
364 $bValidPwd = FALSE;
365 if ($bValidate) {
366
367 // Call Logging In event
368 $bValidate = $this->User_LoggingIn($this->Username, $sPassword);
369 if ($bValidate) {
370 $bValidPwd = $Security->ValidateUser($this->Username, $sPassword, FALSE, $encrypted); // Manual login
371 if (!$bValidPwd) {
372 if ($this->getFailureMessage() == "")
373 $this->setFailureMessage($Language->Phrase("InvalidUidPwd")); // Invalid user id/password
374 }
375 } else {
376 if ($this->getFailureMessage() == "")
377 $this->setFailureMessage($Language->Phrase("LoginCancelled")); // Login cancelled
378 }
379 }
380 }
381 if ($bValidPwd) {
382
383 // Write cookies
384 if ($this->LoginType == "a") { // Auto login
385 setcookie(EW_PROJECT_NAME . '[AutoLogin]', "autologin", EW_COOKIE_EXPIRY_TIME); // Set autologin cookie
386 setcookie(EW_PROJECT_NAME . '[Username]', ew_Encrypt($this->Username), EW_COOKIE_EXPIRY_TIME); // Set user name cookie
387 setcookie(EW_PROJECT_NAME . '[Password]', ew_Encrypt($sPassword), EW_COOKIE_EXPIRY_TIME); // Set password cookie
388 setcookie(EW_PROJECT_NAME . '[Checksum]', crc32(md5(EW_RANDOM_KEY)), EW_COOKIE_EXPIRY_TIME);
389 } elseif ($this->LoginType == "u") { // Remember user name
390 setcookie(EW_PROJECT_NAME . '[AutoLogin]', "rememberusername", EW_COOKIE_EXPIRY_TIME); // Set remember user name cookie
391 setcookie(EW_PROJECT_NAME . '[Username]', ew_Encrypt($this->Username), EW_COOKIE_EXPIRY_TIME); // Set user name cookie
392 setcookie(EW_PROJECT_NAME . '[Checksum]', crc32(md5(EW_RANDOM_KEY)), EW_COOKIE_EXPIRY_TIME);
393 } else {
394 setcookie(EW_PROJECT_NAME . '[AutoLogin]', "", EW_COOKIE_EXPIRY_TIME); // Clear auto login cookie
395 }
396 $this->WriteAuditTrailOnLogin($this->Username);
397
398 // Call loggedin event
399 $this->User_LoggedIn($this->Username);
400 $this->Page_Terminate($sLastUrl); // Return to last accessed URL
401 } elseif ($this->Username <> "" && $sPassword <> "") {
402
403 // Call user login error event
404 $this->User_LoginError($this->Username, $sPassword);
405 }
406 }
407
408 //
409 // Validate form
410 //
411 function ValidateForm($usr, $pwd) {
412 global $Language, $gsFormError;
413
414 // Initialize form error message
415 $gsFormError = "";
416
417 // Check if validation required
418 if (!EW_SERVER_VALIDATE)
419 return TRUE;
420 if (trim($usr) == "") {
421 ew_AddMessage($gsFormError, $Language->Phrase("EnterUid"));
422 }
423 if (trim($pwd) == "") {
424 ew_AddMessage($gsFormError, $Language->Phrase("EnterPwd"));
425 }
426
427 // Return validate result
428 $ValidateForm = ($gsFormError == "");
429
430 // Call Form Custom Validate event
431 $sFormCustomError = "";
432 $ValidateForm = $ValidateForm && $this->Form_CustomValidate($sFormCustomError);
433 if ($sFormCustomError <> "") {
434 ew_AddMessage($gsFormError, $sFormCustomError);
435 }
436 return $ValidateForm;
437 }
438
439 //
440 // Write audit trail on login
441 //
442 function WriteAuditTrailOnLogin($usr) {
443 global $Language;
444 ew_WriteAuditTrail("log", ew_StdCurrentDateTime(), ew_ScriptName(), $usr, $Language->Phrase("AuditTrailLogin"), ew_CurrentUserIP(), "", "", "", "");
445 }
446
447 // Page Load event
448 function Page_Load() {
449
450 //echo "Page Load";
451 }
452
453 // Page Unload event
454 function Page_Unload() {
455
456 //echo "Page Unload";
457 }
458
459 // Page Redirecting event
460 function Page_Redirecting(&$url) {
461
462 // Example:
463 //$url = "your URL";
464
465 }
466
467 // Message Showing event
468 // $type = ''|'success'|'failure'
469 function Message_Showing(&$msg, $type) {
470
471 // Example:
472 //if ($type == 'success') $msg = "your success message";
473
474 }
475
476 // Page Render event
477 function Page_Render() {
478
479 //echo "Page Render";
480 }
481
482 // Page Data Rendering event
483 function Page_DataRendering(&$header) {
484
485 // Example:
486 //$header = "your header";
487
488 }
489
490 // Page Data Rendered event
491 function Page_DataRendered(&$footer) {
492
493 // Example:
494 //$footer = "your footer";
495
496 }
497
498 // User Logging In event
499 function User_LoggingIn($usr, &$pwd) {
500
501 // Enter your code here
502 // To cancel, set return value to FALSE
503
504 return TRUE;
505 }
506
507 // User Logged In event
508 function User_LoggedIn($usr) {
509
510 //echo "User Logged In";
511 }
512
513 // User Login Error event
514 function User_LoginError($usr, $pwd) {
515
516 //echo "User Login Error";
517 }
518
519 // Form Custom Validate event
520 function Form_CustomValidate(&$CustomError) {
521
522 // Return error message in CustomError
523 return TRUE;
524 }
525}
526?>
527<?php ew_Header(FALSE) ?>
528<?php
529
530// Create page object
531if (!isset($login)) $login = new clogin();
532
533// Page init
534$login->Page_Init();
535
536// Page main
537$login->Page_Main();
538
539// Global Page Rendering event (in userfn*.php)
540Page_Rendering();
541
542// Page Rendering event
543$login->Page_Render();
544?>
545<?php include_once "header.php" ?>
546<script type="text/javascript">
547
548// Write your client script here, no need to add script tags.
549</script>
550<script type="text/javascript">
551var flogin = new ew_Form("flogin");
552
553// Validate function
554flogin.Validate = function()
555{
556 var fobj = this.Form;
557 if (!this.ValidateRequired)
558 return true; // Ignore validation
559 if (!ew_HasValue(fobj.username))
560 return this.OnError(fobj.username, ewLanguage.Phrase("EnterUid"));
561 if (!ew_HasValue(fobj.password))
562 return this.OnError(fobj.password, ewLanguage.Phrase("EnterPwd"));
563
564 // Call Form Custom Validate event
565 if (!this.Form_CustomValidate(fobj)) return false;
566 return true;
567}
568
569// Form_CustomValidate function
570flogin.Form_CustomValidate =
571 function(fobj) { // DO NOT CHANGE THIS LINE!
572
573 // Your custom validation code here, return false if invalid.
574 return true;
575 }
576
577// Requires js validation
578<?php if (EW_CLIENT_VALIDATE) { ?>
579flogin.ValidateRequired = true;
580<?php } else { ?>
581flogin.ValidateRequired = false;
582<?php } ?>
583</script>
584<div class="ewToolbar">
585<?php $Breadcrumb->Render(); ?>
586<?php echo $Language->SelectionForm(); ?>
587<div class="clearfix"></div>
588</div>
589<?php $login->ShowPageHeader(); ?>
590<?php
591$login->ShowMessage();
592?>
593<form name="flogin" id="flogin" class="form-horizontal ewForm ewLoginForm" action="<?php echo ew_CurrentPage() ?>" method="post">
594<?php if ($login->CheckToken) { ?>
595<input type="hidden" name="<?php echo EW_TOKEN_NAME ?>" value="<?php echo $login->Token ?>">
596<?php } ?>
597 <div class="form-group">
598 <label class="col-sm-2 control-label ewLabel" for="username"><?php echo $Language->Phrase("Username") ?></label>
599 <div class="col-sm-10"><input type="text" name="username" id="username" class="form-control ewControl" value="<?php echo ew_HtmlEncode($login->Username) ?>" placeholder="<?php echo ew_HtmlEncode($Language->Phrase("Username")) ?>"></div>
600 </div>
601 <div class="form-group">
602 <label class="col-sm-2 control-label ewLabel" for="password"><?php echo $Language->Phrase("Password") ?></label>
603 <div class="col-sm-10"><input type="password" name="password" id="password" class="form-control ewControl" placeholder="<?php echo ew_HtmlEncode($Language->Phrase("Password")) ?>"></div>
604 </div>
605 <div class="form-group">
606 <div class="col-sm-offset-2 col-sm-10">
607 <a id="ewLoginOptions" class="collapsed" data-toggle="collapse" data-target="#flogin_options"><?php echo $Language->Phrase("LoginOptions") ?> <span class="icon-arrow"></span></a>
608 <div id="flogin_options" class="collapse">
609 <div class="radio ewRadio">
610 <label for="type1"><input type="radio" name="type" id="type1" value="a"<?php if ($login->LoginType == "a") { ?> checked<?php } ?>><?php echo $Language->Phrase("AutoLogin") ?></label>
611 </div>
612 <div class="radio ewRadio">
613 <label for="type2"><input type="radio" name="type" id="type2" value="u"<?php if ($login->LoginType == "u") { ?> checked<?php } ?>><?php echo $Language->Phrase("SaveUserName") ?></label>
614 </div>
615 <div class="radio ewRadio">
616 <label for="type3"><input type="radio" name="type" id="type3" value=""<?php if ($login->LoginType == "") { ?> checked<?php } ?>><?php echo $Language->Phrase("AlwaysAsk") ?></label>
617 </div>
618 </div>
619 </div>
620 </div>
621 <div class="form-group">
622 <div class="col-sm-offset-2 col-sm-10">
623 <button class="btn btn-primary ewButton" name="btnsubmit" id="btnsubmit" type="submit"><?php echo $Language->Phrase("Login") ?></button>
624 </div>
625 </div>
626</form>
627<br>
628<script type="text/javascript">
629flogin.Init();
630</script>
631<?php
632$login->ShowPageFooter();
633if (EW_DEBUG_ENABLED)
634 echo ew_DebugMsg();
635?>
636<script type="text/javascript">
637
638// Write your startup script here
639// document.write("page loaded");
640
641</script>
642<?php include_once "footer.php" ?>
643<?php
644$login->Page_Terminate();
645?>