Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Sep 26, 2019
2 parents 1369520 + 6357517 commit 405a1f6
Show file tree
Hide file tree
Showing 23 changed files with 401 additions and 752 deletions.
Expand Up @@ -87,6 +87,7 @@
import com.evolveum.midpoint.web.page.admin.resources.PageResource;
import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard;
import com.evolveum.midpoint.web.page.admin.resources.PageResources;
import com.evolveum.midpoint.web.page.admin.resources.content.PageAccount;
import com.evolveum.midpoint.web.page.admin.roles.PageRole;
import com.evolveum.midpoint.web.page.admin.roles.PageRoles;
import com.evolveum.midpoint.web.page.admin.server.PageTaskEdit;
Expand Down Expand Up @@ -206,6 +207,7 @@ public final class WebComponentUtil {
objectDetailsPageMap.put(ValuePolicyType.class, PageValuePolicy.class);
objectDetailsPageMap.put(CaseType.class, PageCase.class);
objectDetailsPageMap.put(ArchetypeType.class, PageArchetype.class);
objectDetailsPageMap.put(ShadowType.class, PageAccount.class);
}

static{
Expand Down
Expand Up @@ -18,6 +18,8 @@
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.wf.api.WorkflowConstants;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.*;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
Expand All @@ -38,14 +40,23 @@
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.QNameUtil;
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.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectDeltaOperationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import com.evolveum.prism.xml.ns._public.types_3.RawType;

import javax.xml.datatype.XMLGregorianCalendar;

Expand Down Expand Up @@ -118,6 +129,8 @@ public class PageAuditLogDetails extends PageBase {
WorkflowConstants.AUDIT_COMMENT,
WorkflowConstants.AUDIT_WORK_ITEM_ID,
WorkflowConstants.AUDIT_PROCESS_INSTANCE_ID);

private Map<String, String> resourceForShadow = new HashMap<String, String>();

public PageAuditLogDetails() {
AuditLogStorage storage = getSessionStorage().getAuditLog();
Expand Down Expand Up @@ -444,7 +457,7 @@ private void initDeltasPanel(WebMarkupContainer eventPanel){
List<ObjectDeltaOperationType> deltas = recordModel.getObject().getDelta();
RepeatingView deltaScene = new RepeatingView(ID_DELTA_LIST_PANEL);

for(ObjectDeltaOperationType deltaOp :deltas){
for(ObjectDeltaOperationType deltaOp :connectDeltas(deltas)){
ObjectDeltaOperationPanel deltaPanel = new ObjectDeltaOperationPanel(deltaScene.newChildId(), Model.of(deltaOp), this);
deltaPanel.setOutputMarkupId(true);
deltaScene.add(deltaPanel);
Expand All @@ -455,7 +468,57 @@ private void initDeltasPanel(WebMarkupContainer eventPanel){

}

protected void initLayoutBackButton() {
private Collection<ObjectDeltaOperationType> connectDeltas(List<ObjectDeltaOperationType> deltas) {
Map<PolyStringType, ObjectDeltaOperationType> focusDeltas = new HashMap<PolyStringType, ObjectDeltaOperationType>();
List<ObjectDeltaOperationType> otherDeltas = new ArrayList<ObjectDeltaOperationType>();
for (ObjectDeltaOperationType delta : deltas) {
if (delta != null && delta.getObjectDelta() != null && FocusType.class.isAssignableFrom(WebComponentUtil.qnameToClass(getPrismContext(), delta.getObjectDelta().getObjectType()))) {
if (focusDeltas.containsKey(delta.getObjectName())) {
focusDeltas.get(delta.getObjectName()).setResourceName(null);
focusDeltas.get(delta.getObjectName()).setResourceOid(null);
if (delta.getObjectDelta() != null) {
if (focusDeltas.get(delta.getObjectName()).getObjectDelta() == null) {
focusDeltas.get(delta.getObjectName()).setObjectDelta(delta.getObjectDelta());
} else {
focusDeltas.get(delta.getObjectName()).getObjectDelta().getItemDelta().addAll(delta.getObjectDelta().getItemDelta());
}
for (ItemDeltaType itemDelta : delta.getObjectDelta().getItemDelta()) {
if (itemDelta == null) {
continue;
}
if ((delta.getResourceName() != null || !StringUtils.isEmpty(delta.getResourceOid()))
&& itemDelta.getPath() != null && ItemPath.create(FocusType.F_LINK_REF).equivalent(itemDelta.getPath().getItemPath())) {
for (RawType rawType : itemDelta.getValue()) {
if (rawType != null && QNameUtil.match(rawType.getExplicitTypeName(), ObjectReferenceType.COMPLEX_TYPE)) {
try {
ObjectReferenceType ref = rawType.getParsedRealValue(ObjectReferenceType.class);
if (ref != null && !StringUtils.isEmpty(ref.getOid())) {
String resource = (delta.getResourceName() != null) ? delta.getResourceName().getOrig() : delta.getResourceOid();
resourceForShadow.put(ref.getOid(), resource);
}
} catch (SchemaException e) {
LOGGER.debug("Couldn't parse ObjectReferenceType from RawType {}", rawType);
e.printStackTrace();
}
}
}
}
}
}
} else {
focusDeltas.put(delta.getObjectName(), delta);
}
} else {
otherDeltas.add(delta);
}
}
List<ObjectDeltaOperationType> retDeltas = new ArrayList<ObjectDeltaOperationType>();
retDeltas.addAll(focusDeltas.values());
retDeltas.addAll(otherDeltas);
return retDeltas;
}

protected void initLayoutBackButton() {
AjaxButton back = new AjaxButton(ID_BUTTON_BACK, createStringResource("PageBase.button.back")) {

@Override
Expand Down
Expand Up @@ -154,10 +154,13 @@ public void test801SyncAddAccountHt() throws Exception {
assertStepSyncToken(getSyncTaskOid(), 1, tsStart, tsEnd);
}

// Do not change cn here. This triggers rename in the AD case.
/**
* Changing account sn directly.
* Do not change cn here. But even if sn is not changed, this triggers rename in the AD case.
*/
@Test
public void test802ModifyAccountHt() throws Exception {
final String TEST_NAME = "test802ModifyAccountHt";
public void test802ModifyAccountHtSn() throws Exception {
final String TEST_NAME = "test802ModifyAccountHtSn";
displayTestTitle(TEST_NAME);

// GIVEN
Expand All @@ -169,16 +172,15 @@ public void test802ModifyAccountHt() throws Exception {
// WHEN
displayWhen(TEST_NAME);
LdapNetworkConnection connection = ldapConnect();
Modification modCn = new DefaultModification(ModificationOperation.REPLACE_ATTRIBUTE, "sn", ACCOUNT_HT_SN_MODIFIED);
connection.modify(toAccountDn(ACCOUNT_HT_UID, ACCOUNT_HT_CN), modCn);
Modification modSn = new DefaultModification(ModificationOperation.REPLACE_ATTRIBUTE, "sn", ACCOUNT_HT_SN_MODIFIED);
connection.modify(toAccountDn(ACCOUNT_HT_UID, ACCOUNT_HT_CN), modSn);
ldapDisconnect(connection);

waitForTaskNextRunAssertSuccess(getSyncTaskOid(), true);

// THEN
displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
assertSuccess(result);

long tsEnd = System.currentTimeMillis();

Expand Down Expand Up @@ -212,8 +214,7 @@ public void test810SyncAddGroupMonkeys() throws Exception {

// THEN
displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
assertSuccess(result);

long tsEnd = System.currentTimeMillis();

Expand Down Expand Up @@ -256,8 +257,7 @@ public void test817RenameAccount() throws Exception {

// THEN
displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
assertSuccess(result);

long tsEnd = System.currentTimeMillis();

Expand Down
Expand Up @@ -100,7 +100,7 @@ public void test228ModifyUserBarbossaPasswordSelfServiceDesynchronized() throws
assertPartialError(result);
assertMessageContains(result.getMessage(), "CONSTRAINT_ATT_TYPE");

assertBarbossaEnabled(USER_BARBOSSA_PASSWORD_AD_3);
assertBarbossaEnabled(USER_BARBOSSA_PASSWORD_AD_1);
assertUserAfter(USER_BARBOSSA_OID)
.assertPassword(USER_BARBOSSA_PASSWORD_AD_3)
.singleLink()
Expand Down
Expand Up @@ -1263,7 +1263,7 @@ public void test239EnableUserBarbossaRawAndReconcile() throws Exception {
assertLdapConnectorInstances(2);
}

protected PrismObject<UserType> assertBarbossaEnabled(String password) throws Exception {
protected PrismObject<UserType> assertBarbossaEnabled(String ldapPassword) throws Exception {
PrismObject<UserType> user = getUser(USER_BARBOSSA_OID);
assertAdministrativeStatus(user, ActivationStatusType.ENABLED);

Expand All @@ -1278,7 +1278,7 @@ protected PrismObject<UserType> assertBarbossaEnabled(String password) throws Ex

assertEquals("Shadows have moved", accountBarbossaOid, shadowOid);

assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, password);
assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, ldapPassword);

return user;
}
Expand Down Expand Up @@ -2290,7 +2290,7 @@ public void test850ReconcileAccounts() throws Exception {
// THEN
displayThen(TEST_NAME);

assertUsers(23);
assertUsers(15);
// TODO

// assertLdapConnectorInstances(2);
Expand Down

0 comments on commit 405a1f6

Please sign in to comment.