Skip to content

Commit aba1fb2

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Refactor oauth1 code for updates"
2 parents fbb9e7a + d5aaba9 commit aba1fb2

6 files changed

Lines changed: 451 additions & 144 deletions

File tree

‎openstackclient/identity/v3/consumer.py‎

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def get_parser(self, prog_name):
4343
def take_action(self, parsed_args):
4444
self.log.debug('take_action(%s)', parsed_args)
4545
identity_client = self.app.client_manager.identity
46-
consumer = identity_client.consumers.create_consumer(
46+
consumer = identity_client.oauth1.consumers.create(
4747
parsed_args.description
4848
)
4949
info = {}
@@ -69,8 +69,8 @@ def take_action(self, parsed_args):
6969
self.log.debug('take_action(%s)', parsed_args)
7070
identity_client = self.app.client_manager.identity
7171
consumer = utils.find_resource(
72-
identity_client.consumers, parsed_args.consumer)
73-
identity_client.consumers.delete_consumer(consumer.id)
72+
identity_client.oauth1.consumers, parsed_args.consumer)
73+
identity_client.oauth1.consumers.delete(consumer.id)
7474
return
7575

7676

@@ -82,7 +82,7 @@ class ListConsumer(lister.Lister):
8282
def take_action(self, parsed_args):
8383
self.log.debug('take_action(%s)', parsed_args)
8484
columns = ('ID', 'Description')
85-
data = self.app.client_manager.identity.consumers.list_consumers()
85+
data = self.app.client_manager.identity.oauth1.consumers.list()
8686
return (columns,
8787
(utils.get_item_properties(
8888
s, columns,
@@ -113,7 +113,7 @@ def take_action(self, parsed_args):
113113
self.log.debug('take_action(%s)', parsed_args)
114114
identity_client = self.app.client_manager.identity
115115
consumer = utils.find_resource(
116-
identity_client.consumers, parsed_args.consumer)
116+
identity_client.oauth1.consumers, parsed_args.consumer)
117117
kwargs = {}
118118
if parsed_args.description:
119119
kwargs['description'] = parsed_args.description
@@ -122,14 +122,9 @@ def take_action(self, parsed_args):
122122
sys.stdout.write("Consumer not updated, no arguments present")
123123
return
124124

125-
consumer = identity_client.consumers.update_consumer(
126-
consumer.id,
127-
**kwargs
128-
)
129-
130-
info = {}
131-
info.update(consumer._info)
132-
return zip(*sorted(six.iteritems(info)))
125+
consumer = identity_client.oauth1.consumers.update(
126+
consumer.id, **kwargs)
127+
return
133128

134129

135130
class ShowConsumer(show.ShowOne):
@@ -150,7 +145,7 @@ def take_action(self, parsed_args):
150145
self.log.debug('take_action(%s)', parsed_args)
151146
identity_client = self.app.client_manager.identity
152147
consumer = utils.find_resource(
153-
identity_client.consumers, parsed_args.consumer)
148+
identity_client.oauth1.consumers, parsed_args.consumer)
154149

155150
info = {}
156151
info.update(consumer._info)

‎openstackclient/identity/v3/token.py‎

Lines changed: 29 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -18,55 +18,8 @@
1818
import logging
1919
import six
2020

21-
from cliff import command
22-
from cliff import lister
2321
from cliff import show
2422

25-
from openstackclient.common import utils
26-
27-
28-
class AuthenticateAccessToken(show.ShowOne):
29-
"""Authenticate access token to receive keystone token"""
30-
31-
api = 'identity'
32-
log = logging.getLogger(__name__ + '.AuthenticateAccessToken')
33-
34-
def get_parser(self, prog_name):
35-
parser = super(AuthenticateAccessToken, self).get_parser(prog_name)
36-
parser.add_argument(
37-
'--consumer-key',
38-
metavar='<consumer-key>',
39-
help='Consumer key',
40-
required=True
41-
)
42-
parser.add_argument(
43-
'--consumer-secret',
44-
metavar='<consumer-secret>',
45-
help='Consumer secret',
46-
required=True
47-
)
48-
parser.add_argument(
49-
'--access-key',
50-
metavar='<access-key>',
51-
help='Access token key',
52-
required=True
53-
)
54-
parser.add_argument(
55-
'--access-secret',
56-
metavar='<access-secret>',
57-
help='Access token secret',
58-
required=True
59-
)
60-
return parser
61-
62-
def take_action(self, parsed_args):
63-
self.log.debug('take_action(%s)', parsed_args)
64-
token_client = self.app.client_manager.identity.tokens
65-
keystone_token = token_client.authenticate_access_token(
66-
parsed_args.consumer_key, parsed_args.consumer_secret,
67-
parsed_args.access_key, parsed_args.access_secret)
68-
return zip(*sorted(six.iteritems(keystone_token)))
69-
7023

7124
class AuthorizeRequestToken(show.ShowOne):
7225
"""Authorize request token command"""
@@ -78,17 +31,28 @@ def get_parser(self, prog_name):
7831
parser.add_argument(
7932
'--request-key',
8033
metavar='<request-key>',
81-
help='Consumer key',
34+
help='Request token key',
35+
required=True
36+
)
37+
parser.add_argument(
38+
'--role-ids',
39+
metavar='<role-ids>',
40+
help='Requested role IDs',
8241
required=True
8342
)
8443
return parser
8544

8645
def take_action(self, parsed_args):
87-
self.log.debug('take_action(%s)', parsed_args)
88-
token_client = self.app.client_manager.identity.tokens
46+
self.log.debug('take_action(%s)' % parsed_args)
47+
identity_client = self.app.client_manager.identity
8948

90-
verifier_pin = token_client.authorize_request_token(
91-
parsed_args.request_key)
49+
roles = []
50+
for r_id in parsed_args.role_ids.split():
51+
roles.append(r_id)
52+
53+
verifier_pin = identity_client.oauth1.request_tokens.authorize(
54+
parsed_args.request_key,
55+
roles)
9256
info = {}
9357
info.update(verifier_pin._info)
9458
return zip(*sorted(six.iteritems(info)))
@@ -134,13 +98,15 @@ def get_parser(self, prog_name):
13498
return parser
13599

136100
def take_action(self, parsed_args):
137-
self.log.debug('take_action(%s)', parsed_args)
138-
token_client = self.app.client_manager.identity.tokens
139-
access_token = token_client.create_access_token(
101+
self.log.debug('take_action(%s)' % parsed_args)
102+
token_client = self.app.client_manager.identity.oauth1.access_tokens
103+
access_token = token_client.create(
140104
parsed_args.consumer_key, parsed_args.consumer_secret,
141105
parsed_args.request_key, parsed_args.request_secret,
142106
parsed_args.verifier)
143-
return zip(*sorted(six.iteritems(access_token)))
107+
info = {}
108+
info.update(access_token._info)
109+
return zip(*sorted(six.iteritems(info)))
144110

145111

146112
class CreateRequestToken(show.ShowOne):
@@ -162,27 +128,24 @@ def get_parser(self, prog_name):
162128
help='Consumer secret',
163129
required=True
164130
)
165-
parser.add_argument(
166-
'--role-ids',
167-
metavar='<role-ids>',
168-
help='Requested role IDs',
169-
)
170131
parser.add_argument(
171132
'--project-id',
172133
metavar='<project-id>',
173134
help='Requested project ID',
135+
required=True
174136
)
175137
return parser
176138

177139
def take_action(self, parsed_args):
178-
self.log.debug('take_action(%s)', parsed_args)
179-
token_client = self.app.client_manager.identity.tokens
180-
request_token = token_client.create_request_token(
140+
self.log.debug('take_action(%s)' % parsed_args)
141+
token_client = self.app.client_manager.identity.oauth1.request_tokens
142+
request_token = token_client.create(
181143
parsed_args.consumer_key,
182144
parsed_args.consumer_secret,
183-
parsed_args.role_ids,
184145
parsed_args.project_id)
185-
return zip(*sorted(six.iteritems(request_token)))
146+
info = {}
147+
info.update(request_token._info)
148+
return zip(*sorted(six.iteritems(info)))
186149

187150

188151
class CreateToken(show.ShowOne):
@@ -201,64 +164,3 @@ def take_action(self, parsed_args):
201164
if 'tenant_id' in token:
202165
token['project_id'] = token.pop('tenant_id')
203166
return zip(*sorted(six.iteritems(token)))
204-
205-
206-
class DeleteAccessToken(command.Command):
207-
"""Delete access token command"""
208-
209-
log = logging.getLogger(__name__ + '.DeleteAccessToken')
210-
211-
def get_parser(self, prog_name):
212-
parser = super(DeleteAccessToken, self).get_parser(prog_name)
213-
parser.add_argument(
214-
'user',
215-
metavar='<user>',
216-
help='Name or ID of user',
217-
)
218-
parser.add_argument(
219-
'access_key',
220-
metavar='<access-key>',
221-
help='Access token to be deleted',
222-
)
223-
return parser
224-
225-
def take_action(self, parsed_args):
226-
self.log.debug('take_action(%s)', parsed_args)
227-
228-
identity_client = self.app.client_manager.identity
229-
user = utils.find_resource(
230-
identity_client.users, parsed_args.user).id
231-
identity_client.tokens.delete_access_token(user,
232-
parsed_args.access_key)
233-
return
234-
235-
236-
class ListAccessToken(lister.Lister):
237-
"""List access tokens command"""
238-
239-
log = logging.getLogger(__name__ + '.ListAccessToken')
240-
241-
def get_parser(self, prog_name):
242-
parser = super(ListAccessToken, self).get_parser(prog_name)
243-
parser.add_argument(
244-
'user',
245-
metavar='<user>',
246-
help='Name or ID of user',
247-
)
248-
return parser
249-
250-
def take_action(self, parsed_args):
251-
self.log.debug('take_action(%s)', parsed_args)
252-
253-
identity_client = self.app.client_manager.identity
254-
user = utils.find_resource(
255-
identity_client.users, parsed_args.user).id
256-
257-
columns = ('ID', 'Consumer ID', 'Expires At',
258-
'Project Id', 'Authorizing User Id')
259-
data = identity_client.tokens.list_access_tokens(user)
260-
return (columns,
261-
(utils.get_item_properties(
262-
s, columns,
263-
formatters={},
264-
) for s in data))

‎openstackclient/tests/identity/v3/fakes.py‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,52 @@
139139
'role': {'id': role_id},
140140
}
141141

142+
consumer_id = 'test consumer id'
143+
consumer_description = 'someone we trust'
144+
consumer_secret = 'test consumer secret'
145+
146+
OAUTH_CONSUMER = {
147+
'id': consumer_id,
148+
'secret': consumer_secret,
149+
'description': consumer_description
150+
}
151+
152+
access_token_id = 'test access token id'
153+
access_token_secret = 'test access token secret'
154+
access_token_expires = '2014-05-18T03:13:18.152071Z'
155+
156+
OAUTH_ACCESS_TOKEN = {
157+
'id': access_token_id,
158+
'expires': access_token_expires,
159+
'key': access_token_id,
160+
'secret': access_token_secret
161+
}
162+
163+
request_token_id = 'test request token id'
164+
request_token_secret = 'test request token secret'
165+
request_token_expires = '2014-05-17T11:10:51.511336Z'
166+
167+
OAUTH_REQUEST_TOKEN = {
168+
'id': request_token_id,
169+
'expires': request_token_expires,
170+
'key': request_token_id,
171+
'secret': request_token_secret
172+
}
173+
174+
oauth_verifier_pin = '6d74XaDS'
175+
OAUTH_VERIFIER = {
176+
'oauth_verifier': oauth_verifier_pin
177+
}
178+
142179

143180
class FakeIdentityv3Client(object):
144181
def __init__(self, **kwargs):
145182
self.domains = mock.Mock()
146183
self.domains.resource_class = fakes.FakeResource(None, {})
147184
self.groups = mock.Mock()
148185
self.groups.resource_class = fakes.FakeResource(None, {})
186+
self.oauth1 = mock.Mock()
187+
self.oauth1.resource_class = fakes.FakeResource(None, {})
149188
self.projects = mock.Mock()
150189
self.projects.resource_class = fakes.FakeResource(None, {})
151190
self.roles = mock.Mock()
@@ -169,6 +208,18 @@ def __init__(self, **kwargs):
169208
self.identity_providers.resource_class = fakes.FakeResource(None, {})
170209

171210

211+
class FakeOAuth1Client(FakeIdentityv3Client):
212+
def __init__(self, **kwargs):
213+
super(FakeOAuth1Client, self).__init__(**kwargs)
214+
215+
self.access_tokens = mock.Mock()
216+
self.access_tokens.resource_class = fakes.FakeResource(None, {})
217+
self.consumers = mock.Mock()
218+
self.consumers.resource_class = fakes.FakeResource(None, {})
219+
self.request_tokens = mock.Mock()
220+
self.request_tokens.resource_class = fakes.FakeResource(None, {})
221+
222+
172223
class TestIdentityv3(utils.TestCommand):
173224
def setUp(self):
174225
super(TestIdentityv3, self).setUp()
@@ -187,3 +238,13 @@ def setUp(self):
187238
endpoint=fakes.AUTH_URL,
188239
token=fakes.AUTH_TOKEN
189240
)
241+
242+
243+
class TestOAuth1(utils.TestCommand):
244+
def setUp(self):
245+
super(TestOAuth1, self).setUp()
246+
247+
self.app.client_manager.identity = FakeOAuth1Client(
248+
endpoint=fakes.AUTH_URL,
249+
token=fakes.AUTH_TOKEN
250+
)

0 commit comments

Comments
 (0)