From 23b8714b29816b608cb3aa330b6e93610e107126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magdalena=20Grodzi=C5=84ska?= Date: Mon, 13 Jan 2020 20:56:41 +0100 Subject: Create simple query data structure so that RMI doesn't blow up --- .../mimuw/cloudatlas/agent/ApiImplementation.java | 7 +++-- .../cloudatlas/agent/NewApiImplementation.java | 7 +++-- src/main/java/pl/edu/mimuw/cloudatlas/api/Api.java | 5 ++-- .../mimuw/cloudatlas/client/ClientController.java | 5 ++-- .../pl/edu/mimuw/cloudatlas/model/ValueQuery.java | 9 ++++++ .../mimuw/cloudatlas/querysigner/QueryData.java | 26 +++++++++++++++++ .../mimuw/cloudatlas/querysigner/QuerySigner.java | 20 ++++++++++--- .../querysigner/QuerySignerApiImplementation.java | 34 +++++++--------------- .../cloudatlas/querysignerapi/QuerySignerApi.java | 17 ++++------- 9 files changed, 80 insertions(+), 50 deletions(-) (limited to 'src/main') diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java index e9dbb7e..90e7789 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java @@ -28,6 +28,7 @@ import pl.edu.mimuw.cloudatlas.model.Type; import pl.edu.mimuw.cloudatlas.model.TypePrimitive; import pl.edu.mimuw.cloudatlas.model.ZMI; import pl.edu.mimuw.cloudatlas.api.Api; +import pl.edu.mimuw.cloudatlas.querysigner.QueryData; import pl.edu.mimuw.cloudatlas.querysigner.QueryUtils; public class ApiImplementation implements Api { @@ -61,11 +62,11 @@ public class ApiImplementation implements Api { } } - public void installQuery(String name, ValueQuery query) throws RemoteException { + public void installQuery(String name, QueryData query) throws RemoteException { QueryUtils.validateQueryName(name); try { Attribute attributeName = new Attribute(name); - installQueryInHierarchy(root, attributeName, query); + installQueryInHierarchy(root, attributeName, new ValueQuery(query)); executeAllQueries(root); } catch (Exception e) { throw new RemoteException("Failed to install query", e); @@ -81,7 +82,7 @@ public class ApiImplementation implements Api { } } - public void uninstallQuery(String queryName, ValueQuery query) throws RemoteException { + public void uninstallQuery(String queryName, QueryData query) throws RemoteException { QueryUtils.validateQueryName(queryName); uninstallQueryInHierarchy(root, new Attribute(queryName)); } diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java index bf75210..0bf4338 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java @@ -22,6 +22,7 @@ import pl.edu.mimuw.cloudatlas.interpreter.Main; import pl.edu.mimuw.cloudatlas.interpreter.QueryResult; import pl.edu.mimuw.cloudatlas.model.*; import pl.edu.mimuw.cloudatlas.api.Api; +import pl.edu.mimuw.cloudatlas.querysigner.QueryData; import pl.edu.mimuw.cloudatlas.querysigner.QueryUtils; public class NewApiImplementation implements Api { @@ -80,13 +81,13 @@ public class NewApiImplementation implements Api { } } - public void installQuery(String name, ValueQuery query) throws RemoteException { + public void installQuery(String name, QueryData query) throws RemoteException { QueryUtils.validateQueryName(name); try { Attribute attributeName = new Attribute(name); ValueTime timestamp = new ValueTime(System.currentTimeMillis()); Map> queries = new HashMap(); - queries.put(attributeName, new SimpleImmutableEntry(query, timestamp)); + queries.put(attributeName, new SimpleImmutableEntry(new ValueQuery(query), timestamp)); UpdateQueriesMessage message = new UpdateQueriesMessage("", 0, queries); eventBus.addMessage(message); } catch (Exception e) { @@ -94,7 +95,7 @@ public class NewApiImplementation implements Api { } } - public void uninstallQuery(String queryName, ValueQuery query) throws RemoteException { + public void uninstallQuery(String queryName, QueryData query) throws RemoteException { QueryUtils.validateQueryName(queryName); try { Attribute attributeName = new Attribute(queryName); diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/api/Api.java b/src/main/java/pl/edu/mimuw/cloudatlas/api/Api.java index 2936b13..7cc629d 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/api/Api.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/api/Api.java @@ -7,6 +7,7 @@ import pl.edu.mimuw.cloudatlas.model.Value; import pl.edu.mimuw.cloudatlas.model.ValueContact; import pl.edu.mimuw.cloudatlas.model.AttributesMap; import pl.edu.mimuw.cloudatlas.model.ValueQuery; +import pl.edu.mimuw.cloudatlas.querysigner.QueryData; /** * @@ -28,9 +29,9 @@ public interface Api extends Remote { public AttributesMap getZoneAttributeValues(String zoneName) throws RemoteException; - public void installQuery(String queryName, ValueQuery query) throws RemoteException; + public void installQuery(String queryName, QueryData query) throws RemoteException; - public void uninstallQuery(String queryName, ValueQuery query) throws RemoteException; + public void uninstallQuery(String queryName, QueryData query) throws RemoteException; public void setAttributeValue(String zoneName, String attributeName, Value value) throws RemoteException; diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java b/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java index 56b478c..5f34fe9 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.stereotype.Controller; import pl.edu.mimuw.cloudatlas.api.Api; import pl.edu.mimuw.cloudatlas.model.*; +import pl.edu.mimuw.cloudatlas.querysigner.QueryData; import pl.edu.mimuw.cloudatlas.querysignerapi.QuerySignerApi; import java.net.InetAddress; @@ -79,7 +80,7 @@ public class ClientController { boolean success = true; try { - ValueQuery query = this.querySignerApi.signInstallQuery(queryObject.getName(), queryObject.getValue()); + QueryData query = this.querySignerApi.signInstallQuery(queryObject.getName(), queryObject.getValue()); this.agentApi.installQuery(queryObject.getName(), query); } catch (Exception e) { success = false; @@ -105,7 +106,7 @@ public class ClientController { boolean success = true; try { - ValueQuery query = querySignerApi.signUninstallQuery(queryObject.getName()); + QueryData query = querySignerApi.signUninstallQuery(queryObject.getName()); this.agentApi.uninstallQuery(queryObject.getName(), query); } catch (Exception e) { success = false; diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java index 6839e4c..ece50b5 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java @@ -6,6 +6,7 @@ import pl.edu.mimuw.cloudatlas.interpreter.query.Absyn.Program; import pl.edu.mimuw.cloudatlas.interpreter.query.parser; import pl.edu.mimuw.cloudatlas.interpreter.query.Yylex; import pl.edu.mimuw.cloudatlas.model.Value; +import pl.edu.mimuw.cloudatlas.querysigner.QueryData; /** * A class that holds a CloudAtlas query. @@ -41,6 +42,14 @@ public class ValueQuery extends Value { this.timestamp = System.currentTimeMillis(); } + public ValueQuery(QueryData queryData) throws Exception { + this.code = queryData.getCode(); + Yylex lex = new Yylex(new ByteArrayInputStream(queryData.getCode().getBytes())); + this.query = (new parser(lex)).pProgram(); + this.signature = queryData.getSignature(); + this.timestamp = System.currentTimeMillis(); + } + private ValueQuery() { this.code = null; this.query = null; diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QueryData.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QueryData.java index a09c823..7a85d7c 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QueryData.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QueryData.java @@ -1,4 +1,30 @@ package pl.edu.mimuw.cloudatlas.querysigner; +import pl.edu.mimuw.cloudatlas.interpreter.query.Absyn.Program; + public class QueryData { + // Original source code + private String code; + // Query signature + private byte[] signature; + // Query signing timestamp + private long timestamp; + + public QueryData(String code, byte[] signature) { + this.code = code; + this.signature = signature; + this.timestamp = System.currentTimeMillis();; + } + + public String getCode() { + return code; + } + + public byte[] getSignature() { + return signature; + } + + public long getTimestamp() { + return timestamp; + } } diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java index 90a86b7..d60a75d 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java @@ -1,10 +1,16 @@ package pl.edu.mimuw.cloudatlas.querysigner; +import pl.edu.mimuw.cloudatlas.KeyGenerator; +import pl.edu.mimuw.cloudatlas.agent.NewApiImplementation; +import pl.edu.mimuw.cloudatlas.api.Api; import pl.edu.mimuw.cloudatlas.querysignerapi.QuerySignerApi; +import java.io.IOException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; +import java.security.PrivateKey; +import java.security.PublicKey; public class QuerySigner { public static class InvalidQueryException extends Exception { @@ -13,12 +19,18 @@ public class QuerySigner { } } + private static QuerySignerApiImplementation initApi() throws IOException { + String publicKeyFile = System.getProperty("public_key_file"); + String privateKeyFile = System.getProperty("private_key_file"); + PublicKey publicKey = null; //KeyGenerator.getPublicKey(KeyGenerator.readKeyFromFile(publicKeyFile)); + PrivateKey privateKey = null; // KeyGenerator.getPrivateKey(KeyGenerator.readKeyFromFile(privateKeyFile)); + return new QuerySignerApiImplementation(publicKey, privateKey); + } + public static void runRegistry() { try { - // TODO reading from files - String publicKey = System.getProperty("public_key"); - String privateKey = System.getProperty("private_key"); - QuerySignerApiImplementation api = new QuerySignerApiImplementation(publicKey.getBytes(), privateKey.getBytes()); + QuerySignerApiImplementation api = initApi(); +// NewApiImplementation apii = new NewApiImplementation(null); QuerySignerApi apiStub = (QuerySignerApi) UnicastRemoteObject.exportObject(api, 0); Registry registry = LocateRegistry.getRegistry(); diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java index d1c0e7c..32bc634 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java @@ -10,7 +10,6 @@ import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.rmi.RemoteException; import java.security.*; -import java.security.interfaces.RSAPrivateCrtKey; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -25,10 +24,12 @@ public class QuerySignerApiImplementation implements QuerySignerApi { private Set attribsSetByQueries; private ByteSerializer byteSerializer; - QuerySignerApiImplementation(byte[] serializedPublicKey, byte[] serializedPrivateKey) { + QuerySignerApiImplementation(PublicKey publicKey, PrivateKey privateKey) {// (byte[] serializedPublicKey, byte[] serializedPrivateKey) { this.byteSerializer = new ByteSerializer(); - this.publicKey = (PublicKey) byteSerializer.deserialize(serializedPublicKey, PublicKey.class); - this.privateKey = (PrivateKey) byteSerializer.deserialize(serializedPrivateKey, PrivateKey.class); +// this.publicKey = (PublicKey) byteSerializer.deserialize(serializedPublicKey, PublicKey.class); +// this.privateKey = (PrivateKey) byteSerializer.deserialize(serializedPrivateKey, PrivateKey.class); + this.publicKey = publicKey; + this.privateKey = privateKey; this.queries = new HashMap<>(); this.attribsSetByQueries = new HashSet<>(); } @@ -84,13 +85,13 @@ public class QuerySignerApiImplementation implements QuerySignerApi { } @Override - public ValueQuery signInstallQuery(String queryName, String queryCode) throws RemoteException { + public QueryData signInstallQuery(String queryName, String queryCode) throws RemoteException { QueryUtils.validateQueryName(queryName); try { byte[] serializedQuery = serializeQuery(queryName, queryCode); byte[] hashedQuery = cryptographicHash(serializedQuery); byte[] querySignature = encryptQuery(hashedQuery); - return new ValueQuery(queryCode, querySignature); + return new QueryData(queryCode, querySignature); } catch (Exception e) { e.printStackTrace(); throw new RemoteException(e.getLocalizedMessage()); @@ -98,7 +99,7 @@ public class QuerySignerApiImplementation implements QuerySignerApi { } @Override - public void validateInstallQuery(String queryName, ValueQuery query) throws RemoteException { + public void validateInstallQuery(String queryName, QueryData query) throws RemoteException { QueryUtils.validateQueryName(queryName); try { byte[] decryptedQuery = decryptQuery(query.getSignature()); @@ -115,28 +116,13 @@ public class QuerySignerApiImplementation implements QuerySignerApi { // TODO @Override - public ValueQuery signUninstallQuery(String queryName) throws RemoteException { + public QueryData signUninstallQuery(String queryName) throws RemoteException { return null; } // TODO @Override - public void validateUninstallQuery(String queryName, ValueQuery query) throws RemoteException { - - } - - @Override - public PublicKey getPublicKey() throws RemoteException { - return publicKey; - } + public void validateUninstallQuery(String queryName, QueryData query) throws RemoteException { - @Override - public void setPublicKey(PublicKey publicKey) throws RemoteException { - this.publicKey = publicKey; - } - - @Override - public byte[] getQuerySignature(String queryName) throws RemoteException { - return queries.get(queryName).getSignature(); } } diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java index fa46da3..6b42d32 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java @@ -1,23 +1,16 @@ package pl.edu.mimuw.cloudatlas.querysignerapi; -import pl.edu.mimuw.cloudatlas.model.ValueQuery; +import pl.edu.mimuw.cloudatlas.querysigner.QueryData; import java.rmi.Remote; import java.rmi.RemoteException; -import java.security.PublicKey; public interface QuerySignerApi extends Remote { - public ValueQuery signInstallQuery(String queryName, String queryCode) throws RemoteException; + public QueryData signInstallQuery(String queryName, String queryCode) throws RemoteException; - public ValueQuery signUninstallQuery(String queryName) throws RemoteException; + public QueryData signUninstallQuery(String queryName) throws RemoteException; - public void validateInstallQuery(String queryName, ValueQuery query) throws RemoteException; + public void validateInstallQuery(String queryName, QueryData query) throws RemoteException; - public void validateUninstallQuery(String queryName, ValueQuery query) throws RemoteException; - - public PublicKey getPublicKey() throws RemoteException; - - public void setPublicKey(PublicKey publicKey) throws RemoteException; - - public byte[] getQuerySignature(String queryName) throws RemoteException; + public void validateUninstallQuery(String queryName, QueryData query) throws RemoteException; } -- cgit v1.2.3