You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/06/10 09:58:21 UTC
[cayenne] 02/02: CAY-2584 Crypto: can't use ColumnSelect with
encrypted columns
This is an automated email from the ASF dual-hosted git repository.
abulatski pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 42f57fc34a7973a9e61de9f8cd343a40674faf5f
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Mon Jun 10 12:39:57 2019 +0300
CAY-2584 Crypto: can't use ColumnSelect with encrypted columns
---
.../org/apache/cayenne/crypto/CryptoModule.java | 39 ++++++----------------
.../cayenne/crypto/CryptoServerModuleProvider.java | 11 +++---
.../reader/CryptoRowReaderFactoryDecorator.java | 10 +++---
.../jdbc/reader/DefaultRowReaderFactory.java | 18 +++++-----
4 files changed, 29 insertions(+), 49 deletions(-)
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java
index 5c75ad5..d2a5e6f 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java
@@ -18,6 +18,14 @@
*/
package org.apache.cayenne.crypto;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Types;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.Date;
+
import org.apache.cayenne.access.jdbc.reader.RowReaderFactory;
import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
import org.apache.cayenne.crypto.batch.CryptoBatchTranslatorFactoryDecorator;
@@ -33,38 +41,11 @@ import org.apache.cayenne.crypto.transformer.TransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.DefaultBytesTransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.LazyBytesTransformerFactory;
-import org.apache.cayenne.crypto.transformer.value.Base64StringConverter;
-import org.apache.cayenne.crypto.transformer.value.BigDecimalConverter;
-import org.apache.cayenne.crypto.transformer.value.BigIntegerConverter;
-import org.apache.cayenne.crypto.transformer.value.BooleanConverter;
-import org.apache.cayenne.crypto.transformer.value.ByteConverter;
-import org.apache.cayenne.crypto.transformer.value.BytesConverter;
-import org.apache.cayenne.crypto.transformer.value.BytesToBytesConverter;
-import org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory;
-import org.apache.cayenne.crypto.transformer.value.DoubleConverter;
-import org.apache.cayenne.crypto.transformer.value.FloatConverter;
-import org.apache.cayenne.crypto.transformer.value.IntegerConverter;
-import org.apache.cayenne.crypto.transformer.value.LazyValueTransformerFactory;
-import org.apache.cayenne.crypto.transformer.value.LocalDateConverter;
-import org.apache.cayenne.crypto.transformer.value.LocalDateTimeConverter;
-import org.apache.cayenne.crypto.transformer.value.LocalTimeConverter;
-import org.apache.cayenne.crypto.transformer.value.LongConverter;
-import org.apache.cayenne.crypto.transformer.value.ShortConverter;
-import org.apache.cayenne.crypto.transformer.value.Utf8StringConverter;
-import org.apache.cayenne.crypto.transformer.value.UtilDateConverter;
-import org.apache.cayenne.crypto.transformer.value.ValueTransformerFactory;
+import org.apache.cayenne.crypto.transformer.value.*;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.MapBuilder;
import org.apache.cayenne.di.Module;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Types;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.util.Date;
-
/**
* Contains cryptography extensions for Cayenne.
*
@@ -135,7 +116,7 @@ public class CryptoModule implements Module {
binder.bind(ColumnMapper.class).toInstance(new PatternColumnMapper(DEFAULT_COLUMN_MAPPER_PATTERN));
binder.decorate(BatchTranslatorFactory.class).before(CryptoBatchTranslatorFactoryDecorator.class);
- binder.decorate(RowReaderFactory.class).before(CryptoRowReaderFactoryDecorator.class);
+ binder.bind(RowReaderFactory.class).to(CryptoRowReaderFactoryDecorator.class);
// decorate Crypto's own services to allow Cayenne to operate over plaintext entities even if crypto keys are
// not available.
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java
index 9fe8bc8..0e79c3a 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java
@@ -18,12 +18,13 @@
*/
package org.apache.cayenne.crypto;
-import org.apache.cayenne.configuration.server.CayenneServerModuleProvider;
-import org.apache.cayenne.di.Module;
-
import java.util.Collection;
import java.util.Collections;
+import org.apache.cayenne.configuration.server.CayenneServerModuleProvider;
+import org.apache.cayenne.configuration.server.ServerModule;
+import org.apache.cayenne.di.Module;
+
/**
* @since 4.0
*/
@@ -41,7 +42,7 @@ public class CryptoServerModuleProvider implements CayenneServerModuleProvider {
@Override
public Collection<Class<? extends Module>> overrides() {
- // we don't override anything, we only decorate ServerModule services...
- return Collections.emptyList();
+ Collection modules = Collections.singletonList(ServerModule.class);
+ return modules;
}
}
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java
index e60600a..2b2f764 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java
@@ -18,11 +18,13 @@
****************************************************************/
package org.apache.cayenne.crypto.reader;
+import java.sql.ResultSet;
+import java.util.Map;
+
import org.apache.cayenne.access.jdbc.ColumnDescriptor;
import org.apache.cayenne.access.jdbc.RowDescriptor;
import org.apache.cayenne.access.jdbc.reader.DefaultRowReaderFactory;
import org.apache.cayenne.access.jdbc.reader.RowReader;
-import org.apache.cayenne.access.jdbc.reader.RowReaderFactory;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.access.types.ExtendedTypeMap;
import org.apache.cayenne.crypto.map.ColumnMapper;
@@ -41,9 +43,6 @@ import org.apache.cayenne.query.EntityResultSegment;
import org.apache.cayenne.query.QueryMetadata;
import org.apache.cayenne.query.ScalarResultSegment;
-import java.sql.ResultSet;
-import java.util.Map;
-
public class CryptoRowReaderFactoryDecorator extends DefaultRowReaderFactory {
private TransformerFactory transformerFactory;
@@ -51,8 +50,7 @@ public class CryptoRowReaderFactoryDecorator extends DefaultRowReaderFactory {
private BytesTransformerFactory bytesTransformerFactory;
private ValueTransformerFactory valueTransformerFactory;
- public CryptoRowReaderFactoryDecorator(@Inject RowReaderFactory delegate,
- @Inject TransformerFactory transformerFactory,
+ public CryptoRowReaderFactoryDecorator(@Inject TransformerFactory transformerFactory,
@Inject ColumnMapper columnMapper,
@Inject BytesTransformerFactory bytesTransformerFactory,
@Inject ValueTransformerFactory valueTransformerFactory) {
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java
index 507cbbb..4d90adf 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java
@@ -18,6 +18,13 @@
****************************************************************/
package org.apache.cayenne.access.jdbc.reader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.jdbc.ColumnDescriptor;
import org.apache.cayenne.access.jdbc.RowDescriptor;
@@ -33,13 +40,6 @@ import org.apache.cayenne.query.QueryMetadata;
import org.apache.cayenne.query.ScalarResultSegment;
import org.apache.cayenne.reflect.ClassDescriptor;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
/**
* @since 4.0
*/
@@ -108,7 +108,7 @@ public class DefaultRowReaderFactory implements RowReaderFactory {
}
}
- private RowReader<?> createFullRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata,
+ protected RowReader<?> createFullRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata,
PostprocessorFactory postProcessorFactory) {
if (queryMetadata.getPageSize() > 0) {
@@ -120,7 +120,7 @@ public class DefaultRowReaderFactory implements RowReaderFactory {
}
}
- private class PostprocessorFactory {
+ protected class PostprocessorFactory {
private QueryMetadata queryMetadata;
private ExtendedTypeMap extendedTypes;