fog-brightbox 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 (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