use of org.apache.knox.gateway.filter.rewrite.spi.UrlRewriteStepStatus in project knox by apache.
the class UrlRewriteProcessor method rewrite.
@Override
public Template rewrite(Resolver resolver, Template inputUri, Direction direction, String ruleName) {
Template outputUri = inputUri;
String serviceRole = null;
if (resolver != null) {
List<String> serviceRoles = resolver.resolve("service.role");
if (serviceRoles != null && !serviceRoles.isEmpty()) {
serviceRole = serviceRoles.get(0);
}
}
UrlRewriteStepProcessorHolder stepHolder = null;
String effectiveRuleName = null;
if (ruleName == null || "*".equals(ruleName)) {
// Used for logging later.
ruleName = null;
Matcher<UrlRewriteRuleProcessorHolder>.Match match = null;
switch(direction) {
case IN:
match = inbound.match(outputUri, serviceRole);
break;
case OUT:
match = outbound.match(outputUri, serviceRole);
break;
}
if (match != null) {
stepHolder = match.getValue();
effectiveRuleName = match.getValue().getRuleName();
}
} else if (!ruleName.isEmpty()) {
stepHolder = rules.get(ruleName);
effectiveRuleName = ruleName;
}
if (stepHolder != null) {
UrlRewriteContext context = new UrlRewriteContextImpl(environment, resolver, functions, direction, inputUri);
try {
UrlRewriteStepStatus stepStatus = stepHolder.process(context);
if (UrlRewriteStepStatus.SUCCESS == stepStatus) {
outputUri = context.getCurrentUrl();
if (ruleName == null) {
LOG.rewroteUrlViaImplicitRule(inputUri, direction, effectiveRuleName, outputUri);
} else {
LOG.rewroteUrlViaExplicitRule(inputUri, direction, effectiveRuleName, outputUri);
}
} else {
LOG.failedToRewriteUrl(inputUri, direction, effectiveRuleName, stepStatus);
outputUri = null;
}
} catch (Exception e) {
LOG.failedToRewriteUrlDueToException(inputUri, direction, effectiveRuleName, e);
outputUri = null;
}
} else {
LOG.noRuleMatchingUrl(inputUri, direction);
}
return outputUri;
}
use of org.apache.knox.gateway.filter.rewrite.spi.UrlRewriteStepStatus in project knox by apache.
the class UrlRewriteStepProcessorHolder method processActions.
private UrlRewriteStepStatus processActions(UrlRewriteContext context, UrlRewriteStepProcessorState state) throws Exception {
UrlRewriteStepStatus flowStatus = UrlRewriteStepStatus.SUCCESS;
while (state.hasNextAction()) {
if (flowStatus == UrlRewriteStepStatus.SUCCESS) {
UrlRewriteStepStatus stepStatus = UrlRewriteStepStatus.SUCCESS;
UrlRewriteStepProcessorHolder step = state.nextAction(stepStatus);
stepStatus = step.process(context);
switch(stepStatus) {
case FAILURE:
flowStatus = UrlRewriteStepStatus.FAILURE;
continue;
case FINISHED:
return stepStatus;
}
}
}
return flowStatus;
}
use of org.apache.knox.gateway.filter.rewrite.spi.UrlRewriteStepStatus in project knox by apache.
the class UrlRewriteStepProcessorHolder method processAndFlow.
// All conditions proceeding a set of one or more actions must succeed for the actions to be executed.
private UrlRewriteStepStatus processAndFlow(UrlRewriteContext context) throws Exception {
UrlRewriteStepProcessorState state = new UrlRewriteStepProcessorState(childProcessors.iterator());
UrlRewriteStepStatus stepStatus = UrlRewriteStepStatus.SUCCESS;
UrlRewriteStepProcessorHolder step;
while (state.hasNext()) {
while (state.hasNextCondition()) {
step = state.nextCondition(stepStatus);
stepStatus = step.process(context);
if (!(stepStatus == UrlRewriteStepStatus.SUCCESS)) {
return stepStatus;
}
}
stepStatus = processActions(context, state);
if (!(stepStatus == UrlRewriteStepStatus.SUCCESS)) {
return stepStatus;
}
}
return UrlRewriteStepStatus.SUCCESS;
}
use of org.apache.knox.gateway.filter.rewrite.spi.UrlRewriteStepStatus in project knox by apache.
the class UrlRewriteStepProcessorHolder method process.
@Override
public UrlRewriteStepStatus process(UrlRewriteContext context) throws Exception {
UrlRewriteStepStatus status = UrlRewriteStepStatus.SUCCESS;
// If initialization failed then fail processing
if (processor != null) {
status = processor.process(context);
if (UrlRewriteStepStatus.SUCCESS == status && descriptor instanceof UrlRewriteFlowDescriptor && !childProcessors.isEmpty()) {
UrlRewriteFlowDescriptor flowDescriptor = (UrlRewriteFlowDescriptor) descriptor;
UrlRewriteStepFlow flow = flowDescriptor.flow();
if (flow == null) {
flow = UrlRewriteStepFlow.AND;
}
switch(flow) {
case ALL:
return processAllFlow(context);
case AND:
return processAndFlow(context);
case OR:
return processOrFlow(context);
}
}
}
return status;
}
use of org.apache.knox.gateway.filter.rewrite.spi.UrlRewriteStepStatus in project knox by apache.
the class UrlRewriteStepProcessorHolder method processAllFlow.
private UrlRewriteStepStatus processAllFlow(UrlRewriteContext context) throws Exception {
UrlRewriteStepProcessorState state = new UrlRewriteStepProcessorState(childProcessors.iterator());
UrlRewriteStepStatus stepStatus = UrlRewriteStepStatus.SUCCESS;
UrlRewriteStepProcessorHolder step;
while (state.hasNext()) {
while (state.hasNextCondition()) {
step = state.nextCondition(stepStatus);
stepStatus = step.process(context);
if (stepStatus == UrlRewriteStepStatus.FINISHED) {
return stepStatus;
}
}
stepStatus = processActions(context, state);
if (stepStatus == UrlRewriteStepStatus.FINISHED) {
return stepStatus;
}
}
return UrlRewriteStepStatus.SUCCESS;
}
Aggregations