Periodic merge upstream #2
| @@ -135,10 +135,13 @@ function validateToken (string $secureToken) { | |||||||
| 	if (!empty($storedTokens) && sizeof(array_filter($storedTokens, function ($value) use ($jwtPayload) { | 	if (!empty($storedTokens) && sizeof(array_filter($storedTokens, function ($value) use ($jwtPayload) { | ||||||
| 		return $value->iat === $jwtPayload->iat; | 		return $value->iat === $jwtPayload->iat; | ||||||
| 	})) === 1) { | 	})) === 1) { | ||||||
| 		return ['status' => 'Success']; | 		return [ | ||||||
|  | 			'status'	=> 'Success', | ||||||
|  | 			'name'		=> $jwtPayload->name | ||||||
|  | 		]; | ||||||
| 	} else { | 	} else { | ||||||
| 		if ($settings->Debug['LogToFile']) { | 		if ($settings->Debug['LogToFile']) { | ||||||
| 			file_put_contents('../validateToken.log', (new DateTime())->format('Y-m-d\TH:i:s.u') . ' --- No matching token in database' . PHP_EOL, FILE_APPEND); | 			file_put_contents('../validateToken.log', (new DateTime())->format('Y-m-d\TH:i:s.u') . ' --- Either no matching token or multiple matching tokens found in database' . PHP_EOL, FILE_APPEND); | ||||||
| 		} | 		} | ||||||
| 		return ['status' => 'Fail', 'reason' => '2']; | 		return ['status' => 'Fail', 'reason' => '2']; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ $pageLayout['full'] = <<<'FULL' | |||||||
|     <meta charset="utf-8" /> |     <meta charset="utf-8" /> | ||||||
|     <title>lucidAuth</title> |     <title>lucidAuth</title> | ||||||
| 	<meta name="application-name" content="lucidAuth" /> | 	<meta name="application-name" content="lucidAuth" /> | ||||||
| 	<meta name="theme-color" content="#B50000" /> | 	<meta name="theme-color" content="#003399" /> | ||||||
| 	<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> | 	<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> | ||||||
| 	<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> | 	<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> | ||||||
| 	<link rel="manifest" href="/manifest.json" /> | 	<link rel="manifest" href="/manifest.json" /> | ||||||
| @@ -52,7 +52,7 @@ $pageLayout['bare'] = <<<'BARE' | |||||||
| </html> | </html> | ||||||
| BARE; | BARE; | ||||||
|  |  | ||||||
| $contentLayout['login'] = <<<LOGIN | $contentLayout['login'] = <<<'LOGIN' | ||||||
| 		  <script src="misc/script.index.js"></script> | 		  <script src="misc/script.index.js"></script> | ||||||
|           <fieldset> |           <fieldset> | ||||||
|             <legend>Login Details</legend> |             <legend>Login Details</legend> | ||||||
| @@ -67,7 +67,7 @@ $contentLayout['login'] = <<<LOGIN | |||||||
|                 <input type="password" id="password" name="password" tabindex="200" /> |                 <input type="password" id="password" name="password" tabindex="200" /> | ||||||
|               </li> |               </li> | ||||||
|               <li> |               <li> | ||||||
| 				<input type="hidden" id="ref" name="ref" value="{$_GET['ref']}" /> | 				<input type="hidden" id="ref" name="ref" value="%1$s" /> | ||||||
| 				<button id="btnlogin" class="bttn-simple bttn-xs bttn-primary" tabindex="300" data-translation="button_login">login</button> | 				<button id="btnlogin" class="bttn-simple bttn-xs bttn-primary" tabindex="300" data-translation="button_login">login</button> | ||||||
|               </li> |               </li> | ||||||
|               <li class="misc"> |               <li class="misc"> | ||||||
| @@ -83,9 +83,9 @@ LOGIN; | |||||||
|  |  | ||||||
| $contentLayout['manage'] = <<<'MANAGE' | $contentLayout['manage'] = <<<'MANAGE' | ||||||
| 		  <script src="misc/script.manage.js"></script> | 		  <script src="misc/script.manage.js"></script> | ||||||
|           <span id="user"><span data-translation="span_loggedinas">Ingelogd als</span> {$_SESSION['fullname']} --- [<a id="linkplugindialog" tabindex="600" data-translation="link_plugin">Browser plugin</a><div id="pluginlogos"><span data-translation="label_selectbrowser" style="float: left; margin-left: 5px;">Select browser:</span><span style="font-size: 8px; float: right; margin-right: 5px; margin-top: 2px;">[v0.2.122.4]</span><br /><img id="linkpluginchrome" src="images/chrome_256x256.png" /><img id="linkpluginfirefox" src="images/firefox_256x256.png" /><img id="linkpluginopera" src="images/opera_256x256.png" /></div>] [<a id="linklanguage-en" href="#" tabindex="700">EN</a> <a id="linklanguage-nl" class="current" href="#" tabindex="700">NL</a>] [<a href="index.php?do=logout" tabindex="800" data-translation="link_logout">Log uit</a>]</span> |           <span id="user"><span data-translation="span_loggedinas">Ingelogd als</span> %1$s --- [<a id="linklanguage-en" href="#" tabindex="700">EN</a> <a id="linklanguage-nl" class="current" href="#" tabindex="700">NL</a>] [<a href="#" tabindex="800" data-translation="link_logout">Log uit</a>]</span> | ||||||
| <!--          <fieldset style="clear: both;"> |           <fieldset style="clear: both;"> | ||||||
|             <legend>Beheer Account</legend> |             <legend>Beheer Gebruikers</legend> | ||||||
|             <ul> |             <ul> | ||||||
|               <li> |               <li> | ||||||
|               </li> |               </li> | ||||||
| @@ -105,18 +105,6 @@ $contentLayout['manage'] = <<<'MANAGE' | |||||||
|               </li> |               </li> | ||||||
|             </ul> |             </ul> | ||||||
|           </fieldset> |           </fieldset> | ||||||
|           --> |  | ||||||
| MANAGE; | MANAGE; | ||||||
|  |  | ||||||
| $contentLayout['dialog'] = <<<DIALOG |  | ||||||
|           <ul class="dialog"> |  | ||||||
|             <li> |  | ||||||
|               <!--REPL_DIALOGDESC--> |  | ||||||
|             </li> |  | ||||||
|             <li> |  | ||||||
| 			  <button id="btnhome" class="bttn-simple bttn-xs bttn-primary" tabindex="400" data-translation="button_home">ga naar startpagina</button> |  | ||||||
|             </li> |  | ||||||
|           </ul> |  | ||||||
| DIALOG; |  | ||||||
|  |  | ||||||
| ?> | ?> | ||||||
							
								
								
									
										27
									
								
								public/example.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								public/example.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | // Basic example of PHP script to handle with jQuery-Tabledit plug-in. | ||||||
|  | // Note that is just an example. Should take precautions such as filtering the input data. | ||||||
|  |  | ||||||
|  | header('Content-Type: application/json'); | ||||||
|  |  | ||||||
|  | $input = filter_input_array(INPUT_POST); | ||||||
|  |  | ||||||
|  | $mysqli = new mysqli('localhost', 'user', 'password', 'database'); | ||||||
|  |  | ||||||
|  | if (mysqli_connect_errno()) { | ||||||
|  |   echo json_encode(array('mysqli' => 'Failed to connect to MySQL: ' . mysqli_connect_error())); | ||||||
|  |   exit; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | if ($input['action'] === 'edit') { | ||||||
|  |     $mysqli->query("UPDATE users SET username='" . $input['username'] . "', email='" . $input['email'] . "', avatar='" . $input['avatar'] . "' WHERE id='" . $input['id'] . "'"); | ||||||
|  | } else if ($input['action'] === 'delete') { | ||||||
|  |     $mysqli->query("UPDATE users SET deleted=1 WHERE id='" . $input['id'] . "'"); | ||||||
|  | } else if ($input['action'] === 'restore') { | ||||||
|  |     $mysqli->query("UPDATE users SET deleted=0 WHERE id='" . $input['id'] . "'"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mysqli_close($mysqli); | ||||||
|  |  | ||||||
|  | echo json_encode($input); | ||||||
| @@ -8,8 +8,13 @@ | |||||||
| 		if ($result['status'] === 'Success') { | 		if ($result['status'] === 'Success') { | ||||||
| 			// Store authentication token; in database serverside & in cookie clientside | 			// Store authentication token; in database serverside & in cookie clientside | ||||||
| 			if (storeToken($result['token'], $settings->LDAP['Domain'] . '\\' . $_POST['username'], $_SERVER['HTTP_HOST'])['status'] !== 'Success') { | 			if (storeToken($result['token'], $settings->LDAP['Domain'] . '\\' . $_POST['username'], $_SERVER['HTTP_HOST'])['status'] !== 'Success') { | ||||||
| 				// Since this action is only ever called through an AJAX-request; return JSON object | 				// Return JSON object | ||||||
| 				echo '{"Result":"Fail","Reason":"Failed storing authentication token in database and/or cookie"}' . PHP_EOL; | 				header('Content-Type: application/json'); | ||||||
|  | 				echo json_encode([ | ||||||
|  | 					"Result"			=>	"Failure", | ||||||
|  | 					"Reason"			=>	"Failed storing authentication token in database and/or cookie" | ||||||
|  | 				]); | ||||||
|  | #				echo '{"Result":"Fail","Reason":"Failed storing authentication token in database and/or cookie"}' . PHP_EOL; | ||||||
| 				exit; | 				exit; | ||||||
| 			} | 			} | ||||||
|              |              | ||||||
| @@ -19,13 +24,18 @@ | |||||||
| 				$proxyHeaders = json_decode(base64_decode($_POST['ref']), JSON_OBJECT_AS_ARRAY); | 				$proxyHeaders = json_decode(base64_decode($_POST['ref']), JSON_OBJECT_AS_ARRAY); | ||||||
| 			} | 			} | ||||||
| 			catch (Exception $e) { | 			catch (Exception $e) { | ||||||
| 				// Since this action is only ever called through an AJAX-request; return JSON object | 				// Return JSON object | ||||||
| 				echo '{"Result":"Fail","Reason":"Original request URI lost in transition"}' . PHP_EOL; | 				header('Content-Type: application/json'); | ||||||
|  | 				echo json_encode([ | ||||||
|  | 					"Result"			=>	"Failure", | ||||||
|  | 					"Reason"			=>	"Original request-URI lost in transition" | ||||||
|  | 				]); | ||||||
|  | #				echo '{"Result":"Fail","Reason":"Original request URI lost in transition"}' . PHP_EOL; | ||||||
| 				exit; | 				exit; | ||||||
| 			} | 			} | ||||||
| 			$originalUri = !empty($proxyHeaders) ? $proxyHeaders['XForwardedProto'] . '://' . $proxyHeaders['XForwardedHost'] . $proxyHeaders['XForwardedUri'] : 'lucidAuth.manage.php'; | 			$originalUri = !empty($proxyHeaders) ? $proxyHeaders['XForwardedProto'] . '://' . $proxyHeaders['XForwardedHost'] . $proxyHeaders['XForwardedUri'] : 'lucidAuth.manage.php'; | ||||||
|  |  | ||||||
| 			// Since this request is only ever called through an AJAX-request; return JSON object | 			// Return JSON object | ||||||
| 			header('Content-Type: application/json'); | 			header('Content-Type: application/json'); | ||||||
| 			echo json_encode([ | 			echo json_encode([ | ||||||
| 				"Result"			=>	"Success", | 				"Result"			=>	"Success", | ||||||
| @@ -40,7 +50,6 @@ | |||||||
| 						"Result"	=>	"Failure", | 						"Result"	=>	"Failure", | ||||||
| 						"Reason"	=>	"Invalid username and/or password" | 						"Reason"	=>	"Invalid username and/or password" | ||||||
| 					]); | 					]); | ||||||
| #					echo '{"Result":"Fail","Reason":"Invalid username and/or password"}' . PHP_EOL; |  | ||||||
| 					break; | 					break; | ||||||
| 				default: | 				default: | ||||||
| 					header('Content-Type: application/json'); | 					header('Content-Type: application/json'); | ||||||
| @@ -48,14 +57,17 @@ | |||||||
| 						"Result"	=>	"Failure", | 						"Result"	=>	"Failure", | ||||||
| 						"Reason"	=>	"Uncaught error" | 						"Reason"	=>	"Uncaught error" | ||||||
| 					]); | 					]); | ||||||
| #					echo '{"Result":"Fail","Reason":"Uncaught error"}' . PHP_EOL; |  | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		include_once('../include/lucidAuth.template.php'); | 		include_once('../include/lucidAuth.template.php'); | ||||||
|  |  | ||||||
| 		echo sprintf($pageLayout['full'], $contentLayout['login']); | 		echo sprintf($pageLayout['full'],  | ||||||
|  | 			sprintf($contentLayout['login'],  | ||||||
|  | 				$_GET['ref'] | ||||||
|  | 			) | ||||||
|  | 		); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| ?> | ?> | ||||||
| @@ -3,10 +3,18 @@ | |||||||
|  |  | ||||||
| 	include_once('../include/lucidAuth.functions.php'); | 	include_once('../include/lucidAuth.functions.php'); | ||||||
| 	 | 	 | ||||||
| 	if (!empty($_COOKIE['JWT']) && validateToken($_COOKIE['JWT'])['status'] === "Success") { | 	if (!empty($_COOKIE['JWT'])) { | ||||||
|  | 		$validateTokenResult = validateToken($_COOKIE['JWT']); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if ($validateTokenResult['status'] === "Success") { | ||||||
| 		include_once('../include/lucidAuth.template.php'); | 		include_once('../include/lucidAuth.template.php'); | ||||||
|  |  | ||||||
| 		echo sprintf($pageLayout['full'], $contentLayout['manage']); | 		echo sprintf($pageLayout['full'],  | ||||||
|  | 			sprintf($contentLayout['manage'], | ||||||
|  | 				$validateTokenResult['name'] | ||||||
|  | 			) | ||||||
|  | 		); | ||||||
| 	} else { | 	} else { | ||||||
| 		// No cookie containing valid authentication token found; | 		// No cookie containing valid authentication token found; | ||||||
| 		//   explicitly deleting any remaining cookie, then redirecting to loginpage | 		//   explicitly deleting any remaining cookie, then redirecting to loginpage | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ | |||||||
|  |  | ||||||
| 	include_once('../include/lucidAuth.template.php'); | 	include_once('../include/lucidAuth.template.php'); | ||||||
|  |  | ||||||
| 	echo sprintf($pageLayout['bare', | 	echo sprintf($pageLayout['bare'], | ||||||
| 		'// iFrames go here' | 		'// iFrames go here' | ||||||
| 	); | 	); | ||||||
| ?> | ?> | ||||||
							
								
								
									
										6
									
								
								public/misc/script.table.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								public/misc/script.table.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -8,13 +8,9 @@ var locales = { | |||||||
| 		heading_error:				"ERROR!", | 		heading_error:				"ERROR!", | ||||||
| 		label_password:				"Password:", | 		label_password:				"Password:", | ||||||
| 		label_username:				"Username:", | 		label_username:				"Username:", | ||||||
| 		label_selectbrowser:	"Select browser:", |  | ||||||
| 		link_install:				"Install!", |  | ||||||
| 		link_logout:				"Logout", | 		link_logout:				"Logout", | ||||||
| 		link_plugin:				"Browser plugin", |  | ||||||
| 		span_credentialsavailable:	"Login credentials available upon request!", | 		span_credentialsavailable:	"Login credentials available upon request!", | ||||||
| 		span_loggedinas:			"Logged in as", | 		span_loggedinas:			"Logged in as" | ||||||
| 		span_plugin:				"Browser plugin?" |  | ||||||
| 	}, | 	}, | ||||||
| 	nl: { | 	nl: { | ||||||
| 		button_add:					"voeg toe", | 		button_add:					"voeg toe", | ||||||
| @@ -25,13 +21,9 @@ var locales = { | |||||||
| 		heading_error:				"FOUT!", | 		heading_error:				"FOUT!", | ||||||
| 		label_password:				"Wachtwoord:", | 		label_password:				"Wachtwoord:", | ||||||
| 		label_username:				"Gebruikersnaam:", | 		label_username:				"Gebruikersnaam:", | ||||||
| 		label_selectbrowser:	"Selecteer browser:", |  | ||||||
| 		link_install:				"Installeer!", |  | ||||||
| 		link_logout:				"Log uit", | 		link_logout:				"Log uit", | ||||||
| 		link_plugin:				"Browser plugin", |  | ||||||
| 		span_credentialsavailable:	"Inloggegevens verkrijgbaar op aanvraag!", | 		span_credentialsavailable:	"Inloggegevens verkrijgbaar op aanvraag!", | ||||||
| 		span_loggedinas:			"Ingelogd als", | 		span_loggedinas:			"Ingelogd als" | ||||||
| 		span_plugin:				"Browser plugin?" |  | ||||||
| 	} // ... etc. | 	} // ... etc. | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user