nvx-sds 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. data/LICENSE +64 -0
  2. data/README +80 -0
  3. data/lib/nvx/sds/APIClasses/accountfeatureusage.rb +60 -0
  4. data/lib/nvx/sds/APIClasses/accountinfo.rb +30 -0
  5. data/lib/nvx/sds/APIClasses/accountlimit.rb +25 -0
  6. data/lib/nvx/sds/APIClasses/contactinfo.rb +74 -0
  7. data/lib/nvx/sds/APIClasses/fsfileattributes.rb +50 -0
  8. data/lib/nvx/sds/APIClasses/fsfolderattributes.rb +53 -0
  9. data/lib/nvx/sds/APIClasses/fsfolderlist.rb +70 -0
  10. data/lib/nvx/sds/APIClasses/metadatainfo.rb +26 -0
  11. data/lib/nvx/sds/APIClasses/responsecodes.rb +97 -0
  12. data/lib/nvx/sds/APIClasses/soapupload.rb +52 -0
  13. data/lib/nvx/sds/APIClasses/utilities.rb +97 -0
  14. data/lib/nvx/sds/SOAP/TransferClient.rb +68 -0
  15. data/lib/nvx/sds/SOAP/default.rb +80 -0
  16. data/lib/nvx/sds/SOAP/defaultDriver.rb +70 -0
  17. data/lib/nvx/sds/accountlogin.rb +68 -0
  18. data/lib/nvx/sds/apicommand.rb +251 -0
  19. data/lib/nvx/sds/apiparam.rb +33 -0
  20. data/lib/nvx/sds/countries.rb +257 -0
  21. data/lib/nvx/sds/folder.rb +236 -0
  22. data/lib/nvx/sds/hosteditem.rb +115 -0
  23. data/lib/nvx/sds/itembase.rb +53 -0
  24. data/lib/nvx/sds/masteraccount.rb +74 -0
  25. data/lib/nvx/sds/nvxfile.rb +173 -0
  26. data/lib/nvx/sds/session.rb +110 -0
  27. data/lib/nvx/sds/transport.rb +129 -0
  28. data/lib/nvx_sds.rb +19 -0
  29. data/tests/TestUpload.txt +9 -0
  30. data/tests/accountlogintest.rb +19 -0
  31. data/tests/apicommandtest.rb +186 -0
  32. data/tests/apiparamtest.rb +24 -0
  33. data/tests/countriestest.rb +20 -0
  34. data/tests/foldertest.rb +26 -0
  35. data/tests/fsfolderlisttest.rb +127 -0
  36. data/tests/masteraccounttest.rb +69 -0
  37. data/tests/sessiontest.rb +187 -0
  38. data/tests/testconfig.rb +14 -0
  39. data/tests/transporttest.rb +19 -0
  40. data/tests/unittests_gemtest.rb +17 -0
  41. data/tests/uploadtest.rb +22 -0
  42. metadata +102 -0
