Skip to content

Commit

Permalink
Merge branch 'master' into feature/manual-connectors
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Apr 3, 2017
2 parents b94d37d + 425a268 commit c81fe5b
Show file tree
Hide file tree
Showing 10 changed files with 112 additions and 59 deletions.
Expand Up @@ -1685,13 +1685,17 @@ public boolean canRedirectBack() {
List<Breadcrumb> breadcrumbs = getBreadcrumbs();
// first is icon (non clickable), last is for "current page" and if there
// is nothing in between then we don't know where to redirect
if (breadcrumbs.size() < 3) {
if (breadcrumbs.size() < getMinimalBreadcrumbsListSize()) {
return false;
}

return true;
}

protected int getMinimalBreadcrumbsListSize(){
return 3;
}

public Breadcrumb redirectBack() {
List<Breadcrumb> breadcrumbs = getBreadcrumbs();
if (!canRedirectBack()) {
Expand Down
Expand Up @@ -31,8 +31,10 @@
import com.evolveum.midpoint.web.page.admin.roles.PageRole;
import com.evolveum.midpoint.web.page.admin.services.PageService;
import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit;
import com.evolveum.midpoint.web.page.admin.workflow.PageWorkItem;
import com.evolveum.midpoint.web.page.self.PageAssignmentDetails;
import com.evolveum.midpoint.web.session.RoleCatalogStorage;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand All @@ -42,6 +44,7 @@
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -255,12 +258,16 @@ private void targetObjectDetailsPerformed(final AssignmentEditorDto assignment,
return;
}
if (!plusIconClicked) {
String targetObjectOid = assignment.getTargetRef().getOid();
OperationResult result = new OperationResult(OPERATION_LOAD_TARGET_OBJECT);
Task task = pageBase.createSimpleTask(OPERATION_LOAD_TARGET_OBJECT);
PrismObject<AbstractRoleType> targetObject = WebModelServiceUtils.loadObject(AbstractRoleType.class,
targetObjectOid, pageBase, task, result);
pageBase.navigateToNext(getTargetObjectDetailsPage(assignment.getType(), targetObject));
PageParameters parameters = new PageParameters();
parameters.add(OnePageParameterEncoder.PARAMETER, assignment.getTargetRef().getOid());

if (AssignmentEditorDtoType.ORG_UNIT.equals(assignment.getType())){
getPageBase().navigateToNext(PageOrgUnit.class, parameters);
} else if (AssignmentEditorDtoType.ROLE.equals(assignment.getType())){
getPageBase().navigateToNext(PageRole.class, parameters);
} else if (AssignmentEditorDtoType.SERVICE.equals(assignment.getType())){
getPageBase().navigateToNext(PageService.class, parameters);
}
} else {
plusIconClicked = false;
}
Expand Down
Expand Up @@ -20,7 +20,7 @@
<span class="prism-title" wicket:id="label"/>
<div class="box-tools pull-right">
<button wicket:id="sortProperties" wicket:message="title:PrismObjectPanel.sortProperties" class="btn btn-box-tool" data-toggle="tooltip"><i class="fa fa-sort-alpha-asc"></i></button>
<button wicket:id="showEmptyFields" wicket:message="title:PrismObjectPanel.showEmpty" class="btn btn-box-tool" data-toggle="tooltip" about="showEmptyFields"><i class="fa fa-arrows-alt"></i></button>
<button wicket:id="showEmptyFields" wicket:message="title:PrismObjectPanel.showEmpty" class="btn btn-box-tool" data-toggle="tooltip" trigger="hover" about="showEmptyFields"><i class="fa fa-arrows-alt"></i></button>
</div>
</wicket:panel>
</html>
Expand Up @@ -68,15 +68,20 @@ public boolean isVisible() {
public void onClick(AjaxRequestTarget target) {
ObjectWrapper objectWrapper = getObjectWrapper(model);
objectWrapper.setShowEmpty(!objectWrapper.isShowEmpty());
onButtonClick(target);
//
// target.appendJavaScript("document.getElementsByClassName('tooltip').style.visibility = 'hidden';");

onButtonClick(target);
}

@Override
public boolean isOn() {
return getObjectWrapper(model).isShowEmpty();
}
};
showEmptyFieldsButton.add(buttonsVisibleBehaviour);
showEmptyFieldsButton.setMarkupId(ID_SHOW_EMPTY_FIELDS);

showEmptyFieldsButton.add(buttonsVisibleBehaviour);
add(showEmptyFieldsButton);

ToggleIconButton sortPropertiesButton = new ToggleIconButton(ID_SORT_PROPERTIES,
Expand Down
Expand Up @@ -80,5 +80,9 @@ public void onClick(AjaxRequestTarget target) {
mainForm.add(addToCart);
}

@Override
public boolean canRedirectBack(){
return true;
}

}
Expand Up @@ -427,4 +427,10 @@ private Component getRequestButton(){
private TextArea getDescriptionComponent(){
return (TextArea) get(ID_FORM).get(ID_DESCRIPTION);
}

@Override
public boolean canRedirectBack(){
return true;
}

}
Expand Up @@ -32,6 +32,8 @@
import org.apache.cxf.message.Message;
import org.springframework.beans.factory.annotation.Autowired;

import com.evolveum.midpoint.model.impl.util.RestServiceUtil;

/**
* @author Katka Valalikova
* @author Radovan Semancik
Expand All @@ -40,31 +42,6 @@ public class MidpointRestAuthenticationHandler implements ContainerRequestFilter

// private static final Trace LOGGER = TraceManager.getTrace(MidpointRestAuthenticationHandler.class);

private enum AuthenticationType {
BASIC("Basic"), SECURITY_QUESTIONS("SecQ");

private String authenticationType;

private AuthenticationType(String authneticationType) {
this.authenticationType = authneticationType;
}

protected boolean equals(String authenticationType) {
if (StringUtils.isBlank(authenticationType)) {
return false;
}

if (getAuthenticationType().equals(authenticationType)) {
return true;
}
return false;
}

protected String getAuthenticationType() {
return authenticationType;
}
}

@Autowired(required=true)
private MidpointRestPasswordAuthenticator passwordAuthenticator;

Expand All @@ -90,36 +67,36 @@ public void filter(ContainerRequestContext requestCtx) throws IOException {
String authorization = requestCtx.getHeaderString("Authorization");

if (StringUtils.isBlank(authorization)){
createAbortMessage(requestCtx);
RestServiceUtil.createAbortMessage(requestCtx);
return;
}

String[] parts = authorization.split(" ");
String authenticationType = parts[0];

if (parts.length == 1) {
if (AuthenticationType.SECURITY_QUESTIONS.equals(authenticationType)) {
createAbortMessage(requestCtx);
if (RestAuthenticationMethod.SECURITY_QUESTIONS.equals(authenticationType)) {
RestServiceUtil.createAbortMessage(requestCtx);
return;
}
}

if (parts.length != 2 || (!"SecQ".equals(authenticationType))) {
createAbortMessage(requestCtx);
if (parts.length != 2 || (!RestAuthenticationMethod.SECURITY_QUESTIONS.equals(authenticationType))) {
RestServiceUtil.createAbortMessage(requestCtx);
return;
}
String base64Credentials = (parts.length == 2) ? parts[1] : null;
try {
String decodedCredentials = new String(Base64Utility.decode(base64Credentials));
if ("SecQ".equals(authenticationType)) {
if (RestAuthenticationMethod.SECURITY_QUESTIONS.equals(authenticationType)) {

policy = new AuthorizationPolicy();
policy.setAuthorizationType("SecQ");
policy.setAuthorizationType(RestAuthenticationMethod.SECURITY_QUESTIONS.getMethod());
policy.setAuthorization(decodedCredentials);
}
securityQuestionAuthenticator.handleRequest(policy, m, requestCtx);
} catch (Base64Exception e) {
createAbortMessage(requestCtx);
RestServiceUtil.createAbortMessage(requestCtx);
return;

}
Expand All @@ -128,10 +105,10 @@ public void filter(ContainerRequestContext requestCtx) throws IOException {



private void createAbortMessage(ContainerRequestContext requestCtx){
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED)
.header("WWW-Authenticate", AuthenticationType.BASIC.getAuthenticationType() + ", " + AuthenticationType.SECURITY_QUESTIONS.getAuthenticationType()).build());
}

// protected void createAbortMessage(ContainerRequestContext requestCtx){
// requestCtx.abortWith(Response.status(Status.UNAUTHORIZED)
// .header("WWW-Authenticate", AuthenticationType.BASIC.getAuthenticationType() + " realm=\"midpoint\", " + AuthenticationType.SECURITY_QUESTIONS.getAuthenticationType()).build());
// }
//

}
Expand Up @@ -67,7 +67,7 @@ public abstract class MidpointRestAuthenticator<T extends AbstractAuthentication
public void handleRequest(AuthorizationPolicy policy, Message m, ContainerRequestContext requestCtx) {

if (policy == null){
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED).header("WWW-Authenticate", "Basic, SecQ").build());
RestServiceUtil.createAbortMessage(requestCtx);
return;
}

Expand All @@ -76,14 +76,14 @@ public void handleRequest(AuthorizationPolicy policy, Message m, ContainerReques
try {
authenticationContext = createAuthenticationContext(policy);
} catch (IOException e1) {
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED).header("WWW-Authenticate", "Basic, SecQ").build());
RestServiceUtil.createAbortMessage(requestCtx);
return;
}

String enteredUsername = authenticationContext.getUsername();

if (enteredUsername == null){
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED).header("WWW-Authenticate", "Basic, SecQ").build());
RestServiceUtil.createAbortMessage(requestCtx);
return;
}

Expand Down
@@ -0,0 +1,30 @@
package com.evolveum.midpoint.model.impl.security;

import org.apache.commons.lang.StringUtils;

public enum RestAuthenticationMethod {

BASIC("Basic"),
SECURITY_QUESTIONS("SecQ");

private String method;

private RestAuthenticationMethod(String method) {
this.method = method;
}

public String getMethod() {
return method;
}

protected boolean equals(String authenticationType) {
if (StringUtils.isBlank(authenticationType)) {
return false;
}

if (getMethod().equals(authenticationType)) {
return true;
}
return false;
}
}
Expand Up @@ -16,23 +16,38 @@

package com.evolveum.midpoint.model.impl.util;

import java.util.List;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;

import org.apache.cxf.jaxrs.ext.MessageContext;

import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.impl.security.RestAuthenticationMethod;
import com.evolveum.midpoint.model.impl.security.SecurityHelper;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.security.api.ConnectionEnvironment;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.*;
import com.evolveum.midpoint.util.exception.AuthorizationException;
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConcurrencyException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ConsistencyViolationException;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.NoFocusNameSchemaException;
import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.PolicyViolationException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.util.exception.TunnelException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType;

import org.apache.cxf.jaxrs.ext.MessageContext;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.util.List;

/**
* @author mederly (only copied existing code)
*/
Expand Down Expand Up @@ -113,4 +128,9 @@ public static Response.ResponseBuilder createResultHeaders(Response.ResponseBuil
.header(OPERATION_RESULT_STATUS, OperationResultStatus.createStatusType(result.getStatus()).value())
.header(OPERATION_RESULT_MESSAGE, result.getMessage());
}

public static void createAbortMessage(ContainerRequestContext requestCtx){
requestCtx.abortWith(Response.status(Status.UNAUTHORIZED)
.header("WWW-Authenticate", RestAuthenticationMethod.BASIC.getMethod() + " realm=\"midpoint\", " + RestAuthenticationMethod.SECURITY_QUESTIONS.getMethod()).build());
}
}

0 comments on commit c81fe5b

Please sign in to comment.