fog-brightbox 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/fog-brightbox.gemspec +28 -0
  3. data/lib/fog/brightbox/compute/image_selector.rb +45 -0
  4. data/lib/fog/brightbox/compute/shared.rb +230 -0
  5. data/lib/fog/brightbox/compute.rb +305 -0
  6. data/lib/fog/brightbox/core.rb +11 -0
  7. data/lib/fog/brightbox/models/compute/account.rb +69 -0
  8. data/lib/fog/brightbox/models/compute/accounts.rb +29 -0
  9. data/lib/fog/brightbox/models/compute/api_client.rb +37 -0
  10. data/lib/fog/brightbox/models/compute/api_clients.rb +24 -0
  11. data/lib/fog/brightbox/models/compute/application.rb +24 -0
  12. data/lib/fog/brightbox/models/compute/applications.rb +28 -0
  13. data/lib/fog/brightbox/models/compute/cloud_ip.rb +68 -0
  14. data/lib/fog/brightbox/models/compute/cloud_ips.rb +34 -0
  15. data/lib/fog/brightbox/models/compute/collaboration.rb +49 -0
  16. data/lib/fog/brightbox/models/compute/collaborations.rb +47 -0
  17. data/lib/fog/brightbox/models/compute/database_server.rb +97 -0
  18. data/lib/fog/brightbox/models/compute/database_servers.rb +28 -0
  19. data/lib/fog/brightbox/models/compute/database_snapshot.rb +52 -0
  20. data/lib/fog/brightbox/models/compute/database_snapshots.rb +24 -0
  21. data/lib/fog/brightbox/models/compute/database_type.rb +19 -0
  22. data/lib/fog/brightbox/models/compute/database_types.rb +26 -0
  23. data/lib/fog/brightbox/models/compute/firewall_policies.rb +29 -0
  24. data/lib/fog/brightbox/models/compute/firewall_policy.rb +63 -0
  25. data/lib/fog/brightbox/models/compute/firewall_rule.rb +54 -0
  26. data/lib/fog/brightbox/models/compute/firewall_rules.rb +24 -0
  27. data/lib/fog/brightbox/models/compute/flavor.rb +32 -0
  28. data/lib/fog/brightbox/models/compute/flavors.rb +28 -0
  29. data/lib/fog/brightbox/models/compute/image.rb +64 -0
  30. data/lib/fog/brightbox/models/compute/images.rb +28 -0
  31. data/lib/fog/brightbox/models/compute/load_balancer.rb +107 -0
  32. data/lib/fog/brightbox/models/compute/load_balancers.rb +28 -0
  33. data/lib/fog/brightbox/models/compute/server.rb +217 -0
  34. data/lib/fog/brightbox/models/compute/server_group.rb +94 -0
  35. data/lib/fog/brightbox/models/compute/server_groups.rb +29 -0
  36. data/lib/fog/brightbox/models/compute/servers.rb +61 -0
  37. data/lib/fog/brightbox/models/compute/user.rb +43 -0
  38. data/lib/fog/brightbox/models/compute/user_collaboration.rb +44 -0
  39. data/lib/fog/brightbox/models/compute/user_collaborations.rb +31 -0
  40. data/lib/fog/brightbox/models/compute/users.rb +27 -0
  41. data/lib/fog/brightbox/models/compute/zone.rb +22 -0
  42. data/lib/fog/brightbox/models/compute/zones.rb +29 -0
  43. data/lib/fog/brightbox/oauth2.rb +166 -0
  44. data/lib/fog/brightbox/requests/compute/accept_user_collaboration.rb +21 -0
  45. data/lib/fog/brightbox/requests/compute/activate_console_server.rb +21 -0
  46. data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +24 -0
  47. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +24 -0
  48. data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +34 -0
  49. data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +24 -0
  50. data/lib/fog/brightbox/requests/compute/create_api_client.rb +23 -0
  51. data/lib/fog/brightbox/requests/compute/create_application.rb +23 -0
  52. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +24 -0
  53. data/lib/fog/brightbox/requests/compute/create_collaboration.rb +23 -0
  54. data/lib/fog/brightbox/requests/compute/create_database_server.rb +25 -0
  55. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +26 -0
  56. data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +29 -0
  57. data/lib/fog/brightbox/requests/compute/create_image.rb +30 -0
  58. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +26 -0
  59. data/lib/fog/brightbox/requests/compute/create_server.rb +29 -0
  60. data/lib/fog/brightbox/requests/compute/create_server_group.rb +23 -0
  61. data/lib/fog/brightbox/requests/compute/delete_api_client.rb +28 -0
  62. data/lib/fog/brightbox/requests/compute/delete_application.rb +28 -0
  63. data/lib/fog/brightbox/requests/compute/delete_cloud_ip.rb +28 -0
  64. data/lib/fog/brightbox/requests/compute/delete_collaboration.rb +28 -0
  65. data/lib/fog/brightbox/requests/compute/delete_database_server.rb +26 -0
  66. data/lib/fog/brightbox/requests/compute/delete_database_snapshot.rb +26 -0
  67. data/lib/fog/brightbox/requests/compute/delete_firewall_policy.rb +28 -0
  68. data/lib/fog/brightbox/requests/compute/delete_firewall_rule.rb +28 -0
  69. data/lib/fog/brightbox/requests/compute/delete_image.rb +28 -0
  70. data/lib/fog/brightbox/requests/compute/delete_load_balancer.rb +28 -0
  71. data/lib/fog/brightbox/requests/compute/delete_server.rb +28 -0
  72. data/lib/fog/brightbox/requests/compute/delete_server_group.rb +28 -0
  73. data/lib/fog/brightbox/requests/compute/delete_user_collaboration.rb +28 -0
  74. data/lib/fog/brightbox/requests/compute/get_account.rb +29 -0
  75. data/lib/fog/brightbox/requests/compute/get_api_client.rb +21 -0
  76. data/lib/fog/brightbox/requests/compute/get_application.rb +21 -0
  77. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +17 -0
  78. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +21 -0
  79. data/lib/fog/brightbox/requests/compute/get_collaboration.rb +21 -0
  80. data/lib/fog/brightbox/requests/compute/get_database_server.rb +19 -0
  81. data/lib/fog/brightbox/requests/compute/get_database_snapshot.rb +19 -0
  82. data/lib/fog/brightbox/requests/compute/get_database_type.rb +21 -0
  83. data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +21 -0
  84. data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +21 -0
  85. data/lib/fog/brightbox/requests/compute/get_image.rb +21 -0
  86. data/lib/fog/brightbox/requests/compute/get_interface.rb +21 -0
  87. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +21 -0
  88. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +15 -0
  89. data/lib/fog/brightbox/requests/compute/get_server.rb +21 -0
  90. data/lib/fog/brightbox/requests/compute/get_server_group.rb +21 -0
  91. data/lib/fog/brightbox/requests/compute/get_server_type.rb +21 -0
  92. data/lib/fog/brightbox/requests/compute/get_user.rb +29 -0
  93. data/lib/fog/brightbox/requests/compute/get_user_collaboration.rb +21 -0
  94. data/lib/fog/brightbox/requests/compute/get_zone.rb +21 -0
  95. data/lib/fog/brightbox/requests/compute/list_accounts.rb +17 -0
  96. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +19 -0
  97. data/lib/fog/brightbox/requests/compute/list_applications.rb +19 -0
  98. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +19 -0
  99. data/lib/fog/brightbox/requests/compute/list_collaborations.rb +19 -0
  100. data/lib/fog/brightbox/requests/compute/list_database_servers.rb +17 -0
  101. data/lib/fog/brightbox/requests/compute/list_database_snapshots.rb +17 -0
  102. data/lib/fog/brightbox/requests/compute/list_database_types.rb +19 -0
  103. data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +19 -0
  104. data/lib/fog/brightbox/requests/compute/list_images.rb +19 -0
  105. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +19 -0
  106. data/lib/fog/brightbox/requests/compute/list_server_groups.rb +19 -0
  107. data/lib/fog/brightbox/requests/compute/list_server_types.rb +19 -0
  108. data/lib/fog/brightbox/requests/compute/list_servers.rb +19 -0
  109. data/lib/fog/brightbox/requests/compute/list_user_collaborations.rb +19 -0
  110. data/lib/fog/brightbox/requests/compute/list_users.rb +19 -0
  111. data/lib/fog/brightbox/requests/compute/list_zones.rb +19 -0
  112. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +24 -0
  113. data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +36 -0
  114. data/lib/fog/brightbox/requests/compute/reject_user_collaboration.rb +21 -0
  115. data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +24 -0
  116. data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +24 -0
  117. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +24 -0
  118. data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +34 -0
  119. data/lib/fog/brightbox/requests/compute/resend_collaboration.rb +21 -0
  120. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +32 -0
  121. data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
  122. data/lib/fog/brightbox/requests/compute/reset_password_database_server.rb +19 -0
  123. data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +25 -0
  124. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +21 -0
  125. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +21 -0
  126. data/lib/fog/brightbox/requests/compute/snapshot_database_server.rb +19 -0
  127. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +21 -0
  128. data/lib/fog/brightbox/requests/compute/start_server.rb +21 -0
  129. data/lib/fog/brightbox/requests/compute/stop_server.rb +21 -0
  130. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +21 -0
  131. data/lib/fog/brightbox/requests/compute/update_account.rb +61 -0
  132. data/lib/fog/brightbox/requests/compute/update_api_client.rb +26 -0
  133. data/lib/fog/brightbox/requests/compute/update_application.rb +26 -0
  134. data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +27 -0
  135. data/lib/fog/brightbox/requests/compute/update_database_server.rb +25 -0
  136. data/lib/fog/brightbox/requests/compute/update_database_snapshot.rb +26 -0
  137. data/lib/fog/brightbox/requests/compute/update_firewall_policy.rb +26 -0
  138. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +31 -0
  139. data/lib/fog/brightbox/requests/compute/update_image.rb +31 -0
  140. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +29 -0
  141. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +31 -0
  142. data/lib/fog/brightbox/requests/compute/update_server.rb +28 -0
  143. data/lib/fog/brightbox/requests/compute/update_server_group.rb +26 -0
  144. data/lib/fog/brightbox/requests/compute/update_user.rb +29 -0
  145. data/lib/fog/brightbox/version.rb +5 -0
  146. data/lib/fog/brightbox.rb +1 -0
  147. metadata +261 -0
