131 lines
3.6 KiB
PHP
131 lines
3.6 KiB
PHP
<?php
|
|
namespace nur\b\authnz;
|
|
|
|
use nur\authz;
|
|
use nur\config;
|
|
use nur\F;
|
|
use nur\func;
|
|
use nur\msg;
|
|
use nur\v\fo;
|
|
use nur\v\icon;
|
|
use nur\v\ly;
|
|
use nur\v\page;
|
|
use nur\v\v;
|
|
use nur\v\vo;
|
|
use nur\v\vp\AInitAuthzPage;
|
|
|
|
/**
|
|
* Class CasAuthzManager: un utilisateur authentifié par CAS v3
|
|
*/
|
|
class CasAuthzManager extends AuthzManager {
|
|
const USER_MANAGER_CLASS = CasUserManager::class;
|
|
const APPCODE = null;
|
|
|
|
function __construct(?string $appcode=null) {
|
|
if ($appcode === null) $appcode = static::APPCODE;
|
|
if ($appcode === null) $appcode = config::get_appcode();
|
|
$this->appcode = $appcode;
|
|
}
|
|
|
|
protected $appcode;
|
|
|
|
protected $userManager;
|
|
|
|
protected function getUserManager(): IUserManager {
|
|
if ($this->userManager === null) {
|
|
$class = static::USER_MANAGER_CLASS;
|
|
$this->userManager = func::cons($class, $this->appcode);
|
|
}
|
|
return $this->userManager;
|
|
}
|
|
|
|
private $destPage = null;
|
|
|
|
function beforeSetup(AInitAuthzPage $page): void {
|
|
# initialiser la session avant setup. ainsi, dans les fonction beforeSetup(),
|
|
# setup() et afterSetup(), la session est disponible
|
|
$this->destPage = F::get("d", $page->getMainUrl());
|
|
$this->checkSession($username, $authType);
|
|
|
|
if ($authType === "cas" && F::get("a")) {
|
|
# autologin
|
|
$casauthUrl = config::k("url")."/".$page->getCasauthUrl();
|
|
page::redirect(page::bu($page->getCasLoginUrl(), [
|
|
"service" => page::bu($casauthUrl, [
|
|
"r" => $page->getLoginUrl(),
|
|
"d" => $this->destPage,
|
|
])
|
|
]));
|
|
}
|
|
}
|
|
|
|
function print(AInitAuthzPage $page): void {
|
|
page::no_cache();
|
|
ly::row();
|
|
vo::h1(["class" => "text-center", q($page->TITLE())]);
|
|
|
|
ly::col(["sm" => 6, "sm-push" => 3]);
|
|
$status = $this->getStatus();
|
|
switch ($status) {
|
|
case authz::DISCONNECTED:
|
|
msg::warning("Vous avez été déconnecté. Veuillez vous reconnecter");
|
|
break;
|
|
case authz::UNAUTHORIZED:
|
|
msg::error(["user" => [
|
|
"Connecté en tant que ",
|
|
v::b($this->getAuth()),
|
|
", vous n'êtes pas autorisé à accéder à la page que vous avez demandé.",
|
|
]]);
|
|
break;
|
|
}
|
|
|
|
ly::panel("Connexion par CAS");
|
|
if ($page->isDevauthAllowed()) {
|
|
fo::start([
|
|
"type" => "basic",
|
|
"action" => $page->getCasauthUrl(),
|
|
"method" => "get",
|
|
]);
|
|
fo::hidden("r", $page->getLoginUrl());
|
|
fo::hidden("d", $this->destPage);
|
|
} else {
|
|
fo::start([
|
|
"type" => "basic",
|
|
"action" => $page->getCasLoginUrl(),
|
|
"method" => "get",
|
|
]);
|
|
$casauthUrl = config::k("url")."/".$page->getCasauthUrl();
|
|
fo::hidden("service", page::bu($casauthUrl, [
|
|
"r" => $page->getLoginUrl(),
|
|
"d" => $this->destPage,
|
|
]));
|
|
}
|
|
#fo::p("Si vous avez un compte à l'université, vous pouvez vous connecter via CAS");
|
|
vo::p("Si vous avez un compte à l'université, vous pouvez vous connecter via CAS");
|
|
if ($this->isAuth()) {
|
|
if ($status != authz::UNAUTHORIZED) {
|
|
msg::warning(["user" => [
|
|
"Connecté en tant que ",
|
|
v::b(authz::get_auth()),
|
|
", vous n'êtes pas autorisé à accéder à cette application.",
|
|
]]);
|
|
}
|
|
fo::submit([
|
|
icon::logout("Vous déconnecter"),
|
|
"formaction" => $page->getLogoutUrl(),
|
|
"accesskey" => "z",
|
|
]);
|
|
fo::hidden("renew", "true");
|
|
fo::submit([
|
|
icon::login("Changer de compte"),
|
|
"accesskey" => "r",
|
|
]);
|
|
} else {
|
|
fo::submit(["Connexion par CAS", "accesskey" => "r"]);
|
|
}
|
|
fo::end();
|
|
|
|
ly::end();
|
|
}
|
|
}
|