This is an automated email from the ASF dual-hosted git repository.

SvenO3 pushed a commit to branch 
improve-rest-authorizations-for-different-ressources
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to 
refs/heads/improve-rest-authorizations-for-different-ressources by this push:
     new 94fdb89446 Clean up pipeline canvas metadata resource
94fdb89446 is described below

commit 94fdb8944688bae6f2a0d1fbf7595022ab277d88
Author: Sven Oehler <[email protected]>
AuthorDate: Wed Jul 1 18:09:21 2026 +0200

    Clean up pipeline canvas metadata resource
---
 .../rest/impl/PipelineCanvasMetadataResource.java  | 68 +++++++++-------------
 .../impl/pe/PipelineElementTemplateResource.java   |  1 -
 .../lib/apis/pipeline-canvas-metadata.service.ts   | 12 +---
 .../save-pipeline/save-pipeline.component.ts       | 17 ++----
 4 files changed, 33 insertions(+), 65 deletions(-)

diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/PipelineCanvasMetadataResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/PipelineCanvasMetadataResource.java
index f081e4b579..ee86ad9d14 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/PipelineCanvasMetadataResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/PipelineCanvasMetadataResource.java
@@ -18,18 +18,19 @@
 package org.apache.streampipes.rest.impl;
 
 import org.apache.streampipes.model.canvas.PipelineCanvasMetadata;
+import org.apache.streampipes.model.client.user.DefaultPrivilege;
 import org.apache.streampipes.model.message.Notifications;
-import org.apache.streampipes.rest.core.base.impl.AbstractRestResource;
+import 
org.apache.streampipes.rest.core.base.impl.AbstractAuthGuardedRestResource;
 import org.apache.streampipes.rest.shared.exception.SpMessageException;
 import 
