Skip to content

Commit 79cb019

Browse files
author
Julien Ruaux
committed
feat: Added username, password, and other connection config params
1 parent 7765c46 commit 79cb019

File tree

3 files changed

+80
-5
lines changed

3 files changed

+80
-5
lines changed

src/main/java/com/redis/trino/RediSearchClientModule.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import static io.airlift.configuration.ConfigBinder.configBinder;
2727
import static java.util.Objects.requireNonNull;
2828

29-
import java.util.Optional;
29+
import java.time.Duration;
3030

3131
import javax.inject.Singleton;
3232

@@ -36,6 +36,7 @@
3636
import com.google.inject.Scopes;
3737
import com.redis.lettucemod.RedisModulesClient;
3838

39+
import io.lettuce.core.RedisURI;
3940
import io.trino.spi.type.TypeManager;
4041

4142
public class RediSearchClientModule implements Module {
@@ -50,15 +51,28 @@ public void configure(Binder binder) {
5051
configBinder(binder).bindConfig(RediSearchConfig.class);
5152
}
5253

54+
@SuppressWarnings("deprecation")
5355
@Singleton
5456
@Provides
5557
public static RediSearchSession createRediSearchSession(TypeManager typeManager, RediSearchConfig config) {
5658
requireNonNull(config, "config is null");
57-
Optional<String> uri = config.getUri();
58-
if (uri.isPresent()) {
59-
RedisModulesClient client = RedisModulesClient.create(uri.get());
59+
if (config.getUri().isPresent()) {
60+
RedisURI uri = RedisURI.create(config.getUri().get());
61+
if (config.isInsecure()) {
62+
uri.setVerifyPeer(false);
63+
}
64+
if (config.isTls()) {
65+
uri.setSsl(true);
66+
}
67+
config.getUsername().ifPresent(uri::setUsername);
68+
config.getPassword().ifPresent(uri::setPassword);
69+
if (config.getTimeout() > 0) {
70+
uri.setTimeout(Duration.ofSeconds(config.getTimeout()));
71+
}
72+
RedisModulesClient client = RedisModulesClient.create(uri);
6073
return new RediSearchSession(typeManager, client.connect(), config);
6174
}
6275
throw new IllegalArgumentException("No Redis URI specified");
6376
}
77+
6478
}

src/main/java/com/redis/trino/RediSearchConfig.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ public class RediSearchConfig {
4242

4343
private String defaultSchema = DEFAULT_SCHEMA;
4444
private Optional<String> uri = Optional.empty();
45+
private Optional<String> username = Optional.empty();
46+
private Optional<String> password = Optional.empty();
4547
private boolean caseInsensitiveNameMatching;
48+
private boolean insecure;
49+
private boolean tls;
50+
private long timeout;
4651
private long defaultLimit = DEFAULT_LIMIT;
4752
private long cursorCount = 0; // Use RediSearch default
4853
private long tableCacheExpiration = DEFAULT_TABLE_CACHE_EXPIRATION.toSeconds();
@@ -116,6 +121,30 @@ public RediSearchConfig setUri(String uri) {
116121
return this;
117122
}
118123

124+
public Optional<String> getUsername() {
125+
return username;
126+
}
127+
128+
@Config("redisearch.username")
129+
@ConfigDescription("Redis connection username")
130+
@ConfigSecuritySensitive
131+
public RediSearchConfig setUsername(String username) {
132+
this.username = Optional.ofNullable(username);
133+
return this;
134+
}
135+
136+
public Optional<String> getPassword() {
137+
return password;
138+
}
139+
140+
@Config("redisearch.password")
141+
@ConfigDescription("Redis connection password")
142+
@ConfigSecuritySensitive
143+
public RediSearchConfig setPassword(String password) {
144+
this.password = Optional.ofNullable(password);
145+
return this;
146+
}
147+
119148
public boolean isCaseInsensitiveNameMatching() {
120149
return caseInsensitiveNameMatching;
121150
}
@@ -127,4 +156,36 @@ public RediSearchConfig setCaseInsensitiveNameMatching(boolean caseInsensitiveNa
127156
return this;
128157
}
129158

159+
public boolean isInsecure() {
160+
return insecure;
161+
}
162+
163+
@Config("redisearch.insecure")
164+
@ConfigDescription("Allow insecure connections (e.g. invalid certificates) to Redis when using SSL")
165+
public RediSearchConfig setInsecure(boolean insecure) {
166+
this.insecure = insecure;
167+
return this;
168+
}
169+
170+
public boolean isTls() {
171+
return tls;
172+
}
173+
174+
@Config("redisearch.tls")
175+
@ConfigDescription("Establish a secure TLS connection")
176+
public RediSearchConfig setTls(boolean tls) {
177+
this.tls = tls;
178+
return this;
179+
}
180+
181+
public long getTimeout() {
182+
return timeout;
183+
}
184+
185+
@Config("redisearch.timeout")
186+
@ConfigDescription("Redis command timeout in seconds")
187+
public RediSearchConfig setTimeout(long timeout) {
188+
this.timeout = timeout;
189+
return this;
190+
}
130191
}

src/test/java/com/redis/trino/TestRediSearchConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class TestRediSearchConfig {
1616

1717
@Test
1818
public void testDefaults() {
19-
assertRecordedDefaults(recordDefaults(RediSearchConfig.class).setUri(null)
19+
assertRecordedDefaults(recordDefaults(RediSearchConfig.class).setUri(null).setInsecure(false).setUsername(null).setPassword(null).setTimeout(0).setTls(false)
2020
.setDefaultSchema(RediSearchConfig.DEFAULT_SCHEMA).setDefaultLimit(RediSearchConfig.DEFAULT_LIMIT)
2121
.setCaseInsensitiveNameMatching(false).setCursorCount(0)
2222
.setTableCacheExpiration(RediSearchConfig.DEFAULT_TABLE_CACHE_EXPIRATION.toSeconds())

0 commit comments

Comments
 (0)