Sha256: bf37007c6e680f63bcd0c79c9fc5f10515d323b44299ac1993d0f13bf1be6dfa

Contents?: true

Size: 1.2 KB

Versions: 43

Compression:

Stored size: 1.2 KB

Contents

class Marty::ApiAuth < Marty::Base
  has_mcfly

  KEY_SIZE = 19

  def self.generate_key
    SecureRandom.hex(KEY_SIZE)
  end

  class ApiAuthValidator < ActiveModel::Validator
    def validate(api)
      api.errors[:base] =
        "API Key length must be #{KEY_SIZE*2}" if
        api.api_key && api.api_key.length != KEY_SIZE*2

      api.errors[:base] =
        "Script Name must reference a valid script" if
        Marty::Script.find_script(api.script_name, nil).nil?
    end
  end

  before_validation do
    self.api_key = Marty::ApiAuth.generate_key if
      self.api_key.nil? || self.api_key.length == 0
  end

  validates_presence_of :app_name, :api_key, :script_name

  validates_with ApiAuthValidator

  mcfly_validates_uniqueness_of :api_key, scope: [:script_name]
  validates_uniqueness_of :app_name, scope: [:script_name,
                                             :obsoleted_dt]

  def self.authorized?(script_name, api_key)
    is_secured = where(script_name: script_name,
                       obsoleted_dt: 'infinity').exists?
    !is_secured || where(api_key: api_key,
                         script_name: script_name,
                         obsoleted_dt: 'infinity').pluck(:app_name).first
  end

end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
marty-1.2.9 app/models/marty/api_auth.rb
marty-1.2.8 app/models/marty/api_auth.rb
marty-1.2.7 app/models/marty/api_auth.rb
marty-1.2.6 app/models/marty/api_auth.rb
marty-1.2.5 app/models/marty/api_auth.rb
marty-1.2.4 app/models/marty/api_auth.rb
marty-1.2.3 app/models/marty/api_auth.rb
marty-1.2.2 app/models/marty/api_auth.rb
marty-1.2.1 app/models/marty/api_auth.rb
marty-1.2.0 app/models/marty/api_auth.rb
marty-1.1.9 app/models/marty/api_auth.rb
marty-1.1.8 app/models/marty/api_auth.rb
marty-1.1.7 app/models/marty/api_auth.rb
marty-1.1.6 app/models/marty/api_auth.rb
marty-1.1.5 app/models/marty/api_auth.rb
marty-1.1.4 app/models/marty/api_auth.rb
marty-1.1.3 app/models/marty/api_auth.rb
marty-1.1.2 app/models/marty/api_auth.rb
marty-1.1.1 app/models/marty/api_auth.rb
marty-1.0.54 app/models/marty/api_auth.rb