Skip to content

Commit de50a84

Browse files
Fix subject DNs in authorizer properties
1 parent fdbbbf8 commit de50a84

1 file changed

Lines changed: 64 additions & 46 deletions

File tree

rust/operator-binary/src/security/authorization.rs

Lines changed: 64 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use stackable_operator::{
1616
use crate::{
1717
config::{NIFI_PVC_STORAGE_DIRECTORY, NifiRepository},
1818
crd::{
19-
NifiRole,
2019
authorization::{NifiAccessPolicyProvider, NifiAuthorization, NifiOpaConfig},
2120
v1alpha1,
2221
},
@@ -165,57 +164,25 @@ impl ResolvedNifiAuthorizationConfig {
165164
} => {
166165
let file_based_mount_path = Self::file_based_mount_path();
167166

168-
let namespace = nifi_cluster.namespace().expect("");
169-
170-
let mut dns = vec![];
171-
172-
for _role_name in [NifiRole::Node.to_string()] {
173-
let role_groups = nifi_cluster
174-
.spec
175-
.nodes
176-
.iter()
177-
.flat_map(|role| &role.role_groups)
178-
.collect::<BTreeMap<_, _>>();
179-
180-
for (role_group_name, role_group) in role_groups {
181-
let headless_service_name = nifi_cluster
182-
.node_rolegroup_ref(role_group_name)
183-
.rolegroup_headless_service_name();
184-
185-
let stateful_set_name = nifi_cluster.name_any();
186-
187-
for replica in 0..role_group.replicas.unwrap_or(1) {
188-
let cn = "cn=generated certificate for pod";
189-
let dc = cluster_info
190-
.cluster_domain
191-
.split('.')
192-
.rev()
193-
.chain([
194-
"svc",
195-
&namespace,
196-
&headless_service_name,
197-
&format!("{stateful_set_name}-{replica}",),
198-
])
199-
.map(|component| format!("dc={component}"))
200-
.collect::<Vec<_>>();
201-
202-
let mut dn = vec![cn.to_string()];
203-
dn.extend(dc);
204-
let dn = dn.join(",");
205-
206-
dns.push(dn);
207-
}
208-
}
209-
}
167+
let nifi_node_subject_dns = Self::nifi_node_subject_dns(nifi_cluster, cluster_info);
210168

211-
let user_group_povider_dns = dns.iter().enumerate().map(|(i, dn)| format!(" <property name=\"Initial User Identity other-nifi {i}\">{dn}</property>")).collect::<Vec<_>>().join("\n");
169+
let user_group_povider_dns = nifi_node_subject_dns
170+
.iter()
171+
.enumerate()
172+
.map(|(i, dn)| {
173+
format!(
174+
" <property name=\"Initial User Identity other-nifi-{i}\">{dn}</property>"
175+
)
176+
})
177+
.collect::<Vec<_>>()
178+
.join("\n");
212179

213-
let access_policy_provider_dns = dns
180+
let access_policy_provider_dns = nifi_node_subject_dns
214181
.iter()
215182
.enumerate()
216183
.map(|(i, dn)| {
217184
format!(
218-
" <property name=\"Node Identity other-nifi {i}\">{dn}</property>"
185+
" <property name=\"Node Identity other-nifi-{i}\">{dn}</property>"
219186
)
220187
})
221188
.collect::<Vec<_>>()
@@ -255,6 +222,57 @@ impl ResolvedNifiAuthorizationConfig {
255222
authorizers_xml
256223
}
257224

225+
fn nifi_node_subject_dns(
226+
nifi_cluster: &v1alpha1::NifiCluster,
227+
cluster_info: &KubernetesClusterInfo,
228+
) -> Vec<String> {
229+
let namespace = nifi_cluster.namespace().expect("");
230+
231+
let mut dns = vec![];
232+
233+
let role_groups = nifi_cluster
234+
.spec
235+
.nodes
236+
.iter()
237+
.flat_map(|role| &role.role_groups)
238+
.collect::<BTreeMap<_, _>>();
239+
240+
for (role_group_name, role_group) in role_groups {
241+
let role_group_ref = nifi_cluster.node_rolegroup_ref(role_group_name);
242+
243+
let pod_generate_name = format!(
244+
"{}-",
245+
nifi_cluster
246+
.node_rolegroup_ref(role_group_name)
247+
.object_name()
248+
);
249+
250+
for ordinal in 0..role_group.replicas.unwrap_or(1) {
251+
let dc = cluster_info
252+
.cluster_domain
253+
.split('.')
254+
.rev()
255+
.chain([
256+
"svc",
257+
&namespace,
258+
&role_group_ref.rolegroup_headless_service_name(),
259+
&format!("{pod_generate_name}{ordinal}",),
260+
])
261+
.map(|component| format!("DC={component}"))
262+
.collect::<Vec<_>>();
263+
let cn = "CN=generated certificate for pod";
264+
265+
let mut dn = dc;
266+
dn.push(cn.to_owned());
267+
let dn = dn.join(", ");
268+
269+
dns.push(dn);
270+
}
271+
}
272+
273+
dns
274+
}
275+
258276
pub fn get_env_vars(&self) -> Vec<EnvVar> {
259277
match self {
260278
ResolvedNifiAuthorizationConfig::Opa {

0 commit comments

Comments
 (0)