@@ -0,0 +1,52 @@
1
+ # The SoapUpload file is used to upload a file to Nirvanix in parts using SOAP.
2
+ #
3
+ # == Usage
4
+ # session = Session.new("APP-KEY", "USERNAME", "APP NAME", "PASSWORD")
5
+ #
6
+ # SoapUpload.UploadFile("/path/RemoteFilename.txt","C:\\localfile.txt", session.account_login)
7
+ module NVX
8
+ module SDS
9
+
10
+ require 'transport'
11
+ require 'apicommand'
12
+ require 'apiparam'
13
+ require 'soap/defaultDriver'
14
+ require 'base64'
15
+
16
+ # The SoapTransfer class is used for upload. Since this method doesnt have a specific
17
+ # file size limit other than the 256gb max file size limit this method is used instead of
18
+ # the http upload which is limited to 2gb. This is due to the
19
+ class SoapUpload
20
+
21
+ # Uploads a file in parts at a using a buffer of 65k.
22
+ #
23
+ # == Usage
24
+ # session = Session.new("APP-KEY", "USERNAME", "APP NAME", "PASSWORD")
25
+ #
26
+ # SoapUpload.UploadFile("/path/RemoteFilename.txt","C:\\localfile.txt", session.account_login)
27
+ def SoapUpload.UploadFile(path, local_path, account_login)
28
+ # Get the Upload node passing in the total file size.
29
+ result = Transport.execute_command_post(APICommand.GetUploadNode, [APIParam.new("sizeBytes", "1000")], account_login)
30
+
31
+ # extract the upload token, host name and build a new transfer object.
32
+ upload_token = result.root.elements["//AccessToken"].get_text.value
33
+ node = result.root.elements["//IPAddress"].get_text.value
34
+ # set the URL based on the node that was returned from Nirvanix.
35
+ soap = NVX::SDS::SOAP::TransferSoap.new("http://#{node}/ws/transfer.asmx")
36
+
37
+ # Open the local file
38
+ file = File.open(local_path, "rb")
39
+ # Loop through the entire file uploading each file part.
40
+ while !file.eof?
41
+ # Send a 65k file part to Nirvanix using the upload token.
42
+ params = NVX::SDS::SOAP::AppendFile.new(upload_token, path, Base64.encode64(file.read(65536)), false)
43
+ soap.appendFile(params)
44
+ end
45
+ # Send an empty data with a True for last packet, this finalizes the upload and will
46
+ # make the file available for download.
47
+ params = NVX::SDS::SOAP::AppendFile.new(upload_token, path, nil, true)
48
+ soap.appendFile(params)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,97 @@
1
+ # = Overview
2
+ #
3
+ # The utilities file contains a utilites class that has several static methods for formatting and other routine operations
4
+ # such as getting download URLs and Getting and settign generic information that requires special formatting.
5
+ module NVX
6
+ module SDS
7
+
8
+ $:.unshift File.dirname(__FILE__)
9
+ require 'transport'
10
+ require 'apicommand'
11
+ require 'apiparam'
12
+ require 'accountinfo'
13
+ require 'accountlimit'
14
+ require 'accountfeatureusage'
15
+
16
+ # The utilites class has several static methods for formatting and other routine operations such as
17
+ # getting download URLs and Getting and settign generic information that requires special formatting.
18
+ class Utilities
19
+ # Gets a download url for either hosted or session based downloads. This will output a url in the format of
20
+ # http://downloadnode.nirvanix.com/sessiontoken/appname/username/path/file.txt or
21
+ # http://downloadnode.nirvanix.com/appname/username/path/file.txt
22
+ def Utilities.GetDownloadUrl(account_login, path, include_session = true)
23
+ doc = Transport.execute_command_post(APICommand.GetDownloadNodes, [APIParam.new("filePath", path)], account_login)
24
+
25
+ url = "http://" + doc.root.elements["//Response/DownloadNode"].get_text.value + "/"
26
+ url += account_login.session_token + "/" if include_session
27
+ url += account_login.app_name + "/" + account_login.username + "/"
28
+ url += path.to_s.split("/").last
29
+ return url
30
+ end
31
+
32
+ # Returns the account information in an accountInfo object.
33
+ def Utilities.GetAccountInfo(account_login, username)
34
+ doc = Transport.execute_command_post(APICommand.GetAccountInfo, [APIParam.new("username", username)], account_login)
35
+ return AccountInfo.new(doc)
36
+ end
37
+
38
+ # Gets account limits extracting each limit and creating a new AccountLimit object to contain each.
39
+ def Utilities.GetAccountLimits(account_login, username)
40
+ doc = Transport.execute_command_post(APICommand.GetAccountLimits, [APIParam.new("username", username)], account_login)
41
+
42
+ accountlimits = Array.new
43
+
44
+ #if there is any metadata loop through
45
+ if doc.root.elements["//Response/Limits"]
46
+ doc.root.elements.each("//Response/Limits") do |limit|
47
+ #add to the array the type and value of each in the xml.
48
+ accountlimits << AccountLimit.new(limit.elements["Type"][0].to_s, limit.elements["Value"][0].to_s)
49
+ end
50
+ end
51
+ return accountlimits
52
+ end
53
+
54
+ # Gets account usage extracting each usage type and creating a new AccountFeatureUsage object to contain each.
55
+ def Utilities.GetAccountUsage(account_login, username)
56
+ doc = Transport.execute_command_post(APICommand.GetAccountUsage, [APIParam.new("username", username)], account_login)
57
+
58
+ features = Array.new
59
+
60
+ #if there is any metadata loop through
61
+ if doc.root.elements["//Response/GetUsage"]
62
+ doc.root.elements.each("//Response/GetUsage") do |feature|
63
+ features << AccountFeatureUsage.new(feature)
64
+ end
65
+ end
66
+
67
+ return features
68
+ end
69
+
70
+ # Sets the account info for a child or parent.
71
+ def Utilities.SetAccountInfo(account_login, username, first_name, last_name,
72
+ middle_initial, phone_number, email_address, email_format, address_line1, address_line2,
73
+ city, state, country, postal_code)
74
+
75
+ email_format = email_format.nil? ? "TEXT" : email_format
76
+ country = country.nil? ? "1" : country
77
+
78
+ params = Array.new
79
+ params << APIParam.new("username", username)
80
+ params << APIParam.new("emailFormat", email_format)
81
+ params << APIParam.new("firstName", first_name) if !first_name.nil?
82
+ params << APIParam.new("lastName", last_name) if !last_name.nil?
83
+ params << APIParam.new("middleInitial", middle_initial) if !middle_initial.nil?
84
+ params << APIParam.new("phoneNumber", phone_number) if !phone_number.nil?
85
+ params << APIParam.new("emailAddress", email_address) if !email_address.nil?
86
+ params << APIParam.new("addressLine1", address_line1) if !address_line1.nil?
87
+ params << APIParam.new("addressLine2", address_line2) if !address_line2.nil?
88
+ params << APIParam.new("city", city) if !city.nil?
89
+ params << APIParam.new("state", state) if !state.nil?
90
+ params << APIParam.new("country", country) if !country.nil?
91
+ params << APIParam.new("postalCode", postal_code) if !postal_code.nil?
92
+
93
+ Transport.execute_command_post(APICommand.SetAccountInfo, params, account_login)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,68 @@
1
+ # This file is generated by Soap2wsdl. It was left in the Gem intentionally
2
+ # to show example usage of the soap interfaces of the transfer namespace.
3
+
4
+ #!/usr/bin/env ruby
5
+ require 'defaultDriver.rb'
6
+
7
+ endpoint_url = ARGV.shift
8
+ obj = TransferSoap.new(endpoint_url)
9
+
10
+ # run ruby with -d to see SOAP wiredumps.
11
+ obj.wiredump_dev = STDERR if $DEBUG
12
+
13
+ # SYNOPSIS
14
+ # UploadFile(parameters)
15
+ #
16
+ # ARGS
17
+ # parameters UploadFile - {http://transfer.nirvanix.com/ws/Transfer}UploadFile
18
+ #
19
+ # RETURNS
20
+ # parameters UploadFileResponse - {http://transfer.nirvanix.com/ws/Transfer}UploadFileResponse
21
+ #
22
+ parameters = nil
23
+ puts obj.uploadFile(parameters)
24
+
25
+ # SYNOPSIS
26
+ # AppendFile(parameters)
27
+ #
28
+ # ARGS
29
+ # parameters AppendFile - {http://transfer.nirvanix.com/ws/Transfer}AppendFile
30
+ #
31
+ # RETURNS
32
+ # parameters AppendFileResponse - {http://transfer.nirvanix.com/ws/Transfer}AppendFileResponse
33
+ #
34
+ parameters = nil
35
+ puts obj.appendFile(parameters)
36
+
37
+
38
+ endpoint_url = ARGV.shift
39
+ obj = TransferSoap.new(endpoint_url)
40
+
41
+ # run ruby with -d to see SOAP wiredumps.
42
+ obj.wiredump_dev = STDERR if $DEBUG
43
+
44
+ # SYNOPSIS
45
+ # UploadFile(parameters)
46
+ #
47
+ # ARGS
48
+ # parameters UploadFile - {http://transfer.nirvanix.com/ws/Transfer}UploadFile
49
+ #
50
+ # RETURNS
51
+ # parameters UploadFileResponse - {http://transfer.nirvanix.com/ws/Transfer}UploadFileResponse
52
+ #
53
+ parameters = nil
54
+ puts obj.uploadFile(parameters)
55
+
56
+ # SYNOPSIS
57
+ # AppendFile(parameters)
58
+ #
59
+ # ARGS
60
+ # parameters AppendFile - {http://transfer.nirvanix.com/ws/Transfer}AppendFile
61
+ #
62
+ # RETURNS
63
+ # parameters AppendFileResponse - {http://transfer.nirvanix.com/ws/Transfer}AppendFileResponse
64
+ #
65
+ parameters = nil
66
+ puts obj.appendFile(parameters)
67
+
68
+
@@ -0,0 +1,80 @@
1
+ # <b>This is a wrapper for the SOAP driver created with Soap2wsdl
2
+ # Please see the documentation for SoapUpload for usage and an upload
3
+ # example.</b>
4
+
5
+ module NVX
6
+ module SDS
7
+ module SOAP
8
+
9
+ require 'xsd/qname'
10
+
11
+ # <b>This is a wrapper class for the SOAP driver created with Soap2wsdl
12
+ # Please see the documentation for SoapUpload for usage and an upload
13
+ # example.</b>
14
+ class UploadFile
15
+ @@schema_type = "UploadFile"
16
+ @@schema_ns = "http://transfer.nirvanix.com/ws/Transfer"
17
+ @@schema_qualified = "true"
18
+ @@schema_element = [["uploadToken", "SOAP::SOAPString"], ["path", "SOAP::SOAPString"], ["fileData", "SOAP::SOAPBase64"]]
19
+
20
+ attr_accessor :uploadToken
21
+ attr_accessor :path
22
+ attr_accessor :fileData
23
+
24
+ def initialize(uploadToken = nil, path = nil, fileData = nil)
25
+ @uploadToken = uploadToken
26
+ @path = path
27
+ @fileData = fileData
28
+ end
29
+ end
30
+
31
+ # <b>This is a wrapper class for the SOAP driver created with Soap2wsdl
32
+ # Please see the documentation for SoapUpload for usage and an upload
33
+ # example.</b>
34
+ class UploadFileResponse
35
+ @@schema_type = "UploadFileResponse"
36
+ @@schema_ns = "http://transfer.nirvanix.com/ws/Transfer"
37
+ @@schema_qualified = "true"
38
+ @@schema_element = []
39
+
40
+ def initialize
41
+ end
42
+ end
43
+
44
+ # <b>This is a wrapper class for the SOAP driver created with Soap2wsdl
45
+ # Please see the documentation for SoapUpload for usage and an upload
46
+ # example.</b>
47
+ class AppendFile
48
+ @@schema_type = "AppendFile"
49
+ @@schema_ns = "http://transfer.nirvanix.com/ws/Transfer"
50
+ @@schema_qualified = "true"
51
+ @@schema_element = [["uploadToken", "SOAP::SOAPString"], ["path", "SOAP::SOAPString"], ["fileData", "SOAP::SOAPBase64"], ["endOfFile", "SOAP::SOAPBoolean"]]
52
+
53
+ attr_accessor :uploadToken
54
+ attr_accessor :path
55
+ attr_accessor :fileData
56
+ attr_accessor :endOfFile
57
+
58
+ def initialize(uploadToken = nil, path = nil, fileData = nil, endOfFile = nil)
59
+ @uploadToken = uploadToken
60
+ @path = path
61
+ @fileData = fileData
62
+ @endOfFile = endOfFile
63
+ end
64
+ end
65
+
66
+ # <b>This is a wrapper class for the SOAP driver created with Soap2wsdl
67
+ # Please see the documentation for SoapUpload for usage and an upload
68
+ # example.</b>
69
+ class AppendFileResponse
70
+ @@schema_type = "AppendFileResponse"
71
+ @@schema_ns = "http://transfer.nirvanix.com/ws/Transfer"
72
+ @@schema_qualified = "true"
73
+ @@schema_element = []
74
+
75
+ def initialize
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,70 @@
1
+ # <b>This is a wrapper for the SOAP driver created with Soap2wsdl
2
+ # Please see the documentation for SoapUpload for usage and an upload
3
+ # example.</b>
4
+
5
+ module NVX
6
+ module SDS
7
+ module SOAP
8
+
9
+ $:.unshift File.dirname(__FILE__)
10
+ require 'default.rb'
11
+
12
+ require 'soap/rpc/driver'
13
+
14
+ # <b>This is a wrapper class for the SOAP driver created with Soap2wsdl
15
+ # Please see the documentation for SoapUpload for usage and an upload
16
+ # example.</b>
17
+ class TransferSoap < ::SOAP::RPC::Driver
18
+ protected
19
+
20
+ DefaultEndpointUrl = "http://node1.nirvanix.com/ws/transfer.asmx"
21
+ MappingRegistry = ::SOAP::Mapping::Registry.new
22
+
23
+ Methods = [
24
+ [ "http://transfer.nirvanix.com/ws/Transfer/UploadFile",
25
+ "uploadFile",
26
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://transfer.nirvanix.com/ws/Transfer", "UploadFile"], true],
27
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://transfer.nirvanix.com/ws/Transfer", "UploadFileResponse"], true] ],
28
+ { :request_style => :document, :request_use => :literal,
29
+ :response_style => :document, :response_use => :literal }
30
+ ],
31
+ [ "http://transfer.nirvanix.com/ws/Transfer/AppendFile",
32
+ "appendFile",
33
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://transfer.nirvanix.com/ws/Transfer", "AppendFile"], true],
34
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://transfer.nirvanix.com/ws/Transfer", "AppendFileResponse"], true] ],
35
+ { :request_style => :document, :request_use => :literal,
36
+ :response_style => :document, :response_use => :literal }
37
+ ]
38
+ ]
39
+
40
+ def initialize(endpoint_url = nil)
41
+ endpoint_url ||= DefaultEndpointUrl
42
+ super(endpoint_url, nil)
43
+ self.mapping_registry = MappingRegistry
44
+ init_methods
45
+ end
46
+
47
+ private
48
+
49
+ def init_methods
50
+ Methods.each do |definitions|
51
+ opt = definitions.last
52
+ if opt[:request_style] == :document
53
+ add_document_operation(*definitions)
54
+ else
55
+ add_rpc_operation(*definitions)
56
+ qname = definitions[0]
57
+ name = definitions[2]
58
+ if qname.name != name and qname.name.capitalize == name.capitalize
59
+ ::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|
60
+ __send__(name, *arg)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
@@ -0,0 +1,68 @@
1
+ # = Overview
2
+ # The AccountLogin object is used to hold the session and application information
3
+ # for a specific account. The AccountLogin object is created from the session object.
4
+ # it is used to store the current user information.
5
+
6
+ module NVX
7
+ module SDS
8
+ $:.unshift File.dirname(__FILE__)
9
+ require 'transport'
10
+ require 'apicommand'
11
+ require 'apiparam'
12
+
13
+ # = Overview
14
+ # The AccountLogin object is used to hold the session and application information
15
+ # for a specific account. The AccountLogin object is created from the session object.
16
+ # it is used to store the current user information.
17
+ class AccountLogin
18
+
19
+ # The initialize method is used to set the parameters being passed by the
20
+ # session object.
21
+ def initialize(app_key, username, app_name, password = nil, session_token = nil)
22
+ @app_key, @username, @app_name = app_key, username, app_name
23
+ @password = password
24
+ @session_token = session_token
25
+ @impersonation = !session_token.nil?
26
+ end
27
+
28
+ # Current session token for the current logged in user.
29
+ def session_token
30
+ @session_token
31
+ end
32
+
33
+ # Stores the currently logged in username
34
+ def username
35
+ @username
36
+ end
37
+
38
+ # Sets the username
39
+ def username=(username)
40
+ @username=username
41
+ end
42
+
43
+ # Gets the current application key.
44
+ def app_key
45
+ @app_key
46
+ end
47
+
48
+ # Gets the current application name.
49
+ def app_name
50
+ @app_name
51
+ end
52
+
53
+ # Convenient function to get the root of the current application.
54
+ def root_path
55
+ @root_path = "//" + @app_name + "/" + @username;
56
+ end
57
+
58
+ # The Login method signs the user in using the information passed in the initialize method.
59
+ def Login
60
+ if @impersonation
61
+ raise "This account is impersonated and cannot be logged in."
62
+ end
63
+ result = Transport.execute_command_post(APICommand.Login, [APIParam.new("appKey", @app_key), APIParam.new("username", @username), APIParam.new("password", @password)], nil)
64
+ @session_token = result.root.elements["SessionToken"].get_text.value
65
+ end
66
+ end
67
+ end
68
+ end