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