<!--
  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.
-->
<gateway>
    <name>org.apache.hadoop</name>

    <service>
        <name>namenode-root</name>
        <source>/webhdfs/v1?{**}</source>
        <target>http://{namenode.address}/webhdfs/v1/?{**}</target>
        <filter>
            <name>shiro</name>
            <class>org.apache.shiro.web.servlet.ShiroFilter</class>
        </filter>
        <filter>
            <name>dispatch</name>
            <class>org.apache.org.apache.knox.gateway.dispatch.HttpClientDispatch</class>
        </filter>
    </service>

    <service>
        <name>namenode-children</name>
        <source>/webhdfs/v1/{path=**}?{**}</source>
        <target>http://{namenode.address}/webhdfs/v1/{path=**}?{**}</target>
        <filter>
            <name>shiro</name>
            <class>org.apache.shiro.web.servlet.ShiroFilter</class>
        </filter>
        <filter>
            <name>rewrite</name>
            <class>org.apache.org.apache.knox.gateway.filter.rewrite.api.UrlRewriteServletFilter</class>
            <rewrite>webhdfs://*:*/{path=**}
                http://{org.apache.org.apache.knox.gateway.address}/org.apache.hadoopache.hadoop.gateway/gateway/webhdfs/v1/{path=**}</rewrite>
        </filter>
        <filter>
            <name>dispatch</name>
            <class>org.apache.org.apache.knox.gateway.dispatch.HdfsDispatch</class>
        </filter>
    </service>

    <service>
        <name>webhcat</name>
        <source>/templeton/v1/{path=**}?{**}</source>
        <filter>
            <name>shiro</name>
            <class>org.apache.shiro.web.servlet.ShiroFilter</class>
        </filter>
        <filter>
            <name>dispatch</name>
            <class>org.apache.org.apache.knox.gateway.dispatch.HttpClientDispatch</class>
        </filter>
    </service>

</gateway>
