Class: RubyBox::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby-box/session.rb

Constant Summary collapse

OAUTH2_URLS =
{
  :site => 'https://www.box.com',
  :authorize_url => "/api/oauth2/authorize",
  :token_url => "/api/oauth2/token"
}

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Session

Returns a new instance of Session.



12
13
14
15
16
17
18
19
20
# File 'lib/ruby-box/session.rb', line 12

def initialize(opts={})
  if opts[:client_id]
    @oauth2_client = OAuth2::Client.new(opts[:client_id], opts[:client_secret], OAUTH2_URLS.dup)
    @access_token = OAuth2::AccessToken.new(@oauth2_client, opts[:access_token]) if opts[:access_token]
  else # Support legacy API for historical reasons.
    @api_key = opts[:api_key]
    @auth_token = opts[:auth_token]
  end
end

Instance Method Details

#authorize_url(redirect_uri) ⇒ Object



22
23
24
25
# File 'lib/ruby-box/session.rb', line 22

def authorize_url(redirect_uri)
  @redirect_uri = redirect_uri
  @oauth2_client.auth_code.authorize_url(:redirect_uri => redirect_uri)
end

#build_auth_headerObject



36
37
38
# File 'lib/ruby-box/session.rb', line 36

def build_auth_header
  "BoxAuth api_key=#{@api_key}&auth_token=#{@auth_token}"
end

#delete(url, raw = false) ⇒ Object



46
47
48
49
50
# File 'lib/ruby-box/session.rb', line 46

def delete(url, raw=false)
  uri = URI.parse(url)
  request = Net::HTTP::Delete.new( uri.request_uri )
  resp = request( uri, request, raw )
end

#do_stream(url, opts) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/ruby-box/session.rb', line 72

def do_stream(url, opts)
  params = {
    :content_length_proc => opts[:content_length_proc],
    :progress_proc => opts[:progress_proc]        
  }

  if @access_token
    params['Authorization'] = "Bearer #{@access_token.token}"
  else
    params['Authorization'] = build_auth_header
  end

  open(url, params)
end

#get(url, raw = false) ⇒ Object



40
41
42
43
44
# File 'lib/ruby-box/session.rb', line 40

def get(url, raw=false)
  uri = URI.parse(url)
  request = Net::HTTP::Get.new( uri.request_uri )
  resp = request( uri, request, raw )
end

#get_access_token(code) ⇒ Object



27
28
29
# File 'lib/ruby-box/session.rb', line 27

def get_access_token(code)
  @access_token = @oauth2_client.auth_code.get_token(code)
end

#handle_errors(status, body, raw) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/ruby-box/session.rb', line 87

def handle_errors( status, body, raw )
  begin
    parsed_body = JSON.parse(body)
  rescue
    msg = body.nil? || body.empty? ? "no data returned" : body
    parsed_body = { "message" =>  msg }
  end
  case status / 100
  when 4
    raise(RubyBox::ItemNameInUse.new(parsed_body), parsed_body["message"]) if parsed_body["code"] == "item_name_in_use"
    raise(RubyBox::AuthError.new(parsed_body), parsed_body["message"]) if parsed_body["code"] == "unauthorized" || status == 401        
    raise(RubyBox::RequestError.new(parsed_body), parsed_body["message"])
  when 5
    raise RubyBox::ServerError, parsed_body["message"]
  end
  raw ? body : parsed_body
end

#refresh_token(refresh_token) ⇒ Object



31
32
33
34
# File 'lib/ruby-box/session.rb', line 31

def refresh_token(refresh_token)
  refresh_access_token_obj = OAuth2::AccessToken.new(@oauth2_client, @access_token.token, {'refresh_token' => refresh_token})
  @access_token = refresh_access_token_obj.refresh!
end

#request(uri, request, raw = false) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/ruby-box/session.rb', line 52

def request(uri, request, raw=false)      

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.ssl_version = :SSLv3
  
  if @access_token
    request.add_field('Authorization', "Bearer #{@access_token.token}")
  else
    request.add_field('Authorization', build_auth_header)
  end

  response = http.request(request)

  if response.is_a? Net::HTTPNotFound
    raise RubyBox::ObjectNotFound
  end
  handle_errors( response.code.to_i, response.body, raw )
end