1
0
Fork 0
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:
Josh Lane 2015-05-29 14:14:30 -07:00
parent 0cc4279333
commit 6f87a3e803
4 changed files with 50 additions and 8 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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?