Skip to content

Commit 17d1e68

Browse files
committed
feat: fetch current user via MyUserGetter (/users/own-info)
1 parent 58cde25 commit 17d1e68

File tree

10 files changed

+167
-41
lines changed

10 files changed

+167
-41
lines changed

src/main/java/io/weaviate/client/v1/async/users/Users.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
44

55
import io.weaviate.client.Config;
6+
import io.weaviate.client.v1.async.users.api.MyUserGetter;
67
import io.weaviate.client.v1.async.users.api.RoleAssigner;
78
import io.weaviate.client.v1.async.users.api.RoleRevoker;
89
import io.weaviate.client.v1.async.users.api.UserRolesGetter;
@@ -16,6 +17,11 @@ public class Users {
1617
private final Config config;
1718
private final AccessTokenProvider tokenProvider;
1819

20+
/** Get information about the current user. */
21+
public MyUserGetter myUserGetter() {
22+
return new MyUserGetter(client, config, tokenProvider);
23+
};
24+
1925
/** Get roles assigned to a user. */
2026
public UserRolesGetter userRolesGetter() {
2127
return new UserRolesGetter(client, config, tokenProvider);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.weaviate.client.v1.async.users.api;
2+
3+
import java.util.Optional;
4+
import java.util.concurrent.Future;
5+
6+
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
7+
import org.apache.hc.core5.concurrent.FutureCallback;
8+
import org.apache.hc.core5.http.ContentType;
9+
import org.apache.hc.core5.http.HttpResponse;
10+
11+
import io.weaviate.client.Config;
12+
import io.weaviate.client.base.AsyncBaseClient;
13+
import io.weaviate.client.base.AsyncClientResult;
14+
import io.weaviate.client.base.Response;
15+
import io.weaviate.client.base.Result;
16+
import io.weaviate.client.base.http.async.ResponseParser;
17+
import io.weaviate.client.v1.auth.provider.AccessTokenProvider;
18+
import io.weaviate.client.v1.users.api.WeaviateUser;
19+
import io.weaviate.client.v1.users.model.User;
20+
21+
public class MyUserGetter extends AsyncBaseClient<User> implements AsyncClientResult<User> {
22+
public MyUserGetter(CloseableHttpAsyncClient httpClient, Config config, AccessTokenProvider tokenProvider) {
23+
super(httpClient, config, tokenProvider);
24+
}
25+
26+
@Override
27+
public Future<Result<User>> run(FutureCallback<Result<User>> callback) {
28+
return sendGetRequest("/users/own-info", callback, new ResponseParser<User>() {
29+
@Override
30+
public Result<User> parse(HttpResponse response, String body, ContentType contentType) {
31+
Response<WeaviateUser> resp = this.serializer.toResponse(response.getCode(), body, WeaviateUser.class);
32+
User user = Optional.ofNullable(resp.getBody())
33+
.map(WeaviateUser::toUser)
34+
.orElse(null);
35+
return new Result<>(resp.getStatusCode(), user, resp.getErrors());
36+
}
37+
});
38+
}
39+
}

src/main/java/io/weaviate/client/v1/users/Users.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.weaviate.client.Config;
44
import io.weaviate.client.base.http.HttpClient;
5+
import io.weaviate.client.v1.users.api.MyUserGetter;
56
import io.weaviate.client.v1.users.api.RoleAssigner;
67
import io.weaviate.client.v1.users.api.RoleRevoker;
78
import io.weaviate.client.v1.users.api.UserRolesGetter;
@@ -13,6 +14,11 @@ public class Users {
1314
private final HttpClient httpClient;
1415
private final Config config;
1516

17+
/** Get information about the current user. */
18+
public MyUserGetter myUserGetter() {
19+
return new MyUserGetter(httpClient, config);
20+
};
21+
1622
/** Get roles assigned to a user. */
1723
public UserRolesGetter userRolesGetter() {
1824
return new UserRolesGetter(httpClient, config);
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.weaviate.client.v1.users.api;
2+
3+
import java.util.Optional;
4+
5+
import io.weaviate.client.Config;
6+
import io.weaviate.client.base.BaseClient;
7+
import io.weaviate.client.base.ClientResult;
8+
import io.weaviate.client.base.Response;
9+
import io.weaviate.client.base.Result;
10+
import io.weaviate.client.base.http.HttpClient;
11+
import io.weaviate.client.v1.users.model.User;
12+
13+
public class MyUserGetter extends BaseClient<WeaviateUser> implements ClientResult<User> {
14+
public MyUserGetter(HttpClient httpClient, Config config) {
15+
super(httpClient, config);
16+
}
17+
18+
@Override
19+
public Result<User> run() {
20+
Response<WeaviateUser> resp = sendGetRequest("/users/own-info", WeaviateUser.class);
21+
User user = Optional.ofNullable(resp.getBody()).map(WeaviateUser::toUser).orElse(null);
22+
return new Result<>(resp.getStatusCode(), user, resp.getErrors());
23+
}
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.weaviate.client.v1.users.api;
2+
3+
import java.util.List;
4+
5+
import io.weaviate.client.v1.rbac.api.WeaviateRole;
6+
import io.weaviate.client.v1.users.model.User;
7+
8+
public class WeaviateUser {
9+
String name;
10+
String id;
11+
List<WeaviateRole> roles;
12+
13+
public User toUser() {
14+
return new User(name, id, roles.stream().map(WeaviateRole::toRole).toList());
15+
}
16+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.weaviate.client.v1.users.model;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.stream.Collectors;
6+
7+
import io.weaviate.client.v1.rbac.model.Role;
8+
import lombok.Getter;
9+
10+
@Getter
11+
public class User {
12+
String name;
13+
String userId;
14+
Map<String, Role> roles;
15+
16+
public User(String name, String id, List<Role> roles) {
17+
this.name = name;
18+
this.userId = id;
19+
this.roles = roles.stream().collect(Collectors.toMap(Role::getName, r -> r));
20+
}
21+
}

src/test/java/io/weaviate/integration/client/async/rbac/ClientRbacTest.java

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import java.util.concurrent.Callable;
5+
import java.util.concurrent.Future;
56

67
import io.weaviate.client.Config;
78
import io.weaviate.client.WeaviateAuthClient;
@@ -11,6 +12,7 @@
1112
import io.weaviate.client.v1.rbac.model.Permission;
1213
import io.weaviate.client.v1.rbac.model.Role;
1314
import io.weaviate.integration.tests.rbac.ClientRbacTestSuite;
15+
import io.weaviate.integration.tests.users.ClientUsersTestSuite;
1416

1517
/**
1618
* ClientRbacTest is a {@link ClientRbacTestSuite.Rbac} implementation and a
@@ -29,75 +31,76 @@ public ClientRbacTest(Config config, String apiKey) {
2931
}
3032

3133
/**
32-
* Rethrow any exception as a RuntimeException to allow calling AsyncClient
33-
* methods without clashing with {@link ClientRbacTestSuite.Rbac} method
34-
* signatures.
34+
* Get Future result and rethrow any exception as a RuntimeException
35+
* to allow calling AsyncClient methods without clashing with
36+
* {@link ClientRbacTestSuite.Rbac} and {@link ClientUsersTestSuite.Users}
37+
* method signatures.
3538
*/
36-
protected <T> T rethrow(Callable<T> c) {
39+
protected <T> T rethrow(Callable<Future<T>> c) {
3740
try {
38-
return c.call();
41+
return c.call().get();
3942
} catch (Exception e) {
4043
throw new RuntimeException(e);
4144
}
4245
}
4346

4447
@Override
4548
public Result<Role> getRole(String role) {
46-
return rethrow(() -> roles.getter().withName(role).run().get());
49+
return rethrow(() -> roles.getter().withName(role).run());
4750
}
4851

4952
@Override
5053
public Result<List<Role>> getAll() {
51-
return rethrow(() -> roles.allGetter().run().get());
54+
return rethrow(() -> roles.allGetter().run());
5255
}
5356

5457
@Override
5558
public Result<List<String>> getAssignedUsers(String role) {
56-
return rethrow(() -> roles.assignedUsersGetter().withRole(role).run().get());
59+
return rethrow(() -> roles.assignedUsersGetter().withRole(role).run());
5760
}
5861

5962
@Override
6063
public void createRole(String role, Permission<?>... permissions) {
61-
rethrow(() -> roles.creator().withName(role).withPermissions(permissions).run().get());
64+
rethrow(() -> roles.creator().withName(role).withPermissions(permissions).run());
6265
}
6366

6467
@Override
6568
public void createRole(String role, Permission<?>[]... permissions) {
66-
rethrow(() -> roles.creator().withName(role).withPermissions(permissions).run().get());
69+
rethrow(() -> roles.creator().withName(role).withPermissions(permissions).run());
6770
}
6871

6972
@Override
7073
public void deleteRole(String role) {
71-
rethrow(() -> roles.deleter().withName(role).run().get());
74+
rethrow(() -> roles.deleter().withName(role).run());
7275
}
7376

7477
@Override
7578
public Result<Boolean> hasPermission(String role, Permission<?> perm) {
76-
return rethrow(() -> roles.permissionChecker().withRole(role).withPermission(perm).run().get());
79+
return rethrow(() -> roles.permissionChecker().withRole(role).withPermission(perm).run());
7780
}
7881

7982
@Override
8083
public Result<Boolean> exists(String role) {
81-
return rethrow(() -> roles.exists().withName(role).run().get());
84+
return rethrow(() -> roles.exists().withName(role).run());
8285
}
8386

8487
@Override
8588
public Result<?> addPermissions(String role, Permission<?>... permissions) {
86-
return rethrow(() -> roles.permissionAdder().withRole(role).withPermissions(permissions).run().get());
89+
return rethrow(() -> roles.permissionAdder().withRole(role).withPermissions(permissions).run());
8790
}
8891

8992
@Override
9093
public Result<?> addPermissions(String role, Permission<?>[]... permissions) {
91-
return rethrow(() -> roles.permissionAdder().withRole(role).withPermissions(permissions).run().get());
94+
return rethrow(() -> roles.permissionAdder().withRole(role).withPermissions(permissions).run());
9295
}
9396

9497
@Override
9598
public Result<?> removePermissions(String role, Permission<?>... permissions) {
96-
return rethrow(() -> roles.permissionRemover().withRole(role).withPermissions(permissions).run().get());
99+
return rethrow(() -> roles.permissionRemover().withRole(role).withPermissions(permissions).run());
97100
}
98101

99102
@Override
100103
public Result<?> removePermissions(String role, Permission<?>[]... permissions) {
101-
return rethrow(() -> roles.permissionRemover().withRole(role).withPermissions(permissions).run().get());
104+
return rethrow(() -> roles.permissionRemover().withRole(role).withPermissions(permissions).run());
102105
}
103106
}

src/test/java/io/weaviate/integration/client/async/users/ClientUsersTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.weaviate.client.v1.async.users.Users;
99
import io.weaviate.client.v1.auth.exception.AuthException;
1010
import io.weaviate.client.v1.rbac.model.Role;
11+
import io.weaviate.client.v1.users.model.User;
1112
import io.weaviate.integration.client.async.rbac.ClientRbacTest;
1213
import io.weaviate.integration.tests.users.ClientUsersTestSuite;
1314

@@ -28,18 +29,23 @@ public ClientUsersTest(Config config, String apiKey) {
2829
}
2930
}
3031

32+
@Override
33+
public Result<User> getMyUser() {
34+
return rethrow(() -> users.myUserGetter().run());
35+
}
36+
3137
@Override
3238
public Result<List<Role>> getUserRoles(String user) {
33-
return rethrow(() -> users.userRolesGetter().withUser(user).run().get());
39+
return rethrow(() -> users.userRolesGetter().withUser(user).run());
3440
}
3541

3642
@Override
3743
public Result<?> assignRoles(String user, String... roles) {
38-
return rethrow(() -> this.users.assigner().withUser(user).witRoles(roles).run().get());
44+
return rethrow(() -> this.users.assigner().withUser(user).witRoles(roles).run());
3945
}
4046

4147
@Override
4248
public Result<?> revokeRoles(String user, String... roles) {
43-
return rethrow(() -> this.users.revoker().withUser(user).witRoles(roles).run().get());
49+
return rethrow(() -> this.users.revoker().withUser(user).witRoles(roles).run());
4450
}
4551
}

src/test/java/io/weaviate/integration/client/users/ClientUsersTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.weaviate.client.v1.auth.exception.AuthException;
99
import io.weaviate.client.v1.rbac.model.Role;
1010
import io.weaviate.client.v1.users.Users;
11+
import io.weaviate.client.v1.users.model.User;
1112
import io.weaviate.integration.client.rbac.ClientRbacTest;
1213
import io.weaviate.integration.tests.users.ClientUsersTestSuite;
1314

@@ -23,6 +24,11 @@ public ClientUsersTest(Config config, String apiKey) {
2324
}
2425
}
2526

27+
@Override
28+
public Result<User> getMyUser() {
29+
return users.myUserGetter().run();
30+
}
31+
2632
@Override
2733
public Result<List<Role>> getUserRoles(String user) {
2834
return users.userRolesGetter().withUser(user).run();

0 commit comments

Comments
 (0)