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)
|
Fog::Mock.random_hex(16)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
attr_reader :current_user_name
|
||||||
|
|
||||||
def initialize(options={})
|
def initialize(options={})
|
||||||
@use_iam_profile = options[:use_iam_profile]
|
@use_iam_profile = options[:use_iam_profile]
|
||||||
@aws_credentials_expire_at = Time::now + 20
|
@aws_credentials_expire_at = Time::now + 20
|
||||||
|
|
@ -184,7 +186,7 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
def data
|
def data
|
||||||
self.class.data[@aws_access_key_id]
|
self.class.data[@root_access_key_id]
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_id
|
def account_id
|
||||||
|
|
@ -192,12 +194,24 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
def reset_data
|
def reset_data
|
||||||
self.class.data.delete(@aws_access_key_id)
|
self.class.data.delete(@root_access_key_id)
|
||||||
current_user
|
current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup_credentials(options)
|
def setup_credentials(options)
|
||||||
@aws_access_key_id = options[:aws_access_key_id]
|
@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
|
end
|
||||||
|
|
||||||
def current_user
|
def current_user
|
||||||
|
|
@ -206,7 +220,7 @@ module Fog
|
||||||
root[:arn].gsub!("user/", "") # root user doesn't have "user/" key prefix
|
root[:arn].gsub!("user/", "") # root user doesn't have "user/" key prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
self.data[:users]["root"]
|
self.data[:users][self.current_user_name]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,16 +38,17 @@ module Fog
|
||||||
if data[:users].key? user
|
if data[:users].key? user
|
||||||
access_keys_data = data[:users][user][:access_keys]
|
access_keys_data = data[:users][user][:access_keys]
|
||||||
else
|
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
|
end
|
||||||
else
|
else
|
||||||
access_keys_data = data[:access_keys]
|
access_keys_data = data[:access_keys]
|
||||||
end
|
end
|
||||||
|
|
||||||
key = { 'SecretAccessKey' => Fog::Mock.random_base64(40),
|
key = {
|
||||||
'Status' => 'Active',
|
'SecretAccessKey' => Fog::Mock.random_base64(40),
|
||||||
'AccessKeyId' => Fog::AWS::Mock.key_id(20),
|
'Status' => 'Active',
|
||||||
}
|
'AccessKeyId' => Fog::AWS::Mock.key_id(20),
|
||||||
|
}
|
||||||
if user
|
if user
|
||||||
key["UserName"] = user
|
key["UserName"] = user
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,13 @@ module Fog
|
||||||
'CreateDate' => user[:created_at]
|
'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)
|
elsif !self.data[:users].key?(username)
|
||||||
raise Fog::AWS::IAM::NotFound.new("The user with name #{username} cannot be found.")
|
raise Fog::AWS::IAM::NotFound.new("The user with name #{username} cannot be found.")
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,26 @@ Shindo.tests("Fog::Compute[:iam] | users", ['aws','iam']) do
|
||||||
user.access_keys.empty?
|
user.access_keys.empty?
|
||||||
end
|
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
|
tests('#password=nil', 'without a password').succeeds do
|
||||||
user.password = nil
|
user.password = nil
|
||||||
user.password_created_at.nil?
|
user.password_created_at.nil?
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue