notices_controller.rb 999 Bytes
class Api::V3::NoticesController < ApplicationController
  VERSION_TOO_OLD = 'Notice for old app version ignored'.freeze
  UNKNOWN_API_KEY = 'Your API key is unknown'.freeze

  skip_before_action :verify_authenticity_token
  skip_before_action :authenticate_user!

  respond_to :json

  def create
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Headers'] = 'origin, content-type, accept'
    return render(status: 200, text: '') if request.method == 'OPTIONS'

    report = AirbrakeApi::V3::NoticeParser.new(
      params.merge(JSON.parse(request.raw_post) || {})).report

    return render text: UNKNOWN_API_KEY, status: 422 unless report.valid?
    return render text: VERSION_TOO_OLD, status: 422 unless report.should_keep?

    report.generate_notice!
    render status: 201, json: {
      id:  report.notice.id,
      url: report.problem.url
    }
  rescue AirbrakeApi::ParamsError
    render text: 'Invalid request', status: 400
  end
end