Guest User

Untitled

a guest
May 3rd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. <?php
  2. class Auth
  3. {
  4. protected $_session;
  5. protected static $_instance;
  6.  
  7. protected function __construct()
  8. {
  9. // Hämta en sessionsinstans
  10. $this->_session = Session::instance();
  11.  
  12. // Auto-login
  13. $this->auto_login();
  14. }
  15.  
  16. /**
  17. * Skapar en instans eller returnerar en existerande instans av Auth
  18. *
  19. * @return Auth
  20. */
  21. public static function instance()
  22. {
  23. if ( ! Auth::$_instance)
  24. {
  25. Auth::$_instance = new Auth;
  26. }
  27.  
  28. return Auth::$_instance;
  29. }
  30.  
  31. /**
  32. * Avslutar ett loginförsök genom att spara information i kaka och session
  33. *
  34. * @param array användarinformation
  35. * @return Auth $this
  36. */
  37. protected function complete_login(Model_User $user, $remember = FALSE)
  38. {
  39. if ($remember)
  40. {
  41. // Skapa posten i databasen
  42. $values = Model_User_Token::factory()->create($user->id)->values();
  43.  
  44. // Skapa kakan
  45. setcookie('auth_autologin_token', $values['token'], $values['expire']);
  46. }
  47.  
  48. // Spara användaren
  49. $this->_session->auth = $user->values();
  50.  
  51. // En högre privilegienivå: generera nytt sessionsid
  52. session_regenerate_id();
  53.  
  54. return $this;
  55. }
  56.  
  57. /**
  58. * Försöker autologgain en användare baserat på en kaka.
  59. *
  60. * @return bool `true` om inloggningen lyckades
  61. */
  62. public function auto_login()
  63. {
  64. // Kontrollera om token finns
  65. if (empty($_COOKIE['auth_autologin_token']))
  66. {
  67. return FALSE;
  68. }
  69.  
  70. $token = $_COOKIE['auth_autologin_token'];
  71.  
  72. // Kolla om den är giltig
  73. $token = Model_User_Token::factory($token);
  74. if ( ! $token->loaded())
  75. {
  76. // Finns inte eller har gått ut
  77. return FALSE;
  78. }
  79.  
  80. // Hämta användaren
  81. $user = Model_User::factory($token->user_id);
  82.  
  83. // Skapa kaka och spara informationen i sessionen
  84. $this->complete_login($user, TRUE);
  85.  
  86. return TRUE;
  87. }
  88.  
  89.  
  90. /**
  91. * Returnerar sant om användaren är inloggad
  92. *
  93. * @return bool
  94. */
  95. public function logged_in()
  96. {
  97. return isset($this->_session->auth);
  98. }
  99.  
  100. /**
  101. * Försöker logga in en användare med användarnamn och lösenord
  102. *
  103. * @param string username
  104. * @param string password
  105. * @param bool remember (default: false)
  106. * @return bool
  107. */
  108. public function login($username, $password, $remember = FALSE)
  109. {
  110. if ($this->logged_in())
  111. {
  112. trigger_error('Redan inloggad', E_USER_ERROR);
  113. return FALSE;
  114. }
  115.  
  116. // Hämta login-saltet för användaren
  117. $user = Model_User::factory($username);
  118.  
  119. if ( ! $user->loaded())
  120. {
  121. // Hittade inte användaren
  122. return FALSE;
  123. }
  124.  
  125. // Hasha lösenordet och jämför
  126. $password = sha1($user->salt . $password);
  127.  
  128. if ($password === $user->password)
  129. {
  130. $this->complete_login($user, $remember);
  131. return TRUE;
  132. }
  133.  
  134. return FALSE;
  135. }
  136.  
  137. /**
  138. * Returnera användarinfo om inloggad, annars FALSE
  139. *
  140. * @return array|bool
  141. */
  142. public function get_user()
  143. {
  144. if ($this->logged_in())
  145. {
  146. return $this->_session->auth;
  147. }
  148.  
  149. return FALSE;
  150. }
  151.  
  152. /**
  153. * Loggar ut en inloggad användare
  154. *
  155. * @return bool lyckat
  156. */
  157. public function logout()
  158. {
  159. // Radera sessiondatan
  160. $this->_session->destroy();
  161.  
  162. // Radera “kom ihåg”-kakan
  163. unset($_COOKIE['auth_autologin_token']);
  164. setcookie('auth_autologin_token', NULL, -86400);
  165.  
  166. return empty($this->_session->auth);
  167. }
  168. }
  169.  
  170. /* End of file auth.php */
  171. /* Location: ./classes/auth.php */
Add Comment
Please, Sign In to add comment