diff --git a/README.md b/README.md
index 07b1f8c34..eb0d53585 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Weaviate Java client
+# Weaviate Java client
[](https://github.com/weaviate/java-client/actions/workflows/.github/workflows/test.yaml)
diff --git a/src/it/java/io/weaviate/integration/RbacITest.java b/src/it/java/io/weaviate/integration/RbacITest.java
index 57d6ca7e7..55a20ece7 100644
--- a/src/it/java/io/weaviate/integration/RbacITest.java
+++ b/src/it/java/io/weaviate/integration/RbacITest.java
@@ -84,15 +84,6 @@ public void test_roles_Lifecycle() throws IOException {
Permission.groups("my-group", GroupType.OIDC, GroupsPermission.Action.READ));
});
- requireAtLeast(Weaviate.Version.V132, () -> {
- permissions.add(
- Permission.aliases("ThingsAlias", myCollection, AliasesPermission.Action.CREATE));
- });
- requireAtLeast(Weaviate.Version.V133, () -> {
- permissions.add(
- Permission.groups("my-group", GroupType.OIDC, GroupsPermission.Action.READ));
- });
-
// Act: create role
client.roles.create(nsRole, permissions);
diff --git a/src/main/java/io/weaviate/client6/v1/api/Authentication.java b/src/main/java/io/weaviate/client6/v1/api/Authentication.java
index 1c8776c1c..eb6a83ec6 100644
--- a/src/main/java/io/weaviate/client6/v1/api/Authentication.java
+++ b/src/main/java/io/weaviate/client6/v1/api/Authentication.java
@@ -56,6 +56,26 @@ public static Authentication resourceOwnerPassword(String username, String passw
};
}
+ /**
+ * Authenticate using Resource Owner Password Credentials authorization grant.
+ *
+ * @param clientSecret Client secret.
+ * @param username Resource owner username.
+ * @param password Resource owner password.
+ * @param scopes Client scopes.
+ *
+ * @return Authentication provider.
+ * @throws WeaviateOAuthException if an error occurred at any point of the token
+ * exchange process.
+ */
+ public static Authentication resourceOwnerPasswordCredentials(String clientSecret, String username, String password,
+ List scopes) {
+ return transport -> {
+ OidcConfig oidc = OidcUtils.getConfig(transport).withScopes(scopes).withScopes("offline_access");
+ return TokenProvider.resourceOwnerPasswordCredentials(oidc, clientSecret, username, password);
+ };
+ }
+
/**
* Authenticate using Client Credentials authorization grant.
*
diff --git a/src/main/java/io/weaviate/client6/v1/api/Config.java b/src/main/java/io/weaviate/client6/v1/api/Config.java
index 33baabb63..c3c16623e 100644
--- a/src/main/java/io/weaviate/client6/v1/api/Config.java
+++ b/src/main/java/io/weaviate/client6/v1/api/Config.java
@@ -9,6 +9,7 @@
import io.weaviate.client6.v1.internal.BuildInfo;
import io.weaviate.client6.v1.internal.ObjectBuilder;
+import io.weaviate.client6.v1.internal.Proxy;
import io.weaviate.client6.v1.internal.Timeout;
import io.weaviate.client6.v1.internal.TokenProvider;
import io.weaviate.client6.v1.internal.TransportOptions;
@@ -24,7 +25,8 @@ public record Config(
Map headers,
Authentication authentication,
TrustManagerFactory trustManagerFactory,
- Timeout timeout) {
+ Timeout timeout,
+ Proxy proxy) {
public static Config of(Function> fn) {
return fn.apply(new Custom()).build();
@@ -40,7 +42,8 @@ private Config(Builder> builder) {
builder.headers,
builder.authentication,
builder.trustManagerFactory,
- builder.timeout);
+ builder.timeout,
+ builder.proxy);
}
RestTransportOptions restTransportOptions() {
@@ -48,7 +51,7 @@ RestTransportOptions restTransportOptions() {
}
RestTransportOptions restTransportOptions(TokenProvider tokenProvider) {
- return new RestTransportOptions(scheme, httpHost, httpPort, headers, tokenProvider, trustManagerFactory, timeout);
+ return new RestTransportOptions(scheme, httpHost, httpPort, headers, tokenProvider, trustManagerFactory, timeout, proxy);
}
GrpcChannelOptions grpcTransportOptions() {
@@ -56,7 +59,7 @@ GrpcChannelOptions grpcTransportOptions() {
}
GrpcChannelOptions grpcTransportOptions(TokenProvider tokenProvider) {
- return new GrpcChannelOptions(scheme, grpcHost, grpcPort, headers, tokenProvider, trustManagerFactory, timeout);
+ return new GrpcChannelOptions(scheme, grpcHost, grpcPort, headers, tokenProvider, trustManagerFactory, timeout, proxy);
}
private abstract static class Builder> implements ObjectBuilder {
@@ -70,6 +73,7 @@ private abstract static class Builder> implements O
protected TrustManagerFactory trustManagerFactory;
protected Timeout timeout = new Timeout();
protected Map headers = new HashMap<>();
+ protected Proxy proxy;
/**
* Set URL scheme. Subclasses may increase the visibility of this method to
@@ -175,6 +179,15 @@ public SelfT timeout(int initSeconds, int querySeconds, int insertSeconds) {
return (SelfT) this;
}
+ /**
+ * Set proxy for all requests.
+ */
+ @SuppressWarnings("unchecked")
+ public SelfT proxy(Proxy proxy) {
+ this.proxy = proxy;
+ return (SelfT) this;
+ }
+
/**
* Weaviate will use the URL in this header to call Weaviate Embeddings
* Service if an appropriate vectorizer is configured for collection.
diff --git a/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java b/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java
index 63e14c3bf..6150ab4d5 100644
--- a/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java
+++ b/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java
@@ -63,14 +63,13 @@ public class WeaviateClient implements AutoCloseable {
public final WeaviateClusterClient cluster;
public WeaviateClient(Config config) {
- RestTransportOptions restOpt;
+ RestTransportOptions restOpt = config.restTransportOptions();
GrpcChannelOptions grpcOpt;
if (config.authentication() == null) {
- restOpt = config.restTransportOptions();
grpcOpt = config.grpcTransportOptions();
} else {
TokenProvider tokenProvider;
- try (final var noAuthRest = new DefaultRestTransport(config.restTransportOptions())) {
+ try (final var noAuthRest = new DefaultRestTransport(restOpt)) {
tokenProvider = config.authentication().getTokenProvider(noAuthRest);
} catch (Exception e) {
// Generally exceptions are caught in TokenProvider internals.
@@ -126,6 +125,10 @@ public WeaviateClient(Config config) {
this.config = config;
}
+ public Config getConfig() {
+ return config;
+ }
+
/**
* Create {@link WeaviateClientAsync} with identical configurations.
* It is a shorthand for:
diff --git a/src/main/java/io/weaviate/client6/v1/api/collections/WeaviateCollectionsClient.java b/src/main/java/io/weaviate/client6/v1/api/collections/WeaviateCollectionsClient.java
index c0fca9bbc..e6101f682 100644
--- a/src/main/java/io/weaviate/client6/v1/api/collections/WeaviateCollectionsClient.java
+++ b/src/main/java/io/weaviate/client6/v1/api/collections/WeaviateCollectionsClient.java
@@ -75,7 +75,7 @@ public CollectionHandle