stratus 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ == 1.1.0 2011-04-11
2
+ Implement some methods for the login profile. (Norihito Yoshioka)
3
+
1
4
  == 1.0.1 2011-01-21
2
5
  added activesupport to dependency. added workaround for RSpec 2. (juno)
3
6
  updated documentation. (juno)
@@ -75,6 +75,13 @@ And put it by PutUserPolicy API.
75
75
  >> result['GetUserPolicyResult']['PolicyDocument']
76
76
  "{\"Statement\":[{\"Action\":\"ec2:Describe*\",\"Resource\":\"*\",\"Effect\":\"Allow\"}]}"
77
77
 
78
+ Create login profile to access AWS Management Console.
79
+
80
+ >> @iam.create_login_profile(:user_name => 'john', :password => 'new password')
81
+ >> result = @iam.get_login_profile(:user_name => 'john')
82
+ >> @iam.update_login_profile(:user_name => 'john', :password => 'changed password')
83
+ >> @iam.delete_login_profile(:user_name => 'john')
84
+
78
85
  Delete an user policy and user.
79
86
 
80
87
  >> @iam.delete_user_policy :user_name => 'john', :policy_name => 'AllowDescribeEC2'
@@ -99,6 +106,7 @@ REFERENCES:
99
106
 
100
107
  * [Using AWS Identity and Access Management](http://docs.amazonwebservices.com/IAM/latest/UserGuide/)
101
108
  * [AWS Identity and Access Management API Reference](http://docs.amazonwebservices.com/IAM/latest/APIReference/)
109
+ * [Using AWS Identity and Access Management](http://docs.amazonwebservices.com/IAM/latest/UserGuide/index.html?Using_AWSManagementConsole.html)
102
110
 
103
111
  LICENSE:
104
112
  ----
@@ -108,4 +116,4 @@ This software is licensed under the MIT licenses.
108
116
  COPYRIGHT:
109
117
  ----
110
118
 
111
- Copyright (c) 2010 Serverworks Co.,Ltd. See LICENSE for details.
119
+ Copyright (c) 2011 Serverworks Co.,Ltd. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.1.0
@@ -422,6 +422,52 @@ module Stratus
422
422
  Response.parse(:xml => response.to_str)
423
423
  end
424
424
 
425
+ # Calls get_login_profile API
426
+ #
427
+ # @param [Hash] options
428
+ # @return [Hash]
429
+ def get_login_profile(options = {})
430
+ check_user_name(options)
431
+ params = { 'UserName' => options[:user_name] }
432
+ response = call_api('GetLoginProfile', params)
433
+ Response.parse(:xml => response.to_str)
434
+ end
435
+
436
+ # Calls create_login_profile API
437
+ #
438
+ # @param [Hash] options
439
+ # @return [Hash]
440
+ def create_login_profile(options = {})
441
+ check_user_name(options)
442
+ check_password(options)
443
+ params = { 'UserName' => options[:user_name], 'Password' => options[:password] }
444
+ response = call_api('CreateLoginProfile', params)
445
+ Response.parse(:xml => response.to_str)
446
+ end
447
+
448
+ # Calls update_login_profile API
449
+ #
450
+ # @param [Hash] options
451
+ # @return [Hash]
452
+ def update_login_profile(options = {})
453
+ check_user_name(options)
454
+ check_password(options)
455
+ params = { 'UserName' => options[:user_name], 'Password' => options[:password] }
456
+ response = call_api('UpdateLoginProfile', params)
457
+ Response.parse(:xml => response.to_str)
458
+ end
459
+
460
+ # Calls delete_login_profile API
461
+ #
462
+ # @param [Hash] options
463
+ # @return [Hash]
464
+ def delete_login_profile(options = {})
465
+ check_user_name(options)
466
+ params = { 'UserName' => options[:user_name] }
467
+ response = call_api('DeleteLoginProfile', params)
468
+ Response.parse(:xml => response.to_str)
469
+ end
470
+
425
471
  # @param [String] action AWS IAM API action name
426
472
  # @param [Hash] params
427
473
  # @return RestClient::Response
@@ -567,6 +613,16 @@ module Stratus
567
613
  options
568
614
  end
569
615
 
616
+ # Check to be sure the :password option exist
617
+ #
618
+ # @param [Hash] options
619
+ # @return [Hash]
620
+ # @raise [ArgumentError] throw if the option[:policy_document] is nil or empty.
621
+ def check_password(options)
622
+ raise ArgumentError, 'No password provided' if options[:password].nil? || options[:password].empty?
623
+ options
624
+ end
625
+
570
626
  # Make a parameters hash for ***List methos from options
571
627
  #
572
628
  # ex. ListAccessKeys, ListUsers, ListGroups, etc...
@@ -751,6 +751,103 @@ describe "Stratus::AWS::IAM::Base" do
751
751
  end
752
752
  end
753
753
 
754
+ context '#get_login_profile' do
755
+ before(:each) do
756
+ response = stub(RestClient::Response, :code => '200', :to_str => get_login_profile_response, :empty? => false)
757
+ RestClient.stub!(:get).and_return(response)
758
+ end
759
+
760
+ it "must be able to get the intended user's login profile." do
761
+ result = @iam.get_login_profile(:user_name => 'User1')
762
+ result.should have_key('GetLoginProfileResult')
763
+ result['GetLoginProfileResult'].should have_key('LoginProfile')
764
+ result['GetLoginProfileResult']['LoginProfile'].should have_key('UserName')
765
+ result['GetLoginProfileResult']['LoginProfile'].should have_key('CreateDate')
766
+ end
767
+
768
+ it "must raise ArgumentError if the :user_name option haven't been passed." do
769
+ lambda { @iam.get_login_profile }.should raise_error(ArgumentError)
770
+ end
771
+ end
772
+
773
+ context '#create_login_profile' do
774
+ before(:each) do
775
+ response = stub(RestClient::Response, :code => '200', :to_str => create_login_profile_response)
776
+ RestClient.stub!(:get).and_return(response)
777
+ end
778
+
779
+ it "must be able to create a login profile" do
780
+ result = @iam.create_login_profile(:user_name => 'User1', :password => 'new password')
781
+ result.should have_key('CreateLoginProfileResult')
782
+ result['CreateLoginProfileResult'].should have_key('LoginProfile')
783
+ result['CreateLoginProfileResult']['LoginProfile'].should have_key('UserName')
784
+ result['CreateLoginProfileResult']['LoginProfile'].should have_key('CreateDate')
785
+ end
786
+
787
+ it "must raise ArgumentError if the :user_name option haven't been passed." do
788
+ lambda { @iam.create_login_profile(:password => 'password') }.should raise_error(ArgumentError)
789
+ end
790
+
791
+ it "must raise ArgumentError if the :password option haven't been passed." do
792
+ lambda { @iam.create_login_profile(:user_name => 'User1') }.should raise_error(ArgumentError)
793
+ end
794
+ end
795
+
796
+ context '#update_login_profile' do
797
+ before(:each) do
798
+ response = stub(RestClient::Response, :code => '200', :to_str => update_login_profile_response)
799
+ RestClient.stub!(:get).and_return(response)
800
+ end
801
+
802
+ it "must be able to update the intended user's login password" do
803
+ result = @iam.update_login_profile(:user_name => 'User1', :password => 'changed password')
804
+ result.should have_key('ResponseMetadata')
805
+ end
806
+
807
+ it "must raise ArgumentError if the :user_name option haven't been passed." do
808
+ lambda {
809
+ @iam.update_login_profile(:password => 'changed password')
810
+ }.should raise_error(ArgumentError)
811
+ end
812
+
813
+ it "must raise ArgumentError if the :status option haven't been passed." do
814
+ lambda {
815
+ @iam.update_login_profile(:user_name => 'User1')
816
+ }.should raise_error(ArgumentError)
817
+ end
818
+
819
+ it "must call the 'call_api' internally" do
820
+ @iam.should_receive(:call_api).with(
821
+ 'UpdateLoginProfile', {'UserName' => 'user01', 'Password' => 'pass01'}
822
+ ).once.and_return(update_login_profile_response)
823
+ @iam.update_login_profile(:user_name => 'user01', :password => 'pass01')
824
+ end
825
+ end
826
+
827
+ context '#delete_login_profile' do
828
+ before(:each) do
829
+ response = stub(RestClient::Response, :code => '200', :to_str => delete_login_profile_response)
830
+ RestClient.stub!(:get).and_return(response)
831
+ end
832
+
833
+ it "must be able to delete the intended user's login profile" do
834
+ result = @iam.delete_login_profile(:user_name => 'User1')
835
+ result.should have_key('ResponseMetadata')
836
+ end
837
+
838
+ it "must raise ArgumentError if the :user_name option haven't been passed." do
839
+ lambda { @iam.delete_login_profile(:name => 'User1') }.should raise_error(ArgumentError)
840
+ end
841
+
842
+ it "must call the 'call_api' internally." do
843
+ @iam.should_receive(:call_api).with(
844
+ 'DeleteLoginProfile', {'UserName' => 'user01'}
845
+ ).once.and_return(delete_login_profile_response)
846
+ @iam.delete_login_profile(:user_name => 'user01')
847
+ end
848
+ end
849
+
850
+
754
851
  def get_group_response
755
852
  return <<-RES
756
853
  <GetGroupResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
@@ -1220,5 +1317,57 @@ nXg=
1220
1317
  </ListSigningCertificatesResponse>
1221
1318
  RES
1222
1319
  end
1223
- end
1224
1320
 
1321
+ def get_login_profile_response
1322
+ return <<-RES
1323
+ <GetLoginProfileResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1324
+ <GetLoginProfileResult>
1325
+ <LoginProfile>
1326
+ <UserName>User1</UserName>
1327
+ <CreateDate>2011-04-11T05:23:02Z</CreateDate>
1328
+ </LoginProfile>
1329
+ </GetLoginProfileResult>
1330
+ <ResponseMetadata>
1331
+ <RequestId>7a8379c0-63fc-11e0-a132-51406a379f1d</RequestId>
1332
+ </ResponseMetadata>
1333
+ </GetLoginProfileResponse>
1334
+ RES
1335
+ end
1336
+
1337
+ def create_login_profile_response
1338
+ return <<-RES
1339
+ <CreateLoginProfileResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1340
+ <CreateLoginProfileResult>
1341
+ <LoginProfile>
1342
+ <UserName>User1</UserName>
1343
+ <CreateDate>2011-04-11T05:23:02.945Z</CreateDate>
1344
+ </LoginProfile>
1345
+ </CreateLoginProfileResult>
1346
+ <ResponseMetadata>
1347
+ <RequestId>c5e4018a-63fb-11e0-8b3f-29b8ea28663b</RequestId>
1348
+ </ResponseMetadata>
1349
+ </CreateLoginProfileResponse>
1350
+ RES
1351
+ end
1352
+
1353
+ def update_login_profile_response
1354
+ return <<-RES
1355
+ <UpdateLoginProfileResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1356
+ <ResponseMetadata>
1357
+ <RequestId>5af58461-63fd-11e0-ab24-a9776016b3b8</RequestId>
1358
+ </ResponseMetadata>
1359
+ </UpdateLoginProfileResponse>
1360
+ RES
1361
+ end
1362
+
1363
+ def delete_login_profile_response
1364
+ return <<-RES
1365
+ <DeleteLoginProfileResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
1366
+ <ResponseMetadata>
1367
+ <RequestId>9650fb39-63fd-11e0-833a-8f61616d730e</RequestId>
1368
+ </ResponseMetadata>
1369
+ </DeleteLoginProfileResponse>
1370
+ RES
1371
+ end
1372
+
1373
+ end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stratus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
4
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
5
+ version: 1.1.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Serverworks Co.,Ltd.
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-01-21 00:00:00 +09:00
13
+ date: 2011-04-11 00:00:00 +09:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,11 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - ">="
28
23
  - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 2
32
- - 3
33
- - 10
34
24
  version: 2.3.10
35
25
  type: :runtime
36
26
  version_requirements: *id001
@@ -42,11 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - ">="
44
34
  - !ruby/object:Gem::Version
45
- hash: 15
46
- segments:
47
- - 1
48
- - 0
49
- - 12
50
35
  version: 1.0.12
51
36
  type: :runtime
52
37
  version_requirements: *id002
@@ -58,11 +43,6 @@ dependencies:
58
43
  requirements:
59
44
  - - ">="
60
45
  - !ruby/object:Gem::Version
61
- hash: 13
62
- segments:
63
- - 1
64
- - 6
65
- - 1
66
46
  version: 1.6.1
67
47
  type: :runtime
68
48
  version_requirements: *id003
@@ -74,11 +54,6 @@ dependencies:
74
54
  requirements:
75
55
  - - ">="
76
56
  - !ruby/object:Gem::Version
77
- hash: 55
78
- segments:
79
- - 0
80
- - 9
81
- - 6
82
57
  version: 0.9.6
83
58
  type: :development
84
59
  version_requirements: *id004
@@ -90,11 +65,6 @@ dependencies:
90
65
  requirements:
91
66
  - - ">="
92
67
  - !ruby/object:Gem::Version
93
- hash: 13
94
- segments:
95
- - 1
96
- - 2
97
- - 9
98
68
  version: 1.2.9
99
69
  type: :development
100
70
  version_requirements: *id005
@@ -141,23 +111,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
111
  requirements:
142
112
  - - ">="
143
113
  - !ruby/object:Gem::Version
144
- hash: 3
145
- segments:
146
- - 0
147
114
  version: "0"
148
115
  required_rubygems_version: !ruby/object:Gem::Requirement
149
116
  none: false
150
117
  requirements:
151
118
  - - ">="
152
119
  - !ruby/object:Gem::Version
153
- hash: 3
154
- segments:
155
- - 0
156
120
  version: "0"
157
121
  requirements: []
158
122
 
159
123
  rubyforge_project:
160
- rubygems_version: 1.4.1
124
+ rubygems_version: 1.5.0
161
125
  signing_key:
162
126
  specification_version: 3
163
127
  summary: Interface classes for the AWS Identity and Access Management (IAM)