Sha256: dda2e74b1ded23f89993e725acd7bb2a0cc6e412cd8c1ea127192045b486b933

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true
module Masks
  module Rails
    module OpenID
      class Authorization < ApplicationRecord
        self.table_name = "openid_authorizations"

        scope :valid, -> { where("expires_at >= ?", Time.now.utc) }

        belongs_to :actor, class_name: Masks.configuration.models[:actor]
        belongs_to :openid_client,
                   class_name: Masks.configuration.models[:openid_client]

        serialize :scopes, coder: JSON

        before_validation :generate_code

        validates :actor, presence: true
        validates :openid_client, presence: true
        validates :code, presence: true, uniqueness: true
        validates :expires_at, presence: true

        def valid_redirect_uri?(uri)
          uri == redirect_uri
        end

        def access_token
          @access_token ||=
            update_attribute!(:expires_at, Time.now) && generate_access_token!
        end

        def generate_access_token!
          actor.openid_access_tokens.create!(openid_client:, scopes:)
        end

        private

        def generate_code
          self.code ||= SecureRandom.uuid
          self.expires_at ||= openid_client.code_expires_at
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
masks-0.4.0 app/models/masks/rails/openid/authorization.rb