From c97f1b6d35814514cb0021256782fe712cb65f57 Mon Sep 17 00:00:00 2001 From: blavenie <benoit.lavenier@e-is.pro> Date: Tue, 10 Jan 2017 17:31:54 +0100 Subject: [PATCH] - Fix compilation (remove used import on gson) - user event : use by default generated keyring, to compute hash and signature on user event --- .../core/client/model/bma/gson/GsonUtils.java | 2 ++ .../bma/jackson/CertificationDeserializer.java | 4 ++-- .../model/bma/jackson/EndpointDeserializer.java | 4 ---- .../model/bma/jackson/IdentityDeserializer.java | 5 ++--- .../client/model/bma/jackson/JacksonUtils.java | 4 ++-- .../model/bma/jackson/JoinerDeserializer.java | 5 ++--- .../model/bma/jackson/RevokedDeserializer.java | 4 ++-- .../bma/BlockchainRemoteServiceImpl.java | 2 +- .../model/bma/gson/JsonArrayParserTest.java | 1 + .../org/duniter/core/service/CryptoService.java | 2 ++ .../core/service/Ed25519CryptoServiceImpl.java | 5 +++++ .../core/util/json}/JsonArrayParser.java | 9 ++++----- .../core/util/json}/JsonAttributeParser.java | 2 +- .../core/util/json}/JsonSyntaxException.java | 2 +- .../service/BlockchainService.java | 4 ++-- .../service/BlockchainUserEventService.java | 8 +++++--- .../user/service/UserEventService.java | 17 +++++++++++++---- 17 files changed, 47 insertions(+), 33 deletions(-) rename {duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson => duniter4j-core-shared/src/main/java/org/duniter/core/util/json}/JsonArrayParser.java (92%) rename {duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson => duniter4j-core-shared/src/main/java/org/duniter/core/util/json}/JsonAttributeParser.java (98%) rename {duniter4j-core-client/src/main/java/org/duniter/core/client/service/exception => duniter4j-core-shared/src/main/java/org/duniter/core/util/json}/JsonSyntaxException.java (96%) diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/GsonUtils.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/GsonUtils.java index 497ff660..677c1c2b 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/GsonUtils.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/GsonUtils.java @@ -27,6 +27,8 @@ import com.google.common.collect.Multimap; import com.google.gson.GsonBuilder; import org.duniter.core.client.model.bma.BlockchainBlock; import org.duniter.core.client.model.bma.NetworkPeering; +import org.duniter.core.util.json.JsonArrayParser; +import org.duniter.core.util.json.JsonAttributeParser; import java.util.List; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/CertificationDeserializer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/CertificationDeserializer.java index 542130ab..0d869e62 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/CertificationDeserializer.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/CertificationDeserializer.java @@ -3,9 +3,9 @@ package org.duniter.core.client.model.bma.jackson; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.google.gson.JsonParseException; import org.apache.commons.lang3.StringUtils; import org.duniter.core.client.model.bma.BlockchainBlock; +import org.duniter.core.util.json.JsonSyntaxException; import java.io.IOException; @@ -22,7 +22,7 @@ public class CertificationDeserializer extends JsonDeserializer<BlockchainBlock. String[] parts = certificationStr.split(":"); if (parts.length != 4) { - throw new JsonParseException(String.format("Bad format for BlockchainBlock.Certification. Should have 4 parts, but found %s.", parts.length)); + throw new JsonSyntaxException(String.format("Bad format for BlockchainBlock.Certification. Should have 4 parts, but found %s.", parts.length)); } BlockchainBlock.Certification result = new BlockchainBlock.Certification(); diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/EndpointDeserializer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/EndpointDeserializer.java index e67c1d2b..2681d5df 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/EndpointDeserializer.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/EndpointDeserializer.java @@ -1,13 +1,9 @@ package org.duniter.core.client.model.bma.jackson; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.google.gson.JsonParseException; -import org.apache.commons.lang3.StringUtils; import org.apache.http.conn.util.InetAddressUtils; -import org.duniter.core.client.model.bma.BlockchainBlock; import org.duniter.core.client.model.bma.EndpointProtocol; import org.duniter.core.client.model.bma.NetworkPeering; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/IdentityDeserializer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/IdentityDeserializer.java index 49dd54b7..42f6612f 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/IdentityDeserializer.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/IdentityDeserializer.java @@ -1,12 +1,11 @@ package org.duniter.core.client.model.bma.jackson; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.google.gson.JsonParseException; import org.apache.commons.lang3.StringUtils; import org.duniter.core.client.model.bma.BlockchainBlock; +import org.duniter.core.util.json.JsonSyntaxException; import java.io.IOException; @@ -24,7 +23,7 @@ public class IdentityDeserializer extends JsonDeserializer<BlockchainBlock.Ident String[] identityParts = identityStr.split(":"); if (identityParts.length != 4) { - throw new JsonParseException(String.format("Bad format for BlockchainBlock.Identity. Should have 4 parts, but found %s.", identityParts.length)); + throw new JsonSyntaxException(String.format("Bad format for BlockchainBlock.Identity. Should have 4 parts, but found %s.", identityParts.length)); } BlockchainBlock.Identity result = new BlockchainBlock.Identity(); diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JacksonUtils.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JacksonUtils.java index b7118cac..e51c2a1b 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JacksonUtils.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JacksonUtils.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import org.duniter.core.client.model.bma.BlockchainBlock; import org.duniter.core.client.model.bma.NetworkPeering; -import org.duniter.core.client.model.bma.gson.JsonArrayParser; -import org.duniter.core.client.model.bma.gson.JsonAttributeParser; +import org.duniter.core.util.json.JsonArrayParser; +import org.duniter.core.util.json.JsonAttributeParser; import java.util.List; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JoinerDeserializer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JoinerDeserializer.java index 2cfa2a1e..5e18c24e 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JoinerDeserializer.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/JoinerDeserializer.java @@ -1,12 +1,11 @@ package org.duniter.core.client.model.bma.jackson; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.google.gson.JsonParseException; import org.apache.commons.lang3.StringUtils; import org.duniter.core.client.model.bma.BlockchainBlock; +import org.duniter.core.util.json.JsonSyntaxException; import java.io.IOException; @@ -23,7 +22,7 @@ public class JoinerDeserializer extends JsonDeserializer<BlockchainBlock.Joiner> String[] identityParts = identityStr.split(":"); if (identityParts.length != 5) { - throw new JsonParseException(String.format("Bad format for BlockchainBlock.Identity. Should have 5 parts, but found %s.", identityParts.length)); + throw new JsonSyntaxException(String.format("Bad format for BlockchainBlock.Identity. Should have 5 parts, but found %s.", identityParts.length)); } BlockchainBlock.Joiner result = new BlockchainBlock.Joiner(); diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/RevokedDeserializer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/RevokedDeserializer.java index 5a9f7787..b0ea8842 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/RevokedDeserializer.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/jackson/RevokedDeserializer.java @@ -3,9 +3,9 @@ package org.duniter.core.client.model.bma.jackson; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; -import com.google.gson.JsonParseException; import org.apache.commons.lang3.StringUtils; import org.duniter.core.client.model.bma.BlockchainBlock; +import org.duniter.core.util.json.JsonSyntaxException; import java.io.IOException; @@ -22,7 +22,7 @@ public class RevokedDeserializer extends JsonDeserializer<BlockchainBlock.Revoke String[] parts = str.split(":"); if (parts.length != 2) { - throw new JsonParseException(String.format("Bad format for BlockchainBlock.Revoked. Should have 2 parts, but found %s.", parts.length)); + throw new JsonSyntaxException(String.format("Bad format for BlockchainBlock.Revoked. Should have 2 parts, but found %s.", parts.length)); } BlockchainBlock.Revoked result = new BlockchainBlock.Revoked(); diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/BlockchainRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/BlockchainRemoteServiceImpl.java index b0735d8c..7e86ec65 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/BlockchainRemoteServiceImpl.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/BlockchainRemoteServiceImpl.java @@ -29,7 +29,7 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.message.BasicNameValuePair; import org.duniter.core.client.config.Configuration; import org.duniter.core.client.model.bma.*; -import org.duniter.core.client.model.bma.gson.JsonArrayParser; +import org.duniter.core.util.json.JsonArrayParser; import org.duniter.core.client.model.local.Identity; import org.duniter.core.client.model.local.Peer; import org.duniter.core.client.model.local.Wallet; diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/gson/JsonArrayParserTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/gson/JsonArrayParserTest.java index 2b1e6d59..930f6c4d 100644 --- a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/gson/JsonArrayParserTest.java +++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/gson/JsonArrayParserTest.java @@ -22,6 +22,7 @@ package org.duniter.core.client.model.bma.gson; * #L% */ +import org.duniter.core.util.json.JsonArrayParser; import org.junit.Assert; import org.junit.Test; diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/service/CryptoService.java b/duniter4j-core-shared/src/main/java/org/duniter/core/service/CryptoService.java index 2da1b39d..0fcf80a0 100644 --- a/duniter4j-core-shared/src/main/java/org/duniter/core/service/CryptoService.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/service/CryptoService.java @@ -53,6 +53,8 @@ public interface CryptoService extends Bean { */ KeyPair getKeyPairFromSeed(byte[] seed); + KeyPair getRandomKeypair(); + String sign(String message, byte[] secretKey); String sign(String message, String secretKey); diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/service/Ed25519CryptoServiceImpl.java b/duniter4j-core-shared/src/main/java/org/duniter/core/service/Ed25519CryptoServiceImpl.java index 57575d81..f822e004 100644 --- a/duniter4j-core-shared/src/main/java/org/duniter/core/service/Ed25519CryptoServiceImpl.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/service/Ed25519CryptoServiceImpl.java @@ -97,6 +97,11 @@ public class Ed25519CryptoServiceImpl implements CryptoService { return new KeyPair(publicKey, secretKey); } + @Override + public KeyPair getRandomKeypair() { + return getKeyPairFromSeed(String.valueOf(System.currentTimeMillis()).getBytes()); + } + @Override public String sign(String message, byte[] secretKey) { byte[] messageBinary = CryptoUtils.decodeUTF8(message); diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/JsonArrayParser.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonArrayParser.java similarity index 92% rename from duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/JsonArrayParser.java rename to duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonArrayParser.java index 9c52222b..f336054b 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/JsonArrayParser.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonArrayParser.java @@ -1,4 +1,4 @@ -package org.duniter.core.client.model.bma.gson; +package org.duniter.core.util.json; /* * #%L @@ -22,7 +22,6 @@ package org.duniter.core.client.model.bma.gson; * #L% */ -import com.google.gson.JsonParseException; import org.duniter.core.util.CollectionUtils; import java.util.ArrayList; @@ -40,7 +39,7 @@ public class JsonArrayParser { READING_ARRAY } - public String[] getValuesAsArray(String jsonArray) throws JsonParseException { + public String[] getValuesAsArray(String jsonArray) throws JsonSyntaxException { List<String> result = getValuesAsList(jsonArray); if (CollectionUtils.isEmpty(result)) { return null; @@ -48,7 +47,7 @@ public class JsonArrayParser { return result.toArray(new String[result.size()]); } - public List<String> getValuesAsList(String jsonArray) throws JsonParseException { + public List<String> getValuesAsList(String jsonArray) throws JsonSyntaxException { ParserState state = ParserState.READING_ARRAY; List<String> result = new ArrayList<String>(); StringBuilder currentObject = null; @@ -67,7 +66,7 @@ public class JsonArrayParser { } case '}': { if (state == ParserState.READING_ARRAY) { - throw new JsonParseException("unexpected '}' at " + i); + throw new JsonSyntaxException("unexpected '}' at " + i); } else { currentObject.append(c); parenthesisBalance--; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/JsonAttributeParser.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java similarity index 98% rename from duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/JsonAttributeParser.java rename to duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java index aac0d7ed..62b04ec8 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/gson/JsonAttributeParser.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonAttributeParser.java @@ -1,4 +1,4 @@ -package org.duniter.core.client.model.bma.gson; +package org.duniter.core.util.json; /* * #%L diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/exception/JsonSyntaxException.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonSyntaxException.java similarity index 96% rename from duniter4j-core-client/src/main/java/org/duniter/core/client/service/exception/JsonSyntaxException.java rename to duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonSyntaxException.java index 1e3bc089..bc22463d 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/exception/JsonSyntaxException.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/json/JsonSyntaxException.java @@ -1,4 +1,4 @@ -package org.duniter.core.client.service.exception; +package org.duniter.core.util.json; /* * #%L diff --git a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/BlockchainService.java b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/BlockchainService.java index 7c765a24..b5f826d1 100644 --- a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/BlockchainService.java +++ b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/BlockchainService.java @@ -31,13 +31,13 @@ import com.google.common.collect.Lists; import org.duniter.core.client.model.bma.BlockchainBlock; import org.duniter.core.client.model.bma.BlockchainParameters; import org.duniter.core.client.model.bma.EndpointProtocol; -import org.duniter.core.client.model.bma.gson.JsonAttributeParser; +import org.duniter.core.util.json.JsonAttributeParser; import org.duniter.core.client.model.bma.jackson.JacksonUtils; import org.duniter.core.client.model.local.Peer; import org.duniter.core.client.service.bma.BlockchainRemoteService; import org.duniter.core.client.service.bma.NetworkRemoteService; import org.duniter.core.client.service.exception.BlockNotFoundException; -import org.duniter.core.client.service.exception.JsonSyntaxException; +import org.duniter.core.util.json.JsonSyntaxException; import org.duniter.core.exception.TechnicalException; import org.duniter.core.model.NullProgressionModel; import org.duniter.core.model.ProgressionModel; diff --git a/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/BlockchainUserEventService.java b/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/BlockchainUserEventService.java index a3447cb8..8420fe9d 100644 --- a/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/BlockchainUserEventService.java +++ b/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/BlockchainUserEventService.java @@ -33,12 +33,11 @@ import org.duniter.core.exception.TechnicalException; import org.duniter.core.service.CryptoService; import org.duniter.core.util.CollectionUtils; import org.duniter.core.util.websocket.WebsocketClientEndpoint; -import org.duniter.elasticsearch.user.PluginSettings; -import org.duniter.elasticsearch.user.service.AbstractService; import org.duniter.elasticsearch.service.BlockchainService; import org.duniter.elasticsearch.service.changes.ChangeEvent; import org.duniter.elasticsearch.service.changes.ChangeService; import org.duniter.elasticsearch.service.changes.ChangeSource; +import org.duniter.elasticsearch.user.PluginSettings; import org.duniter.elasticsearch.user.model.UserEvent; import org.duniter.elasticsearch.user.model.UserEventCodes; import org.elasticsearch.client.Client; @@ -46,7 +45,10 @@ import org.elasticsearch.common.inject.Inject; import org.nuiton.i18n.I18n; import java.io.IOException; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * Created by Benoit on 30/03/2015. diff --git a/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/UserEventService.java b/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/UserEventService.java index 79277567..8b48a96a 100644 --- a/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/UserEventService.java +++ b/duniter4j-es-user/src/main/java/org/duniter/elasticsearch/user/service/UserEventService.java @@ -191,8 +191,8 @@ public class UserEventService extends AbstractService implements ChangeService.C signedEvent.setSignature(signature); eventJson = toJson(signedEvent); } else { + logger.debug("Could not generate hash for new user event (no keyring)"); // Node has not keyring: do NOT sign it - // TODO : autogen a key pair ? eventJson = event.toJson(locale); } @@ -377,14 +377,23 @@ public class UserEventService extends AbstractService implements ChangeService.C } private KeyPair getNodeKeyPairOrNull(PluginSettings pluginSettings) { - + KeyPair result; if (StringUtils.isNotBlank(pluginSettings.getKeyringSalt()) && StringUtils.isNotBlank(pluginSettings.getKeyringPassword())) { - return cryptoService.getKeyPair(pluginSettings.getKeyringSalt(), + result = cryptoService.getKeyPair(pluginSettings.getKeyringSalt(), pluginSettings.getKeyringPassword()); } + else { + // Use a ramdom keypair + result = cryptoService.getRandomKeypair(); + logger.warn(String.format("No keyring in config. salt/password (or keyring) is need to signed user event documents. Will use a generated key [%s]", getNodePubKey(result))); + if (logger.isDebugEnabled()) { + logger.debug(String.format(" salt: " + pluginSettings.getKeyringSalt().replaceAll(".", "*"))); + logger.debug(String.format("password: " + pluginSettings.getKeyringPassword().replaceAll(".", "*"))); + } + } - return null; + return result; } private String getNodePubKey(KeyPair nodeKeyPair) { -- GitLab