From 737771f209923968d9b475ea548fead4734eee12 Mon Sep 17 00:00:00 2001 From: Andrew Hoffmann <andrew.hoffmann@wisc.edu> Date: Tue, 6 Dec 2016 10:47:09 -0600 Subject: [PATCH] Convert dashes to underscores when converting to HTTP headers Changed the signature to `public static` to expose this useful function to other classes. Provided a test. --- .../wisc/doit/uwphps/UserDetailsProvider.php | 4 +-- .../FederatedPreauthUserDetailsProvider.php | 18 ++++++------- .../preauth/PreauthUserDetailsProvider.php | 18 ++++++------- .../doit/uwphps/UserDetailsProviderTest.php | 27 +++++++++++++++++++ 4 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 src/test/edu/wisc/doit/uwphps/UserDetailsProviderTest.php diff --git a/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php index f211ca7..9ebd735 100644 --- a/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php @@ -49,8 +49,8 @@ abstract class UserDetailsProvider * * @see https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAttributeAccess NativeSPAttributeAccess */ - protected function httpHeaderFromAttribute($attribute) + public static function httpHeaderFromAttribute($attribute) { - return 'HTTP_' . strtoupper($attribute); + return 'HTTP_' . strtoupper(str_replace('-', '_', $attribute)); } } diff --git a/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php index baafe05..48dfdf1 100644 --- a/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php @@ -34,15 +34,15 @@ class FederatedPreauthUserDetailsProvider extends UserDetailsProvider if ($this->httpHeaders) { $userDetails = new UWUserDetails( - getenv($this->httpHeaderFromAttribute(static::EPPN)), - getenv($this->httpHeaderFromAttribute(static::SPVI)), - getenv($this->httpHeaderFromAttribute(static::FULL_NAME)), - explode(static::DELIMITER, getenv($this->httpHeaderFromAttribute(static::UDDS))), - getenv($this->httpHeaderFromAttribute(static::EMAIL)), - getenv($this->httpHeaderFromAttribute(static::SOURCE)), - getenv($this->httpHeaderFromAttribute(static::ISIS_EMPLID)), - getenv($this->httpHeaderFromAttribute(static::FIRST_NAME)), - getenv($this->httpHeaderFromAttribute(static::LAST_NAME)) + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::EPPN)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::SPVI)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::FULL_NAME)), + explode(static::DELIMITER, getenv(UserDetailsProvider::httpHeaderFromAttribute(static::UDDS))), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::EMAIL)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::SOURCE)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::ISIS_EMPLID)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::FIRST_NAME)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::LAST_NAME)) ); } else { $userDetails = new UWUserDetails( diff --git a/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php index 2406b38..31f8261 100644 --- a/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php @@ -36,15 +36,15 @@ class PreauthUserDetailsProvider extends UserDetailsProvider if ($this->httpHeaders) { $userDetails = new UWUserDetails( - getenv($this->httpHeaderFromAttribute(static::EPPN)), - getenv($this->httpHeaderFromAttribute(static::PVI)), - getenv($this->httpHeaderFromAttribute(static::FULL_NAME)), - explode(static::DELIMITER, getenv($this->httpHeaderFromAttribute(static::UDDS))), - getenv($this->httpHeaderFromAttribute(static::EMAIL)), - getenv($this->httpHeaderFromAttribute(static::SOURCE)), - getenv($this->httpHeaderFromAttribute(static::ISIS_EMPLID)), - getenv($this->httpHeaderFromAttribute(static::FIRST_NAME)), - getenv($this->httpHeaderFromAttribute(static::LAST_NAME)) + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::EPPN)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::PVI)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::FULL_NAME)), + explode(static::DELIMITER, getenv(UserDetailsProvider::httpHeaderFromAttribute(static::UDDS))), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::EMAIL)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::SOURCE)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::ISIS_EMPLID)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::FIRST_NAME)), + getenv(UserDetailsProvider::httpHeaderFromAttribute(static::LAST_NAME)) ); } else { $userDetails = new UWUserDetails( diff --git a/src/test/edu/wisc/doit/uwphps/UserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/UserDetailsProviderTest.php new file mode 100644 index 0000000..0ce2e41 --- /dev/null +++ b/src/test/edu/wisc/doit/uwphps/UserDetailsProviderTest.php @@ -0,0 +1,27 @@ +<?php +namespace edu\wisc\doit\uwphps; + +use PHPUnit\Framework\TestCase; + +/** + * Tests for {@link UserDetailsProvider} concrete methods. + */ +class UserDetailsProviderTest extends TestCase +{ + + /** @var UserDetailsProvider */ + private $provider; + + public function setUp() + { + // Must use a mock because it is an abstract class + $this->provider = $this->getMockForAbstractClass(UserDetailsProvider::class); + } + + /** @test */ + public function convertsAttributeToHttpHeader() + { + $this->assertEquals('HTTP_STARFLEETRANK', UserDetailsProvider::httpHeaderFromAttribute('starfleetRank')); + $this->assertEquals('HTTP_SHIB_SESSION_ID', UserDetailsProvider::httpHeaderFromAttribute('Shib-Session-Id')); + } +} -- GitLab