package org.haox.token; import java.io.*; public class TokenCache { private static final String DEFAULT_TOKEN_CACHE_PATH = ".tokenauth"; private static final String TOKEN_CACHE_FILE = ".tokenauth.token"; public static String readToken(String tokenCacheFile) { File cacheFile = null; if (tokenCacheFile != null && ! tokenCacheFile.isEmpty()) { cacheFile = new File(tokenCacheFile); if (!cacheFile.exists()) { throw new RuntimeException("Invalid token cache specified: " + tokenCacheFile); }; } else { cacheFile = getDefaultTokenCache(); if (!cacheFile.exists()) { throw new RuntimeException("No token cache available by default"); }; } String token = null; try { BufferedReader reader = new BufferedReader(new FileReader(cacheFile)); String line = reader.readLine(); reader.close(); if (line != null) { token = line; } } catch (IOException ex) { //NOP } return token; } public static void writeToken(String token) { File cacheFile = getDefaultTokenCache(); try { Writer writer = new FileWriter(cacheFile); writer.write(token.toString()); writer.close(); // sets read-write permissions to owner only cacheFile.setReadable(false, false); cacheFile.setReadable(true, true); cacheFile.setWritable(true, true); } catch (IOException ioe) { // if case of any error we just delete the cache, if user-only // write permissions are not properly set a security exception // is thrown and the file will be deleted. cacheFile.delete(); } } public static File getDefaultTokenCache() { String homeDir = System.getProperty("user.home", DEFAULT_TOKEN_CACHE_PATH); return new File(homeDir, TOKEN_CACHE_FILE); } }