Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
Conflicts:
	gui/admin-gui/src/main/resources/localization/Midpoint.properties
  • Loading branch information
katkav committed Nov 9, 2015
2 parents d878862 + 0531ec7 commit 7777cc0
Show file tree
Hide file tree
Showing 71 changed files with 3,681 additions and 2,049 deletions.
6 changes: 6 additions & 0 deletions build-system/pom.xml
Expand Up @@ -695,6 +695,12 @@
<groupId>org.bouncycastle</groupId>
<artifactId>bctsp-jdk14</artifactId>
</exclusion>
<exclusion> <!-- Pulled in by castor-xml. Conflicts with itself (depends both on stax-api 1.0-2 and 1.0.1)
Note: the 1.0-2 and 1.0.1 have differeng group IDs (but same java packages),
so dependency convergence will not detect this. -->
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
<!-- use in midPoint 3.2
<exclusion>
<groupId>org.apache.lucene</groupId>
Expand Down
2 changes: 1 addition & 1 deletion config/initial-objects/100-report-reconciliation.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion config/initial-objects/110-report-user-list.xml

Large diffs are not rendered by default.

Expand Up @@ -16,34 +16,73 @@

package com.evolveum.midpoint.web.component.menu;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.crypto.EncryptionException;
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.MidPointPrincipal;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.util.BaseSimplePanel;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.home.PageMyPasswordQuestions;
import com.evolveum.midpoint.web.page.admin.home.dto.PasswordQuestionsDto;
import com.evolveum.midpoint.web.page.admin.home.dto.SecurityQuestionAnswerDTO;
import com.evolveum.midpoint.web.security.SecurityUtils;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionAnswerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionsCredentialsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.cycle.RequestCycle;
import org.springframework.security.core.context.SecurityContextHolder;

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

/**
* @author lazyman
*/
public class UserMenuPanel extends BaseSimplePanel {

private static final Trace LOGGER = TraceManager.getTrace(UserMenuPanel.class);
private static final String ID_USERNAME_LINK = "usernameLink";
private static final String ID_LOGOUT_LINK = "logoutLink";

private static final String ID_USERNAME = "username";

private static final String ID_EDIT_PROFILE = "editProfile";
private static final String ID_PASSWORD_QUESTIONS = "passwordQuestions";
private IModel<PasswordQuestionsDto> passwordQuestionsDtoIModel;
private static final String DOT_CLASS = UserMenuPanel.class.getName() + ".";
private static final String OPERATION_LOAD_USER = DOT_CLASS + "loaduser";

private boolean isModelLoaded = false;

public UserMenuPanel(String id) {
super(id);
if (!isModelLoaded) {
passwordQuestionsDtoIModel = new LoadableModel<PasswordQuestionsDto>(false) {

private static final long serialVersionUID = 1L;

@Override
protected PasswordQuestionsDto load() {
return loadModel();
}
};
}
}

@Override
Expand Down Expand Up @@ -77,10 +116,32 @@ public String getObject() {

@Override
public void onClick(AjaxRequestTarget target) {
setResponsePage(PageMyPasswordQuestions.class);
PageMyPasswordQuestions myPasswordQuestions = new PageMyPasswordQuestions(passwordQuestionsDtoIModel);
setResponsePage(myPasswordQuestions);
}
};
add(editPasswordQ);

if (!isModelLoaded) {
passwordQuestionsDtoIModel = new LoadableModel<PasswordQuestionsDto>(false) {

private static final long serialVersionUID = 1L;

@Override
protected PasswordQuestionsDto load() {
return loadModel();
}
};
}
if (passwordQuestionsDtoIModel.getObject() == null ||
((passwordQuestionsDtoIModel.getObject().getPwdQuestion() == null
|| passwordQuestionsDtoIModel.getObject().getPwdQuestion().trim().equals(""))
&& (passwordQuestionsDtoIModel.getObject().getSecurityAnswers() == null
|| passwordQuestionsDtoIModel.getObject().getSecurityAnswers().size() == 0)
&& (passwordQuestionsDtoIModel.getObject().getPwdAnswer() == null
|| passwordQuestionsDtoIModel.getObject().getPwdAnswer().trim().equals("")))) {
editPasswordQ.setVisible(false);
}
}

