2018-08-29 21:26:22 +02:00
|
|
|
class WebhookController < ActionController::Base
|
|
|
|
before_action :verify_signature!, only: :helpscout
|
2020-08-10 17:18:10 +02:00
|
|
|
skip_before_action :verify_authenticity_token
|
2018-08-29 21:26:22 +02:00
|
|
|
|
|
|
|
def helpscout
|
2019-03-19 15:49:54 +01:00
|
|
|
email = params[:customer][:email].downcase
|
2018-08-29 21:26:22 +02:00
|
|
|
user = User.find_by(email: email)
|
|
|
|
|
2019-11-04 16:18:09 +01:00
|
|
|
if user.nil?
|
|
|
|
head :not_found
|
|
|
|
|
|
|
|
else
|
|
|
|
instructeur = user.instructeur
|
|
|
|
administrateur = user.administrateur
|
|
|
|
|
2018-09-18 12:06:27 +02:00
|
|
|
url = manager_user_url(user)
|
2019-11-04 16:18:09 +01:00
|
|
|
html = [link_to_manager(user, url)]
|
2018-08-29 21:26:22 +02:00
|
|
|
|
2019-11-04 16:18:09 +01:00
|
|
|
if instructeur
|
|
|
|
url = manager_instructeur_url(instructeur)
|
|
|
|
html << link_to_manager(instructeur, url)
|
|
|
|
end
|
2018-08-29 21:26:22 +02:00
|
|
|
|
2019-11-04 16:18:09 +01:00
|
|
|
if administrateur
|
|
|
|
url = manager_administrateur_url(administrateur)
|
|
|
|
html << link_to_manager(administrateur, url)
|
|
|
|
end
|
2018-08-29 21:26:22 +02:00
|
|
|
|
|
|
|
render json: { html: html.join('<br>') }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def link_to_manager(model, url)
|
2019-03-05 18:16:13 +01:00
|
|
|
"<a target='_blank' href='#{url}' rel='noopener'>#{model.model_name.human}##{model.id}</a>"
|
2018-08-29 21:26:22 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def verify_signature!
|
|
|
|
if generate_body_signature(request.body.read) != request.headers['X-Helpscout-Signature']
|
|
|
|
request_http_token_authentication
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def generate_body_signature(body)
|
|
|
|
Base64.strict_encode64(OpenSSL::HMAC.digest('sha1',
|
|
|
|
Rails.application.secrets.helpscout[:webhook_secret],
|
|
|
|
body))
|
|
|
|
end
|
|
|
|
end
|