<?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.
-->

<web-app version="3.0">
  <display-name>Apache OFBiz - Marketing Manager</display-name>
  <description>Marketing Manager Module of the Apache OFBiz Project</description>

  <context-param>
    <description>The Name of the Entity Delegator to use, defined in entityengine.xml</description>
    <param-name>entityDelegatorName</param-name>
    <param-value>default</param-value>
  </context-param>
  <context-param>
    <description>A unique name used to identify/recognize the local dispatcher for the Service Engine</description>
    <param-name>localDispatcherName</param-name>
    <param-value>marketing</param-value>
  </context-param>
  <context-param>
    <description>The location of the main-decorator screen to use for this webapp; referred to as a context variable in screen def XML files.</description>
    <param-name>mainDecoratorLocation</param-name>
    <param-value>component://marketing/widget/CommonScreens.xml</param-value>
  </context-param>

    <filter>
        <display-name>ControlFilter</display-name>
        <filter-name>ControlFilter</filter-name>
        <filter-class>org.apache.ofbiz.webapp.control.ControlFilter</filter-class>
        <init-param>
            <param-name>redirectPath</param-name>
            <param-value>/control/main</param-value>
        </init-param>
        <init-param>
            <param-name>allowedPaths</param-name>
            <param-value>/error:/control:/select:/index.html:/index.jsp:/default.html:/default.jsp:/images</param-value>
        </init-param>
    </filter>
    <filter>
        <display-name>ContextFilter</display-name>
        <filter-name>ContextFilter</filter-name>
        <filter-class>org.apache.ofbiz.webapp.control.ContextFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ControlFilter</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>ContextFilter</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>

  <listener><listener-class>org.apache.ofbiz.webapp.control.ControlEventListener</listener-class></listener>
  <listener><listener-class>org.apache.ofbiz.webapp.control.LoginEventListener</listener-class></listener>
  <!-- NOTE: not all app servers support mounting implementations of the HttpSessionActivationListener interface -->
  <!-- <listener><listener-class>org.apache.ofbiz.webapp.control.ControlActivationEventListener</listener-class></listener> -->

  <servlet>
    <description>Main Control Servlet</description>
    <display-name>ControlServlet</display-name>
    <servlet-name>ControlServlet</servlet-name>
    <servlet-class>org.apache.ofbiz.webapp.control.ControlServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ControlServlet</servlet-name>
    <url-pattern>/control/*</url-pattern>
  </servlet-mapping>

  <session-config>
    <session-timeout>60</session-timeout>    <!-- in minutes -->
    <cookie-config>
      <http-only>true</http-only>
      <secure>true</secure>
    </cookie-config>
    <tracking-mode>COOKIE</tracking-mode>
  </session-config>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
<!--
  <error-page>
    <error-code>403</error-code>
    <location>/error/error403.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/error/error404.jsp</location>
  </error-page>
  <error-page>
    <error-code>410</error-code>
    <location>/error/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/error.jsp</location>
  </error-page>
-->

<!-- HTTP Response Code definitions:
| "400"   ; Bad Request
| "401"   ; Unauthorized
| "402"   ; Payment Required
| "403"   ; Forbidden
| "404"   ; Not Found
| "405"   ; Method Not Allowed
| "406"   ; Not Acceptable
| "407"   ; Proxy Authentication Required
| "408"   ; Request Time-out
| "409"   ; Conflict
| "410"   ; Gone
| "411"   ; Length Required
| "412"   ; Precondition Failed
| "413"   ; Request Entity Too Large
| "414"   ; Request-URI Too Large
| "415"   ; Unsupported Media Type
| "500"   ; Internal Server Error
| "501"   ; Not Implemented
| "502"   ; Bad Gateway
| "503"   ; Service Unavailable
| "504"   ; Gateway Time-out
| "505"   ; HTTP Version not supported
-->

<!--
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Entire Site</web-resource-name>
      <description>Entire Site</description>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
-->
    <!-- For enabling SSL, specify CONFIDENTIAL or INTEGRAL. -->
<!--
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>
-->
</web-app>
