module Url2pdfRails::Authentication::ClassMethods

Public Instance Methods

authenticate_as_pdf_request!(options = {}) click to toggle source
# File lib/url2pdf_rails/authentication.rb, line 9
def authenticate_as_pdf_request!(options = {})
  skip_filter = options.delete(:skip_filter)
  devise_fallback = options.delete(:devise_fallback)

  # should skip any before filters?
  skip_before_filter skip_filter, options if skip_filter.present?

  # skip devise authentication filters if present
  devise_fallback.each do |devise_auth_model|
    devise_auth_method = "authenticate_#{devise_auth_model}!"
    skip_before_filter devise_auth_method.to_sym, options
  end if devise_fallback.present?

  # try authenticate as pdf request and then fallback to devise if supplied
  authenticate_as_icanhazpdf_or_devise = -> do
    if valid_icanhazpdf_request?
      @authenticated_pdf_request = true
      return
    end
    head 401 and return unless devise_fallback.present?
    devise_fallback.each do |devise_auth_model|
      devise_signed_in_method = "#{devise_auth_model}_signed_in?"
      if self.respond_to?(devise_signed_in_method) && self.send(devise_signed_in_method)
        @authenticated_devise_request = true
        return
      end
    end
    head 401
  end
  prepend_before_filter authenticate_as_icanhazpdf_or_devise, options
end