private String getShortUserName() {
Expand All @@ -98,4 +159,73 @@ private String getShortUserName() {

return principal.toString();
}

private PasswordQuestionsDto loadModel() {
LOGGER.debug("Loading user for Security Question Page.");

PasswordQuestionsDto dto =new PasswordQuestionsDto();
OperationResult result = new OperationResult(OPERATION_LOAD_USER);
try{


String userOid = SecurityUtils.getPrincipalUser().getOid();
Task task = ((PageBase)getPage()).createSimpleTask(OPERATION_LOAD_USER);
OperationResult subResult = result.createSubresult(OPERATION_LOAD_USER);

PrismObject<UserType> user = ((PageBase)getPage()).getModelService().getObject(UserType.class, userOid, null, task, subResult);

dto.setSecurityAnswers(createUsersSecurityQuestionsList(user));

subResult.recordSuccessIfUnknown();

}
catch (Exception ex) {
LoggingUtils.logExceptionOnDebugLevel(LOGGER, "Couldn't get user Questions, Probably not set yet", ex);

} finally {
result.recomputeStatus();
isModelLoaded = true;
}
return dto;
}

public List<SecurityQuestionAnswerDTO> createUsersSecurityQuestionsList(PrismObject<UserType> user) {

SecurityQuestionsCredentialsType credentialsPolicyType = user.asObjectable().getCredentials()
.getSecurityQuestions();
if (credentialsPolicyType == null) {
return null;
}
List<SecurityQuestionAnswerType> secQuestAnsList = credentialsPolicyType.getQuestionAnswer();

if (secQuestAnsList != null) {
List<SecurityQuestionAnswerDTO> secQuestAnswListDTO = new ArrayList<SecurityQuestionAnswerDTO>();
for (Iterator iterator = secQuestAnsList.iterator(); iterator.hasNext();) {
SecurityQuestionAnswerType securityQuestionAnswerType = (SecurityQuestionAnswerType) iterator
.next();
// System.out.println(securityQuestionAnswerType.getQuestionIdentifier());
Protector protector = ((PageBase) getPage()).getPrismContext().getDefaultProtector();
String decoded = "";
if (securityQuestionAnswerType.getQuestionAnswer().getEncryptedDataType() != null) {
try {
decoded = protector.decryptString(securityQuestionAnswerType.getQuestionAnswer());
} catch (EncryptionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

secQuestAnswListDTO.add(new SecurityQuestionAnswerDTO(securityQuestionAnswerType
.getQuestionIdentifier(), decoded));
}

return secQuestAnswListDTO;

} else {
return null;
}

}


}
Expand Up @@ -554,7 +554,8 @@ public DeltaDto getObject() {
final PrismObject<LookupTableType> lookupTable = WebModelUtils.loadObject(LookupTableType.class,
lookupTableUid, options, pageBase, task, result);

panel = new AutoCompleteTextPanel<String>(id, new LookupPropertyModel<String>(model, baseExpression, lookupTable.asObjectable()), type) {
panel = new AutoCompleteTextPanel<String>(id, new LookupPropertyModel<String>(model, baseExpression,
lookupTable == null ? null : lookupTable.asObjectable()), type) {


@Override
Expand Down
Expand Up @@ -324,7 +324,9 @@ protected List<SideBarMenuItem> createMenuItems() {
}

if (WebMiscUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_RESOURCES_URL,
AuthorizationConstants.AUTZ_UI_RESOURCES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) {
AuthorizationConstants.AUTZ_UI_RESOURCES_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL,
AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL, AuthorizationConstants.AUTZ_UI_RESOURCE_URL,
AuthorizationConstants.AUTZ_UI_RESOURCE_EDIT_URL)) {
items.add(createResourcesItems());
}

Expand Down Expand Up @@ -352,7 +354,12 @@ protected List<SideBarMenuItem> createMenuItems() {
}

if (WebMiscUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) {
AuthorizationConstants.AUTZ_UI_CONFIGURATION_DEBUG_URL, AuthorizationConstants.AUTZ_UI_CONFIGURATION_DEBUGS_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_IMPORT_URL, AuthorizationConstants.AUTZ_UI_CONFIGURATION_LOGGING_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_SYSTEM_CONFIG_URL, AuthorizationConstants.AUTZ_UI_CONFIGURATION_ABOUT_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_SYNCHRONIZATION_ACCOUNTS_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL, AuthorizationConstants.AUTZ_GUI_ALL_URL,
AuthorizationConstants.AUTZ_GUI_ALL_DEPRECATED_URL)) {
items.add(createConfigurationItems());
}

Expand Down
Expand Up @@ -116,7 +116,7 @@
<div class="wrapper">
<header class="main-header">
<!-- Logo -->
<a class="logo" href="#">
<a class="logo" href="./">
<span>&nbsp;</span>
</a>
<!-- Header Navbar: style can be found in header.less -->
Expand Down
Expand Up @@ -2,11 +2,11 @@

import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition;
import com.evolveum.midpoint.common.refinery.RefinedResourceSchema;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.*;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.exception.SchemaException;
Expand Down Expand Up @@ -456,62 +456,79 @@ protected void showAllAssignments(AjaxRequestTarget target) {

private List<InlineMenuItem> createShadowMenu() {
List<InlineMenuItem> items = new ArrayList<InlineMenuItem>();
InlineMenuItem item = new InlineMenuItem(createStringResource("pageAdminFocus.button.addShadow"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
showModalWindow(MODAL_ID_RESOURCE, target);
}
});
items.add(item);
items.add(new InlineMenuItem());
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.enable"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
updateShadowActivation(target, getSelectedProjections(shadowModel), true);
}
});
items.add(item);
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.disable"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
updateShadowActivation(target, getSelectedProjections(shadowModel), false);
}
});
items.add(item);
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.unlink"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
unlinkProjectionPerformed(target, shadowModel, getSelectedProjections(shadowModel), ID_SHADOWS);
}
});
items.add(item);
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.unlock"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
unlockShadowPerformed(target, shadowModel, getSelectedProjections(shadowModel));
}
});
items.add(item);
items.add(new InlineMenuItem());
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.delete"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
deleteProjectionPerformed(target, shadowModel);
}
});
items.add(item);
PrismObjectDefinition def = focusModel.getObject().getObject().getDefinition();
PrismReferenceDefinition ref = def.findReferenceDefinition(UserType.F_LINK_REF);
InlineMenuItem item ;
if (ref.canRead() && ref.canAdd()){
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.addShadow"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
showModalWindow(MODAL_ID_RESOURCE, target);
}
});
items.add(item);
items.add(new InlineMenuItem());
}
PrismPropertyDefinition prop = def.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS);
if (prop.canRead() && prop.canModify()) {
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.enable"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
updateShadowActivation(target, getSelectedProjections(shadowModel), true);
}
});
items.add(item);
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.disable"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
updateShadowActivation(target, getSelectedProjections(shadowModel), false);
}
});
items.add(item);
}
if (ref.canRead() && ref.canAdd()) {
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.unlink"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
unlinkProjectionPerformed(target, shadowModel, getSelectedProjections(shadowModel), ID_SHADOWS);
}
});
items.add(item);
}
prop = def.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_LOCKOUT_STATUS);
if (prop.canRead() && prop.canModify()) {
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.unlock"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
unlockShadowPerformed(target, shadowModel, getSelectedProjections(shadowModel));
}
});
items.add(item);
}
prop = def.findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS);
if (prop.canRead() && prop.canModify()) {
items.add(new InlineMenuItem());
item = new InlineMenuItem(createStringResource("pageAdminFocus.button.delete"),
new InlineMenuItemAction() {

@Override
public void onClick(AjaxRequestTarget target) {
deleteProjectionPerformed(target, shadowModel);
}
});
items.add(item);
}

return items;
}
Expand Down
Expand Up @@ -96,6 +96,11 @@ protected PasswordQuestionsDto load() {

}

public PageMyPasswordQuestions(IModel<PasswordQuestionsDto> model){
this.model = model;
initLayout();
}

public PageMyPasswordQuestions(final PrismObject<UserType> userToEdit) {
userModel = new LoadableModel<ObjectWrapper>(false) {

Expand Down

0 comments on commit 7777cc0

Please sign in to comment.