Coverage Report - org.chenillekit.access.ChenilleKitAccessModule
 
Classes in this File Line Coverage Branch Coverage Complexity
ChenilleKitAccessModule
93%
27/29
100%
2/2
0
 
 1  
 /*
 2  
  * Apache License
 3  
  * Version 2.0, January 2004
 4  
  * http://www.apache.org/licenses/
 5  
  *
 6  
  * Copyright 2008 by chenillekit.org
 7  
  *
 8  
  * Licensed under the Apache License, Version 2.0 (the "License");
 9  
  * you may not use this file except in compliance with the License.
 10  
  * You may obtain a copy of the License at
 11  
  *
 12  
  * http://www.apache.org/licenses/LICENSE-2.0
 13  
  */
 14  
 
 15  
 package org.chenillekit.access;
 16  
 
 17  
 import java.io.IOException;
 18  
 import java.util.List;
 19  
 import java.util.Map;
 20  
 import java.util.Properties;
 21  
 import java.util.Set;
 22  
 
 23  
 import org.apache.tapestry5.ioc.Configuration;
 24  
 import org.apache.tapestry5.ioc.MappedConfiguration;
 25  
 import org.apache.tapestry5.ioc.OrderedConfiguration;
 26  
 import org.apache.tapestry5.ioc.ServiceBinder;
 27  
 import org.apache.tapestry5.ioc.annotations.InjectService;
 28  
 import org.apache.tapestry5.ioc.annotations.Marker;
 29  
 import org.apache.tapestry5.ioc.internal.util.Defense;
 30  
 import org.apache.tapestry5.ioc.services.ChainBuilder;
 31  
 import org.apache.tapestry5.services.ApplicationStateManager;
 32  
 import org.apache.tapestry5.services.ComponentClassResolver;
 33  
 import org.apache.tapestry5.services.ComponentClassTransformWorker;
 34  
 import org.apache.tapestry5.services.ComponentEventRequestFilter;
 35  
 import org.apache.tapestry5.services.ComponentSource;
 36  
 import org.apache.tapestry5.services.LibraryMapping;
 37  
 import org.apache.tapestry5.services.MetaDataLocator;
 38  
 import org.apache.tapestry5.services.PageRenderRequestFilter;
 39  
 import org.chenillekit.access.annotations.ChenilleKitAccess;
 40  
 import org.chenillekit.access.internal.NoOpAuthenticationService;
 41  
 import org.chenillekit.access.services.AccessValidator;
 42  
 import org.chenillekit.access.services.AuthenticationService;
 43  
 import org.chenillekit.access.services.impl.AccessValidatorImpl;
 44  
 import org.chenillekit.access.services.impl.ComponentEventAccessFilter;
 45  
 import org.chenillekit.access.services.impl.PageRenderAccessFilter;
 46  
 import org.chenillekit.access.services.impl.RestrictedWorker;
 47  
 import org.slf4j.Logger;
 48  
 
 49  
 /**
 50  
  *
 51  
  * @version $Id: ChenilleKitAccessModule.java 380 2008-12-30 10:21:52Z mlusetti $
 52  
  */
 53  1
 public class ChenilleKitAccessModule
 54  
 {
 55  
         /**
 56  
          *
 57  
          * @param binder
 58  
          */
 59  
         public static void bind(ServiceBinder binder)
 60  
         {
 61  1
                 binder.bind(ComponentEventRequestFilter.class, ComponentEventAccessFilter.class).withMarker(ChenilleKitAccess.class);
 62  1
                 binder.bind(PageRenderRequestFilter.class, PageRenderAccessFilter.class).withMarker(ChenilleKitAccess.class);
 63  1
         }
 64  
         
 65  
         /**
 66  
          * 
 67  
          * @param configuration
 68  
          * @param chainBuilder
 69  
          * @return
 70  
          */
 71  
     public static AuthenticationService buildAuthenticationService(
 72  
             final List<AuthenticationService> configuration,
 73  
             @InjectService("ChainBuilder")
 74  
             ChainBuilder chainBuilder)
 75  
     {
 76  1
         return chainBuilder.build(AuthenticationService.class, configuration);
 77  
     }
 78  
     
 79  
     /**
 80  
      * 
 81  
      * @param configuration
 82  
      */
 83  
     public static void contributeAuthenticationService(OrderedConfiguration<AuthenticationService> configuration)
 84  
     {
 85  1
             configuration.add("no-op", new NoOpAuthenticationService(), "after:*");
 86  1
     }
 87  
 
 88  
         /**
 89  
          * Contribute our {@link ComponentClassTransformWorker} to transformation pipeline to add our code to
 90  
          * loaded classes
 91  
          * @param configuration component class transformer configuration
 92  
          */
 93  
         public static void contributeComponentClassTransformWorker(
 94  
                                 OrderedConfiguration<ComponentClassTransformWorker> configuration)
 95  
         {
 96  1
                 configuration.add("Restricted", new RestrictedWorker(), "after:Secure");
 97  1
         }
 98  
 
 99  
         /**
 100  
          * Contribute our virtual folder to {@link ComponentClassResolver} service
 101  
          *
 102  
          * @param configuration configuration for the service where we contribute to
 103  
          */
 104  
         public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration)
 105  
         {
 106  1
                 configuration.add(new LibraryMapping("ckaccess", "org.chenillekit.access"));
 107  1
         }
 108  
 
 109  
 
 110  
         /**
 111  
          * build the authentificate service.
 112  
          *
 113  
          * @param logger system logger
 114  
          * @param contribution contribution map
 115  
          * @param userService user storage service
 116  
          * @param appServerLoginService assure login to the appserver can be handled correctly
 117  
          * @return auth service for login handling
 118  
          */
 119  
 //        public static AuthRedirectService buildAuthRedirectService(final Logger logger,
 120  
 //                                                                                                                        final Map<String, Class> contribution,
 121  
 //                                                                                                                        final WebSessionUserService userService,
 122  
 //                                                                                                                        final AppServerLoginService appServerLoginService)
 123  
 //        {
 124  
 //                try
 125  
 //                {
 126  
 //                        Class authServiceClass = contribution.get(ChenilleKitAccessConstants.WEB_USER_AUTH_SERVICE);
 127  
 //                        Defense.notNull(authServiceClass, ChenilleKitAccessConstants.WEB_USER_AUTH_SERVICE);
 128  
 //                        return new AuthRedirectServiceImpl(logger, (AuthService)authServiceClass.newInstance(), userService, appServerLoginService);
 129  
 //                }
 130  
 //                catch (InstantiationException e)
 131  
 //                {
 132  
 //                        throw new RuntimeException(e);
 133  
 //                }
 134  
 //                catch (IllegalAccessException e)
 135  
 //                {
 136  
 //                        throw new RuntimeException(e);
 137  
 //                }
 138  
 //        }
 139  
 
 140  
         /**
 141  
          *
 142  
          * @param componentSource component source
 143  
          * @param locator meta data locator
 144  
          * @param logger system logger
 145  
          * @return build access validator
 146  
          */
 147  
         @Marker(ChenilleKitAccess.class)
 148  
         public static AccessValidator buildAccessValidator(ComponentSource componentSource,
 149  
                                                                                                         MetaDataLocator locator,
 150  
                                                                                                         Logger logger, ApplicationStateManager manager,
 151  
                                                                                                         Map<String, Class> contribution)
 152  
         {
 153  1
                 Class webSessionUserClass = contribution.get(ChenilleKitAccessConstants.WEB_SESSION_USER_KEY);
 154  
                 
 155  1
                 Defense.notNull(webSessionUserClass, "webSessionUserClass");
 156  
                 
 157  1
                 return new AccessValidatorImpl(componentSource, locator, logger, manager, webSessionUserClass);
 158  
         }
 159  
 
 160  
         /**
 161  
          * Contributes "AccessControl" filter which checks for access rights of requests.
 162  
          */
 163  
         public void contributePageRenderRequestHandler(OrderedConfiguration<PageRenderRequestFilter> configuration,
 164  
                                                                                                 final @ChenilleKitAccess PageRenderRequestFilter accessFilter)
 165  
         {
 166  1
                 configuration.add("AccessControl", accessFilter, "before:*");
 167  1
         }
 168  
 
 169  
         /**
 170  
          * Contribute "AccessControl" filter to determine if the event can be processed and the user
 171  
          * has enough rights to do so.
 172  
          */
 173  
         public void contributeComponentEventRequestHandler(OrderedConfiguration<ComponentEventRequestFilter> configuration,
 174  
                                                                                                         @ChenilleKitAccess ComponentEventRequestFilter accessFilter)
 175  
         {
 176  1
                 configuration.add("AccessControl", accessFilter, "before:*");
 177  1
         }
 178  
 
 179  
         /**
 180  
          * @param configuration
 181  
          */
 182  
         public static void contributeFactoryDefaults(MappedConfiguration<String, String> configuration)
 183  
         {
 184  1
                 Properties prop = new Properties();
 185  
                 try
 186  
                 {
 187  1
                         prop.load(ChenilleKitAccessModule.class.getResourceAsStream("/chenillekit-access.properties"));
 188  
                 }
 189  0
                 catch (IOException e)
 190  
                 {
 191  0
                         throw new RuntimeException(e);
 192  1
                 }
 193  
 
 194  1
                 Set<Object> keys = prop.keySet();
 195  1
                 for (Object key : keys)
 196  
                 {
 197  3
                         Object value = prop.get(key);
 198  3
                         configuration.add(key.toString(), value.toString());
 199  3
                 }
 200  1
         }
 201  
 
 202  
         /**
 203  
          * User management filter, the login method on the user should be called when the user logs in. If the user does not
 204  
          * yet exist (which is possible when logging in using some SSO solution, then the user should be created).
 205  
          *
 206  
          * @param webSessionUserService login info service
 207  
          * @param appServerLoginService assure login to the appserver can be handled correctly
 208  
          * @return request filter
 209  
          */
 210  
 //        public RequestFilter buildWebSessionUserFilter( final WebSessionUserService webSessionUserService,
 211  
 //                                                                                                        final AppServerLoginService appServerLoginService )
 212  
 //        {
 213  
 //                return new RequestFilter()
 214  
 //                {
 215  
 //                        public boolean service( Request request, Response response, RequestHandler handler )
 216  
 //                                throws IOException
 217  
 //                        {
 218  
 //                                Session session = request.getSession( false );
 219  
 //                                WebSessionUser wsu = null;
 220  
 //                                if ( null != session ) wsu = (WebSessionUser) session.getAttribute( ChenilleKitAccessConstants.WEB_SESSION_USER_KEY );
 221  
 //                                appServerLoginService.appServerLogin( wsu );
 222  
 //                                webSessionUserService.setUser( wsu );
 223  
 //
 224  
 //                                // The reponsibility of a filter is to invoke the corresponding method
 225  
 //                                // in the handler. When you chain multiple filters together, each filter
 226  
 //                                // received a handler that is a bridge to the next filter.
 227  
 //                                boolean res = handler.service( request, response );
 228  
 //
 229  
 //                                wsu = webSessionUserService.getUser();
 230  
 //                                session = request.getSession( wsu != null );
 231  
 //                                if ( null != session ) session.setAttribute( ChenilleKitAccessConstants.WEB_SESSION_USER_KEY, wsu );
 232  
 //                                return res;
 233  
 //                        }
 234  
 //                };
 235  
 //        }
 236  
 
 237  
         /**
 238  
          * This is a contribution to the RequestHandler service configuration. This is how we extend Tapestry using the
 239  
          * timing filter. A common use for this kind of filter is transaction management or security.
 240  
          *
 241  
          * @param configuration configuration to add to
 242  
          * @param webSessionUserFilter filter info
 243  
          */
 244  
 //        public void contributeRequestHandler( OrderedConfiguration<RequestFilter> configuration,
 245  
 //                                                                                @InjectService( "WebSessionUserFilter" ) RequestFilter webSessionUserFilter )
 246  
 //        {
 247  
 //                // Each contribution to an ordered configuration has a name, When necessary, you may
 248  
 //                // set constraints to precisely control the invocation order of the contributed filter
 249  
 //                // within the pipeline.
 250  
 //                configuration.add( "WebSessionUser", webSessionUserFilter );
 251  
 //        }
 252  
 
 253  
 }