/* * 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. */ package org.apache.cocoon.portal.profile.impl; import java.util.HashMap; import java.util.Map; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.Serviceable; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.webapps.authentication.AuthenticationManager; import org.apache.cocoon.webapps.authentication.configuration.ApplicationConfiguration; import org.apache.cocoon.webapps.authentication.user.RequestState; import org.apache.cocoon.webapps.authentication.user.UserHandler; /** * Get the information about the current user. * This implementation uses the authentication-fw block * * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a> * @version CVS $Id: MapProfileLS.java 30941 2004-07-29 19:56:58Z vgritsenko $ */ public class AuthenticationFWUserInfoProvider implements UserInfoProvider, Serviceable { protected ServiceManager manager; /* (non-Javadoc) * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) */ public void service(ServiceManager manager) throws ServiceException { this.manager = manager; } /* (non-Javadoc) * @see org.apache.cocoon.portal.profile.impl.UserInfoProvider#getUserInfo(java.lang.String, java.lang.String) */ public UserInfo getUserInfo(String portalName, String layoutKey) throws Exception { AuthenticationManager authManager = null; try { authManager = (AuthenticationManager)this.manager.lookup(AuthenticationManager.ROLE); final RequestState state = authManager.getState(); final UserHandler handler = state.getHandler(); final UserInfo info = new AFWUserInfo(portalName, layoutKey, handler); info.setUserName(handler.getUserId()); try { info.setGroup((String)handler.getContext().getContextInfo().get("group")); } catch (ProcessingException pe) { // ignore this } final ApplicationConfiguration ac = state.getApplicationConfiguration(); if ( ac == null ) { throw new ProcessingException("Configuration for portal not found in application configuration."); } final Configuration appConf = ac.getConfiguration("portal"); if ( appConf == null ) { throw new ProcessingException("Configuration for portal not found in application configuration."); } final Configuration config = appConf.getChild("profiles"); final Configuration[] children = config.getChildren(); final Map configs = new HashMap(); if ( children != null ) { for(int i=0; i < children.length; i++) { configs.put(children[i].getName(), children[i].getAttribute("uri")); } } info.setConfigurations(configs); return info; } finally { this.manager.release( authManager ); } } public static final class AFWUserInfo extends UserInfo { protected final UserHandler handler; /** * @param portalName * @param layoutKey */ public AFWUserInfo(String portalName, String layoutKey, UserHandler handler) { super(portalName, layoutKey); this.handler = handler; } /* (non-Javadoc) * @see org.apache.cocoon.portal.profile.PortalUser#isUserInRole(java.lang.String) */ public boolean isUserInRole(String role) { return this.isUserInRole(role); } } }