Class: CloudFiles::Authentication

Inherits:
Object
  • Object
show all
Defined in:
lib/cloudfiles/authentication.rb

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Authentication

Performs an authentication to the Cloud Files servers. Opens a new HTTP connection to the API server, sends the credentials, and looks for a successful authentication. If it succeeds, it sets the cdmmgmthost, cdmmgmtpath, storagehost, storagepath, authtoken, and authok variables on the connection. If it fails, it raises an CloudFiles::Exception::Authentication exception.

Should probably never be called directly.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/cloudfiles/authentication.rb', line 12

def initialize(connection)
  parsed_auth_url = URI.parse(connection.auth_url)
  path = parsed_auth_url.path
  hdrhash = { "X-Auth-User" => connection.authuser, "X-Auth-Key" => connection.authkey }
  begin
    server = get_server(connection, parsed_auth_url)

    if parsed_auth_url.scheme == "https"
      server.use_ssl     = true
      server.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
    server.start
  rescue Exception => e
    # uncomment if you suspect a problem with this branch of code
#         $stderr.puts "got error #{e.class}: #{e.message.inspect}\n" << e.traceback.map{|n| "\t#{n}"}.join("\n")
    raise CloudFiles::Exception::Connection, "Unable to connect to #{server.address}", caller
  end
  response = server.get(path, hdrhash)
  if (response.code =~ /^20./)
    if response["x-cdn-management-url"]
      connection.cdn_available = true
      parsed_cdn_url = URI.parse(response["x-cdn-management-url"])
      connection.cdnmgmthost   = parsed_cdn_url.host
      connection.cdnmgmtpath   = parsed_cdn_url.path
      connection.cdnmgmtport   = parsed_cdn_url.port
      connection.cdnmgmtscheme = parsed_cdn_url.scheme
    end
    parsed_storage_url = URI.parse(response["x-storage-url"])
    connection.storagehost   = set_snet(connection, parsed_storage_url.host)
    connection.storagepath   = parsed_storage_url.path
    connection.storageport   = parsed_storage_url.port
    connection.storagescheme = parsed_storage_url.scheme
    connection.authtoken     = response["x-auth-token"]
    connection.authok        = true
  else
    connection.authtoken = false
    raise CloudFiles::Exception::Authentication, "Authentication failed"
  end
  server.finish
end