Skip to content

Commit

Permalink
cleanup processor - missing references api cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Apr 3, 2024
1 parent e45ab75 commit a01e87a
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@

import com.evolveum.midpoint.util.LocalizableMessage;

public record CleanupMessage(Status status, LocalizableMessage message) {
public record CleanupMessage<D>(Type type, LocalizableMessage message, D data) {

public enum Status {
INFO, ERROR, WARNING;
public enum Type {

MISSING_REFERENCE,

OPTIONAL_CLEANUP,

PROTECTED_STRING
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,21 @@

package com.evolveum.midpoint.common.cleanup;

import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;

import java.util.ArrayList;
import java.util.List;

public class CleanupResult {

private List<CleanupMessage> messages;

private List<ObjectReferenceType> missingReferences;
private List<CleanupMessage<?>> messages;

public List<CleanupMessage> getMessages() {
public List<CleanupMessage<?>> getMessages() {
if (messages == null) {
messages = new ArrayList<>();
}
return messages;
}

public void setMessages(List<CleanupMessage> messages) {
public void setMessages(List<CleanupMessage<?>> messages) {
this.messages = messages;
}

public List<CleanupMessage> getMessages(CleanupMessage.Status status) {
return getMessages().stream().filter(m -> m.status() == status).toList();
}

public List<ObjectReferenceType> getMissingReferences() {
if (missingReferences == null) {
missingReferences = new ArrayList<>();
}
return missingReferences;
}

public void setMissingReferences(List<ObjectReferenceType> missingReferences) {
this.missingReferences = missingReferences;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import java.util.List;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;

import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

Expand All @@ -30,11 +28,13 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;

@SuppressWarnings("unused")
public class DefaultCleanupHandler implements CleanupHandler {

private static final Trace TRACE = TraceManager.getTrace(DefaultCleanupHandler.class);
Expand Down Expand Up @@ -64,10 +64,11 @@ public void setWarnAboutMissingReferences(boolean warnAboutMissingReferences) {
@Override
public boolean onConfirmOptionalCleanup(CleanupEvent<Item<?, ?>> event) {
event.result().getMessages().add(
new CleanupMessage(
CleanupMessage.Status.WARNING,
new CleanupMessage<>(
CleanupMessage.Type.OPTIONAL_CLEANUP,
new SingleLocalizableMessage(
"Optional item '" + event.path() + "' not cleaned up.")));
"Optional item '" + event.path() + "' not cleaned up."),
event.path()));

return false;
}
Expand Down Expand Up @@ -111,16 +112,14 @@ private void processOtherRef(CleanupEvent<PrismReference> event, PrismReferenceV
return;
}

event.result().getMissingReferences().add(
new ObjectReferenceType()
.oid(oid)
.type(typeName));

event.result().getMessages().add(
new CleanupMessage(
CleanupMessage.Status.WARNING,
new CleanupMessage<>(
CleanupMessage.Type.MISSING_REFERENCE,
new SingleLocalizableMessage(
"Unresolved reference (locally): " + refValue.getOid() + "(" + typeName.getLocalPart() + ").")));
"Unresolved reference (locally): " + refValue.getOid() + "(" + typeName.getLocalPart() + ")."),
new ObjectReferenceType()
.oid(oid)
.type(typeName)));
}

private void clearOidFromReference(PrismReferenceValue value) {
Expand All @@ -146,19 +145,19 @@ private void processConnectorRef(CleanupEvent<PrismReference> event) {
return;
}

ObjectReferenceType missingRef = new ObjectReferenceType()
.oid(oid)
.type(ConnectorType.COMPLEX_TYPE);

try {
PrismObject<ConnectorType> connector = resolveConnector(oid);
if (connector == null) {
event.result().getMissingReferences().add(
new ObjectReferenceType()
.oid(oid)
.type(ConnectorType.COMPLEX_TYPE));

event.result().getMessages().add(
new CleanupMessage(
CleanupMessage.Status.WARNING,
new CleanupMessage<>(
CleanupMessage.Type.MISSING_REFERENCE,
new SingleLocalizableMessage(
"Unresolved connector reference: Couldn't find connector with oid " + oid + ".")));
"Unresolved connector reference: Couldn't find connector with oid " + oid + "."),
missingRef));
return;
}

Expand All @@ -175,10 +174,11 @@ private void processConnectorRef(CleanupEvent<PrismReference> event) {
TRACE.debug("Couldn't resolve connector reference", ex);

event.result().getMessages().add(
new CleanupMessage(
CleanupMessage.Status.WARNING,
new CleanupMessage<>(
CleanupMessage.Type.MISSING_REFERENCE,
new SingleLocalizableMessage(
"Unresolved connector reference: " + ex.getMessage())));
"Unresolved connector reference: " + ex.getMessage()),
missingRef));
}
}

Expand Down Expand Up @@ -239,6 +239,8 @@ public void onProtectedStringCleanup(CleanupEvent<PrismProperty<ProtectedStringT
return;
}

ProtectedStringViolations violations = new ProtectedStringViolations();

List<String> messages = new ArrayList<>();
for (PrismPropertyValue<ProtectedStringType> value : property.getValues()) {
ProtectedStringType ps = value.getValue();
Expand All @@ -248,14 +250,17 @@ public void onProtectedStringCleanup(CleanupEvent<PrismProperty<ProtectedStringT

if (ps.getEncryptedDataType() != null) {
messages.add("encrypted data in " + property.getPath());
violations.addEncrypted(property.getPath());
}

if (ps.getHashedDataType() != null) {
messages.add("hashed data in " + property.getPath());
violations.addHashed(property.getPath());
}

if (ps.getClearValue() != null) {
messages.add("clear value in " + property.getPath());
violations.addClearValue(property.getPath());
}
}

Expand All @@ -264,26 +269,20 @@ public void onProtectedStringCleanup(CleanupEvent<PrismProperty<ProtectedStringT
}

event.result().getMessages().add(
new CleanupMessage(
CleanupMessage.Status.WARNING,
new CleanupMessage<>(
CleanupMessage.Type.PROTECTED_STRING,
new SingleLocalizableMessage(
"Protected string: " + StringUtils.join(messages, ", "))));
"Protected string: " + StringUtils.join(messages, ", ")),
violations));
}

/**
* @param type
* @param oid
* @param <O>
* @return true if the object reference can be resolved, false otherwise. E.g. file/object is available locally in project.
*/
protected <O extends ObjectType> boolean canResolveLocalObject(Class<O> type, String oid) {
return false;
}

/**
* @param oid
* @return
*/
protected PrismObject<ConnectorType> resolveConnector(String oid) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.evolveum.midpoint.common.cleanup;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.evolveum.midpoint.prism.path.ItemPath;

public class ProtectedStringViolations {

private List<ItemPath> encrypted = new ArrayList<>();

private List<ItemPath> hashed = new ArrayList<>();

private List<ItemPath> clearValue = new ArrayList<>();

public void addEncrypted(ItemPath path) {
encrypted.add(path);
}

public void addHashed(ItemPath path) {
hashed.add(path);
}

public void addClearValue(ItemPath path) {
clearValue.add(path);
}

public List<ItemPath> getEncrypted() {
return Collections.unmodifiableList(encrypted);
}

public List<ItemPath> getHashed() {
return Collections.unmodifiableList(hashed);
}

public List<ItemPath> getClearValue() {
return Collections.unmodifiableList(clearValue);
}
}

0 comments on commit a01e87a

Please sign in to comment.