diff --git a/composer.json b/composer.json index fc5ac524316fa1e797a0d868f288b1393b8bbba5..17cf9d25687bb77b5a6b907c905108c057af952e 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "type": "library", "homepage": "https://git.doit.wisc.edu/adi-ia/uw-php-security", "license": "Apache-2.0", - "version": "2.0.1", + "version": "2.1.0", "authors": [{ "name": "UW-Madison DoIT ADI Integrated Applications", "email": "adi-ia@lists.wisc.edu", diff --git a/composer.lock b/composer.lock index 2971b0dfcf35d8e1aa8f919f4d322051cb5df6c5..461aa07d1e4027ce581c6de62b871853804b9bd2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "8f6e29a0b7f012c3a62df9e5899d57d3", - "content-hash": "9e664849ddf46e1a2b66fd5185bf57b8", + "hash": "04e36a4c8fb561534363967c2928a542", + "content-hash": "1f9986fcd261b43d38be581603b2af13", "packages": [], "packages-dev": [ { diff --git a/src/main/edu/wisc/doit/uwphps/UWUserDetails.php b/src/main/edu/wisc/doit/uwphps/UWUserDetails.php index 958066ec5d62760c1943c79db002476745e36ac5..deea01daf7d9f95b1ce46f873464043dd0473ee1 100644 --- a/src/main/edu/wisc/doit/uwphps/UWUserDetails.php +++ b/src/main/edu/wisc/doit/uwphps/UWUserDetails.php @@ -26,6 +26,8 @@ class UWUserDetails implements UserDetails private $firstName; /** @var string */ private $lastName; + /** @var array */ + private $memberships; /** * UWUserDetails constructor. @@ -48,7 +50,8 @@ class UWUserDetails implements UserDetails $source, $isisEmplid, $firstName, - $lastName + $lastName, + $memberships ) { $this->eppn = $eppn; $this->pvi = $pvi; @@ -59,6 +62,7 @@ class UWUserDetails implements UserDetails $this->isisEmplid = $isisEmplid; $this->firstName = $firstName; $this->lastName = $lastName; + $this->memberships = $memberships; } /** @@ -133,4 +137,12 @@ class UWUserDetails implements UserDetails return $this->lastName; } + /** + * {@inheritdoc} + */ + public function getIsMemberOf() + { + return $this->memberships; + } + } \ No newline at end of file diff --git a/src/main/edu/wisc/doit/uwphps/UserDetails.php b/src/main/edu/wisc/doit/uwphps/UserDetails.php index 6153cee0f1a4cc2ab1adb08a288c631f49ec5aa7..cc134bff5716fc6b61184a3c9eabaf1ba2817168 100644 --- a/src/main/edu/wisc/doit/uwphps/UserDetails.php +++ b/src/main/edu/wisc/doit/uwphps/UserDetails.php @@ -73,5 +73,12 @@ interface UserDetails * @return string|null */ public function getLastName(); + + /** + * The user's Manifest group memberships delivered to the application. + * + * @return array|null + */ + public function getIsMemberOf(); } diff --git a/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php index b163dbc0d1d83882c16dad7925b7a24aeeee4993..1a6c9cf6e9ef3e4ac942f70747df19cecd73480f 100644 --- a/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php @@ -20,6 +20,7 @@ abstract class UserDetailsProvider const UDDS = "udds"; const SOURCE = "source"; const ISIS_EMPLID = "isisEmplid"; + const MEMBER_OF = "isMemberOf"; /** Delimiter used by multi-valued headers */ const DELIMITER = ';'; diff --git a/src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php index 9abe0cb6547d3c832cc59e9937a17da9419597d2..e21a9dab468d78afaeb6c97229ab743e942bd6eb 100644 --- a/src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php @@ -53,7 +53,8 @@ class LocalUserDetailsProvider extends PreauthUserDetailsProvider $attributes[static::SOURCE], $attributes[static::ISIS_EMPLID], $attributes[static::FIRST_NAME], - $attributes[static::LAST_NAME] + $attributes[static::LAST_NAME], + explode(static::DELIMITER, $attributes[static::MEMBER_OF]) ); } diff --git a/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php index ed174dadcddc56f23fdfeb660c0c6825159eed19..4bd197b22ef438dcd790115977646c617732be10 100644 --- a/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php @@ -42,19 +42,21 @@ class FederatedPreauthUserDetailsProvider extends UserDetailsProvider getenv($this->httpHeaderFromAttribute(static::SOURCE)), getenv($this->httpHeaderFromAttribute(static::ISIS_EMPLID)), getenv($this->httpHeaderFromAttribute(static::FIRST_NAME)), - getenv($this->httpHeaderFromAttribute(static::LAST_NAME)) + getenv($this->httpHeaderFromAttribute(static::LAST_NAME)), + explode(static::DELIMITER, getenv($this->httpHeaderFromAttribute(static::MEMBER_OF))) ); } else { $userDetails = new UWUserDetails( getenv(static::EPPN), getenv(static::SPVI), getenv(static::FULL_NAME), - getenv(static::UDDS), + explode(static::DELIMITER, getenv(static::UDDS)), getenv(static::EMAIL), getenv(static::SOURCE), getenv(static::ISIS_EMPLID), getenv(static::FIRST_NAME), - getenv(static::LAST_NAME) + getenv(static::LAST_NAME), + explode(static::DELIMITER, getenv(static::MEMBER_OF)) ); } diff --git a/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php index 7b2740c32e91ca9e0490f147803a00268612470c..9816931f3edb576548b3fc9bf354415cccd65b09 100644 --- a/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php @@ -41,19 +41,21 @@ class PreauthUserDetailsProvider extends UserDetailsProvider getenv($this->httpHeaderFromAttribute(static::SOURCE)), getenv($this->httpHeaderFromAttribute(static::ISIS_EMPLID)), getenv($this->httpHeaderFromAttribute(static::FIRST_NAME)), - getenv($this->httpHeaderFromAttribute(static::LAST_NAME)) + getenv($this->httpHeaderFromAttribute(static::LAST_NAME)), + explode(static::DELIMITER, getenv($this->httpHeaderFromAttribute(static::MEMBER_OF))) ); } else { $userDetails = new UWUserDetails( getenv(static::EPPN), getenv(static::PVI), getenv(static::FULL_NAME), - getenv(static::UDDS), + explode(static::DELIMITER, getenv(static::UDDS)), getenv(static::EMAIL), getenv(static::SOURCE), getenv(static::ISIS_EMPLID), getenv(static::FIRST_NAME), - getenv(static::LAST_NAME) + getenv(static::LAST_NAME), + explode(static::DELIMITER, getenv(static::MEMBER_OF)) ); } diff --git a/src/main/resources/localuser.json b/src/main/resources/localuser.json index 731030b5374e207e9dba0c72eb56be13e4673655..b9e0c05910badc35526c5ce0c9aecc70fbe265e9 100644 --- a/src/main/resources/localuser.json +++ b/src/main/resources/localuser.json @@ -8,5 +8,6 @@ "wiscEduUDDS": "A061234;A072345", "mail": "bucky.badger@wisc.edu", "source": "a_source", - "isisEmplid": "123456789" + "isisEmplid": "123456789", + "isMemberOf": "A06;A07" } \ No newline at end of file diff --git a/src/test/edu/wisc/doit/uwphps/local/LocalUserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/local/LocalUserDetailsProviderTest.php index a277d06f1e2d2873d944954b517e722f3d18dc7a..c6af44f8f04cceda58e69d709f64ce71ae91a3b0 100644 --- a/src/test/edu/wisc/doit/uwphps/local/LocalUserDetailsProviderTest.php +++ b/src/test/edu/wisc/doit/uwphps/local/LocalUserDetailsProviderTest.php @@ -22,6 +22,7 @@ class LocalUserDetailsProviderTest extends \PHPUnit_Framework_TestCase $this->assertEquals("123456789", $user->getIsisEmplid()); $this->assertEquals("BUCKINGHAM", $user->getFirstName()); $this->assertEquals("BADGER", $user->getLastName()); + $this->assertEquals(['A06', 'A07'], $user->getIsMemberOf()); } /** @test */ diff --git a/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php index 5614843da4883a00ca3ab350f4a3be46fa3757b9..c79697b1b46a92e4fe1edc687f912e53517f1c66 100644 --- a/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php +++ b/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php @@ -11,9 +11,6 @@ class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCas use EnvironmentHelper; - /** @var array */ - private $attributes; - /** @var FederatedPreauthUserDetailsProvider */ private $userProvider; @@ -39,7 +36,8 @@ class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCas FederatedPreauthUserDetailsProvider::LAST_NAME => 'BADGER', FederatedPreauthUserDetailsProvider::SOURCE => 'a_source', FederatedPreauthUserDetailsProvider::SPVI => 'UW123A456', - FederatedPreauthUserDetailsProvider::ISIS_EMPLID => '123456789' + FederatedPreauthUserDetailsProvider::ISIS_EMPLID => '123456789', + FederatedPreauthUserDetailsProvider::MEMBER_OF => 'A06;A07' ]; } @@ -73,6 +71,10 @@ class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCas $user->getFirstName() ); static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::LAST_NAME], $user->getLastName()); + static::assertEquals( + explode(FederatedPreauthUserDetailsProvider::DELIMITER, $this->environment[FederatedPreauthUserDetailsProvider::MEMBER_OF]), + $user->getIsMemberOf() + ); } /** @test */ @@ -96,6 +98,10 @@ class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCas $user->getFirstName() ); static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::LAST_NAME], $user->getLastName()); + static::assertEquals( + explode(FederatedPreauthUserDetailsProvider::DELIMITER, $this->environment[FederatedPreauthUserDetailsProvider::MEMBER_OF]), + $user->getIsMemberOf() + ); } /** @test */ diff --git a/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php index 7e6d7de6ed5e2a8ac06d6b509d5a120ac31df671..48fbed5886cd19dba6b54e0312f53ea74555a3c4 100644 --- a/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php +++ b/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php @@ -36,7 +36,8 @@ class PreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase PreauthUserDetailsProvider::LAST_NAME => 'BADGER', PreauthUserDetailsProvider::SOURCE => 'a_source', PreauthUserDetailsProvider::PVI => 'UW123A456', - PreauthUserDetailsProvider::ISIS_EMPLID => '123456789' + PreauthUserDetailsProvider::ISIS_EMPLID => '123456789', + PreauthUserDetailsProvider::MEMBER_OF => 'A06;A07' ]; } @@ -65,6 +66,10 @@ class PreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase static::assertEquals($this->environment[PreauthUserDetailsProvider::ISIS_EMPLID], $user->getIsisEmplid()); static::assertEquals($this->environment[PreauthUserDetailsProvider::FIRST_NAME], $user->getFirstName()); static::assertEquals($this->environment[PreauthUserDetailsProvider::LAST_NAME], $user->getLastName()); + static::assertEquals( + explode(PreauthUserDetailsProvider::DELIMITER, $this->environment[PreauthUserDetailsProvider::MEMBER_OF]), + $user->getIsMemberOf() + ); } /** @test */ @@ -82,6 +87,10 @@ class PreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase static::assertEquals($this->environment[PreauthUserDetailsProvider::ISIS_EMPLID], $user->getIsisEmplid()); static::assertEquals($this->environment[PreauthUserDetailsProvider::FIRST_NAME], $user->getFirstName()); static::assertEquals($this->environment[PreauthUserDetailsProvider::LAST_NAME], $user->getLastName()); + static::assertEquals( + explode(PreauthUserDetailsProvider::DELIMITER, $this->environment[PreauthUserDetailsProvider::MEMBER_OF]), + $user->getIsMemberOf() + ); } /** @test */ diff --git a/src/test/resources/localuser.json b/src/test/resources/localuser.json index 60704689076cf537659671938530c882a491c77f..6343d9041de3bb0d960720fd8f4cf809e02005b5 100644 --- a/src/test/resources/localuser.json +++ b/src/test/resources/localuser.json @@ -8,5 +8,6 @@ "wiscEduUDDS": "A061234;A072345", "mail": "bucky.badger@wisc.edu", "source": "a_source", - "wiscEduIsisEmplid": "123456789" + "wiscEduIsisEmplid": "123456789", + "isMemberOf": "A06;A07" } \ No newline at end of file