class Webhooks::SparkpostController < ActionController::API
  before_action :validate_oauth_token, only: :create

  def create
    Sparkpost::WebhookJob.perform_async(params['_json'].to_json)
    render status: :ok
  end

  def oauth
    token = SecureRandom.hex(32)
    $redis.set('sparkpost_oauth_token', token)
    render status: :ok, json: { access_token: token }
  end

  private
    def validate_oauth_token
      pattern = /^Bearer /
      header  = request.headers['Authorization']
      header.gsub!(pattern, '') if header&.match(pattern)

      return if header == $redis.get('sparkpost_oauth_token')

      render status: :unauthorized, json: { error: 'Invalid oauth token' }
    end
end
