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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" version="2.5">
  <display-name>sample-store-secure-webapp</display-name>

	<display-name>PhotArk photo gallery web application</display-name>

	<filter>
		<filter-name>tuscany</filter-name>
		<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
	</filter>

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

	<welcome-file-list id="WelcomeFileList">
		<welcome-file>gallery.html</welcome-file>
	</welcome-file-list>

 	<security-constraint>
 		<web-resource-collection>
 			<web-resource-name>Areas with authentication required</web-resource-name>
			<web-resource-name>Secured Area</web-resource-name>
			<url-pattern>/admin/login.html</url-pattern>
			<url-pattern>/admin/error.html</url-pattern>
			<url-pattern>/admin/authenticate</url-pattern>
 		</web-resource-collection>
 		<auth-constraint>
 			<role-name>photark-admin</role-name>
        </auth-constraint>
    </security-constraint>

 	<login-config>
		<auth-method>FORM</auth-method>
		<realm-name>Secured Application Area</realm-name>
		<form-login-config>
			<form-login-page>/admin/login.html</form-login-page>
			<form-error-page>/admin/error.html</form-error-page>
		</form-login-config>
	</login-config>

	<security-role>
		<role-name>photark-admin</role-name>
	</security-role>

	<error-page>
		<error-code>403</error-code>
		<location>/admin/error.html</location>
	</error-page>

	<filter>
	     <filter-name>authorization-filter</filter-name>
	     <filter-class>org.apache.photark.security.authentication.AuthorizationFilter</filter-class>
	     <description>This Filter authorizes user access to application
	                  components based upon request URI.</description>
	     <init-param>
	        <param-name>redirect_page</param-name>
	        <param-value>/home/authenticate</param-value>
	     </init-param>
	</filter>
	
	<filter-mapping>
	     <filter-name>authorization-filter</filter-name>
	     <url-pattern>/admin/upload.html</url-pattern>
	</filter-mapping>

</web-app>
