Sha256: ee53eacade8d05f874e93513636b0d25666745ca9bc7658f79d0942b2ff99b60

Contents?: true

Size: 1.77 KB

Versions: 24

Compression:

Stored size: 1.77 KB

Contents

module Twilio
  module Util
    class Capability

      include Twilio::Util

      def initialize(account_sid, auth_token)
        @account_sid = account_sid
        @auth_token = auth_token
        @capabilities = []
      end

      def allow_client_incoming(client_name)
        @client_name = client_name # stash for use in outgoing
        scope_params = {'clientName' => client_name}
        @capabilities << scope_uri_for('client', 'incoming', scope_params)
      end

      def allow_client_outgoing(app_sid, params = {})
        @allow_client_outgoing = true
        @outgoing_scope_params = {'appSid' => app_sid}
        unless params.empty?
          @outgoing_scope_params['appParams'] = url_encode params
        end
      end

      def allow_event_stream(filters = {})
        scope_params = {'path' => '/2010-04-01/Events'}
        scope_params['params'] = filters unless filters.empty?
        @capabilities << scope_uri_for('stream', 'subscribe', scope_params)
      end

      def scope_uri_for(service, privilege, params = {})
        scope_uri = "scope:#{service}:#{privilege}"
        scope_uri << "?#{url_encode(params)}" unless params.empty?
      end

      def generate(ttl = 3600)

        capabilities = @capabilities.clone # we need a local copy to work on

        # build the outgoing scope lazily so that we can use @client_name
        if @allow_client_outgoing
          params = @outgoing_scope_params
          params.merge!({'clientName' => @client_name}) if @client_name
          capabilities << scope_uri_for('client', 'outgoing', params)
        end

        payload = {
          'scope' => capabilities.join(' '),
          'iss' => @account_sid,
          'exp' => (Time.now.to_i + ttl),
        }

        JWT.encode payload, @auth_token

      end

    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
twilio-ruby-3.12.2 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.12.1 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.12.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.11.6 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.11.5 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.11.4 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.11.3 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.11.1 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.11.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.10.1 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.10.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.9.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.8.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.7.1 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.7.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.6.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.5.1 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.5.0 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.4.2 lib/twilio-ruby/util/capability.rb
twilio-ruby-3.4.1 lib/twilio-ruby/util/capability.rb