From 9b4800152cc3fb6e6b935900761b021745910eaf Mon Sep 17 00:00:00 2001 From: Andy Summers <andrew.summers@wisc.edu> Date: Wed, 7 Dec 2016 13:32:49 -0600 Subject: [PATCH] Add `isMemberOf` attribute for Manifest group delivery --- composer.json | 2 +- composer.lock | 4 ++-- src/main/edu/wisc/doit/uwphps/UWUserDetails.php | 14 +++++++++++++- src/main/edu/wisc/doit/uwphps/UserDetails.php | 7 +++++++ .../edu/wisc/doit/uwphps/UserDetailsProvider.php | 1 + .../doit/uwphps/local/LocalUserDetailsProvider.php | 3 ++- .../FederatedPreauthUserDetailsProvider.php | 8 +++++--- .../uwphps/preauth/PreauthUserDetailsProvider.php | 8 +++++--- src/main/resources/localuser.json | 3 ++- .../uwphps/local/LocalUserDetailsProviderTest.php | 1 + .../FederatedPreauthUserDetailsProviderTest.php | 14 ++++++++++---- .../preauth/PreauthUserDetailsProviderTest.php | 11 ++++++++++- src/test/resources/localuser.json | 3 ++- 13 files changed, 61 insertions(+), 18 deletions(-) diff --git a/composer.json b/composer.json index fc5ac52..17cf9d2 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 2971b0d..461aa07 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 958066e..deea01d 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 6153cee..cc134bf 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 b163dbc..1a6c9cf 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 9abe0cb..e21a9da 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 ed174da..4bd197b 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 7b2740c..9816931 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 731030b..b9e0c05 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 a277d06..c6af44f 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 5614843..c79697b 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 7e6d7de..48fbed5 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 6070468..6343d90 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 -- GitLab