Skip to content

Commit ce9f7b2

Browse files
authored
Project mangled encrypted field names. (#2058)
Closes #2057.
1 parent 5b5a8f6 commit ce9f7b2

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1154,7 +1154,7 @@ public <R> R getPropertyValue(final CouchbasePersistentProperty property) {
11541154
}
11551155
}
11561156

1157-
String maybeMangle(PersistentProperty<?> property) {
1157+
public String maybeMangle(PersistentProperty<?> property) {
11581158
Assert.notNull(property, "property");
11591159
if (!conversions.hasValueConverter(property)) {
11601160
return ((CouchbasePersistentProperty) property).getFieldName();

src/main/java/org/springframework/data/couchbase/repository/query/StringBasedN1qlQueryParser.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.slf4j.LoggerFactory;
3333

3434
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
35+
import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter;
3536
import org.springframework.data.couchbase.core.mapping.CouchbaseDocument;
3637
import org.springframework.data.couchbase.core.mapping.CouchbaseList;
3738
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentProperty;
@@ -328,7 +329,13 @@ private void getProjectedFieldsInternal(String bucketName, CouchbasePersistentPr
328329
if (fieldList == null || fieldList.contains(prop.getFieldName())) {
329330
PersistentPropertyPath<CouchbasePersistentProperty> path = couchbaseConverter.getMappingContext()
330331
.getPersistentPropertyPath(prop.getName(), persistentEntity.getTypeInformation().getType());
331-
projectField = N1qlQueryCreator.addMetaIfRequired(bucketName, path, prop, persistentEntity).toString();
332+
String unmangled = prop.getFieldName();
333+
String maybeMangled =((MappingCouchbaseConverter)couchbaseConverter).maybeMangle(prop);
334+
if(maybeMangled.equals(unmangled)) {
335+
projectField = N1qlQueryCreator.addMetaIfRequired(bucketName, path, prop, persistentEntity).toString();
336+
} else {
337+
projectField = i(maybeMangled).toString();
338+
}
332339
if (sb.length() > 0) {
333340
sb.append(", ");
334341
}

src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryFieldLevelEncryptionIntegrationTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,14 @@ void writeSpring_readSpring() {
154154
assertFalse(userEncryptedRepository.existsById(user.getId()));
155155
userEncryptedRepository.save(user);
156156
// read the user with Spring
157+
157158
Optional<UserEncrypted> writeSpringReadSpring = userEncryptedRepository.findById(user.getId());
158159
assertTrue(writeSpringReadSpring.isPresent());
159160
writeSpringReadSpring.ifPresent(u -> assertEquals(user, u));
160161

162+
List<UserEncrypted> writeSpringReadSpring2 = userEncryptedRepository.findAll();
163+
assertEquals(user, writeSpringReadSpring2.stream().filter(u -> u.getId().equals(user.getId())).findFirst().get());
164+
161165
if (cleanAfter) {
162166
try {
163167
couchbaseTemplate.removeById(UserEncrypted.class).one(user.getId());

0 commit comments

Comments
 (0)