Skip to content

Commit 559ba38

Browse files
committed
Project mangled encrypted field names. (#2058)
Closes #2057.
1 parent 728aabd commit 559ba38

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
@@ -1130,7 +1130,7 @@ public <R> R getPropertyValue(final CouchbasePersistentProperty property) {
11301130
}
11311131
}
11321132

1133-
String maybeMangle(PersistentProperty<?> property) {
1133+
public String maybeMangle(PersistentProperty<?> property) {
11341134
Assert.notNull(property, "property");
11351135
if (!conversions.hasValueConverter(property)) {
11361136
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
@@ -34,6 +34,7 @@
3434
import org.slf4j.Logger;
3535
import org.slf4j.LoggerFactory;
3636
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
37+
import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter;
3738
import org.springframework.data.couchbase.core.mapping.CouchbaseDocument;
3839
import org.springframework.data.couchbase.core.mapping.CouchbaseList;
3940
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentProperty;
@@ -332,7 +333,13 @@ private void getProjectedFieldsInternal(String bucketName, CouchbasePersistentPr
332333
if (fieldList == null || fieldList.contains(prop.getFieldName())) {
333334
PersistentPropertyPath<CouchbasePersistentProperty> path = couchbaseConverter.getMappingContext()
334335
.getPersistentPropertyPath(prop.getName(), persistentEntity.getTypeInformation().getType());
335-
projectField = N1qlQueryCreator.addMetaIfRequired(bucketName, path, prop, persistentEntity).toString();
336+
String unmangled = prop.getFieldName();
337+
String maybeMangled =((MappingCouchbaseConverter)couchbaseConverter).maybeMangle(prop);
338+
if(maybeMangled.equals(unmangled)) {
339+
projectField = N1qlQueryCreator.addMetaIfRequired(bucketName, path, prop, persistentEntity).toString();
340+
} else {
341+
projectField = i(maybeMangled).toString();
342+
}
336343
if (sb.length() > 0) {
337344
sb.append(", ");
338345
}

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)