<!--
   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.
-->
<rules>
    <rule dir="IN" name="RANGERUI/rangerui/inbound/root" pattern="*://*:*/**/ranger/">
        <rewrite template="{$serviceUrl[RANGERUI]}/"/>
    </rule>
    <rule dir="IN" name="RANGERUI/rangerui/inbound/path" pattern="*://*:*/**/ranger/{**}">
        <rewrite template="{$serviceUrl[RANGERUI]}/{**}"/>
    </rule>
    <rule dir="IN" name="RANGERUI/rangerui/inbound/query" pattern="*://*:*/**/ranger/{**}?{**}">
        <rewrite template="{$serviceUrl[RANGERUI]}/{**}?{**}"/>
    </rule>

    <rule dir="OUT" name="RANGERUI/rangerui/outbound/extrapath">
        <rewrite template="{$frontend[topology]}/ranger/j_spring_security_check"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/index">
        <rewrite template="{$frontend[path]}/ranger/index.html"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/links" pattern="libs/{**}">
        <rewrite template="{$frontend[path]}/ranger/libs/{**}"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/styles" pattern="styles/{**}">
        <rewrite template="{$frontend[path]}/ranger/styles/{**}"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/styles" pattern="images/{**}">
        <rewrite template="{$frontend[path]}/ranger/images/{**}"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/init" pattern="scripts/Init.js?ver=build.version">
        <rewrite template="{$frontend[path]}/ranger/scripts/Init.js?ver=build.version"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/links" pattern="scripts/{**}">
        <rewrite template="{$frontend[path]}/ranger/scripts/{**}"/>
    </rule>
    <rule dir="OUT" name="RANGERUI/rangerui/outbound/login/headers/location">
        <match pattern="*://*:*/login.jsp"/>
        <rewrite template="{$frontend[url]}/ranger/login.jsp"/>
    </rule>

    <filter name="RANGERUI/rangerui/outbound/links">
        <content type="application/javascript">
            <apply path="j_spring_security_check" rule="RANGERUI/rangerui/outbound/extrapath"/>
            <apply path="index.html" rule="RANGERUI/rangerui/outbound/index"/>
        </content>
        <content type="*/html">
        </content>
    </filter>

    <filter name="RANGERUI/rangerui/outbound/headers">
        <content type="application/x-http-headers">
            <apply path="Location" rule="RANGERUI/rangerui/outbound/login/headers/location"/>
        </content>
    </filter>

</rules>