module ActionController::HttpAuthentication::Basic::ControllerMethods

def authenticate_or_request_with_http_basic(realm = nil, message = nil, &login_procedure)

def authenticate_or_request_with_http_basic(realm = nil, message = nil, &login_procedure)
  authenticate_with_http_basic(&login_procedure) || request_http_basic_authentication(realm || "Application", message)
end

def authenticate_with_http_basic(&login_procedure)

def authenticate_with_http_basic(&login_procedure)
  HttpAuthentication::Basic.authenticate(request, &login_procedure)
end

def http_basic_authenticate_or_request_with(name:, password:, realm: nil, message: nil)

def http_basic_authenticate_or_request_with(name:, password:, realm: nil, message: nil)
  authenticate_or_request_with_http_basic(realm, message) do |given_name, given_password|
    # This comparison uses & so that it doesn't short circuit and
    # uses `secure_compare` so that length information isn't leaked.
    ActiveSupport::SecurityUtils.secure_compare(given_name.to_s, name) &
      ActiveSupport::SecurityUtils.secure_compare(given_password.to_s, password)
  end
end

def request_http_basic_authentication(realm = "Application", message = nil)

def request_http_basic_authentication(realm = "Application", message = nil)
  HttpAuthentication::Basic.authentication_request(self, realm, message)
end