Sha256: cf2f82e2ec5bfcb62782eb7374e968746f0687cc118de7d50e9353925a7e23b6

Contents?: true

Size: 1.12 KB

Versions: 28

Compression:

Stored size: 1.12 KB

Contents

module Shipit
  class ApiClient < ActiveRecord::Base
    InsufficientPermission = Class.new(StandardError)

    belongs_to :creator, class_name: 'User'
    belongs_to :stack

    validates :creator, :name, presence: true

    serialize :permissions, Array
    PERMISSIONS = %w(
      read:stack
      write:stack
      deploy:stack
      lock:stack
      read:hook
      write:hook
    ).freeze
    validates :permissions, subset: {of: PERMISSIONS}

    class << self
      def authenticate(token)
        find_by_id(message_verifier.verify(token).to_i)
      rescue Shipit::SimpleMessageVerifier::InvalidSignature
      end

      def message_verifier
        @message_verifier ||= Shipit::SimpleMessageVerifier.new(Shipit.api_clients_secret)
      end
    end

    def authentication_token
      self.class.message_verifier.generate(id)
    end

    def check_permissions!(operation, scope)
      required_permission = "#{operation}:#{scope}"
      unless permissions.include?(required_permission)
        raise InsufficientPermission, "This operation requires the `#{required_permission}` permission"
      end
      true
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
shipit-engine-0.18.1 app/models/shipit/api_client.rb
shipit-engine-0.18.0 app/models/shipit/api_client.rb
shipit-engine-0.17.0 app/models/shipit/api_client.rb
shipit-engine-0.16.0 app/models/shipit/api_client.rb
shipit-engine-0.15.0 app/models/shipit/api_client.rb
shipit-engine-0.14.0 app/models/shipit/api_client.rb
shipit-engine-0.13.0 app/models/shipit/api_client.rb
shipit-engine-0.12.1 app/models/shipit/api_client.rb
shipit-engine-0.12.0 app/models/shipit/api_client.rb
shipit-engine-0.11.0 app/models/shipit/api_client.rb
shipit-engine-0.10.0 app/models/shipit/api_client.rb
shipit-engine-0.9.0 app/models/shipit/api_client.rb
shipit-engine-0.8.9 app/models/shipit/api_client.rb
shipit-engine-0.8.8 app/models/shipit/api_client.rb
shipit-engine-0.8.7 app/models/shipit/api_client.rb
shipit-engine-0.8.6 app/models/shipit/api_client.rb
shipit-engine-0.8.5 app/models/shipit/api_client.rb
shipit-engine-0.8.4 app/models/shipit/api_client.rb
shipit-engine-0.8.3 app/models/shipit/api_client.rb
shipit-engine-0.8.2 app/models/shipit/api_client.rb