diff --git a/src/main/edu/wisc/doit/UserDetailsProvider.php b/src/main/edu/wisc/doit/UserDetailsProvider.php deleted file mode 100644 index 36c7244322e5f9bd910792efd35b2b897f308b06..0000000000000000000000000000000000000000 --- 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 1708f134097be1fa8b67b9d289a5e72c3e0cf0c1..cb1a6469e92cfa5088e1227ae347dffe79a726c9 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 b7d8fc1037abedd9064b2ef066a20b38af391949..93cb4220ed926b171802b0ffccfd6cba278ab179 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 0000000000000000000000000000000000000000..1cf730d62d52a992d574b809e6b1b5d958899582 --- /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 bbbbf02efd1ef2e7ad42e624082b1bf2b950b091..96436837b40b8940589509ddf2c0a9819aa26118 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 a0c17d476ca71eccaf07585f4889fcc337a0eb46..b5a85112f205b0dc132abb40cead76e72d2c387e 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 0000000000000000000000000000000000000000..77bcecc23141a583c35c4ea453be7d34b1cb9cdf --- /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 683915a8cf0ad7df20511edd932756f44fbd281c..c4f1d70ca5a453feb0ce3542e6181010c05c7e32 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 52b4bb8fa1d4d6754791333cea72b7ae24c74614..35c73e0efa17186f3f3410b396c7820b3e373347 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}.