You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							123 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							123 lines
						
					
					
						
							2.9 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
/*
 | 
						|
 * This file is part of the FileGator package.
 | 
						|
 *
 | 
						|
 * (c) Milos Stojanovic <alcalbg@gmail.com>
 | 
						|
 *
 | 
						|
 * For the full copyright and license information, please view the LICENSE file
 | 
						|
 */
 | 
						|
 | 
						|
namespace Filegator\Services\Auth\Adapters;
 | 
						|
 | 
						|
use Filegator\Services\Auth\AuthInterface;
 | 
						|
use Filegator\Services\Auth\User;
 | 
						|
use Filegator\Services\Auth\UsersCollection;
 | 
						|
use Filegator\Services\Service;
 | 
						|
use function Hestiacp\quoteshellarg\quoteshellarg;
 | 
						|
 | 
						|
/**
 | 
						|
 * @codeCoverageIgnore
 | 
						|
 */
 | 
						|
class HestiaAuth implements Service, AuthInterface {
 | 
						|
	protected $permissions = [];
 | 
						|
 | 
						|
	protected $private_repos = false;
 | 
						|
 | 
						|
	protected $hestia_user = "";
 | 
						|
 | 
						|
	public function init(array $config = []) {
 | 
						|
		if (isset($_SESSION["user"])) {
 | 
						|
			$v_user = $_SESSION["user"];
 | 
						|
		}
 | 
						|
		if (!empty($_SESSION["look"])) {
 | 
						|
			if (isset($_SESSION["look"]) && $_SESSION["userContext"] === "admin") {
 | 
						|
				$v_user = $_SESSION["look"];
 | 
						|
			}
 | 
						|
			if (
 | 
						|
				$_SESSION["look"] == "admin" &&
 | 
						|
				$_SESSION["POLICY_SYSTEM_PROTECTED_ADMIN"] == "yes"
 | 
						|
			) {
 | 
						|
				// Go away do not login
 | 
						|
				header("Location: /");
 | 
						|
				exit();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		$this->hestia_user = $v_user;
 | 
						|
		$this->permissions = isset($config["permissions"]) ? (array) $config["permissions"] : [];
 | 
						|
		$this->private_repos = isset($config["private_repos"])
 | 
						|
			? (bool) $config["private_repos"]
 | 
						|
			: false;
 | 
						|
	}
 | 
						|
 | 
						|
	public function user(): ?User {
 | 
						|
		$cmd = "/usr/bin/sudo /usr/local/hestia/bin/v-list-user";
 | 
						|
		exec($cmd . " " . quoteshellarg($this->hestia_user) . " json", $output, $return_var);
 | 
						|
 | 
						|
		if ($return_var == 0) {
 | 
						|
			$data = json_decode(implode("", $output), true);
 | 
						|
			$hestia_user_info = $data[$this->hestia_user];
 | 
						|
			return $this->transformUser($hestia_user_info);
 | 
						|
		}
 | 
						|
 | 
						|
		return $this->getGuest();
 | 
						|
	}
 | 
						|
 | 
						|
	public function transformUser($hstuser): User {
 | 
						|
		$user = new User();
 | 
						|
		$user->setUsername($this->hestia_user);
 | 
						|
		$user->setName($this->hestia_user . " (" . $hstuser["NAME"] . ")");
 | 
						|
		$user->setRole("user");
 | 
						|
		$user->setPermissions($this->permissions);
 | 
						|
		$user->setHomedir("/");
 | 
						|
		return $user;
 | 
						|
	}
 | 
						|
 | 
						|
	public function authenticate($username, $password): bool {
 | 
						|
		# Auth is handled by Hestia
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
 | 
						|
	public function forget() {
 | 
						|
		// Logout return to Hestia
 | 
						|
		return $this->getGuest();
 | 
						|
	}
 | 
						|
 | 
						|
	public function store(User $user) {
 | 
						|
		return null; // not used
 | 
						|
	}
 | 
						|
 | 
						|
	public function update($username, User $user, $password = ""): User {
 | 
						|
		// Password change is handled by Hestia
 | 
						|
		return $this->user();
 | 
						|
	}
 | 
						|
 | 
						|
	public function add(User $user, $password): User {
 | 
						|
		return new User(); // not used
 | 
						|
	}
 | 
						|
 | 
						|
	public function delete(User $user) {
 | 
						|
		return true; // not used
 | 
						|
	}
 | 
						|
 | 
						|
	public function find($username): ?User {
 | 
						|
		return null; // not used
 | 
						|
	}
 | 
						|
 | 
						|
	public function allUsers(): UsersCollection {
 | 
						|
		return new UsersCollection(); // not used
 | 
						|
	}
 | 
						|
 | 
						|
	public function getGuest(): User {
 | 
						|
		$guest = new User();
 | 
						|
 | 
						|
		$guest->setUsername("guest");
 | 
						|
		$guest->setName("Guest");
 | 
						|
		$guest->setRole("guest");
 | 
						|
		$guest->setHomedir("/");
 | 
						|
		$guest->setPermissions([]);
 | 
						|
 | 
						|
		return $guest;
 | 
						|
	}
 | 
						|
}
 |