From 2df662d761092d2f5929335d7301565595e5679e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20=C3=85kre=20Solberg?= <andreas.solberg@uninett.no>
Date: Wed, 6 Apr 2011 06:59:12 +0000
Subject: [PATCH] Improvements to IdP Discovery Service PRotocol [discojuice]

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2801 44740490-163a-0410-bde0-09ae8108e29a
---
 modules/discojuice/templates/central.tpl.php  | 12 +++++++--
 .../www/discojuice/discojuice.control.js      |  3 ++-
 .../discojuiceDiscoveryResponse.html          | 18 ++++++++++---
 .../discojuice/www/discojuice/idpdiscovery.js | 27 ++++++++++++++-----
 4 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/modules/discojuice/templates/central.tpl.php b/modules/discojuice/templates/central.tpl.php
index 31329b951..33ad4e927 100644
--- a/modules/discojuice/templates/central.tpl.php
+++ b/modules/discojuice/templates/central.tpl.php
@@ -1,7 +1,11 @@
 <?php
 
+
+$version = '0.1';
 header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
 
+
+
 ?><!DOCTYPE html>
 <html lang="en">
 <head>
@@ -25,7 +29,7 @@ echo '<script type="text/javascript" language="javascript" src="' . SimpleSAML_M
 
 ';
 
-$version = '0.1';
+
 echo '<!-- DiscoJuice -->
 <script type="text/javascript" language="javascript" src="' . SimpleSAML_Module::getModuleURL('discojuice/discojuice/discojuice.misc.js?v=' . $version ) . '"></script>
 <script type="text/javascript" language="javascript" src="' . SimpleSAML_Module::getModuleURL('discojuice/discojuice/discojuice.ui.js?v=' . $version) . '"></script>
@@ -59,6 +63,11 @@ echo '<!-- DiscoJuice -->
 global $options;
 $options = $this->data['discojuice.options'];
 
+// echo '<pre>opts'; 
+// print_r($options);
+// exit;
+
+
 echo 'var options = ' . json_encode($options) . ';' . "\n\n";
 
 echo 'options.countryAPI = "' . SimpleSAML_Module::getModuleURL('discojuice/country.php'). '"; ' . "\n";
@@ -87,7 +96,6 @@ SimpleSAML_Logger::info('Icon URL is: ' . $options['discoPath'] );
 
 ?>
 		
-		IdPDiscovery.receive();
 		IdPDiscovery.setup(options, acl);
 	</script>
 	
diff --git a/modules/discojuice/www/discojuice/discojuice.control.js b/modules/discojuice/www/discojuice/discojuice.control.js
index d90975df4..c7893a5e0 100644
--- a/modules/discojuice/www/discojuice/discojuice.control.js
+++ b/modules/discojuice/www/discojuice/discojuice.control.js
@@ -91,7 +91,8 @@ DiscoJuice.Control = {
 		}
 	},
 	
-	"discoResponse": function(entityID) {
+	"discoResponse": function(entityID, sender) {
+		this.parent.Utils.log('DiscoResponse Received from [' + sender  + ']');
 		this.setWeight(entityID, -100);
 		this.prepareData();
 	},
diff --git a/modules/discojuice/www/discojuice/discojuiceDiscoveryResponse.html b/modules/discojuice/www/discojuice/discojuiceDiscoveryResponse.html
index e525ad2c4..655549765 100644
--- a/modules/discojuice/www/discojuice/discojuiceDiscoveryResponse.html
+++ b/modules/discojuice/www/discojuice/discojuiceDiscoveryResponse.html
@@ -2,10 +2,18 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
+	<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
 	<title>IdP Discovery Response Receiver</title>
 
 	<script type="text/javascript">
 
+function parseURL(url) {
+	var a =  document.createElement('a');
+    a.href = url;
+    return a.hostname;
+}
+
 function receive() {
 	
 	var urlParams = {};
@@ -20,10 +28,14 @@ function receive() {
 		   urlParams[d(e[1])] = d(e[2]);
 	})();
 	
+	var sender = parseURL(document.referrer);
+	
 	if (urlParams.entityID) {
-		window.parent.DiscoJuice.Utils.log('Response from discovery service: ' + urlParams.entityID);
-		window.parent.DiscoJuice.Control.discoResponse(urlParams.entityID);
-	} 
+		window.parent.DiscoJuice.Utils.log('ResponseLocation: Response from discovery service [' + sender + ']: ' + urlParams.entityID);
+		window.parent.DiscoJuice.Control.discoResponse(urlParams.entityID, sender);
+	} else {
+		window.parent.DiscoJuice.Utils.log('ResponseLocation: Response from discovery service [' + sender + ']: No valid response parameters');
+	}
 
 }
 	</script>
diff --git a/modules/discojuice/www/discojuice/idpdiscovery.js b/modules/discojuice/www/discojuice/idpdiscovery.js
index d0c238d39..fee97ffa3 100644
--- a/modules/discojuice/www/discojuice/idpdiscovery.js
+++ b/modules/discojuice/www/discojuice/idpdiscovery.js
@@ -69,15 +69,18 @@ var IdPDiscovery = function() {
 				
 				var returnToHost = this.getHostname(returnTo);
 				
-				for (var i = 0; i < this.returnURLs.length; i++) {
-					if (this.returnURLs[i] == returnToHost) allowed = true;
+// 				console.log('returnURLs2');
+// 				console.log(returnURLs);
+				
+				for (var i = 0; i < returnURLs.length; i++) {
+					if (returnURLs[i] == returnToHost) allowed = true;
 
 				}
 				
 				if (!allowed) {
 					DiscoJuice.Utils.log('Access denied for return parameter [' + returnToHost + ']');
 					DiscoJuice.Utils.log('Allowed hosts');
-					DiscoJuice.Utils.log(this.returnURLs);
+					DiscoJuice.Utils.log(returnURLs);
 					return;
 				}
 			}
@@ -87,8 +90,11 @@ var IdPDiscovery = function() {
 			}
 			
 			if (!e.entityID) {
+				DiscoJuice.Utils.log('ReturnTo without Entityid');
+				DiscoJuice.Utils.log(e);
 				window.location = returnTo;
 			} else {
+				DiscoJuice.Utils.log('ReturnTo with Entityid');
 				window.location = returnTo + '&' + returnIDParam + '=' + escape(e.entityID);
 			}
 			
@@ -115,17 +121,24 @@ var IdPDiscovery = function() {
 			var isPassive = query.isPassive || 'false';
 			
 			if (isPassive === 'true') {
-				this.returnTo(preferredIdP);
+				this.returnTo({'entityID': preferredIdP});
 			}
 		},
 		
+		"setup": function(options, rurls) {
+
+// 			console.log('Setting up DiscoJuice');
+// 			console.log(rurls);
+			returnURLs = rurls;
+
+			this.receive();
+			this.startUI();
+		},
 
 		
-		"setup": function(options, rurls) {
+		"startUI": function() {
 
 			var that = this;
-				
-			this.returnURLs = rurls;
 			
 			$(document).ready(function() {
 				var overthere = that;
-- 
GitLab