adding test for cloudmailin and fixing some bugs found with it

This commit is contained in:
Stefan Richter 2011-10-05 23:53:49 +02:00
parent c0956a7e76
commit 17bb939e9e
2 changed files with 34 additions and 25 deletions

View file

@ -2,7 +2,6 @@ class IntegrationsController < ApplicationController
require 'mail'
skip_before_filter :login_required, :only => [:cloudmailin, :search_plugin, :google_gadget]
before_filter :verify_cloudmailin_signature, :only => [:cloudmailin]
def index
@page_title = 'TRACKS::Integrations'
@ -39,22 +38,31 @@ class IntegrationsController < ApplicationController
end
def cloudmailin
# verify cloudmailin signature
provided = request.request_parameters.delete(:signature)
signature = Digest::MD5.hexdigest(request.request_parameters.sort{|a,b| a[0].to_s <=> b[0].to_s}.map{|k,v| v}.join + SITE_CONFIG['cloudmailin'])
# if signature does not match, return 403
if provided != signature
render :text => "Message signature fail #{provided} != #{signature}", :status => 403
return false
end
# parse message
message = Mail.new(params[:message])
# debug
#puts message.from.addresses.first
# find user
user = User.find(:first, :include => [:preference], :conditions => ["preferences.sms_email = ?", message.from.addresses.first])
user = User.find(:first, :include => [:preference], :conditions => ["preferences.sms_email = ?", message.from])
if user.nil?
render :text => "No user found", :status => 404
return false
end
# load user settings
context = user.prefs.sms_context
# prepare body
if message.body.multipart?
#body = message.body.parts[0].to_s
body = message.body.preamble
else
body = message.body.to_s
@ -65,24 +73,13 @@ class IntegrationsController < ApplicationController
description = body
notes = nil
else
description = message.subject.decoded.to_s
description = message.subject.to_s
notes = body
end
# create todo
todo = Todo.from_rich_message(user, context.id, description, notes)
todo.save!
render :text => 'success', :status => 200
end
private
def verify_cloudmailin_signature
provided = request.request_parameters.delete(:signature)
signature = Digest::MD5.hexdigest(request.request_parameters.sort.map{|k,v| v}.join + SITE_CONFIG['cloudmailin'])
if provided != signature
render :text => "Message signature fail #{provided} != #{signature}", :status => 403
return false
end
end
end