@@ -0,0 +1,29 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/server_group'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class ServerGroups < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::ServerGroup
11
+
12
+ def all
13
+ data = service.list_server_groups
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ return nil if identifier.nil? || identifier == ""
19
+ data = service.get_server_group(identifier)
20
+ new(data)
21
+ rescue Excon::Errors::NotFound
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,61 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/server'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class Servers < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::Server
11
+
12
+ def all
13
+ data = service.list_servers
14
+ load(data)
15
+ end
16
+
17
+ # Creates a server and maps an Cloud IP
18
+ #
19
+ # By default the public SSH key you have registered with
20
+ # Brightbox is already made available in an AWS compatible
21
+ # metdata service.
22
+ #
23
+ # @todo Support uploading of arbitary SSH keys
24
+ #
25
+ # @param [Hash] options
26
+ # @option options [String] name Name for the server
27
+ # @option options [String] flavor_id Identifier for virtual hardware type to request
28
+ # @option options [String] image_id Identifier for image to use when creating
29
+ # @option options [String] zone_id Identifer for preferred zone to locate server in
30
+ # @option options [Array<String>] server_groups List of group identifiers for the server to join
31
+ #
32
+ # @return Fog::Compute::Brightbox::Server
33
+ #
34
+ def bootstrap(options = {})
35
+ server = create(options)
36
+
37
+ # Ensure server is now available
38
+ server.wait_for { ready? }
39
+
40
+ # To get a public IP address we need to map a cloud IP address
41
+ cip = service.cloud_ips.allocate
42
+ cip.map(server)
43
+ cip.wait_for { mapped? }
44
+
45
+ # Reload so the public IP is now available
46
+ server.reload
47
+ end
48
+
49
+ def get(identifier)
50
+ return nil if identifier.nil? || identifier == ""
51
+ data = service.get_server(identifier)
52
+ new(data)
53
+ rescue Excon::Errors::NotFound
54
+ nil
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,43 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+
7
+ class User < Fog::Model
8
+
9
+ identity :id
10
+ attribute :resource_type
11
+ attribute :url
12
+
13
+ attribute :name
14
+ attribute :email_address
15
+ attribute :ssh_key
16
+
17
+ # Boolean flags
18
+ attribute :email_verified
19
+ attribute :messaging_pref
20
+
21
+ # Links - to be replaced
22
+ attribute :account_id, :aliases => "default_account", :squash => "id"
23
+ attribute :accounts
24
+
25
+ def save
26
+ requires :identity
27
+
28
+ options = {
29
+ :email_address => email_address,
30
+ :ssh_key => ssh_key,
31
+ :name => name
32
+ }
33
+
34
+ data = service.update_user(identity, options)
35
+ merge_attributes(data)
36
+ true
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,44 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+ class UserCollaboration < Fog::Model
7
+ identity :id
8
+ attribute :status
9
+ attribute :email
10
+ attribute :role
11
+ attribute :role_label
12
+ attribute :account
13
+ attribute :user
14
+ attribute :inviter
15
+
16
+ def account_id
17
+ account['id'] || account[:id]
18
+ end
19
+
20
+ def accept
21
+ requires :identity
22
+ data = service.accept_user_collaboration(identity)
23
+ merge_attributes(data)
24
+ true
25
+ end
26
+
27
+ def reject
28
+ requires :identity
29
+ data = service.reject_user_collaboration(identity)
30
+ merge_attributes(data)
31
+ true
32
+ end
33
+
34
+ def destroy
35
+ requires :identity
36
+ data = service.destroy_user_collaboration(identity)
37
+ merge_attributes(data)
38
+ true
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,31 @@
1
+ require "fog/core/collection"
2
+ require "fog/brightbox/models/compute/user_collaboration"
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+ class UserCollaborations < Fog::Collection
8
+ model Fog::Compute::Brightbox::UserCollaboration
9
+
10
+ def all
11
+ data = service.list_user_collaborations
12
+ load(data)
13
+ end
14
+
15
+ def get(identifier)
16
+ return nil if identifier.nil? || identifier == ""
17
+ data = service.get_user_collaboration(identifier)
18
+ new(data)
19
+ rescue Excon::Errors::NotFound
20
+ nil
21
+ end
22
+
23
+ def destroy
24
+ requires :identity
25
+ service.destroy_user_collaboration(identity)
26
+ true
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/user'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class Users < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::User
11
+
12
+ def all
13
+ data = service.list_users
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier = nil)
18
+ data = service.get_user(identifier)
19
+ new(data)
20
+ rescue Excon::Errors::NotFound
21
+ nil
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Brightbox
6
+
7
+ class Zone < Fog::Model
8
+
9
+ identity :id
10
+ attribute :url
11
+ attribute :resource_type
12
+
13
+ attribute :status
14
+ attribute :handle
15
+
16
+ attribute :description
17
+
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/zone'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Brightbox
7
+
8
+ class Zones < Fog::Collection
9
+
10
+ model Fog::Compute::Brightbox::Zone
11
+
12
+ def all
13
+ data = service.list_zones
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ return nil if identifier.nil? || identifier == ""
19
+ data = service.get_zone(identifier)
20
+ new(data)
21
+ rescue Excon::Errors::NotFound
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,166 @@
1
+ # This module covers Brightbox's partial implementation of OAuth 2.0
2
+ # and enables fog clients to implement several authentictication strategies
3
+ #
4
+ # @see http://tools.ietf.org/html/draft-ietf-oauth-v2-10
5
+ #
6
+ module Fog::Brightbox::OAuth2
7
+
8
+ # This builds the simplest form of requesting an access token
9
+ # based on the arguments passed in
10
+ #
11
+ # @param [Fog::Core::Connection] connection
12
+ # @param [CredentialSet] credentials
13
+ #
14
+ # @return [Excon::Response]
15
+ def request_access_token(connection, credentials)
16
+ token_strategy = credentials.best_grant_strategy
17
+
18
+ header_content = "#{credentials.client_id}:#{credentials.client_secret}"
19
+ encoded_credentials = Base64.encode64(header_content).chomp
20
+
21
+ connection.request(
22
+ :path => "/token",
23
+ :expects => 200,
24
+ :headers => {
25
+ 'Authorization' => "Basic #{encoded_credentials}",
26
+ 'Content-Type' => 'application/json'
27
+ },
28
+ :method => 'POST',
29
+ :body => Fog::JSON.encode(token_strategy.authorization_body_data)
30
+ )
31
+ end
32
+
33
+ # Encapsulates credentials required to request access tokens from the
34
+ # Brightbox authorisation servers
35
+ #
36
+ # @todo Interface to update certain credentials (after password change)
37
+ #
38
+ class CredentialSet
39
+ attr_reader :client_id, :client_secret, :username, :password
40
+ attr_reader :access_token, :refresh_token, :expires_in
41
+ #
42
+ # @param [String] client_id
43
+ # @param [String] client_secret
44
+ # @param [Hash] options
45
+ # @option options [String] :username
46
+ # @option options [String] :password
47
+ #
48
+ def initialize(client_id, client_secret, options = {})
49
+ @client_id = client_id
50
+ @client_secret = client_secret
51
+ @username = options[:username]
52
+ @password = options[:password]
53
+ @access_token = options[:access_token]
54
+ @refresh_token = options[:refresh_token]
55
+ @expires_in = options[:expires_in]
56
+ end
57
+
58
+ # Returns true if user details are available
59
+ # @return [Boolean]
60
+ def user_details?
61
+ !!(@username && @password)
62
+ end
63
+
64
+ # Is an access token available for these credentials?
65
+ def access_token?
66
+ !!@access_token
67
+ end
68
+
69
+ # Is a refresh token available for these credentials?
70
+ def refresh_token?
71
+ !!@refresh_token
72
+ end
73
+
74
+ # Updates the credentials with newer tokens
75
+ def update_tokens(access_token, refresh_token = nil, expires_in = nil)
76
+ @access_token = access_token
77
+ @refresh_token = refresh_token
78
+ @expires_in = expires_in
79
+ end
80
+
81
+ # Based on available credentials returns the best strategy
82
+ #
83
+ # @todo Add a means to dictate which should or shouldn't be used
84
+ #
85
+ def best_grant_strategy
86
+ if refresh_token?
87
+ RefreshTokenStrategy.new(self)
88
+ elsif user_details?
89
+ UserCredentialsStrategy.new(self)
90
+ else
91
+ ClientCredentialsStrategy.new(self)
92
+ end
93
+ end
94
+ end
95
+
96
+ # This strategy class is the basis for OAuth2 grant types
97
+ #
98
+ # @abstract Need to implement {#authorization_body_data} to return a
99
+ # Hash matching the expected parameter form for the OAuth request
100
+ #
101
+ # @todo Strategies should be able to validate if credentials are suitable
102
+ # so just client credentials cannot be used with user strategies
103
+ #
104
+ class GrantTypeStrategy
105
+ def initialize(credentials)
106
+ @credentials = credentials
107
+ end
108
+
109
+ def authorization_body_data
110
+ raise "Not implemented"
111
+ end
112
+ end
113
+
114
+ # This implements client based authentication/authorization
115
+ # based on the existing trust relationship using the `none`
116
+ # grant type.
117
+ #
118
+ class ClientCredentialsStrategy < GrantTypeStrategy
119
+ def authorization_body_data
120
+ {
121
+ "grant_type" => "none",
122
+ "client_id" => @credentials.client_id
123
+ }
124
+ end
125
+ end
126
+
127
+ # This passes user details through so the returned token
128
+ # carries the privileges of the user not account limited
129
+ # by the client
130
+ #
131
+ class UserCredentialsStrategy < GrantTypeStrategy
132
+ def authorization_body_data
133
+ {
134
+ "grant_type" => "password",
135
+ "client_id" => @credentials.client_id,
136
+ "username" => @credentials.username,
137
+ "password" => @credentials.password
138
+ }
139
+ end
140
+ end
141
+
142
+ # This strategy attempts to use a refresh_token gained during an earlier
143
+ # request to reuse the credentials given originally
144
+ #
145
+ class RefreshTokenStrategy < GrantTypeStrategy
146
+ def authorization_body_data
147
+ {
148
+ "grant_type" => "refresh_token",
149
+ "client_id" => @credentials.client_id,
150
+ "refresh_token" => @credentials.refresh_token
151
+ }
152
+ end
153
+ end
154
+
155
+ private
156
+
157
+ # This updates the current credentials if passed a valid response
158
+ #
159
+ # @param [CredentialSet] credentials Credentials to update
160
+ # @param [Excon::Response] response Response object to parse value from
161
+ #
162
+ def update_credentials_from_response(credentials, response)
163
+ response_data = Fog::JSON.decode(response.body)
164
+ credentials.update_tokens(response_data["access_token"], response_data["refresh_token"], response_data["expires_in"])
165
+ end
166
+ end