You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2008/06/28 21:18:57 UTC
svn commit: r672574 [6/16] - in /roller/planet/core/trunk: ./ lib/
lib/buildtime/ lib/jakarta-taglibs-standard-1.1.2/
lib/jakarta-taglibs-standard-1.1.2/lib/
lib/jakarta-taglibs-standard-1.1.2/tld/ lib/openjpa-0.9.7/ lib/rome-0.9/
lib/spring-1.2/ lib/s...
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. 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. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.planet.pojos;
+
+import java.io.Serializable;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.roller.planet.util.UUIDGenerator;
+
+
+/**
+ * Role bean.
+ */
+public class UserRole implements Serializable {
+
+ private String id = UUIDGenerator.generateUUID();
+ private String userName;
+ private User user;
+ private String role;
+
+
+ public UserRole() {
+ }
+
+ public UserRole(User user, String role) {
+ this.userName = user.getUserName();
+ this.user = user;
+ this.role = role;
+ }
+
+
+ public String getId() {
+ return this.id;
+ }
+
+ public void setId( String id ) {
+ this.id = id;
+ }
+
+
+ public String getUserName() {
+ return this.userName;
+ }
+
+ public void setUserName( String userName ) {
+ this.userName = userName;
+ }
+
+
+ public User getUser() {
+ return this.user;
+ }
+
+ public void setUser( User user ) {
+ this.user = user;
+ }
+
+
+ public String getRole() {
+ return this.role;
+ }
+
+ public void setRole( String role ) {
+ this.role = role;
+ }
+
+
+ //------------------------------------------------------- Good citizenship
+
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("{");
+ buf.append(this.id);
+ buf.append(", ").append(this.userName);
+ buf.append(", ").append(this.role);
+ buf.append("}");
+ return buf.toString();
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof UserRole != true) return false;
+ UserRole o = (UserRole)other;
+ return new EqualsBuilder()
+ .append(getRole(), o.getRole())
+ .append(getUserName(), o.getUserName())
+ .isEquals();
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder().append(getUserName()).append(getRole()).toHashCode();
+ }
+
+}
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.orm.xml
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.orm.xml?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.orm.xml (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/pojos/UserRole.orm.xml Sat Jun 28 12:18:17 2008
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings version="1.0" xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+ <description>Persistence Metadata for Roller</description>
+ <persistence-unit-metadata>
+ <persistence-unit-defaults>
+ <access>PROPERTY</access>
+ </persistence-unit-defaults>
+ </persistence-unit-metadata>
+ <package>org.apache.roller.planet.pojos</package>
+ <entity metadata-complete="true" name="UserRole" class="org.apache.roller.planet.pojos.UserRole">
+ <table name="rag_userrole"/>
+ <attributes>
+ <id name="id">
+ <column name="id"/>
+ </id>
+ <basic name="userName">
+ <column name="username" insertable="true" updatable="true" unique="false"/>
+ </basic>
+ <basic name="role">
+ <column name="rolename" insertable="true" updatable="true" unique="false"/>
+ </basic>
+ <many-to-one name="user" target-entity="org.apache.roller.planet.pojos.User">
+ <join-column name="user_id" insertable="true" updatable="true" nullable="false"/>
+ </many-to-one>
+ </attributes>
+ </entity>
+</entity-mappings>
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PlanetTask.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PlanetTask.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PlanetTask.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PlanetTask.java Sat Jun 28 12:18:17 2008
@@ -19,7 +19,7 @@
package org.apache.roller.planet.tasks;
import org.apache.roller.planet.business.fetcher.FeedFetcher;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.URLStrategy;
import org.apache.roller.planet.config.PlanetConfig;
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PurgeUnusedSubscriptionsTask.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PurgeUnusedSubscriptionsTask.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PurgeUnusedSubscriptionsTask.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/PurgeUnusedSubscriptionsTask.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. 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. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.planet.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.planet.PlanetException;
+import org.apache.roller.planet.business.AggregatorFactory;
+import org.apache.roller.planet.business.PlanetManager;
+import org.apache.roller.planet.business.startup.PlanetStartup;
+import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.pojos.Subscription;
+
+
+/**
+ * Purges unused subscriptions from the database.
+ */
+public class PurgeUnusedSubscriptionsTask extends PlanetTask {
+
+ private static Log log = LogFactory.getLog(PurgeUnusedSubscriptionsTask.class);
+
+
+ public void run() {
+
+ log.info("Purging all unused subscriptions");
+
+ try {
+ // lookup all subscriptions not in a group
+ PlanetManager pmgr = AggregatorFactory.getAggregator().getPlanetManager();
+ List<Subscription> subs = pmgr.getSubscriptions();
+
+ // find unused subscriptions
+ List<Subscription> unusedSubs = new ArrayList();
+ for (Subscription sub : subs) {
+ if (sub.getGroups().size() < 1) {
+ unusedSubs.add(sub);
+ }
+ }
+
+ // remove unused subscriptions
+ for (Subscription unused : unusedSubs) {
+ try {
+ log.debug("Removing unused subscription "+unused.getFeedURL());
+ pmgr.deleteSubscription(unused);
+ } catch(PlanetException ex) {
+ log.warn("Error removing subscription "+unused.getFeedURL(), ex);
+ }
+ }
+
+ // flush and done
+ AggregatorFactory.getAggregator().flush();
+ log.info("Purged "+unusedSubs.size()+" unused subscriptions");
+
+ } catch (Exception e) {
+ log.error("ERROR purging subscriptions", e);
+ }
+ }
+
+
+ public static void main(String[] args) throws Exception {
+
+ PurgeUnusedSubscriptionsTask task = new PurgeUnusedSubscriptionsTask();
+ task.initialize();
+
+ // start by loading config
+ PlanetConfig config = PlanetConfig.getConfig(PlanetConfig.DEFAULT, PlanetConfig.CUSTOM, PlanetConfig.JVM_PARAM);
+
+ // need to prepare and bootstrap Aggregator as well
+ PlanetStartup.prepare(config);
+ AggregatorFactory.bootstrap(AggregatorFactory.getDefaultProvider(config));
+
+ task.run();
+ }
+
+}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/RefreshPlanetTask.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/RefreshPlanetTask.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/RefreshPlanetTask.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/tasks/RefreshPlanetTask.java Sat Jun 28 12:18:17 2008
@@ -20,10 +20,11 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.startup.PlanetStartup;
import org.apache.roller.planet.business.updater.FeedUpdater;
import org.apache.roller.planet.business.updater.SingleThreadedFeedUpdater;
+import org.apache.roller.planet.config.PlanetConfig;
/**
@@ -42,9 +43,9 @@
try {
// Update all feeds in planet
log.info("Refreshing Planet entries");
- FeedUpdater updater = new SingleThreadedFeedUpdater();
+ FeedUpdater updater = new SingleThreadedFeedUpdater(AggregatorFactory.getAggregator().getConfig());
updater.updateSubscriptions();
- PlanetFactory.getPlanet().release();
+ AggregatorFactory.getAggregator().release();
} catch (Exception e) {
log.error("ERROR refreshing planet", e);
@@ -57,9 +58,12 @@
RefreshPlanetTask task = new RefreshPlanetTask();
task.initialize();
+ // start by loading config
+ PlanetConfig config = PlanetConfig.getConfig(PlanetConfig.DEFAULT, PlanetConfig.CUSTOM, PlanetConfig.JVM_PARAM);
+
// need to prepare and bootstrap Planet as well
- PlanetStartup.prepare();
- PlanetFactory.bootstrap();
+ PlanetStartup.prepare(config);
+ AggregatorFactory.bootstrap(AggregatorFactory.getDefaultProvider(config));
task.run();
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/PlanetContext.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/PlanetContext.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/PlanetContext.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/PlanetContext.java Sat Jun 28 12:18:17 2008
@@ -18,17 +18,32 @@
package org.apache.roller.planet.ui.core;
+import java.security.Principal;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import org.acegisecurity.providers.ProviderManager;
+import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
+import org.acegisecurity.providers.dao.UserCache;
+import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
+import org.acegisecurity.providers.encoding.PasswordEncoder;
+import org.acegisecurity.providers.encoding.ShaPasswordEncoder;
+import org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
import org.apache.roller.planet.business.BootstrapException;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
+import org.apache.roller.planet.business.UserManager;
import org.apache.roller.planet.business.startup.PlanetStartup;
import org.apache.roller.planet.business.startup.StartupException;
+import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.pojos.User;
+import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.support.WebApplicationContextUtils;
/**
@@ -39,9 +54,14 @@
private static Log log = LogFactory.getLog(PlanetContext.class);
+ public static final String USER_ID = "org.apache.roller.planet.USER_ID";
+
// reference to ServletContext object
private static ServletContext context = null;
+ // reference to PlanetConfig
+ private PlanetConfig config = null;
+
public PlanetContext() {
super();
@@ -62,22 +82,20 @@
* Responds to context initialization event by processing context
* paramters for easy access by the rest of the application.
*/
+ @Override
public void contextInitialized(ServletContextEvent sce) {
log.info("Roller Planet Initializing ... ");
// keep a reverence to ServletContext object
- this.context = sce.getServletContext();
+ context = sce.getServletContext();
+
+ // First of all we are going to need our configuration
+ this.config = PlanetConfig.getConfig(PlanetConfig.DEFAULT, PlanetConfig.CUSTOM, PlanetConfig.JVM_PARAM);
- // call Spring's context ContextLoaderListener to initialize
- // all the context files specified in web.xml. This is necessary
- // because listeners don't initialize in the order specified in
- // 2.3 containers
- super.contextInitialized(sce);
-
// Now prepare the core services of the app so we can bootstrap
try {
- PlanetStartup.prepare();
+ PlanetStartup.prepare(config);
} catch (StartupException ex) {
log.fatal("Roller Planet startup failed during app preparation", ex);
return;
@@ -90,10 +108,10 @@
} else {
try {
// trigger bootstrapping process
- PlanetFactory.bootstrap();
+ AggregatorFactory.bootstrap(AggregatorFactory.getDefaultProvider(config));
// trigger initialization process
- PlanetFactory.getPlanet().initialize();
+ AggregatorFactory.getAggregator().initialize();
} catch (BootstrapException ex) {
log.fatal("Roller PlanetFactory bootstrap failed", ex);
@@ -102,6 +120,17 @@
}
}
+
+ // setup web tier
+
+ // call Spring's context ContextLoaderListener to initialize
+ // all the context files specified in web.xml. This is necessary
+ // because listeners don't initialize in the order specified in
+ // 2.3 containers
+ super.contextInitialized(sce);
+
+ setupSecurityFeatures();
+
log.info("Roller Planet Initialization Complete");
}
@@ -109,7 +138,158 @@
/**
* Responds to app-destroy.
*/
+ @Override
public void contextDestroyed(ServletContextEvent sce) {
- PlanetFactory.getPlanet().shutdown();
+ AggregatorFactory.getAggregator().shutdown();
+ }
+
+
+ /**
+ * Setup Acegi security features.
+ */
+ private void setupSecurityFeatures() {
+
+ ApplicationContext ctx =
+ WebApplicationContextUtils.getRequiredWebApplicationContext(context);
+
+
+ String rememberMe = config.getProperty("rememberme.enabled");
+ boolean rememberMeEnabled = Boolean.valueOf(rememberMe).booleanValue();
+
+ log.info("Remember Me enabled: " + rememberMeEnabled);
+
+ context.setAttribute("rememberMeEnabled", rememberMe);
+
+ if (rememberMeEnabled) {
+ ProviderManager provider = (ProviderManager) ctx.getBean("authenticationManager");
+ provider.getProviders().add(ctx.getBean("rememberMeAuthenticationProvider"));
+ }
+
+
+ String encryptPasswords = config.getProperty("passwds.encryption.enabled");
+ boolean doEncrypt = Boolean.valueOf(encryptPasswords).booleanValue();
+
+ if (doEncrypt) {
+ DaoAuthenticationProvider provider =
+ (DaoAuthenticationProvider) ctx.getBean("daoAuthenticationProvider");
+ String algorithm = config.getProperty("passwds.encryption.algorithm");
+ PasswordEncoder encoder = null;
+ if (algorithm.equalsIgnoreCase("SHA")) {
+ encoder = new ShaPasswordEncoder();
+ } else if (algorithm.equalsIgnoreCase("MD5")) {
+ encoder = new Md5PasswordEncoder();
+ } else {
+ log.error("Encryption algorithm '" + algorithm +
+ "' not supported, disabling encryption.");
+ }
+ if (encoder != null) {
+ provider.setPasswordEncoder(encoder);
+ log.info("Password Encryption Algorithm set to '" + algorithm + "'");
+ }
+ }
+
+
+ if (config.getBooleanProperty("securelogin.enabled")) {
+ AuthenticationProcessingFilterEntryPoint entryPoint =
+ (AuthenticationProcessingFilterEntryPoint)
+ ctx.getBean("authenticationProcessingFilterEntryPoint");
+ entryPoint.setForceHttps(true);
+ }
+
+ /*
+ if (PlanetConfig.getBooleanProperty("schemeenforcement.enabled")) {
+
+ ChannelProcessingFilter procfilter =
+ (ChannelProcessingFilter)ctx.getBean("channelProcessingFilter");
+ ConfigAttributeDefinition secureDef = new ConfigAttributeDefinition();
+ secureDef.addConfigAttribute(new SecurityConfig("REQUIRES_SECURE_CHANNEL"));
+ ConfigAttributeDefinition insecureDef = new ConfigAttributeDefinition();
+ insecureDef.addConfigAttribute(new SecurityConfig("REQUIRES_INSECURE_CHANNEL"));
+ PathBasedFilterInvocationDefinitionMap defmap =
+ (PathBasedFilterInvocationDefinitionMap)procfilter.getFilterInvocationDefinitionSource();
+
+ // add HTTPS URL path patterns to Acegi config
+ String httpsUrlsProp = PlanetConfig.getProperty("schemeenforcement.https.urls");
+ if (httpsUrlsProp != null) {
+ String[] httpsUrls = StringUtils.stripAll(StringUtils.split(httpsUrlsProp, ",") );
+ for (int i=0; i<httpsUrls.length; i++) {
+ defmap.addSecureUrl(httpsUrls[i], secureDef);
+ }
+ }
+ // all other action URLs are non-HTTPS
+ defmap.addSecureUrl("/**<!-- need to remove this when uncommenting -->/*.do*", insecureDef);
+ }
+ */
+ }
+
+
+ /**
+ * Authenticated user associated with this session.
+ */
+ public static User getAuthenticatedUser(HttpServletRequest request) {
+
+ User authenticUser = null;
+
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ log.debug("Http session exists, trying to extract planet user");
+
+ // lookup user from existing session data if possible
+ String userId = (String) session.getAttribute(USER_ID);
+ if (userId != null) {
+ try {
+ UserManager mgr = AggregatorFactory.getAggregator().getUserManager();
+ authenticUser = mgr.getUser(userId);
+ } catch (PlanetException ex) {
+ log.warn("Error looking up authenticated user " + userId, ex);
+ }
+ }
+ }
+
+ // if we didn't find the user from an existing session then see if we can set it up now
+ Principal principal = request.getUserPrincipal();
+ if (authenticUser == null && principal != null) {
+ log.debug("Client user id not found in session, trying lookup by request principal = " + principal);
+ try {
+ UserManager mgr = AggregatorFactory.getAggregator().getUserManager();
+ authenticUser = mgr.getUserByUserName(principal.getName());
+
+ // only set authenticated user if user is enabled
+ if (authenticUser != null &&
+ authenticUser.getEnabled().booleanValue()) {
+
+ // force session at this point
+ session = request.getSession(true);
+ session.setAttribute(USER_ID, authenticUser.getId());
+ }
+ } catch (PlanetException e) {
+ log.error("ERROR: getting user object", e);
+ }
+ } else {
+ log.debug("Request does not contain a principal, client is not authentic");
+ }
+
+ // Security check, if for some reason the user is not enabled
+ // then don't return the authenticated user object
+ // this can occur when an already authentic user gets changed to a disabled state
+ if (authenticUser != null && !authenticUser.getEnabled().booleanValue()) {
+ authenticUser = null;
+ }
+
+ return authenticUser;
+ }
+
+
+ /**
+ * Flush user from any caches maintained by security system.
+ */
+ public static void flushAuthenticationUserCache(String userName) {
+ ApplicationContext ctx =
+ WebApplicationContextUtils.getRequiredWebApplicationContext(context);
+ UserCache userCache = (UserCache)ctx.getBean("userCache");
+ if (userCache != null) {
+ userCache.removeUserFromCache(userName);
+ }
}
+
}
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/CharEncodingFilter.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/CharEncodingFilter.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/CharEncodingFilter.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/CharEncodingFilter.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. 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. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.planet.ui.core.filters;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * Entry point filter for all requests. This filter ensures that the request
+ * encoding is set to UTF-8 before any other processing forces request parsing
+ * using a default encoding.
+ */
+public class CharEncodingFilter implements Filter {
+
+ private static Log log = LogFactory.getLog(CharEncodingFilter.class);
+
+ /**
+ * init
+ */
+ public void init(FilterConfig filterConfig) throws ServletException {
+ }
+
+ /**
+ * destroy
+ */
+ public void destroy() {
+ }
+
+
+ /**
+ * Set the character encoding and sync up Struts and JSTL locales. This filter should normally be first (and last)
+ * in the chain.
+ */
+ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
+ throws IOException, ServletException {
+
+ log.debug("Processing CharEncodingFilter");
+
+ try {
+ req.setCharacterEncoding("UTF-8");
+ log.debug("Set request character encoding to UTF-8");
+
+ } catch (UnsupportedEncodingException e) {
+ // This should never happen since UTF-8 is a Java-specified required encoding.
+ throw new ServletException("Can't set incoming encoding to UTF-8");
+ }
+
+ chain.doFilter(req, res);
+ }
+
+}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/PersistenceSessionFilter.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/PersistenceSessionFilter.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/PersistenceSessionFilter.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/PersistenceSessionFilter.java Sat Jun 28 12:18:17 2008
@@ -29,8 +29,7 @@
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.roller.planet.business.Planet;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
/**
@@ -53,13 +52,12 @@
log.debug("Entered PersistenceSessionFilter");
- Planet planet = PlanetFactory.getPlanet();
try {
chain.doFilter(request, response);
} finally {
log.debug("Releasing Planet Session");
- if (PlanetFactory.isBootstrapped()) {
- PlanetFactory.getPlanet().release();
+ if (AggregatorFactory.isBootstrapped()) {
+ AggregatorFactory.getAggregator().release();
}
}
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/SchemeEnforcementFilter.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/SchemeEnforcementFilter.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/SchemeEnforcementFilter.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/filters/SchemeEnforcementFilter.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,165 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. 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. For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+
+package org.apache.roller.planet.ui.core.filters;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
+import org.apache.roller.planet.config.PlanetConfig;
+
+
+/**
+ * The SchemeEnforcementFilter is provided for Roller sites that enable secure
+ * logins and want to ensure that only login urls are used under https.
+ */
+public class SchemeEnforcementFilter implements Filter {
+
+ private static Log log = LogFactory.getLog(SchemeEnforcementFilter.class);
+
+ private FilterConfig filterConfig = null;
+
+ private boolean schemeEnforcementEnabled = false;
+ private boolean secureLoginEnabled = false;
+ private int httpPort = 80;
+ private int httpsPort = 443;
+
+ private Set allowedUrls = new HashSet();
+
+
+ /**
+ * Process filter.
+ *
+ * We'll take the incoming request and first determine if this is a
+ * secure request. If the request is secure then we'll see if it matches
+ * one of the allowed secure urls, if not then we will redirect back out
+ * of https.
+ */
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain)
+ throws IOException, ServletException {
+
+ if(this.schemeEnforcementEnabled && this.secureLoginEnabled) {
+
+ HttpServletRequest req = (HttpServletRequest) request;
+ HttpServletResponse res = (HttpServletResponse) response;
+
+ log.debug("checking path = "+req.getServletPath());
+
+ if(!request.isSecure() && allowedUrls.contains(req.getServletPath())) {
+ // http insecure request that should be over https
+ String redirect = "https://"+req.getServerName();
+
+ if(this.httpsPort != 443)
+ redirect += ":"+this.httpsPort;
+
+ redirect += req.getRequestURI();
+
+ if(req.getQueryString() != null)
+ redirect += "?"+req.getQueryString();
+
+ log.debug("Redirecting to "+redirect);
+ res.sendRedirect(redirect);
+ return;
+
+ } else if(request.isSecure() && !allowedUrls.contains(req.getServletPath())) {
+ // https secure request that should be over http
+ String redirect = "http://"+req.getServerName();
+
+ if(this.httpPort != 80)
+ redirect += ":"+this.httpPort;
+
+ redirect += req.getRequestURI();
+
+ if(req.getQueryString() != null)
+ redirect += "?"+req.getQueryString();
+
+ log.debug("Redirecting to "+redirect);
+ res.sendRedirect(redirect);
+ return;
+ }
+ }
+
+ chain.doFilter(request, response);
+ }
+
+
+ public void destroy() {}
+
+
+ /**
+ * Filter init.
+ *
+ * We are just collecting init properties which we'll use for each request.
+ */
+ public void init(FilterConfig filterConfig) {
+ this.filterConfig = filterConfig;
+
+ PlanetConfig config = AggregatorFactory.getAggregator().getConfig();
+
+ // determine if we are doing scheme enforcement
+ this.schemeEnforcementEnabled =
+ config.getBooleanProperty("schemeenforcement.enabled");
+ this.secureLoginEnabled =
+ config.getBooleanProperty("securelogin.enabled");
+
+ if(this.schemeEnforcementEnabled && this.secureLoginEnabled) {
+ // gather some more properties
+ String http_port =
+ config.getProperty("securelogin.http.port");
+ String https_port =
+ config.getProperty("securelogin.https.port");
+
+ try {
+ this.httpPort = Integer.parseInt(http_port);
+ this.httpsPort = Integer.parseInt(https_port);
+ } catch(NumberFormatException nfe) {
+ // ignored ... guess we'll have to use the defaults
+ log.warn("error with secure login ports", nfe);
+ }
+
+ // finally, construct our list of allowable https urls
+ String urls =
+ config.getProperty("schemeenforcement.https.urls");
+ String[] urlsArray = urls.split(",");
+ for(int i=0; i < urlsArray.length; i++)
+ this.allowedUrls.add(urlsArray[i]);
+
+ // some logging for the curious
+ log.info("Scheme enforcement = enabled");
+ if(log.isDebugEnabled()) {
+ log.debug("allowed urls are:");
+ for(Iterator it = this.allowedUrls.iterator(); it.hasNext();)
+ log.debug(it.next());
+ }
+ }
+ }
+
+}
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/security/RollerUserDetailsService.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/security/RollerUserDetailsService.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/security/RollerUserDetailsService.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/core/security/RollerUserDetailsService.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,53 @@
+
+package org.apache.roller.planet.ui.core.security;
+
+import java.util.Iterator;
+import org.acegisecurity.GrantedAuthority;
+import org.acegisecurity.GrantedAuthorityImpl;
+import org.acegisecurity.userdetails.UserDetails;
+import org.acegisecurity.userdetails.UserDetailsService;
+import org.acegisecurity.userdetails.UsernameNotFoundException;
+import org.apache.roller.planet.PlanetException;
+import org.apache.roller.planet.business.Aggregator;
+import org.apache.roller.planet.business.AggregatorFactory;
+import org.apache.roller.planet.business.UserManager;
+import org.apache.roller.planet.pojos.User;
+import org.apache.roller.planet.pojos.UserRole;
+import org.springframework.dao.DataAccessException;
+import org.springframework.dao.DataRetrievalFailureException;
+
+
+/**
+ * Acegi user details service implemented using Aggregator API.
+ */
+public class RollerUserDetailsService implements UserDetailsService {
+
+ public UserDetails loadUserByUsername(String userName)
+ throws UsernameNotFoundException, DataAccessException {
+
+ User userData = null;
+ try {
+ Aggregator roller = AggregatorFactory.getAggregator();
+ UserManager umgr = roller.getUserManager();
+ userData = umgr.getUserByUserName(userName, Boolean.TRUE);
+ } catch (PlanetException ex) {
+ throw new DataRetrievalFailureException("ERROR in user lookup", ex);
+ }
+
+ if (userData == null) {
+ throw new UsernameNotFoundException("ERROR no user: " + userName);
+ }
+
+ GrantedAuthority[] authorities =
+ new GrantedAuthorityImpl[userData.getRoles().size()];
+ int i = 0;
+ for (Iterator it = userData.getRoles().iterator(); it.hasNext();) {
+ UserRole role = (UserRole)it.next();
+ authorities[i++] = new GrantedAuthorityImpl(role.getRole());
+ }
+
+ return new org.acegisecurity.userdetails.User(
+ userData.getUserName(), userData.getPassword(), true, authorities);
+ }
+
+}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/MultiPlanetRequestMapper.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/MultiPlanetRequestMapper.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/MultiPlanetRequestMapper.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/MultiPlanetRequestMapper.java Sat Jun 28 12:18:17 2008
@@ -27,7 +27,7 @@
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.PlanetManager;
import org.apache.roller.planet.config.PlanetConfig;
import org.apache.roller.planet.pojos.Planet;
@@ -59,7 +59,7 @@
// build roller restricted list
String restrictList =
- PlanetConfig.getProperty("rendering.multiPlanetMapper.rollerProtectedUrls");
+ AggregatorFactory.getAggregator().getConfig().getProperty("rendering.multiPlanetMapper.rollerProtectedUrls");
if(restrictList != null && restrictList.trim().length() > 0) {
String[] restrict = restrictList.split(",");
for(int i=0; i < restrict.length; i++) {
@@ -69,7 +69,7 @@
// add user restricted list
restrictList =
- PlanetConfig.getProperty("rendering.multiPlanetMapper.userProtectedUrls");
+ AggregatorFactory.getAggregator().getConfig().getProperty("rendering.multiPlanetMapper.userProtectedUrls");
if(restrictList != null && restrictList.trim().length() > 0) {
String[] restrict = restrictList.split(",");
for(int i=0; i < restrict.length; i++) {
@@ -270,7 +270,7 @@
boolean isPlanet = false;
try {
- PlanetManager mgr = PlanetFactory.getPlanet().getPlanetManager();
+ PlanetManager mgr = AggregatorFactory.getAggregator().getPlanetManager();
Planet planet = mgr.getPlanet(planetHandle);
if(planet != null) {
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/RendererManager.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/RendererManager.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/RendererManager.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/RendererManager.java Sat Jun 28 12:18:17 2008
@@ -23,7 +23,7 @@
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.pojos.Template;
import org.apache.roller.planet.ui.rendering.Renderer;
import org.apache.roller.planet.ui.rendering.RendererFactory;
@@ -48,8 +48,8 @@
static {
// lookup set of renderer factories we are going to use
- String rollerFactories = PlanetConfig.getProperty("rendering.rollerRendererFactories");
- String userFactories = PlanetConfig.getProperty("rendering.userRendererFactories");
+ String rollerFactories = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.rollerRendererFactories");
+ String userFactories = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.userRendererFactories");
// instantiate user defined renderer factory classes
if(userFactories != null && userFactories.trim().length() > 0) {
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/filters/RequestMappingFilter.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/filters/RequestMappingFilter.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/filters/RequestMappingFilter.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/filters/RequestMappingFilter.java Sat Jun 28 12:18:17 2008
@@ -32,7 +32,7 @@
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.ui.rendering.RequestMapper;
@@ -53,8 +53,8 @@
public void init(FilterConfig filterConfig) {
// lookup set of request mappers we are going to use
- String rollerMappers = PlanetConfig.getProperty("rendering.rollerRequestMappers");
- String userMappers = PlanetConfig.getProperty("rendering.userRequestMappers");
+ String rollerMappers = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.rollerRequestMappers");
+ String userMappers = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.userRequestMappers");
// instantiate user defined request mapper classes
if(userMappers != null && userMappers.trim().length() > 0) {
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/FeedModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/FeedModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/FeedModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/FeedModel.java Sat Jun 28 12:18:17 2008
@@ -22,12 +22,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.pojos.Planet;
-import org.apache.roller.planet.pojos.PlanetGroup;
import org.apache.roller.planet.ui.rendering.pagers.Pager;
import org.apache.roller.planet.ui.rendering.pagers.PlanetEntriesPager;
import org.apache.roller.planet.ui.rendering.util.PlanetGroupFeedRequest;
-import org.apache.roller.planet.ui.rendering.util.PlanetRequest;
+import org.apache.roller.planet.ui.rendering.util.PlanetGroupRequest;
import org.apache.roller.planet.util.URLUtilities;
@@ -53,6 +51,7 @@
/**
* Template context name to be used for model.
*/
+ @Override
public String getModelName() {
return "model";
}
@@ -61,24 +60,25 @@
/**
* Init page model based on request.
*/
+ @Override
public void init(Map initData) throws PlanetException {
// parent gets to go first
super.init(initData);
// we expect the init data to contain a weblogRequest object
- PlanetRequest planetRequest = (PlanetRequest) initData.get("planetRequest");
- if(planetRequest == null) {
- throw new PlanetException("expected planetRequest from init data");
+ PlanetGroupRequest pgRequest = (PlanetGroupRequest) initData.get("parsedRequest");
+ if(pgRequest == null) {
+ throw new PlanetException("expected parsedRequest from init data");
}
// PageModel only works on page requests, so cast planetRequest
// into a PlanetRequest and if it fails then throw exception
- if(planetRequest instanceof PlanetGroupFeedRequest) {
- this.feedRequest = (PlanetGroupFeedRequest) planetRequest;
+ if(pgRequest instanceof PlanetGroupFeedRequest) {
+ this.feedRequest = (PlanetGroupFeedRequest) pgRequest;
} else {
- throw new PlanetException("weblogRequest is not a WeblogPageRequest."+
- " PageModel only supports page requests.");
+ throw new PlanetException("parsedRequest is not a PlanetGroupFeedRequest."+
+ " FeedModel only supports feed requests.");
}
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PageModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PageModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PageModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PageModel.java Sat Jun 28 12:18:17 2008
@@ -22,12 +22,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.pojos.Planet;
-import org.apache.roller.planet.pojos.PlanetGroup;
import org.apache.roller.planet.ui.rendering.pagers.Pager;
import org.apache.roller.planet.ui.rendering.pagers.PlanetEntriesPager;
import org.apache.roller.planet.ui.rendering.util.PlanetGroupPageRequest;
-import org.apache.roller.planet.ui.rendering.util.PlanetRequest;
+import org.apache.roller.planet.ui.rendering.util.PlanetGroupRequest;
import org.apache.roller.planet.util.URLUtilities;
@@ -52,6 +50,7 @@
/**
* Template context name to be used for model.
*/
+ @Override
public String getModelName() {
return "model";
}
@@ -60,23 +59,24 @@
/**
* Init page model based on request.
*/
+ @Override
public void init(Map initData) throws PlanetException {
// parent gets to go first
super.init(initData);
- // we expect the init data to contain a weblogRequest object
- PlanetRequest planetRequest = (PlanetRequest) initData.get("planetRequest");
- if(planetRequest == null) {
- throw new PlanetException("expected planetRequest from init data");
+ // we expect the init data to contain a parsedRequest object
+ PlanetGroupRequest pgRequest = (PlanetGroupRequest) initData.get("parsedRequest");
+ if(pgRequest == null) {
+ throw new PlanetException("expected parsedRequest from init data");
}
// PageModel only works on page requests, so cast planetRequest
// into a PlanetRequest and if it fails then throw exception
- if(planetRequest instanceof PlanetGroupPageRequest) {
- this.pageRequest = (PlanetGroupPageRequest) planetRequest;
+ if(pgRequest instanceof PlanetGroupPageRequest) {
+ this.pageRequest = (PlanetGroupPageRequest) pgRequest;
} else {
- throw new PlanetException("weblogRequest is not a WeblogPageRequest."+
+ throw new PlanetException("parsedRequest is not a PlanetGroupPageRequest."+
" PageModel only supports page requests.");
}
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetGroupModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetGroupModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetGroupModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetGroupModel.java Sat Jun 28 12:18:17 2008
@@ -25,7 +25,6 @@
import org.apache.roller.planet.pojos.Planet;
import org.apache.roller.planet.pojos.PlanetGroup;
import org.apache.roller.planet.ui.rendering.util.PlanetGroupRequest;
-import org.apache.roller.planet.ui.rendering.util.PlanetRequest;
/**
@@ -60,18 +59,18 @@
*/
public void init(Map initData) throws PlanetException {
- // we expect the init data to contain a planetRequest object
- PlanetRequest planetRequest = (PlanetRequest) initData.get("planetRequest");
- if(planetRequest == null) {
- throw new PlanetException("expected planetRequest from init data");
+ // we expect the init data to contain a parsedRequest object
+ PlanetGroupRequest pgRequest = (PlanetGroupRequest) initData.get("parsedRequest");
+ if(pgRequest == null) {
+ throw new PlanetException("expected parsedRequest from init data");
}
- // only works on planet group requests, so cast planetRequest
+ // only works on planet group requests, so cast parsedRequest
// into a PlanetGroupRequest and if it fails then throw exception
- if(planetRequest instanceof PlanetGroupRequest) {
- this.planetGroupRequest = (PlanetGroupRequest) planetRequest;
+ if(pgRequest instanceof PlanetGroupRequest) {
+ this.planetGroupRequest = (PlanetGroupRequest) pgRequest;
} else {
- throw new PlanetException("planetRequest is not a PlanetGroupRequest."+
+ throw new PlanetException("parsedRequest is not a PlanetGroupRequest."+
" PlanetGroupModel only supports planet group requests.");
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetURLModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetURLModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetURLModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/PlanetURLModel.java Sat Jun 28 12:18:17 2008
@@ -22,11 +22,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.URLStrategy;
-import org.apache.roller.planet.config.PlanetRuntimeConfig;
import org.apache.roller.planet.pojos.Planet;
-import org.apache.roller.planet.ui.rendering.util.PlanetRequest;
+import org.apache.roller.planet.ui.rendering.util.PlanetGroupRequest;
/**
@@ -59,20 +58,20 @@
public void init(Map initData) throws PlanetException {
// grab a reference to the url strategy
- this.urlStrategy = PlanetFactory.getPlanet().getURLStrategy();
+ this.urlStrategy = AggregatorFactory.getAggregator().getURLStrategy();
// need a weblog request so that we can know the weblog and locale
- PlanetRequest planetRequest = (PlanetRequest) initData.get("planetRequest");
- if(planetRequest == null) {
- throw new PlanetException("Expected 'planetRequest' init param!");
+ PlanetGroupRequest parsedRequest = (PlanetGroupRequest) initData.get("parsedRequest");
+ if(parsedRequest == null) {
+ throw new PlanetException("Expected 'parsedRequest' init param!");
}
- this.planet = planetRequest.getPlanet();
+ this.planet = parsedRequest.getPlanet();
}
public String getSite() {
- return PlanetRuntimeConfig.getProperty("site.absoluteurl");
+ return AggregatorFactory.getAggregator().getConfig().getProperty("site.absoluteurl");
}
@@ -80,6 +79,9 @@
return urlStrategy.getPlanetURL(planet.getHandle());
}
+ public String planet(String planetHandle) {
+ return this.urlStrategy.getPlanetURL(planetHandle);
+ }
public String group(String groupHandle) {
return urlStrategy.getPlanetGroupURL(planet.getHandle(), groupHandle, -1);
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/RequestContextModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/RequestContextModel.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/RequestContextModel.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/RequestContextModel.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,63 @@
+
+package org.apache.roller.planet.ui.rendering.model;
+
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.planet.PlanetException;
+import org.apache.roller.planet.pojos.User;
+import org.apache.roller.planet.ui.rendering.util.ParsedRequest;
+
+
+/**
+ * A Model which provides access to contextual information about the context
+ * of the request.
+ *
+ * @author ag92114
+ */
+public class RequestContextModel implements Model {
+
+ private static Log log = LogFactory.getLog(RequestContextModel.class);
+
+ private ParsedRequest parsedRequest = null;
+
+
+ /**
+ * Creates an un-initialized new instance.
+ */
+ public RequestContextModel() {}
+
+
+ /**
+ * Template context name to be used for model.
+ */
+ public String getModelName() {
+ return "request";
+ }
+
+
+ /**
+ * Init page model based on request.
+ */
+ public void init(Map initData) throws PlanetException {
+
+ // we expect a parsed request
+ if(initData.containsKey("parsedRequest")) {
+ this.parsedRequest = (ParsedRequest) initData.get("parsedRequest");
+ }
+ }
+
+
+ public boolean isLoggedIn() {
+ return parsedRequest.isLoggedIn();
+ }
+
+ public String getAuthenticatedUserName() {
+ return parsedRequest.getAuthenticUserName();
+ }
+
+ public User getAuthenticatedUser() {
+ return parsedRequest.getAuthenticUser();
+ }
+
+}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteModel.java Sat Jun 28 12:18:17 2008
@@ -23,9 +23,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.PlanetManager;
-import org.apache.roller.planet.config.PlanetRuntimeConfig;
/**
@@ -59,12 +58,12 @@
public String getTitle() {
- return PlanetRuntimeConfig.getProperty("site.name");
+ return AggregatorFactory.getAggregator().getConfig().getProperty("site.name");
}
public String getDescription() {
- return PlanetRuntimeConfig.getProperty("site.description");
+ return AggregatorFactory.getAggregator().getConfig().getProperty("site.description");
}
@@ -72,7 +71,7 @@
* Get the list of all planets.
*/
public List getPlanets() {
- PlanetManager pMgr = PlanetFactory.getPlanet().getPlanetManager();
+ PlanetManager pMgr = AggregatorFactory.getAggregator().getPlanetManager();
try {
return pMgr.getPlanets();
} catch(Exception e) {
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteURLModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteURLModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteURLModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/SiteURLModel.java Sat Jun 28 12:18:17 2008
@@ -22,11 +22,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.URLStrategy;
-import org.apache.roller.planet.config.PlanetRuntimeConfig;
-import org.apache.roller.planet.pojos.Planet;
-import org.apache.roller.planet.ui.rendering.util.PlanetRequest;
/**
@@ -58,12 +55,12 @@
public void init(Map initData) throws PlanetException {
// grab a reference to the url strategy
- this.urlStrategy = PlanetFactory.getPlanet().getURLStrategy();
+ this.urlStrategy = AggregatorFactory.getAggregator().getURLStrategy();
}
public String getSite() {
- return PlanetRuntimeConfig.getProperty("site.absoluteurl");
+ return AggregatorFactory.getAggregator().getConfig().getProperty("site.absoluteurl");
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/UtilitiesModel.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/UtilitiesModel.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/UtilitiesModel.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/model/UtilitiesModel.java Sat Jun 28 12:18:17 2008
@@ -33,8 +33,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.util.DateUtil;
-import org.apache.roller.util.RegexUtil;
+import org.apache.roller.planet.util.DateUtil;
+import org.apache.roller.planet.util.RegexUtil;
import org.apache.roller.planet.util.Utilities;
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/pagers/PlanetEntriesPager.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/pagers/PlanetEntriesPager.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/pagers/PlanetEntriesPager.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/pagers/PlanetEntriesPager.java Sat Jun 28 12:18:17 2008
@@ -26,7 +26,7 @@
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.roller.planet.business.PlanetFactory;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.business.PlanetManager;
import org.apache.roller.planet.pojos.SubscriptionEntry;
import org.apache.roller.planet.pojos.PlanetGroup;
@@ -42,6 +42,7 @@
private String feedURL = null;
private PlanetGroup group = null;
+ private String locale = null;
private int sinceDays = -1;
private int length = 0;
@@ -64,6 +65,7 @@
this.feedURL = feedURL;
this.group = group;
+ this.locale = locale;
this.sinceDays = sinceDays;
this.length = length;
@@ -88,7 +90,7 @@
List results = new ArrayList();
try {
- PlanetManager planetManager = PlanetFactory.getPlanet().getPlanetManager();
+ PlanetManager planetManager = AggregatorFactory.getAggregator().getPlanetManager();
List rawEntries = null;
if (feedURL != null) {
@@ -104,16 +106,15 @@
}
// check if there are more results for paging
- if(rawEntries.size() > length) {
- more = true;
- rawEntries.remove(rawEntries.size() - 1);
- }
-
- // wrap 'em
- for (Iterator it = rawEntries.iterator(); it.hasNext();) {
- SubscriptionEntry entry = (SubscriptionEntry) it.next();
- // TODO needs pojo wrapping from planet
- results.add(entry);
+ // now we need to go through each entry and wrap
+ int count = 0;
+ for (int i = 0; i < rawEntries.size(); i++) {
+ if (count++ < length) {
+ // TODO: pojo wrapping wrapped.add(i, WeblogEntryWrapper.wrap((WeblogEntry) unwrapped.get(i), urlStrategy));
+ results.add(i, rawEntries.get(i));
+ } else {
+ more = true;
+ }
}
} catch (Exception e) {
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/FeedServlet.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/FeedServlet.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/FeedServlet.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/FeedServlet.java Sat Jun 28 12:18:17 2008
@@ -29,7 +29,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.pojos.Planet;
import org.apache.roller.planet.pojos.PlanetGroup;
import org.apache.roller.planet.pojos.StaticTemplate;
@@ -38,6 +38,8 @@
import org.apache.roller.planet.ui.rendering.RendererManager;
import org.apache.roller.planet.ui.rendering.model.ModelLoader;
import org.apache.roller.planet.ui.rendering.util.PlanetGroupFeedRequest;
+import org.apache.roller.planet.ui.rendering.util.cache.FeedCache;
+import org.apache.roller.planet.util.cache.CachedContent;
/**
@@ -46,22 +48,36 @@
public class FeedServlet extends HttpServlet {
private static Log log = LogFactory.getLog(FeedServlet.class);
-
-
+
+ // feed cache
+ private FeedCache feedCache = null;
+
+
/**
* Init method for this servlet
*/
+ @Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
log.info("Initializing FeedServlet");
+
+ // get a reference to the feed cache
+ feedCache = FeedCache.getInstance();
}
-
+
+ @Override
+ public void destroy() {
+ log.info("Destroying FeedServlet");
+ }
+
+
/**
* Handle GET requests for weblog feeds.
*/
+ @Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
@@ -73,7 +89,7 @@
PlanetGroupFeedRequest feedRequest = null;
try {
// parse the incoming request and extract the relevant data
- feedRequest = new PlanetGroupFeedRequest(request);
+ feedRequest = getParsedRequest(request);
planet = feedRequest.getPlanet();
if(planet == null) {
@@ -93,7 +109,7 @@
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
-
+
// set content type
String accepts = request.getHeader("Accept");
String userAgent = request.getHeader("User-Agent");
@@ -110,15 +126,30 @@
}
+ // see if we have this feed cached
+ String cacheKey = feedCache.generateKey(feedRequest);
+ CachedContent cachedContent = (CachedContent) feedCache.get(cacheKey);
+ if(cachedContent != null) {
+ log.debug("HIT "+cacheKey);
+
+ response.setContentLength(cachedContent.getContent().length);
+ response.getOutputStream().write(cachedContent.getContent());
+ return;
+
+ } else {
+ log.debug("MISS "+cacheKey);
+ }
+
+
// looks like we need to render content
HashMap model = new HashMap();
try {
// populate the rendering model
Map initData = new HashMap();
- initData.put("planetRequest", feedRequest);
+ initData.put("parsedRequest", feedRequest);
// Load models for feeds
- String feedModels = PlanetConfig.getProperty("rendering.feedModels");
+ String feedModels = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.feedModels");
ModelLoader.loadModels(feedModels, model, initData, true);
} catch (PlanetException ex) {
@@ -153,9 +184,14 @@
}
// render content. use default size of about 24K for a standard page
+ CachedContent rendererOutput = new CachedContent(24567);
try {
log.debug("Doing rendering");
- renderer.render(model, response.getWriter());
+ renderer.render(model, rendererOutput.getCachedWriter());
+
+ // flush rendered output and close
+ rendererOutput.flush();
+ rendererOutput.close();
} catch(Exception e) {
// bummer, error during rendering
log.error("Error during rendering for group-atom.vm", e);
@@ -170,10 +206,34 @@
// flush rendered content to response
log.debug("Flushing response output");
- //response.setContentLength(rendererOutput.getContent().length);
- //response.getOutputStream().write(rendererOutput.getContent());
+ response.setContentLength(rendererOutput.getContent().length);
+ response.getOutputStream().write(rendererOutput.getContent());
+
+ // cache rendered content.
+ log.debug("PUT "+cacheKey);
+ feedCache.put(cacheKey, rendererOutput);
log.debug("Exiting");
}
+
+
+ private PlanetGroupFeedRequest getParsedRequest(HttpServletRequest request)
+ throws Exception {
+ PlanetGroupFeedRequest parsedRequest = new PlanetGroupFeedRequest(request.getPathInfo());
+
+ java.security.Principal prince = request.getUserPrincipal();
+ if (prince != null) {
+ // TODO: this should actually just be a permission check
+ // for now just make sure the user has a local account
+ parsedRequest.setAuthenticUserName(prince.getName());
+ if(parsedRequest.getAuthenticUser() == null) {
+ // not a local user
+ parsedRequest.setAuthenticUserName(null);
+ }
+ }
+
+ return parsedRequest;
+ }
+
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/HomepageServlet.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/HomepageServlet.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/HomepageServlet.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/HomepageServlet.java Sat Jun 28 12:18:17 2008
@@ -29,15 +29,13 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.config.PlanetConfig;
-import org.apache.roller.planet.pojos.Planet;
-import org.apache.roller.planet.pojos.PlanetGroup;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.pojos.StaticTemplate;
import org.apache.roller.planet.pojos.Template;
import org.apache.roller.planet.ui.rendering.Renderer;
import org.apache.roller.planet.ui.rendering.RendererManager;
import org.apache.roller.planet.ui.rendering.model.ModelLoader;
-import org.apache.roller.planet.ui.rendering.util.PlanetGroupPageRequest;
+import org.apache.roller.planet.ui.rendering.util.HomepageRequest;
/**
@@ -51,6 +49,7 @@
/**
* Init method for this servlet
*/
+ @Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
@@ -62,11 +61,24 @@
/**
* Handle GET requests for weblog feeds.
*/
+ @Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
log.debug("Entering");
-
+
+ HomepageRequest homeRequest;
+ try {
+ // parse the incoming request and extract the relevant data
+ homeRequest = getParsedRequest(request);
+
+ } catch(Exception e) {
+ // invalid request
+ log.debug("error creating homepage request", e);
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
// set content type
response.setContentType("text/html; charset=utf-8");
@@ -77,8 +89,11 @@
// populate the rendering model
Map initData = new HashMap();
+ // parsed request
+ initData.put("parsedRequest", homeRequest);
+
// Load models for pages
- String models = PlanetConfig.getProperty("rendering.homepageModels");
+ String models = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.homepageModels");
ModelLoader.loadModels(models, model, initData, true);
} catch (PlanetException ex) {
@@ -133,5 +148,25 @@
log.debug("Exiting");
}
+
+
+ private HomepageRequest getParsedRequest(HttpServletRequest request)
+ throws Exception {
+ HomepageRequest parsedRequest = new HomepageRequest(request.getPathInfo());
+
+ java.security.Principal prince = request.getUserPrincipal();
+ if (prince != null) {
+ // TODO: this should actually just be a permission check
+ // for now just make sure the user has a local account
+ parsedRequest.setAuthenticUserName(prince.getName());
+ if(parsedRequest.getAuthenticUser() == null) {
+ // not a local user
+ parsedRequest.setAuthenticUserName(null);
+ }
+ }
+
+ return parsedRequest;
+ }
+
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/OpmlServlet.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/OpmlServlet.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/OpmlServlet.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/OpmlServlet.java Sat Jun 28 12:18:17 2008
@@ -29,7 +29,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.pojos.Planet;
import org.apache.roller.planet.pojos.PlanetGroup;
import org.apache.roller.planet.pojos.StaticTemplate;
@@ -38,6 +38,8 @@
import org.apache.roller.planet.ui.rendering.RendererManager;
import org.apache.roller.planet.ui.rendering.model.ModelLoader;
import org.apache.roller.planet.ui.rendering.util.PlanetGroupOpmlRequest;
+import org.apache.roller.planet.ui.rendering.util.cache.FeedCache;
+import org.apache.roller.planet.util.cache.CachedContent;
/**
@@ -47,21 +49,28 @@
private static Log log = LogFactory.getLog(OpmlServlet.class);
-
+ private FeedCache feedCache = null;
+
+
/**
* Init method for this servlet
*/
+ @Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
log.info("Initializing OpmlServlet");
+
+ // get a reference to the feed cache
+ feedCache = FeedCache.getInstance();
}
/**
* Handle GET requests for weblog feeds.
*/
+ @Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
@@ -73,7 +82,7 @@
PlanetGroupOpmlRequest opmlRequest = null;
try {
// parse the incoming request and extract the relevant data
- opmlRequest = new PlanetGroupOpmlRequest(request);
+ opmlRequest = getParsedRequest(request);
planet = opmlRequest.getPlanet();
if(planet == null) {
@@ -98,15 +107,30 @@
response.setContentType("application/xml; charset=utf-8");
+ // see if we have this feed cached
+ String cacheKey = feedCache.generateKey(opmlRequest);
+ CachedContent cachedContent = (CachedContent) feedCache.get(cacheKey);
+ if(cachedContent != null) {
+ log.debug("HIT "+cacheKey);
+
+ response.setContentLength(cachedContent.getContent().length);
+ response.getOutputStream().write(cachedContent.getContent());
+ return;
+
+ } else {
+ log.debug("MISS "+cacheKey);
+ }
+
+
// looks like we need to render content
HashMap model = new HashMap();
try {
// populate the rendering model
Map initData = new HashMap();
- initData.put("planetRequest", opmlRequest);
+ initData.put("parsedRequest", opmlRequest);
// Load models for feeds
- String opmlModels = PlanetConfig.getProperty("rendering.opmlModels");
+ String opmlModels = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.opmlModels");
ModelLoader.loadModels(opmlModels, model, initData, true);
} catch (PlanetException ex) {
@@ -133,9 +157,14 @@
}
// render content. use default size of about 24K for a standard page
+ CachedContent rendererOutput = new CachedContent(24567);
try {
log.debug("Doing rendering");
- renderer.render(model, response.getWriter());
+ renderer.render(model, rendererOutput.getCachedWriter());
+
+ // flush rendered output and close
+ rendererOutput.flush();
+ rendererOutput.close();
} catch(Exception e) {
// bummer, error during rendering
log.error("Error during rendering for opml.vm", e);
@@ -150,10 +179,34 @@
// flush rendered content to response
log.debug("Flushing response output");
- //response.setContentLength(rendererOutput.getContent().length);
- //response.getOutputStream().write(rendererOutput.getContent());
+ response.setContentLength(rendererOutput.getContent().length);
+ response.getOutputStream().write(rendererOutput.getContent());
+
+ // cache rendered content.
+ log.debug("PUT "+cacheKey);
+ feedCache.put(cacheKey, rendererOutput);
log.debug("Exiting");
}
+
+
+ private PlanetGroupOpmlRequest getParsedRequest(HttpServletRequest request)
+ throws Exception {
+ PlanetGroupOpmlRequest parsedRequest = new PlanetGroupOpmlRequest(request.getPathInfo());
+
+ java.security.Principal prince = request.getUserPrincipal();
+ if (prince != null) {
+ // TODO: this should actually just be a permission check
+ // for now just make sure the user has a local account
+ parsedRequest.setAuthenticUserName(prince.getName());
+ if(parsedRequest.getAuthenticUser() == null) {
+ // not a local user
+ parsedRequest.setAuthenticUserName(null);
+ }
+ }
+
+ return parsedRequest;
+ }
+
}
Modified: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/PageServlet.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/PageServlet.java?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/PageServlet.java (original)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/servlets/PageServlet.java Sat Jun 28 12:18:17 2008
@@ -29,7 +29,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.planet.PlanetException;
-import org.apache.roller.planet.config.PlanetConfig;
+import org.apache.roller.planet.business.AggregatorFactory;
import org.apache.roller.planet.pojos.Planet;
import org.apache.roller.planet.pojos.PlanetGroup;
import org.apache.roller.planet.pojos.StaticTemplate;
@@ -38,6 +38,8 @@
import org.apache.roller.planet.ui.rendering.RendererManager;
import org.apache.roller.planet.ui.rendering.model.ModelLoader;
import org.apache.roller.planet.ui.rendering.util.PlanetGroupPageRequest;
+import org.apache.roller.planet.ui.rendering.util.cache.PageCache;
+import org.apache.roller.planet.util.cache.CachedContent;
/**
@@ -47,21 +49,28 @@
private static Log log = LogFactory.getLog(PageServlet.class);
-
+ private PageCache pageCache = null;
+
+
/**
* Init method for this servlet
*/
+ @Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
log.info("Initializing PageServlet");
+
+ // get a reference to the page cache
+ pageCache = PageCache.getInstance();
}
/**
* Handle GET requests for weblog feeds.
*/
+ @Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
@@ -73,7 +82,7 @@
PlanetGroupPageRequest pageRequest = null;
try {
// parse the incoming request and extract the relevant data
- pageRequest = new PlanetGroupPageRequest(request);
+ pageRequest = getParsedRequest(request);
planet = pageRequest.getPlanet();
if(planet == null) {
@@ -94,15 +103,32 @@
response.setContentType("text/html; charset=utf-8");
+ // see if we have this page cached
+ String cacheKey = pageCache.generateKey(pageRequest);
+ if (!pageRequest.isLoggedIn()) {
+ CachedContent cachedContent = (CachedContent) pageCache.get(cacheKey);
+ if (cachedContent != null) {
+ log.debug("HIT " + cacheKey);
+
+ response.setContentLength(cachedContent.getContent().length);
+ response.getOutputStream().write(cachedContent.getContent());
+ return;
+
+ } else {
+ log.debug("MISS " + cacheKey);
+ }
+ }
+
+
// looks like we need to render content
HashMap model = new HashMap();
try {
// populate the rendering model
Map initData = new HashMap();
- initData.put("planetRequest", pageRequest);
+ initData.put("parsedRequest", pageRequest);
// Load models for pages
- String pageModels = PlanetConfig.getProperty("rendering.pageModels");
+ String pageModels = AggregatorFactory.getAggregator().getConfig().getProperty("rendering.pageModels");
ModelLoader.loadModels(pageModels, model, initData, true);
} catch (PlanetException ex) {
@@ -142,9 +168,14 @@
// render content
+ CachedContent rendererOutput = new CachedContent(24567);
try {
log.debug("Doing rendering");
- renderer.render(model, response.getWriter());
+ renderer.render(model, rendererOutput.getCachedWriter());
+
+ // flush rendered output and close
+ rendererOutput.flush();
+ rendererOutput.close();
} catch(Exception e) {
// bummer, error during rendering
log.error("Error during rendering", e);
@@ -155,14 +186,37 @@
}
- // post rendering process
-
- // flush rendered content to response
log.debug("Flushing response output");
- //response.setContentLength(rendererOutput.getContent().length);
- //response.getOutputStream().write(rendererOutput.getContent());
+ response.setContentLength(rendererOutput.getContent().length);
+ response.getOutputStream().write(rendererOutput.getContent());
+
+ // cache rendered content.
+ if(!pageRequest.isLoggedIn()) {
+ log.debug("PUT "+cacheKey);
+ pageCache.put(cacheKey, rendererOutput);
+ }
log.debug("Exiting");
}
-
+
+
+ private PlanetGroupPageRequest getParsedRequest(HttpServletRequest request)
+ throws Exception {
+
+ PlanetGroupPageRequest parsedRequest = new PlanetGroupPageRequest(request.getPathInfo(), request.getParameterMap());
+
+ java.security.Principal prince = request.getUserPrincipal();
+ if (prince != null) {
+ // TODO: this should actually just be a permission check
+ // for now just make sure the user has a local account
+ parsedRequest.setAuthenticUserName(prince.getName());
+ if(parsedRequest.getAuthenticUser() == null) {
+ // not a local user
+ parsedRequest.setAuthenticUserName(null);
+ }
+ }
+
+ return parsedRequest;
+ }
+
}
Added: roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/util/HomepageRequest.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/util/HomepageRequest.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/util/HomepageRequest.java (added)
+++ roller/planet/core/trunk/src/java/org/apache/roller/planet/ui/rendering/util/HomepageRequest.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,20 @@
+
+package org.apache.roller.planet.ui.rendering.util;
+
+/**
+ * Represents a request to the application homepage.
+ *
+ * @author ag92114
+ */
+public class HomepageRequest extends ParsedRequest {
+
+ public HomepageRequest() {
+ super();
+ }
+
+
+ public HomepageRequest(String uri) throws InvalidRequestException {
+ super(uri);
+ }
+
+}