Skip to content

Commit 6025fa8

Browse files
author
Steve Martinelli
committed
Request token creation docs + tweaks
Added command docs, and changed request token to take in name or id of a project, and also support a domain option. Change-Id: I87363274e5b7a0c687e234f5a4bcaaf166d28840
1 parent c885c72 commit 6025fa8

4 files changed

Lines changed: 80 additions & 14 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=============
2+
request token
3+
=============
4+
5+
Identity v3
6+
7+
`Requires: OS-OAUTH1 extension`
8+
9+
request token create
10+
--------------------
11+
12+
Create a request token
13+
14+
.. program:: request token create
15+
.. code:: bash
16+
17+
os request token create
18+
--consumer-key <consumer-key>
19+
--consumer-secret <consumer-secret>
20+
--project <project>
21+
[--domain <domain>]
22+
23+
.. option:: --consumer-key <consumer-key>
24+
25+
Consumer key (required)
26+
27+
.. option:: --description <description>
28+
29+
Consumer secret (required)
30+
31+
.. option:: --project <project>
32+
33+
Project that consumer wants to access (name or ID) (required)
34+
35+
.. option:: --domain <domain>
36+
37+
Domain owning <project> (name or ID)

‎doc/source/commands.rst‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ referring to both Compute and Volume quotas.
100100
* ``project``: (**Identity**) owns a group of resources
101101
* ``quota``: (**Compute**, **Volume**) resource usage restrictions
102102
* ``region``: (**Identity**) a subset of an OpenStack deployment
103-
* ``request token``: Identity - temporary OAuth-based token
103+
* ``request token``: (**Identity**) temporary OAuth-based token
104104
* ``role``: (**Identity**) a policy object used to determine authorization
105105
* ``role assignment``: (**Identity**) a relationship between roles, users or groups, and domains or projects
106106
* ``security group``: Compute, Network - groups of network access rules

‎openstackclient/identity/v3/token.py‎

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
from cliff import show
2222

23+
from openstackclient.common import utils
24+
from openstackclient.identity import common
25+
2326

2427
class AuthorizeRequestToken(show.ShowOne):
2528
"""Authorize request token"""
@@ -53,6 +56,7 @@ def take_action(self, parsed_args):
5356
verifier_pin = identity_client.oauth1.request_tokens.authorize(
5457
parsed_args.request_key,
5558
roles)
59+
5660
info = {}
5761
info.update(verifier_pin._info)
5862
return zip(*sorted(six.iteritems(info)))
@@ -110,7 +114,7 @@ def take_action(self, parsed_args):
110114

111115

112116
class CreateRequestToken(show.ShowOne):
113-
"""Create request token"""
117+
"""Create a request token"""
114118

115119
log = logging.getLogger(__name__ + '.CreateRequestToken')
116120

@@ -119,33 +123,50 @@ def get_parser(self, prog_name):
119123
parser.add_argument(
120124
'--consumer-key',
121125
metavar='<consumer-key>',
122-
help='Consumer key',
126+
help='Consumer key (required)',
123127
required=True
124128
)
125129
parser.add_argument(
126130
'--consumer-secret',
127131
metavar='<consumer-secret>',
128-
help='Consumer secret',
132+
help='Consumer secret (required)',
129133
required=True
130134
)
131135
parser.add_argument(
132-
'--project-id',
133-
metavar='<project-id>',
134-
help='Requested project ID',
136+
'--project',
137+
metavar='<project>',
138+
help='Project that consumer wants to access (name or ID)'
139+
' (required)',
135140
required=True
136141
)
142+
parser.add_argument(
143+
'--domain',
144+
metavar='<domain>',
145+
help='Domain owning <project> (name or ID)',
146+
)
137147
return parser
138148

139149
def take_action(self, parsed_args):
140150
self.log.debug('take_action(%s)' % parsed_args)
141-
token_client = self.app.client_manager.identity.oauth1.request_tokens
151+
152+
identity_client = self.app.client_manager.identity
153+
154+
if parsed_args.domain:
155+
domain = common.find_domain(identity_client, parsed_args.domain)
156+
project = utils.find_resource(identity_client.projects,
157+
parsed_args.project,
158+
domain_id=domain.id)
159+
else:
160+
project = utils.find_resource(identity_client.projects,
161+
parsed_args.project)
162+
163+
token_client = identity_client.oauth1.request_tokens
164+
142165
request_token = token_client.create(
143166
parsed_args.consumer_key,
144167
parsed_args.consumer_secret,
145-
parsed_args.project_id)
146-
info = {}
147-
info.update(request_token._info)
148-
return zip(*sorted(six.iteritems(info)))
168+
project.id)
169+
return zip(*sorted(six.iteritems(request_token._info)))
149170

150171

151172
class IssueToken(show.ShowOne):

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def setUp(self):
2626
self.access_tokens_mock.reset_mock()
2727
self.request_tokens_mock = identity_client.oauth1.request_tokens
2828
self.request_tokens_mock.reset_mock()
29+
self.projects_mock = identity_client.projects
30+
self.projects_mock.reset_mock()
2931

3032

3133
class TestRequestTokenCreate(TestOAuth1):
@@ -39,18 +41,24 @@ def setUp(self):
3941
loaded=True,
4042
)
4143

44+
self.projects_mock.get.return_value = fakes.FakeResource(
45+
None,
46+
copy.deepcopy(identity_fakes.PROJECT),
47+
loaded=True,
48+
)
49+
4250
self.cmd = token.CreateRequestToken(self.app, None)
4351

4452
def test_create_request_tokens(self):
4553
arglist = [
4654
'--consumer-key', identity_fakes.consumer_id,
4755
'--consumer-secret', identity_fakes.consumer_secret,
48-
'--project-id', identity_fakes.project_id,
56+
'--project', identity_fakes.project_id,
4957
]
5058
verifylist = [
5159
('consumer_key', identity_fakes.consumer_id),
5260
('consumer_secret', identity_fakes.consumer_secret),
53-
('project_id', identity_fakes.project_id),
61+
('project', identity_fakes.project_id),
5462
]
5563
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5664
columns, data = self.cmd.take_action(parsed_args)

0 commit comments

Comments
 (0)