Author: vtence
Date: Wed Dec 22 07:32:47 2004
New Revision: 123112

URL: http://svn.apache.org/viewcvs?view=rev&rev=123112
Log:
First cut at example application. Demonstration of username-password 
authentication and role-based access control. Security information stored in 
XML files.
Added:
   incubator/directory/janus/trunk/example/
   incubator/directory/janus/trunk/example/project.xml   (contents, props 
changed)
   incubator/directory/janus/trunk/example/src/
   incubator/directory/janus/trunk/example/src/java/
   incubator/directory/janus/trunk/example/src/java/org/
   incubator/directory/janus/trunk/example/src/java/org/apache/
   incubator/directory/janus/trunk/example/src/java/org/apache/janus/
   incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/
   
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/
   
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/CanPurchasePredicateBuilder.java
   (contents, props changed)
   
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/EnhancedNanoWebVelocityServlet.java
   (contents, props changed)
   
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/Item.java
   (contents, props changed)
   
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/PurchasePermission.java
   (contents, props changed)
   
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/SecurityContext.java
   (contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/
   incubator/directory/janus/trunk/example/src/webapp/WEB-INF/
   
incubator/directory/janus/trunk/example/src/webapp/WEB-INF/nanocontainer.groovy 
  (contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/WEB-INF/permissions.xml   
(contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/WEB-INF/roles.xml   
(contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/WEB-INF/users.xml   
(contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/WEB-INF/web.xml   
(contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/catalog.vm   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/denied.vm   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/home.vm   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/index.vm   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/item_details.vm   
(contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/login.vm   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/receipt.vm   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/security.groovy   
(contents, props changed)
   incubator/directory/janus/trunk/example/src/webapp/shop.groovy   (contents, 
props changed)
   incubator/directory/janus/trunk/example/src/webapp/try_again.vm   (contents, 
props changed)

Added: incubator/directory/janus/trunk/example/project.xml
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/project.xml?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/project.xml Wed Dec 22 07:32:47 2004
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project>
+    <extend>${basedir}/../project.xml</extend>
+
+    <name>Janus Demo Application</name>
+    <id>janus-example</id>
+    <package>org.apache.janus</package>
+
+    <shortDescription>Janus Demo Application</shortDescription>
+
+    <description>
+    Demonstration Application of the Janus Security Framework
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>janus-api</artifactId>
+            <version>${pom.currentVersion}</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>janus-impl</artifactId>
+            <version>${pom.currentVersion}</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>janus-script</artifactId>
+            <version>${pom.currentVersion}</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>servletapi</groupId>
+            <artifactId>servletapi</artifactId>
+            <version>2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>1.4</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>xerces</groupId>
+            <artifactId>xercesImpl</artifactId>
+            <version>2.6.0</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>xml-apis</groupId>
+            <artifactId>xml-apis</artifactId>
+            <version>1.0.b2</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>picocontainer</groupId>
+            <artifactId>picocontainer</artifactId>
+            <version>1.1</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>nanocontainer</groupId>
+            <artifactId>nanocontainer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>nanocontainer</groupId>
+            <artifactId>nanocontainer-nanowar</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>groovy</groupId>
+            <artifactId>groovy</artifactId>
+            <version>1.0-beta-8</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>asm</groupId>
+            <artifactId>asm</artifactId>
+            <version>1.5.2</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>asm</groupId>
+            <artifactId>asm-util</artifactId>
+            <version>1.5.2</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>velocity</groupId>
+            <artifactId>velocity</artifactId>
+            <version>1.4</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>velocity-tools</groupId>
+            <artifactId>velocity-tools-view</artifactId>
+            <version>1.0</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>ognl</groupId>
+            <artifactId>ognl</artifactId>
+            <version>2.6.5</version>
+            <properties>
+                <war.bundle>true</war.bundle>
+            </properties>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file

Added: 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/CanPurchasePredicateBuilder.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/CanPurchasePredicateBuilder.java?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/CanPurchasePredicateBuilder.java
      Wed Dec 22 07:32:47 2004
@@ -0,0 +1,35 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.janus.example.web;
+
+import org.apache.janus.script.xml.builder.AbstractElementBuilder;
+import org.apache.janus.authorization.predicate.ImpliedPermissionPredicate;
+import org.dom4j.Element;
+
+public class CanPurchasePredicateBuilder extends AbstractElementBuilder
+{
+    public boolean canBuild( Element e )
+    {
+        return "buy".equals( e.getName() );
+    }
+
+    public Object buildFrom( Element e )
+    {
+        float limit = Float.parseFloat( e.attributeValue( "limit" ) );
+        return new ImpliedPermissionPredicate( new PurchasePermission( limit ) 
);
+    }
+}

Added: 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/EnhancedNanoWebVelocityServlet.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/EnhancedNanoWebVelocityServlet.java?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/EnhancedNanoWebVelocityServlet.java
   Wed Dec 22 07:32:47 2004
@@ -0,0 +1,33 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.janus.example.web;
+
+import org.apache.velocity.Template;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.tools.view.servlet.VelocityViewServlet;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class EnhancedNanoWebVelocityServlet extends VelocityViewServlet
+{
+    protected Template handleRequest( HttpServletRequest httpServletRequest, 
HttpServletResponse httpServletResponse, Context context ) throws Exception
+    {
+        context.put( "root", httpServletRequest.getContextPath() );
+        return super.handleRequest( httpServletRequest, httpServletResponse, 
context );
+    }
+}

Added: 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/Item.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/Item.java?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/Item.java
     Wed Dec 22 07:32:47 2004
@@ -0,0 +1,39 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.janus.example.web;
+
+public class Item
+{
+    private final String m_description;
+    private final float m_price;
+
+    public Item( String description, float price )
+    {
+        m_description = description;
+        m_price = price;
+    }
+
+    public String getDescription()
+    {
+        return m_description;
+    }
+
+    public float getPrice()
+    {
+        return m_price;
+    }
+}

Added: 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/PurchasePermission.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/PurchasePermission.java?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/PurchasePermission.java
       Wed Dec 22 07:32:47 2004
@@ -0,0 +1,44 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.janus.example.web;
+
+import org.apache.janus.authorization.BasicPermission;
+import org.apache.janus.authorization.Permission;
+
+public class PurchasePermission extends BasicPermission
+{
+    private final float m_priceLimit;
+
+    public PurchasePermission( float limit )
+    {
+        super( "item" );
+        m_priceLimit = limit;
+    }
+
+    public float getPriceLimit()
+    {
+        return m_priceLimit;
+    }
+
+    public boolean implies( Permission permission )
+    {
+        if ( !( permission instanceof PurchasePermission ) ) return false;
+
+        PurchasePermission other = ( PurchasePermission ) permission;
+        return m_priceLimit >= other.getPriceLimit();
+    }
+}

Added: 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/SecurityContext.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/SecurityContext.java?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ 
incubator/directory/janus/trunk/example/src/java/org/apache/janus/example/web/SecurityContext.java
  Wed Dec 22 07:32:47 2004
@@ -0,0 +1,55 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.janus.example.web;
+
+import org.apache.janus.authentication.realm.UsernamePrincipal;
+
+import javax.security.auth.Subject;
+import java.io.Serializable;
+import java.util.Set;
+
+public class SecurityContext implements Serializable
+{
+    private Subject m_subject;
+
+    public Subject getSubject()
+    {
+        return m_subject;
+    }
+
+    public boolean authenticated()
+    {
+        return m_subject != null;
+    }
+
+    public void login( Subject subject )
+    {
+        m_subject = subject;
+    }
+
+    public void logout()
+    {
+        m_subject = null;
+    }
+
+    public String getUsername()
+    {
+        Set userPrincipals = (Set) m_subject.getPrincipals( 
UsernamePrincipal.class );
+        UsernamePrincipal user = (UsernamePrincipal) 
userPrincipals.iterator().next();
+        return user.getName();
+    }
+}

Added: 
incubator/directory/janus/trunk/example/src/webapp/WEB-INF/nanocontainer.groovy
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/WEB-INF/nanocontainer.groovy?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ 
incubator/directory/janus/trunk/example/src/webapp/WEB-INF/nanocontainer.groovy 
    Wed Dec 22 07:32:47 2004
@@ -0,0 +1,39 @@
+pico = new org.picocontainer.defaults.DefaultPicoContainer( parent )
+
+if ( assemblyScope instanceof javax.servlet.ServletContext )
+{
+    realm = new org.apache.janus.authentication.realm.MemoryRealm()
+    // A nasty groovy bug prevents us from using servlet context to get the 
file real path
+    // See http://jira.codehaus.org/browse/GROOVY-210
+    users = new java.io.FileReader( 
"c:/tools/jakarta-tomcat-5.0.28/webapps/janus-example/WEB-INF/users.xml" )
+    realmBuilder = org.apache.janus.script.xml.Dom4JRealmBuilder.fromReader( 
users )
+    realmBuilder.buildRealm( realm )
+
+    authenticator = new org.apache.janus.authentication.DefaultAuthenticator( 
realm )
+
+    roleProvider = new 
org.apache.janus.authentication.attribute.AttributeProvider()
+    roles = new java.io.FileReader( 
"c:/tools/jakarta-tomcat-5.0.28/webapps/janus-example/WEB-INF/roles.xml" )
+    roleBuilder = org.apache.janus.script.xml.Dom4JRoleBuilder.fromReader( 
roles )
+    roleBuilder.buildProvider( roleProvider )
+
+    authenticator.addInformationProvider( roleProvider )
+    pico.registerComponentInstance( 
org.apache.janus.authentication.Authenticator, authenticator )
+
+    policy = new org.apache.janus.authorization.Policy( new 
org.apache.janus.authorization.effect.PermitOverridesEffect() )
+    permissions = new java.io.FileReader( 
"c:/tools/jakarta-tomcat-5.0.28/webapps/janus-example/WEB-INF/permissions.xml" )
+    policyBuilder = 
org.apache.janus.script.xml.Dom4JRuleSetBuilder.fromReader( permissions )
+    policyBuilder.registerBuilder( new 
org.apache.janus.example.web.CanPurchasePredicateBuilder() )
+    policyBuilder.buildRuleSet( policy )
+
+    authorizer = new org.apache.janus.authorization.DefaultAuthorizer( policy 
);
+    authorizer.denyOn( 
org.apache.janus.authorization.effect.Effects.NOT_APPLICABLE );
+    pico.registerComponentInstance( org.apache.janus.authorization.Authorizer, 
authorizer )
+}
+else if ( assemblyScope instanceof javax.servlet.http.HttpSession )
+{
+    // Session level components
+    pico.registerComponentImplementation( 
org.apache.janus.example.web.SecurityContext )
+}
+else if ( assemblyScope instanceof javax.servlet.ServletRequest )
+{
+}

Added: 
incubator/directory/janus/trunk/example/src/webapp/WEB-INF/permissions.xml
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/WEB-INF/permissions.xml?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/WEB-INF/permissions.xml  
Wed Dec 22 07:32:47 2004
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<policy>
+    <grant>
+        <subjects>
+            <role>buyer</role>
+        </subjects>
+        <permissions>
+            <buy limit="25"/>
+        </permissions>
+    </grant>
+    <grant>
+        <subjects>
+            <role>vip</role>
+        </subjects>
+        <permissions>
+            <buy limit="100"/>
+        </permissions>
+    </grant>
+</policy>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/WEB-INF/roles.xml
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/WEB-INF/roles.xml?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/WEB-INF/roles.xml        
Wed Dec 22 07:32:47 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<roles>
+    <user username="vincent" role="vip"/>
+    <user username="alex" role="buyer"/>
+    <role rolename="vip" role="buyer"/>
+</roles>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/WEB-INF/users.xml
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/WEB-INF/users.xml?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/WEB-INF/users.xml        
Wed Dec 22 07:32:47 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<realm>
+    <user username="anonymous" password=""/>
+    <user username="vincent" password="foo"/>
+    <user username="alex" password="bar"/>
+</realm>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/WEB-INF/web.xml
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/WEB-INF/web.xml?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/WEB-INF/web.xml  Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!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>Janus Demo</display-name>
+
+    <context-param>
+        <param-name>nanocontainer.groovy</param-name>
+        <param-value>/WEB-INF/nanocontainer.groovy</param-value>
+    </context-param>
+
+    <listener>
+        
<listener-class>org.nanocontainer.nanowar.ServletContainerListener</listener-class>
+    </listener>
+
+    <servlet>
+        <servlet-name>NanoWeb</servlet-name>
+        
<servlet-class>org.nanocontainer.nanowar.nanoweb.NanoWebServlet</servlet-class>
+        <init-param>
+            <param-name>viewtypes</param-name>
+            <param-value>.jsp,.vm</param-value>
+        </init-param>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <servlet>
+        <servlet-name>NanoVelocity</servlet-name>
+        
<servlet-class>org.apache.janus.example.web.EnhancedNanoWebVelocityServlet</servlet-class>
+        <!--
+        <init-param>
+            <param-name>org.apache.velocity.toolbox</param-name>
+            <param-value>/WEB-INF/velocity.xml</param-value>
+        </init-param>
+        -->
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <!-- For actions -->
+    <servlet-mapping>
+        <servlet-name>NanoWeb</servlet-name>
+        <url-pattern>*.nano</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>NanoWeb</servlet-name>
+        <url-pattern>*.groovy
+        </url-pattern>
+    </servlet-mapping>
+
+    <!-- For views (forwarded to by NanoWeb after action execution) -->
+    <servlet-mapping>
+        <servlet-name>NanoVelocity</servlet-name>
+        <url-pattern>*.vm</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.vm</welcome-file>
+    </welcome-file-list>
+</web-app>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/catalog.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/catalog.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/catalog.vm       Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,18 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+
+    <body>
+        Today In Stock:
+
+        <ul>
+        #foreach( $key in $action.catalog.keySet() )
+            <li><a href="view.groovy?key=$key">$key</a></li>
+        #end
+        </ul>
+
+        <br>
+        <a href="exit.groovy">Exit Shop</a>
+    </body>
+</html>

Added: incubator/directory/janus/trunk/example/src/webapp/denied.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/denied.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/denied.vm        Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+    <body>
+        This is too expensive for you $action.username! <a 
href="list.groovy">Choose something cheaper</a>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/home.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/home.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/home.vm  Wed Dec 22 
07:32:47 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+    <body>
+        Welcome!
+
+        <p>
+        <a href="$root/shop/list.groovy">Shop online</a>
+        <p>
+        <a href="$root/security/logout.groovy">Logout</a>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/index.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/index.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/index.vm Wed Dec 22 
07:32:47 2004
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+    <body>
+        <a href="$root/security/login.groovy">Login</a>
+    </body>
+</html>

Added: incubator/directory/janus/trunk/example/src/webapp/item_details.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/item_details.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/item_details.vm  Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,13 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+
+    <body>
+        <form method="POST" action="buy.groovy?key=$action.key">
+            $action.item.description: $action.item.price
+            <br>
+            <input type="submit" value="Buy">
+        </form>
+    </body>
+</html>

Added: incubator/directory/janus/trunk/example/src/webapp/login.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/login.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/login.vm Wed Dec 22 
07:32:47 2004
@@ -0,0 +1,14 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+    <body>
+        <form method="POST" action="authenticate.groovy">
+            Username: <input type="text" name="username" size="20">
+            <br>
+            Password: <input type="password" name="password" size="20">
+            <br>
+            <input type="submit" value="Login">
+        </form>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/receipt.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/receipt.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/receipt.vm       Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+    <body>
+        Thanks $action.username for shopping with us. <a 
href="list.groovy">Buy something else</a>
+    </body>
+</html>
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/security.groovy
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/security.groovy?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/security.groovy  Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,39 @@
+import javax.security.auth.Subject
+
+import org.apache.janus.authentication.Authenticator
+import org.apache.janus.authentication.CredentialSet
+import org.apache.janus.authentication.realm.UsernameCredential
+import org.apache.janus.authentication.realm.PasswordCredential
+import org.apache.janus.example.web.SecurityContext
+
+class Security {
+
+    authenticator
+    username
+    password
+    context
+
+    Security( Authenticator authenticator, SecurityContext context ) {
+        this.authenticator = authenticator
+        this.context = context
+    }
+
+    login() {
+        return "login"
+    }
+
+    authenticate() {
+        creds = new CredentialSet()
+        creds.add( new UsernameCredential( username ) )
+        creds.add( new PasswordCredential( password ) )
+        subject = authenticator.authenticate( creds )
+        if ( subject == null ) return "try_again"
+
+        context.login( subject )
+        return "home"
+    }
+
+    logout() {
+        return "index"
+    }
+}
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/shop.groovy
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/shop.groovy?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/shop.groovy      Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,49 @@
+import org.apache.janus.example.web.Item
+import org.apache.janus.example.web.PurchasePermission
+import org.apache.janus.authorization.Authorizer
+import org.apache.janus.example.web.SecurityContext
+
+class Shop {
+
+    authorizer
+    context
+    catalog
+    key
+    item
+    username
+
+    Shop( Authorizer authorizer, SecurityContext context ) {
+        this.authorizer = authorizer
+        this.context = context
+        catalog = new java.util.HashMap()
+        catalog.put( "book", new Item("The Pickaxe book, Second Edition", 50 ) 
)
+        catalog.put( "mug", new Item( "Purple Java Mug", 10 ) )
+    }
+
+    list() {
+        return "catalog"
+    }
+
+    view() {
+        item = lookup( key )
+        return "item_details"
+    }
+
+    buy() {
+        item = lookup( key )
+        purchase = new PurchasePermission( item.getPrice() )
+        me = context.getSubject()
+        username = context.getUsername()
+        if ( !authorizer.authorize( me, purchase ) ) return "denied"
+
+        return "receipt"
+    }
+
+    exit() {
+        return "home"
+    }
+
+    lookup( key ) {
+        return catalog.get( key )
+    }
+}
\ No newline at end of file

Added: incubator/directory/janus/trunk/example/src/webapp/try_again.vm
Url: 
http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/example/src/webapp/try_again.vm?view=auto&rev=123112
==============================================================================
--- (empty file)
+++ incubator/directory/janus/trunk/example/src/webapp/try_again.vm     Wed Dec 
22 07:32:47 2004
@@ -0,0 +1,8 @@
+<html>
+    <head>
+        <title>Janus Demo Application</title>
+    </head>
+    <body>
+        Are you sure you're $action.username? <a 
href="authenticate.groovy">Try again</a>
+    </body>
+</html>
\ No newline at end of file

Reply via email to