PR updated

This commit is contained in:
iliax 2023-03-14 00:04:29 +04:00
parent 4173f78c4a
commit ffff964007
7 changed files with 47 additions and 26 deletions

View file

@ -117,8 +117,35 @@ public interface ClusterMapper {
return brokerDiskUsage; return brokerDiskUsage;
} }
default DataMasking map(List<ClustersProperties.Masking> maskingProperties) { static KafkaAclDTO.OperationEnum mapAclOperation(AclOperation operation) {
return DataMasking.create(maskingProperties); return switch (operation) {
case ALL -> KafkaAclDTO.OperationEnum.ALL;
case READ -> KafkaAclDTO.OperationEnum.READ;
case WRITE -> KafkaAclDTO.OperationEnum.WRITE;
case CREATE -> KafkaAclDTO.OperationEnum.CREATE;
case DELETE -> KafkaAclDTO.OperationEnum.DELETE;
case ALTER -> KafkaAclDTO.OperationEnum.ALTER;
case DESCRIBE -> KafkaAclDTO.OperationEnum.DESCRIBE;
case CLUSTER_ACTION -> KafkaAclDTO.OperationEnum.CLUSTER_ACTION;
case DESCRIBE_CONFIGS -> KafkaAclDTO.OperationEnum.DESCRIBE_CONFIGS;
case ALTER_CONFIGS -> KafkaAclDTO.OperationEnum.ALTER_CONFIGS;
case IDEMPOTENT_WRITE -> KafkaAclDTO.OperationEnum.IDEMPOTENT_WRITE;
case CREATE_TOKENS -> KafkaAclDTO.OperationEnum.CREATE_TOKENS;
case DESCRIBE_TOKENS -> KafkaAclDTO.OperationEnum.DESCRIBE_TOKENS;
case ANY, UNKNOWN -> KafkaAclDTO.OperationEnum.UNKNOWN;
};
}
static KafkaAclDTO.ResourceTypeEnum mapAclResourceType(ResourceType resourceType) {
return switch (resourceType) {
case CLUSTER -> KafkaAclDTO.ResourceTypeEnum.CLUSTER;
case TOPIC -> KafkaAclDTO.ResourceTypeEnum.TOPIC;
case GROUP -> KafkaAclDTO.ResourceTypeEnum.GROUP;
case DELEGATION_TOKEN -> KafkaAclDTO.ResourceTypeEnum.DELEGATION_TOKEN;
case TRANSACTIONAL_ID -> KafkaAclDTO.ResourceTypeEnum.TRANSACTIONAL_ID;
case USER -> KafkaAclDTO.ResourceTypeEnum.USER;
case ANY, UNKNOWN -> KafkaAclDTO.ResourceTypeEnum.UNKNOWN;
};
} }
static AclBinding toAclBinding(KafkaAclDTO dto) { static AclBinding toAclBinding(KafkaAclDTO dto) {
@ -141,12 +168,12 @@ public interface ClusterMapper {
var pattern = binding.pattern(); var pattern = binding.pattern();
var filter = binding.toFilter().entryFilter(); var filter = binding.toFilter().entryFilter();
return new KafkaAclDTO() return new KafkaAclDTO()
.resourceType(KafkaAclDTO.ResourceTypeEnum.fromValue(pattern.resourceType().name())) .resourceType(mapAclResourceType(pattern.resourceType()))
.resourceName(pattern.name()) .resourceName(pattern.name())
.namePatternType(KafkaAclDTO.NamePatternTypeEnum.fromValue(pattern.patternType().name())) .namePatternType(KafkaAclDTO.NamePatternTypeEnum.fromValue(pattern.patternType().name()))
.principal(filter.principal()) .principal(filter.principal())
.host(filter.host()) .host(filter.host())
.operation(KafkaAclDTO.OperationEnum.fromValue(filter.operation().name())) .operation(mapAclOperation(filter.operation()))
.permission(KafkaAclDTO.PermissionEnum.fromValue(filter.permissionType().name())); .permission(KafkaAclDTO.PermissionEnum.fromValue(filter.permissionType().name()));
} }

View file

@ -1,7 +1,7 @@
package com.provectus.kafka.ui.model.rbac; package com.provectus.kafka.ui.model.rbac;
import com.provectus.kafka.ui.model.rbac.permission.ApplicationConfigAction;
import com.provectus.kafka.ui.model.rbac.permission.AclAction; import com.provectus.kafka.ui.model.rbac.permission.AclAction;
import com.provectus.kafka.ui.model.rbac.permission.ApplicationConfigAction;
import com.provectus.kafka.ui.model.rbac.permission.ClusterConfigAction; import com.provectus.kafka.ui.model.rbac.permission.ClusterConfigAction;
import com.provectus.kafka.ui.model.rbac.permission.ConnectAction; import com.provectus.kafka.ui.model.rbac.permission.ConnectAction;
import com.provectus.kafka.ui.model.rbac.permission.ConsumerGroupAction; import com.provectus.kafka.ui.model.rbac.permission.ConsumerGroupAction;

View file

@ -3,6 +3,7 @@ package com.provectus.kafka.ui.model.rbac;
import static com.provectus.kafka.ui.model.rbac.Resource.CLUSTERCONFIG; import static com.provectus.kafka.ui.model.rbac.Resource.CLUSTERCONFIG;
import static com.provectus.kafka.ui.model.rbac.Resource.KSQL; import static com.provectus.kafka.ui.model.rbac.Resource.KSQL;
import com.provectus.kafka.ui.model.rbac.permission.AclAction;
import com.provectus.kafka.ui.model.rbac.permission.ApplicationConfigAction; import com.provectus.kafka.ui.model.rbac.permission.ApplicationConfigAction;
import com.provectus.kafka.ui.model.rbac.permission.ClusterConfigAction; import com.provectus.kafka.ui.model.rbac.permission.ClusterConfigAction;
import com.provectus.kafka.ui.model.rbac.permission.ConnectAction; import com.provectus.kafka.ui.model.rbac.permission.ConnectAction;
@ -73,6 +74,7 @@ public class Permission {
case SCHEMA -> Arrays.stream(SchemaAction.values()).map(Enum::toString).toList(); case SCHEMA -> Arrays.stream(SchemaAction.values()).map(Enum::toString).toList();
case CONNECT -> Arrays.stream(ConnectAction.values()).map(Enum::toString).toList(); case CONNECT -> Arrays.stream(ConnectAction.values()).map(Enum::toString).toList();
case KSQL -> Arrays.stream(KsqlAction.values()).map(Enum::toString).toList(); case KSQL -> Arrays.stream(KsqlAction.values()).map(Enum::toString).toList();
case ACL -> Arrays.stream(AclAction.values()).map(Enum::toString).toList();
}; };
} }

