63 lines
1.3 KiB
Ruby
63 lines
1.3 KiB
Ruby
|
|
class NotificationsController < ApplicationController
|
||
|
|
skip_before_action :require_login
|
||
|
|
skip_after_action :verify_authorized, except: :index
|
||
|
|
skip_after_action :verify_policy_scoped, only: :index
|
||
|
|
skip_before_action :verify_authenticity_token
|
||
|
|
|
||
|
|
def create
|
||
|
|
case notification_type
|
||
|
|
|
||
|
|
when "SubscriptionConfirmation"
|
||
|
|
Rails.logger.info(subscribe_url)
|
||
|
|
|
||
|
|
when "Notification"
|
||
|
|
case job_status
|
||
|
|
when "SUCCEEDED" then analysis_notification.success!
|
||
|
|
when "FAILED" then analysis_notification.failure!
|
||
|
|
else
|
||
|
|
Rails.logger.alert "Notification with status #{job_status}\n#{notification}"
|
||
|
|
end
|
||
|
|
|
||
|
|
else
|
||
|
|
Rails.logger.alert "Notification with type #{notification_type}\n#{notification}"
|
||
|
|
end
|
||
|
|
|
||
|
|
head :ok
|
||
|
|
end
|
||
|
|
|
||
|
|
private
|
||
|
|
|
||
|
|
# TODO: Verify the message
|
||
|
|
def notification
|
||
|
|
@notification ||= JSON.parse(request.raw_post)
|
||
|
|
end
|
||
|
|
|
||
|
|
def notification_type
|
||
|
|
notification.fetch("Type")
|
||
|
|
end
|
||
|
|
|
||
|
|
def subscribe_url
|
||
|
|
notification.fetch("SubscribeURL")
|
||
|
|
end
|
||
|
|
|
||
|
|
def message
|
||
|
|
@message ||= JSON.parse(notification.fetch("Message"))
|
||
|
|
end
|
||
|
|
|
||
|
|
def job_id
|
||
|
|
message.fetch("JobId")
|
||
|
|
end
|
||
|
|
|
||
|
|
def job_status
|
||
|
|
message.fetch("Status")
|
||
|
|
end
|
||
|
|
|
||
|
|
def analysis_type
|
||
|
|
message.fetch("AnalysisType")
|
||
|
|
end
|
||
|
|
|
||
|
|
def analysis_notification
|
||
|
|
@analysis_notification ||= AnalysisNotification.build(analysis_type, job_id)
|
||
|
|
end
|
||
|
|
end
|