diff options
Diffstat (limited to 'classes/OpenID_ElggStore.php')
-rw-r--r-- | classes/OpenID_ElggStore.php | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/classes/OpenID_ElggStore.php b/classes/OpenID_ElggStore.php index 35f4797a1..2d4800e9b 100644 --- a/classes/OpenID_ElggStore.php +++ b/classes/OpenID_ElggStore.php @@ -277,4 +277,144 @@ class OpenID_ElggStore extends Auth_OpenID_OpenIDStore { $nonce->delete(); } } + + protected function getTrustedSites($user_guid = true) { + + if ($user_guid === true) { + $user_guid = elgg_get_logged_in_user_guid(); + } elseif (!$user_guid) { + $user_guid = ELGG_ENTITIES_ANY_VALUE; + } + + $results = elgg_get_entities(array( + 'type' => 'object', + 'subtype' => 'openid_server::trust_root', + 'owner_guid' => $user_guid, + )); + + return $results; + } + + public function getTrustedRoots ($user_guid = true) { + + $results = $this->getTrustedSites($user_guid); + + $sites = array(); + if ($results) { + foreach ($results as $site) { + $sites[] = $site->trust_root; + } + } + return $sites; + } + + /** + * Returns the autologin URLs for every trusted site + */ + + public function getAutoLoginSites() { + + $default_trusted_sites = $this->getTrustedSites(false); + + $sites = array(); + if ($default_trusted_sites) { + foreach ($default_trusted_sites as $site) { + if ($site->auto_login_url) { + $sites[] = $site; + } + } + } + return $sites; + } + + /** + * Returns the autologout URLs for every trusted site + */ + + public function getAutoLogoutSites() { + + $default_trusted_sites = $this->getTrustedSites(false); + + $sites = array(); + if ($default_trusted_sites) { + foreach ($default_trusted_sites as $site) { + if ($site->auto_logout_url) { + $sites[] = $site; + } + } + } + return $sites; + } + + static function isTrustedRoot($trust_root) { + $results = elgg_get_entities_from_metadata(array( + 'type' => 'object', + 'subtype' => 'openid_server::trust_root', + 'owner_guid' => elgg_get_logged_in_user_guid(), + 'metadata_name' => 'trust_root', + 'metadata_value' => $trust_root, + )); + + return !! $results; + } + + public function setTrustedSite($trust_root) { + + if (self::isTrustedRoot($trust_root)) { + return true; + } + + $site = new ElggObject(); + $site->subtype = 'openid_server::trust_root'; + $site->owner_guid = elgg_get_logged_in_user_guid(); + $site->title = 'association'; + $site->access_id = ACCESS_PUBLIC; + + if ($site->save()) { + $site->trust_root = $trust_root->trust_root; + $site->site_name = $trust_root->site_name; + $site->autologin = $trust_root->autologin; + $site->autologout = $trust_root->autologout; + $site->width = $trust_root->width; + $site->height = $trust_root->height; + return true; + } + return false; + } + + public function removeUserTrustedSites($user = true) { + + $results = $this->getTrustedSites($user); + + if ($results) { + foreach($results as $trust_root) { + $trust_root->delete(); + } + } + return true; + } + + public function removeTrustedSite($trust_root, $user_guid = true) { + + if ($user_guid === true) { + $user_guid = elgg_get_logged_in_user_guid(); + } elseif (!$user_guid) { + $user_guid = ELGG_ENTITIES_ANY_VALUE; + } + + $results = elgg_get_entities_from_metadata(array( + 'type' => 'object', + 'subtype' => 'openid_server::trust_root', + 'owner_guid' => $user_guid, + 'metadata_name' => 'trust_root', + 'metadata_value' => $trust_root, + )); + + if ($results) { + foreach($results as $trust_root) { + $trust_root->delete(); + } + } + return true; + } } |