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

markap14 pushed a commit to branch NIFI-15258
in repository https://gitbox.apache.org/repos/asf/nifi.git

commit f4c577540e60d31076eab3ed629c430e3de6ea99
Author: Mark Payne <[email protected]>
AuthorDate: Mon Dec 15 12:13:19 2025 -0500

    NIFI-15336: Created AuthorizableSecret and implemented 
ParameterProviderSecretProvider to provide the Parameter Provider as the 
associated Authorizable (#10644)
---
 .../secrets/ConnectorTestRunnerAuthorizable.java   | 34 ++++++++++++++
 .../secrets/ConnectorTestRunnerSecretProvider.java |  4 ++
 .../connector/secrets/AuthorizableSecret.java      | 25 ++++++++++
 .../secrets/ParameterProviderSecretProvider.java   |  1 +
 .../connector/secrets/StandardSecret.java          | 54 +++++++++++++++++-----
 5 files changed, 106 insertions(+), 12 deletions(-)

diff --git 
a/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerAuthorizable.java
 
b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerAuthorizable.java
new file mode 100644
index 0000000000..5600c34f14
--- /dev/null
+++ 
b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerAuthorizable.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nifi.mock.connector.server.secrets;
+
+import org.apache.nifi.authorization.Resource;
+import org.apache.nifi.authorization.resource.Authorizable;
+import org.apache.nifi.authorization.resource.ResourceFactory;
+
+public class ConnectorTestRunnerAuthorizable implements Authorizable {
+    @Override
+    public Authorizable getParentAuthorizable() {
+        return null;
+    }
+
+    @Override
+    public Resource getResource() {
+        return ResourceFactory.getControllerResource();
+    }
+}
diff --git 
a/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java
 
b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java
index 16e05ff4f0..3323eb9eb9 100644
--- 
a/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java
+++ 
b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java
@@ -17,6 +17,7 @@
 
 package org.apache.nifi.mock.connector.server.secrets;
 
+import org.apache.nifi.authorization.resource.Authorizable;
 import org.apache.nifi.components.connector.Secret;
 import org.apache.nifi.components.connector.secrets.SecretProvider;
 import org.apache.nifi.components.connector.secrets.StandardSecret;
@@ -29,6 +30,7 @@ import java.util.Map;
 
 public class ConnectorTestRunnerSecretProvider implements SecretProvider {
     public static final String GROUP_NAME = "Default";
+    private static final Authorizable AUTHORIZABLE = new 
ConnectorTestRunnerAuthorizable();
 
     private final Map<String, String> secrets = new HashMap<>();
 
@@ -55,6 +57,7 @@ public class ConnectorTestRunnerSecretProvider implements 
SecretProvider {
                 .groupName(GROUP_NAME)
                 .name(entry.getKey())
                 .value(entry.getValue())
+                .authorizable(AUTHORIZABLE)
                 .build();
 
             secrets.add(secret);
@@ -76,6 +79,7 @@ public class ConnectorTestRunnerSecretProvider implements 
SecretProvider {
                     .groupName(GROUP_NAME)
                     .name(secretName)
                     .value(value)
+                    .authorizable(AUTHORIZABLE)
                     .build();
 
                 matchingSecrets.add(secret);
diff --git 
a/nifi-framework-api/src/main/java/org/apache/nifi/components/connector/secrets/AuthorizableSecret.java
 
b/nifi-framework-api/src/main/java/org/apache/nifi/components/connector/secrets/AuthorizableSecret.java
new file mode 100644
index 0000000000..3bcf6b099c
--- /dev/null
+++ 
b/nifi-framework-api/src/main/java/org/apache/nifi/components/connector/secrets/AuthorizableSecret.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nifi.components.connector.secrets;
+
+import org.apache.nifi.authorization.resource.Authorizable;
+import org.apache.nifi.components.connector.Secret;
+
+public interface AuthorizableSecret extends Secret, Authorizable {
+
+}
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
index 2f058f3c2a..b7d37efc19 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java
@@ -67,6 +67,7 @@ public class ParameterProviderSecretProvider implements 
SecretProvider {
             .name(descriptor.getName())
             .description(descriptor.getDescription())
             .value(parameter.getValue())
+            .authorizable(parameterProvider)
             .build();
     }
 
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java
 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java
index 443b19cd06..f2da84d233 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java
@@ -17,16 +17,18 @@
 
 package org.apache.nifi.components.connector.secrets;
 
-import org.apache.nifi.components.connector.Secret;
+import org.apache.nifi.authorization.Resource;
+import org.apache.nifi.authorization.resource.Authorizable;
 
 import java.util.Objects;
 
-public class StandardSecret implements Secret {
+public class StandardSecret implements AuthorizableSecret {
     private final String providerName;
     private final String groupName;
     private final String name;
     private final String description;
     private final String value;
+    private final Authorizable authorizable;
 
     private StandardSecret(final Builder builder) {
         this.providerName = builder.providerName;
@@ -34,6 +36,7 @@ public class StandardSecret implements Secret {
         this.name = builder.name;
         this.description = builder.description;
         this.value = builder.value;
+        this.authorizable = builder.authorizable;
     }
 
     @Override
@@ -63,13 +66,12 @@ public class StandardSecret implements Secret {
 
     @Override
     public String toString() {
-        return "StandardSecret[providerName=%s, groupName=%s, name=%s, 
description=%s]".formatted(
-             providerName, groupName, name, description);
+        return "StandardSecret[providerName=%s, groupName=%s, 
name=%s]".formatted(providerName, groupName, name);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(providerName, groupName, name, description);
+        return Objects.hash(providerName, groupName, name);
     }
 
     @Override
@@ -83,8 +85,17 @@ public class StandardSecret implements Secret {
         final StandardSecret other = (StandardSecret) obj;
         return Objects.equals(this.providerName, other.providerName)
             && Objects.equals(this.groupName, other.groupName)
-            &&  Objects.equals(this.name, other.name)
-            &&  Objects.equals(this.description, other.description);
+            &&  Objects.equals(this.name, other.name);
+    }
+
+    @Override
+    public Authorizable getParentAuthorizable() {
+        return authorizable.getParentAuthorizable();
+    }
+
+    @Override
+    public Resource getResource() {
+        return authorizable.getResource();
     }
 
     public static class Builder {
@@ -93,33 +104,52 @@ public class StandardSecret implements Secret {
         private String name;
         private String description;
         private String value;
+        private Authorizable authorizable;
 
-        public Builder providerName(String providerName) {
+        public Builder providerName(final String providerName) {
             this.providerName = providerName;
             return this;
         }
 
-        public Builder groupName(String groupName) {
+        public Builder groupName(final String groupName) {
             this.groupName = groupName;
             return this;
         }
 
-        public Builder name(String name) {
+        public Builder name(final String name) {
             this.name = name;
             return this;
         }
 
-        public Builder description(String description) {
+        public Builder description(final String description) {
             this.description = description;
             return this;
         }
 
-        public Builder value(String value) {
+        public Builder value(final String value) {
             this.value = value;
             return this;
         }
 
+        public Builder authorizable(final Authorizable authorizable) {
+            this.authorizable = authorizable;
+            return this;
+        }
+
         public StandardSecret build() {
+            if (providerName == null) {
+                throw new IllegalStateException("Provider name is required");
+            }
+            if (groupName == null) {
+                throw new IllegalStateException("Group name is required");
+            }
+            if (name == null) {
+                throw new IllegalStateException("Secret name is required");
+            }
+            if (authorizable == null) {
+                throw new IllegalStateException("Authorizable is required");
+            }
+
             return new StandardSecret(this);
         }
     }

Reply via email to