From ad0ce7c1070a2f09d245562bbaa5cb96098fc641 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Thu, 12 Mar 2020 22:43:22 +0100 Subject: [PATCH] Generalize notifications a bit - password related functionality: UserType -> FocusType - focal notifier: FocusType -> AssignmentHolderType --- .../model/api/expr/MidpointFunctions.java | 4 +-- .../impl/expr/MidpointFunctionsImpl.java | 10 +++---- .../model/impl/lens/LensElementContext.java | 2 +- .../notifications/api/events/BaseEvent.java | 2 +- .../notifications/api/events/ModelEvent.java | 18 ++++++------ .../impl/NotificationFunctionsImpl.java | 14 ++++++---- .../AbstractFocalObjectNotifier.java | 28 +++++++++---------- .../notifiers/AbstractGeneralNotifier.java | 2 +- .../notifiers/SimpleFocalObjectNotifier.java | 9 +++--- 9 files changed, 45 insertions(+), 44 deletions(-) diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java index 129d344a10f..6a67d436606 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java @@ -1003,7 +1003,7 @@ Collection getManagersOidsExceptUser(@NotNull Collection getManagersOidsExceptUser(@NotNull Collection delta) throws EncryptionException; - String getPlaintextUserPasswordFromDeltas(List> deltas) throws EncryptionException; + String getPlaintextUserPasswordFromDeltas(List> deltas) throws EncryptionException; Task getCurrentTask(); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java index a6b522be59b..18e98e53e93 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java @@ -179,7 +179,7 @@ public boolean isMemberOf(UserType user, String orgOid) { } @Override - public String getPlaintextUserPassword(UserType user) throws EncryptionException { + public String getPlaintextUserPassword(FocusType user) throws EncryptionException { if (user == null || user.getCredentials() == null || user.getCredentials().getPassword() == null) { return null; // todo log a warning here? } @@ -267,15 +267,15 @@ private void takePasswordsFromItemDelta(List passwords, Ite } @Override - public String getPlaintextUserPasswordFromDeltas(List> objectDeltas) throws EncryptionException { + public String getPlaintextUserPasswordFromDeltas(List> objectDeltas) throws EncryptionException { List passwords = new ArrayList<>(); - for (ObjectDelta delta : objectDeltas) { + for (ObjectDelta delta : objectDeltas) { if (delta.isAdd()) { - UserType newUser = delta.getObjectToAdd().asObjectable(); - return getPlaintextUserPassword(newUser); // for simplicity we do not look for other values + FocusType newObject = delta.getObjectToAdd().asObjectable(); + return getPlaintextUserPassword(newObject); // for simplicity we do not look for other values } if (!delta.isModify()) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java index 3355484bd02..52e75bf975e 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java @@ -819,7 +819,7 @@ public PrismObject getObjectCurrentOrOld() { @Override public boolean isOfType(Class aClass) { - if (objectTypeClass != null && aClass.isAssignableFrom(objectTypeClass)) { + if (aClass.isAssignableFrom(objectTypeClass)) { return true; } PrismObject object = getObjectAny(); diff --git a/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java b/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java index 9b7dbc53ce4..7a53b845844 100644 --- a/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java +++ b/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java @@ -308,7 +308,7 @@ private boolean containsItemInValues(Collection values, ItemPath rem return false; } - public boolean containsItem(List> deltas, ItemPath itemPath) { + boolean containsItem(List> deltas, ItemPath itemPath) { for (ObjectDelta objectDelta : deltas) { if (containsItem(objectDelta, itemPath)) { return true; diff --git a/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/ModelEvent.java b/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/ModelEvent.java index 2f0c32ca484..e330f55c349 100644 --- a/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/ModelEvent.java +++ b/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/ModelEvent.java @@ -22,11 +22,8 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.xml.ns._public.common.common_3.EventCategoryType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.EventOperationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.EventStatusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + import org.apache.commons.lang.StringUtils; import javax.xml.namespace.QName; @@ -149,23 +146,24 @@ public ObjectDelta getFocusSecondaryDelta() { return getFocusContext() != null ? getFocusContext().getSecondaryDelta() : null; } - public List> getFocusDeltas() { - List> retval = new ArrayList<>(); + public List> getFocusDeltas() { + List> retval = new ArrayList<>(); Class c = modelContext.getFocusClass(); - if (c != null && FocusType.class.isAssignableFrom(c)) { + if (c != null && AssignmentHolderType.class.isAssignableFrom(c)) { for (Object o : getFocusExecutedDeltas()) { ObjectDeltaOperation objectDeltaOperation = (ObjectDeltaOperation) o; + //noinspection unchecked retval.add(objectDeltaOperation.getObjectDelta()); } } return retval; } - public ObjectDelta getSummarizedFocusDeltas() throws SchemaException { + public ObjectDelta getSummarizedFocusDeltas() throws SchemaException { return ObjectDeltaCollectionsUtil.summarize(getFocusDeltas()); } - public boolean hasFocusOfType(Class clazz) { + public boolean hasFocusOfType(Class clazz) { return getFocusContext() != null && clazz.isAssignableFrom(getFocusContext().getObjectTypeClass()); } diff --git a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/NotificationFunctionsImpl.java b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/NotificationFunctionsImpl.java index d1c54a4227d..781fe1ca1a4 100644 --- a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/NotificationFunctionsImpl.java +++ b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/NotificationFunctionsImpl.java @@ -294,7 +294,7 @@ public String getContentAsFormattedList(Event event, boolean showSynchronization final ModelEvent modelEvent = (ModelEvent) event; ModelContext modelContext = (ModelContext) modelEvent.getModelContext(); ModelElementContext focusContext = modelContext.getFocusContext(); - ObjectDelta summarizedDelta; + ObjectDelta summarizedDelta; try { summarizedDelta = modelEvent.getSummarizedFocusDeltas(); } catch (SchemaException e) { @@ -369,7 +369,12 @@ public String getFocusPasswordFromEvent(ModelEvent modelEvent) { LOGGER.trace("getFocusPasswordFromEvent: No user deltas in event"); return null; } - String password = getPasswordFromDeltas(modelEvent.getFocusDeltas()); + if (modelEvent.getFocusContext() == null || !modelEvent.getFocusContext().isOfType(FocusType.class)) { + LOGGER.trace("getFocusPasswordFromEvent: Not a FocusType context"); + return null; + } + //noinspection unchecked,rawtypes + String password = getPasswordFromDeltas((List) modelEvent.getFocusDeltas()); if (password != null) { LOGGER.trace("getFocusPasswordFromEvent: Found password in user executed delta(s)"); return password; @@ -402,10 +407,9 @@ public String getFocusPasswordFromEvent(ModelEvent modelEvent) { return null; } - private String getPasswordFromDeltas(List> deltas) { + private String getPasswordFromDeltas(List> deltas) { try { - //noinspection unchecked - return midpointFunctions.getPlaintextUserPasswordFromDeltas((List) deltas); + return midpointFunctions.getPlaintextUserPasswordFromDeltas(deltas); } catch (EncryptionException e) { LoggingUtils.logUnexpectedException(LOGGER, "Couldn't decrypt password from user deltas: {}", e, DebugUtil.debugDump(deltas)); return null; diff --git a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractFocalObjectNotifier.java b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractFocalObjectNotifier.java index b68038a96a8..985218dd65a 100644 --- a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractFocalObjectNotifier.java +++ b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractFocalObjectNotifier.java @@ -12,6 +12,8 @@ import java.util.Date; import java.util.List; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Component; @@ -27,16 +29,12 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.SimpleFocalObjectNotifierType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; /** - * + * This is the "main" notifier that deals with modifications of focal objects i.e. AssignmentHolderType and below. */ @Component -public abstract class AbstractFocalObjectNotifier extends AbstractGeneralNotifier { +public abstract class AbstractFocalObjectNotifier extends AbstractGeneralNotifier { private static final Trace LOGGER = TraceManager.getTrace(AbstractFocalObjectNotifier.class); @@ -60,14 +58,14 @@ protected boolean quickCheckApplicability(ModelEvent event, SimpleFocalObjectNot @Override protected boolean checkApplicability(ModelEvent event, C configuration, OperationResult result) { - List> deltas = event.getFocusDeltas(); + List> deltas = event.getFocusDeltas(); if (deltas.isEmpty()) { LOGGER.trace("No deltas found, skipping the notification"); return false; } else if (isWatchAuxiliaryAttributes(configuration)) { return true; } else { - for (ObjectDelta delta : deltas) { + for (ObjectDelta delta : deltas) { if (!delta.isModify() || deltaContainsOtherPathsThan(delta, functions.getAuxiliaryPaths())) { return true; } @@ -103,15 +101,15 @@ protected String getBody(ModelEvent modelEvent, C configuration, String transpor boolean techInfo = Boolean.TRUE.equals(configuration.isShowTechnicalInformation()); //noinspection unchecked - ModelContext modelContext = (ModelContext) modelEvent.getModelContext(); - ModelElementContext focusContext = modelContext.getFocusContext(); - PrismObject focusObject = focusContext.getObjectNew() != null ? focusContext.getObjectNew() : focusContext.getObjectOld(); - FocusType focus = focusObject.asObjectable(); + ModelContext modelContext = (ModelContext) modelEvent.getModelContext(); + ModelElementContext focusContext = modelContext.getFocusContext(); + PrismObject focusObject = focusContext.getObjectNew() != null ? focusContext.getObjectNew() : focusContext.getObjectOld(); + AssignmentHolderType focus = focusObject.asObjectable(); String oid = focusContext.getOid(); String fullName = emptyIfNull(getFullName(focus)); - ObjectDelta delta = ObjectDeltaCollectionsUtil.summarize(modelEvent.getFocusDeltas()); + ObjectDelta delta = ObjectDeltaCollectionsUtil.summarize(modelEvent.getFocusDeltas()); StringBuilder body = new StringBuilder(); @@ -150,14 +148,14 @@ protected String getBody(ModelEvent modelEvent, C configuration, String transpor } @Nullable - private String getFullName(FocusType focus) { + private String getFullName(AssignmentHolderType focus) { String fullName; if (focus instanceof UserType) { fullName = PolyString.getOrig(((UserType) focus).getFullName()); } else if (focus instanceof AbstractRoleType) { fullName = PolyString.getOrig(((AbstractRoleType) focus).getDisplayName()); } else { - fullName = ""; // TODO (currently it's not possible to get here) + fullName = ""; // TODO } return fullName; } diff --git a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractGeneralNotifier.java b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractGeneralNotifier.java index 67224c02b75..a017a31403e 100644 --- a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractGeneralNotifier.java +++ b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/AbstractGeneralNotifier.java @@ -345,7 +345,7 @@ boolean deltaContainsOtherPathsThan(ObjectDelta delta, Lis } boolean isWatchAuxiliaryAttributes(N configuration) { - return Boolean.TRUE.equals((configuration).isWatchAuxiliaryAttributes()); + return Boolean.TRUE.equals(configuration.isWatchAuxiliaryAttributes()); } String formatRequester(E event, OperationResult result) { diff --git a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/SimpleFocalObjectNotifier.java b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/SimpleFocalObjectNotifier.java index 0e612b6504d..b5b10d23fc2 100644 --- a/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/SimpleFocalObjectNotifier.java +++ b/model/notifications-impl/src/main/java/com/evolveum/midpoint/notifications/impl/notifiers/SimpleFocalObjectNotifier.java @@ -7,15 +7,16 @@ package com.evolveum.midpoint.notifications.impl.notifiers; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; + import org.springframework.stereotype.Component; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SimpleFocalObjectNotifierType; @Component -public class SimpleFocalObjectNotifier extends AbstractFocalObjectNotifier { +public class SimpleFocalObjectNotifier extends AbstractFocalObjectNotifier { private static final Trace LOGGER = TraceManager.getTrace(SimpleFocalObjectNotifier.class); @@ -25,8 +26,8 @@ public Class getEventHandlerConfigurationType() { } @Override - Class getFocusClass() { - return FocusType.class; + Class getFocusClass() { + return AssignmentHolderType.class; } @Override