Module: Qiniu::S3::Auth

Extended by:
Utils
Defined in:
lib/qiniu/s3/auth.rb

Class Method Summary collapse

Methods included from Utils

encode_entry_uri, generate_query_string, http_request, safe_json_parse, send_request_with, upload_multipart_data, urlsafe_base64_decode, urlsafe_base64_encode

Class Method Details

.call(url, data, retry_times = 0) ⇒ Object

Raises:



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/qiniu/s3/auth.rb', line 41

def call(url, data, retry_times = 0)
  raise MissingAccessToken if @access_token.nil?
  code, data = http_request url, data, {:access_token => @access_token}
  if code == 401
    raise MissingRefreshToken if @refresh_token.nil?
    code, data = exchange_by_refresh_token!(@refresh_token)
    if code == 401
      raise MissingUsernameOrPassword if (@username.nil? || @password.nil?)
      code, data = exchange_by_password!(@username, @password)
    end
    if code == 200
      retry_times += 1
      if Config.settings[:auto_reconnect] && retry_times < Config.settings[:max_retry_times]
        return call(url, data, retry_times)
      end
    end
  end
  [code, data]
end

.exchange_by_password!(username, password) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/qiniu/s3/auth.rb', line 11

def exchange_by_password!(username, password)
  @username = username
  @password = password
  post_data = {
    :client_id  => Config.settings[:client_id],
    :grant_type => "password",
    :username   => username,
    :password   => password
  }
  code, data = http_request Config.settings[:auth_url], post_data
  reset_token(data["access_token"], data["refresh_token"]) if code == 200
  [code, data]
end

.exchange_by_refresh_token!(refresh_token) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/qiniu/s3/auth.rb', line 25

def exchange_by_refresh_token!(refresh_token)
  post_data = {
    :client_id     => Config.settings[:client_id],
    :grant_type    => "refresh_token",
    :refresh_token => refresh_token
  }
  code, data = http_request Config.settings[:auth_url], post_data
  reset_token(data["access_token"], data["refresh_token"]) if code == 200
  [code, data]
end

.request(url, data = nil) ⇒ Object



61
62
63
64
65
66
67
68
69
# File 'lib/qiniu/s3/auth.rb', line 61

def request(url, data = nil)
  begin
    code, data = Auth.call(url, data)
  rescue [MissingAccessToken, MissingRefreshToken, MissingUsernameOrPassword] => e
    Log.logger.error e
    code, data = 401, {}
  end
  [code, data]
end

.reset_token(access_token, refresh_token) ⇒ Object



36
37
38
39
# File 'lib/qiniu/s3/auth.rb', line 36

def reset_token(access_token, refresh_token)
  @access_token  = access_token
  @refresh_token = refresh_token
end