in jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java [675:725]
private void refreshBlacklists( final Context context ) {
try {
boolean rebuild = false;
// Rebuild, if the spam words page, the attachment or the IP ban page has changed since.
final Page sourceSpam = context.getEngine().getManager( PageManager.class ).getPage( m_forbiddenWordsPage );
if( sourceSpam != null ) {
if( m_spamPatterns == null || m_spamPatterns.isEmpty() || sourceSpam.getLastModified().after( m_lastRebuild ) ) {
rebuild = true;
}
}
final Attachment att = context.getEngine().getManager( AttachmentManager.class ).getAttachmentInfo( context, m_blacklist );
if( att != null ) {
if( m_spamPatterns == null || m_spamPatterns.isEmpty() || att.getLastModified().after( m_lastRebuild ) ) {
rebuild = true;
}
}
final Page sourceIPs = context.getEngine().getManager( PageManager.class ).getPage( m_forbiddenIPsPage );
if( sourceIPs != null ) {
if( m_IPPatterns == null || m_IPPatterns.isEmpty() || sourceIPs.getLastModified().after( m_lastRebuild ) ) {
rebuild = true;
}
}
// Do the actual rebuilding. For simplicity's sake, we always rebuild the complete filter list regardless of what changed.
if( rebuild ) {
m_lastRebuild = new Date();
m_spamPatterns = parseWordList( sourceSpam, ( sourceSpam != null ) ? sourceSpam.getAttribute( LISTVAR ) : null );
LOG.info( "Spam filter reloaded - recognizing " + m_spamPatterns.size() + " patterns from page " + m_forbiddenWordsPage );
m_IPPatterns = parseWordList( sourceIPs, ( sourceIPs != null ) ? sourceIPs.getAttribute( LISTIPVAR ) : null );
LOG.info( "IP filter reloaded - recognizing " + m_IPPatterns.size() + " patterns from page " + m_forbiddenIPsPage );
if( att != null ) {
final InputStream in = context.getEngine().getManager( AttachmentManager.class ).getAttachmentStream(att);
final StringWriter out = new StringWriter();
FileUtil.copyContents( new InputStreamReader( in, StandardCharsets.UTF_8 ), out );
final Collection< Pattern > blackList = parseBlacklist( out.toString() );
LOG.info( "...recognizing additional " + blackList.size() + " patterns from blacklist " + m_blacklist );
m_spamPatterns.addAll( blackList );
}
}
} catch( final IOException ex ) {
LOG.info( "Unable to read attachment data, continuing...", ex );
} catch( final ProviderException ex ) {
LOG.info( "Failed to read spam filter attachment, continuing...", ex );
}
}