static public void saveSession() throws IOException { if( clientNetwork != null) { int nodeNumber = getClientNetwork().getNodeNumber(); reporter.verbose("Session from ClientNetwork is exist: " + (session != null)); if (session != null) { Path keysDir = Paths.get(System.getProperty("user.home") + "/.universa"); if (!Files.exists(keysDir)) { reporter.verbose("creating new keys directory: " + keysDir.toString()); final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwx------"); final FileAttribute<Set<PosixFilePermission>> ownerOnly = PosixFilePermissions.asFileAttribute(perms); Files.createDirectory(keysDir, ownerOnly); } Path sessionFile = keysDir.resolve("node_" + nodeNumber + ".session"); try (OutputStream out = Files.newOutputStream(sessionFile)) { out.write(Boss.pack(session.asBinder())); } final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-------"); try { Files.setPosixFilePermissions(sessionFile, perms); } catch (UnsupportedOperationException x) { // fucking windows :( have no idea what to do with it } prefs.put("session_" + nodeNumber, sessionFile.toString()); // report("Session has been stored to the " + keysDir + "/" + sessionFile); } } }
/** * Only for test purposes * * @param nodeNumber * @throws IOException */ static public void breakSession(int nodeNumber) throws IOException { BasicHttpClientSession s = getSession(nodeNumber); s.setSessionId(666); s.setSessionKey(new SymmetricKey()); Path keysDir = Paths.get(System.getProperty("user.home") + "/.universa"); if (!Files.exists(keysDir)) { reporter.verbose("creating new keys directory: " + keysDir.toString()); final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwx------"); final FileAttribute<Set<PosixFilePermission>> ownerOnly = PosixFilePermissions.asFileAttribute(perms); Files.createDirectory(keysDir, ownerOnly); } Path sessionFile = keysDir.resolve("node_" + nodeNumber + ".session"); try (OutputStream out = Files.newOutputStream(sessionFile)) { out.write(Boss.pack(s.asBinder())); } final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-------"); Files.setPosixFilePermissions(sessionFile, perms); prefs.put("session_" + nodeNumber, sessionFile.toString()); // reporter.verbose("Broken session has been stored to the " + keysDir + "/" + sessionFile); }