aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/admin_spam_addresses_controller.rb27
-rw-r--r--app/mailers/request_mailer.rb2
-rw-r--r--app/models/spam_address.rb11
-rw-r--r--app/views/admin_request/_incoming_message_actions.html.erb7
-rw-r--r--app/views/admin_spam_addresses/index.html.erb51
-rw-r--r--app/views/layouts/admin.html.erb2
-rw-r--r--app/views/layouts/default.html.erb2
-rw-r--r--app/views/layouts/no_chrome.html.erb2
8 files changed, 103 insertions, 1 deletions
diff --git a/app/controllers/admin_spam_addresses_controller.rb b/app/controllers/admin_spam_addresses_controller.rb
new file mode 100644
index 000000000..f5c7e93da
--- /dev/null
+++ b/app/controllers/admin_spam_addresses_controller.rb
@@ -0,0 +1,27 @@
+class AdminSpamAddressesController < AdminController
+
+ def index
+ @spam_addresses = SpamAddress.all
+ @spam_address = SpamAddress.new
+ end
+
+ def create
+ @spam_address = SpamAddress.new(params[:spam_address])
+
+ if @spam_address.save
+ notice = "#{ @spam_address.email } has been added to the spam addresses list"
+ redirect_to spam_addresses_path, :notice => notice
+ else
+ @spam_addresses = SpamAddress.all
+ render :index
+ end
+ end
+
+ def destroy
+ @spam_address = SpamAddress.find(params[:id])
+ @spam_address.destroy
+ notice = "#{ @spam_address.email } has been removed from the spam addresses list"
+ redirect_to spam_addresses_path, :notice => notice
+ end
+
+end
diff --git a/app/mailers/request_mailer.rb b/app/mailers/request_mailer.rb
index af1a75df9..1fd5b9ba7 100644
--- a/app/mailers/request_mailer.rb
+++ b/app/mailers/request_mailer.rb
@@ -250,7 +250,7 @@ class RequestMailer < ApplicationMailer
if reply_info_requests.size == 0
reason = _("Could not identify the request from the email address")
request = InfoRequest.holding_pen_request
- request.receive(email, raw_email, false, reason)
+ request.receive(email, raw_email, false, reason) unless SpamAddress.spam?(email.to)
return
end
diff --git a/app/models/spam_address.rb b/app/models/spam_address.rb
new file mode 100644
index 000000000..15c9d1ab8
--- /dev/null
+++ b/app/models/spam_address.rb
@@ -0,0 +1,11 @@
+class SpamAddress < ActiveRecord::Base
+ attr_accessible :email
+
+ validates_presence_of :email, :message => _('Please enter the email address to mark as spam')
+ validates_uniqueness_of :email, :message => _('This address is already marked as spam')
+
+ def self.spam?(email_address)
+ exists?(:email => email_address)
+ end
+
+end
diff --git a/app/views/admin_request/_incoming_message_actions.html.erb b/app/views/admin_request/_incoming_message_actions.html.erb
index 4cf099b53..dd50eb047 100644
--- a/app/views/admin_request/_incoming_message_actions.html.erb
+++ b/app/views/admin_request/_incoming_message_actions.html.erb
@@ -22,6 +22,13 @@
</div>
</div>
+ <div class="control-group">
+ <label class="control-label">Mark <code>To:</code> address as spam</label>
+ <div class="controls">
+ <%= link_to 'Spam Addresses', spam_addresses_path %>
+ </div>
+ </div>
+
<%= form_tag admin_incoming_destroy_path, :class => "form form-inline" do %>
<div class="control-group">
<label class="control-label" for="destroy_message_<%= incoming_message.id %>">Destroy message</label>
diff --git a/app/views/admin_spam_addresses/index.html.erb b/app/views/admin_spam_addresses/index.html.erb
new file mode 100644
index 000000000..9846bc017
--- /dev/null
+++ b/app/views/admin_spam_addresses/index.html.erb
@@ -0,0 +1,51 @@
+<% @title = 'Spam Addresses' %>
+
+<h1><%= @title %></h1>
+
+<div class="row">
+ <div class="span12">
+ <p>
+ Incoming mail that gets redirected to the holding pen will be
+ rejected if it is sent <code>To:</code> an address on this
+ list.
+ </p>
+ </div>
+</div>
+
+<hr />
+
+<div class="row">
+ <div class="span12">
+ <%= form_for(@spam_address, :html => { :class => 'form-inline' }) do |f| -%>
+ <%= error_messages_for @spam_address %>
+ <%= f.text_field :email, :class => 'input-xxlarge', :placeholder => 'Enter email' %>
+ <%= f.submit 'Add Spam Address', :class => 'btn btn-warning' %>
+ <% end -%>
+ </div>
+</div>
+
+<hr />
+
+<% if @spam_addresses.any? %>
+ <div class="row">
+ <table class="table table-hover span12">
+ <thead>
+ <tr>
+ <th>Email</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @spam_addresses.each do |spam| %>
+ <tr>
+ <td><%= spam.email %></td>
+ <td><%= link_to 'Remove', spam,
+ :method => :delete,
+ :confirm => 'This is permanent! Are you sure?',
+ :class => 'btn btn-mini btn-danger' %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+ </div>
+<% end %>
diff --git a/app/views/layouts/admin.html.erb b/app/views/layouts/admin.html.erb
index c1f9335b1..2147f22e1 100644
--- a/app/views/layouts/admin.html.erb
+++ b/app/views/layouts/admin.html.erb
@@ -2,6 +2,8 @@
<html lang="en-gb">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" >
+ <%= csrf_meta_tags %>
+
<title><%= site_name %> admin<%= @title ? ":" : "" %> <%=@title%></title>
<%= javascript_include_tag "admin" %>
diff --git a/app/views/layouts/default.html.erb b/app/views/layouts/default.html.erb
index 52b718be8..6775ed781 100644
--- a/app/views/layouts/default.html.erb
+++ b/app/views/layouts/default.html.erb
@@ -2,6 +2,8 @@
<html lang="<%= I18n.locale %>">
<head>
<meta charset="utf-8">
+ <%= csrf_meta_tags %>
+
<title>
<% if @title %>
<%=@title%> - <%= site_name %>
diff --git a/app/views/layouts/no_chrome.html.erb b/app/views/layouts/no_chrome.html.erb
index e613b8ca2..a4278ab24 100644
--- a/app/views/layouts/no_chrome.html.erb
+++ b/app/views/layouts/no_chrome.html.erb
@@ -2,6 +2,8 @@
<html lang="<%= I18n.locale %>">
<head>
<meta charset="utf-8">
+ <%= csrf_meta_tags %>
+
<title>
<% if @title %>
<%=@title%> - <%= site_name %>