Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

LuticateUsersBusiness.php 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace Luticate\Auth\Business;
  3. use Illuminate\Support\Facades\DB;
  4. use Luticate\Auth\DBO\LuticatePermissions;
  5. use Luticate\Auth\DBO\LuticateUsersLoginDbo;
  6. use Luticate\Utils\LuBusiness;
  7. use Luticate\Auth\DataAccess\LuticateUsersDataAccess;
  8. use Luticate\Auth\DBO\LuticateUsersDbo;
  9. class LuticateUsersBusiness extends LuBusiness {
  10. const KEY_USER_ID = "user_id";
  11. const KEY_SALT = "salt";
  12. const KEY_DATA = "data";
  13. protected static function getDataAccess()
  14. {
  15. return new LuticateUsersDataAccess();
  16. }
  17. protected static function badPassword()
  18. {
  19. abort(401, "Bad username/password");
  20. }
  21. public static function hashPassword($password)
  22. {
  23. return password_hash($password, PASSWORD_BCRYPT);
  24. }
  25. public static function verifyPassword($password, $hash)
  26. {
  27. return password_verify($password, $hash);
  28. }
  29. public static function getSalt($length = 10)
  30. {
  31. $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  32. $charactersLength = strlen($characters);
  33. $randomString = '';
  34. for ($i = 0; $i < $length; $i++) {
  35. $randomString .= $characters[rand(0, $charactersLength - 1)];
  36. }
  37. return $randomString;
  38. }
  39. /**
  40. * @param $user LuticateUsersDbo
  41. * @param $data mixed
  42. * @return string
  43. */
  44. public static function getToken($user, $data = null)
  45. {
  46. return JwtHelper::encode(array(
  47. self::KEY_USER_ID => $user->getId(),
  48. self::KEY_SALT => $user->getSalt(),
  49. self::KEY_DATA => $data
  50. ));
  51. }
  52. /**
  53. * @param $user_id
  54. * @return LuticateUsersDbo|null
  55. */
  56. public static function checkUserId($user_id)
  57. {
  58. $user = LuticateUsersDataAccess::getById($user_id);
  59. if (is_null($user)) {
  60. self::notFound("User not found");
  61. }
  62. return $user;
  63. }
  64. public static function login($username, $password)
  65. {
  66. $user = LuticateUsersDataAccess::getByUsernameOrEmail($username);
  67. if (is_null($user))
  68. self::badPassword();
  69. if (!self::verifyPassword($password, $user->getPassword()))
  70. self::badPassword();
  71. $user = LuticateUsersLoginDbo::fromUserDbo($user);
  72. $user->setToken(self::getToken($user));
  73. return $user;
  74. }
  75. /**
  76. * @param $user LuticateUsersDbo
  77. * @return bool
  78. */
  79. public static function logout($user)
  80. {
  81. if ($user->getId() != 0) {
  82. $user->setSalt(self::getSalt());
  83. LuticateUsersDataAccess::editById($user->getId(), $user);
  84. }
  85. return true;
  86. }
  87. public static function add($username, $email, $password)
  88. {
  89. $hash = self::hashPassword($password);
  90. if (filter_var($username, FILTER_VALIDATE_EMAIL))
  91. self::badInput("Username can not be an email");
  92. if (!filter_var($email, FILTER_VALIDATE_EMAIL))
  93. self::badInput("Invalid email address");
  94. $user = LuticateUsersDataAccess::getByUsernameOrEmail($username);
  95. if (!is_null($user))
  96. self::badInput("Username already exists");
  97. $user = LuticateUsersDataAccess::getByUsernameOrEmail($email);
  98. if (!is_null($user))
  99. self::badInput("Email already used");
  100. $user = new LuticateUsersDbo();
  101. $user->setEmail($email);
  102. $user->setPassword($hash);
  103. $user->setUsername($username);
  104. $user->setSalt(self::getSalt());
  105. DB::beginTransaction();
  106. $user_id = LuticateUsersDataAccess::addId($user);
  107. if (!is_null(LuticateGroupsBusiness::getById(0))) {
  108. LuticateGroupsBusiness::addUserToGroup($user_id, 0);
  109. }
  110. DB::commit();
  111. return $user_id;
  112. }
  113. public static function edit($user_id, $email)
  114. {
  115. if ($user_id != 0) {
  116. $user = self::checkUserId($user_id);
  117. $user->setEmail($email);
  118. LuticateUsersDataAccess::editById($user_id, $user);
  119. }
  120. return true;
  121. }
  122. public static function editMe($email, $user)
  123. {
  124. return self::edit($user->getId(), $email);
  125. }
  126. public static function setPassword($user_id, $password)
  127. {
  128. if ($user_id != 0) {
  129. $user = self::checkUserId($user_id);
  130. $user->setPassword(self::hashPassword($password));
  131. $user->setSalt(self::getSalt());
  132. LuticateUsersDataAccess::editById($user_id, $user);
  133. }
  134. return true;
  135. }
  136. public static function setPasswordMe($password, $oldPassword, $user)
  137. {
  138. self::login($user->getUsername(), $oldPassword);
  139. return self::setPassword($user->getId(), $password);
  140. }
  141. }