This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit bff0d8043f221673f6fdca53731b5667e7c9b843 Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Sun Aug 25 12:40:58 2024 -0400 Fix #1379 --- .../camel/karavan/api/AbstractApiResource.java | 29 ++++++++++++++-------- .../camel/karavan/api/ProjectGitResource.java | 10 +++----- .../apache/camel/karavan/api/ProjectResource.java | 12 ++++++--- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/AbstractApiResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/AbstractApiResource.java index a32124e6..631171fe 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/api/AbstractApiResource.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/AbstractApiResource.java @@ -18,7 +18,10 @@ package org.apache.camel.karavan.api; import io.quarkus.oidc.UserInfo; import io.quarkus.security.identity.SecurityIdentity; +import io.smallrye.jwt.auth.principal.DefaultJWTCallerPrincipal; import jakarta.inject.Inject; +import jakarta.ws.rs.core.SecurityContext; +import org.eclipse.microprofile.jwt.Claims; import java.util.HashMap; import java.util.Objects; @@ -29,18 +32,24 @@ public class AbstractApiResource { @Inject SecurityIdentity securityIdentity; - public HashMap<String, String> getIdentity() { + public HashMap<String, String> getIdentity(SecurityContext securityContext) { var identity = new HashMap<String, String>(); + identity.put("email", "kara...@test.org"); - if (securityIdentity != null && securityIdentity.getPrincipal() != null) { - identity.put("name", securityIdentity.getPrincipal().getName()); - } - if (securityIdentity != null && securityIdentity.getAttributes().get("email") != null && !securityIdentity.getAttributes().get("email").toString().isBlank()) { - identity.put("email", securityIdentity.getAttributes().get("email").toString()); - } else if (securityIdentity != null && securityIdentity.getAttributes().get("userinfo") != null) { - UserInfo userInfo = (UserInfo) securityIdentity.getAttributes().get("userinfo"); - String email = Objects.isNull(userInfo.getEmail()) || userInfo.getEmail().isBlank() ? "kara...@test.org" : userInfo.getEmail(); - identity.put("email", email); + if (securityContext != null && securityContext.getUserPrincipal() != null && securityContext.getUserPrincipal() instanceof DefaultJWTCallerPrincipal principal) { + identity.put("name", principal.getName()); + identity.put("email", principal.getClaim(Claims.email)); + } else if (securityIdentity != null) { + if (securityIdentity.getPrincipal() != null) { + identity.put("name", securityIdentity.getPrincipal().getName()); + } + if (securityIdentity.getAttributes().get("email") != null && !securityIdentity.getAttributes().get("email").toString().isBlank()) { + identity.put("email", securityIdentity.getAttributes().get("email").toString()); + } else if (securityIdentity.getAttributes().get("userinfo") != null) { + UserInfo userInfo = (UserInfo) securityIdentity.getAttributes().get("userinfo"); + String email = Objects.isNull(userInfo.getEmail()) || userInfo.getEmail().isBlank() ? "kara...@test.org" : userInfo.getEmail(); + identity.put("email", email); + } } return identity; } diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java index 57c7ce1d..a13c4f18 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java @@ -16,13 +16,11 @@ */ package org.apache.camel.karavan.api; -import io.quarkus.security.identity.SecurityIdentity; import io.vertx.core.json.JsonObject; import io.vertx.mutiny.core.eventbus.EventBus; import jakarta.inject.Inject; import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.*; import org.apache.camel.karavan.service.ProjectService; import org.jboss.logging.Logger; @@ -41,14 +39,12 @@ public class ProjectGitResource extends AbstractApiResource { @Inject EventBus eventBus; - @Inject - SecurityIdentity securityIdentity; @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public HashMap<String, String> push(HashMap<String, String> params) throws Exception { - var identity = getIdentity(); + public HashMap<String, String> push(HashMap<String, String> params, @Context HttpHeaders headers, @Context SecurityContext securityContext) throws Exception { + var identity = getIdentity(securityContext); var data = JsonObject.mapFrom(params); data.put("authorName", identity.get("name")); data.put("authorEmail", identity.get("email")); diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java index 72361f4e..069ae8f4 100644 --- a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java +++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java @@ -18,8 +18,10 @@ package org.apache.camel.karavan.api; import jakarta.inject.Inject; import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.SecurityContext; import org.apache.camel.karavan.KaravanCache; import org.apache.camel.karavan.docker.DockerService; import org.apache.camel.karavan.kubernetes.KubernetesService; @@ -92,7 +94,7 @@ public class ProjectResource extends AbstractApiResource { @DELETE @Produces(MediaType.APPLICATION_JSON) @Path("/{project}") - public void delete(@PathParam("project") String project, @QueryParam("deleteContainers") boolean deleteContainers) throws Exception { + public void delete(@PathParam("project") String project, @QueryParam("deleteContainers") boolean deleteContainers, @Context SecurityContext securityContext) throws Exception { String projectId = URLDecoder.decode(project, StandardCharsets.UTF_8); if (deleteContainers) { LOGGER.info("Deleting containers"); @@ -102,10 +104,12 @@ public class ProjectResource extends AbstractApiResource { LOGGER.info("Deleting deployments"); Response res4 = infrastructureResource.deleteDeployment(null, projectId); } - var identity = getIdentity(); + var identity = getIdentity(securityContext); + // delete from git before cache gitService.deleteProject(projectId, karavanCache.getProjectFiles(projectId), identity.get("name"), identity.get("email")); - karavanCache.getProjectFiles(projectId).forEach(file -> karavanCache.deleteProjectFile(projectId, file.getName())); - karavanCache.deleteProject(projectId); + // delete from cache + karavanCache.getProjectFiles(projectId).forEach(file -> karavanCache.deleteProjectFile(projectId, file.getName(), false)); + karavanCache.deleteProject(projectId, false); LOGGER.info("Project deleted"); }