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());