98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\v\vp;
 | 
						|
 | 
						|
use nur\A;
 | 
						|
use nur\authz;
 | 
						|
use nur\P;
 | 
						|
use nur\v\al;
 | 
						|
use nur\v\base\TActionSupport;
 | 
						|
use nur\v\base\TBasicPage;
 | 
						|
use nur\v\model\IBasicPage;
 | 
						|
use nur\v\page;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class AInitAuthzPage: une page utilisée pour initialiser l'authentification
 | 
						|
 */
 | 
						|
class AInitAuthzPage extends AInitPage implements IBasicPage {
 | 
						|
  use TBasicPage, TActionSupport;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @var string nom du paramètre qui contient l'action à effectuer.
 | 
						|
   * retourner null pour désactiver le support des actions
 | 
						|
   */
 | 
						|
  const ACTION_PARAM = null;
 | 
						|
 | 
						|
  /** @var array liste des actions valides */
 | 
						|
  const VALID_ACTIONS = null;
 | 
						|
 | 
						|
  /** @var bool faut-il s'assurer que {@link al} charge la session? */
 | 
						|
  const AUTORESTORE_ALERTER_SESSION = true;
 | 
						|
 | 
						|
  /** @see Html5BasicPageContainer::AUTOCLOSE_SESSION() */
 | 
						|
  protected function AUTOCLOSE_SESSION(): ?bool {
 | 
						|
    return static::AUTOCLOSE_SESSION;
 | 
						|
  } const AUTOCLOSE_SESSION = null;
 | 
						|
 | 
						|
  /** la connexion SU est-elle autorisée? */
 | 
						|
  protected function SULOGIN_ALLOWED(): bool {
 | 
						|
    return static::SULOGIN_ALLOWED;
 | 
						|
  } const SULOGIN_ALLOWED = false;
 | 
						|
 | 
						|
  function beforeConfig(array &$config): void {
 | 
						|
    parent::beforeConfig($config);
 | 
						|
    A::merge_nn($config, [
 | 
						|
      "autoclose_session" => $this->AUTOCLOSE_SESSION(),
 | 
						|
    ]);
 | 
						|
  }
 | 
						|
 | 
						|
  function beforeSetup(): void {
 | 
						|
    parent::beforeSetup();
 | 
						|
    if ($this->SULOGIN_ALLOWED()) $this->suloginMaybe();
 | 
						|
    if (static::AUTORESTORE_ALERTER_SESSION) {
 | 
						|
      # s'assurer que la session est chargée
 | 
						|
      al::get()->restoreSession();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  protected function suloginMaybe(): void {
 | 
						|
    $username = P::get("su!");
 | 
						|
    if ($username) {
 | 
						|
      $am = authz::manager();
 | 
						|
      $am->setSulogin();
 | 
						|
      $am->selectAuthz($username);
 | 
						|
      page::redirect();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  protected function ensureAuthOrRedirect(bool $requireAuth, bool $requireAuthz, $requireRole, $requirePerm): void {
 | 
						|
    $am = authz::manager();
 | 
						|
    $loginUrl = $this->getLoginUrl();
 | 
						|
    $destUrl = page::self(true);
 | 
						|
    if (!$am->checkCookie()) {
 | 
						|
      if (!$requireAuth) return;
 | 
						|
      $am->redirect($am::REASON_LOGIN, $destUrl, $loginUrl);
 | 
						|
    } elseif (!$am->checkSession()) {
 | 
						|
      if ($am->isNewSession()) {
 | 
						|
        $am->redirect($am::REASON_LOGIN, $destUrl, $loginUrl);
 | 
						|
      } else {
 | 
						|
        $am->redirect($am::REASON_SESSION, $destUrl, $loginUrl);
 | 
						|
      }
 | 
						|
    } elseif ($requireAuth && !$am->isAuth()) {
 | 
						|
      $am->redirect($am::REASON_SESSION, $destUrl, $loginUrl);
 | 
						|
    }
 | 
						|
    A::ensure_narray($requireRole);
 | 
						|
    A::ensure_narray($requirePerm);
 | 
						|
    if ($requireAuthz && $am->isAuth() && !$am->checkAuthz($requireRole, $requirePerm)) {
 | 
						|
      $am->redirect($am::REASON_UNAUTHORIZED, $destUrl, $loginUrl);
 | 
						|
    }
 | 
						|
    if ($am->isAuth()) $am->setConnected();
 | 
						|
  }
 | 
						|
 | 
						|
  protected function ensureFormLoginAndRedirect(?string $username, ?string $password, string $destUrl): void {
 | 
						|
    if ($username === null && $password === null) return;
 | 
						|
    if (authz::manager()->formLogin($username, $password)) {
 | 
						|
      page::redirect($destUrl);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |