Skip to content

Commit a86ef52

Browse files
committed
minor cleanup and add first pass at schedule_key_deletion method and mock
1 parent 9f50ef8 commit a86ef52

File tree

8 files changed

+108
-27
lines changed

8 files changed

+108
-27
lines changed

lib/fog/aws/kms.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class KMS < Fog::Service
2020
request :list_keys
2121
request :create_key
2222
request :describe_key
23+
request :schedule_key_deletion
2324

2425
model_path 'fog/aws/models/kms'
2526
model :key

lib/fog/aws/parsers/kms/describe_key.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ def start_element(name, attrs = [])
1717

1818
def end_element(name)
1919
case name
20-
when 'KeyUsage', 'AWSAccountId', 'Description', 'KeyId', 'Arn'
20+
when 'Arn', 'AWSAccountId', 'Description', 'KeyId', 'KeyState', 'KeyUsage'
2121
@key[name] = value
22-
when 'CreationDate'
22+
when 'CreationDate', 'DeletionDate'
2323
@key[name] = Time.parse(value)
2424
when 'Enabled'
2525
@key[name] = (value == 'true')
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module Fog
2+
module Parsers
3+
module AWS
4+
module KMS
5+
class ScheduleKeyDeletion < Fog::Parsers::Base
6+
def reset
7+
@response = {}
8+
end
9+
10+
def start_element(name, attrs = [])
11+
super
12+
end
13+
14+
def end_element(name)
15+
case name
16+
when 'DeletionDate'
17+
@response[name] = Time.parse(value)
18+
when 'KeyId', 'KeyState'
19+
@response[name] = value
20+
when 'PendingWindowInDays'
21+
@response[name] = value.to_i
22+
end
23+
end
24+
end
25+
end
26+
end
27+
end
28+
end

lib/fog/aws/requests/kms/create_key.rb

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,40 @@ class KMS
44
class Real
55
require 'fog/aws/parsers/kms/describe_key'
66

7-
def create_key(policy = nil, description = nil, usage = "ENCRYPT_DECRYPT")
7+
def create_key(policy = nil, description = nil, usage = 'ENCRYPT_DECRYPT')
88
request(
9-
'Action' => 'CreateKey',
9+
'Action' => 'CreateKey',
1010
'Description' => description,
11-
'KeyUsage' => usage,
12-
'Policy' => policy,
13-
:parser => Fog::Parsers::AWS::KMS::DescribeKey.new
11+
'KeyUsage' => usage,
12+
'Policy' => policy,
13+
:parser => Fog::Parsers::AWS::KMS::DescribeKey.new
1414
)
1515
end
1616
end
1717

1818
class Mock
19-
def create_key(policy = nil, description = nil, usage = "ENCRYPT_DECRYPT")
19+
def create_key(_policy = nil, description = nil, usage = 'ENCRYPT_DECRYPT')
2020
response = Excon::Response.new
2121
key_id = UUID.uuid
2222
key_arn = Fog::AWS::Mock.arn("kms", self.account_id, "key/#{key_id}", @region)
2323

2424
key = {
25-
"KeyUsage" => usage,
26-
"AWSAccountId" => self.account_id,
27-
"KeyId" => key_id,
28-
"Description" => description,
29-
"CreationDate" => Time.now,
30-
"Arn" => key_arn,
31-
"Enabled" => true,
25+
'Arn' => key_arn,
26+
'AWSAccountId' => self.account_id,
27+
'CreationDate' => Time.now.utc,
28+
'DeletionDate' => nil,
29+
'Description' => description,
30+
'Enabled' => true,
31+
'KeyId' => key_id,
32+
'KeyState' => 'Enabled',
33+
'KeyUsage' => usage
3234
}
3335

3436
# @todo use default policy
3537

3638
self.data[:keys][key_id] = key
3739

38-
response.body = { "KeyMetadata" => key }
40+
response.body = { 'KeyMetadata' => key }
3941
response
4042
end
4143
end

lib/fog/aws/requests/kms/list_keys.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ def list_keys(options={})
4343
key_set = if marker
4444
self.data[:markers][marker] || []
4545
else
46-
self.data[:keys].inject([]) { |r,(k,v)|
47-
r << { "KeyId" => k, "KeyArn" => v["Arn"] }
48-
}
46+
self.data[:keys].inject([]) do |r, (k, v)|
47+
r << { 'KeyArn' => v['Arn'], 'KeyId' => k }
48+
end
4949
end
5050

5151
keys = if limit
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
module Fog
2+
module AWS
3+
class KMS
4+
class Real
5+
require 'fog/aws/parsers/kms/schedule_key_deletion'
6+
7+
def schedule_key_deletion(identifier, pending_window_in_days)
8+
request(
9+
'Action' => 'ScheduleKeyDeletion',
10+
'KeyId' => identifier,
11+
'PendingWindowInDays' => pending_window_in_days,
12+
:parser => Fog::Parsers::AWS::KMS::ScheduleKeyDeletion.new
13+
)
14+
end
15+
end
16+
17+
class Mock
18+
def schedule_key_deletion(identifier, pending_window_in_days)
19+
response = Excon::Response.new
20+
key = self.data[:keys][identifier]
21+
22+
key['DeletionDate'] = Time.now + (60 * 60 * 24 * pending_window_in_days)
23+
key['Enabled'] = false
24+
key['KeyState'] = 'PendingDeletion'
25+
26+
response.body = {
27+
'DeletionDate' => key['DeletionDate'],
28+
'KeyId' => key['KeyId'],
29+
'KeyState' => key['KeyState'],
30+
'PendingWindowInDays' => pending_window_in_days
31+
}
32+
response
33+
end
34+
end
35+
end
36+
end
37+
end

tests/requests/kms/helper.rb

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,29 @@ module Formats
77

88
DESCRIBE_KEY = {
99
'KeyMetadata' => {
10-
'KeyUsage' => String,
10+
'Arn' => String,
1111
'AWSAccountId' => String,
12-
'KeyId' => String,
13-
'Description' => Fog::Nullable::String,
1412
'CreationDate' => Time,
15-
'Arn' => String,
16-
'Enabled' => Fog::Boolean
13+
'DeletionDate' => Fog::Nullable::Time,
14+
'Description' => Fog::Nullable::String,
15+
'Enabled' => Fog::Boolean,
16+
'KeyId' => String,
17+
'KeyState' => String,
18+
'KeyUsage' => String
1719
}
1820
}.freeze
1921

2022
LIST_KEYS = {
21-
'Keys' => [{ 'KeyId' => String, 'KeyArn' => String }],
22-
'Truncated' => Fog::Boolean,
23-
'Marker' => Fog::Nullable::String
23+
'Keys' => [{ 'KeyArn' => String, 'KeyId' => String }],
24+
'Marker' => Fog::Nullable::String,
25+
'Truncated' => Fog::Boolean
26+
}.freeze
27+
28+
SCHEDULE_KEY_DELETION = {
29+
'DeletionDate' => Time,
30+
'KeyId' => String,
31+
'KeyState' => String,
32+
'PendingWindowInDays' => Integer
2433
}.freeze
2534
end
2635
end

tests/requests/kms/key_tests.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@
1919
tests('#list_keys').data_matches_schema(AWS::KMS::Formats::LIST_KEYS) do
2020
Fog::AWS[:kms].list_keys.body
2121
end
22+
23+
tests('#schedule_key_deletion').data_matches_schema(AWS::KMS::Formats::SCHEDULE_KEY_DELETION) do
24+
Fog::AWS[:kms].schedule_key_deletion(key_id, 7)
25+
end
2226
end

0 commit comments

Comments
 (0)