summaryrefslogtreecommitdiffstats
path: root/modules/consentAdmin/www/consentAdmin.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/consentAdmin/www/consentAdmin.php')
-rw-r--r--modules/consentAdmin/www/consentAdmin.php538
1 files changed, 273 insertions, 265 deletions
diff --git a/modules/consentAdmin/www/consentAdmin.php b/modules/consentAdmin/www/consentAdmin.php
index efc2c19..fd75bc1 100644
--- a/modules/consentAdmin/www/consentAdmin.php
+++ b/modules/consentAdmin/www/consentAdmin.php
@@ -1,265 +1,273 @@
-<?php
-/*
- * consentAdmin - Consent administration module
- *
- * This module enables the user to add and remove consents given for a given
- * Service Provider.
- *
- * The module relies on methods and functions from the Consent module and can
- * not be user without it.
- *
- * Author: Mads Freen <freek@ruc.dk>, Jacob Christiansen <jach@wayf.dk>
- */
-
-/*
- * Runs the processingchain and ignores all filter which have user
- * interaction.
- */
-function driveProcessingChain($idp_metadata, $source, $sp_metadata, $sp_entityid, $attributes, $userid, $hashAttributes = FALSE) {
-
- /*
- * Create a new processing chain
- */
- $pc = new SimpleSAML_Auth_ProcessingChain($idp_metadata, $sp_metadata, 'idp');
-
- /*
- * Construct the state.
- * REMEMBER: Do not set Return URL if you are calling processStatePassive
- */
- $authProcState = array(
- 'Attributes' => $attributes,
- 'Destination' => $sp_metadata,
- 'Source' => $idp_metadata,
- 'isPassive' => TRUE,
- );
-
- /*
- * Call processStatePAssive.
- * We are not interested in any user interaction, only modifications to the attributes
- */
- $pc->processStatePassive($authProcState);
-
- $attributes = $authProcState['Attributes'];
-
- /*
- * Generate identifiers and hashes
- */
- $destination = $sp_metadata['metadata-set'] . '|' . $sp_entityid;
-
- $targeted_id = sspmod_consent_Auth_Process_Consent::getTargetedID($userid, $source, $destination);
- $attribute_hash = sspmod_consent_Auth_Process_Consent::getAttributeHash($attributes, $hashAttributes);
-
- SimpleSAML_Logger::info('consentAdmin: user: ' . $userid);
- SimpleSAML_Logger::info('consentAdmin: target: ' . $targeted_id);
- SimpleSAML_Logger::info('consentAdmin: attribute: ' . $attribute_hash);
-
- /* Return values */
- return array($targeted_id, $attribute_hash, $attributes);
-}
-
-// Get config object
-$config = SimpleSAML_Configuration::getInstance();
-$cA_config = SimpleSAML_Configuration::getConfig('module_consentAdmin.php');
-$authority = $cA_config->getValue('authority');
-
-$as = new SimpleSAML_Auth_Simple($authority);
-
-// If request is a logout request
-if(array_key_exists('logout', $_REQUEST)) {
- $returnURL = $cA_config->getValue('returnURL');
- $as->logout($returnURL);
-}
-
-$hashAttributes = $cA_config->getValue('attributes.hash');
-
-/* Check if valid local session exists */
-$as->requireAuth();
-
-// Get released attributes
-$attributes = $as->getAttributes();
-
-// Get metadata storage handler
-$metadata = SimpleSAML_Metadata_MetaDataStorageHandler::getMetadataHandler();
-
-/*
- * Get IdP id and metadata
- */
-
-
-$local_idp_entityid = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
-$local_idp_metadata = $metadata->getMetaData($local_idp_entityid, 'saml20-idp-hosted');
-
-if($as->getAuthData('saml:sp:IdP') !== NULL) {
- /*
- * From a remote idp (as bridge)
- */
- $idp_entityid = $as->getAuthData('saml:sp:IdP');
- $idp_metadata = $metadata->getMetaData($idp_entityid, 'saml20-idp-remote');
-} else {
- /*
- * from the local idp
- */
- $idp_entityid = $local_idp_entityid;
- $idp_metadata = $local_idp_metadata;
-}
-
-// Get user ID
-$userid_attributename = (isset($local_idp_metadata['userid.attribute']) && is_string($local_idp_metadata['userid.attribute'])) ? $local_idp_metadata['userid.attribute'] : 'eduPersonPrincipalName';
-
-$userids = $attributes[$userid_attributename];
-
-if (empty($userids)) {
- throw new Exception('Could not generate useridentifier for storing consent. Attribute [' .
- $userid_attributename . '] was not available.');
-}
-
-$userid = $userids[0];
-
-// Get all SP metadata
-$all_sp_metadata = $metadata->getList('saml20-sp-remote');
-
-// Parse action, if any
-$action = null;
-$sp_entityid = null;
-if (!empty($_GET['cv'])) {
- $sp_entityid=$_GET['cv'];
-}
-if (!empty($_GET['action'])) {
- $action=$_GET["action"];
-}
-
-SimpleSAML_Logger::critical('consentAdmin: sp: ' .$sp_entityid.' action: '.$action);
-
-// Remove services, whitch have consent disabled
-if(isset($idp_metadata['consent.disable'])) {
- foreach($idp_metadata['consent.disable'] AS $disable) {
- if(array_key_exists($disable, $all_sp_metadata)) {
- unset($all_sp_metadata[$disable]);
- }
- }
-}
-
-SimpleSAML_Logger::info('consentAdmin: '.$idp_entityid);
-
-// Calc correct source
-$source = $idp_metadata['metadata-set'] . '|' . $idp_entityid;
-
-// Parse consent config
-$consent_storage = sspmod_consent_Store::parseStoreConfig($cA_config->getValue('consentadmin'));
-
-// Calc correct user ID hash
-$hashed_user_id = sspmod_consent_Auth_Process_Consent::getHashedUserID($userid, $source);
-
-// If a checkbox have been clicked
-if ($action != null && $sp_entityid != null) {
- // Get SP metadata
- $sp_metadata = $metadata->getMetaData($sp_entityid, 'saml20-sp-remote');
-
- // Run AuthProc filters
- list($targeted_id, $attribute_hash, $attributes_new) = driveProcessingChain($idp_metadata, $source, $sp_metadata, $sp_entityid, $attributes, $userid, $hashAttributes);
-
- // Add a consent (or update if attributes have changed and old consent for SP and IdP exists)
- if($action == 'true') {
- $isStored = $consent_storage->saveConsent($hashed_user_id, $targeted_id, $attribute_hash);
- if($isStored) {
- $res = "added";
- } else {
- $res = "updated";
- }
- // Remove consent
- } else if($action == 'false') {
- // Got consent, so this is a request to remove it
- $rowcount = $consent_storage->deleteConsent($hashed_user_id, $targeted_id, $attribute_hash);
- if($rowcount > 0) {
- $res = "removed";
- }
- // Unknown action (should not happen)
- } else {
- SimpleSAML_Logger::info('consentAdmin: unknown action');
- $res = "unknown";
- }
- /*
- * Init template to enable translation of status messages
- */
- $et = new SimpleSAML_XHTML_Template($config, 'consentAdmin:consentadminajax.php', 'consentAdmin:consentadmin');
- $et->data['res'] = $res;
- $et->show();
- exit;
-}
-
-// Get all consents for user
-$user_consent_list = $consent_storage->getConsents($hashed_user_id);
-
-// Parse list of consents
-$user_consent = array();
-foreach ($user_consent_list as $c) {
- $user_consent[$c[0]]=$c[1];
-}
-
-$template_sp_content = array();
-
-// Init template
-$et = new SimpleSAML_XHTML_Template($config, 'consentAdmin:consentadmin.php', 'consentAdmin:consentadmin');
-$sp_empty_name = $et->getTag('sp_empty_name');
-$sp_empty_description = $et->getTag('sp_empty_description');
-
-// Process consents for all SP
-foreach ($all_sp_metadata as $sp_entityid => $sp_values) {
- // Get metadata for SP
- $sp_metadata = $metadata->getMetaData($sp_entityid, 'saml20-sp-remote');
-
- // Run attribute filters
- list($targeted_id, $attribute_hash, $attributes_new) = driveProcessingChain($idp_metadata, $source, $sp_metadata, $sp_entityid, $attributes, $userid, $hashAttributes);
-
- // Check if consent exists
- if (array_key_exists($targeted_id, $user_consent)) {
- $sp_status = "changed";
- SimpleSAML_Logger::info('consentAdmin: changed');
- // Check if consent is valid. (Possible that attributes has changed)
- if ($user_consent[$targeted_id] == $attribute_hash) {
- SimpleSAML_Logger::info('consentAdmin: ok');
- $sp_status = "ok";
- }
- // Consent does not exists
- } else {
- SimpleSAML_Logger::info('consentAdmin: none');
- $sp_status = "none";
- }
-
- // Set name of SP
- if(isset($sp_values['name']) && is_array($sp_values['name'])) {
- $sp_name = $sp_metadata['name'];
- } else if(isset($sp_values['name']) && is_string($sp_values['name'])) {
- $sp_name = $sp_metadata['name'];
- } elseif(isset($sp_values['OrganizationDisplayName']) && is_array($sp_values['OrganizationDisplayName'])) {
- $sp_name = $sp_metadata['OrganizationDisplayName'];
- } else {
- $sp_name = $sp_empty_name;
- }
-
- // Set description of SP
- if(empty($sp_metadata['description']) || !is_array($sp_metadata['description'])) {
- $sp_description = $sp_empty_description;
- } else {
- $sp_description = $sp_metadata['description'];
- }
-
- // Add a URL to the service if present in metadata
- $sp_service_url = isset($sp_metadata['ServiceURL']) ? $sp_metadata['ServiceURL'] : null;
-
- // Fill out array for the template
- $sp_list[$sp_entityid] = array(
- 'spentityid' => $sp_entityid,
- 'name' => $sp_name,
- 'description' => $sp_description,
- 'consentStatus' => $sp_status,
- 'consentValue' => $sp_entityid,
- 'attributes_by_sp' => $attributes_new,
- 'serviceurl' => $sp_service_url,
- );
-}
-
-$et->data['header'] = 'Consent Administration';
-$et->data['spList'] = $sp_list;
-$et->data['showDescription'] = $cA_config->getValue('showDescription');
-$et->show();
+<?php
+/*
+ * consentAdmin - Consent administration module
+ *
+ * This module enables the user to add and remove consents given for a given
+ * Service Provider.
+ *
+ * The module relies on methods and functions from the Consent module and can
+ * not be user without it.
+ *
+ * Author: Mads Freek <freek@ruc.dk>, Jacob Christiansen <jach@wayf.dk>
+ */
+
+/*
+ * Runs the processing chain and ignores all filter which have user
+ * interaction.
+ */
+function driveProcessingChain(
+ $idp_metadata,
+ $source,
+ $sp_metadata,
+ $sp_entityid,
+ $attributes,
+ $userid,
+ $hashAttributes = false
+) {
+
+ /*
+ * Create a new processing chain
+ */
+ $pc = new SimpleSAML_Auth_ProcessingChain($idp_metadata, $sp_metadata, 'idp');
+
+ /*
+ * Construct the state.
+ * REMEMBER: Do not set Return URL if you are calling processStatePassive
+ */
+ $authProcState = array(
+ 'Attributes' => $attributes,
+ 'Destination' => $sp_metadata,
+ 'Source' => $idp_metadata,
+ 'isPassive' => true,
+ );
+
+ /*
+ * Call processStatePAssive.
+ * We are not interested in any user interaction, only modifications to the attributes
+ */
+ $pc->processStatePassive($authProcState);
+
+ $attributes = $authProcState['Attributes'];
+
+ /*
+ * Generate identifiers and hashes
+ */
+ $destination = $sp_metadata['metadata-set'].'|'.$sp_entityid;
+
+ $targeted_id = sspmod_consent_Auth_Process_Consent::getTargetedID($userid, $source, $destination);
+ $attribute_hash = sspmod_consent_Auth_Process_Consent::getAttributeHash($attributes, $hashAttributes);
+
+ SimpleSAML_Logger::info('consentAdmin: user: '.$userid);
+ SimpleSAML_Logger::info('consentAdmin: target: '.$targeted_id);
+ SimpleSAML_Logger::info('consentAdmin: attribute: '.$attribute_hash);
+
+ /* Return values */
+ return array($targeted_id, $attribute_hash, $attributes);
+}
+
+// Get config object
+$config = SimpleSAML_Configuration::getInstance();
+$cA_config = SimpleSAML_Configuration::getConfig('module_consentAdmin.php');
+$authority = $cA_config->getValue('authority');
+
+$as = new SimpleSAML_Auth_Simple($authority);
+
+// If request is a logout request
+if (array_key_exists('logout', $_REQUEST)) {
+ $returnURL = $cA_config->getValue('returnURL');
+ $as->logout($returnURL);
+}
+
+$hashAttributes = $cA_config->getValue('attributes.hash');
+
+/* Check if valid local session exists */
+$as->requireAuth();
+
+// Get released attributes
+$attributes = $as->getAttributes();
+
+// Get metadata storage handler
+$metadata = SimpleSAML_Metadata_MetaDataStorageHandler::getMetadataHandler();
+
+/*
+ * Get IdP id and metadata
+ */
+
+
+$local_idp_entityid = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
+$local_idp_metadata = $metadata->getMetaData($local_idp_entityid, 'saml20-idp-hosted');
+
+if ($as->getAuthData('saml:sp:IdP') !== null) {
+ // from a remote idp (as bridge)
+ $idp_entityid = $as->getAuthData('saml:sp:IdP');
+ $idp_metadata = $metadata->getMetaData($idp_entityid, 'saml20-idp-remote');
+} else {
+ // from the local idp
+ $idp_entityid = $local_idp_entityid;
+ $idp_metadata = $local_idp_metadata;
+}
+
+// Get user ID
+$userid_attributename = (isset($local_idp_metadata['userid.attribute']) && is_string($local_idp_metadata['userid.attribute'])) ? $local_idp_metadata['userid.attribute'] : 'eduPersonPrincipalName';
+
+$userids = $attributes[$userid_attributename];
+
+if (empty($userids)) {
+ throw new Exception('Could not generate useridentifier for storing consent. Attribute ['.
+ $userid_attributename.'] was not available.');
+}
+
+$userid = $userids[0];
+
+// Get all SP metadata
+$all_sp_metadata = $metadata->getList('saml20-sp-remote');
+
+// Parse action, if any
+$action = null;
+$sp_entityid = null;
+if (!empty($_GET['cv'])) {
+ $sp_entityid = $_GET['cv'];
+}
+if (!empty($_GET['action'])) {
+ $action = $_GET["action"];
+}
+
+SimpleSAML_Logger::critical('consentAdmin: sp: '.$sp_entityid.' action: '.$action);
+
+// Remove services, whitch have consent disabled
+if (isset($idp_metadata['consent.disable'])) {
+ foreach ($idp_metadata['consent.disable'] AS $disable) {
+ if (array_key_exists($disable, $all_sp_metadata)) {
+ unset($all_sp_metadata[$disable]);
+ }
+ }
+}
+
+SimpleSAML_Logger::info('consentAdmin: '.$idp_entityid);
+
+// Calc correct source
+$source = $idp_metadata['metadata-set'].'|'.$idp_entityid;
+
+// Parse consent config
+$consent_storage = sspmod_consent_Store::parseStoreConfig($cA_config->getValue('consentadmin'));
+
+// Calc correct user ID hash
+$hashed_user_id = sspmod_consent_Auth_Process_Consent::getHashedUserID($userid, $source);
+
+// If a checkbox have been clicked
+if ($action !== null && $sp_entityid !== null) {
+ // Get SP metadata
+ $sp_metadata = $metadata->getMetaData($sp_entityid, 'saml20-sp-remote');
+
+ // Run AuthProc filters
+ list($targeted_id, $attribute_hash, $attributes_new) = driveProcessingChain($idp_metadata, $source, $sp_metadata,
+ $sp_entityid, $attributes, $userid, $hashAttributes);
+
+ // Add a consent (or update if attributes have changed and old consent for SP and IdP exists)
+ if ($action == 'true') {
+ $isStored = $consent_storage->saveConsent($hashed_user_id, $targeted_id, $attribute_hash);
+ if ($isStored) {
+ $res = "added";
+ } else {
+ $res = "updated";
+ }
+ // Remove consent
+ } else {
+ if ($action == 'false') {
+ // Got consent, so this is a request to remove it
+ $rowcount = $consent_storage->deleteConsent($hashed_user_id, $targeted_id, $attribute_hash);
+ if ($rowcount > 0) {
+ $res = "removed";
+ }
+ // Unknown action (should not happen)
+ } else {
+ SimpleSAML_Logger::info('consentAdmin: unknown action');
+ $res = "unknown";
+ }
+ }
+ // init template to enable translation of status messages
+ $et = new SimpleSAML_XHTML_Template($config, 'consentAdmin:consentadminajax.php', 'consentAdmin:consentadmin');
+ $et->data['res'] = $res;
+ $et->show();
+ exit;
+}
+
+// Get all consents for user
+$user_consent_list = $consent_storage->getConsents($hashed_user_id);
+
+// Parse list of consents
+$user_consent = array();
+foreach ($user_consent_list as $c) {
+ $user_consent[$c[0]] = $c[1];
+}
+
+$template_sp_content = array();
+
+// Init template
+$et = new SimpleSAML_XHTML_Template($config, 'consentAdmin:consentadmin.php', 'consentAdmin:consentadmin');
+$sp_empty_name = $et->getTag('sp_empty_name');
+$sp_empty_description = $et->getTag('sp_empty_description');
+
+// Process consents for all SP
+foreach ($all_sp_metadata as $sp_entityid => $sp_values) {
+ // Get metadata for SP
+ $sp_metadata = $metadata->getMetaData($sp_entityid, 'saml20-sp-remote');
+
+ // Run attribute filters
+ list($targeted_id, $attribute_hash, $attributes_new) = driveProcessingChain($idp_metadata, $source, $sp_metadata,
+ $sp_entityid, $attributes, $userid, $hashAttributes);
+
+ // Check if consent exists
+ if (array_key_exists($targeted_id, $user_consent)) {
+ $sp_status = "changed";
+ SimpleSAML_Logger::info('consentAdmin: changed');
+ // Check if consent is valid. (Possible that attributes has changed)
+ if ($user_consent[$targeted_id] == $attribute_hash) {
+ SimpleSAML_Logger::info('consentAdmin: ok');
+ $sp_status = "ok";
+ }
+ // Consent does not exists
+ } else {
+ SimpleSAML_Logger::info('consentAdmin: none');
+ $sp_status = "none";
+ }
+
+ // Set name of SP
+ if (isset($sp_values['name']) && is_array($sp_values['name'])) {
+ $sp_name = $sp_metadata['name'];
+ } else {
+ if (isset($sp_values['name']) && is_string($sp_values['name'])) {
+ $sp_name = $sp_metadata['name'];
+ } elseif (isset($sp_values['OrganizationDisplayName']) && is_array($sp_values['OrganizationDisplayName'])) {
+ $sp_name = $sp_metadata['OrganizationDisplayName'];
+ } else {
+ $sp_name = $sp_empty_name;
+ }
+ }
+
+ // Set description of SP
+ if (empty($sp_metadata['description']) || !is_array($sp_metadata['description'])) {
+ $sp_description = $sp_empty_description;
+ } else {
+ $sp_description = $sp_metadata['description'];
+ }
+
+ // Add a URL to the service if present in metadata
+ $sp_service_url = isset($sp_metadata['ServiceURL']) ? $sp_metadata['ServiceURL'] : null;
+
+ // Fill out array for the template
+ $sp_list[$sp_entityid] = array(
+ 'spentityid' => $sp_entityid,
+ 'name' => $sp_name,
+ 'description' => $sp_description,
+ 'consentStatus' => $sp_status,
+ 'consentValue' => $sp_entityid,
+ 'attributes_by_sp' => $attributes_new,
+ 'serviceurl' => $sp_service_url,
+ );
+}
+
+$et->data['header'] = 'Consent Administration';
+$et->data['spList'] = $sp_list;
+$et->data['showDescription'] = $cA_config->getValue('showDescription');
+$et->show();