diff --git a/client/bundle.js b/client/bundle.js index aa94d4615d5ee5817185bc0b6afbd041d74d173a..66a36f861ab61905c73958b402429069441ac8f2 100644 --- a/client/bundle.js +++ b/client/bundle.js @@ -59,53 +59,82 @@ let titleElement= document.querySelector('title'); - /*** Temporary user management implementation **/ - - let loginButton = document.querySelector('#login-button'); - let params = `width=400,height=600,left=600,top=100`; - + let response = `{ + "status": "Authenticated", + "token": { + "data": "eyJleHAiOjE1MDU1NTU0NzIsImFsZyI6IkhTMjU2IiwiaWF0IjoxNTA1NDY5MDcyfQ.eyJpZCI6ImlrZXJoIn0.gj6rlQlkUkrzPdec39gCMOWJqGZnLJSDgJKOMaTHqkM", + "expires_in": 86400 + }, + "user": { + "email": "iker@ikerhurtado.com", + "username": "ikerh" + } + }`; + /*** User login through a redirection **/ + + let userNameElement = document.querySelector('#user-name'); + let logoutButton = document.querySelector('#logout-button'); + + // When the app loads, it checks if the user is authenticated var oReq = new XMLHttpRequest(); oReq.addEventListener("load", e => { //console.log("Loading user data" ,oReq.responseText); - let userNameElement = document.querySelector('#user-name'); + let jsonData; try { - jsonData = JSON.parse(oReq.responseText); // JSON.parse(response); // JSON.parse(oReq.responseText); // + jsonData = JSON.parse(oReq.responseText); // JSON.parse(response); // } catch(e) { console.log('../saml/user/ json response bad format', e); } + if (jsonData.status === 'Authenticated'){ userNameElement.innerHTML = jsonData.user.username; - loginButton.style.display = 'none'; - util.setAuthRequestHeader(jsonData.token.data); - }else{ - loginButton.style.display = 'inline'; - userNameElement.innerHTML = 'Guest'; - // AuthRequestHeader set to guest tiken by default - loginButton.addEventListener( "click", e => { - let loginWindow; - // I think it's a blocking call - loginWindow = window.open('http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/', 'Login', params); - //loginWindow = window.open('https://idp.nomad-coe.eu/idp/profile/SAML2/Redirect/SSO?execution=e21s1', 'Login', params); - /* - console.log("loginWindow", loginWindow); - loginWindow.addEventListener("focus", function(event) { - console.log("focus", loginWindow, loginWindow.document); - }); - - loginWindow.addEventListener("unload", function(event) { - console.log("unload", loginWindow, loginWindow.document.firstChild); - //loginWindow.close(); - }); - */ - //location.reload(true); - }); + document.querySelector('#guest-user').style.display = 'none'; + document.querySelector('#auth-user').style.display = 'inline'; + util.setAuthRequestHeader(jsonData.user.username, jsonData.token.data); } - }); oReq.open("GET", "http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/user/"); oReq.send(); - /*******************************/ + + // Logout + logoutButton.addEventListener( "click", e => { + console.log('logoutButton out '); + var oReq1 = new XMLHttpRequest(); + oReq1.addEventListener("load", e => { + console.log('Logging out ',userNameElement.innerHTML); + //location.reload(true); + userNameElement.innerHTML = ''; + document.querySelector('#guest-user').style.display = 'inline'; + document.querySelector('#auth-user').style.display = 'none'; + util.setAuthRequestHeader(); + }); + oReq1.open("GET", "http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/logout/"); + oReq1.send(); + }); + + /*** Popup code + + let loginButton = document.querySelector('#login-button'); + let params = `width=400,height=600,left=600,top=100`; + loginButton.addEventListener( "click", e => { + let loginWindow; + // I think it's a blocking call + loginWindow = window.open('http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/', 'Login', params); + console.log("loginWindow", loginWindow); + loginWindow.addEventListener("focus", function(event) { + console.log("focus", loginWindow, loginWindow.document); + }); + + loginWindow.addEventListener("unload", function(event) { + console.log("unload", loginWindow, loginWindow.document.firstChild); + //loginWindow.close(); + }); + //location.reload(true); + }); + */ + + /*************************/ @@ -316,18 +345,28 @@ 'Ns', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og' // Mt = 109 ]; + let authRequestHeaderValue = AUTH_REQUEST_HEADER_GUEST_USER; + console.log('user: ANONYMOUS authRequestHeader: ',authRequestHeaderValue); - function setAuthRequestHeader(value){ - authRequestHeaderValue = 'Basic '+ btoa(value+':'); - console.log('setAuthRequestHeader', value); + function setAuthRequestHeader(user, value){ + if (value === undefined){// default value + authRequestHeaderValue = AUTH_REQUEST_HEADER_GUEST_USER; + console.log('user: ANONYMOUS authRequestHeader: ',authRequestHeaderValue); + } else{ + authRequestHeaderValue = 'Basic '+ btoa(value+':'); + console.log('user',user,'authRequestHeader: ',authRequestHeaderValue); + } } + + + function serverReq(url, callback){ var oReq = new XMLHttpRequest(); oReq.addEventListener("load", callback); oReq.open("GET", url); - console.log('authRequestHeaderValue: ',authRequestHeaderValue); + //console.log('authRequestHeaderValue: ',authRequestHeaderValue); oReq.setRequestHeader('Authorization', authRequestHeaderValue); oReq.send(); return oReq; @@ -339,7 +378,7 @@ oReq.addEventListener('load', callback); oReq.open('POST', url); oReq.setRequestHeader('Content-Type', 'application/json'); - console.log('authRequestHeaderValue: ',authRequestHeaderValue); + //console.log('authRequestHeaderValue: ',authRequestHeaderValue); oReq.setRequestHeader('Authorization', authRequestHeaderValue); oReq.send(data); return oReq; diff --git a/client/index.html b/client/index.html index 71c6edb0ebff352c5358c48450a7c571cc03c8fc..078c8edfeb6ff7c83ad5978937b499843862df96 100644 --- a/client/index.html +++ b/client/index.html @@ -53,12 +53,19 @@ <div style="float: right; width: 16%;text-align: right; padding-top:5px; "> <span style="vertical-align: middle;"> - <span id="user-name"></span> + + <span id="guest-user">Guest + <a style="text-decoration: underline" + href="http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/?sso2" >(LOGIN)</a> + </span> <!--<a id="login-button" target="_blank" style="text-decoration: underline" href="http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml" >(LOGIN)</a> --> - <a id="login-button" - style="text-decoration: underline; cursor: pointer" >(LOGIN)</a> + <span id="auth-user" style="display: none"> + <span id="user-name"></span> + <a id="logout-button" style="text-decoration: underline; cursor: pointer" > + (logout)</a> + </span> </span> <img src="img/user.png" /> diff --git a/client/src/common/util.js b/client/src/common/util.js index 778430b92c1015a818d76a69830b366af0f5ef2d..b56d2ee5d8cdd4aca468fcb36a3e707b12190278 100644 --- a/client/src/common/util.js +++ b/client/src/common/util.js @@ -49,18 +49,28 @@ let ELEMENTS = [ 'Ns', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og' // Mt = 109 ]; -let authRequestHeaderValue = AUTH_REQUEST_HEADER_GUEST_USER; -function setAuthRequestHeader(value){ - authRequestHeaderValue = 'Basic '+ btoa(value+':'); - console.log('setAuthRequestHeader', value); +let authRequestHeaderValue = AUTH_REQUEST_HEADER_GUEST_USER; +console.log('user: ANONYMOUS authRequestHeader: ',authRequestHeaderValue); + +function setAuthRequestHeader(user, value){ + if (value === undefined){// default value + authRequestHeaderValue = AUTH_REQUEST_HEADER_GUEST_USER; + console.log('user: ANONYMOUS authRequestHeader: ',authRequestHeaderValue); + } else{ + authRequestHeaderValue = 'Basic '+ btoa(value+':'); + console.log('user',user,'authRequestHeader: ',authRequestHeaderValue); + } } + + + function serverReq(url, callback){ var oReq = new XMLHttpRequest(); oReq.addEventListener("load", callback); oReq.open("GET", url); - console.log('authRequestHeaderValue: ',authRequestHeaderValue); + //console.log('authRequestHeaderValue: ',authRequestHeaderValue); oReq.setRequestHeader('Authorization', authRequestHeaderValue); oReq.send(); return oReq; @@ -72,7 +82,7 @@ function serverReqPOST(url, data, callback){ oReq.addEventListener('load', callback); oReq.open('POST', url); oReq.setRequestHeader('Content-Type', 'application/json'); - console.log('authRequestHeaderValue: ',authRequestHeaderValue); + //console.log('authRequestHeaderValue: ',authRequestHeaderValue); oReq.setRequestHeader('Authorization', authRequestHeaderValue); oReq.send(data); return oReq; diff --git a/client/src/main.js b/client/src/main.js index b973c0c66fe7c8126d7e909f18844813ac58ba40..dc93fdddcb73af91408f8b0323c59e23c6858c2a 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -13,53 +13,82 @@ let contentElement= document.getElementById("content"); let titleElement= document.querySelector('title'); -/*** Temporary user management implementation **/ +let response = `{ + "status": "Authenticated", + "token": { + "data": "eyJleHAiOjE1MDU1NTU0NzIsImFsZyI6IkhTMjU2IiwiaWF0IjoxNTA1NDY5MDcyfQ.eyJpZCI6ImlrZXJoIn0.gj6rlQlkUkrzPdec39gCMOWJqGZnLJSDgJKOMaTHqkM", + "expires_in": 86400 + }, + "user": { + "email": "iker@ikerhurtado.com", + "username": "ikerh" + } +}`; +/*** User login through a redirection **/ -let loginButton = document.querySelector('#login-button'); -let params = `width=400,height=600,left=600,top=100`; +let userNameElement = document.querySelector('#user-name'); +let logoutButton = document.querySelector('#logout-button'); +// When the app loads, it checks if the user is authenticated var oReq = new XMLHttpRequest(); oReq.addEventListener("load", e => { //console.log("Loading user data" ,oReq.responseText); - let userNameElement = document.querySelector('#user-name'); + let jsonData; try { - jsonData = JSON.parse(oReq.responseText); // JSON.parse(response); // JSON.parse(oReq.responseText); // + jsonData = JSON.parse(oReq.responseText); // JSON.parse(response); // } catch(e) { console.log('../saml/user/ json response bad format', e); } + if (jsonData.status === 'Authenticated'){ userNameElement.innerHTML = jsonData.user.username; - loginButton.style.display = 'none'; - util.setAuthRequestHeader(jsonData.token.data); - }else{ - loginButton.style.display = 'inline'; - userNameElement.innerHTML = 'Guest'; - // AuthRequestHeader set to guest tiken by default - loginButton.addEventListener( "click", e => { - let loginWindow; - // I think it's a blocking call - loginWindow = window.open('http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/', 'Login', params); - //loginWindow = window.open('https://idp.nomad-coe.eu/idp/profile/SAML2/Redirect/SSO?execution=e21s1', 'Login', params); -/* - console.log("loginWindow", loginWindow); - loginWindow.addEventListener("focus", function(event) { - console.log("focus", loginWindow, loginWindow.document); - }); - - loginWindow.addEventListener("unload", function(event) { - console.log("unload", loginWindow, loginWindow.document.firstChild); - //loginWindow.close(); - }); -*/ - //location.reload(true); - }); + document.querySelector('#guest-user').style.display = 'none'; + document.querySelector('#auth-user').style.display = 'inline'; + util.setAuthRequestHeader(jsonData.user.username, jsonData.token.data); } - }); oReq.open("GET", "http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/user/"); oReq.send(); -/*******************************/ + +// Logout +logoutButton.addEventListener( "click", e => { +console.log('logoutButton out '); + var oReq1 = new XMLHttpRequest(); + oReq1.addEventListener("load", e => { + console.log('Logging out ',userNameElement.innerHTML); + //location.reload(true); + userNameElement.innerHTML = ''; + document.querySelector('#guest-user').style.display = 'inline'; + document.querySelector('#auth-user').style.display = 'none'; + util.setAuthRequestHeader(); + }); + oReq1.open("GET", "http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/logout/"); + oReq1.send(); +}); + +/*** Popup code + +let loginButton = document.querySelector('#login-button'); +let params = `width=400,height=600,left=600,top=100`; +loginButton.addEventListener( "click", e => { + let loginWindow; + // I think it's a blocking call + loginWindow = window.open('http://enc-testing-nomad.esc.rzg.mpg.de/v1.0/saml/', 'Login', params); + console.log("loginWindow", loginWindow); + loginWindow.addEventListener("focus", function(event) { + console.log("focus", loginWindow, loginWindow.document); + }); + + loginWindow.addEventListener("unload", function(event) { + console.log("unload", loginWindow, loginWindow.document.firstChild); + //loginWindow.close(); + }); + //location.reload(true); +}); +*/ + +/*************************/