Guest User

Untitled

a guest
Nov 18th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.06 KB | None | 0 0
  1. <?php
  2.  
  3. defined("AUTH_SESSION_VAR_NAME") || define("AUTH_SESSION_VAR_NAME", "user");
  4.  
  5.  
  6. if (!isset($_REQUEST["nosess"]))
  7. session_start();
  8.  
  9. class Auth {
  10. /*
  11. * The Authenticator v3.0 by Gydo194
  12. * Date: 1611171716
  13. * Author: Gydo194
  14. * Description: Simple and efficient authentication mechanism with both session and sessionless mode support.
  15. */
  16.  
  17. /**
  18. * The user's username
  19. * @var string username
  20. */
  21. private static $username = "";
  22.  
  23. /**
  24. *
  25. * @var type string the user's password
  26. */
  27. private static $password = "";
  28.  
  29. /**
  30. * Dual purpose; both serves as the user's access level and as an
  31. * indicator whether the user is logged in.
  32. *
  33. * @var int the user's access level
  34. */
  35. private static $accessLevel = 0;
  36.  
  37. //getters
  38.  
  39. public static function getUserName(): string {
  40. return self::$username;
  41. }
  42.  
  43. public static function getPassword(): string {
  44. return self::$password;
  45. }
  46.  
  47. public static function getAccessLevel(): int {
  48. return self::$accessLevel;
  49. }
  50.  
  51. //no public setters on purpose.
  52. //these vars have to be set by the authentication mechanism itself.
  53.  
  54. private static function setUserName(string $user) {
  55. self::$username = $user;
  56. }
  57.  
  58. private static function setPassword(string $pass) {
  59. self::$password = $pass;
  60. }
  61.  
  62. private static function setAccessLevel(int $accessLevel) {
  63. self::$accessLevel = $accessLevel;
  64. }
  65.  
  66. //state getters
  67. public static function isLoggedIn(): bool {
  68. return self::$accessLevel > 0 ? true : false;
  69. }
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76. /**
  77. * Gets a request parameter value
  78. *
  79. * @param string $param the parameter to get
  80. * @return string the value of the parameter, "" if not set.
  81. */
  82. private static function getRequestParameter(string $param): string {
  83. switch ($_SERVER["REQUEST_METHOD"]) {
  84. case "GET":
  85. if (isset($_GET[$param]))
  86. return filter_input(INPUT_GET, $param);
  87. else
  88. return "";
  89. break;
  90. case "POST":
  91. if (isset($_POST[$param]))
  92. return filter_input(INPUT_POST, $param);
  93. else
  94. return "";
  95. break;
  96. }
  97. return "";
  98. }
  99.  
  100.  
  101.  
  102. //session login handling functions
  103.  
  104. /**
  105. * check if the session hold user data.
  106. * @return bool
  107. */
  108. private static function hasSessionLogin(): bool {
  109. if (session_id()) {
  110. if (isset($_SESSION[AUTH_SESSION_VAR_NAME]["access"])) {
  111. if ($_SESSION[AUTH_SESSION_VAR_NAME] > 0)
  112. return true;
  113. }
  114. }
  115. return false;
  116. }
  117.  
  118.  
  119. private static function getSessionLogin(): void {
  120. if(!session_id()) return;
  121. self::setUserName($_SESSION[AUTH_SESSION_VAR_NAME]["user"]);
  122. self::setPassword($_SESSION[AUTH_SESSION_VAR_NAME]["pass"]);
  123. self::setAccessLevel($_SESSION[AUTH_SESSION_VAR_NAME]["access"]);
  124. }
  125.  
  126. private static function saveSessionLogin(): void {
  127. if(!session_id()) return;
  128. $_SESSION[AUTH_SESSION_VAR_NAME]["user"] = self::getUserName();
  129. $_SESSION[AUTH_SESSION_VAR_NAME]["pass"] = self::getPassword();
  130. $_SESSION[AUTH_SESSION_VAR_NAME]["access"] = self::getAccessLevel();
  131. }
  132.  
  133.  
  134.  
  135.  
  136.  
  137. //credential validating
  138.  
  139. private static function validateCredentials(string $user, string $pass): bool {
  140. //function to be extended
  141. if ($user === "ADMIN" && $pass === "admin") {
  142. self::setAccessLevel(2);
  143. return true;
  144. }
  145.  
  146. if ($user === "USER" && $pass === "user") {
  147. self::setAccessLevel(1);
  148. return true;
  149. }
  150.  
  151. return false;
  152. }
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169. public static function login(string $user, string $pass): void {
  170. if (self::validateCredentials($user, $pass)) {
  171. self::setUserName($user);
  172. self::setPassword($pass);
  173. }
  174. }
  175.  
  176.  
  177.  
  178.  
  179.  
  180. public static function autoLogin(): void {
  181. if(self::hasSessionLogin()) { self::getSessionLogin(); return; }
  182. //nope no session login
  183. $user = self::getRequestParameter("user");
  184. $pass = self::getRequestParameter("pass");
  185. if (self::validateCredentials($user, $pass)) {
  186. self::setUserName($user);
  187. self::setPassword($pass);
  188. self::saveSessionLogin(); //save login to session
  189. }
  190. }
  191.  
  192.  
  193.  
  194.  
  195. }
  196.  
  197. /*
  198. * TESTING
  199. */
  200.  
  201.  
  202. /*
  203. echo Auth::isLoggedIn() ? "true" : "false";
  204. echo "<br>Logging in<br>";
  205. */
  206.  
  207. Auth::autoLogin(); // <-- login using ONE function call!!
  208.  
  209.  
  210.  
  211. $access = Auth::getAccessLevel();
  212. $user = Auth::getUserName();
  213. $pass = Auth::getPassword();
  214. $login = Auth::isLoggedIn();
  215.  
  216. if ($login) {
  217. echo "Welcome, <b>$user</b>! Your access level is <b>$access</b>, and your password is <b>$pass</b>.<br>";
  218. } else {
  219. echo "Nope that doesn't work.<br>";
  220. }
Add Comment
Please, Sign In to add comment