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); } } }
public static synchronized ClientNetwork getClientNetwork() throws IOException { if (clientNetwork == null) { reporter.verbose("ClientNetwork not exist, create one"); BasicHttpClientSession s = null; reporter.verbose("ClientNetwork nodeUrl: " + nodeUrl); if(nodeUrl != null) { clientNetwork = new ClientNetwork(nodeUrl, null, true); } else { clientNetwork = new ClientNetwork(null, true); } if (clientNetwork.client == null) throw new IOException("failed to connect to to the universa network"); if(nodeNumber != -1) { List<Client.NodeRecord> nodes = clientNetwork.client.getNodes(); clientNetwork.client = clientNetwork.client.getClient(nodeNumber-1); clientNetwork.client.setNodes(nodes); } if(!options.has("no-cache")) { s = getSession(clientNetwork.getNodeNumber()); } reporter.verbose("Session for " + clientNetwork.getNodeNumber() + " is exist: " + (s != null)); if(s != null) reporter.verbose("Session id is " + s.getSessionId()); clientNetwork.start(s); } if(clientNetwork != null) session = clientNetwork.getSession(); return clientNetwork; }