import {StringUtils} from '../../utils/string-utils.class'; export class User { email:string; firstname: string; lastname: string; id: string; fullname: string; expirationDate: number; role:string[]; jwt:string; } export class Session{ // public static setUser(user:User): User { // // localStorage.setItem("user", JSON.stringify(user)); // // return user; // } public static removeUser() { if(Session.isLoggedIn()){ // localStorage.removeItem("user"); COOKIE.deleteCookie(COOKIE.cookieName_id) COOKIE.deleteCookie(COOKIE.cookieName_u); COOKIE.deleteCookie("SESSION"); } } public static getUser():User { // if(Session.isLoggedIn()){ // return JSON.parse(localStorage.getItem("user")); // }else{ // return null; // } return this.getUserFromCookie(); } // public static isLoggedIn(): boolean { // var loggedIn:boolean = false; // var user:User = null; // var cookie= COOKIE.getCookie(COOKIE.cookieName_u); // if( typeof localStorage !== 'undefined') { // if(localStorage.getItem("user") || (cookie != null && cookie != "")) { // user = JSON.parse(localStorage.getItem("user")); // if(user && (user.fullname != null || user.lastname !=null || user.firstname !=null)){ // loggedIn = true; // }else if(cookie != null && this.getUserFromCookie()!= null){ // loggedIn = true // }else{ // loggedIn = false; // } // }else{ // if(cookie != null && this.getUserFromCookie()!= null){ // loggedIn = true // }else{ // loggedIn = false; // } // // } // }else{ // loggedIn = false; // } // return loggedIn; // } public static isLoggedIn(): boolean { var loggedIn:boolean = false; var user:User = null; var cookie= COOKIE.getCookie(COOKIE.cookieName_u); if(cookie == null ||cookie == ""){ return false; }else{ var user:User = this.getUserFromCookie(); if(user ==null){ return false; } return true; } } public static getUserFromCookie():User{ var cookie= COOKIE.getCookie(COOKIE.cookieName_u); if(cookie != null){ var user:User = MyJWT.parseUserInfo(cookie); // if( typeof localStorage !== 'undefined') { // localStorage.setItem("user", JSON.stringify(user)); if(user && user.email){ // COOKIE.deleteCookie(COOKIE.cookieName_u); // delete cookie to avoid transfer through requests return user; }else{ return null; } // }else{ // return null; // } }else{ return null; } } public static getUserJwt():string { var user:User = this.getUserFromCookie(); if(user!=null){ return user.jwt; } return null; // if(Session.isLoggedIn()){ // return Session.getUser().jwt; // }else{ // return null; // } } public static getUserEmail():string { var user:User = this.getUserFromCookie(); if(user!=null){ return user.email; } return null; // if(Session.isLoggedIn()){ // return Session.getUser().email; // }else{ // return null; // } } public static setReloadUrl(host:string,path:string, params:string) { var URL = {}; URL["host"]=host; URL["path"]=path; URL["params"]=params; COOKIE.setCookie("reloadURL", JSON.stringify(URL), -1); } public static getReloadUrl(plainText:boolean =false) { var URL = COOKIE.getCookie("reloadURL"); URL = JSON.parse(URL); return URL; } public static getParamsObj(params:string) { var object = null; if(params.split("&").length > 0){ object = {}; } for(var i=0; i -1) { isAuthorized = true; break; } } return (isAuthorized); } public static isCommunityCurator():boolean { var isAuthorized = false; if(Session.isLoggedIn()){ var roles = ["urn:geant:openaire.eu:group:Curator+-+Community#aai.openaire.eu"] for (var i = 0; i < roles.length; i++) { if ((Session.getUser().role).indexOf(roles[i]) > -1) { isAuthorized = true; break; } } return (isAuthorized); } return (isAuthorized); } public static isPortalAdministrator():boolean { var isAuthorized = false; if(Session.isLoggedIn()){ var roles = ["urn:geant:openaire.eu:group:Portal+Administrator#aai.openaire.eu"] for (var i = 0; i < roles.length; i++) { if ((Session.getUser().role).indexOf(roles[i]) > -1) { isAuthorized = true; break; } } // console.log("Is admin:"+ isAdmin) return (isAuthorized); } // console.log("Is admin:"+ isAdmin) return (isAuthorized); } public static isRegisteredUser():boolean { var isRegisteredUser = false; if(Session.isLoggedIn()){ var claimRoles = ["urn:geant:openaire.eu:group:Registered+User#aai.openaire.eu"]; for (var i = 0; i < claimRoles.length; i++) { if ((Session.getUser().role).indexOf(claimRoles[i]) > -1) { isRegisteredUser = true; break; } } // console.log("Is isRegisteredUser:"+ isRegisteredUser) return (isRegisteredUser); } // console.log("Is isRegisteredUser:"+ isRegisteredUser) return (isRegisteredUser); } public static isUserValid() { // if(Session.isLoggedIn()){ var user:User = Session.getUser(); if(user!=null){ // var expires = user.expirationDate; // var now = new Date().getTime() / 1000; // console.log(" is still valid ? "+(now +0 < expires) +" Remaining:"+ (expires - (now+0))+ " now is:"+now + "expires at:"+expires); // return now +0 < expires; return true; } return false; } public static isValidAndRemove() { // if(Session.isLoggedIn()){ if(!Session.isUserValid()){ Session.removeUser(); return false; }else{ return true; } // }else{ // return false; // } } } export class MyJWT{ private static validateJWTFormat(data){ if(data != null && (data.indexOf(".") !=-1 && data.split('.').length == 3)){ return true; } return false; } private static getPayload(data){ var payload = data.split('.')[1]; return StringUtils.b64DecodeUnicode(payload); } public static parseUserInfo(data: any): User { if(this.validateJWTFormat(data)){ var info = JSON.parse(this.getPayload(data)); }else{ return null; } var user: User = new User(); user.id = (info.sub && info.sub.indexOf('@'))?info.sub.substring(0,info.sub.indexOf('@')):info.sub; user.firstname = (StringUtils.URIDecode((info.firstname && info.firstname!="")?info.firstname:"")).replace("+"," "); user.lastname = (StringUtils.URIDecode((info.lastname && info.lastname!="")?info.lastname:"")).replace("+"," "); user.email = info.email; // user.id = info.userId; user.fullname = (StringUtils.URIDecode((info.fullname && info.fullname!="")?info.fullname:"")).replace("+"," "); if(user.fullname == ""){ if(user.firstname != ""){ user.fullname += user.firstname; } if(user.lastname !=""){ user.fullname += user.lastname; } if(user.fullname == ""){ //it is still empty set a default user.fullname = "Anonymous user"; } } if(info.role && info.role != ""){ user.role =JSON.parse( StringUtils.URIDecode(info.role)); }else{ user.role =[]; } // console.log("User Role is:"); // console.log(user.role) user.jwt = data; user.expirationDate = info.exp; // localStorage.setItem("user", JSON.stringify(user)); // console.log(user) return user; } } export class COOKIE{ public static cookieName_u:string="XCsrfToken"; public static cookieName_id:string="AccessToken"; public static getCookie(name: string) : string { if(typeof document == 'undefined'){ return null; } let ca: Array = document.cookie.split(';'); let caLen: number = ca.length; let cookieName = `${name}=`; let c: string; for (let i: number = 0; i < caLen; i += 1) { c = ca[i].replace(/^\s+/g, ''); if (c.indexOf(cookieName) == 0) { return c.substring(cookieName.length, c.length); } } return null; } public static deleteCookie(name) { this.setCookie(name, '', -1); } public static setCookie(name: string, value: string, expireDays: number, path: string = '/') { let d:Date = new Date(); d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); let expires:string = `expires=${d.toUTCString()}`; // let cpath:string = path ? `; path=${path}` : ''; let domain = ""; if(document.domain.indexOf(".di.uoa.gr")!= -1){ domain = ".di.uoa.gr"; }else if(document.domain.indexOf(".openaire.eu") != -1){ domain = ".openaire.eu"; } document.cookie = name+'='+value+'; path='+path+'; domain='+domain+';'; } }