public void restart() throws IOException { synchronized (this) { System.err.println("Restarting connection to $"+this.nodeNumber+": "+this.getUrl()); PrivateKey privateKey = session.getPrivateKey(); PublicKey nodePublicKey = session.getNodePublicKey(); session = null; start(privateKey, nodePublicKey, null); } }
public Binder asBinder() { return Binder.fromKeysValues( "connectMessage", getConnectMessage(), // "privateKey", privateKey.pack(), "sessionKey", getSessionKey().pack(), "sessionId", getSessionId() // "nodePublicKey", nodePublicKey.pack() ); }
public static BasicHttpClientSession reconstructSession(Binder binder) { BasicHttpClientSession restoringSession = new BasicHttpClientSession(); restoringSession.setConnectMessage(binder.getOrThrow("connectMessage")); // restoringSession.privateKey = binder.getBinaryOrThrowgetBinaryOrThrowgetBinaryOrThrow("privateKey"); restoringSession.setSessionKey(new SymmetricKey(binder.getBinaryOrThrow("sessionKey"))); restoringSession.setSessionId(binder.getLongOrThrow("sessionId")); // restoringSession.nodePublicKey = binder.getBinaryOrThrow("nodePublicKey"); return restoringSession; }
if (session != null) { this.session = session; this.session.setNodePublicKey(nodePublicKey); this.session.setPrivateKey(privateKey); this.session.setConnectMessage(result.getStringOrThrow("message")); this.session = new BasicHttpClientSession(); this.session.setNodePublicKey(nodePublicKey); this.session.setPrivateKey(privateKey); this.session.setSessionId(a.data.getLongOrThrow("session_id")); "signature", privateKey.sign(data, HashType.SHA512), "data", data, "session_id", this.session.getSessionId() ); this.session.setSessionKey(new SymmetricKey(key)); this.session.setConnectMessage(result.getStringOrThrow("message"));
public synchronized Parcel createParcelWithFreshU(Client client, Contract c, Collection<PrivateKey> keys) throws Exception { Set<PublicKey> ownerKeys = new HashSet(); keys.stream().forEach(key->ownerKeys.add(key.getPublicKey())); Contract stepaU = InnerContractsService.createFreshU(100000000, ownerKeys); stepaU.check(); //stepaU.setIsU(true); stepaU.traceErrors(); PrivateKey clientPrivateKey = client.getSession().getPrivateKey(); PrivateKey newPrivateKey = new PrivateKey(Do.read("./src/test_contracts/keys/u_key.private.unikey")); client.getSession().setPrivateKey(newPrivateKey); client.restart(); Thread.sleep(8000); ItemResult itemResult = client.register(stepaU.getPackedTransaction(), 5000); // node.registerItem(stepaU); // ItemResult itemResult = node.waitItem(stepaU.getId(), 18000); client.getSession().setPrivateKey(clientPrivateKey); client.restart(); Thread.sleep(8000); assertEquals(ItemState.APPROVED, itemResult.state); Set<PrivateKey> keySet = new HashSet<>(); keySet.addAll(keys); return ContractsService.createParcel(c, stepaU, 150, keySet); }
/** * 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); }
if (session == null || session.getSessionKey() == null) throw new IllegalStateException("Session does not created or session key is not got yet."); Answer a = requestOrThrow("command", "command", "command", "params", session.getSessionKey().encrypt(Boss.pack(call)), "session_id", session.getSessionId() ); Binder data = Boss.unpack( session.getSessionKey().decrypt(a.data.getBinaryOrThrow("result")) ); Binder result = data.getBinder("result", null);
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; }
@Test public void registerContractWithAnonymousId() throws Exception { TestSpace ts = prepareTestSpace(); PrivateKey newPrivateKey = new PrivateKey(Do.read("./src/test_contracts/keys/u_key.private.unikey")); byte[] myAnonId = newPrivateKey.createAnonymousId(); Contract contract = new Contract(); contract.setExpiresAt(ZonedDateTime.now().plusDays(90)); Role r = contract.setIssuerKeys(AnonymousId.fromBytes(myAnonId)); contract.registerRole(new RoleLink("owner", "issuer")); contract.registerRole(new RoleLink("creator", "issuer")); contract.addPermission(new ChangeOwnerPermission(r)); contract.addSignerKey(newPrivateKey); contract.seal(); assertTrue(contract.isOk()); System.out.println("contract.check(): " + contract.check()); contract.traceErrors(); ts.client.getSession().setPrivateKey(newPrivateKey); ts.client.restart(); ItemResult itemResult = ts.client.register(contract.getPackedTransaction(), 5000); assertEquals(ItemState.APPROVED, itemResult.state); ts.nodes.forEach(x -> x.shutdown()); }
public String getConnectMessage() { if(session != null) return session.getConnectMessage(); throw new IllegalStateException("Session does not exist. Start BasicHttpClient for create session."); }
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 synchronized Parcel createParcelWithFreshU(Client client, Contract c, Collection<PrivateKey> keys) throws Exception { Set<PublicKey> ownerKeys = new HashSet(); keys.stream().forEach(key->ownerKeys.add(key.getPublicKey())); Contract stepaU = InnerContractsService.createFreshU(100000000, ownerKeys); stepaU.check(); stepaU.traceErrors(); PrivateKey clientPrivateKey = client.getSession().getPrivateKey(); PrivateKey newPrivateKey = new PrivateKey(Do.read("./src/test_contracts/keys/u_key.private.unikey")); client.getSession().setPrivateKey(newPrivateKey); client.restart(); ItemResult itemResult = client.register(stepaU.getPackedTransaction(), 5000); client.getSession().setPrivateKey(clientPrivateKey); client.restart(); assertEquals(ItemState.APPROVED, itemResult.state); Set<PrivateKey> keySet = new HashSet<>(); keySet.addAll(keys); return ContractsService.createParcel(c, stepaU, 150, keySet); }
stepaU.traceErrors(); PrivateKey clientPrivateKey = client.getSession().getPrivateKey(); PrivateKey newPrivateKey = new PrivateKey(Do.read("./src/test_contracts/keys/u_key.private.unikey")); client.getSession().setPrivateKey(newPrivateKey); client.restart(); client.getSession().setPrivateKey(clientPrivateKey); client.restart();
stepaU.traceErrors(); PrivateKey clientPrivateKey = client.getSession().getPrivateKey(); client.getSession().setPrivateKey(newPrivateKey); client.restart(); client.getSession().setPrivateKey(clientPrivateKey); client.restart();