/* * #%L * org.gitools.ui.app * %% * Copyright (C) 2013 - 2014 Universitat Pompeu Fabra - Biomedical Genomics group * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ /* * Copyright (c) 2007-2012 The Broad Institute, Inc. * SOFTWARE COPYRIGHT NOTICE * This software and its documentation are the copyright of the Broad Institute, Inc. All rights are reserved. * * This software is supplied without any warranty or guaranteed support whatsoever. The Broad Institute is not responsible for its use, misuse, or functionality. * * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php. */ package org.gitools.ui.app.genomespace; import org.apache.log4j.Logger; import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.List; /** * @author jrobinso * @date Jun 9, 2011 * @noinspection ALL */ public class GSUtils { private static final Logger log = Logger.getLogger(GSUtils.class); /* * Directory and filenames to save the token and username to facilitate SSO */ private static final String tokenSaveDir = ".gs"; private static final String tokenSaveFileName = ".gstoken"; private static final String usernameSaveFileName = ".gsusername"; private static String gsUser = null; private static String gsToken = null; public static final String DEFAULT_GS_DM_SERVER = "https://dm.genomespace.org/datamanager/v1.0/"; public static final String DEFAULT_GS_IDENTITY_SERVER = "https://identity.genomespace.org/identityServer/basic"; private static File getTokenSaveDir() { String userDir = System.getProperty("user.home"); File gsDir = new File(userDir, tokenSaveDir); if (!gsDir.exists()) { gsDir.mkdir(); } return gsDir; } private static File getTokenFile() { File gsDir = getTokenSaveDir(); return (gsDir != null && gsDir.exists()) ? new File(gsDir, tokenSaveFileName) : null; } private static File getUsernameFile() { File gsDir = getTokenSaveDir(); return (gsDir != null && gsDir.exists()) ? new File(gsDir, usernameSaveFileName) : null; } public static void setGSToken(String newToken) { if (gsToken == null || !gsToken.equals(newToken)) { gsToken = newToken; BufferedWriter bw = null; File gsDir = getTokenSaveDir(); if (!gsDir.isDirectory()) { log.error("Could not store token for SSO. File " + gsDir.getAbsolutePath() + "exists and is not a directory."); return; // someone made a file with this name... } File tokenFile = getTokenFile(); if (tokenFile.exists()) { tokenFile.delete(); } writeToFile(gsToken, tokenFile); } } public static String getGSToken() { if (gsToken == null) { File file = GSUtils.getTokenFile(); if (file.exists()) { BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); gsToken = br.readLine(); } catch (IOException e) { log.error("Error reading GS cookie", e); } finally { if (br != null) { try { br.close(); } catch (IOException e) { // Ignore } } } } } return gsToken; } public static void setGSUser(String newUser) { if (gsUser == null || !gsUser.equals(newUser)) { gsUser = newUser; File gsDir = getTokenSaveDir(); if (!gsDir.isDirectory()) { log.error("Could not store token for SSO. File " + gsDir.getAbsolutePath() + "exists and is not a directory."); return; // someone made a file with this name... } File userFile = getUsernameFile(); if (userFile.exists()) { userFile.delete(); } writeToFile(gsUser, userFile); } } public static String getGSUser() throws IOException { if (gsUser == null) { BufferedReader br = null; try { File tokenFile = getUsernameFile(); if (tokenFile.exists()) { br = new BufferedReader(new FileReader(tokenFile)); gsUser = br.readLine().trim(); } } finally { try { if (br != null) { br.close(); } } catch (Exception e) { } } return gsUser; } return gsUser; } public static void logout() { gsToken = null; gsUser = null; gsToken = null; File userfile = getUsernameFile(); if (userfile.exists()) { userfile.delete(); } File tokenFile = getTokenFile(); if (tokenFile.exists()) { tokenFile.delete(); } try { URI gsURI = new URI(DEFAULT_GS_DM_SERVER); CookieManager manager = (CookieManager) CookieManager.getDefault(); if (manager == null) { return; } final CookieStore cookieStore = manager.getCookieStore(); List<HttpCookie> cookies = new ArrayList<HttpCookie>(cookieStore.get(gsURI)); if (cookies != null) { for (HttpCookie cookie : cookies) { final String name = cookie.getName(); if (name.equals("gs-token") || name.equals("gs-username")) { cookieStore.remove(gsURI, cookie); } } } } catch (URISyntaxException e) { log.error("Error creating GS URI", e); } } private static void writeToFile(String line, File aFile) { BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter(aFile)); bw.write(line); bw.close(); } catch (Exception e) { log.error("Failed to save the token for later Single Sign on", e); } finally { try { if (bw != null) { bw.close(); } } catch (Exception e) { } } } public static boolean isGenomeSpace(URL url) { return url.getHost().contains("genomespace"); } }