Sha256: 8156e4ab88d49e100b96f36c9f1af70824cf887b087539b551c1c5cd83843843
Contents?: true
Size: 1.2 KB
Versions: 1
Compression:
Stored size: 1.2 KB
Contents
# frozen_string_literal: true module Shipit class ApiClient < Record InsufficientPermission = Class.new(StandardError) belongs_to :creator, class_name: 'User' belongs_to :stack, optional: true validates :creator, :name, presence: true serialize :permissions, coder: Shipit.serialized_column(:permissions, type: 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
shipit-engine-0.39.0 | app/models/shipit/api_client.rb |