Skip to content

Commit bbc2d80

Browse files
authored
Application credentials support (#543)
* Adding first draft of app credential support * Adding delete support * Adding full support for application credentials * Removing update app creds funciton * Refactoring * Removing log puts and fixing mocks
1 parent 95ed36e commit bbc2d80

8 files changed

Lines changed: 183 additions & 1 deletion

lib/fog/openstack/identity/v3.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class V3 < Fog::Service
3737
collection :role_assignments
3838
model :os_credential
3939
collection :os_credentials
40+
model :application_credential
41+
collection :application_credentials
4042
model :policy
4143
collection :policies
4244

@@ -111,12 +113,16 @@ class V3 < Fog::Service
111113
request :create_os_credential
112114
request :update_os_credential
113115
request :delete_os_credential
116+
request :list_application_credentials
117+
request :create_application_credentials
118+
request :delete_application_credentials
119+
request :get_application_credentials
114120
request :list_policies
115121
request :get_policy
116122
request :create_policy
117123
request :update_policy
118124
request :delete_policy
119-
125+
120126
class Mock
121127
include Fog::OpenStack::Core
122128
def initialize(options = {})
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require 'fog/openstack/models/model'
2+
3+
module Fog
4+
module OpenStack
5+
class Identity
6+
class V3
7+
class ApplicationCredential < Fog::OpenStack::Model
8+
identity :id
9+
10+
attribute :description
11+
attribute :name
12+
attribute :roles
13+
attribute :expires_at
14+
attribute :user_id
15+
attribute :secret
16+
17+
class << self
18+
attr_accessor :cache
19+
end
20+
21+
@cache = {}
22+
23+
def to_s
24+
id.to_s
25+
end
26+
27+
def destroy
28+
requires :id
29+
service.delete_application_credentials(id, user_id)
30+
true
31+
end
32+
33+
def create
34+
merge_attributes(
35+
service.create_application_credentials(attributes).body['application_credential']
36+
)
37+
self
38+
end
39+
end
40+
end
41+
end
42+
end
43+
end
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require 'fog/openstack/models/collection'
2+
require 'fog/openstack/identity/v3/models/os_credential'
3+
4+
module Fog
5+
module OpenStack
6+
class Identity
7+
class V3
8+
class ApplicationCredentials < Fog::OpenStack::Collection
9+
model Fog::OpenStack::Identity::V3::ApplicationCredential
10+
11+
def all(options = {})
12+
load_response(service.list_application_credentials(options), 'application_credentials')
13+
end
14+
15+
def find_by_id(id, user_id)
16+
cached_credential = all(user_id).find { |application_credential| application_credential.id == id }
17+
return cached_credential if cached_credential
18+
credential_hash = service.get_application_credentials(id, user_id).body['application_credential']
19+
Fog::OpenStack::Identity::V3::ApplicationCredential.new(
20+
credential_hash.merge(:service => service)
21+
)
22+
end
23+
24+
def destroy(id)
25+
credential = find_by_id(id)
26+
credential.destroy
27+
end
28+
end
29+
end
30+
end
31+
end
32+
end

lib/fog/openstack/identity/v3/models/user.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ def projects
3030
service.list_user_projects(id).body['projects']
3131
end
3232

33+
def application_credentials
34+
requires :id
35+
service.list_application_credentials(id).body['application_credentials']
36+
end
37+
3338
def roles
3439
requires :id, :domain_id
3540
service.list_domain_user_roles(domain_id, id).body['roles']
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module Fog
2+
module OpenStack
3+
class Identity
4+
class V3
5+
class Real
6+
def create_application_credentials(credential = {})
7+
user_id = credential.delete('user_id') || credential.delete(:user_id)
8+
request(
9+
:expects => [201],
10+
:method => 'POST',
11+
:path => "users/#{user_id}/application_credentials",
12+
:body => Fog::JSON.encode(:application_credential => credential)
13+
)
14+
end
15+
end
16+
17+
class Mock
18+
def create_application_credentials(credential = {})
19+
raise Fog::Errors::MockNotImplemented
20+
end
21+
end
22+
end
23+
end
24+
end
25+
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module Fog
2+
module OpenStack
3+
class Identity
4+
class V3
5+
class Real
6+
def delete_application_credentials(application_credential_id, user_id)
7+
request(
8+
:expects => [204],
9+
:method => 'DELETE',
10+
:path => "users/#{user_id}/application_credentials/#{application_credential_id}",
11+
)
12+
end
13+
end
14+
15+
class Mock
16+
def delete_application_credentials(application_credential_id, user_id)
17+
raise Fog::Errors::MockNotImplemented
18+
end
19+
end
20+
end
21+
end
22+
end
23+
end
24+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module Fog
2+
module OpenStack
3+
class Identity
4+
class V3
5+
class Real
6+
def get_application_credentials(id, user_id)
7+
request(
8+
:expects => [200],
9+
:method => 'GET',
10+
:path => "users/#{user_id}/application_credentials/#{id}",
11+
)
12+
end
13+
end
14+
15+
class Mock
16+
def get_application_credentials(id, user_id)
17+
raise Fog::Errors::MockNotImplemented
18+
end
19+
end
20+
end
21+
end
22+
end
23+
end
24+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module Fog
2+
module OpenStack
3+
class Identity
4+
class V3
5+
class Real
6+
def list_application_credentials(user_id)
7+
request(
8+
:expects => [200],
9+
:method => 'GET',
10+
:path => "users/#{user_id}/application_credentials",
11+
)
12+
end
13+
end
14+
15+
class Mock
16+
def list_application_credentials(user_id)
17+
raise Fog::Errors::MockNotImplemented
18+
end
19+
end
20+
end
21+
end
22+
end
23+
end

0 commit comments

Comments
 (0)