2019-08-08 05:57:28 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
# Provides a way to check a CSRF token outside of a controller
|
|
|
|
class CSRFTokenVerifier
|
2023-01-09 06:10:19 -06:00
|
|
|
class InvalidCSRFToken < StandardError
|
|
|
|
end
|
2019-08-12 04:55:02 -05:00
|
|
|
|
2019-08-08 05:57:28 -05:00
|
|
|
include ActiveSupport::Configurable
|
|
|
|
include ActionController::RequestForgeryProtection
|
|
|
|
|
|
|
|
# Use config from ActionController::Base
|
|
|
|
config.each_key do |configuration_name|
|
|
|
|
undef_method configuration_name
|
|
|
|
define_method configuration_name do
|
|
|
|
ActionController::Base.config[configuration_name]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def call(env)
|
|
|
|
@request = ActionDispatch::Request.new(env.dup)
|
|
|
|
|
2023-01-09 06:10:19 -06:00
|
|
|
raise InvalidCSRFToken unless verified_request?
|
2019-08-08 05:57:28 -05:00
|
|
|
end
|
|
|
|
|
2019-08-12 19:13:08 -05:00
|
|
|
public :form_authenticity_token
|
|
|
|
|
2019-08-08 05:57:28 -05:00
|
|
|
private
|
|
|
|
|
|
|
|
attr_reader :request
|
|
|
|
delegate :params, :session, to: :request
|
|
|
|
end
|