Skip to content

Commit

Permalink
Merge pull request #94 from TAMULib/entraid-followup
Browse files Browse the repository at this point in the history
Correct user selection logic in CoreSite
  • Loading branch information
jsavell committed Jul 11, 2024
2 parents 8fc6e1d + a559d13 commit c87e5e1
Showing 1 changed file with 30 additions and 16 deletions.
46 changes: 30 additions & 16 deletions src/Pipit/Classes/Site/CoreSite.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,29 +37,39 @@ public function __construct(&$siteConfig) {
protected function setUser() {
$config = $this->getSiteConfig();
$userClass = null;
$isCustomUserClass = array_key_exists('USER_CLASS', $config) && is_string($config['USER_CLASS']) && is_string($config['NAMESPACE_APP']);
$useSaml = is_bool($config['USESAML']) && $config['USESAML'];
$useCas = is_bool($config['USECAS']) && $config['USECAS'];

if (is_array($config)) {
if (array_key_exists('USER_CLASS', $config) && is_string($config['USER_CLASS']) && is_string($config['NAMESPACE_APP'])) {
if ($isCustomUserClass) {
$className = "{$config['NAMESPACE_APP']}Classes\\Data\\{$config['USER_CLASS']}";
if (class_exists($className)) {
$userClass = new $className();
if (!($userClass instanceof \Pipit\Interfaces\User)) {
$userClass = null;
$customUserClassImplements = class_implements($className);
if (!in_array('Pipit\Interfaces\User', $customUserClassImplements)) { //!($userClass instanceof \Pipit\Interfaces\User)) {
throw new ConfigurationException("Configured User class does not implement: Pipit\Interfaces\User");
}
if (!$useSaml && !$useCas) {
$userClass = new $className();
}
} else {
throw new ConfigurationException("Configured User class not found: {$className}");
}
}
if (!$userClass && is_bool($config['USESAML']) && $config['USESAML']) {
if ($useSaml) {
if ($config['SAML_USER_REPO']) {
$userRepo = $this->getDataRepository($config['SAML_USER_REPO']);
if ($userRepo instanceof \Pipit\Interfaces\DataRepository) {
if ($userClass instanceof \Pipit\Classes\Data\UserSAML) {
$userClass = new Data\UserSAML($this->getSanitizedInputData(),$userRepo);
unset($userRepo);
if ($isCustomUserClass) {
if (in_array("Pipit\Classes\Data\UserSAML", $customUserClassImplements)) {
$userClass = new $className($this->getSanitizedInputData(),$userRepo);
unset($userRepo);
} else {
$userClass = null;
throw new ConfigurationException("Configured UserSAML classes must extend Pipit\Classes\Data\UserSAML");
}
} else {
$userClass = null;
throw new ConfigurationException("Configured UserSAML classes must extend Pipit\Classes\Data\UserSAML");
$userClass = new Data\UserSAML($this->getSanitizedInputData(),$userRepo);
}
} else {
throw new ConfigurationException("UserSAML requires a Pipit\Interfaces\DataRepository");
Expand All @@ -68,16 +78,20 @@ protected function setUser() {
throw new ConfigurationException("UserSAML requires SAML_USER_REPO to be defined with a Pipit\Interfaces\DataRepository");
}
}
if (!$userClass && is_bool($config['USECAS']) && $config['USECAS']) {
if ($useCas) {
if ($config['CAS_USER_REPO']) {
$userRepo = $this->getDataRepository($config['CAS_USER_REPO']);
if ($userRepo instanceof \Pipit\Interfaces\DataRepository) {
if ($userClass instanceof \Pipit\Classes\Data\UserCAS) {
$userClass = new Data\UserCAS($this->getSanitizedInputData(),$userRepo);
unset($userRepo);
if ($isCustomUserClass) {
if (in_array("Pipit\Classes\Data\UserCAS", $customUserClassImplements)) {
$userClass = new $userClass($this->getSanitizedInputData(),$userRepo);
unset($userRepo);
} else {
$userClass = null;
throw new ConfigurationException("Configured UserCAS classes must extend Pipit\Classes\Data\UserCAS");
}
} else {
$userClass = null;
throw new ConfigurationException("Configured UserCAS classes must extend Pipit\Classes\Data\UserCAS");
$userClass = new Data\UserCAS($this->getSanitizedInputData(),$userRepo);
}
} else {
throw new ConfigurationException("UserCAS requires a Pipit\Interfaces\DataRepository");
Expand Down

0 comments on commit c87e5e1

Please sign in to comment.