fog-riakcs 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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.hound.yml +20 -0
- data/.rubocop.yml +20 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +10 -0
- data/Gemfile +4 -0
- data/LICENSE.md +20 -0
- data/README.md +38 -0
- data/Rakefile +18 -0
- data/fog-riakcs.gemspec +36 -0
- data/gemfiles/Gemfile.1.9.2- +8 -0
- data/gemfiles/Gemfile.1.9.3+ +7 -0
- data/lib/fog/riakcs.rb +17 -0
- data/lib/fog/riakcs/multipart_utils.rb +45 -0
- data/lib/fog/riakcs/multipart_utils/headers.rb +33 -0
- data/lib/fog/riakcs/provisioning.rb +97 -0
- data/lib/fog/riakcs/provisioning/create_user.rb +77 -0
- data/lib/fog/riakcs/provisioning/disable_user.rb +23 -0
- data/lib/fog/riakcs/provisioning/enable_user.rb +23 -0
- data/lib/fog/riakcs/provisioning/get_user.rb +41 -0
- data/lib/fog/riakcs/provisioning/list_users.rb +43 -0
- data/lib/fog/riakcs/provisioning/regrant_secret.rb +23 -0
- data/lib/fog/riakcs/provisioning/update_user.rb +23 -0
- data/lib/fog/riakcs/usage.rb +61 -0
- data/lib/fog/riakcs/usage/get_usage.rb +68 -0
- data/lib/fog/riakcs/user_utils.rb +34 -0
- data/lib/fog/riakcs/utils.rb +16 -0
- data/lib/fog/riakcs/version.rb +5 -0
- data/spec/minitest_helper.rb +31 -0
- data/tests/helper.rb +34 -0
- data/tests/helpers/collection_helper.rb +97 -0
- data/tests/helpers/flavors_helper.rb +32 -0
- data/tests/helpers/formats_helper.rb +98 -0
- data/tests/helpers/formats_helper_tests.rb +110 -0
- data/tests/helpers/mock_helper.rb +15 -0
- data/tests/helpers/model_helper.rb +29 -0
- data/tests/helpers/responds_to_helper.rb +11 -0
- data/tests/helpers/schema_validator_tests.rb +107 -0
- data/tests/helpers/server_helper.rb +25 -0
- data/tests/helpers/servers_helper.rb +10 -0
- data/tests/helpers/succeeds_helper.rb +9 -0
- data/tests/riakcs/provisioning/provisioning_tests.rb +174 -0
- data/tests/riakcs/usage/usage_tests.rb +29 -0
- metadata +233 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
def create_user(email, name, options = {})
|
6
|
+
payload = Fog::JSON.encode({ :email => email, :name => name })
|
7
|
+
headers = { 'Content-Type' => 'application/json' }
|
8
|
+
|
9
|
+
if(options[:anonymous])
|
10
|
+
request(
|
11
|
+
:expects => [201],
|
12
|
+
:method => 'POST',
|
13
|
+
:path => 'user',
|
14
|
+
:body => payload,
|
15
|
+
:headers => headers
|
16
|
+
)
|
17
|
+
else
|
18
|
+
begin
|
19
|
+
response = @s3_connection.put_object('riak-cs', 'user', payload, headers)
|
20
|
+
if !response.body.empty?
|
21
|
+
case response.headers['Content-Type']
|
22
|
+
when 'application/json'
|
23
|
+
response.body = Fog::JSON.decode(response.body)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
response
|
27
|
+
rescue Excon::Errors::Conflict => e
|
28
|
+
raise Fog::RiakCS::Provisioning::UserAlreadyExists.new
|
29
|
+
rescue Excon::Errors::BadRequest => e
|
30
|
+
raise Fog::RiakCS::Provisioning::ServiceUnavailable.new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Mock
|
37
|
+
def invalid_email?(email)
|
38
|
+
!email.include?('@')
|
39
|
+
end
|
40
|
+
|
41
|
+
def user_exists?(email)
|
42
|
+
data.find do |key, value|
|
43
|
+
value[:email] == email
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_user(email, name, options = {})
|
48
|
+
if invalid_email?(email)
|
49
|
+
raise Fog::RiakCS::Provisioning::ServiceUnavailable, "The email address you provided is not a valid."
|
50
|
+
end
|
51
|
+
|
52
|
+
if user_exists?(email)
|
53
|
+
raise Fog::RiakCS::Provisioning::UserAlreadyExists, "User with email #{email} already exists."
|
54
|
+
end
|
55
|
+
|
56
|
+
key_id = rand(1000).to_s
|
57
|
+
key_secret = rand(1000).to_s
|
58
|
+
data[key_id] = { :email => email, :name => name, :status => 'enabled', :key_secret => key_secret }
|
59
|
+
|
60
|
+
Excon::Response.new.tap do |response|
|
61
|
+
response.status = 200
|
62
|
+
response.headers['Content-Type'] = 'application/json'
|
63
|
+
response.body = {
|
64
|
+
"email" => data[:email],
|
65
|
+
"display_name" => data[:name],
|
66
|
+
"name" => "user123",
|
67
|
+
"key_id" => key_id,
|
68
|
+
"key_secret" => key_secret,
|
69
|
+
"id" => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
70
|
+
"status" => "enabled"
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
include Utils
|
6
|
+
include UserUtils
|
7
|
+
include MultipartUtils
|
8
|
+
|
9
|
+
def disable_user(key_id)
|
10
|
+
update_riakcs_user(key_id, { :status => 'disabled' })
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
include UserUtils
|
16
|
+
|
17
|
+
def disable_user(key_id)
|
18
|
+
update_mock_user(key_id, { :status => 'disabled' })
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
include Utils
|
6
|
+
include UserUtils
|
7
|
+
include MultipartUtils
|
8
|
+
|
9
|
+
def enable_user(key_id)
|
10
|
+
update_riakcs_user(key_id, { :status => 'enabled' })
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
include UserUtils
|
16
|
+
|
17
|
+
def enable_user(key_id)
|
18
|
+
update_mock_user(key_id, { :status => 'enabled' })
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
include Utils
|
6
|
+
include MultipartUtils
|
7
|
+
|
8
|
+
def get_user(key_id)
|
9
|
+
response = @s3_connection.get_object('riak-cs', "user/#{key_id}", { 'Accept' => 'application/json' })
|
10
|
+
response.body = Fog::JSON.decode(response.body)
|
11
|
+
response
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_user(key_id)
|
17
|
+
if user = data[key_id]
|
18
|
+
Excon::Response.new.tap do |response|
|
19
|
+
response.status = 200
|
20
|
+
response.headers['Content-Type'] = 'application/json'
|
21
|
+
response.body = {
|
22
|
+
"email" => user[:email],
|
23
|
+
"display_name" => user[:name],
|
24
|
+
"name" => "user123",
|
25
|
+
"key_id" => "XXXXXXXXXXXXXXXXXXXX",
|
26
|
+
"key_secret" => user[:key_secret],
|
27
|
+
"id" => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
28
|
+
"status" => user[:status]
|
29
|
+
}
|
30
|
+
end
|
31
|
+
else
|
32
|
+
Excon::Response.new.tap do |response|
|
33
|
+
response.status = 404
|
34
|
+
response.headers['Content-Type'] = 'application/json'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
include Utils
|
6
|
+
include MultipartUtils
|
7
|
+
|
8
|
+
def list_users(options = {})
|
9
|
+
response = @s3_connection.get_object('riak-cs', 'users', { 'Accept' => 'application/json', 'query' => options })
|
10
|
+
|
11
|
+
boundary = extract_boundary(response.headers['Content-Type'])
|
12
|
+
parts = parse(response.body, boundary)
|
13
|
+
decoded = parts.map { |part| Fog::JSON.decode(part[:body]) }
|
14
|
+
|
15
|
+
response.body = decoded.flatten
|
16
|
+
|
17
|
+
response
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Mock
|
22
|
+
def list_users(options = {})
|
23
|
+
filtered_data = options[:status] ? data.select { |key, value| value[:status] == options[:status] } : data
|
24
|
+
|
25
|
+
Excon::Response.new.tap do |response|
|
26
|
+
response.status = 200
|
27
|
+
response.body = filtered_data.map do |key, value|
|
28
|
+
{
|
29
|
+
"email" => value[:email],
|
30
|
+
"display_name" => value[:name],
|
31
|
+
"name" => "user123",
|
32
|
+
"key_id" => key,
|
33
|
+
"key_secret" => value[:key_secret],
|
34
|
+
"id" => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
35
|
+
"status" => value[:status]
|
36
|
+
}
|
37
|
+
end.compact
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
include Utils
|
6
|
+
include UserUtils
|
7
|
+
include MultipartUtils
|
8
|
+
|
9
|
+
def regrant_secret(key_id)
|
10
|
+
update_riakcs_user(key_id, { :new_key_secret => true })
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
include UserUtils
|
16
|
+
|
17
|
+
def regrant_secret(key_id)
|
18
|
+
update_mock_user(key_id, { :new_key_secret => true })
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Provisioning
|
4
|
+
class Real
|
5
|
+
include Utils
|
6
|
+
include UserUtils
|
7
|
+
include MultipartUtils
|
8
|
+
|
9
|
+
def update_user(key_id, user)
|
10
|
+
update_riakcs_user(key_id, user)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
include UserUtils
|
16
|
+
|
17
|
+
def update_user(key_id, user)
|
18
|
+
update_mock_user(key_id, user)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module RiakCS
|
5
|
+
class Usage < Fog::Service
|
6
|
+
requires :riakcs_access_key_id, :riakcs_secret_access_key
|
7
|
+
recognizes :host, :path, :port, :scheme, :persistent
|
8
|
+
|
9
|
+
request_path 'fog/riakcs/usage'
|
10
|
+
request :get_usage
|
11
|
+
|
12
|
+
class Mock
|
13
|
+
include Fog::RiakCS::Utils
|
14
|
+
|
15
|
+
def self.data
|
16
|
+
@data ||= Hash.new do |hash, key|
|
17
|
+
hash[key] = {}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.reset
|
22
|
+
@data = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(options = {})
|
26
|
+
configure_uri_options(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
def data
|
30
|
+
self.class.data[riakcs_uri]
|
31
|
+
end
|
32
|
+
|
33
|
+
def reset_data
|
34
|
+
self.class.data.delete(riakcs_uri)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Real
|
39
|
+
include Fog::RiakCS::Utils
|
40
|
+
|
41
|
+
def initialize(options = {})
|
42
|
+
configure_uri_options(options)
|
43
|
+
@riakcs_access_key_id = options[:riakcs_access_key_id]
|
44
|
+
@riakcs_secret_access_key = options[:riakcs_secret_access_key]
|
45
|
+
@connection_options = options[:connection_options] || {}
|
46
|
+
@persistent = options[:persistent] || false
|
47
|
+
|
48
|
+
@connection = Fog::Storage.new(
|
49
|
+
:provider => 'AWS',
|
50
|
+
:aws_access_key_id => @riakcs_access_key_id,
|
51
|
+
:aws_secret_access_key => @riakcs_secret_access_key,
|
52
|
+
:host => @host,
|
53
|
+
:port => @port,
|
54
|
+
:scheme => @scheme,
|
55
|
+
:connection_options => @connection_options
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
class Usage
|
4
|
+
module Utils
|
5
|
+
TYPES_TO_STRING = { :access => 'a', :storage => 'b' }
|
6
|
+
DEFAULT_TYPES = TYPES_TO_STRING.keys
|
7
|
+
DEFAULT_FORMAT = :json
|
8
|
+
|
9
|
+
def sanitize_and_convert_time(time)
|
10
|
+
time.utc.iso8601.gsub(/[:-]/, '')
|
11
|
+
end
|
12
|
+
|
13
|
+
def format_and_types_to_path(format, types)
|
14
|
+
format_character = format.to_s.split('').first
|
15
|
+
type_characters = types.map { |t| TYPES_TO_STRING[t] }.compact
|
16
|
+
|
17
|
+
[type_characters, format_character].flatten.compact.join
|
18
|
+
end
|
19
|
+
|
20
|
+
def request_uri(access_key_id, options)
|
21
|
+
format = DEFAULT_FORMAT
|
22
|
+
types = options[:types] || DEFAULT_TYPES
|
23
|
+
start_time = options[:start_time] || Time.now.utc - 86400
|
24
|
+
end_time = options[:end_time] || Time.now.utc
|
25
|
+
|
26
|
+
[access_key_id,
|
27
|
+
format_and_types_to_path(format, types),
|
28
|
+
sanitize_and_convert_time(start_time),
|
29
|
+
sanitize_and_convert_time(end_time)].join('.')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Real
|
34
|
+
include Utils
|
35
|
+
|
36
|
+
def get_usage(access_key_id, options = {})
|
37
|
+
response = @connection.get_object('riak-cs', ["usage", request_uri(access_key_id, options)].join("/"))
|
38
|
+
|
39
|
+
if !response.body.empty?
|
40
|
+
response.body = Fog::JSON.decode(response.body)
|
41
|
+
end
|
42
|
+
response
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Mock
|
47
|
+
include Utils
|
48
|
+
|
49
|
+
def get_usage(access_key, options = {})
|
50
|
+
Excon::Response.new.tap do |response|
|
51
|
+
response.status = 200
|
52
|
+
response.headers['Content-Type'] = 'application/json'
|
53
|
+
response.body = {
|
54
|
+
'Access' => {
|
55
|
+
'Nodes' => [],
|
56
|
+
'Errors' => []
|
57
|
+
},
|
58
|
+
'Storage' => {
|
59
|
+
'Samples' => [],
|
60
|
+
'Errors' => []
|
61
|
+
}
|
62
|
+
}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
module UserUtils
|
4
|
+
def update_riakcs_user(key_id, user)
|
5
|
+
response = @s3_connection.put_object('riak-cs', "user/#{key_id}", Fog::JSON.encode(user), { 'Content-Type' => 'application/json' })
|
6
|
+
if !response.body.empty?
|
7
|
+
response.body = Fog::JSON.decode(response.body)
|
8
|
+
end
|
9
|
+
response
|
10
|
+
end
|
11
|
+
|
12
|
+
def update_mock_user(key_id, user)
|
13
|
+
if data[key_id]
|
14
|
+
if status = user[:status]
|
15
|
+
data[key_id][:status] = status
|
16
|
+
end
|
17
|
+
|
18
|
+
if user[:new_key_secret]
|
19
|
+
data[key_id][:key_secret] = rand(100).to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
Excon::Response.new.tap do |response|
|
23
|
+
response.status = 200
|
24
|
+
response.body = data[key_id]
|
25
|
+
end
|
26
|
+
else
|
27
|
+
Excon::Response.new.tap do |response|
|
28
|
+
response.status = 403
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fog
|
2
|
+
module RiakCS
|
3
|
+
module Utils
|
4
|
+
def configure_uri_options(options = {})
|
5
|
+
@host = options[:host] || 'localhost'
|
6
|
+
@persistent = options[:persistent] || true
|
7
|
+
@port = options[:port] || 8080
|
8
|
+
@scheme = options[:scheme] || 'http'
|
9
|
+
end
|
10
|
+
|
11
|
+
def riakcs_uri
|
12
|
+
"#{@scheme}://#{@host}:#{@port}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|