diff --git a/eccs2.py b/eccs2.py
index a0d7d9fb3bac1f9e09f04b95a8de0cd8d0cc8fd7..9cf16cca247898d21c9dbe0058d83dfafb2d2b09 100755
--- a/eccs2.py
+++ b/eccs2.py
@@ -77,7 +77,7 @@ def checkIdP(sp,idp,test):
return (idp['entityID'],wayfless_url,check_time,"NULL","DISABLED")
- # Open SP, select the IDP from the EDS and press 'Enter' to reach the IdP login page to check
+ # Open SP via wayfless_url and reach the IdP login page to check
try:
check_time = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S') + 'Z'
driver.get(wayfless_url)
@@ -165,44 +165,44 @@ def checkIdP(sp,idp,test):
try:
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
- status_code = str(requests.get(samlrequest_url, headers=headers, verify=False, timeout=ECCS2REQUESTSTIMEOUT).status_code)
+ http_code = str(requests.get(samlrequest_url, headers=headers, verify=False, timeout=ECCS2REQUESTSTIMEOUT).status_code)
except requests.exceptions.ConnectionError as e:
- print ("status-code: (failed) - ConnectionError for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
+ print ("http-code: (failed) - ConnectionError for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
#print("!!! REQUESTS STATUS CODE CONNECTION ERROR EXCEPTION !!!")
#print (e.__str__())
- status_code = "(failed)"
+ http_code = "(failed)"
except requests.exceptions.Timeout as e:
- print ("status-code: 111 - TimeoutError for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
+ print ("http-code: 111 - TimeoutError for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
#print("!!! REQUESTS STATUS CODE TIMEOUT EXCEPTION !!!")
#print (e.__str__())
- status_code = "111"
+ http_code = "111"
except requests.exceptions.TooManyRedirects as e:
- print ("status-code: 222 - TooManyRedirectsError for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
+ print ("http-code: 222 - TooManyRedirectsError for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
#print("!!! REQUESTS TOO MANY REDIRECTS EXCEPTION !!!")
#print (e.__str__())
- status_code = "222"
+ http_code = "222"
except requests.exceptions.RequestException as e:
- print ("status-code: 333 - RequestException for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
+ print ("http-code: 333 - RequestException for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
#print ("!!! REQUESTS EXCEPTION !!!")
print (e.__str__())
- status_code = "333"
+ http_code = "333"
except Exception as e:
- print ("status-code: 555 - OtherException for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
+ print ("http-code: 555 - OtherException for IdP '%s' with SP '%s'" % (idp['entityID'],sp))
#print ("!!! EXCEPTION REQUESTS !!!")
print (e.__str__())
- status_code = "555"
+ http_code = "555"
if(metadata_not_found):
- return (idp['entityID'],wayfless_url,check_time,status_code,"No-eduGAIN-Metadata")
+ return (idp['entityID'],wayfless_url,check_time,http_code,"No-eduGAIN-Metadata")
elif not username_found or not password_found:
- return (idp['entityID'],wayfless_url,check_time,status_code,"Invalid-Form")
+ return (idp['entityID'],wayfless_url,check_time,http_code,"Invalid-Form")
else:
- return (idp['entityID'],wayfless_url,check_time,status_code,"OK")
+ return (idp['entityID'],wayfless_url,check_time,http_code,"OK")
# Extract IdP DisplayName by fixing input string
@@ -228,9 +228,9 @@ def storeECCS2result(idp,check_results,idp_status,test):
str_support_contacts = ','.join(list_support_contacts)
if (test is not True):
- # IdP-DisplayName;IdP-entityID;IdP-RegAuth;IdP-tech-ctc-1,IdP-tech-ctc-2;IdP-supp-ctc-1,IdP-supp-ctc-2;IdP-ECCS-Status;SP-wayfless-url-1;SP-check-time-1;SP-status-code-1;SP-result-1;SP-wayfless-url-2;SP-check-time-2;SP-status-code-2;SP-result-2
+ # IdP-DisplayName;IdP-entityID;IdP-RegAuth;IdP-tech-ctc-1,IdP-tech-ctc-2;IdP-supp-ctc-1,IdP-supp-ctc-2;IdP-ECCS-Status;SP-wayfless-url-1;SP-check-time-1;SP-http-code-1;SP-result-1;SP-wayfless-url-2;SP-check-time-2;SP-http-code-2;SP-result-2
with open("%s/%s" % (ECCS2OUTPUTDIR,ECCS2RESULTSLOG), 'a') as f:
- f.write('{"displayName":"%s","entityID":"%s","registrationAuthority":"%s","contacts":{"technical":"%s","support":"%s"},"status":"%s","sp1":{"wayflessUrl":"%s","checkTime":"%s","statusCode":"%s","status":"%s"},"sp2":{"wayflessUrl":"%s","checkTime":"%s","statusCode":"%s","status":"%s"}}\n' % (
+ f.write('{"displayName":"%s","entityID":"%s","registrationAuthority":"%s","contacts":{"technical":"%s","support":"%s"},"status":"%s","sp1":{"wayflessUrl":"%s","checkTime":"%s","httpCode":"%s","result":"%s"},"sp2":{"wayflessUrl":"%s","checkTime":"%s","httpCode":"%s","result":"%s"}}\n' % (
getDisplayName(idp['displayname']), # IdP-DisplayName
idp['entityID'], # IdP-entityID
idp['registrationAuthority'], # IdP-RegAuth
@@ -239,15 +239,15 @@ def storeECCS2result(idp,check_results,idp_status,test):
idp_status, # IdP-ECCS-Status
check_results[0][1], # SP-wayfless-url-1
check_results[0][2], # SP-check-time-1
- check_results[0][3], # SP-status-code-1
+ check_results[0][3], # SP-http-code-1
check_results[0][4], # SP-result-1
check_results[1][1], # SP-wayfless-url-2
check_results[1][2], # SP-check-time-2
- check_results[1][3], # SP-status-code-2
+ check_results[1][3], # SP-http-code-2
check_results[1][4])) # SP-result-2
else:
print("\nECCS2:")
- print('{"displayName":"%s","entityID":"%s","registrationAuthority":"%s","contacts":{"technical":"%s","support":"%s"},"status":"%s","sp1":{"wayflessUrl":"%s","checkTime":"%s","statusCode":"%s","status":"%s"},"sp2":{"wayflessUrl":"%s","checkTime":"%s","statusCode":"%s","status":"%s"}}\n' % (
+ print('{"displayName":"%s","entityID":"%s","registrationAuthority":"%s","contacts":{"technical":"%s","support":"%s"},"status":"%s","sp1":{"wayflessUrl":"%s","checkTime":"%s","httpCode":"%s","result":"%s"},"sp2":{"wayflessUrl":"%s","checkTime":"%s","httpCode":"%s","result":"%s"}}\n' % (
getDisplayName(idp['displayname']), # IdP-DisplayName
idp['entityID'], # IdP-entityID
idp['registrationAuthority'], # IdP-RegAuth
@@ -256,11 +256,11 @@ def storeECCS2result(idp,check_results,idp_status,test):
idp_status, # IdP-ECCS-Status
check_results[0][1], # SP-wayfless-url-1
check_results[0][2], # SP-check-time-1
- check_results[0][3], # SP-status-code-1
+ check_results[0][3], # SP-http-code-1
check_results[0][4], # SP-result-1
check_results[1][1], # SP-wayfless-url-2
check_results[1][2], # SP-check-time-2
- check_results[1][3], # SP-status-code-2
+ check_results[1][3], # SP-http-code-2
check_results[1][4])) # SP-result-2
diff --git a/web/eccs2.css b/web/eccs2.css
index 3e58c3e9a5e32c2c85e439d12db57ab1b4e8eb99..c5ecf078378e7fb9a31f45350fdf4ba5dd037f42 100644
--- a/web/eccs2.css
+++ b/web/eccs2.css
@@ -122,3 +122,93 @@ input[type=checkbox] {
bottom: 1px;
}
}
+
+.tooltip {
+ position: relative;
+ display: inline-block;
+ border-bottom: 1px dotted #ccc;
+ color: #004360;
+}
+
+.tooltip .tooltiptext {
+ visibility: hidden;
+ position: absolute;
+ width: 300px;
+ background-color: #555;
+ color: #fff;
+ text-align: center;
+ padding: 5px 0;
+ border-radius: 6px;
+ z-index: 1;
+ opacity: 0;
+ transition: opacity 0.3s;
+}
+
+.tooltip:hover .tooltiptext {
+ visibility: visible;
+ opacity: 1;
+}
+
+.tooltip-right {
+ top: -5px;
+ left: 125%;
+}
+
+.tooltip-right::after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ right: 100%;
+ margin-top: -5px;
+ border-width: 5px;
+ border-style: solid;
+ border-color: transparent #555 transparent transparent;
+}
+
+.tooltip-bottom {
+ top: 135%;
+ left: 50%;
+ margin-left: -60px;
+}
+
+.tooltip-bottom::after {
+ content: "";
+ position: absolute;
+ bottom: 100%;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px;
+ border-style: solid;
+ border-color: transparent transparent #555 transparent;
+}
+
+.tooltip-top {
+ bottom: 125%;
+ left: 50%;
+ margin-left: -60px;
+}
+
+.tooltip-top::after {
+ content: "";
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ margin-left: -5px;
+}
+
+.tooltip-left {
+ top: auto;
+ bottom: -15px;
+ right: 128%;
+}
+
+.tooltip-left::after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 100%;
+ margin-top: -5px;
+ border-width: 5px;
+ border-style: solid;
+ border-color: transparent transparent transparent #555;
+}
diff --git a/web/eccs2.js b/web/eccs2.js
index 0411086e6087e78228538acafecdf0582efa6308..a58ae59e08def4bd95c8d71ea15853e5f6067371 100644
--- a/web/eccs2.js
+++ b/web/eccs2.js
@@ -47,6 +47,30 @@ function getHostname(url) {
}
}
+function getCheckResult(checkResult){
+ if (checkResult == "OK"){
+ return '<div class="tooltip">OK <span class="tooltiptext tooltip-top">The IdP is consuming correctly the eduGAIN metadata and return a valid login page</span></div>';
+ }
+ else if (checkResult == "Timeout"){
+ return '<div class="tooltip">Timeout <span class="tooltiptext tooltip-top">The IdP does not load a valid login page within 60 seconds</span></div>'
+ }
+ else if (checkResult == "Invalid-Form"){
+ return '<div class="tooltip">Invalid-Form <span class="tooltiptext tooltip-top">The IdP does not load a valid login page</span></div>'
+ }
+ else if (checkResult == "No-eduGAIN-Metadata"){
+ return '<div class="tooltip">No-eduGAIN-Metadata <span class="tooltiptext tooltip-top">The IdP is not consuming correctly edugGAIN metadata stream</span></div>'
+ }
+ else if (checkResult == "SSL-Error"){
+ return '<div class="tooltip">SSL-Error <span class="tooltiptext tooltip-top">The IdP has a problem on its SSL certificate</span></div>'
+ }
+ else if (checkResult == "DISABLED"){
+ return '<div class="tooltip">Disabled <span class="tooltiptext tooltip-top">The check has been disabled for the IdP</span></div>'
+ }
+ else{
+ return checkResult;
+ }
+}
+
/* Formatting function for row details - modify as you need */
function format ( d ) {
// `d` is the original data object for the row
@@ -64,7 +88,7 @@ function format ( d ) {
'<td>'+d.contacts.support+'</td>'+
'<td class="strong">Check Time</td>'+
'<td class="strong">Result Check</td>'+
- '<td class="strong">Status Code</td>'+
+ '<td class="strong">HTTP Code</td>'+
'<td class="strong">Page Source</td>'+
'<td class="strong">Retry Check</td>'+
'</tr>'+
@@ -72,8 +96,8 @@ function format ( d ) {
'<td class="strong">SP1:</td>'+
'<td>https://'+getHostname(d.sp1.wayflessUrl)+'</td>'+
'<td>'+d.sp1.checkTime+'</td>'+
- '<td>'+d.sp1.status+'</td>'+
- '<td>'+d.sp1.statusCode+'</td>'+
+ '<td>'+getCheckResult(d.sp1.result)+'</td>'+
+ '<td>'+d.sp1.httpCode+'</td>'+
'<td><a href="/eccs2html/'+d.date+'/'+getHostname(d.entityID)+'---'+getHostname(d.sp1.wayflessUrl)+'.html" target="_blank">Click to open</a></td>'+
'<td><a href="'+d.sp1.wayflessUrl+'" target="_blank">Click to retry</a></td>'+
'</tr>'+
@@ -81,8 +105,8 @@ function format ( d ) {
'<td class="strong">SP2:</td>'+
'<td>https://'+getHostname(d.sp2.wayflessUrl)+'</td>'+
'<td>'+d.sp2.checkTime+'</td>'+
- '<td>'+d.sp2.status+'</td>'+
- '<td>'+d.sp2.statusCode+'</td>'+
+ '<td>'+getCheckResult(d.sp2.result)+'</td>'+
+ '<td>'+d.sp2.httpCode+'</td>'+
'<td><a href="/eccs2html/'+d.date+'/'+getHostname(d.entityID)+'---'+getHostname(d.sp2.wayflessUrl)+'.html" target="_blank">Click to open</a></td>'+
'<td><a href="'+d.sp2.wayflessUrl+'" target="_blank">Click to retry</a></td>'+
'</tr>'+