Class: Twilio::Util::Capability

Inherits:
Object
  • Object
show all
Includes:
Twilio::Util
Defined in:
lib/twilio-ruby/util/capability.rb

Instance Method Summary collapse

Methods included from Twilio::Util

#get_string, #url_encode

Constructor Details

#initialize(account_sid = nil, auth_token = nil) ⇒ Capability

Returns a new instance of Capability.



7
8
9
10
11
12
13
14
# File 'lib/twilio-ruby/util/capability.rb', line 7

def initialize( = nil, auth_token = nil)
  @account_sid =  || Twilio.
  @auth_token = auth_token || Twilio.auth_token
  if @account_sid.nil? || @auth_token.nil?
    raise ArgumentError, 'Account SID and auth token are required'
  end
  @capabilities = []
end

Instance Method Details

#allow_client_incoming(client_name) ⇒ Object



16
17
18
19
20
# File 'lib/twilio-ruby/util/capability.rb', line 16

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

#allow_client_outgoing(app_sid, params = {}) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/twilio-ruby/util/capability.rb', line 22

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

#allow_event_stream(filters = {}) ⇒ Object



30
31
32
33
34
# File 'lib/twilio-ruby/util/capability.rb', line 30

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

#generate(ttl = 3600) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/twilio-ruby/util/capability.rb', line 41

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

#scope_uri_for(service, privilege, params = {}) ⇒ Object



36
37
38
39
# File 'lib/twilio-ruby/util/capability.rb', line 36

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