View file

@ -68,7 +68,7 @@ public class FeatureService {
private Mono<ClusterFeature> acl(KafkaCluster cluster) { private Mono<ClusterFeature> acl(KafkaCluster cluster) {
return adminClientService.get(cluster).flatMap( return adminClientService.get(cluster).flatMap(
ac -> ac.getClusterFeatures().contains(SupportedFeature.AUTHORIZED_SECURITY_ENABLED) ac -> ac.getClusterFeatures().contains(ReactiveAdminClient.SupportedFeature.AUTHORIZED_SECURITY_ENABLED)
? Mono.just(ClusterFeature.KAFKA_ACL) ? Mono.just(ClusterFeature.KAFKA_ACL)
: Mono.empty() : Mono.empty()
); );

View file

@ -107,10 +107,6 @@ public class ReactiveAdminClient implements Closeable {
.map(Tuple2::getT1) .map(Tuple2::getT1)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
static Set<SupportedFeature> defaultFeatures() {
return Set.of();
}
} }
@Value @Value
@ -131,13 +127,7 @@ public class ReactiveAdminClient implements Closeable {
} }
private static Mono<Set<SupportedFeature>> getSupportedUpdateFeaturesForVersion(AdminClient ac, String versionStr) { private static Mono<Set<SupportedFeature>> getSupportedUpdateFeaturesForVersion(AdminClient ac, String versionStr) {
Float kafkaVersion = null; @Nullable Float kafkaVersion = KafkaVersion.parse(versionStr).orElse(null);
try {
float version = KafkaVersion.parse(versionStr);
return SupportedFeature.forVersion(version);
} catch (NumberFormatException e) {
return SupportedFeature.defaultFeatures();
}
return SupportedFeature.forVersion(ac, kafkaVersion); return SupportedFeature.forVersion(ac, kafkaVersion);
} }

View file

@ -1,23 +1,20 @@
package com.provectus.kafka.ui.util; package com.provectus.kafka.ui.util;
import lombok.experimental.UtilityClass; import java.util.Optional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@UtilityClass
@Slf4j @Slf4j
public class KafkaVersion { public class KafkaVersion {
public static float parse(String version) throws NumberFormatException { public static Optional<Float> parse(String version) throws NumberFormatException {
log.trace("Parsing cluster version [{}]", version);
try { try {
final String[] parts = version.split("\\."); final String[] parts = version.split("\\.");
if (parts.length > 2) { if (parts.length > 2) {
version = parts[0] + "." + parts[1]; version = parts[0] + "." + parts[1];
} }
return Float.parseFloat(version.split("-")[0]); return Optional.of(Float.parseFloat(version.split("-")[0]));
} catch (Exception e) { } catch (Exception e) {
log.error("Conversion clusterVersion [{}] to float value failed", version, e); return Optional.empty();
throw e;
} }
} }
} }

View file

@ -3420,11 +3420,13 @@ components:
resourceType: resourceType:
type: string type: string
enum: enum:
- UNKNOWN # Unknown operation, need to update mapping code on BE
- TOPIC - TOPIC
- GROUP - GROUP
- CLUSTER - CLUSTER
- TRANSACTIONAL_ID - TRANSACTIONAL_ID
- DELEGATION_TOPIC - DELEGATION_TOKEN
- USER
resourceName: resourceName:
type: string # "*" if acl can be applied to any resource of given type type: string # "*" if acl can be applied to any resource of given type
namePatternType: namePatternType:
@ -3439,6 +3441,7 @@ components:
operation: operation:
type: string type: string
enum: enum:
- UNKNOWN # Unknown operation, need to update mapping code on BE
- ALL # Cluster, Topic, Group - ALL # Cluster, Topic, Group
- READ # Topic, Group - READ # Topic, Group
- WRITE # Topic, TransactionalId - WRITE # Topic, TransactionalId
@ -3449,7 +3452,9 @@ components:
- CLUSTER_ACTION # Cluster - CLUSTER_ACTION # Cluster
- DESCRIBE_CONFIGS # Cluster, Topic - DESCRIBE_CONFIGS # Cluster, Topic
- ALTER_CONFIGS # Cluster, Topic - ALTER_CONFIGS # Cluster, Topic
- IDEMPOTENT_WRITE # - - IDEMPOTENT_WRITE # Cluster
- CREATE_TOKENS
- DESCRIBE_TOKENS
permission: permission:
type: string type: string
enum: enum: