<!--
  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.
-->
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <description>Brooklyn Logout</description>
    <display-name>Brooklyn Logout</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

<!-- NOT registered as a brooklyn ui module; don't want it to be listed as a module
    <listener>
        <listener-class>org.apache.brooklyn.ui.modularity.module.api.UiModuleListener</listener-class>
    </listener>
-->

    <!--FILTERS :: START-->
    <filter>
        <filter-name>ui-module-filter</filter-name>
        <filter-class>org.apache.brooklyn.ui.modularity.module.api.UiModuleFilter</filter-class>
        <init-param>
            <param-name>Cache-Control</param-name>
            <param-value>public, max-age=604800</param-value><!--Cache static content for 1 week-->
        </init-param>
    </filter>
    <filter>
        <filter-name>brooklyn-security-filter</filter-name>
        <filter-class>org.apache.brooklyn.rest.filter.BrooklynSecurityProviderFilterJavax</filter-class>
    </filter>
    <filter>
        <filter-name>GzipFilter</filter-name>
        <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
        <init-param>
            <param-name>mimeTypes</param-name>
            <param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>ui-module-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>brooklyn-security-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>GzipFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--FILTERS :: END-->

</web-app>
