diff --git a/app/controllers/integrations_controller.rb b/app/controllers/integrations_controller.rb index b9a3052e..449283ab 100644 --- a/app/controllers/integrations_controller.rb +++ b/app/controllers/integrations_controller.rb @@ -53,10 +53,24 @@ class IntegrationsController < ApplicationController def 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']) + signature = Digest::MD5.hexdigest(flatten_params(request.request_parameters).sort.map{|k,v| v}.join + SITE_CONFIG['cloudmailin']) return provided == signature end + def flatten_params(params, title = nil, result = {}) + params.each do |key, value| + if value.kind_of?(Hash) + key_name = title ? "#{title}[#{key}]" : key + flatten_params(value, key_name, result) + else + key_name = title ? "#{title}[#{key}]" : key + result[key_name] = value + end + end + + return result + end + def get_applescript(partial_name) context = current_user.contexts.find params[:context_id] render :partial => partial_name, :locals => { :context => context }