mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-25 03:28:45 +02:00
N°2311 - Login Page extensibility
This commit is contained in:
@@ -8,4 +8,6 @@
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'CAS:Error:UserNotAllowed' => 'User not allowed',
|
||||
'CAS:Login:SignIn' => 'Sign in with CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Click here to authenticate yourself with the CAS server',
|
||||
));
|
||||
|
||||
@@ -8,4 +8,6 @@
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'CAS:Error:UserNotAllowed' => 'Utilisateur non autorisé',
|
||||
'CAS:Login:SignIn' => 'S\'identifier avec CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Cliquer ici pour s\'identifier avec le serveur CAS',
|
||||
));
|
||||
|
||||
@@ -11,7 +11,10 @@ use AbstractLoginFSMExtension;
|
||||
use DBObjectSearch;
|
||||
use DBObjectSet;
|
||||
use Dict;
|
||||
use iLoginDataExtension;
|
||||
use iLogoutExtension;
|
||||
use LoginBlockData;
|
||||
use LoginTwigData;
|
||||
use LoginWebPage;
|
||||
use MetaModel;
|
||||
use phpCAS;
|
||||
@@ -23,7 +26,7 @@ use utils;
|
||||
/**
|
||||
* Class CASLoginExtension
|
||||
*/
|
||||
class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExtension
|
||||
class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExtension, iLoginDataExtension
|
||||
{
|
||||
/**
|
||||
* Return the list of supported login modes for this plugin
|
||||
@@ -45,24 +48,29 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
{
|
||||
if (!isset($_SESSION['login_mode']) || ($_SESSION['login_mode'] == 'cas'))
|
||||
{
|
||||
$_SESSION['login_mode'] = 'cas';
|
||||
static::InitCASClient();
|
||||
if (phpCAS::isAuthenticated())
|
||||
{
|
||||
$_SESSION['login_mode'] = 'cas';
|
||||
$_SESSION['auth_user'] = phpCAS::getUser();
|
||||
unset($_SESSION['login_will_redirect']);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isset($_SESSION['cas_count']))
|
||||
if ($_SESSION['login_mode'] == 'cas')
|
||||
{
|
||||
$_SESSION['cas_count'] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($_SESSION['cas_count']);
|
||||
$iErrorCode = LoginWebPage::EXIT_CODE_MISSINGLOGIN;
|
||||
return LoginWebPage::LOGIN_FSM_RETURN_ERROR;
|
||||
if (!isset($_SESSION['login_will_redirect']))
|
||||
{
|
||||
$_SESSION['login_will_redirect'] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($_SESSION['login_will_redirect']);
|
||||
$iErrorCode = LoginWebPage::EXIT_CODE_MISSINGLOGIN;
|
||||
return LoginWebPage::LOGIN_FSM_RETURN_ERROR;
|
||||
}
|
||||
}
|
||||
$_SESSION['login_mode'] = 'cas';
|
||||
phpCAS::forceAuthentication(); // Redirect to CAS and exit
|
||||
}
|
||||
}
|
||||
@@ -110,8 +118,8 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
{
|
||||
$oLoginWebPage = new LoginWebPage();
|
||||
$oLoginWebPage->DisplayLogoutPage(false, Dict::S('CAS:Error:UserNotAllowed'));
|
||||
exit();
|
||||
}
|
||||
exit();
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_RETURN_CONTINUE;
|
||||
}
|
||||
@@ -169,18 +177,6 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
}
|
||||
}
|
||||
|
||||
public function GetSocialButtons()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'login_mode' => 'cas',
|
||||
'label' => 'Sign in with CAS',
|
||||
'tooltip' => 'Click here to authenticate yourself with the CAS server',
|
||||
'twig' => 'cas_button.twig',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
private function DoUserProvisioning($sLogin)
|
||||
{
|
||||
$bCASUserSynchro = Config::Get('cas_user_synchro');
|
||||
@@ -200,6 +196,26 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
}
|
||||
CASUserProvisioning::CreateUser($sLogin, '', 'external');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return LoginTwigData
|
||||
*/
|
||||
public function GetLoginData()
|
||||
{
|
||||
$sPath = APPROOT.'env-'.utils::GetCurrentEnvironment().'/authent-cas/view';
|
||||
$oLoginData = new LoginTwigData(array(), $sPath);
|
||||
|
||||
$aData = array(
|
||||
'sLoginMode' => 'cas',
|
||||
'sLabel' => Dict::S('CAS:Login:SignIn'),
|
||||
'sTooltip' => Dict::S('CAS:Login:SignInTooltip'),
|
||||
);
|
||||
$oBlockData = new LoginBlockData('cas_sso_button.html.twig', $aData);
|
||||
|
||||
$oLoginData->AddBlockData('login_sso_buttons', $oBlockData);
|
||||
|
||||
return $oLoginData;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
33
datamodels/2.x/authent-cas/view/cas_sso_button.html.twig
Normal file
33
datamodels/2.x/authent-cas/view/cas_sso_button.html.twig
Normal file
@@ -0,0 +1,33 @@
|
||||
{# @copyright Copyright (C) 2010-2019 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
|
||||
<tr>
|
||||
<td style="text-align:center" colspan="2">
|
||||
<div class="sso-button">
|
||||
<div style="width:19em; cursor: pointer; margin-left: auto; margin-right: auto; padding: 0.5em; background-color: #eee; border-radius: 0.25em;" title="{{ aData.sTooltip }}" onclick="$('#login_mode').val('{{ aData.sLoginMode }}'); $('#login_form').submit(); return false;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 336.82 167.83" class="logo" style="height: 1em; vertical-align: middle; margin-right: 1em;">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #024d71;
|
||||
}
|
||||
.cls-2 {
|
||||
fill: #74c163;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<title>{{ aData.sTooltip }}</title>
|
||||
<g id="Layer_2" data-name="Layer 2">
|
||||
<path class="cls-1" d="M217.72,469.85c-17.68,1.31-38.31,1-54.18-7.87-12.59-7-23.71-18.52-28.72-32.14a82,82,0,0,1-4.49-27.49c0-36.26,16.11-64.23,40.29-80.34,16.59-11.38,36-16.83,58.54-16.83,17.3,0,30.34,4,35.08,6.64l-9.48,27.73c-4.5-2.38-15.17-5.22-28.92-5.22s-26.78,4.27-36.5,12.33c-13.27,11.13-22,29.39-22,51.66,0,25.6,14.46,42.67,42.43,42.67a161.48,161.48,0,0,0,22.38-1.19Z" transform="translate(-130.33 -305.18)"></path>
|
||||
<path class="cls-1" d="M322.77,398.75l-2.72-30.4c-.71-8.76-1.42-21.56-2.14-31.28h-.71c-4,9.72-8.53,22-12.8,31.28l-13.69,30.08-13.53,33.43-17.33,38.41h-36.5l78-159.75h43.85l18.49,159.75H327.87l-3.05-38.12Z" transform="translate(-130.33 -305.18)"></path>
|
||||
<path class="cls-1" d="M364.31,438.85c12.27,3.81,21.29,5.19,36.22,5.19,13,0,20.87-6.71,20.87-19,0-9.24-6.87-14.93-21.57-22.75-16.82-9-32.94-21.8-32.94-42.42,0-32.24,28-51.91,62.81-51.91,19.19,0,30.57,4.27,37.44,7.82l-10.66,28.44a62.94,62.94,0,0,0-29.63-6.87c-15.88,0-24.17,7.82-24.17,16.59,0,9.48,9.72,15.17,23.23,22.75,19.43,10.19,31.52,23.23,31.52,42.43,0,35.55-29.44,55.72-64.71,53.8a231.52,231.52,0,0,1-24.78-2.61Z" transform="translate(-130.33 -305.18)"></path>
|
||||
</g>
|
||||
<g id="swoosh">
|
||||
<path class="cls-2" d="M257.45,432.24a41.64,41.64,0,0,1,13.11-.32,39.17,39.17,0,0,1,16.89,6.2l0,0c10.55-15,29.11-25,50.24-25,19.75,0,37.34,8.85,48.16,22.28l1-.77c-12.85-17.31-37.44-29-65.67-29-26.92,0-50.54,10.65-63.81,26.65Z" transform="translate(-130.33 -305.18)"></path>
|
||||
</g>
|
||||
</svg>
|
||||
{{ aData.sLabel }}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
Reference in New Issue
Block a user