tracks/app/controllers/integrations_controller.rb
Jyri-Petteri Paloposki d4c9041ccd More code style fixes
2021-01-06 03:47:35 +02:00

62 lines
1.6 KiB
Ruby

class IntegrationsController < ApplicationController
require 'mail'
skip_before_action :login_required, :only => [:cloudmailin, :search_plugin]
skip_before_action :verify_authenticity_token, only: [:cloudmailin]
def index
@page_title = 'TRACKS::Integrations'
end
def rest_api
@page_title = 'TRACKS::REST API Documentation'
end
def help
@page_title = 'TRACKS::Help'
end
def search_plugin
@icon_data = [File.open(File.join(Rails.root, 'app', 'assets', 'images', 'done.png')).read]
.pack('m').gsub(/\n/, '')
end
def cloudmailin
if !verify_cloudmailin_signature
render :body => "Message signature verification failed.", :status => 403
return false
end
if process_message(params[:message])
render :body => 'success', :status => 200
else
render :body => "No user found or other error", :status => 404
end
end
private
def process_message(message)
MessageGateway.receive(Mail.new(message))
end
def verify_cloudmailin_signature
provided = request.request_parameters.delete(:signature)
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.is_a? 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
end