<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
  -->

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <display-name>Apache Falcon Prism</display-name>
    <description>Apache Falcon Prism</description>

    <filter>
        <filter-name>audit</filter-name>
        <filter-class>org.apache.falcon.security.FalconAuditFilter</filter-class>
    </filter>

    <filter>
        <filter-name>hostnameFilter</filter-name>
        <filter-class>org.apache.falcon.security.HostnameFilter</filter-class>
    </filter>

    <filter>
        <filter-name>authentication</filter-name>
        <filter-class>org.apache.falcon.security.FalconAuthenticationFilter</filter-class>
    </filter>

    <filter>
        <filter-name>csrf</filter-name>
        <filter-class>org.apache.falcon.security.FalconCSRFFilter</filter-class>
        <init-param>
            <param-name>methods-to-ignore</param-name>
            <param-value>GET</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>authorization</filter-name>
        <filter-class>org.apache.falcon.security.FalconAuthorizationFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>audit</filter-name>
        <servlet-name>FalconProxyAPI</servlet-name>
    </filter-mapping>

    <filter-mapping>
        <filter-name>hostnameFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>authentication</filter-name>
        <servlet-name>FalconProxyAPI</servlet-name>
    </filter-mapping>

    <filter-mapping>
        <filter-name>csrf</filter-name>
        <servlet-name>FalconProxyAPI</servlet-name>
    </filter-mapping>

    <filter-mapping>
        <filter-name>authorization</filter-name>
        <servlet-name>FalconProxyAPI</servlet-name>
    </filter-mapping>

    <listener>
        <listener-class>org.apache.falcon.listener.ContextStartupListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>FalconProxyAPI</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
            <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>
                org.apache.falcon.resource.admin,org.apache.falcon.resource.provider,
                org.apache.falcon.resource.proxy,org.apache.falcon.resource.metadata
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>FalconProxyAPI</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>

</web-app>
