@@ -54,21 +54,6 @@ void rgw_get_token_id(const string& token, string& token_id)
5454namespace rgw {
5555namespace keystone {
5656
57- ApiVersion CephCtxConfig::get_api_version () const noexcept
58- {
59- switch (g_ceph_context->_conf ->rgw_keystone_api_version ) {
60- case 3 :
61- return ApiVersion::VER_3;
62- case 2 :
63- return ApiVersion::VER_2;
64- default :
65- dout (0 ) << " ERROR: wrong Keystone API version: "
66- << g_ceph_context->_conf ->rgw_keystone_api_version
67- << " ; falling back to v2" << dendl;
68- return ApiVersion::VER_2;
69- }
70- }
71-
7257std::string CephCtxConfig::get_endpoint_url () const noexcept
7358{
7459 static const std::string url = g_ceph_context->_conf ->rgw_keystone_url ;
@@ -186,33 +171,18 @@ int Service::issue_admin_token_request(const DoutPrefixProvider *dpp,
186171 token_req.append_header (" Content-Type" , " application/json" );
187172 JSONFormatter jf;
188173
189- const auto keystone_version = config.get_api_version ();
190- if (keystone_version == ApiVersion::VER_2) {
191- AdminTokenRequestVer2 req_serializer (config);
192- req_serializer.dump (&jf);
193-
194- std::stringstream ss;
195- jf.flush (ss);
196- token_req.set_post_data (ss.str ());
197- token_req.set_send_length (ss.str ().length ());
198- token_url.append (" v2.0/tokens" );
199-
200- } else if (keystone_version == ApiVersion::VER_3) {
201- AdminTokenRequestVer3 req_serializer (config);
202- req_serializer.dump (&jf);
203-
204- std::stringstream ss;
205- jf.flush (ss);
206- token_req.set_post_data (ss.str ());
207- token_req.set_send_length (ss.str ().length ());
208- token_url.append (" v3/auth/tokens" );
209- } else {
210- return -ENOTSUP;
211- }
174+ AdminTokenRequest req_serializer (config);
175+ req_serializer.dump (&jf);
176+
177+ std::stringstream ss;
178+ jf.flush (ss);
179+ token_req.set_post_data (ss.str ());
180+ token_req.set_send_length (ss.str ().length ());
181+ token_url.append (" v3/auth/tokens" );
212182
213183 token_req.set_url (token_url);
214184
215- const int ret = token_req.process (dpp, y);
185+ int ret = token_req.process (dpp, y);
216186
217187 /* Detect rejection earlier than during the token parsing step. */
218188 if (token_req.get_http_status () ==
@@ -225,8 +195,8 @@ int Service::issue_admin_token_request(const DoutPrefixProvider *dpp,
225195 return ret;
226196 }
227197
228- if ( t.parse (dpp, token_req.get_subject_token (), token_bl,
229- keystone_version) != 0 ) {
198+ ret = t.parse (dpp, token_req.get_subject_token (), token_bl);
199+ if (ret != 0 ) {
230200 return -EINVAL;
231201 }
232202
@@ -263,34 +233,19 @@ int Service::get_keystone_barbican_token(const DoutPrefixProvider *dpp,
263233 token_req.append_header (" Content-Type" , " application/json" );
264234 JSONFormatter jf;
265235
266- const auto keystone_version = config.get_api_version ();
267- if (keystone_version == ApiVersion::VER_2) {
268- rgw::keystone::BarbicanTokenRequestVer2 req_serializer (cct);
269- req_serializer.dump (&jf);
270-
271- std::stringstream ss;
272- jf.flush (ss);
273- token_req.set_post_data (ss.str ());
274- token_req.set_send_length (ss.str ().length ());
275- token_url.append (" v2.0/tokens" );
276-
277- } else if (keystone_version == ApiVersion::VER_3) {
278- BarbicanTokenRequestVer3 req_serializer (cct);
279- req_serializer.dump (&jf);
280-
281- std::stringstream ss;
282- jf.flush (ss);
283- token_req.set_post_data (ss.str ());
284- token_req.set_send_length (ss.str ().length ());
285- token_url.append (" v3/auth/tokens" );
286- } else {
287- return -ENOTSUP;
288- }
236+ BarbicanTokenRequest req_serializer (cct);
237+ req_serializer.dump (&jf);
238+
239+ std::stringstream ss;
240+ jf.flush (ss);
241+ token_req.set_post_data (ss.str ());
242+ token_req.set_send_length (ss.str ().length ());
243+ token_url.append (" v3/auth/tokens" );
289244
290245 token_req.set_url (token_url);
291246
292247 ldpp_dout (dpp, 20 ) << " Requesting secret from barbican url=" << token_url << dendl;
293- const int ret = token_req.process (dpp, y);
248+ int ret = token_req.process (dpp, y);
294249 if (ret < 0 ) {
295250 ldpp_dout (dpp, 20 ) << " Barbican process error:" << token_bl.c_str () << dendl;
296251 return ret;
@@ -302,8 +257,8 @@ int Service::get_keystone_barbican_token(const DoutPrefixProvider *dpp,
302257 return -EACCES;
303258 }
304259
305- if ( t.parse (dpp, token_req.get_subject_token (), token_bl,
306- keystone_version) != 0 ) {
260+ ret = t.parse (dpp, token_req.get_subject_token (), token_bl);
261+ if (ret != 0 ) {
307262 return -EINVAL;
308263 }
309264
@@ -326,8 +281,7 @@ bool TokenEnvelope::has_role(const std::string& r) const
326281
327282int TokenEnvelope::parse (const DoutPrefixProvider *dpp,
328283 const std::string& token_str,
329- ceph::bufferlist& bl,
330- const ApiVersion version)
284+ ceph::bufferlist& bl)
331285{
332286 JSONParser parser;
333287 if (! parser.parse (bl.c_str (), bl.length ())) {
@@ -336,40 +290,13 @@ int TokenEnvelope::parse(const DoutPrefixProvider *dpp,
336290 }
337291
338292 JSONObjIter token_iter = parser.find_first (" token" );
339- JSONObjIter access_iter = parser.find_first (" access" );
340293
341294 try {
342- if (version == rgw::keystone::ApiVersion::VER_2) {
343- if (! access_iter.end ()) {
344- decode_v2 (*access_iter);
345- } else if (! token_iter.end ()) {
346- /* TokenEnvelope structure doesn't follow Identity API v2, so let's
347- * fallback to v3. Otherwise we can assume it's wrongly formatted.
348- * The whole mechanism is a workaround for s3_token middleware that
349- * speaks in v2 disregarding the promise to go with v3. */
350- decode_v3 (*token_iter);
351-
352- /* Identity v3 conveys the token information not as a part of JSON but
353- * in the X-Subject-Token HTTP header we're getting from caller. */
354- token.id = token_str;
355- } else {
356- return -EINVAL;
357- }
358- } else if (version == rgw::keystone::ApiVersion::VER_3) {
359- if (! token_iter.end ()) {
360- decode_v3 (*token_iter);
361- /* v3 succeeded. We have to fill token.id from external input as it
362- * isn't a part of the JSON response anymore. It has been moved
363- * to X-Subject-Token HTTP header instead. */
364- token.id = token_str;
365- } else if (! access_iter.end ()) {
366- /* If the token cannot be parsed according to V3, try V2. */
367- decode_v2 (*access_iter);
368- } else {
369- return -EINVAL;
370- }
295+ if (! token_iter.end ()) {
296+ decode (*token_iter);
297+ token.id = token_str;
371298 } else {
372- return -ENOTSUP ;
299+ return -EINVAL ;
373300 }
374301 } catch (const JSONDecoder::err& err) {
375302 ldpp_dout (dpp, 0 ) << " Keystone token parse error: " << err.what () << dendl;
@@ -544,7 +471,6 @@ void rgw::keystone::TokenEnvelope::Token::decode_json(JSONObj *obj)
544471 struct tm t;
545472
546473 JSONDecoder::decode_json (" id" , id, obj, true );
547- JSONDecoder::decode_json (" tenant" , tenant_v2, obj, true );
548474 JSONDecoder::decode_json (" expires" , expires_iso8601, obj, true );
549475
550476 if (parse_iso8601 (expires_iso8601.c_str (), &t)) {
@@ -579,10 +505,9 @@ void rgw::keystone::TokenEnvelope::User::decode_json(JSONObj *obj)
579505 JSONDecoder::decode_json (" id" , id, obj, true );
580506 JSONDecoder::decode_json (" name" , name, obj, true );
581507 JSONDecoder::decode_json (" domain" , domain, obj);
582- JSONDecoder::decode_json (" roles" , roles_v2, obj);
583508}
584509
585- void rgw::keystone::TokenEnvelope::decode_v3 (JSONObj* const root_obj)
510+ void rgw::keystone::TokenEnvelope::decode (JSONObj* const root_obj)
586511{
587512 std::string expires_iso8601;
588513
@@ -601,15 +526,6 @@ void rgw::keystone::TokenEnvelope::decode_v3(JSONObj* const root_obj)
601526 }
602527}
603528
604- void rgw::keystone::TokenEnvelope::decode_v2 (JSONObj* const root_obj)
605- {
606- JSONDecoder::decode_json (" user" , user, root_obj, true );
607- JSONDecoder::decode_json (" token" , token, root_obj, true );
608-
609- roles = user.roles_v2 ;
610- project = token.tenant_v2 ;
611- }
612-
613529/* This utility function shouldn't conflict with the overload of std::to_string
614530 * provided by string_ref since Boost 1.54 as it's defined outside of the std
615531 * namespace. I hope we'll remove it soon - just after merging the Matt's PR
@@ -619,20 +535,7 @@ static inline std::string to_string(const std::string_view& s)
619535 return std::string (s.data (), s.length ());
620536}
621537
622- void rgw::keystone::AdminTokenRequestVer2::dump (Formatter* const f) const
623- {
624- f->open_object_section (" token_request" );
625- f->open_object_section (" auth" );
626- f->open_object_section (" passwordCredentials" );
627- encode_json (" username" , ::to_string (conf.get_admin_user ()), f);
628- encode_json (" password" , ::to_string (conf.get_admin_password ()), f);
629- f->close_section ();
630- encode_json (" tenantName" , ::to_string (conf.get_admin_tenant ()), f);
631- f->close_section ();
632- f->close_section ();
633- }
634-
635- void rgw::keystone::AdminTokenRequestVer3::dump (Formatter* const f) const
538+ void rgw::keystone::AdminTokenRequest::dump (Formatter* const f) const
636539{
637540 f->open_object_section (" token_request" );
638541 f->open_object_section (" auth" );
@@ -666,20 +569,7 @@ void rgw::keystone::AdminTokenRequestVer3::dump(Formatter* const f) const
666569 f->close_section ();
667570}
668571
669- void rgw::keystone::BarbicanTokenRequestVer2::dump (Formatter* const f) const
670- {
671- f->open_object_section (" token_request" );
672- f->open_object_section (" auth" );
673- f->open_object_section (" passwordCredentials" );
674- encode_json (" username" , cct->_conf ->rgw_keystone_barbican_user , f);
675- encode_json (" password" , cct->_conf ->rgw_keystone_barbican_password , f);
676- f->close_section ();
677- encode_json (" tenantName" , cct->_conf ->rgw_keystone_barbican_tenant , f);
678- f->close_section ();
679- f->close_section ();
680- }
681-
682- void rgw::keystone::BarbicanTokenRequestVer3::dump (Formatter* const f) const
572+ void rgw::keystone::BarbicanTokenRequest::dump (Formatter* const f) const
683573{
684574 f->open_object_section (" token_request" );
685575 f->open_object_section (" auth" );
@@ -712,5 +602,3 @@ void rgw::keystone::BarbicanTokenRequestVer3::dump(Formatter* const f) const
712602 f->close_section ();
713603 f->close_section ();
714604}
715-
716-
0 commit comments