org.apache.streampipes.storage.api.pipeline.IPipelineCanvasMetadataStorage;
 
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -37,9 +38,10 @@ import 
org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/api/v2/pipeline-canvas-metadata")
-public class PipelineCanvasMetadataResource extends AbstractRestResource {
+public class PipelineCanvasMetadataResource extends 
AbstractAuthGuardedRestResource {
 
   @GetMapping(path = "/pipeline/{pipelineId}", produces = 
MediaType.APPLICATION_JSON_VALUE)
+  @PreAuthorize("this.hasReadAuthority() and hasPermission(#pipelineId, 
'READ')")
   public ResponseEntity<PipelineCanvasMetadata> 
getPipelineCanvasMetadataForPipeline(
       @PathVariable("pipelineId") String pipelineId) {
     try {
@@ -50,65 +52,49 @@ public class PipelineCanvasMetadataResource extends 
AbstractRestResource {
     }
   }
 
-  @GetMapping(path = "{canvasId}", produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<PipelineCanvasMetadata> getPipelineCanvasMetadata(
-      @PathVariable("canvasId") String pipelineCanvasId) {
-    try {
-      return ok(getPipelineCanvasMetadataStorage()
-          .getElementById(pipelineCanvasId));
-    } catch (IllegalArgumentException e) {
-      throw new SpMessageException(HttpStatus.BAD_REQUEST, 
Notifications.error(e.getMessage()));
-    }
-  }
-
-  @PostMapping(
-      consumes = MediaType.APPLICATION_JSON_VALUE,
-      produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<Void> storePipelineCanvasMetadata(@RequestBody 
PipelineCanvasMetadata pipelineCanvasMetadata) {
-    getPipelineCanvasMetadataStorage().persist(pipelineCanvasMetadata);
-    return ok();
-  }
-
-  @DeleteMapping(
-      path = "{canvasId}",
-      produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<Void> 
deletePipelineCanvasMetadata(@PathVariable("canvasId") String pipelineCanvasId) 
{
-    PipelineCanvasMetadata metadata = find(pipelineCanvasId);
-    getPipelineCanvasMetadataStorage().deleteElement(metadata);
-    return ok();
-  }
-
   @DeleteMapping(
       path = "/pipeline/{pipelineId}",
       produces = MediaType.APPLICATION_JSON_VALUE)
+  @PreAuthorize("this.hasWriteAuthority() and hasPermission(#pipelineId, 
'WRITE')")
   public ResponseEntity<Void> 
deletePipelineCanvasMetadataForPipeline(@PathVariable("pipelineId") String 
pipelineId) {
     PipelineCanvasMetadata metadata =
         
getPipelineCanvasMetadataStorage().getPipelineCanvasMetadataForPipeline(pipelineId);
-    getPipelineCanvasMetadataStorage().deleteElement(metadata);
+    if (metadata != null) {
+      getPipelineCanvasMetadataStorage().deleteElement(metadata);
+    }
     return ok();
   }
 
   @PutMapping(
-      path = "{canvasId}",
+      path = "/pipeline/{pipelineId}",
       consumes = MediaType.APPLICATION_JSON_VALUE,
       produces = MediaType.APPLICATION_JSON_VALUE)
-  public ResponseEntity<Void> 
updatePipelineCanvasMetadata(@PathVariable("canvasId") String pipelineCanvasId,
+  @PreAuthorize("this.hasWriteAuthority() and hasPermission(#pipelineId, 
'WRITE')")
+  public ResponseEntity<Void> 
updatePipelineCanvasMetadata(@PathVariable("pipelineId") String pipelineId,
                                                            @RequestBody 
PipelineCanvasMetadata pipelineCanvasMetadata) {
-    try {
-      var existing = 
getPipelineCanvasMetadataStorage().getElementById(pipelineCanvasMetadata.getId());
+    var existing = 
getPipelineCanvasMetadataStorage().getPipelineCanvasMetadataForPipeline(pipelineId);
+    pipelineCanvasMetadata.setPipelineId(pipelineId);
+    if (existing != null) {
+      pipelineCanvasMetadata.setId(existing.getId());
       pipelineCanvasMetadata.setRev(existing.getRev());
       getPipelineCanvasMetadataStorage().updateElement(pipelineCanvasMetadata);
-    } catch (IllegalArgumentException e) {
+    } else {
+      pipelineCanvasMetadata.setId(null);
+      pipelineCanvasMetadata.setRev(null);
       getPipelineCanvasMetadataStorage().persist(pipelineCanvasMetadata);
     }
     return ok();
   }
 
-  private PipelineCanvasMetadata find(String canvasId) {
-    return getPipelineCanvasMetadataStorage().getElementById(canvasId);
-  }
-
   private IPipelineCanvasMetadataStorage getPipelineCanvasMetadataStorage() {
     return getNoSqlStorage().getPipelineCanvasMetadataStorage();
   }
+
+  public boolean hasWriteAuthority() {
+    return 
isAdminOrHasAnyAuthority(DefaultPrivilege.Constants.PRIVILEGE_WRITE_PIPELINE_VALUE);
+  }
+
+  public boolean hasReadAuthority() {
+    return 
isAdminOrHasAnyAuthority(DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_VALUE);
+  }
 }
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/pe/PipelineElementTemplateResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/pe/PipelineElementTemplateResource.java
index 7fce6cc8b0..33eaa6e154 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/pe/PipelineElementTemplateResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/pe/PipelineElementTemplateResource.java
@@ -27,7 +27,6 @@ import 
org.apache.streampipes.model.graph.DataProcessorInvocation;
 import org.apache.streampipes.model.graph.DataSinkInvocation;
 import org.apache.streampipes.model.template.PipelineElementTemplate;
 import 
org.apache.streampipes.rest.core.base.impl.AbstractAuthGuardedRestResource;
-import org.apache.streampipes.rest.core.base.impl.AbstractRestResource;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
diff --git 
a/ui/projects/streampipes/platform-services/src/lib/apis/pipeline-canvas-metadata.service.ts
 
b/ui/projects/streampipes/platform-services/src/lib/apis/pipeline-canvas-metadata.service.ts
index 4babb0052b..141b8e604f 100644
--- 
a/ui/projects/streampipes/platform-services/src/lib/apis/pipeline-canvas-metadata.service.ts
+++ 
b/ui/projects/streampipes/platform-services/src/lib/apis/pipeline-canvas-metadata.service.ts
@@ -30,13 +30,6 @@ export class PipelineCanvasMetadataService {
     private http = inject(HttpClient);
     private platformServicesCommons = inject(PlatformServicesCommons);
 
-    addPipelineCanvasMetadata(pipelineCanvasMetadata: PipelineCanvasMetadata) {
-        return this.http.post(
-            this.pipelineCanvasMetadataBasePath,
-            pipelineCanvasMetadata,
-        );
-    }
-
     getPipelineCanvasMetadata(
         pipelineId: string,
     ): Observable<PipelineCanvasMetadata> {
@@ -50,12 +43,11 @@ export class PipelineCanvasMetadataService {
     }
 
     updatePipelineCanvasMetadata(
+        pipelineId: string,
         pipelineCanvasMetadata: PipelineCanvasMetadata,
     ) {
         return this.http.put(
-            this.pipelineCanvasMetadataBasePath +
-                '/' +
-                pipelineCanvasMetadata.pipelineId,
+            this.pipelineCanvasMetadataPipelinePath + pipelineId,
             pipelineCanvasMetadata,
         );
     }
diff --git a/ui/src/app/editor/dialog/save-pipeline/save-pipeline.component.ts 
b/ui/src/app/editor/dialog/save-pipeline/save-pipeline.component.ts
index 0853a11381..1cb1fa125c 100644
--- a/ui/src/app/editor/dialog/save-pipeline/save-pipeline.component.ts
+++ b/ui/src/app/editor/dialog/save-pipeline/save-pipeline.component.ts
@@ -333,20 +333,11 @@ export class SavePipelineComponent implements OnInit {
     }
 
     getPipelineCanvasMetadata$(pipelineId: string): Observable<object> {
-        let request;
         this.pipelineCanvasMetadata.pipelineId = pipelineId;
-        if (this.storageOptions.updateModeActive) {
-            request = this.pipelineCanvasService.updatePipelineCanvasMetadata(
-                this.pipelineCanvasMetadata,
-            );
-        } else {
-            this.pipelineCanvasMetadata._id = undefined;
-            this.pipelineCanvasMetadata._rev = undefined;
-            request = this.pipelineCanvasService.addPipelineCanvasMetadata(
-                this.pipelineCanvasMetadata,
-            );
-        }
-        return request;
+        return this.pipelineCanvasService.updatePipelineCanvasMetadata(
+            pipelineId,
+            this.pipelineCanvasMetadata,
+        );
     }
 
     addStatusIndicator(message: string, status: Status) {

Reply via email to