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");
     }
 

Reply via email to