HestiaAuth.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /*
  3. * This file is part of the FileGator package.
  4. *
  5. * (c) Milos Stojanovic <[email protected]>
  6. *
  7. * For the full copyright and license information, please view the LICENSE file
  8. */
  9. namespace Filegator\Services\Auth\Adapters;
  10. use Filegator\Services\Auth\AuthInterface;
  11. use Filegator\Services\Auth\User;
  12. use Filegator\Services\Auth\UsersCollection;
  13. use Filegator\Services\Service;
  14. /**
  15. * @codeCoverageIgnore
  16. */
  17. class HestiaAuth implements Service, AuthInterface
  18. {
  19. protected $permissions = [];
  20. protected $private_repos = false;
  21. protected $hestia_user = '';
  22. public function init(array $config = [])
  23. {
  24. if (isset($_SESSION['user'])) {
  25. $v_user = $_SESSION['user'];
  26. }
  27. if (isset($_SESSION['look']) && $_SESSION['look'] != 'admin' && $v_user === 'admin') {
  28. $v_user = $_SESSION['look'];
  29. }
  30. $this->hestia_user = $v_user;
  31. $this->permissions = isset($config['permissions']) ? (array)$config['permissions'] : [];
  32. $this->private_repos = isset($config['private_repos']) ? (bool)$config['private_repos'] : false;
  33. }
  34. public function user(): ?User
  35. {
  36. $cmd="/usr/bin/sudo /usr/local/hestia/bin/v-list-user";
  37. exec ($cmd." ".escapeshellarg($this->hestia_user )." json", $output, $return_var);
  38. if ($return_var == 0) {
  39. $data = json_decode(implode('', $output), true);
  40. $hestia_user_info = $data[$this->hestia_user];
  41. return $this->transformUser($hestia_user_info);
  42. }
  43. return $this->getGuest();
  44. }
  45. public function transformUser($hstuser): User
  46. {
  47. $user = new User();
  48. $user->setUsername($this->hestia_user);
  49. $user->setName($this->hestia_user . " (" . $hstuser['FNAME'] . " " . $hstuser['LNAME'] . ")");
  50. $user->setRole('user');
  51. $user->setPermissions($this->permissions);
  52. $user->setHomedir('/');
  53. return $user;
  54. }
  55. public function authenticate($username, $password): bool
  56. {
  57. # Auth is handled by Hestia
  58. return false;
  59. }
  60. public function forget()
  61. {
  62. // Logout return to Hestia
  63. return $this->getGuest();
  64. }
  65. public function store(User $user)
  66. {
  67. return null; // not used
  68. }
  69. public function update($username, User $user, $password = ''): User
  70. {
  71. // Password change is handled by Hestia
  72. return $this->user();
  73. }
  74. public function add(User $user, $password): User
  75. {
  76. return new User(); // not used
  77. }
  78. public function delete(User $user)
  79. {
  80. return true; // not used
  81. }
  82. public function find($username): ?User
  83. {
  84. return null; // not used
  85. }
  86. public function allUsers(): UsersCollection
  87. {
  88. return new UsersCollection(); // not used
  89. }
  90. public function getGuest(): User
  91. {
  92. $guest = new User();
  93. $guest->setUsername('guest');
  94. $guest->setName('Guest');
  95. $guest->setRole('guest');
  96. $guest->setHomedir('/');
  97. $guest->setPermissions([]);
  98. return $guest;
  99. }
  100. }