You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@roller.apache.org by Allen Gilliland <Al...@Sun.COM> on 2005/12/01 20:46:25 UTC
Re: svn commit: r350046 - in /incubator/roller/trunk:
metadata/database/ src/org/roller/business/ src/org/roller/business/hibernate/
src/org/roller/pojos/ src/org/roller/presentation/servlets/
src/org/roller/presentation/website/actions/ src/org/roller/uti...
there is a disparity in this commit. the createdb script adds a column called defaultallowcommentdays to the website table, while the website pojo and upgrade scripts are looking for 'defaultcommentdays'.
-- Allen
On Wed, 2005-11-30 at 12:48, snoopdave@apache.org wrote:
> Author: snoopdave
> Date: Wed Nov 30 12:47:55 2005
> New Revision: 350046
>
> URL: http://svn.apache.org/viewcvs?rev=350046&view=rev
> Log:
> Done with unified blacklist, may still need way to migrate old ignore words to new blacklist
>
> Modified:
> incubator/roller/trunk/metadata/database/200-to-210-migration-raw.sql
> incubator/roller/trunk/metadata/database/createdb-raw.sql
> incubator/roller/trunk/src/org/roller/business/PropertiesManagerImpl.java
> incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java
> incubator/roller/trunk/src/org/roller/business/UserManagerImpl.java
> incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
> incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java
> incubator/roller/trunk/src/org/roller/presentation/servlets/CommentServlet.java
> incubator/roller/trunk/src/org/roller/presentation/servlets/TrackbackServlet.java
> incubator/roller/trunk/src/org/roller/presentation/website/actions/WebsiteFormAction.java
> incubator/roller/trunk/src/org/roller/util/Blacklist.java
> incubator/roller/trunk/src/org/roller/util/SpamChecker.java
> incubator/roller/trunk/tests/org/roller/business/RefererManagerTest.java
> incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties
> incubator/roller/trunk/web/WEB-INF/classes/roller.properties
> incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
> incubator/roller/trunk/web/website/edit-website.jsp
>
> Modified: incubator/roller/trunk/metadata/database/200-to-210-migration-raw.sql
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/metadata/database/200-to-210-migration-raw.sql?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/metadata/database/200-to-210-migration-raw.sql (original)
> +++ incubator/roller/trunk/metadata/database/200-to-210-migration-raw.sql Wed Nov 30 12:47:55 2005
> @@ -1,17 +1,29 @@
>
> +-- Add to roller_comment table: approved and pending fields
> +
> alter table roller_comment add column approved @BOOLEAN_SQL_TYPE_FALSE@;
> @ALTER_TABLE_ROLLER_COMMENT_APPROVED_NOT_NULL@;
> +
> alter table roller_comment add column pending @BOOLEAN_SQL_TYPE_TRUE@;
> @ALTER_TABLE_ROLLER_COMMENT_PENDING_NOT_NULL@;
> +
> update roller_comment set approved=1, pending=0, posttime=posttime;
>
> +
> +-- Add to website table: commentmod, blacklist, defaultallowcomments and defaultcommentdays
> +
> alter table website add column commentmod @BOOLEAN_SQL_TYPE_FALSE@;
> @ALTER_TABLE_WEBSITE_COMMENTMOD_NOT_NULL@;
> +
> alter table website add column defaultallowcomments @BOOLEAN_SQL_TYPE_TRUE@;
> @ALTER_TABLE_WEBSITE_DEFAULTALLOWCOMMENTS_NOT_NULL@;
> +
> alter table website add column defaultcommentdays integer;
> @ALTER_TABLE_WEBSITE_DEFAULTCOMMENTDAYS_NOT_NULL@;
> -update website set commentmod=0, defaultallowcomments=1, defaultcommentdays=0, datecreated=datecreated;
> +
> +alter table website add column blacklist @TEXT_SQL_TYPE@;
> +
> +update website set commentmod=0, defaultallowcomments=1, defaultcommentdays=0, blacklist='' datecreated=datecreated;
>
>
>
>
> Modified: incubator/roller/trunk/metadata/database/createdb-raw.sql
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/metadata/database/createdb-raw.sql?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/metadata/database/createdb-raw.sql (original)
> +++ incubator/roller/trunk/metadata/database/createdb-raw.sql Wed Nov 30 12:47:55 2005
> @@ -107,7 +107,11 @@
> defaultplugins varchar(255),
> pinnedtomain @BOOLEAN_SQL_TYPE_FALSE@ not null,
> isenabled @BOOLEAN_SQL_TYPE_TRUE@ not null,
> - datecreated timestamp not null
> + datecreated timestamp not null,
> + blacklist @TEXT_SQL_TYPE@,
> + defaultallowcomments @BOOLEAN_SQL_TYPE_TRUE@ not null,
> + defaultallowcommentdays integer default 7 not null,
> + commentmod @BOOLEAN_SQL_TYPE_FALSE@ not null
> );
> create index ws_userid_idx on website(userid);
> create index ws_isenabled_idx on website(isenabled);
> @@ -215,9 +219,13 @@
> posttime timestamp not null,
> spam @BOOLEAN_SQL_TYPE_FALSE@ not null,
> notify @BOOLEAN_SQL_TYPE_FALSE@ not null,
> - remotehost varchar(128)
> + remotehost varchar(128),
> + pending @BOOLEAN_SQL_TYPE_TRUE@ not null,
> + approved @BOOLEAN_SQL_TYPE_FALSE@ not null
> );
> create index co_entryid_idx on roller_comment( entryid );
> +create index co_pending_idx on roller_comment( pending );
> +create index co_approved_idx on roller_comment( approved );
>
> -- Ping Feature Tables
> -- name: short descriptive name of the ping target
>
> Modified: incubator/roller/trunk/src/org/roller/business/PropertiesManagerImpl.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/PropertiesManagerImpl.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/business/PropertiesManagerImpl.java (original)
> +++ incubator/roller/trunk/src/org/roller/business/PropertiesManagerImpl.java Wed Nov 30 12:47:55 2005
> @@ -187,8 +187,8 @@
> props.put("debug.memory.enabled",
> new RollerPropertyData("debug.memory.enabled", rollerConfig.getMemDebug().toString()));
> */
> - props.put("spam.referers.ignorewords",
> - new RollerPropertyData("spam.referers.ignorewords", rollerConfig.getRefererSpamWords()));
> + props.put("spam.blacklist",
> + new RollerPropertyData("spam.blacklist", rollerConfig.getRefererSpamWords()));
> }
> else
> {
>
> Modified: incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java (original)
> +++ incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java Wed Nov 30 12:47:55 2005
> @@ -218,7 +218,7 @@
> }
> else
> {
> - // If referer URL contains spamWords or ignoreWords then don't log it.
> + // If referer URL is blacklisted, don't log it
> boolean isRefererSpam = checkForSpam(refererUrl, website);
> if (isRefererSpam) return true;
> }
> @@ -356,7 +356,7 @@
>
> /**
> * Check the Referer URL against the Site-wide RefererSpamWords list
> - * and against the user's own IgnoreWords list. If the Referer contains
> + * and against the user's own blacklist list. If the Referer contains
> * any of the words from either list consider it Spam.
> *
> * @param refererUrl
> @@ -365,7 +365,7 @@
> */
> private boolean checkForSpam(String refererUrl, WebsiteData website) throws RollerException
> {
> - String spamwords = RollerRuntimeConfig.getProperty("spam.referers.ignorewords");
> + String spamwords = RollerRuntimeConfig.getProperty("spam.blacklist");
> if (spamwords == null) {
> // Oracle returns nulls instead of empty string so next line would throw NPE.
> spamwords = "";
> @@ -373,12 +373,12 @@
> LinkedList spamWords = new LinkedList(Arrays.asList(
> StringUtils.split(StringUtils.deleteWhitespace(spamwords), ",")));
>
> - if ( website.getIgnoreWords() != null )
> + if ( website.getBlacklist() != null )
> {
> spamWords.addAll(
> Arrays.asList(StringUtils.split(
> StringUtils.deleteWhitespace(
> - website.getIgnoreWords()),",")));
> + website.getBlacklist()),",")));
> }
> for( Iterator i = spamWords.iterator(); i.hasNext(); )
> {
>
> Modified: incubator/roller/trunk/src/org/roller/business/UserManagerImpl.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/UserManagerImpl.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/business/UserManagerImpl.java (original)
> +++ incubator/roller/trunk/src/org/roller/business/UserManagerImpl.java Wed Nov 30 12:47:55 2005
> @@ -249,7 +249,7 @@
> null, // bloggerCategory
> null, // defaultCategory
> "editor-text.jsp", // editorPage
> - "", // ignoreWords
> + "", // blacklist
> Boolean.TRUE, // allowComments
> Boolean.FALSE, // emailComments
> "", // emailFromAddress
>
> Modified: incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java (original)
> +++ incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java Wed Nov 30 12:47:55 2005
> @@ -61,13 +61,13 @@
> Session session = ((HibernateStrategy)mStrategy).getSession();
> Criteria criteria = session.createCriteria(RefererData.class);
>
> - String spamwords = RollerRuntimeConfig.getProperty("spam.referers.ignorewords");
> + String spamwords = RollerRuntimeConfig.getProperty("spam.blacklist");
>
> - String[] ignoreWords = StringUtils.split(
> + String[] blacklist = StringUtils.split(
> StringUtils.deleteWhitespace(spamwords),",");
> Junction or = Expression.disjunction();
> - for (int i=0; i<ignoreWords.length; i++) {
> - String ignoreWord = ignoreWords[i].trim();
> + for (int i=0; i<blacklist.length; i++) {
> + String ignoreWord = blacklist[i].trim();
> or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
> }
> criteria.add(Expression.conjunction()
> @@ -90,19 +90,19 @@
> */
> public void applyRefererFilters(WebsiteData website) throws RollerException {
> if (null == website) throw new RollerException("website is null");
> - if (null == website.getIgnoreWords()) return;
> + if (null == website.getBlacklist()) return;
>
> try {
> Session session = ((HibernateStrategy)mStrategy).getSession();
> Criteria criteria = session.createCriteria(RefererData.class);
>
> - String[] ignoreWords = StringUtils.split(
> - StringUtils.deleteWhitespace(website.getIgnoreWords()),",");
> - if (ignoreWords.length == 0) return;
> + String[] blacklist = StringUtils.split(
> + StringUtils.deleteWhitespace(website.getBlacklist()),",");
> + if (blacklist.length == 0) return;
>
> Junction or = Expression.disjunction();
> - for (int i=0; i<ignoreWords.length; i++) {
> - String ignoreWord = ignoreWords[i].trim();
> + for (int i=0; i<blacklist.length; i++) {
> + String ignoreWord = blacklist[i].trim();
> or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
> }
> criteria.add(Expression.conjunction()
>
> Modified: incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java (original)
> +++ incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java Wed Nov 30 12:47:55 2005
> @@ -7,7 +7,9 @@
> import java.util.List;
> import java.util.Locale;
> import java.util.Map;
> +import java.util.StringTokenizer;
> import java.util.TimeZone;
> +import java.util.regex.Pattern;
> import org.apache.commons.lang.StringUtils;
> import org.roller.RollerException;
> import org.roller.model.Roller;
> @@ -48,7 +50,7 @@
> private String weblogDayPageId = null;
> private Boolean enableBloggerApi = Boolean.TRUE;
> private String editorPage = null;
> - private String ignoreWords = null;
> + private String blacklist = null;
> private Boolean allowComments = Boolean.TRUE;
> private Boolean emailComments = Boolean.FALSE;
> private String emailFromAddress = null;
> @@ -85,7 +87,7 @@
> final WeblogCategoryData bloggerCategory,
> final WeblogCategoryData defaultCategory,
> final String editorPage,
> - final String ignoreWords,
> + final String blacklist,
> final Boolean allowComments,
> final Boolean emailComments,
> final String emailFromAddress,
> @@ -108,7 +110,7 @@
> this.bloggerCategory = bloggerCategory;
> this.defaultCategory = defaultCategory;
> this.editorPage = editorPage;
> - this.ignoreWords = ignoreWords;
> + this.blacklist = blacklist;
> this.allowComments = allowComments;
> this.emailComments = emailComments;
> this.emailFromAddress = emailFromAddress;
> @@ -554,17 +556,17 @@
> /**
> * @roller.wrapPojoMethod type="simple"
> * @ejb:persistent-field
> - * @hibernate.property column="ignorewords" non-null="true" unique="false"
> + * @hibernate.property column="blacklist" non-null="true" unique="false"
> */
> - public String getIgnoreWords()
> + public String getBlacklist()
> {
> - return this.ignoreWords;
> + return this.blacklist;
> }
>
> /** @ejb:persistent-field */
> - public void setIgnoreWords(String ignoreWords)
> + public void setBlacklist(String blacklist)
> {
> - this.ignoreWords = ignoreWords;
> + this.blacklist = blacklist;
> }
>
> /**
> @@ -801,7 +803,7 @@
> "bloggerCategory=" + bloggerCategory + " " +
> "defaultCategory=" + defaultCategory + " " +
> "editorPage=" + editorPage + " " +
> - "ignoreWords=" + ignoreWords + " " +
> + "blacklist=" + blacklist + " " +
> "allowComments=" + allowComments + " " +
> "emailAddress=" + emailAddress + " " +
> "emailComments=" + emailComments + " " +
> @@ -831,7 +833,7 @@
> lEquals = PojoUtil.equals(lEquals, this.getBloggerCategory(), lTest.getBloggerCategory());
> lEquals = PojoUtil.equals(lEquals, this.getDefaultCategory(), lTest.getDefaultCategory());
> lEquals = PojoUtil.equals(lEquals, this.getEditorPage(), lTest.getEditorPage());
> - lEquals = PojoUtil.equals(lEquals, this.getIgnoreWords(), lTest.getIgnoreWords());
> + lEquals = PojoUtil.equals(lEquals, this.getBlacklist(), lTest.getBlacklist());
> lEquals = PojoUtil.equals(lEquals, this.getAllowComments(), lTest.getAllowComments());
> lEquals = PojoUtil.equals(lEquals, this.getEmailComments(), lTest.getEmailComments());
> lEquals = PojoUtil.equals(lEquals, this.getEmailAddress(), lTest.getEmailAddress());
> @@ -848,59 +850,6 @@
> }
> }
>
> - /*public boolean equals(Object pOther)
> - {
> - if (pOther instanceof WebsiteData)
> - {
> - WebsiteData lTest = (WebsiteData) pOther;
> - boolean lEquals = true;
> -
> - lEquals = PojoUtil.equals(lEquals, this.id, lTest.id);
> -
> - lEquals = PojoUtil.equals(lEquals, this.name, lTest.name);
> -
> - lEquals = PojoUtil.equals(lEquals, this.description, lTest.description);
> -
> - lEquals = PojoUtil.equals(lEquals, this.mUser, lTest.mUser);
> -
> - lEquals = PojoUtil.equals(lEquals, this.defaultPageId, lTest.defaultPageId);
> -
> - lEquals = PojoUtil.equals(lEquals, this.weblogDayPageId, lTest.weblogDayPageId);
> -
> - lEquals = PojoUtil.equals(lEquals, this.enableBloggerApi, lTest.enableBloggerApi);
> -
> - lEquals = PojoUtil.equals(lEquals, this.bloggerCategory.getId(), lTest.bloggerCategory.getId());
> -
> - lEquals = PojoUtil.equals(lEquals, this.defaultCategory.getId(), lTest.defaultCategory.getId());
> -
> - lEquals = PojoUtil.equals(lEquals, this.editorPage, lTest.editorPage);
> -
> - lEquals = PojoUtil.equals(lEquals, this.ignoreWords, lTest.ignoreWords);
> -
> - lEquals = PojoUtil.equals(lEquals, this.allowComments, lTest.allowComments);
> -
> - lEquals = PojoUtil.equals(lEquals, this.emailComments, lTest.emailComments);
> -
> - lEquals = PojoUtil.equals(lEquals, this.emailAddress, lTest.emailAddress);
> -
> - lEquals = PojoUtil.equals(lEquals, this.emailFromAddress, lTest.emailFromAddress);
> -
> - lEquals = PojoUtil.equals(lEquals, this.editorTheme, lTest.editorTheme);
> -
> - lEquals = PojoUtil.equals(lEquals, this.locale, lTest.locale);
> -
> - lEquals = PojoUtil.equals(lEquals, this.timeZone, lTest.timeZone);
> -
> - lEquals = PojoUtil.equals(lEquals, this.mDefaultPlugins, lTest.mDefaultPlugins);
> -
> - return lEquals;
> - }
> - else
> - {
> - return false;
> - }
> - }*/
> -
> public int hashCode()
> {
> int result = 17;
> @@ -914,7 +863,7 @@
> //result = PojoUtil.addHashCode(result, this.bloggerCategory);
> //result = PojoUtil.addHashCode(result, this.defaultCategory);
> result = PojoUtil.addHashCode(result, this.editorPage);
> - result = PojoUtil.addHashCode(result, this.ignoreWords);
> + result = PojoUtil.addHashCode(result, this.blacklist);
> result = PojoUtil.addHashCode(result, this.allowComments);
> result = PojoUtil.addHashCode(result, this.emailComments);
> result = PojoUtil.addHashCode(result, this.emailAddress);
> @@ -945,7 +894,7 @@
> this.bloggerCategory = other.getBloggerCategory();
> this.defaultCategory = other.getDefaultCategory();
> this.editorPage = other.getEditorPage();
> - this.ignoreWords = other.getIgnoreWords();
> + this.blacklist = other.getBlacklist();
> this.allowComments = other.getAllowComments();
> this.emailComments = other.getEmailComments();
> this.emailAddress = other.getEmailAddress();
> @@ -1104,7 +1053,6 @@
> {
> // no-op
> }
> -
> -
> +
> }
>
>
> Modified: incubator/roller/trunk/src/org/roller/presentation/servlets/CommentServlet.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/servlets/CommentServlet.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/presentation/servlets/CommentServlet.java (original)
> +++ incubator/roller/trunk/src/org/roller/presentation/servlets/CommentServlet.java Wed Nov 30 12:47:55 2005
> @@ -88,7 +88,9 @@
> * Here we handle incoming comment postings. We will collect the data,
> * validate it, and save it.
> */
> - public void doPost(HttpServletRequest request, HttpServletResponse response)
> + public void doPost(
> + HttpServletRequest request,
> + HttpServletResponse response)
> throws IOException, ServletException {
>
> boolean preview = false;
> @@ -146,7 +148,13 @@
>
> if (preview) {
> message = "This is a comment preview only";
> - error = bundle.getString("commentServlet.previewMarkedAsSpam");
> +
> + // If comment contains blacklisted text, warn commenter
> + SpamChecker checker = new SpamChecker();
> + if (checker.checkComment(comment)) {
> + error = bundle.getString("commentServlet.previewMarkedAsSpam");
> + mLogger.debug("Comment marked as spam");
> + }
> request.setAttribute("previewComments", "dummy");
> mLogger.debug("Comment is a preview");
>
> @@ -159,6 +167,7 @@
> // If comment contains blacklisted text, mark as spam
> SpamChecker checker = new SpamChecker();
> if (checker.checkComment(comment)) {
> + comment.setSpam(Boolean.TRUE);
> error = bundle.getString("commentServlet.commentMarkedAsSpam");
> mLogger.debug("Comment marked as spam");
> }
> @@ -177,8 +186,7 @@
> RollerFactory.getRoller().commit();
> reindexEntry(entry);
>
> - // Refresh user's entries in page cache
> - //PageCacheFilter.removeFromCache(request, website);
> + // Clear all caches associated with comment
> CacheManager.invalidate(comment);
>
> // Send email notifications
> @@ -202,9 +210,8 @@
> if (message != null)
> session.setAttribute(RollerSession.STATUS_MESSAGE, message);
>
> - if(error == null && message == null && !preview) {
> - entry_permalink = request.getContextPath()+entry_permalink;
> -
> + if(error == null && !preview) {
> + entry_permalink = request.getContextPath()+entry_permalink;
> mLogger.debug("comment complete, redirecting to "+entry_permalink);
> response.sendRedirect(entry_permalink);
> } else {
>
> Modified: incubator/roller/trunk/src/org/roller/presentation/servlets/TrackbackServlet.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/servlets/TrackbackServlet.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/presentation/servlets/TrackbackServlet.java (original)
> +++ incubator/roller/trunk/src/org/roller/presentation/servlets/TrackbackServlet.java Wed Nov 30 12:47:55 2005
> @@ -149,6 +149,7 @@
> // If comment contains blacklisted text, mark as spam
> SpamChecker checker = new SpamChecker();
> if (checker.checkTrackback(comment)) {
> + comment.setSpam(Boolean.TRUE);
> logger.debug("Trackback marked as spam");
> }
>
> @@ -165,8 +166,7 @@
> comment.save();
> RollerFactory.getRoller().commit();
>
> - // Refresh user's entries in page cache
> - // PageCacheFilter.removeFromCache(req, entry.getWebsite());
> + // Clear all caches associated with comment
> CacheManager.invalidate(comment);
>
> // Send email notifications
>
> Modified: incubator/roller/trunk/src/org/roller/presentation/website/actions/WebsiteFormAction.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/WebsiteFormAction.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/presentation/website/actions/WebsiteFormAction.java (original)
> +++ incubator/roller/trunk/src/org/roller/presentation/website/actions/WebsiteFormAction.java Wed Nov 30 12:47:55 2005
> @@ -42,106 +42,96 @@
> import org.roller.presentation.RollerSession;
> import org.roller.presentation.cache.CacheManager;
> import org.roller.presentation.website.formbeans.WebsiteFormEx;
> +import org.roller.util.SpamChecker;
>
>
> /////////////////////////////////////////////////////////////////////////////
> /**
> * Website Settings action.
> - *
> - * @struts.action name="websiteFormEx" path="/editor/website"
> + *
> + * @struts.action name="websiteFormEx" path="/editor/website"
> * scope="session" parameter="method"
> - *
> - * @struts.action-forward name="editWebsite.page" path=".edit-website"
> - * @struts.action-forward name="removeWebsite.page" path=".WebsiteRemove"
> + *
> + * @struts.action-forward name="editWebsite.page" path=".edit-website"
> + * @struts.action-forward name="removeWebsite.page" path=".WebsiteRemove"
> */
> -public final class WebsiteFormAction extends DispatchAction
> -{
> - private static Log mLogger =
> - LogFactory.getFactory().getInstance(WebsiteFormAction.class);
> -
> +public final class WebsiteFormAction extends DispatchAction {
> + private static Log mLogger =
> + LogFactory.getFactory().getInstance(WebsiteFormAction.class);
> +
> public ActionForward add(
> - ActionMapping mapping,
> - ActionForm actionForm,
> - HttpServletRequest request,
> - HttpServletResponse response)
> - throws Exception
> - {
> + ActionMapping mapping,
> + ActionForm actionForm,
> + HttpServletRequest request,
> + HttpServletResponse response)
> + throws Exception {
> return update( mapping, actionForm, request, response );
> }
> -
> +
> //-----------------------------------------------------------------------
> public ActionForward edit(
> - ActionMapping mapping,
> - ActionForm actionForm,
> - HttpServletRequest request,
> - HttpServletResponse response)
> - throws IOException, ServletException
> - {
> + ActionMapping mapping,
> + ActionForm actionForm,
> + HttpServletRequest request,
> + HttpServletResponse response)
> + throws IOException, ServletException {
> ActionForward forward = mapping.findForward("editWebsite.page");
> - try
> - {
> + try {
> RollerRequest rreq = RollerRequest.getRollerRequest(request);
> WebsiteData website = rreq.getWebsite();
> RollerSession rses = RollerSession.getRollerSession(request);
> - if (rses.isUserAuthorizedToAdmin(website))
> - {
> + if (rses.isUserAuthorizedToAdmin(website)) {
> Roller roller = RollerFactory.getRoller();
> UserManager umgr = roller.getUserManager();
> WeblogManager wmgr = roller.getWeblogManager();
> UserData ud = rses.getAuthenticatedUser();
> request.setAttribute("user",ud);
> -
> +
> WebsiteFormEx wf = (WebsiteFormEx)actionForm;
> wf.copyFrom(website, request.getLocale());
> -
> +
> List cd = wmgr.getWeblogCategories(website, true);
> request.setAttribute("categories",cd);
> -
> +
> List bcd = wmgr.getWeblogCategories(website, true);
> request.setAttribute("bloggerCategories",bcd);
> -
> +
> List pages = umgr.getPages(website);
> request.setAttribute("pages",pages);
> -
> +
> ServletContext ctx = request.getSession().getServletContext();
> - String editorPages =
> + String editorPages =
> RollerRuntimeConfig.getProperty("users.editor.pages");
>
> List epages = Arrays.asList(StringUtils.split(
> StringUtils.deleteWhitespace(editorPages), ","));
> request.setAttribute("editorPagesList", epages);
>
> -
> +
> WebsitePageModel pageModel = new WebsitePageModel(
> - "websiteSettings.title", request, response, mapping, website);
> - request.setAttribute("model",pageModel);
> - }
> - else
> - {
> + "websiteSettings.title", request, response, mapping, website);
> + request.setAttribute("model",pageModel);
> + } else {
> forward = mapping.findForward("access-denied");
> }
> - }
> - catch (Exception e)
> - {
> + } catch (Exception e) {
> throw new ServletException(e);
> }
> return forward;
> }
> -
> -
> +
> +
> //-----------------------------------------------------------------------
> public ActionForward update(
> - ActionMapping mapping,
> - ActionForm actionForm,
> - HttpServletRequest request,
> - HttpServletResponse response)
> - throws Exception
> - {
> + ActionMapping mapping,
> + ActionForm actionForm,
> + HttpServletRequest request,
> + HttpServletResponse response)
> + throws Exception {
> ActionErrors errors = new ActionErrors();
> - ActionMessages messages = new ActionMessages();
> + ActionMessages messages = new ActionMessages();
> ActionForward forward = mapping.findForward("editWebsite");
> - try
> - {
> + try {
> WebsiteFormEx form = (WebsiteFormEx)actionForm;
> WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
> UserManager umgr = RollerFactory.getRoller().getUserManager();
> @@ -152,184 +142,162 @@
> RollerRequest.getRollerRequest(request).setWebsite(wd);
>
> RollerSession rollerSession = RollerSession.getRollerSession(request);
> - if ( rollerSession.isUserAuthorizedToAdmin(wd))
> - {
> -
> - /* we don't need this check any longer -- Allen G
> - if(!form.getDefaultPageId().equals(form.getWeblogDayPageId()))
> - {
> - */
> - wd.save(); // should throw if save not permitted
> -
> + if ( rollerSession.isUserAuthorizedToAdmin(wd)) {
> + checkBlacklist(errors, messages, form.getBlacklist());
> + if (errors.isEmpty()) {
> // ensure getEnabled can't be changed
> form.setEnabled(wd.getEnabled());
> form.copyTo(wd, request.getLocale());
> -
> +
> wd.save();
> - RollerFactory.getRoller().getRefererManager().applyRefererFilters(wd);
> + RollerFactory.getRoller().getRefererManager().applyRefererFilters(wd);
> RollerFactory.getRoller().commit();
> -
> - messages.add(null,
> - new ActionMessage("websiteSettings.savedChanges"));
> -
> +
> + messages.add(null,
> + new ActionMessage("websiteSettings.savedChanges"));
> +
> request.getSession().setAttribute(
> - RollerRequest.WEBSITEID_KEY, form.getId());
> -
> - // clear the page cache for this user
> - //PageCacheFilter.removeFromCache(request, wd);
> + RollerRequest.WEBSITEID_KEY, form.getId());
> +
> + // Clear cache entries associated with website
> CacheManager.invalidate(wd);
> -
> - // set the Editor Page list
> - ServletContext ctx = request.getSession().getServletContext();
> - String editorPages =
> +
> + actionForm.reset(mapping,request);
> + }
> +
> + // set the Editor Page list
> + ServletContext ctx = request.getSession().getServletContext();
> + String editorPages =
> RollerRuntimeConfig.getProperty("users.editor.pages");
>
> - List epages = Arrays.asList(StringUtils.split(
> + List epages = Arrays.asList(StringUtils.split(
> org.apache.commons.lang.StringUtils.deleteWhitespace(editorPages), ","));
> - request.setAttribute("editorPagesList", epages);
> -
> - WebsitePageModel pageModel =
> - new WebsitePageModel("websiteSettings.title",
> - request, response, mapping, wd);
> - request.setAttribute("model",pageModel);
> - /*
> - }
> - else
> - {
> - errors.add(null,
> - new ActionError("websiteSettings.error.sameTemplate"));
> - saveErrors(request, errors);
> - }
> - */
> - }
> - else
> - {
> + request.setAttribute("editorPagesList", epages);
> +
> + WebsitePageModel pageModel =
> + new WebsitePageModel("websiteSettings.title",
> + request, response, mapping, wd);
> + request.setAttribute("model",pageModel);
> +
> + } else {
> forward = mapping.findForward("access-denied");
> }
> -
> - actionForm.reset(mapping,request);
> - }
> - catch (RollerPermissionsException e)
> - {
> +
> + } catch (RollerPermissionsException e) {
> errors.add(null, new ActionError("error.permissions.deniedSave"));
> forward = mapping.findForward("access-denied");
> - }
> - catch (RollerException re)
> - {
> + } catch (RollerException re) {
> mLogger.error("Unexpected exception",re.getRootCause());
> throw new ServletException(re);
> - }
> - catch (Exception e)
> - {
> + } catch (Exception e) {
> mLogger.error("Unexpected exception",e);
> throw new ServletException(e);
> }
> if (errors.size() > 0) saveErrors(request, errors);
> - if (messages.size() > 0) saveMessages(request, messages);
> + if (messages.size() > 0) saveMessages(request, messages);
> return forward;
> }
>
> + /** Count string and regex ignore words, check regex for Syntax errors */
> + private void checkBlacklist(
> + ActionErrors errors, ActionMessages messages, String blacklist) {
> + List regexRules = new ArrayList();
> + List stringRules = new ArrayList();
> + try {
> + // just for testing/counting, this does not persist rules in any way
> + SpamChecker.populateSpamRules(blacklist, stringRules, regexRules, null);
> + messages.add(null, new ActionMessage(
> + "websiteSettings.acceptedBlacklist",
> + new Integer(stringRules.size()), new Integer(regexRules.size())));
> + } catch (Throwable e) {
> + errors.add(null, new ActionMessage(
> + "websiteSettings.error.processingBlacklist", e.getMessage()));
> + }
> + }
> +
> //-----------------------------------------------------------------------
> /** Send user to remove confirmation page */
> public ActionForward removeOk(
> - ActionMapping mapping,
> - ActionForm actionForm,
> - HttpServletRequest request,
> - HttpServletResponse response)
> - throws Exception
> - {
> + ActionMapping mapping,
> + ActionForm actionForm,
> + HttpServletRequest request,
> + HttpServletResponse response)
> + throws Exception {
> WebsiteFormEx form = (WebsiteFormEx)actionForm;
> UserManager umgr = RollerFactory.getRoller().getUserManager();
> WebsiteData website = umgr.retrieveWebsite(form.getId());
> ActionForward forward = mapping.findForward("removeWebsite.page");
> request.setAttribute("model", new WebsitePageModel(
> - "websiteRemove.title", request, response, mapping, website));
> - try
> - {
> - RollerSession rses = RollerSession.getRollerSession(request);
> - if (rses.isUserAuthorizedToAdmin(website))
> - {
> - form.copyFrom(website, request.getLocale());
> + "websiteRemove.title", request, response, mapping, website));
> + try {
> + RollerSession rses = RollerSession.getRollerSession(request);
> + if (rses.isUserAuthorizedToAdmin(website)) {
> + form.copyFrom(website, request.getLocale());
> request.setAttribute("website", website);
> - }
> - else
> - {
> + } else {
> forward = mapping.findForward("access-denied");
> }
> - }
> - catch (Exception e)
> - {
> + } catch (Exception e) {
> mLogger.error("ERROR in action",e);
> throw new ServletException(e);
> }
> return forward;
> }
> -
> +
> //-----------------------------------------------------------------------
> public ActionForward remove(
> - ActionMapping mapping,
> - ActionForm actionForm,
> - HttpServletRequest request,
> - HttpServletResponse response)
> - throws Exception
> - {
> + ActionMapping mapping,
> + ActionForm actionForm,
> + HttpServletRequest request,
> + HttpServletResponse response)
> + throws Exception {
> ActionForward forward = mapping.findForward("yourWebsites");
> - try
> - {
> + try {
> UserManager umgr = RollerFactory.getRoller().getUserManager();
> WebsiteFormEx form = (WebsiteFormEx)actionForm;
> WebsiteData website = umgr.retrieveWebsite(form.getId());
>
> - RollerSession rses = RollerSession.getRollerSession(request);
> - if ( rses.isUserAuthorizedToAdmin(website) )
> - {
> + RollerSession rses = RollerSession.getRollerSession(request);
> + if ( rses.isUserAuthorizedToAdmin(website) ) {
> website.remove();
> RollerFactory.getRoller().commit();
> -
> +
> //PageCacheFilter.removeFromCache(request, website);
> CacheManager.invalidate(website);
>
> actionForm.reset(mapping, request);
> - }
> - else
> - {
> + } else {
> forward = mapping.findForward("access-denied");
> }
> - }
> - catch (RollerException e)
> - {
> + } catch (RollerException e) {
> ActionErrors errors = new ActionErrors();
> errors.add(null, new ActionError(
> "error.internationalized",e.getRootCauseMessage()));
> - saveErrors(request, errors);
> - }
> - catch (Exception e)
> - {
> + saveErrors(request, errors);
> + } catch (Exception e) {
> mLogger.error("ERROR in action",e);
> throw new ServletException(e);
> }
> return forward;
> }
> -
> - public class WebsitePageModel extends BasePageModel
> - {
> +
> + public class WebsitePageModel extends BasePageModel {
> private List permissions = new ArrayList();
> private boolean groupBloggingEnabled = false;
> public WebsitePageModel(
> String titleKey,
> HttpServletRequest request,
> HttpServletResponse response,
> - ActionMapping mapping,
> - WebsiteData website) throws RollerException
> - {
> + ActionMapping mapping,
> + WebsiteData website) throws RollerException {
> super(titleKey, request, response, mapping);
> this.website = website;
> Roller roller = RollerFactory.getRoller();
> RollerSession rollerSession = RollerSession.getRollerSession(request);
> UserData user = rollerSession.getAuthenticatedUser();
> permissions = roller.getUserManager().getAllPermissions(website);
> - groupBloggingEnabled =
> - RollerConfig.getBooleanProperty("groupblogging.enabled");
> + groupBloggingEnabled =
> + RollerConfig.getBooleanProperty("groupblogging.enabled");
> }
> public boolean isGroupBloggingEnabled() {
> return groupBloggingEnabled;
> @@ -337,9 +305,8 @@
> public void setGroupBloggingEnabled(boolean groupBloggingEnabled) {
> this.groupBloggingEnabled = groupBloggingEnabled;
> }
> -
> - public boolean getHasPagePlugins()
> - {
> +
> + public boolean getHasPagePlugins() {
> boolean ret = false;
> try {
> Roller roller = RollerFactory.getRoller();
> @@ -350,20 +317,18 @@
> }
> return ret;
> }
> -
> - public List getPagePlugins()
> - {
> +
> + public List getPagePlugins() {
> List list = new ArrayList();
> try {
> - if (getHasPagePlugins())
> - {
> + if (getHasPagePlugins()) {
> Roller roller = RollerFactory.getRoller();
> PagePluginManager ppmgr = roller.getPagePluginManager();
> Map plugins = ppmgr.createAndInitPagePlugins(
> - getWebsite(),
> - RollerContext.getRollerContext(request).getServletContext(),
> - RollerContext.getRollerContext(request).getAbsoluteContextUrl(),
> - new VelocityContext());
> + getWebsite(),
> + RollerContext.getRollerContext(request).getServletContext(),
> + RollerContext.getRollerContext(request).getAbsoluteContextUrl(),
> + new VelocityContext());
> Iterator it = plugins.values().iterator();
> while (it.hasNext()) list.add(it.next());
> }
>
> Modified: incubator/roller/trunk/src/org/roller/util/Blacklist.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/util/Blacklist.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/util/Blacklist.java (original)
> +++ incubator/roller/trunk/src/org/roller/util/Blacklist.java Wed Nov 30 12:47:55 2005
> @@ -297,8 +297,8 @@
> List stringRules = blacklistStr;
> if (moreStringRules != null && moreStringRules.size() > 0) {
> stringRules = new ArrayList();
> - stringRules.addAll(blacklistStr);
> stringRules.addAll(moreStringRules);
> + stringRules.addAll(blacklistStr);
> }
> if (testStringRules(str, stringRules)) return true;
>
> @@ -306,19 +306,19 @@
> List regexRules = blacklistRegex;
> if (moreRegexRules != null && moreRegexRules.size() > 0) {
> regexRules = new ArrayList();
> - regexRules.addAll(blacklistRegex);
> regexRules.addAll(moreRegexRules);
> + regexRules.addAll(blacklistRegex);
> }
> return testRegExRules(str, regexRules);
> }
>
> /**
> - * Test string only against rules provided by caller.
> + * Test string only against rules provided by caller, NOT against built-in blacklist.
> * @param str String to be checked against rules
> * @param moreStringRules String rules to consider
> * @param moreRegexRules Regex rules to consider
> */
> - public static boolean matches(
> + public static boolean matchesRulesOnly(
> String str, List stringRules, List regexRules) {
> if (testStringRules(str, stringRules)) return true;
> return testRegExRules(str, regexRules);
> @@ -338,13 +338,11 @@
> if (matcher.find()) {
> mLogger.debug(matcher.group()
> + " matched by " + testPattern.pattern());
> - hit = true;
> - break;
> + return true;
> }
> } else {
> if (testPattern.matcher(str).find()) {
> - hit = true;
> - break;
> + return true;
> }
> }
> }
> @@ -363,8 +361,7 @@
> if (mLogger.isDebugEnabled()) {
> mLogger.debug("matched:" + test + ":");
> }
> - hit = true;
> - break;
> + return true;
> }
> }
> return hit;
>
> Modified: incubator/roller/trunk/src/org/roller/util/SpamChecker.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/util/SpamChecker.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/src/org/roller/util/SpamChecker.java (original)
> +++ incubator/roller/trunk/src/org/roller/util/SpamChecker.java Wed Nov 30 12:47:55 2005
> @@ -10,6 +10,7 @@
> import org.roller.config.RollerRuntimeConfig;
> import org.roller.pojos.CommentData;
> import org.roller.pojos.RefererData;
> +import org.roller.pojos.WebsiteData;
>
> /**
> * Checks comment, trackbacks and referrers for spam.
> @@ -35,67 +36,56 @@
> }
> return false;
> }
> -
> - /** Test comment against built in blacklist + ignoreWords */
> +
> + /** Test comment against built blacklist only */
> + public boolean checkReferrer(RefererData referrer) {
> + boolean ret = false;
> + List stringRules = new ArrayList();
> + List regexRules = new ArrayList();
> + WebsiteData website = referrer.getWebsite();
> + populateSpamRules(
> + website.getBlacklist(), stringRules, regexRules,
> + RollerRuntimeConfig.getProperty("spam.blacklist"));
> + // the blacklist.matches() (doesn't use the built-in blacklist)
> + if (Blacklist.matchesRulesOnly(referrer.getRefererUrl(), stringRules, regexRules)) {
> + ret = true;
> + }
> + return ret;
> + }
> +
> + /** Test comment against built in blacklist + blacklist */
> private boolean testComment(CommentData c) {
> boolean ret = false;
> -
> - String weblogWords = c.getWeblogEntry().getWebsite().getIgnoreWords();
> - weblogWords = (weblogWords == null) ? "" : weblogWords;
> - String siteWords =
> - RollerRuntimeConfig.getProperty("spam.referers.ignorewords");
> - siteWords = (siteWords == null) ? "" : siteWords;
> -
> List stringRules = new ArrayList();
> List regexRules = new ArrayList();
> - StringTokenizer toker = new StringTokenizer(siteWords + weblogWords,"\n");
> - while (toker.hasMoreTokens()) {
> - String token = toker.nextToken();
> - if (token.startsWith("#")) continue;
> - if (token.startsWith("(")) {
> - regexRules.add(Pattern.compile(token));
> - } else {
> - stringRules.add(token);
> - }
> - }
> + WebsiteData website = c.getWeblogEntry().getWebsite();
> + populateSpamRules(
> + website.getBlacklist(), stringRules, regexRules,
> + RollerRuntimeConfig.getProperty("spam.blacklist"));
> if ( blacklist.isBlacklisted(c.getUrl(), stringRules, regexRules)
> || blacklist.isBlacklisted(c.getEmail(), stringRules, regexRules)
> + || blacklist.isBlacklisted(c.getName(), stringRules, regexRules)
> || blacklist.isBlacklisted(c.getContent(), stringRules, regexRules)) {
> - c.setSpam(Boolean.TRUE);
> ret = true;
> }
> return ret;
> }
>
> - /** Test comment against built ignoreWords only */
> - public boolean testReferrer(RefererData referrer) {
> - boolean ret = false;
> -
> - String weblogWords = referrer.getWebsite().getIgnoreWords();
> + public static void populateSpamRules(
> + String blacklist, List stringRules, List regexRules, String addendum) {
> + String weblogWords = blacklist;
> weblogWords = (weblogWords == null) ? "" : weblogWords;
> - String siteWords =
> - RollerRuntimeConfig.getProperty("spam.referers.ignorewords");
> - siteWords = (siteWords == null) ? "" : siteWords;
> -
> - List stringRules = new ArrayList();
> - List regexRules = new ArrayList();
> - StringTokenizer toker =
> - new StringTokenizer(siteWords + weblogWords,"\n");
> + String siteWords = (addendum != null) ? addendum : "";
> + StringTokenizer toker = new StringTokenizer(siteWords + weblogWords,"\n");
> while (toker.hasMoreTokens()) {
> - String token = toker.nextToken();
> + String token = toker.nextToken().trim();
> if (token.startsWith("#")) continue;
> if (token.startsWith("(")) {
> - regexRules.add(token);
> + regexRules.add(Pattern.compile(token));
> } else {
> stringRules.add(token);
> }
> - }
> - // the blacklist.matches() doesn't use the built-in blacklist
> - if (Blacklist.matches(
> - referrer.getRefererUrl(), stringRules, regexRules)) {
> - ret = true;
> - }
> - return ret;
> + }
> }
> }
>
>
> Modified: incubator/roller/trunk/tests/org/roller/business/RefererManagerTest.java
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/tests/org/roller/business/RefererManagerTest.java?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/tests/org/roller/business/RefererManagerTest.java (original)
> +++ incubator/roller/trunk/tests/org/roller/business/RefererManagerTest.java Wed Nov 30 12:47:55 2005
> @@ -1 +1 @@
> -package org.roller.business; import java.sql.Timestamp;import java.util.Calendar;import java.util.Date;import java.util.List;import junit.framework.Test;import junit.framework.TestSuite; import org.roller.RollerException;import org.roller.model.PropertiesManager;import org.roller.model.RefererManager;import org.roller.model.Roller;import org.roller.pojos.RefererData;import org.roller.pojos.RollerPropertyData;import org.roller.pojos.UserData;import org.roller.pojos.WeblogEntryData;import org.roller.pojos.WebsiteData;import org.roller.util.DateUtil;import org.roller.RollerTestBase;/** * Test Roller Referer Management. */public class RefererManagerTest extends RollerTestBase { RefererManager rmgr; //List refs; int count = 20; String testDay; String origSpamWords; //------------------------------------------------------------------------ public RefererManagerTest(String name) { super(name); } //-------!
> ----------------------------------------------------------------- public static void main(String args[]) { junit.textui.TestRunner.run(RefererManagerTest.class); } //------------------------------------------------------------------------ public static Test suite() { return new TestSuite(RefererManagerTest.class); } protected void setUp() throws Exception { super.setUp(); // add "spamtest" to refererSpamWords Roller mRoller = getRoller(); PropertiesManager pmgr = mRoller.getPropertiesManager(); RollerPropertyData spamprop = pmgr.getProperty("spam.referers.ignorewords"); this.origSpamWords = spamprop.getValue(); spamprop.setValue(spamprop.getValue() + ", spamtest"); pmgr.store(spamprop); // Process count unique referers rmgr = getRoller().getRefererManager(); Calendar lCalendar = Calendar.getInstance(); lCalendar.se!
> tTime(new Date()); for (int i = 0; i < count; i++) {
> lCalendar.add(Calendar.DATE, -1); Timestamp day = new Timestamp(lCalendar.getTime().getTime()); getRoller().begin(UserData.SYSTEM_USER); MockRequest mock = new MockRequest( DateUtil.format8chars(day), "http://test"+i, "http://test"+i, null, mWebsite ); rmgr.processRequest(mock); getRoller().commit(); testDay = mock.getDateString(); } } public void tearDown() throws Exception { List refs = rmgr.getReferers(mWebsite); // Remove all referers processes for (int i = 0; i < refs.size(); i++) { rmgr.removeReferer(((RefererData)refs.get(i)).getId()); } // Make sure all were removed refs = rmgr.getReferers(mWebsit!
> e); assertEquals(0,refs.size()); // reset refererSpamWords to original value Roller mRoller = getRoller(); PropertiesManager pmgr = mRoller.getPropertiesManager(); RollerPropertyData spamprop = pmgr.getProperty("spam.referers.ignorewords"); spamprop.setValue(this.origSpamWords); pmgr.store(spamprop); super.tearDown(); } //------------------------------------------------------------------------ public void testGetReferersToDate() throws Exception { List referers = rmgr.getReferersToDate(mWebsite, testDay); assertEquals("Should be one Referer.", referers.size(), 1); } //------------------------------------------------------------------------ public void testRefererProcessing() throws RollerException { List refs = rmgr.getReferers(mWebsite); assertEquals("number of referers should equal count", count, refs.s!
> ize()); int hits = rmgr.getDayHits(mWebsite);
> assertEquals("There should be one fewer hits than referers", count, hits); } public void testSelfRefererDenial() throws RollerException { // test against "self referrals" getRoller().begin(UserData.SYSTEM_USER); // create "direct" referer boolean isSpam = rmgr.processRequest( new MockRequest( "20020101", "direct", "http://test.com", null, mWebsite ) ); getRoller().commit(); assertFalse("is not spam", isSpam); int newRefCount = rmgr.getReferers(mWebsite).size(); // now create self-referer getRoller().begin(UserData.SYSTEM_USER); isSpam = rmgr.processRequest( new MockRequest( "20020202", "http://test.com/page/" + mWebsite.getHandle(), "http://test.com", null, mWebsite ) !
> ); getRoller().commit(); assertFalse("is not spam", isSpam); // number of referrers should not have changed List refs = rmgr.getReferers(mWebsite); assertEquals("self referal not ignored", newRefCount, refs.size()); // now create self-referer from editor page isSpam = rmgr.processRequest( new MockRequest( "20020202", "http://test.com/weblog.do", "http://test.com", null, mWebsite ) ); getRoller().commit(); assertFalse("is not spam", isSpam); // number of referrers should not have changed refs = rmgr.getReferers(mWebsite); assertEquals("editor referal not ignored", newRefCount, refs.size()); } /** * Test to see if Referer Spam detection works. */ public void testSpamBlocking() { boolean isSpa!
> m = rmgr.processRequest( new MockRequest(
> "20040101", "http://www.spamtest.com", "http://test.com", null, mWebsite ) ); //assertTrue("failed to detect referer spam", isSpam); } public void testApplyRefererFilters() throws Exception { List refs = rmgr.getReferers(mWebsite); assertEquals(count, refs.size()); String origWords = null; getRoller().begin(UserData.SYSTEM_USER); Roller mRoller = getRoller(); PropertiesManager pmgr = mRoller.getPropertiesManager(); RollerPropertyData spamprop = pmgr.getProperty("spam.referers.ignorewords"); origWords = spamprop.getValue(); spamprop.setValue(spamprop.getValue() + ", test"); pmgr.store(spamprop); getRoller().commit(); getRoller().begin(UserData.SYSTEM_USER); getRoller().getRefererManager().applyRefererFilters(); getRoller().commit(); refs = !
> rmgr.getReferers(mWebsite); assertEquals(0, refs.size()); getRoller().begin(UserData.SYSTEM_USER); spamprop = pmgr.getProperty("spam.referers.ignorewords"); spamprop.setValue(origWords); pmgr.store(spamprop); getRoller().commit(); } public void testApplyRefererFiltersWebsite() throws Exception { List refs = rmgr.getReferers(mWebsite); assertEquals(count, refs.size()); String origWords = null; getRoller().begin(UserData.SYSTEM_USER); mWebsite = getRoller().getUserManager().retrieveWebsite(mWebsite.getId()); origWords = mWebsite.getIgnoreWords(); mWebsite.setIgnoreWords("test"); mWebsite.save(); getRoller().commit(); getRoller().begin(UserData.SYSTEM_USER); getRoller().getRefererManager().applyRefererFilters(); getRoller().commit(); refs = rmgr.getReferers(mWebsite); assertE!
> quals(0, refs.size()); }}odel.ParsedRequest{ mDateStr = null;
> private String mRefUrl = null; private String mReqUrl = null; private WeblogEntryData mEntry = null; private WebsiteData mWebsite = null; private boolean mIsDateSpecified = false; public MockRequest( String dateStr, String refUrl, String reqUrl, WeblogEntryData entry, WebsiteData website) { mDateStr = dateStr; mRefUrl = refUrl; mReqUrl = reqUrl; mEntry = entry; mWebsite = website; if (mDateStr != null) mIsDateSpecified = true; } /** * @see org.roller.pojos.ParsedRequest#getDateString() */ public String getDateString() { return mDateStr; } /** * @see org.roller.pojos.ParsedRequest#getRefererURL() */ public String getRefererURL() { return mRefUrl; } /** * @see org.roller.pojos.ParsedRequest#getRequestURL() */ public String getRequestURL() { return mReqUrl; } !
> /** * @see org.roller.pojos.ParsedRequest#getWeblogEntry() */ public WeblogEntryData getWeblogEntry() { return mEntry; } /** * @see org.roller.pojos.ParsedRequest#getWebsite() */ public WebsiteData getWebsite() { return mWebsite; } /** * Returns the isDateSpecified. * @return boolean */ public boolean isDateSpecified() { return mIsDateSpecified; } /** * Sets the isDateSpecified. * @param isDateSpecified The isDateSpecified to set */ public void setDateSpecified(boolean isDateSpecified) { mIsDateSpecified = isDateSpecified; } /** * @see org.roller.pojos.ParsedRequest#isEnableLinkback() */ public boolean isEnableLinkback() { return false; }}
> \ No newline at end of file
> +package org.roller.business; import java.sql.Timestamp;import java.util.Calendar;import java.util.Date;import java.util.List;import junit.framework.Test;import junit.framework.TestSuite; import org.roller.RollerException;import org.roller.model.PropertiesManager;import org.roller.model.RefererManager;import org.roller.model.Roller;import org.roller.pojos.RefererData;import org.roller.pojos.RollerPropertyData;import org.roller.pojos.UserData;import org.roller.pojos.WeblogEntryData;import org.roller.pojos.WebsiteData;import org.roller.util.DateUtil;import org.roller.RollerTestBase;/** * Test Roller Referer Management. */public class RefererManagerTest extends RollerTestBase { RefererManager rmgr; //List refs; int count = 20; String testDay; String origSpamWords; //------------------------------------------------------------------------ public RefererManagerTest(String name) { super(name); } //-------!
> ----------------------------------------------------------------- public static void main(String args[]) { junit.textui.TestRunner.run(RefererManagerTest.class); } //------------------------------------------------------------------------ public static Test suite() { return new TestSuite(RefererManagerTest.class); } protected void setUp() throws Exception { super.setUp(); // add "spamtest" to refererSpamWords Roller mRoller = getRoller(); PropertiesManager pmgr = mRoller.getPropertiesManager(); RollerPropertyData spamprop = pmgr.getProperty("spam.referers.ignorewords"); this.origSpamWords = spamprop.getValue(); spamprop.setValue(spamprop.getValue() + ", spamtest"); pmgr.store(spamprop); // Process count unique referers rmgr = getRoller().getRefererManager(); Calendar lCalendar = Calendar.getInstance(); lCalendar.se!
> tTime(new Date()); for (int i = 0; i < count; i++) {
> lCalendar.add(Calendar.DATE, -1); Timestamp day = new Timestamp(lCalendar.getTime().getTime()); getRoller().begin(UserData.SYSTEM_USER); MockRequest mock = new MockRequest( DateUtil.format8chars(day), "http://test"+i, "http://test"+i, null, mWebsite ); rmgr.processRequest(mock); getRoller().commit(); testDay = mock.getDateString(); } } public void tearDown() throws Exception { List refs = rmgr.getReferers(mWebsite); // Remove all referers processes for (int i = 0; i < refs.size(); i++) { rmgr.removeReferer(((RefererData)refs.get(i)).getId()); } // Make sure all were removed refs = rmgr.getReferers(mWebsit!
> e); assertEquals(0,refs.size()); // reset refererSpamWords to original value Roller mRoller = getRoller(); PropertiesManager pmgr = mRoller.getPropertiesManager(); RollerPropertyData spamprop = pmgr.getProperty("spam.referers.ignorewords"); spamprop.setValue(this.origSpamWords); pmgr.store(spamprop); super.tearDown(); } //------------------------------------------------------------------------ public void testGetReferersToDate() throws Exception { List referers = rmgr.getReferersToDate(mWebsite, testDay); assertEquals("Should be one Referer.", referers.size(), 1); } //------------------------------------------------------------------------ public void testRefererProcessing() throws RollerException { List refs = rmgr.getReferers(mWebsite); assertEquals("number of referers should equal count", count, refs.s!
> ize()); int hits = rmgr.getDayHits(mWebsite);
> assertEquals("There should be one fewer hits than referers", count, hits); } public void testSelfRefererDenial() throws RollerException { // test against "self referrals" getRoller().begin(UserData.SYSTEM_USER); // create "direct" referer boolean isSpam = rmgr.processRequest( new MockRequest( "20020101", "direct", "http://test.com", null, mWebsite ) ); getRoller().commit(); assertFalse("is not spam", isSpam); int newRefCount = rmgr.getReferers(mWebsite).size(); // now create self-referer getRoller().begin(UserData.SYSTEM_USER); isSpam = rmgr.processRequest( new MockRequest( "20020202", "http://test.com/page/" + mWebsite.getHandle(), "http://test.com", null, mWebsite ) !
> ); getRoller().commit(); assertFalse("is not spam", isSpam); // number of referrers should not have changed List refs = rmgr.getReferers(mWebsite); assertEquals("self referal not ignored", newRefCount, refs.size()); // now create self-referer from editor page isSpam = rmgr.processRequest( new MockRequest( "20020202", "http://test.com/weblog.do", "http://test.com", null, mWebsite ) ); getRoller().commit(); assertFalse("is not spam", isSpam); // number of referrers should not have changed refs = rmgr.getReferers(mWebsite); assertEquals("editor referal not ignored", newRefCount, refs.size()); } /** * Test to see if Referer Spam detection works. */ public void testSpamBlocking() { boolean isSpa!
> m = rmgr.processRequest( new MockRequest(
> "20040101", "http://www.spamtest.com", "http://test.com", null, mWebsite ) ); //assertTrue("failed to detect referer spam", isSpam); } public void testApplyRefererFilters() throws Exception { List refs = rmgr.getReferers(mWebsite); assertEquals(count, refs.size()); String origWords = null; getRoller().begin(UserData.SYSTEM_USER); Roller mRoller = getRoller(); PropertiesManager pmgr = mRoller.getPropertiesManager(); RollerPropertyData spamprop = pmgr.getProperty("spam.referers.ignorewords"); origWords = spamprop.getValue(); spamprop.setValue(spamprop.getValue() + ", test"); pmgr.store(spamprop); getRoller().commit(); getRoller().begin(UserData.SYSTEM_USER); getRoller().getRefererManager().applyRefererFilters(); getRoller().commit(); refs = !
> rmgr.getReferers(mWebsite); assertEquals(0, refs.size()); getRoller().begin(UserData.SYSTEM_USER); spamprop = pmgr.getProperty("spam.referers.ignorewords"); spamprop.setValue(origWords); pmgr.store(spamprop); getRoller().commit(); } public void testApplyRefererFiltersWebsite() throws Exception { List refs = rmgr.getReferers(mWebsite); assertEquals(count, refs.size()); String origWords = null; getRoller().begin(UserData.SYSTEM_USER); mWebsite = getRoller().getUserManager().retrieveWebsite(mWebsite.getId()); origWords = mWebsite.getBlacklist(); mWebsite.setBlacklist("test"); mWebsite.save(); getRoller().commit(); getRoller().begin(UserData.SYSTEM_USER); getRoller().getRefererManager().applyRefererFilters(); getRoller().commit(); refs = rmgr.getReferers(mWebsite); assertEqual!
> s(0, refs.size()); }}.ParsedRequest{ = null;mRefUrl = null;
> private String mReqUrl = null; private WeblogEntryData mEntry = null; private WebsiteData mWebsite = null; private boolean mIsDateSpecified = false; public MockRequest( String dateStr, String refUrl, String reqUrl, WeblogEntryData entry, WebsiteData website) { mDateStr = dateStr; mRefUrl = refUrl; mReqUrl = reqUrl; mEntry = entry; mWebsite = website; if (mDateStr != null) mIsDateSpecified = true; } /** * @see org.roller.pojos.ParsedRequest#getDateString() */ public String getDateString() { return mDateStr; } /** * @see org.roller.pojos.ParsedRequest#getRefererURL() */ public String getRefererURL() { return mRefUrl; } /** * @see org.roller.pojos.ParsedRequest#getRequestURL() */ public String getRequestURL() { return mReqUrl; } /** * @see org.roller.pojo!
> s.ParsedRequest#getWeblogEntry() */ public WeblogEntryData getWeblogEntry() { return mEntry; } /** * @see org.roller.pojos.ParsedRequest#getWebsite() */ public WebsiteData getWebsite() { return mWebsite; } /** * Returns the isDateSpecified. * @return boolean */ public boolean isDateSpecified() { return mIsDateSpecified; } /** * Sets the isDateSpecified. * @param isDateSpecified The isDateSpecified to set */ public void setDateSpecified(boolean isDateSpecified) { mIsDateSpecified = isDateSpecified; } /** * @see org.roller.pojos.ParsedRequest#isEnableLinkback() */ public boolean isEnableLinkback() { return false; }}
> \ No newline at end of file
>
> Modified: incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties (original)
> +++ incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties Wed Nov 30 12:47:55 2005
> @@ -236,7 +236,7 @@
> # -------------------------------------------------------------- CommentServlet
>
> commentServlet.commentMarkedAsSpam=Your comment was marked as spam and will not be displayed.
> -commentServlet.previewMarkedAsSpam=If you submit this comment, it will be marked as spam ane not displayed.
> +commentServlet.previewMarkedAsSpam=If you submit this comment, it will be marked as spam and not displayed.
> commentServlet.submittedToModerator=Your comment has been submitted to the moderator for approval.
>
> # --------------------------------------------------------------- Configuration
> @@ -1429,8 +1429,8 @@
> websiteSettings.enableBloggerApi=Enable Blogger and MetaWeblog APIs for your weblog?
> websiteSettings.bloggerApiCategory=Category for posts received via Blogger API
> websiteSettings.spamPrevention=Spam Prevention
> -websiteSettings.ignoreUrls=Ignore referring URLs that<br />contain any of \
> -these<br />(comma separated) words
> +websiteSettings.ignoreUrls=List of words and regex expressions listed one per \
> +line to be added to the blacklist used to check comments, trackbacks and referrers.
> websiteSettings.editorSettings=Editor
> websiteSettings.commentSettings=Comments
>
> @@ -1439,6 +1439,8 @@
> websiteSettings.button.remove=Remove Weblog
>
> websiteSettings.savedChanges=Saved changes to weblog settings
> +websiteSettings.acceptedBlacklist=Accepted {0} string and {1} regex blacklist rules
> +websiteSettings.error.processingBlacklist=Error processing blacklist: {0}
> websiteSettings.error.sameTemplate=CHANGES REJECTED: cannot set default page \
> template and day template to same template
>
>
> Modified: incubator/roller/trunk/web/WEB-INF/classes/roller.properties
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/roller.properties?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/web/WEB-INF/classes/roller.properties (original)
> +++ incubator/roller/trunk/web/WEB-INF/classes/roller.properties Wed Nov 30 12:47:55 2005
> @@ -181,14 +181,14 @@
> comment.notification.separateOwnerMessage=false
> comment.notification.hideCommenterAddresses=false
>
> -# enables blacklist + ignoreWords check on comment post (default: true)
> +# enables site full blacklist check on comment posts (default: true)
> site.blacklist.enable.comments=true
>
> -# enables blacklist + ignoreWords check at time of trackback post (default: true)
> +# enables site full blacklist check at time of trackback post (default: true)
> site.blacklist.enable.trackbacks=true
>
> -# enables ignoreWords check for each incoming referrer
> -site.ignorewords.enable.referrers=true
> +# enables partial blacklist check (not including blacklist.txt) for each incoming referrer
> +site.blacklist.enable.referrers=true
>
> # Trackback protection. Set this only if you need to limit the URLs to
> # which users may send trackbacks. Regex expressions are allowed, for example:
>
> Modified: incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml (original)
> +++ incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml Wed Nov 30 12:47:55 2005
> @@ -169,7 +169,7 @@
> <!-- Spam Prevention Settings Group -->
> <display-group name="spamSettings" key="websiteSettings.spamPrevention" >
>
> - <property-def name="spam.referers.ignorewords" key="websiteSettings.ignoreUrls">
> + <property-def name="spam.blacklist" key="websiteSettings.ignoreUrls">
> <type>text</type>
> <default-value></default-value>
> <rows>7</rows>
>
> Modified: incubator/roller/trunk/web/website/edit-website.jsp
> URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/website/edit-website.jsp?rev=350046&r1=350045&r2=350046&view=diff
> ==============================================================================
> --- incubator/roller/trunk/web/website/edit-website.jsp (original)
> +++ incubator/roller/trunk/web/website/edit-website.jsp Wed Nov 30 12:47:55 2005
> @@ -192,7 +192,7 @@
>
> <tr>
> <td class="label"><fmt:message key="websiteSettings.ignoreUrls" /></td>
> - <td class="field"><html:textarea property="ignoreWords" rows="7" cols="40"/></td>
> + <td class="field"><html:textarea property="blacklist" rows="7" cols="40"/></td>
> <td class="description"><%-- <fmt:message key="websiteSettings.tip." /> --%></td>
> </tr>
>
>
>