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, auth_token) ⇒ Capability

Returns a new instance of Capability.



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

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

Instance Method Details

#allow_client_incoming(client_name) ⇒ Object



13
14
15
16
17
# File 'lib/twilio-ruby/util/capability.rb', line 13

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



19
20
21
22
23
24
25
# File 'lib/twilio-ruby/util/capability.rb', line 19

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



27
28
29
30
31
# File 'lib/twilio-ruby/util/capability.rb', line 27

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



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

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



33
34
35
36
# File 'lib/twilio-ruby/util/capability.rb', line 33

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