<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.knox</groupId>
		<artifactId>gateway</artifactId>
		<version>0.10.0-SNAPSHOT</version>
	</parent>
	<artifactId>gateway-provider-rewrite-step-encrypt-uri</artifactId>
	<name>gateway-provider-rewrite-step-encrypt-uri</name>
	<description>An extension of the gateway that supports securing request/response content.</description>

	<licenses>
		<license>
			<name>The Apache Software License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<dependencies>

		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-util-common</artifactId>
		</dependency>
		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-util-urltemplate</artifactId>
		</dependency>
		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-i18n</artifactId>
		</dependency>
		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-i18n-logging-log4j</artifactId>
		</dependency>
		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-spi</artifactId>
		</dependency>
		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-provider-rewrite</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
		</dependency>

		<!-- ********** ********** ********** ********** ********** ********** -->
		<!-- ********** Test Dependencies ********** -->
		<!-- ********** ********** ********** ********** ********** ********** -->

		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-test-utils</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>${gateway-group}</groupId>
			<artifactId>gateway-server</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-library</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- This must be after restassured otherwise is messes up the hamcrest
			dependencies. -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.easymock</groupId>
			<artifactId>easymock</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>
