| 
									
										
										
										
											2017-04-24 17:13:08 -06:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  | /* | 
					
						
							|  |  |  |  * This Source Code Form is subject to the terms of the Mozilla Public | 
					
						
							| 
									
										
										
										
											2018-04-09 19:18:19 -06:00
										 |  |  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-04-09 19:18:19 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-24 17:13:08 -06:00
										 |  |  | require_once __DIR__ . "/required.php"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-02 19:17:59 -06:00
										 |  |  | // if we're logged in, we don't need to be here.
 | 
					
						
							| 
									
										
										
										
											2018-05-26 20:51:13 -06:00
										 |  |  | if (!empty($_SESSION['loggedin']) && $_SESSION['loggedin'] === true && !isset($_GET['permissionerror'])) { | 
					
						
							| 
									
										
										
										
											2017-05-02 19:17:59 -06:00
										 |  |  |     header('Location: app.php'); | 
					
						
							| 
									
										
										
										
											2018-12-22 22:38:50 -07:00
										 |  |  |     die(); | 
					
						
							| 
									
										
										
										
											2017-05-02 19:17:59 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Show a simple HTML page with a line of text and a button.  Matches the UI of | 
					
						
							|  |  |  |  * the AccountHub login flow. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @global type $SETTINGS | 
					
						
							|  |  |  |  * @global type $SECURE_NONCE | 
					
						
							|  |  |  |  * @global type $Strings | 
					
						
							|  |  |  |  * @param string $title Text to show, passed through i18n | 
					
						
							|  |  |  |  * @param string $button Button text, passed through i18n | 
					
						
							|  |  |  |  * @param string $url URL for the button | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function showHTML(string $title, string $button, string $url) { | 
					
						
							|  |  |  |     global $SETTINGS, $SECURE_NONCE, $Strings; | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |     ?>
 | 
					
						
							|  |  |  |     <!DOCTYPE html> | 
					
						
							|  |  |  |     <meta charset="UTF-8"> | 
					
						
							|  |  |  |     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | 
					
						
							|  |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1"> | 
					
						
							| 
									
										
										
										
											2018-05-24 19:52:21 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |     <title><?php echo $SETTINGS['site_title']; ?></title>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <link rel="icon" href="static/img/logo.svg"> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <link href="static/css/bootstrap.min.css" rel="stylesheet"> | 
					
						
							|  |  |  |     <style nonce="<?php echo $SECURE_NONCE; ?>"> | 
					
						
							|  |  |  |         .display-5 { | 
					
						
							| 
									
										
										
										
											2018-12-22 21:26:57 -07:00
										 |  |  |             font-size: 2.5rem; | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |             font-weight: 300; | 
					
						
							|  |  |  |             line-height: 1.2; | 
					
						
							| 
									
										
										
										
											2017-04-24 17:13:08 -06:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-12-22 21:26:57 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         .banner-image { | 
					
						
							|  |  |  |             max-height: 100px; | 
					
						
							|  |  |  |             margin: 2em auto; | 
					
						
							|  |  |  |             border: 1px solid grey; | 
					
						
							|  |  |  |             border-radius: 15%; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |     </style> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <div class="container mt-4"> | 
					
						
							|  |  |  |         <div class="row justify-content-center"> | 
					
						
							| 
									
										
										
										
											2018-12-22 21:26:57 -07:00
										 |  |  |             <div class="col-12 text-center"> | 
					
						
							|  |  |  |                 <img class="banner-image" src="./static/img/logo.svg" /> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |             <div class="col-12 text-center"> | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  |                 <h1 class="display-5 mb-4"><?php $Strings->get($title); ?></h1>
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |             </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             <div class="col-12 col-sm-8 col-lg-6"> | 
					
						
							|  |  |  |                 <div class="card mt-4"> | 
					
						
							|  |  |  |                     <div class="card-body"> | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  |                         <a href="<?php echo $url; ?>" class="btn btn-primary btn-block"><?php $Strings->get($button); ?></a>
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |                     </div> | 
					
						
							|  |  |  |                 </div> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <?php | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  | if (!empty($_GET['logout'])) { | 
					
						
							|  |  |  |     showHTML("You have been logged out.", "Log in again", "./index.php"); | 
					
						
							|  |  |  |     die(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  | if (empty($_SESSION["login_code"])) { | 
					
						
							|  |  |  |     $redirecttologin = true; | 
					
						
							|  |  |  | } else { | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |         $uidinfo = AccountHubApi::get("checkloginkey", ["code" => $_SESSION["login_code"]]); | 
					
						
							|  |  |  |         if ($uidinfo["status"] == "ERROR") { | 
					
						
							|  |  |  |             throw new Exception(); | 
					
						
							| 
									
										
										
										
											2017-05-02 19:17:59 -06:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |         if (is_numeric($uidinfo['uid'])) { | 
					
						
							|  |  |  |             $user = new User($uidinfo['uid'] * 1); | 
					
						
							| 
									
										
										
										
											2018-12-26 16:32:43 -07:00
										 |  |  |             foreach ($SETTINGS['permissions'] as $perm) { | 
					
						
							|  |  |  |                 if (!$user->hasPermission($perm)) { | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  |                     showHTML("no access permission", "sign out", "./action.php?action=signout"); | 
					
						
							|  |  |  |                     die(); | 
					
						
							| 
									
										
										
										
											2018-12-26 16:32:43 -07:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-09-07 15:03:42 -06:00
										 |  |  |             Session::start($user); | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |             $_SESSION["login_code"] = null; | 
					
						
							| 
									
										
										
										
											2018-09-07 15:03:42 -06:00
										 |  |  |             header('Location: app.php'); | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  |             showHTML("Logged in", "Continue", "./app.php"); | 
					
						
							|  |  |  |             die(); | 
					
						
							| 
									
										
										
										
											2017-04-25 18:22:27 -06:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |             throw new Exception(); | 
					
						
							| 
									
										
										
										
											2017-04-25 18:22:27 -06:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |     } catch (Exception $ex) { | 
					
						
							|  |  |  |         $redirecttologin = true; | 
					
						
							| 
									
										
										
										
											2017-04-24 17:13:08 -06:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  | if ($redirecttologin) { | 
					
						
							|  |  |  |     try { | 
					
						
							| 
									
										
										
										
											2018-12-22 21:26:57 -07:00
										 |  |  |         $urlbase = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://" . $_SERVER['HTTP_HOST'] . (($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) ? ":" . $_SERVER['SERVER_PORT'] : ""); | 
					
						
							|  |  |  |         $iconurl = $urlbase . str_replace("index.php", "", $_SERVER["REQUEST_URI"]) . "static/img/logo.svg"; | 
					
						
							|  |  |  |         $codedata = AccountHubApi::get("getloginkey", ["appname" => $SETTINGS["site_title"], "appicon" => $iconurl]); | 
					
						
							| 
									
										
										
										
											2017-04-24 17:13:08 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |         if ($codedata['status'] != "OK") { | 
					
						
							|  |  |  |             throw new Exception($Strings->get("login server unavailable", false)); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-16 14:36:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 21:26:57 -07:00
										 |  |  |         $redirecturl = $urlbase . $_SERVER['REQUEST_URI']; | 
					
						
							| 
									
										
										
										
											2017-04-24 17:13:08 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |         $_SESSION["login_code"] = $codedata["code"]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-27 00:15:27 -07:00
										 |  |  |         $locationurl = $codedata["loginurl"] . "?code=" . htmlentities($codedata["code"]) . "&redirect=" . htmlentities($redirecturl); | 
					
						
							|  |  |  |         header("Location: $locationurl"); | 
					
						
							|  |  |  |         showHTML("Continue", "Continue", $locationurl); | 
					
						
							|  |  |  |         die(); | 
					
						
							| 
									
										
										
										
											2018-12-22 16:57:45 -07:00
										 |  |  |     } catch (Exception $ex) { | 
					
						
							|  |  |  |         sendError($ex->getMessage()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |