<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,10 +1,13 @@
 class Exclusions &lt; Application
   before :load_site_from_params
   before :ensure_authenticated, :only =&gt; :index
+  before :load_user, :only =&gt; :index
+  before :ensure_permissions, :only =&gt; :index
   
   def index
     only_provides :text
     @exclusions = Exclusion.all(:site_id =&gt; @site.id)
+    Log.create!(:site_id =&gt; @site.id, :user_id =&gt; @current_user.id, :type =&gt; 'request_exclusion_list')
     display @exclusions
   end
 
@@ -20,10 +23,29 @@ class Exclusions &lt; Application
     display @exclusion
   end
 
-  def create
-    @exclusion = Exclusion.new(params[:exclusion].merge(:site_id =&gt; @site.id))
-    if @exclusion.save
-      render &quot;You have been unsubscribed from #{@site.url}&quot;
+  def create    
+    previous_exclusion = Exclusion.first(:site_id =&gt; @site.id, :email =&gt; params[:exclusion][:email].downcase)    
+    @exclusion =  previous_exclusion || Exclusion.new(params[:exclusion].merge(:site_id =&gt; @site.id))
+
+    captcha_correct = recaptcha_valid?
+    unless captcha_correct
+      @exclusion.valid?
+      @exclusion.errors.add(:general, &quot;Captcha code is incorrect&quot;)
+      return render(:new)
+    end
+
+    referring_user_id = params[:ref]
+    success = false
+
+    if previous_exclusion
+      success = true
+    else
+      success = @exclusion.save
+    end
+
+    if success
+      Log.create!( :exclusion_id =&gt; @exclusion.id, :site_id =&gt; @site.id, :user_id =&gt; referring_user_id, :type =&gt; &quot;unsubscribe&quot; )
+      redirect resource(@site, @exclusion)
     else
       render :new
     end
@@ -36,4 +58,13 @@ class Exclusions &lt; Application
     throw :halt, &quot;Unknown site. Site is required.&quot; unless @site
   end
 
+  def load_user
+    @current_user = User.get(session[:user])
+    throw :halt, &quot;Invalid user&quot; unless @current_user
+  end
+
+  def ensure_permissions
+    throw :halt, &quot;Access denied for this site&quot; unless @current_user.sites.include? @site
+  end
+
 end # Exclusions</diff>
      <filename>app/controllers/exclusions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,5 +5,8 @@
     == Unsubscribe from #{ @site.url }
   %fieldset
     = text_field :email, :label =&gt; &quot;E-Mail&quot;
+    = hidden_field :name =&gt; &quot;ref&quot;, :value =&gt; params[:ref]
+    %br
+    = recaptcha_tags
     %br
     =submit &quot;Unsubscribe&quot;</diff>
      <filename>app/views/exclusions/new.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 # dependencies are generated using a strict version, don't forget to edit the dependency versions when upgrading.
-merb_gems_version = &quot;1.0.12&quot;
+merb_gems_version = &quot;1.0.11&quot;
 dm_gems_version   = &quot;0.9.11&quot;
 do_gems_version   = &quot;0.9.11&quot;
 
@@ -29,9 +29,11 @@ dependency &quot;dm-migrations&quot;, dm_gems_version
 dependency &quot;dm-timestamps&quot;, dm_gems_version   
 dependency &quot;dm-types&quot;, dm_gems_version        
 dependency &quot;dm-validations&quot;, dm_gems_version  
-dependency &quot;dm-serializer&quot;, dm_gems_version   
+dependency &quot;dm-serializer&quot;, dm_gems_version
 
 dependency &quot;merb_datamapper&quot;, merb_gems_version
 dependency &quot;merb-haml&quot;, merb_gems_version
 
+dependency &quot;merb-recaptcha&quot;, &quot;~&gt; 1.0.0&quot;, :require_as =&gt; &quot;merb-recaptcha&quot;
+
 require &quot;digest/md5&quot;</diff>
      <filename>config/dependencies.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,4 +21,6 @@ end
  
 Merb::BootLoader.after_app_loads do
   # This will get executed after your app's classes have been loaded.
+  Merb::Plugins.config[:merb_recaptcha][:public_key] = &quot;6Lcx-AcAAAAAAAWZMMCko0qAdOpIAO07x0h9Tq33&quot;
+  Merb::Plugins.config[:merb_recaptcha][:private_key] = &quot;6Lcx-AcAAAAAAJzvtnIxoxsyPX9AslQXF1kUXW0H&quot;
 end</diff>
      <filename>config/init.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>878173c929575662e8633de9fe150a9bb4f37aff</id>
    </parent>
  </parents>
  <author>
    <name>Luke Galea</name>
    <email>lukegalea@lgs-pro.local</email>
  </author>
  <url>http://github.com/lukegalea/unsub/commit/707acea72c689faa74c6b53a32b007b2b43794d3</url>
  <id>707acea72c689faa74c6b53a32b007b2b43794d3</id>
  <committed-date>2009-10-14T14:26:33-07:00</committed-date>
  <authored-date>2009-10-14T14:26:33-07:00</authored-date>
  <message>Add recaptcha</message>
  <tree>ad1acc2aa2012b31b387e245257dce45e1427745</tree>
  <committer>
    <name>Luke Galea</name>
    <email>lukegalea@lgs-pro.local</email>
  </committer>
</commit>
