use of org.apache.knox.gateway.filter.rewrite.api.UrlRewriteEnvironment in project knox by apache.
the class HostmapFunctionProcessorTest method testInvalidFunctionNameUseCase.
@Test
public void testInvalidFunctionNameUseCase() throws Exception {
URL configUrl = TestUtils.getResourceUrl(this.getClass(), "hostmap.txt");
UrlRewriteEnvironment environment = EasyMock.createNiceMock(UrlRewriteEnvironment.class);
EasyMock.expect(environment.getResource("/WEB-INF/hostmap.txt")).andReturn(configUrl).anyTimes();
Resolver resolver = EasyMock.createNiceMock(Resolver.class);
EasyMock.expect(resolver.resolve("host")).andReturn(Arrays.asList("test-inbound-host")).anyTimes();
EasyMock.replay(environment, resolver);
UrlRewriteRulesDescriptor descriptor = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = descriptor.addRule("test-rule");
rule.pattern("{*}://{host}:{*}/{**}?{**}");
UrlRewriteActionRewriteDescriptorExt rewrite = rule.addStep("rewrite");
rewrite.template("{*}://{$invalid-function(host)}:{*}/{**}?{**}");
UrlRewriteProcessor rewriter = new UrlRewriteProcessor();
rewriter.initialize(environment, descriptor);
Template input = Parser.parseLiteral("test-scheme://test-inbound-host:42/test-path/test-file?test-name=test-value");
Template output = rewriter.rewrite(resolver, input, UrlRewriter.Direction.IN, null);
// System.out.println( output );
assertThat(output, notNullValue());
assertThat(output.getHost().getFirstValue().getPattern(), is("$invalid-function(host)"));
}
use of org.apache.knox.gateway.filter.rewrite.api.UrlRewriteEnvironment in project knox by apache.
the class InboundUrlFunctionProcessorTest method testServiceResolve.
@Test
public void testServiceResolve() throws Exception {
ServiceLoader loader = ServiceLoader.load(UrlRewriteFunctionProcessor.class);
Iterator iterator = loader.iterator();
assertThat("Service iterator empty.", iterator.hasNext());
InboundUrlFunctionProcessor proc = null;
while (iterator.hasNext()) {
Object object = iterator.next();
if (object instanceof InboundUrlFunctionProcessor) {
proc = (InboundUrlFunctionProcessor) object;
}
}
if (proc == null)
fail("Failed to find " + InboundUrlFunctionProcessor.class.getName() + " via service loader.");
Map<String, UrlRewriteFunctionProcessor> functions = new HashMap<>();
UrlRewriteEnvironment environment = EasyMock.createNiceMock(UrlRewriteEnvironment.class);
UrlRewriter.Direction direction = UrlRewriter.Direction.OUT;
List<String> parameters = Collections.singletonList("host");
Template template = Parser.parseLiteral("https://localhost:8443/gateway/default/datanode/?host=http://foo:50075");
UrlRewriteContextImpl ctx = new UrlRewriteContextImpl(environment, this.getRewriteResponse(), functions, direction, template);
List<String> result = proc.resolve(ctx, parameters);
assertThat(result.get(0), is("http://foo:50075"));
}
use of org.apache.knox.gateway.filter.rewrite.api.UrlRewriteEnvironment in project knox by apache.
the class InboundUrlFunctionProcessorTest method testQueryParam.
@Test
public void testQueryParam() throws Exception {
GatewayServices gatewayServices = EasyMock.createNiceMock(GatewayServices.class);
UrlRewriteEnvironment environment = EasyMock.createNiceMock(UrlRewriteEnvironment.class);
EasyMock.expect(environment.getAttribute(GatewayServices.GATEWAY_SERVICES_ATTRIBUTE)).andReturn(gatewayServices).anyTimes();
EasyMock.expect(environment.resolve("cluster.name")).andReturn(Collections.singletonList("test-cluster-name")).anyTimes();
Resolver resolver = EasyMock.createNiceMock(Resolver.class);
EasyMock.expect(resolver.resolve("query.param.host")).andReturn(Lists.newArrayList("http://foo:50075")).anyTimes();
EasyMock.replay(gatewayServices, environment, resolver);
UrlRewriteRulesDescriptor descriptor = UrlRewriteRulesDescriptorFactory.create();
UrlRewriteRuleDescriptor rule = descriptor.addRule("test-location");
rule.pattern("{*}://{*}:{*}/{**}/?{**}");
UrlRewriteActionRewriteDescriptorExt rewrite = rule.addStep("rewrite");
rewrite.template("{$inboundurl[host]}");
UrlRewriteProcessor rewriter = new UrlRewriteProcessor();
rewriter.initialize(environment, descriptor);
Template input = Parser.parseLiteral("https://localhost:8443/gateway/default/datanode/?host=http://foo:50075");
Template output = rewriter.rewrite(resolver, input, UrlRewriter.Direction.OUT, "test-location");
assertThat(output.toString(), is("http://foo:50075"));
}
use of org.apache.knox.gateway.filter.rewrite.api.UrlRewriteEnvironment in project knox by apache.
the class EncryptDecryptUriProcessorTest method testEncryptDecrypt.
@Test
public void testEncryptDecrypt() throws Exception {
String encryptedValueParamName = "address";
String clusterName = "test-cluster-name";
String passwordAlias = "encryptQueryString";
// Test encryption. Result is in encryptedAdrress
AliasService as = EasyMock.createNiceMock(AliasService.class);
String secret = "asdf";
EasyMock.expect(as.getPasswordFromAliasForCluster(clusterName, passwordAlias)).andReturn(secret.toCharArray()).anyTimes();
CryptoService cryptoService = new DefaultCryptoService();
((DefaultCryptoService) cryptoService).setAliasService(as);
GatewayServices gatewayServices = EasyMock.createNiceMock(GatewayServices.class);
EasyMock.expect(gatewayServices.getService(GatewayServices.CRYPTO_SERVICE)).andReturn(cryptoService);
UrlRewriteEnvironment encEnvironment = EasyMock.createNiceMock(UrlRewriteEnvironment.class);
EasyMock.expect(encEnvironment.getAttribute(GatewayServices.GATEWAY_SERVICES_ATTRIBUTE)).andReturn(gatewayServices).anyTimes();
EasyMock.expect(encEnvironment.getAttribute(GatewayServices.GATEWAY_CLUSTER_ATTRIBUTE)).andReturn(clusterName).anyTimes();
UrlRewriteContext encContext = EasyMock.createNiceMock(UrlRewriteContext.class);
EncryptStepContextParams hostPortParams = new EncryptStepContextParams();
hostPortParams.addParam("host", Arrays.asList("host.yarn.com"));
hostPortParams.addParam("port", Arrays.asList("8088"));
EasyMock.expect(encContext.getParameters()).andReturn(hostPortParams);
Capture<EncryptStepContextParams> encodedValue = new Capture<EncryptStepContextParams>();
encContext.addParameters(EasyMock.capture(encodedValue));
EasyMock.replay(gatewayServices, as, encEnvironment, encContext);
EncryptUriDescriptor descriptor = new EncryptUriDescriptor();
descriptor.setTemplate("{host}:{port}");
descriptor.setParam(encryptedValueParamName);
EncryptUriProcessor processor = new EncryptUriProcessor();
processor.initialize(encEnvironment, descriptor);
UrlRewriteStepStatus encStatus = processor.process(encContext);
assertThat(encStatus, is(UrlRewriteStepStatus.SUCCESS));
assertThat(encodedValue.getValue(), notNullValue());
assertThat(encodedValue.getValue().resolve(encryptedValueParamName).size(), is(1));
String encryptedAdrress = encodedValue.getValue().resolve(encryptedValueParamName).get(0);
assertThat(encryptedAdrress, not(isEmptyOrNullString()));
assertThat(encryptedAdrress, not("{host}:{port}"));
assertThat(encryptedAdrress, not("hdp:8088"));
// Test decryption. Result is in dectryptedAdrress.
String decParam = "foo";
gatewayServices = EasyMock.createNiceMock(GatewayServices.class);
EasyMock.expect(gatewayServices.getService(GatewayServices.CRYPTO_SERVICE)).andReturn(cryptoService);
as = EasyMock.createNiceMock(AliasService.class);
EasyMock.expect(as.getPasswordFromAliasForCluster(clusterName, passwordAlias)).andReturn(secret.toCharArray()).anyTimes();
UrlRewriteEnvironment decEnvironment = EasyMock.createNiceMock(UrlRewriteEnvironment.class);
EasyMock.expect(decEnvironment.getAttribute(GatewayServices.GATEWAY_SERVICES_ATTRIBUTE)).andReturn(gatewayServices).anyTimes();
EasyMock.expect(decEnvironment.getAttribute(GatewayServices.GATEWAY_CLUSTER_ATTRIBUTE)).andReturn(clusterName).anyTimes();
UrlRewriteContext decContext = EasyMock.createNiceMock(UrlRewriteContext.class);
EncryptStepContextParams encryptedParams = new EncryptStepContextParams();
// Value was encrypted by EncryptUriProcessor
encryptedParams.addParam(decParam, Arrays.asList(encryptedAdrress));
encryptedParams.addParam("foo1", Arrays.asList("test"));
EasyMock.expect(decContext.getParameters()).andReturn(encryptedParams);
Capture<EncryptStepContextParams> decodedValue = new Capture<EncryptStepContextParams>();
decContext.addParameters(EasyMock.capture(decodedValue));
EasyMock.replay(gatewayServices, as, decEnvironment, decContext);
DecryptUriDescriptor decDescriptor = new DecryptUriDescriptor();
decDescriptor.setParam(decParam);
DecryptUriProcessor decProcessor = new DecryptUriProcessor();
decProcessor.initialize(decEnvironment, decDescriptor);
UrlRewriteStepStatus decStatus = decProcessor.process(decContext);
assertThat(decStatus, is(UrlRewriteStepStatus.SUCCESS));
assertThat(decodedValue.getValue(), notNullValue());
assertThat(decodedValue.getValue().resolve(decParam).size(), is(1));
String dectryptedAdrress = decodedValue.getValue().resolve(decParam).get(0);
assertThat(dectryptedAdrress, is("host.yarn.com:8088"));
}
use of org.apache.knox.gateway.filter.rewrite.api.UrlRewriteEnvironment in project knox by apache.
the class SecureQueryDecodeProcessorTest method testSimpleQueryDecode.
@Test
public void testSimpleQueryDecode() throws Exception {
UrlRewriteEnvironment environment = new UrlRewriteEnvironment() {
@Override
public URL getResource(String name) throws IOException {
return null;
}
@Override
public <T> T getAttribute(String name) {
return null;
}
@Override
public List<String> resolve(String name) {
return null;
}
};
BASE64Encoder encoder = new BASE64Encoder();
String encQuery = encoder.encode("test-query".getBytes("utf-8"));
encQuery = encQuery.replaceAll("\\=", "");
String inString = "http://host:0/root/path?_=" + encQuery;
Template inTemplate = Parser.parseLiteral(inString);
UrlRewriteContext context = EasyMock.createNiceMock(UrlRewriteContext.class);
EasyMock.expect(context.getCurrentUrl()).andReturn(inTemplate);
Capture<Template> outTemplate = new Capture<Template>();
context.setCurrentUrl(EasyMock.capture(outTemplate));
EasyMock.replay(context);
SecureQueryDecodeDescriptor descriptor = new SecureQueryDecodeDescriptor();
SecureQueryDecodeProcessor processor = new SecureQueryDecodeProcessor();
processor.initialize(environment, descriptor);
processor.process(context);
String outActual = outTemplate.getValue().toString();
assertThat(outActual, is("http://host:0/root/path?test-query"));
}
Aggregations