diff --git a/avatar-realm-resource/pom.xml b/avatar-realm-resource/pom.xml
index 7dc79c3..4525fc2 100644
--- a/avatar-realm-resource/pom.xml
+++ b/avatar-realm-resource/pom.xml
@@ -33,6 +33,10 @@
${project.version}
provided
+
+ io.quarkus
+ quarkus-resteasy-reactive
+
io.minio
minio
diff --git a/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarAdminResource.java b/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarAdminResource.java
index a6c66ff..3121591 100644
--- a/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarAdminResource.java
+++ b/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarAdminResource.java
@@ -1,10 +1,11 @@
package org.gcube.keycloak.avatar;
-import java.io.InputStream;
+import java.nio.file.Files;
import org.gcube.keycloak.avatar.storage.AvatarStorageProvider;
import org.jboss.resteasy.annotations.cache.NoCache;
-import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
+import org.jboss.resteasy.reactive.RestForm;
+import org.jboss.resteasy.reactive.multipart.FileUpload;
import org.keycloak.common.ClientConnection;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
@@ -62,7 +63,7 @@ public class AvatarAdminResource extends AbstractAvatarResource {
@NoCache
@Path("/{user_id}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
- public Response uploadUserAvatarImage(@PathParam("user_id") String userId, MultipartFormDataInput input) {
+ public Response uploadUserAvatarImage(@PathParam("user_id") String userId, @RestForm(AVATAR_IMAGE_PARAMETER) FileUpload image) {
try {
if (auth == null) {
return Response.status(Response.Status.UNAUTHORIZED).build();
@@ -71,8 +72,7 @@ public class AvatarAdminResource extends AbstractAvatarResource {
RealmModel realm = session.getContext().getRealm();
UserModel user = session.users().getUserById(session.getContext().getRealm(), userId);
- InputStream imageInputStream = input.getFormDataPart(AVATAR_IMAGE_PARAMETER, InputStream.class, null);
- saveUserImage(realm, user, imageInputStream);
+ saveUserImage(realm, user, Files.newInputStream(image.uploadedFile()));
} catch (ForbiddenException e) {
return Response.status(Response.Status.FORBIDDEN).entity(e.getMessage()).build();
} catch (Exception e) {
diff --git a/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarResource.java b/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarResource.java
index 4bb907c..c4a7122 100644
--- a/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarResource.java
+++ b/avatar-realm-resource/src/main/java/org/gcube/keycloak/avatar/AvatarResource.java
@@ -1,14 +1,15 @@
package org.gcube.keycloak.avatar;
-import java.io.InputStream;
+import java.nio.file.Files;
import java.util.List;
import org.jboss.resteasy.annotations.cache.NoCache;
-import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
+import org.jboss.resteasy.reactive.RestForm;
+import org.jboss.resteasy.reactive.multipart.FileUpload;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.keycloak.http.HttpRequest;
import org.keycloak.models.KeycloakSession;
-import org.keycloak.services.resources.Cors;
+import org.keycloak.services.cors.Cors;
import org.keycloak.services.resources.RealmsResource;
import jakarta.ws.rs.Consumes;
@@ -74,7 +75,7 @@ public class AvatarResource extends AbstractAvatarResource {
@POST
@NoCache
@Consumes(MediaType.MULTIPART_FORM_DATA)
- public Response uploadCurrentUserAvatarImage(MultipartFormDataInput input, @Context UriInfo uriInfo) {
+ public Response uploadCurrentUserAvatarImage(@RestForm(AVATAR_IMAGE_PARAMETER) FileUpload image, @Context UriInfo uriInfo) {
if (auth == null) {
throw new NotAuthorizedException("Bearer");
}
@@ -86,9 +87,7 @@ public class AvatarResource extends AbstractAvatarResource {
logger.debugf("Uploading new avatar for user %s in realm %s", auth.getUser(), auth.getSession().getRealm());
Response response = null;
try {
- InputStream imageInputStream = input.getFormDataPart(AVATAR_IMAGE_PARAMETER, InputStream.class, null);
-
- saveUserImage(auth.getSession().getRealm(), auth.getUser(), imageInputStream);
+ saveUserImage(auth.getSession().getRealm(), auth.getUser(), Files.newInputStream(image.uploadedFile()));
if (uriInfo.getQueryParameters().containsKey("account")) {
UriBuilder uriBuilder = RealmsResource.accountUrl(session.getContext().getUri().getBaseUriBuilder());