From a60ddb67d29767a1d829b123690dbac14e453761 Mon Sep 17 00:00:00 2001 From: Andy Summers <andrew.summers@wisc.edu> Date: Tue, 15 Nov 2016 10:59:50 -0600 Subject: [PATCH] Reorganize namespaces for less clutter --- .../edu/wisc/doit/UserDetailsProvider.php | 33 ----------- .../wisc/doit/{ => uwphps}/UWUserDetails.php | 4 +- .../wisc/doit/{ => uwphps}/UserDetails.php | 2 +- .../wisc/doit/uwphps/UserDetailsProvider.php | 58 +++++++++++++++++++ .../local}/LocalUserDetailsProvider.php | 8 ++- .../FederatedPreauthUserDetailsProvider.php | 37 +++--------- .../preauth/PreauthUserDetailsProvider.php | 22 +++++++ ...ederatedPreauthUserDetailsProviderTest.php | 6 +- .../doit/LocalUserDetailsProviderTest.php | 2 +- 9 files changed, 102 insertions(+), 70 deletions(-) delete mode 100644 src/main/edu/wisc/doit/UserDetailsProvider.php rename src/main/edu/wisc/doit/{ => uwphps}/UWUserDetails.php (97%) rename src/main/edu/wisc/doit/{ => uwphps}/UserDetails.php (98%) create mode 100644 src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php rename src/main/edu/wisc/doit/{ => uwphps/local}/LocalUserDetailsProvider.php (87%) rename src/main/edu/wisc/doit/{ => uwphps/preauth}/FederatedPreauthUserDetailsProvider.php (64%) create mode 100644 src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php diff --git a/src/main/edu/wisc/doit/UserDetailsProvider.php b/src/main/edu/wisc/doit/UserDetailsProvider.php deleted file mode 100644 index 36c7244..0000000 --- a/src/main/edu/wisc/doit/UserDetailsProvider.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -namespace edu\wisc\doit; - -/** - * TODO: Write documentation - */ -interface UserDetailsProvider -{ - - // Constants representing UW Federated login Shibboleth headers - const FED_EPPN = "eppn"; - const FED_SPVI = "eduWisconsinSPVI"; - const FED_FULLNAME = "eduWisconsinCommonName"; - const FED_FIRST_NAME = "eduWisconsinGivenName"; - const FED_LAST_NAME = "eduWisconsinSurname"; - const FED_EMAIL = "eduWisconsinEmailAddress"; - - // Generic and/or UWMSN constants - const SHIB_SESSION_ID = 'Shib-Session-Id'; - const SHIB_SESSION_ID_HTTP = 'HTTP_SHIB_SESSION_ID'; - const UDDS = "udds"; - const SOURCE = "source"; - const ISIS_EMPLID = "isisEmplid"; - - /** - * Map Shibboleth header values to an associative array. - * - * @return UserDetails - */ - public function loadUser(); - -} \ No newline at end of file diff --git a/src/main/edu/wisc/doit/UWUserDetails.php b/src/main/edu/wisc/doit/uwphps/UWUserDetails.php similarity index 97% rename from src/main/edu/wisc/doit/UWUserDetails.php rename to src/main/edu/wisc/doit/uwphps/UWUserDetails.php index 1708f13..cb1a646 100644 --- a/src/main/edu/wisc/doit/UWUserDetails.php +++ b/src/main/edu/wisc/doit/uwphps/UWUserDetails.php @@ -1,6 +1,6 @@ <?php -namespace edu\wisc\doit; +namespace edu\wisc\doit\uwphps; /** * Default, concrete implementation of {@link UserDetails} to represent a UW user. @@ -20,7 +20,7 @@ class UWUserDetails implements UserDetails private $emailAddress; /** @var string */ private $source; - /** @var isisEmplid */ + /** @var string */ private $isisEmplid; /** @var string */ private $firstName; diff --git a/src/main/edu/wisc/doit/UserDetails.php b/src/main/edu/wisc/doit/uwphps/UserDetails.php similarity index 98% rename from src/main/edu/wisc/doit/UserDetails.php rename to src/main/edu/wisc/doit/uwphps/UserDetails.php index b7d8fc1..93cb422 100644 --- a/src/main/edu/wisc/doit/UserDetails.php +++ b/src/main/edu/wisc/doit/uwphps/UserDetails.php @@ -1,6 +1,6 @@ <?php -namespace edu\wisc\doit; +namespace edu\wisc\doit\uwphps; /** * UserDetails defines a minimal representation of a user associated with UW. diff --git a/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php new file mode 100644 index 0000000..1cf730d --- /dev/null +++ b/src/main/edu/wisc/doit/uwphps/UserDetailsProvider.php @@ -0,0 +1,58 @@ +<?php + +namespace edu\wisc\doit\uwphps; + +/** + * UseDetailsProvider is an interface defining how to load an {@link UserDetails} and provides constants for + * supplied request header keys. + */ +abstract class UserDetailsProvider +{ + + /** @var bool Flag indicating if headers are passed prefixed with 'HTTP_' */ + protected $httpHeaders; + + // Constants representing UW Federated login Shibboleth headers + const FED_EPPN = "eppn"; + const FED_SPVI = "eduWisconsinSPVI"; + const FED_FULLNAME = "eduWisconsinCommonName"; + const FED_FIRST_NAME = "eduWisconsinGivenName"; + const FED_LAST_NAME = "eduWisconsinSurname"; + const FED_EMAIL = "eduWisconsinEmailAddress"; + + // Generic and/or UWMSN constants + const SHIB_SESSION_ID = 'Shib-Session-Id'; + const SHIB_SESSION_ID_HTTP = 'HTTP_SHIB_SESSION_ID'; + const UDDS = "udds"; + const SOURCE = "source"; + const ISIS_EMPLID = "isisEmplid"; + + /** + * UserDetailsProvider constructor. + * @param $http + */ + public function __construct($http = true) + { + $this->http = $http; + } + + /** + * Map Shibboleth header values to an associative array. + * + * @return UserDetails + */ + abstract public function loadUser(); + + + /** + * Map a Shibboleth attribute to its associated HTTP header name. + * + * @param string $attribute attribute to map + * @return string Shibboleth attribute name mapped to its equivalent HTTP header name + */ + protected function mapAttribute($attribute) + { + return 'HTTP_' . strtoupper($attribute); + } + +} diff --git a/src/main/edu/wisc/doit/LocalUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php similarity index 87% rename from src/main/edu/wisc/doit/LocalUserDetailsProvider.php rename to src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php index bbbbf02..9643683 100644 --- a/src/main/edu/wisc/doit/LocalUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/local/LocalUserDetailsProvider.php @@ -1,11 +1,14 @@ <?php -namespace edu\wisc\doit; +namespace edu\wisc\doit\uwphps\local; + +use edu\wisc\doit\uwphps\UWUserDetails; +use edu\wisc\doit\uwphps\UserDetailsProvider; /** * LocalUserDetailsProvider provides a developer with a {@link UWUserDetails} suitable for use in local development. */ -class LocalUserDetailsProvider implements UserDetailsProvider +class LocalUserDetailsProvider extends UserDetailsProvider { /** @var string */ @@ -18,6 +21,7 @@ class LocalUserDetailsProvider implements UserDetailsProvider */ public function __construct($filePath) { + parent::__construct(false); $this->filePath = $filePath; } diff --git a/src/main/edu/wisc/doit/FederatedPreauthUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php similarity index 64% rename from src/main/edu/wisc/doit/FederatedPreauthUserDetailsProvider.php rename to src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php index a0c17d4..b5a8511 100644 --- a/src/main/edu/wisc/doit/FederatedPreauthUserDetailsProvider.php +++ b/src/main/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProvider.php @@ -1,27 +1,19 @@ <?php -namespace edu\wisc\doit; +namespace edu\wisc\doit\uwphps\preauth; + +use edu\wisc\doit\uwphps\UWUserDetails; +use edu\wisc\doit\uwphps\UserDetailsProvider; /** - * FederatedPreauthUserDetailsProvider provides an application with a {@link UWUserDetails} from Shibboleth attributes. - * The attributes use the keys as defined by UW System, which are distinct from those used specifically by UWMSN. + * FederatedPreauthUserDetailsProvider is an implementation of {@link UserDetailsProvider} for loading users + * authenticated with UW-System Federated login. + * + * {@see PreauthUserDetailsProvider} for loading users authenticated through UW-Madison login. */ -class FederatedPreauthUserDetailsProvider implements UserDetailsProvider +class FederatedPreauthUserDetailsProvider extends UserDetailsProvider { - /** @var bool */ - private $httpHeaders; - - /** - * FederatedPreauthUserDetailsProvider constructor. - * - * @param bool $http flag indicating if Shibboleth attributes are forwarded as HTTP headers - */ - public function __construct($http = false) - { - $this->httpHeaders = $http; - } - /** * {@inheritdoc} */ @@ -62,15 +54,4 @@ class FederatedPreauthUserDetailsProvider implements UserDetailsProvider return $userDetails; } - /** - * Map a Shibboleth attribute to its associated HTTP header name. - * - * @param string $attribute attribute to map - * @return string Shibboleth attribute name mapped to its equivalent HTTP header name - */ - private function mapAttribute($attribute) - { - return 'HTTP_' . strtoupper($attribute); - } - } diff --git a/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php b/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php new file mode 100644 index 0000000..77bcecc --- /dev/null +++ b/src/main/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProvider.php @@ -0,0 +1,22 @@ +<?php + +namespace edu\wisc\doit\uwphps\preauth; + +/** + * PreauthUserDetailsProvider is an implementation of {@link UserDetailsProvider} for loading users authenticated + * with UW-Madison login. + * + * {@see FederatedPreauthUserDetailsProvider} for loading users authenticated through UW-System Federated login. + */ +class PreauthUserDetailsProvider extends UserDetailsProvider +{ + + /** + * {@inheritdoc} + */ + public function loadUser() + { + + } + +} diff --git a/src/test/edu/wisc/doit/HTTPFederatedPreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/HTTPFederatedPreauthUserDetailsProviderTest.php index 683915a..c4f1d70 100644 --- a/src/test/edu/wisc/doit/HTTPFederatedPreauthUserDetailsProviderTest.php +++ b/src/test/edu/wisc/doit/HTTPFederatedPreauthUserDetailsProviderTest.php @@ -1,7 +1,7 @@ <?php -use edu\wisc\doit\UserDetailsProvider; -use edu\wisc\doit\FederatedPreauthUserDetailsProvider; +use edu\wisc\doit\uwphps\UserDetailsProvider; +use edu\wisc\doit\uwphps\preauth\FederatedPreauthUserDetailsProvider; /** * Tests for {@link FederatedPreauthUserDetailsProvider}. @@ -27,7 +27,7 @@ class HTTPFederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_Tes } $this->attributes = json_decode($jsonString, true); - $this->userProvider = new FederatedPreauthUserDetailsProvider(true); + $this->userProvider = new FederatedPreauthUserDetailsProvider(); putenv($this->mapAttribute(UserDetailsProvider::FED_EPPN) . '=' . $this->attributes[$this->mapAttribute(UserDetailsProvider::FED_EPPN)]); putenv($this->mapAttribute(UserDetailsProvider::FED_SPVI) . '=' . $this->attributes[$this->mapAttribute(UserDetailsProvider::FED_SPVI)]); diff --git a/src/test/edu/wisc/doit/LocalUserDetailsProviderTest.php b/src/test/edu/wisc/doit/LocalUserDetailsProviderTest.php index 52b4bb8..35c73e0 100644 --- a/src/test/edu/wisc/doit/LocalUserDetailsProviderTest.php +++ b/src/test/edu/wisc/doit/LocalUserDetailsProviderTest.php @@ -1,6 +1,6 @@ <?php -use edu\wisc\doit\LocalUserDetailsProvider; +use edu\wisc\doit\uwphps\local\LocalUserDetailsProvider; /** * Tests for {@link LocalUserDetailsProvider}. -- GitLab