mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00
generate an iam user and re-use data
This commit is contained in:
parent
0cc4279333
commit
6f87a3e803
4 changed files with 50 additions and 8 deletions
|
@ -176,6 +176,8 @@ module Fog
|
|||
Fog::Mock.random_hex(16)
|
||||
end
|
||||
|
||||
attr_reader :current_user_name
|
||||
|
||||
def initialize(options={})
|
||||
@use_iam_profile = options[:use_iam_profile]
|
||||
@aws_credentials_expire_at = Time::now + 20
|
||||
|
@ -184,7 +186,7 @@ module Fog
|
|||
end
|
||||
|
||||
def data
|
||||
self.class.data[@aws_access_key_id]
|
||||
self.class.data[@root_access_key_id]
|
||||
end
|
||||
|
||||
def account_id
|
||||
|
@ -192,12 +194,24 @@ module Fog
|
|||
end
|
||||
|
||||
def reset_data
|
||||
self.class.data.delete(@aws_access_key_id)
|
||||
self.class.data.delete(@root_access_key_id)
|
||||
current_user
|
||||
end
|
||||
|
||||
def setup_credentials(options)
|
||||
@aws_access_key_id = options[:aws_access_key_id]
|
||||
existing_user = nil
|
||||
|
||||
@root_access_key_id, _ = self.class.data.find { |_, d|
|
||||
d[:users].find { |_, user|
|
||||
existing_user = user[:access_keys].find { |key|
|
||||
key["AccessKeyId"] == @aws_access_key_id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@root_access_key_id ||= @aws_access_key_id
|
||||
@current_user_name = existing_user ? existing_user["UserName"] : "root"
|
||||
end
|
||||
|
||||
def current_user
|
||||
|
@ -206,7 +220,7 @@ module Fog
|
|||
root[:arn].gsub!("user/", "") # root user doesn't have "user/" key prefix
|
||||
end
|
||||
|
||||
self.data[:users]["root"]
|
||||
self.data[:users][self.current_user_name]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -38,16 +38,17 @@ module Fog
|
|||
if data[:users].key? user
|
||||
access_keys_data = data[:users][user][:access_keys]
|
||||
else
|
||||
raise Fog::AWS::IAM::NotFound.new('The user with name #{user_name} cannot be found.')
|
||||
raise Fog::AWS::IAM::NotFound.new("The user with name #{user_name} cannot be found.")
|
||||
end
|
||||
else
|
||||
access_keys_data = data[:access_keys]
|
||||
end
|
||||
|
||||
key = { 'SecretAccessKey' => Fog::Mock.random_base64(40),
|
||||
'Status' => 'Active',
|
||||
'AccessKeyId' => Fog::AWS::Mock.key_id(20),
|
||||
}
|
||||
key = {
|
||||
'SecretAccessKey' => Fog::Mock.random_base64(40),
|
||||
'Status' => 'Active',
|
||||
'AccessKeyId' => Fog::AWS::Mock.key_id(20),
|
||||
}
|
||||
if user
|
||||
key["UserName"] = user
|
||||
end
|
||||
|
|
|
@ -51,6 +51,13 @@ module Fog
|
|||
'CreateDate' => user[:created_at]
|
||||
}
|
||||
|
||||
unless @current_user_name == "root"
|
||||
user_body.merge!(
|
||||
'Path' => user[:path],
|
||||
'UserName' => @current_user_name
|
||||
)
|
||||
end
|
||||
|
||||
elsif !self.data[:users].key?(username)
|
||||
raise Fog::AWS::IAM::NotFound.new("The user with name #{username} cannot be found.")
|
||||
else
|
||||
|
|
|
@ -56,6 +56,26 @@ Shindo.tests("Fog::Compute[:iam] | users", ['aws','iam']) do
|
|||
user.access_keys.empty?
|
||||
end
|
||||
|
||||
# test that users create in mock and be signed in via access key and share data
|
||||
if Fog.mocking?
|
||||
tests("mocking access key usage") do
|
||||
access_key = user.access_keys.create
|
||||
|
||||
user_client = Fog::AWS::IAM.new(
|
||||
:aws_access_key_id => access_key.identity,
|
||||
:aws_secret_access_key => access_key.secret_access_key
|
||||
)
|
||||
|
||||
tests("sets correct data").succeeds do
|
||||
user_client.users.size > 1
|
||||
end
|
||||
|
||||
tests("set current user name").succeeds do
|
||||
user_client.current_user_name == user.identity
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
tests('#password=nil', 'without a password').succeeds do
|
||||
user.password = nil
|
||||
user.password_created_at.nil?
|
||||
|
|
Loading…
Add table
Reference in a new issue