)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"IdP SAML Metadata generator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone acting as a SAML2 Identity Provider needs to be able to"},{"line_number":10,"context_line":"generate and expose Metadata that is usually consumed by a federated"},{"line_number":11,"context_line":"Service Providers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9e4b2f068a8190215749b95f31d634eb09c1e3f1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1abeadc6_59d3dfd5","line":10,"updated":"2014-08-19 21:37:39.000000000","message":"Should metadata be capitalized here? remove the \u0027a\u0027 here.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":7,"context_line":"IdP SAML Metadata generator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone acting as a SAML2 Identity Provider needs to be able to"},{"line_number":10,"context_line":"generate and expose Metadata that is usually consumed by a federated"},{"line_number":11,"context_line":"Service Providers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9e4b2f068a8190215749b95f31d634eb09c1e3f1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1abeadc6_cb5f07e4","line":10,"in_reply_to":"1abeadc6_59d3dfd5","updated":"2014-08-20 08:08:29.000000000","message":"no.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone acting as a SAML2 Identity Provider needs to be able to"},{"line_number":10,"context_line":"generate and expose Metadata that is usually consumed by a federated"},{"line_number":11,"context_line":"Service Providers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9e4b2f068a8190215749b95f31d634eb09c1e3f1"},{"line_number":14,"context_line":"Implements: bp keystone-to-keystone-federation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1abeadc6_19f08766","line":11,"updated":"2014-08-19 21:37:39.000000000","message":"Should these be capitalized?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone acting as a SAML2 Identity Provider needs to be able to"},{"line_number":10,"context_line":"generate and expose Metadata that is usually consumed by a federated"},{"line_number":11,"context_line":"Service Providers."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9e4b2f068a8190215749b95f31d634eb09c1e3f1"},{"line_number":14,"context_line":"Implements: bp keystone-to-keystone-federation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1abeadc6_cb2d4748","line":11,"in_reply_to":"1abeadc6_19f08766","updated":"2014-08-20 08:08:29.000000000","message":"By convention almost everywhere we capitalize Identity Providers and Service Providers. I tried to be consistent.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f8502f69b183a30b6a70f15b2dced5d20d6d1131","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"IdP SAML Metadata generator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone acting as a SAML2 Identity Provider needs to be able to"},{"line_number":10,"context_line":"generate and expose metadata that is usually consumed by a federated"},{"line_number":11,"context_line":"Service Providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1abeadc6_08db9c50","line":9,"updated":"2014-08-21 04:58:28.000000000","message":"Wheb Keystone is acting as a SAML2 Identity Provider, it needs to be able to generate and expose metadata that is consumed by federated Service Providers.","commit_id":"a47145ece7f44a6205813e79ecd6a040471b7d28"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"5aa14cab58be61a8642a085e0406b5a1bc8f188a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"IdP SAML Metadata generator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone acting as a SAML2 Identity Provider needs to be able to"},{"line_number":10,"context_line":"generate and expose metadata that is usually consumed by a federated"},{"line_number":11,"context_line":"Service Providers."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1abeadc6_4ac3c7ec","line":9,"in_reply_to":"1abeadc6_08db9c50","updated":"2014-08-21 07:38:12.000000000","message":"thanks for that tip.","commit_id":"a47145ece7f44a6205813e79ecd6a040471b7d28"}],"etc/keystone.conf.sample":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"# Entity ID value for unique Identity Provider identification."},{"line_number":1298,"context_line":"# Usually FQDN is set with a suffix. For example:"},{"line_number":1299,"context_line":"# https://keystone.idp.com/v3/OS-FEDERATION/saml2/idp (string"},{"line_number":1300,"context_line":"# value)"},{"line_number":1301,"context_line":"#idp_entity_id\u003d"},{"line_number":1302,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":19,"id":"fa98f980_5ea68f11","line":1299,"updated":"2014-09-02 04:11:10.000000000","message":"always use example.com for things like this. idp.com is a real domain. ICANN reserves example.com just for things like this.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"# Entity ID value for unique Identity Provider identification."},{"line_number":1298,"context_line":"# Usually FQDN is set with a suffix. For example:"},{"line_number":1299,"context_line":"# https://keystone.idp.com/v3/OS-FEDERATION/saml2/idp (string"},{"line_number":1300,"context_line":"# value)"},{"line_number":1301,"context_line":"#idp_entity_id\u003d"},{"line_number":1302,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":19,"id":"fa98f980_df3c36c2","line":1299,"in_reply_to":"fa98f980_5ea68f11","updated":"2014-09-02 06:34:39.000000000","message":"Regenerate this file afterward","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"# Entity ID value for unique Identity Provider identification."},{"line_number":1298,"context_line":"# Usually FQDN is set with a suffix. For example:"},{"line_number":1299,"context_line":"# https://keystone.idp.com/v3/OS-FEDERATION/saml2/idp (string"},{"line_number":1300,"context_line":"# value)"},{"line_number":1301,"context_line":"#idp_entity_id\u003d"},{"line_number":1302,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":19,"id":"fa98f980_069bc367","line":1299,"in_reply_to":"fa98f980_5ea68f11","updated":"2014-09-02 14:08:59.000000000","message":"nice advice.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"# (string value)"},{"line_number":1317,"context_line":"#idp_sso_endpoint\u003d\u003cNone\u003e"},{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"# Locale used by the organization. (string value)"},{"line_number":1320,"context_line":"#idp_lang\u003den"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"# Organization name the installation belongs to. (string"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"fa98f980_8e68a188","line":1319,"updated":"2014-09-02 19:13:29.000000000","message":"should be \"Language of the organization name values\"","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"# (string value)"},{"line_number":1317,"context_line":"#idp_sso_endpoint\u003d\u003cNone\u003e"},{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"# Locale used by the organization. (string value)"},{"line_number":1320,"context_line":"#idp_lang\u003den"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"# Organization name the installation belongs to. (string"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"fa98f980_8ad40621","line":1319,"in_reply_to":"fa98f980_8e68a188","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e5dd78ada2dac15eb03616abcfb1255e0581359b","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"# (string value)"},{"line_number":1309,"context_line":"#idp_sso_endpoint\u003d\u003cNone\u003e"},{"line_number":1310,"context_line":""},{"line_number":1311,"context_line":"# Language used by the organization. (string value)"},{"line_number":1312,"context_line":"#idp_lang\u003den"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"# Organization name the installation belongs to. (string"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"fa98f980_4a94dee1","line":1311,"updated":"2014-09-02 21:45:56.000000000","message":"close enough to what brant said","commit_id":"57ca6e23587e2710ca41aac9108a54b88b7a67a9"}],"keystone/common/config.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        cfg.IntOpt(\u0027assertion_expiration_time\u0027, default\u003d3600,"},{"line_number":445,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated SAML \u0027"},{"line_number":446,"context_line":"                        \u0027assertion created by Keystone.\u0027),"},{"line_number":447,"context_line":"        cfg.IntOpt(\u0027metadata_expiration_time\u0027, default\u003d7200,"},{"line_number":448,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated Keystone-\u0027"},{"line_number":449,"context_line":"                        \u0027IdentityProvider Metadata\u0027),"},{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_f74bcf84","line":447,"updated":"2014-08-20 01:27:37.000000000","message":"shouldn\u0027t this be *much* higher?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        cfg.IntOpt(\u0027assertion_expiration_time\u0027, default\u003d3600,"},{"line_number":445,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated SAML \u0027"},{"line_number":446,"context_line":"                        \u0027assertion created by Keystone.\u0027),"},{"line_number":447,"context_line":"        cfg.IntOpt(\u0027metadata_expiration_time\u0027, default\u003d7200,"},{"line_number":448,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated Keystone-\u0027"},{"line_number":449,"context_line":"                        \u0027IdentityProvider Metadata\u0027),"},{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_85f3409d","line":447,"in_reply_to":"1abeadc6_f74bcf84","updated":"2014-08-20 08:08:29.000000000","message":"could be. I will change to 1 week for now.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        cfg.IntOpt(\u0027metadata_expiration_time\u0027, default\u003d7200,"},{"line_number":448,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated Keystone-\u0027"},{"line_number":449,"context_line":"                        \u0027IdentityProvider Metadata\u0027),"},{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_5281f148","line":450,"updated":"2014-08-20 01:27:37.000000000","message":"can we use  wsgi.Application.base_url(context, \u0027public\u0027) or would that not work? if not, I might just end up using this in the saml generator too","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        cfg.IntOpt(\u0027metadata_expiration_time\u0027, default\u003d7200,"},{"line_number":448,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated Keystone-\u0027"},{"line_number":449,"context_line":"                        \u0027IdentityProvider Metadata\u0027),"},{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_05b650fa","line":450,"in_reply_to":"1abeadc6_5281f148","updated":"2014-08-20 08:08:29.000000000","message":"As the metadata content is not changing very often I think (so is Dolph) it\u0027s enough to simply generate the metadata with keystone-manage, save a file to the filesystem and if someone asks for it (via route), simply open/read the file. At first I tried to do some autoguessing hacks, but later I decided that deployer should specify it himself.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                        \u0027IdentityProvider Metadata\u0027),"},{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":454,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":455,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_b2ba4521","line":452,"updated":"2014-08-20 01:27:37.000000000","message":"might be helpful to add an example,","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                        \u0027IdentityProvider Metadata\u0027),"},{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":454,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":455,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_25b98ce9","line":452,"in_reply_to":"1abeadc6_b2ba4521","updated":"2014-08-20 08:08:29.000000000","message":"Yes.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":454,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":455,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata\u0027)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_775fbf41","line":453,"updated":"2014-08-20 01:27:37.000000000","message":"would this be the same as the \u0027region\u0027 url?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        cfg.StrOpt(\u0027entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":454,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":455,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata\u0027)"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_c505387b","line":453,"in_reply_to":"1abeadc6_775fbf41","updated":"2014-08-20 08:08:29.000000000","message":"No, region URL is a URL at the SP side (where the SAML assertion will be sent). Normaly objects like sso_endpoint (also single_logout_service) are the endpoint where SP directs its SAML request, so it\u0027s at the IdP side (Where a SAML REQUEST should be sent). Refer to FIM idp_metadata.xml you had sent me couple of days ago to see a real-world examples.\nIt\u0027s empty by default cause I don\u0027t know how to reliably guess hostname without using wsgi.Application().","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":454,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":455,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata\u0027)"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_72b0ad43","line":454,"updated":"2014-08-20 01:27:37.000000000","message":"might be helpful to add an example","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":452,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix.\u0027),"},{"line_number":453,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":454,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":455,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata\u0027)"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_a5ee7cb2","line":454,"in_reply_to":"1abeadc6_72b0ad43","updated":"2014-08-20 08:08:29.000000000","message":"OK.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f8502f69b183a30b6a70f15b2dced5d20d6d1131","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":453,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":454,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata \u0027"},{"line_number":455,"context_line":"                        \u0027Example: https://keystone.idp.com/v3/OS-FEDERATION/\u0027"},{"line_number":456,"context_line":"                        \u0027saml2/sso\u0027)"},{"line_number":457,"context_line":"    ],"},{"line_number":458,"context_line":"    \u0027policy\u0027: ["}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_e8a3c0af","line":455,"updated":"2014-08-21 04:58:28.000000000","message":"keyatone.sp.com?","commit_id":"a47145ece7f44a6205813e79ecd6a040471b7d28"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"5aa14cab58be61a8642a085e0406b5a1bc8f188a","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":453,"context_line":"                   help\u003d\u0027IdenityProvider SingleSignOnService value  \u0027"},{"line_number":454,"context_line":"                        \u0027required in the Identity Provider\\\u0027s Metadata \u0027"},{"line_number":455,"context_line":"                        \u0027Example: https://keystone.idp.com/v3/OS-FEDERATION/\u0027"},{"line_number":456,"context_line":"                        \u0027saml2/sso\u0027)"},{"line_number":457,"context_line":"    ],"},{"line_number":458,"context_line":"    \u0027policy\u0027: ["}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_4a510735","line":455,"in_reply_to":"1abeadc6_e8a3c0af","updated":"2014-08-21 07:38:12.000000000","message":"No. This is a SingleSignOnService object to which a Service Provider will redirect with a \u003csaml:AuthnRequest\u003e. If you look at your FIM metadata you will see urls pointing to the IdP, not SP.","commit_id":"a47145ece7f44a6205813e79ecd6a040471b7d28"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        cfg.StrOpt(\u0027idp_entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":828,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":829,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":830,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":831,"context_line":"                        \u0027OS-FEDERATION/saml2/idp\u0027),"},{"line_number":832,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":833,"context_line":"                   help\u003d\u0027Idenity Provider Single-Sign-On service value, \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_7f9a6a64","line":830,"updated":"2014-09-02 06:34:39.000000000","message":"use keystone.example.com","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        cfg.StrOpt(\u0027idp_entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":828,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":829,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":830,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":831,"context_line":"                        \u0027OS-FEDERATION/saml2/idp\u0027),"},{"line_number":832,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":833,"context_line":"                   help\u003d\u0027Idenity Provider Single-Sign-On service value, \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_0dd3e6d6","line":830,"in_reply_to":"fa98f980_7f9a6a64","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":830,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":831,"context_line":"                        \u0027OS-FEDERATION/saml2/idp\u0027),"},{"line_number":832,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":833,"context_line":"                   help\u003d\u0027Idenity Provider Single-Sign-On service value, \u0027"},{"line_number":834,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"},{"line_number":835,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":836,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_3eed4b26","line":833,"updated":"2014-09-02 04:11:10.000000000","message":"identity","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":830,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":831,"context_line":"                        \u0027OS-FEDERATION/saml2/idp\u0027),"},{"line_number":832,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":833,"context_line":"                   help\u003d\u0027Idenity Provider Single-Sign-On service value, \u0027"},{"line_number":834,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"},{"line_number":835,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":836,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_edf2226e","line":833,"in_reply_to":"fa98f980_3eed4b26","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":832,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":833,"context_line":"                   help\u003d\u0027Idenity Provider Single-Sign-On service value, \u0027"},{"line_number":834,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"},{"line_number":835,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":836,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"},{"line_number":837,"context_line":"        cfg.StrOpt(\u0027idp_organization_name\u0027, default\u003d\u0027\u0027,"},{"line_number":838,"context_line":"                   help\u003d\u0027Organization name the installation belongs to.\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_9f9d4e5c","line":835,"updated":"2014-09-02 06:34:39.000000000","message":"use keystone.example.com","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":832,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027, default\u003d\u0027\u0027,"},{"line_number":833,"context_line":"                   help\u003d\u0027Idenity Provider Single-Sign-On service value, \u0027"},{"line_number":834,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"},{"line_number":835,"context_line":"                        \u0027For example: https://keystone.idp.com/v3/\u0027"},{"line_number":836,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"},{"line_number":837,"context_line":"        cfg.StrOpt(\u0027idp_organization_name\u0027, default\u003d\u0027\u0027,"},{"line_number":838,"context_line":"                   help\u003d\u0027Organization name the installation belongs to.\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_0dea0675","line":835,"in_reply_to":"fa98f980_9f9d4e5c","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        cfg.StrOpt(\u0027idp_organization_url\u0027, default\u003d\u0027\u0027,"},{"line_number":842,"context_line":"                   help\u003d\u0027URL of the organization.\u0027),"},{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_contact_company\u0027, default\u003d\u0027\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Contact person\\\u0027s company.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_3f89c226","line":844,"updated":"2014-09-02 06:34:39.000000000","message":"Company of contact person.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        cfg.StrOpt(\u0027idp_organization_url\u0027, default\u003d\u0027\u0027,"},{"line_number":842,"context_line":"                   help\u003d\u0027URL of the organization.\u0027),"},{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_contact_company\u0027, default\u003d\u0027\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Contact person\\\u0027s company.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_6d21d2b3","line":844,"in_reply_to":"fa98f980_3f89c226","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79fb39fb3e487c238a6960d570473d3f72930b46","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_contact_company\u0027, default\u003d\u0027\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Contact person\\\u0027s company.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_d6e189ff","line":846,"updated":"2014-09-02 02:53:04.000000000","message":"(nit) Maybe call out that this is the given name...","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_contact_company\u0027, default\u003d\u0027\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Contact person\\\u0027s company.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_ad2bba92","line":846,"in_reply_to":"fa98f980_1e2de746","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_contact_company\u0027, default\u003d\u0027\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Contact person\\\u0027s company.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1e2de746","line":846,"in_reply_to":"fa98f980_d6e189ff","updated":"2014-09-02 06:34:39.000000000","message":"Given name of contact person.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_bf7cd221","line":848,"updated":"2014-09-02 06:34:39.000000000","message":"Surname of contact person.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_contact_name\u0027, default\u003d\u0027\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s name.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_4d0dee3d","line":848,"in_reply_to":"fa98f980_bf7cd221","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"},{"line_number":852,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 telephone number.\u0027),"},{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_ff765a3d","line":850,"updated":"2014-09-02 06:34:39.000000000","message":"E-mail address of contact person","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_contact_surname\u0027, default\u003d\u0027\u0027,"},{"line_number":848,"context_line":"                   help\u003d\u0027Contact Person\\\u0027s surname.\u0027),"},{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"},{"line_number":852,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 telephone number.\u0027),"},{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_6d08f22d","line":850,"in_reply_to":"fa98f980_ff765a3d","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"},{"line_number":852,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 telephone number.\u0027),"},{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":854,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":855,"context_line":"                        \u0027technical, support, administrative \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_be469b1f","line":852,"updated":"2014-09-02 04:11:10.000000000","message":"quote looks to be in the wrong place\n\npersons\u0027 is plural and possible.. so the name of a group of people? which doesn\u0027t make much sense","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"},{"line_number":852,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 telephone number.\u0027),"},{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":854,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":855,"context_line":"                        \u0027technical, support, administrative \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_8d07d61b","line":852,"in_reply_to":"fa98f980_1f9b1e73","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        cfg.StrOpt(\u0027idp_contact_email\u0027, default\u003d\u0027\u0027,"},{"line_number":850,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 email address.\u0027),"},{"line_number":851,"context_line":"        cfg.StrOpt(\u0027idp_contact_telephone\u0027, default\u003d\u0027\u0027,"},{"line_number":852,"context_line":"                   help\u003d\u0027Contact persons\\\u0027 telephone number.\u0027),"},{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":854,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":855,"context_line":"                        \u0027technical, support, administrative \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1f9b1e73","line":852,"in_reply_to":"fa98f980_be469b1f","updated":"2014-09-02 06:34:39.000000000","message":"Telephone number of contact person.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":854,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":855,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":856,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":857,"context_line":"    ]"},{"line_number":858,"context_line":"}"},{"line_number":859,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_be6dbb9b","line":856,"updated":"2014-09-02 04:11:10.000000000","message":"doesn\u0027t Oslo support enumeration options types??","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":854,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":855,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":856,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":857,"context_line":"    ]"},{"line_number":858,"context_line":"}"},{"line_number":859,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_d0009503","line":856,"in_reply_to":"fa98f980_be6dbb9b","updated":"2014-09-02 14:08:59.000000000","message":"I am not sure, I will copy this comment to the next patch.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e8f48a3cb035355392ef3889a0d50f81bf85c871","unresolved":false,"context_lines":[{"line_number":830,"context_line":"                   default\u003d_KEYFILE,"},{"line_number":831,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing. Note, the path \u0027"},{"line_number":832,"context_line":"                        \u0027cannot contain a comma.\u0027),"},{"line_number":833,"context_line":"        cfg.StrOpt(\u0027idp_entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":834,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":835,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":836,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_5773b77f","line":833,"updated":"2014-09-02 15:18:24.000000000","message":"why are these defaulting to \u0027\u0027 rather than having no default? I think no default would make more sense.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2e96f4ac265c013a84573ffd0ac6e8377f3d700a","unresolved":false,"context_lines":[{"line_number":830,"context_line":"                   default\u003d_KEYFILE,"},{"line_number":831,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing. Note, the path \u0027"},{"line_number":832,"context_line":"                        \u0027cannot contain a comma.\u0027),"},{"line_number":833,"context_line":"        cfg.StrOpt(\u0027idp_entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":834,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":835,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":836,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_92636ddb","line":833,"in_reply_to":"fa98f980_5773b77f","updated":"2014-09-02 15:31:36.000000000","message":"++","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c3540544ab992a57585f5ff416aacd8a2143b768","unresolved":false,"context_lines":[{"line_number":830,"context_line":"                   default\u003d_KEYFILE,"},{"line_number":831,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing. Note, the path \u0027"},{"line_number":832,"context_line":"                        \u0027cannot contain a comma.\u0027),"},{"line_number":833,"context_line":"        cfg.StrOpt(\u0027idp_entity_id\u0027, default\u003d\u0027\u0027,"},{"line_number":834,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":835,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":836,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_37f9d080","line":833,"in_reply_to":"fa98f980_92636ddb","updated":"2014-09-02 16:42:44.000000000","message":"++","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"d7fbf7397f6fef9916f89a137d7ec02d837b7c53","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":860,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":861,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":862,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":863,"context_line":"    ]"},{"line_number":864,"context_line":"}"},{"line_number":865,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_fc3012a0","line":862,"updated":"2014-09-02 14:44:36.000000000","message":"Dolph: doesn\u0027t Oslo support enumeration options types??","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6da316a39be04a520eee09706aca766c3c1ddb19","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":860,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":861,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":862,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":863,"context_line":"    ]"},{"line_number":864,"context_line":"}"},{"line_number":865,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_5dc6754a","line":862,"in_reply_to":"fa98f980_d7a247ad","updated":"2014-09-02 18:03:33.000000000","message":"doesn\u0027t look like this exists, i\u0027ll check the options in the controller","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e8f48a3cb035355392ef3889a0d50f81bf85c871","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":860,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":861,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":862,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":863,"context_line":"    ]"},{"line_number":864,"context_line":"}"},{"line_number":865,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_d7a247ad","line":862,"in_reply_to":"fa98f980_fc3012a0","updated":"2014-09-02 15:18:24.000000000","message":"I was thinking the same thing.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"24df1dda43755c6f02f2c034808f343579514f87","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        cfg.StrOpt(\u0027idp_contact_type\u0027, default\u003d\u0027other\u0027,"},{"line_number":860,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":861,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":862,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":863,"context_line":"    ]"},{"line_number":864,"context_line":"}"},{"line_number":865,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_dcd42e22","line":862,"in_reply_to":"fa98f980_fc3012a0","updated":"2014-09-02 14:49:03.000000000","message":"we can do a follow up patch for this.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e8f48a3cb035355392ef3889a0d50f81bf85c871","unresolved":false,"context_lines":[{"line_number":860,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":861,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":862,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":863,"context_line":"    ]"},{"line_number":864,"context_line":"}"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_37463324","line":863,"updated":"2014-09-02 15:18:24.000000000","message":"leave the trailing , so that there\u0027s one fewer line change if a new section is added.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6da316a39be04a520eee09706aca766c3c1ddb19","unresolved":false,"context_lines":[{"line_number":860,"context_line":"                   help\u003d\u0027Contact type. Allowed values are: \u0027"},{"line_number":861,"context_line":"                        \u0027technical, support, administrative \u0027"},{"line_number":862,"context_line":"                        \u0027billing, and other\u0027),"},{"line_number":863,"context_line":"    ]"},{"line_number":864,"context_line":"}"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_d403220b","line":863,"in_reply_to":"fa98f980_37463324","updated":"2014-09-02 18:03:33.000000000","message":"Done","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":834,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":835,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":836,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"},{"line_number":837,"context_line":"                        \u0027OS-FEDERATION/saml2/idp\u0027),"},{"line_number":838,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027,"},{"line_number":839,"context_line":"                   help\u003d\u0027Identity Provider Single-Sign-On service value, \u0027"},{"line_number":840,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_a9055f7b","line":837,"updated":"2014-09-02 19:13:29.000000000","message":"This config option should document that a value is required to generate the IDP Metadata.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":834,"context_line":"                   help\u003d\u0027Entity ID value for unique Identity Provider \u0027"},{"line_number":835,"context_line":"                        \u0027identification. Usually FQDN is set with a suffix. \u0027"},{"line_number":836,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"},{"line_number":837,"context_line":"                        \u0027OS-FEDERATION/saml2/idp\u0027),"},{"line_number":838,"context_line":"        cfg.StrOpt(\u0027idp_sso_endpoint\u0027,"},{"line_number":839,"context_line":"                   help\u003d\u0027Identity Provider Single-Sign-On service value, \u0027"},{"line_number":840,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_4a1bfe1a","line":837,"in_reply_to":"fa98f980_a9055f7b","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                   help\u003d\u0027Identity Provider Single-Sign-On service value, \u0027"},{"line_number":840,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"},{"line_number":841,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"},{"line_number":842,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"},{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_lang\u0027, default\u003d\u0027en\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Locale used by the organization.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_organization_name\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_29f96f80","line":842,"updated":"2014-09-02 19:13:29.000000000","message":"This config option should document that a value is required to generate the IDP Metadata.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                   help\u003d\u0027Identity Provider Single-Sign-On service value, \u0027"},{"line_number":840,"context_line":"                        \u0027required in the Identity Provider\\\u0027s metadata. \u0027"},{"line_number":841,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"},{"line_number":842,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"},{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_lang\u0027, default\u003d\u0027en\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Locale used by the organization.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_organization_name\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_2a1cfa12","line":842,"in_reply_to":"fa98f980_29f96f80","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":841,"context_line":"                        \u0027For example: https://keystone.example.com/v3/\u0027"},{"line_number":842,"context_line":"                        \u0027OS-FEDERATION/saml2/sso\u0027),"},{"line_number":843,"context_line":"        cfg.StrOpt(\u0027idp_lang\u0027, default\u003d\u0027en\u0027,"},{"line_number":844,"context_line":"                   help\u003d\u0027Locale used by the organization.\u0027),"},{"line_number":845,"context_line":"        cfg.StrOpt(\u0027idp_organization_name\u0027,"},{"line_number":846,"context_line":"                   help\u003d\u0027Organization name the installation belongs to.\u0027),"},{"line_number":847,"context_line":"        cfg.StrOpt(\u0027idp_organization_display_name\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_8a06c6cc","line":844,"updated":"2014-09-02 21:40:58.000000000","message":"changed to language","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"}],"keystone/contrib/federation/idp.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f8502f69b183a30b6a70f15b2dced5d20d6d1131","unresolved":false,"context_lines":[{"line_number":423,"context_line":"class MetadataGenerator(object):"},{"line_number":424,"context_line":"    \"\"\"A class for generating SAML IdP Metadata.\"\"\""},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def generate_metadata(self):"},{"line_number":427,"context_line":"        \"\"\"Generate Identity Provider Metadata."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        Generate and format into XML a metadata to be exposed and"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_687ed01a","line":426,"updated":"2014-08-21 04:58:28.000000000","message":"Might want to have a function that tests to see that the config valyesb you are using actually have values. If the don\u0027t, log it.","commit_id":"a47145ece7f44a6205813e79ecd6a040471b7d28"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6ddde66af08eff4edd25fa5caa79b116d990016","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        return ed"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def _create_idpssodescriptor(self):"},{"line_number":439,"context_line":"        def get_cert():"},{"line_number":440,"context_line":"            \"\"\"Open and read certificate file."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"            The function returns a certificate with the first and last lines"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_e3e01528","line":439,"updated":"2014-08-29 07:35:03.000000000","message":"Pysaml provides this function, take a look at the tests in the dependent patch","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2110c2e728c18901a892cd11fc1638d8305883ec","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        return ed"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def _create_idpssodescriptor(self):"},{"line_number":439,"context_line":"        def get_cert():"},{"line_number":440,"context_line":"            \"\"\"Open and read certificate file."},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"            The function returns a certificate with the first and last lines"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_f4ab22d4","line":439,"in_reply_to":"1abeadc6_e3e01528","updated":"2014-09-01 03:45:20.000000000","message":"Done","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ec987350b2db810ab83cf821acedbf289bff7552","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                organization_url\u003durl, organization_name\u003dname)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        def contact_person():"},{"line_number":489,"context_line":"            company \u003d md.Company(text\u003dCONF.saml.idp_contact_company)"},{"line_number":490,"context_line":"            given_name \u003d md.GivenName(text\u003dCONF.saml.idp_contact_name)"},{"line_number":491,"context_line":"            surname \u003d md.SurName(text\u003dCONF.saml.idp_contact_surname)"},{"line_number":492,"context_line":"            email \u003d md.EmailAddress(text\u003dCONF.saml.idp_contact_email)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_0b9b5666","line":489,"updated":"2014-08-29 14:55:54.000000000","message":"If a deployer doesn\u0027t fill out these config options in the Keystone config and we try building a contact person, should we be making sure that the values aren\u0027t none?","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2110c2e728c18901a892cd11fc1638d8305883ec","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                organization_url\u003durl, organization_name\u003dname)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        def contact_person():"},{"line_number":489,"context_line":"            company \u003d md.Company(text\u003dCONF.saml.idp_contact_company)"},{"line_number":490,"context_line":"            given_name \u003d md.GivenName(text\u003dCONF.saml.idp_contact_name)"},{"line_number":491,"context_line":"            surname \u003d md.SurName(text\u003dCONF.saml.idp_contact_surname)"},{"line_number":492,"context_line":"            email \u003d md.EmailAddress(text\u003dCONF.saml.idp_contact_email)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_74ee5224","line":489,"in_reply_to":"1abeadc6_0b9b5666","updated":"2014-09-01 03:45:20.000000000","message":"i\u0027d like to see if we can come up with a reasonable default instead of enforcing these values.","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6ddde66af08eff4edd25fa5caa79b116d990016","unresolved":false,"context_lines":[{"line_number":492,"context_line":"            email \u003d md.EmailAddress(text\u003dCONF.saml.idp_contact_email)"},{"line_number":493,"context_line":"            telephone \u003d md.TelephoneNumber("},{"line_number":494,"context_line":"                text\u003dCONF.saml.idp_contact_telephone)"},{"line_number":495,"context_line":"            contact_type \u003d CONF.saml.idp_contact_type"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"            return md.ContactPerson("},{"line_number":498,"context_line":"                company\u003dcompany, given_name\u003dgiven_name, sur_name\u003dsurname,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_83220150","line":495,"updated":"2014-08-29 07:35:03.000000000","message":"Should contact type be a pysaml class?","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2110c2e728c18901a892cd11fc1638d8305883ec","unresolved":false,"context_lines":[{"line_number":492,"context_line":"            email \u003d md.EmailAddress(text\u003dCONF.saml.idp_contact_email)"},{"line_number":493,"context_line":"            telephone \u003d md.TelephoneNumber("},{"line_number":494,"context_line":"                text\u003dCONF.saml.idp_contact_telephone)"},{"line_number":495,"context_line":"            contact_type \u003d CONF.saml.idp_contact_type"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"            return md.ContactPerson("},{"line_number":498,"context_line":"                company\u003dcompany, given_name\u003dgiven_name, sur_name\u003dsurname,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_26dbc01c","line":495,"in_reply_to":"1abeadc6_83220150","updated":"2014-09-01 03:45:20.000000000","message":"Done","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"197231159a11c9ddd2e77f4458b37ebac6ada9d9","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _create_idpssodescriptor(self):"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        def get_cert():"},{"line_number":468,"context_line":"            try:"},{"line_number":469,"context_line":"                return sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":470,"context_line":"            except (IOError, sigver.CertificateError) as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_9560ff36","line":467,"updated":"2014-09-01 13:48:49.000000000","message":"I rolled back to get_cert() function, as I believe we should catch here pysaml2 specific exception, as well as IOError and explicitely log an error here.","commit_id":"ed43a30a0a8acdedd7444a9a6448fa7a13f3e94c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"197231159a11c9ddd2e77f4458b37ebac6ada9d9","unresolved":false,"context_lines":[{"line_number":515,"context_line":"            return md.ContactPerson("},{"line_number":516,"context_line":"                company\u003dcompany, given_name\u003dgiven_name, sur_name\u003dsurname,"},{"line_number":517,"context_line":"                email_address\u003demail, telephone_number\u003dtelephone,"},{"line_number":518,"context_line":"                contact_type\u003dcontact_type)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        def name_id_format():"},{"line_number":521,"context_line":"            return md.NameIDFormat(text\u003dsaml.NAMEID_FORMAT_TRANSIENT)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_15024f3e","line":518,"updated":"2014-09-01 13:48:49.000000000","message":"So it\u0027s kind of weird to me, because indeed it looks like contract_type should be a ContractType_ (or even ContractTypeType_) object, but then I found md.EntityDescriptor.verify() method failing.","commit_id":"ed43a30a0a8acdedd7444a9a6448fa7a13f3e94c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        ed.entity_id \u003d CONF.saml.idp_entity_id"},{"line_number":463,"context_line":"        return ed"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _create_idpssodescriptor(self):"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        def get_cert():"},{"line_number":468,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_3ebe2bd5","line":465,"updated":"2014-09-02 04:11:10.000000000","message":"this method name is_reallyhardtoread.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        ed.entity_id \u003d CONF.saml.idp_entity_id"},{"line_number":463,"context_line":"        return ed"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _create_idpssodescriptor(self):"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        def get_cert():"},{"line_number":468,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_3fde2212","line":465,"in_reply_to":"fa98f980_3ebe2bd5","updated":"2014-09-02 06:34:39.000000000","message":"_create_idpsso_descriptor ?\n\nor _create_idp_sso_descriptor","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        ed.entity_id \u003d CONF.saml.idp_entity_id"},{"line_number":463,"context_line":"        return ed"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _create_idpssodescriptor(self):"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        def get_cert():"},{"line_number":468,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_b019517b","line":465,"in_reply_to":"fa98f980_3fde2212","updated":"2014-09-02 14:08:59.000000000","message":"Changed.\nIDPSSODescriptor is a object\u0027s name so I was trying to be consistent.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                raise IOError(msg)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        def key_descriptor():"},{"line_number":478,"context_line":"            cert \u003d sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":479,"context_line":"            return md.KeyDescriptor("},{"line_number":480,"context_line":"                key_info\u003dxmldsig.KeyInfo("},{"line_number":481,"context_line":"                    x509_data\u003dxmldsig.X509Data("}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_9e7c7722","line":478,"updated":"2014-09-02 04:11:10.000000000","message":"did you mean to use get_cert here?","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f480250fcdbe9fae94d052a04763f28676c2896c","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                raise IOError(msg)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        def key_descriptor():"},{"line_number":478,"context_line":"            cert \u003d sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":479,"context_line":"            return md.KeyDescriptor("},{"line_number":480,"context_line":"                key_info\u003dxmldsig.KeyInfo("},{"line_number":481,"context_line":"                    x509_data\u003dxmldsig.X509Data("}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_9a68e388","line":478,"in_reply_to":"fa98f980_703b6938","updated":"2014-09-02 16:40:44.000000000","message":"1) it shouldn\u0027t log anything for us, but it\u0027s reasonable for us to wrap our call to it with a catch to log failures. so, I agree.\n\n2) it seems reasonable to re-raise these as an UnexpectedError with a custom message.\n\n3) read_cert_from_file() looks like it\u0027s going to leak file descriptors. that bug should be filed and addressed upstream. I\u0027m fine with (A) if that\u0027s viable, else file a bug against keystone that we\u0027re going to leak descriptors when we use that method, and target it to juno-3 / RC1. hopefully we\u0027ll be able to see an upstream release to fix that issue soon?","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                raise IOError(msg)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        def key_descriptor():"},{"line_number":478,"context_line":"            cert \u003d sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":479,"context_line":"            return md.KeyDescriptor("},{"line_number":480,"context_line":"                key_info\u003dxmldsig.KeyInfo("},{"line_number":481,"context_line":"                    x509_data\u003dxmldsig.X509Data("}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_dff3569d","line":478,"in_reply_to":"fa98f980_9e7c7722","updated":"2014-09-02 06:34:39.000000000","message":"I say remove the get_cert() function. I think sigver has sufficient error handling","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                raise IOError(msg)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        def key_descriptor():"},{"line_number":478,"context_line":"            cert \u003d sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":479,"context_line":"            return md.KeyDescriptor("},{"line_number":480,"context_line":"                key_info\u003dxmldsig.KeyInfo("},{"line_number":481,"context_line":"                    x509_data\u003dxmldsig.X509Data("}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_703b6938","line":478,"in_reply_to":"fa98f980_dff3569d","updated":"2014-09-02 14:08:59.000000000","message":"Actually when I looked again in the sigver.read_cert_from_file() body (https://github.com/rohe/pysaml2/blob/master/src/saml2/sigver.py#L656) I noticed few things and I am not so sure sigver.read_cert_from_file() is sufficient (and even should be used): \n\n1) In case of problems it will raise standard IOError exception withoug logging it anywhere. I think we should log that something bad happened (or the cert file path is simply misconfigured) -\u003e I think we should wrap sigver.read_cert_file() somehow.\n\n2) a sigver.CertificateError is raised in case simple checks are not True. Do we really want to expose library specific exceptions to the Keystone ecosystem? I feel we should not really raise anything else that standard Python exceptions (IOError, ValueError, IndexError) and those listed in keystone.exception.py. That\u0027s why I proposed catching sigver.CertificateError and re raising as IOError.\n\n3) Inside sigver.read_cert_from_file() i can see the file is opened, but never closed. Looks like a serious bug inside the function? \n\nTherefore, for now on I will change to get_cert() but I expect some background whether wheher I should change to:\n\na) own implementation of the read_cert_from_file() (which  would be a fixed version of its predecessor)\nb) use simply sigver.read_cert_from_file() \nc) use get_cert() which somehow wraps sigver.read_cert_from_file()\n\nI personally vote for a).","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e8f48a3cb035355392ef3889a0d50f81bf85c871","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def _create_entity_descriptor(self):"},{"line_number":438,"context_line":"        ed \u003d md.EntityDescriptor()"},{"line_number":439,"context_line":"        ed.entity_id \u003d CONF.saml.idp_entity_id"},{"line_number":440,"context_line":"        return ed"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _create_idp_sso_descriptor(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_b7722347","line":439,"updated":"2014-09-02 15:18:24.000000000","message":"is this going to work if CONF.saml.idp_entity_id is the default?","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e8f48a3cb035355392ef3889a0d50f81bf85c871","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                location\u003didp_sso_endpoint)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        def organization():"},{"line_number":471,"context_line":"            name \u003d md.OrganizationName(lang\u003d\u0027en\u0027,"},{"line_number":472,"context_line":"                                       text\u003dCONF.saml.idp_organization_name)"},{"line_number":473,"context_line":"            display_name \u003d md.OrganizationDisplayName("},{"line_number":474,"context_line":"                lang\u003d\u0027en\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_b7c0632b","line":471,"updated":"2014-09-02 15:18:24.000000000","message":"seems like not everyone\u0027s going to want english for their org name.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c3540544ab992a57585f5ff416aacd8a2143b768","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                location\u003didp_sso_endpoint)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        def organization():"},{"line_number":471,"context_line":"            name \u003d md.OrganizationName(lang\u003d\u0027en\u0027,"},{"line_number":472,"context_line":"                                       text\u003dCONF.saml.idp_organization_name)"},{"line_number":473,"context_line":"            display_name \u003d md.OrganizationDisplayName("},{"line_number":474,"context_line":"                lang\u003d\u0027en\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_5a1cbb13","line":471,"in_reply_to":"fa98f980_b7c0632b","updated":"2014-09-02 16:42:44.000000000","message":"++ should probably be a CONF","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6da316a39be04a520eee09706aca766c3c1ddb19","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                location\u003didp_sso_endpoint)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        def organization():"},{"line_number":471,"context_line":"            name \u003d md.OrganizationName(lang\u003d\u0027en\u0027,"},{"line_number":472,"context_line":"                                       text\u003dCONF.saml.idp_organization_name)"},{"line_number":473,"context_line":"            display_name \u003d md.OrganizationDisplayName("},{"line_number":474,"context_line":"                lang\u003d\u0027en\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_123dbdde","line":471,"in_reply_to":"fa98f980_b7c0632b","updated":"2014-09-02 18:03:33.000000000","message":"I made this a CONF option, defaults to english","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        consumed by a federated Service Provider."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :return: XML \u003cEntityDescriptor\u003e object."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        \"\"\""},{"line_number":432,"context_line":"        self._ensure_required_values_present()"},{"line_number":433,"context_line":"        entity_descriptor \u003d self._create_entity_descriptor()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_899b3b71","line":430,"updated":"2014-09-02 19:13:29.000000000","message":"should document that exception.ValidationError will be raised if the required configuration options aren\u0027t set.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        consumed by a federated Service Provider."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :return: XML \u003cEntityDescriptor\u003e object."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        \"\"\""},{"line_number":432,"context_line":"        self._ensure_required_values_present()"},{"line_number":433,"context_line":"        entity_descriptor \u003d self._create_entity_descriptor()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_ea867212","line":430,"in_reply_to":"fa98f980_899b3b71","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            try:"},{"line_number":447,"context_line":"                return sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":448,"context_line":"            except (IOError, sigver.CertificateError) as e:"},{"line_number":449,"context_line":"                msg \u003d _LE(\"Cannot open certificate %(cert_file)s. \""},{"line_number":450,"context_line":"                          \"Reason: %(reason)s\")"},{"line_number":451,"context_line":"                msg \u003d msg % {\u0027cert_file\u0027: CONF.saml.certfile, \u0027reason\u0027: e}"},{"line_number":452,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_2ecfb580","line":449,"updated":"2014-09-02 19:13:29.000000000","message":"this should be _() rather than _LE() since it\u0027s used in an exception, so we don\u0027t know where it\u0027s going to be used (it will probably be printed to stdout.)","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            try:"},{"line_number":447,"context_line":"                return sigver.read_cert_from_file(CONF.saml.certfile, \u0027pem\u0027)"},{"line_number":448,"context_line":"            except (IOError, sigver.CertificateError) as e:"},{"line_number":449,"context_line":"                msg \u003d _LE(\"Cannot open certificate %(cert_file)s. \""},{"line_number":450,"context_line":"                          \"Reason: %(reason)s\")"},{"line_number":451,"context_line":"                msg \u003d msg % {\u0027cert_file\u0027: CONF.saml.certfile, \u0027reason\u0027: e}"},{"line_number":452,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_aae1cad1","line":449,"in_reply_to":"fa98f980_2ecfb580","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            display_name \u003d md.OrganizationDisplayName("},{"line_number":475,"context_line":"                lang\u003dCONF.saml.idp_lang,"},{"line_number":476,"context_line":"                text\u003dCONF.saml.idp_organization_display_name)"},{"line_number":477,"context_line":"            url \u003d md.OrganizationURL(lang\u003dCONF.saml.idp_lang,"},{"line_number":478,"context_line":"                                     text\u003dCONF.saml.idp_organization_url)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"            return md.Organization("}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_4e08792d","line":477,"updated":"2014-09-02 19:13:29.000000000","message":"seems weird for a URL to have a language.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            display_name \u003d md.OrganizationDisplayName("},{"line_number":475,"context_line":"                lang\u003dCONF.saml.idp_lang,"},{"line_number":476,"context_line":"                text\u003dCONF.saml.idp_organization_display_name)"},{"line_number":477,"context_line":"            url \u003d md.OrganizationURL(lang\u003dCONF.saml.idp_lang,"},{"line_number":478,"context_line":"                                     text\u003dCONF.saml.idp_organization_url)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"            return md.Organization("}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_2acdda5d","line":477,"in_reply_to":"fa98f980_4e08792d","updated":"2014-09-02 21:40:58.000000000","message":"i thought so too, but pysaml blew up if it wasn\u0027t specified.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        \"\"\"Ensure idp_sso_endpoint and idp_entity_id have values.\"\"\""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        if CONF.saml.idp_entity_id is None:"},{"line_number":516,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_entity_id is set.\u0027)"},{"line_number":517,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":518,"context_line":"        if CONF.saml.idp_sso_endpoint is None:"},{"line_number":519,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_sso_endpoint is set.\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_690457c0","line":516,"updated":"2014-09-02 19:13:29.000000000","message":"this should be _() since wherever the exception is caught might not log it at error level.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        \"\"\"Ensure idp_sso_endpoint and idp_entity_id have values.\"\"\""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        if CONF.saml.idp_entity_id is None:"},{"line_number":516,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_entity_id is set.\u0027)"},{"line_number":517,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":518,"context_line":"        if CONF.saml.idp_sso_endpoint is None:"},{"line_number":519,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_sso_endpoint is set.\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_aa08ea91","line":516,"in_reply_to":"fa98f980_690457c0","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_entity_id is set.\u0027)"},{"line_number":517,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":518,"context_line":"        if CONF.saml.idp_sso_endpoint is None:"},{"line_number":519,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_sso_endpoint is set.\u0027)"},{"line_number":520,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"    def _check_contact_person_values(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_89ffbba9","line":519,"updated":"2014-09-02 19:13:29.000000000","message":"this should be _() since wherever the exception is caught might not log it at error level.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_entity_id is set.\u0027)"},{"line_number":517,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":518,"context_line":"        if CONF.saml.idp_sso_endpoint is None:"},{"line_number":519,"context_line":"            msg \u003d _LE(\u0027Ensure configuration option idp_sso_endpoint is set.\u0027)"},{"line_number":520,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"    def _check_contact_person_values(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_caffee65","line":519,"in_reply_to":"fa98f980_89ffbba9","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cba34939e4f4830c3f35547e243713b00b7fe6e2","unresolved":false,"context_lines":[{"line_number":536,"context_line":"        valid_type_values \u003d [\u0027technical\u0027, \u0027other\u0027, \u0027support\u0027, \u0027administrative\u0027,"},{"line_number":537,"context_line":"                             \u0027billing\u0027]"},{"line_number":538,"context_line":"        if CONF.saml.idp_contact_type not in valid_type_values:"},{"line_number":539,"context_line":"            msg \u003d _LE(\u0027idp_contact_type must be one of: [technical, other, \u0027"},{"line_number":540,"context_line":"                      \u0027support, administrative or billing.\u0027)"},{"line_number":541,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":542,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_c930e3a0","line":539,"updated":"2014-09-02 19:13:29.000000000","message":"this should be _() since wherever the exception is caught might not log it at error level.","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acb73e0f6e8c8668f257ea3a4965c066eb29bced","unresolved":false,"context_lines":[{"line_number":536,"context_line":"        valid_type_values \u003d [\u0027technical\u0027, \u0027other\u0027, \u0027support\u0027, \u0027administrative\u0027,"},{"line_number":537,"context_line":"                             \u0027billing\u0027]"},{"line_number":538,"context_line":"        if CONF.saml.idp_contact_type not in valid_type_values:"},{"line_number":539,"context_line":"            msg \u003d _LE(\u0027idp_contact_type must be one of: [technical, other, \u0027"},{"line_number":540,"context_line":"                      \u0027support, administrative or billing.\u0027)"},{"line_number":541,"context_line":"            raise exception.ValidationError(msg)"},{"line_number":542,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_ea02f26d","line":539,"in_reply_to":"fa98f980_c930e3a0","updated":"2014-09-02 21:40:58.000000000","message":"Done","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"752436e5be9a81ce8a34ed20f50ebe3ff93cc26b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        consumed by a federated Service Provider."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :return: XML \u003cEntityDescriptor\u003e object."},{"line_number":430,"context_line":"        :raises: keystone.exception.ValidationError: Raises if the required"},{"line_number":431,"context_line":"                                                     config options aren\u0027t set."},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_2a85daac","line":430,"updated":"2014-09-02 21:44:33.000000000","message":"change \"Raises\" to \"Raised\"","commit_id":"57ca6e23587e2710ca41aac9108a54b88b7a67a9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e5dd78ada2dac15eb03616abcfb1255e0581359b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        consumed by a federated Service Provider."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :return: XML \u003cEntityDescriptor\u003e object."},{"line_number":430,"context_line":"        :raises: keystone.exception.ValidationError: Raises if the required"},{"line_number":431,"context_line":"                                                     config options aren\u0027t set."},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa98f980_ea7112e1","line":430,"updated":"2014-09-02 21:45:56.000000000","message":"i don\u0027t think there\u0027s supposed to be a colon immediately after :raises","commit_id":"57ca6e23587e2710ca41aac9108a54b88b7a67a9"}],"keystone/contrib/federation/metadata_generator.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1abeadc6_f732ef0e","updated":"2014-08-20 01:27:37.000000000","message":"you can call this file metadata, the main class is MetadataGenerator anyway","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1abeadc6_ba4a17aa","in_reply_to":"1abeadc6_f732ef0e","updated":"2014-08-20 08:08:29.000000000","message":"or I will move it to the idp.py module.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import config"},{"line_number":20,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_b9feb336","line":21,"updated":"2014-08-19 21:37:39.000000000","message":"Add an extra newline here.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import config"},{"line_number":20,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_2517cc52","line":21,"in_reply_to":"1abeadc6_b9feb336","updated":"2014-08-20 08:08:29.000000000","message":"Done","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        def get_cert():"},{"line_number":53,"context_line":"            \"\"\"Open and read certificate file."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            The function strips first and last line."},{"line_number":56,"context_line":"            :return: certificate"},{"line_number":57,"context_line":"            :raises IOError: in case of opening reading certificate file."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_72426d3f","line":55,"updated":"2014-08-20 01:27:37.000000000","message":"that not all it does, `This function returns a certificate with the first and last lines stripped`","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        def get_cert():"},{"line_number":53,"context_line":"            \"\"\"Open and read certificate file."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            The function strips first and last line."},{"line_number":56,"context_line":"            :return: certificate"},{"line_number":57,"context_line":"            :raises IOError: in case of opening reading certificate file."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_000b9e25","line":55,"in_reply_to":"1abeadc6_72426d3f","updated":"2014-08-20 08:08:29.000000000","message":"Done","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            try:"},{"line_number":61,"context_line":"                with open(CONF.signing.certfile, \u0027r\u0027) as certificate:"},{"line_number":62,"context_line":"                    return \"\".join(certificate.readlines()[1:-1])"},{"line_number":63,"context_line":"            except IOError as e:"},{"line_number":64,"context_line":"                msg \u003d (\"Canot open certificate %(cert_file)s. \""},{"line_number":65,"context_line":"                       \"Reason: %(reason)s\" % {"},{"line_number":66,"context_line":"                           \u0027cert_file\u0027: CONF.signing.certfile,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_f98f4bca","line":63,"updated":"2014-08-19 21:37:39.000000000","message":"Is this something that should be logged?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            try:"},{"line_number":61,"context_line":"                with open(CONF.signing.certfile, \u0027r\u0027) as certificate:"},{"line_number":62,"context_line":"                    return \"\".join(certificate.readlines()[1:-1])"},{"line_number":63,"context_line":"            except IOError as e:"},{"line_number":64,"context_line":"                msg \u003d (\"Canot open certificate %(cert_file)s. \""},{"line_number":65,"context_line":"                       \"Reason: %(reason)s\" % {"},{"line_number":66,"context_line":"                           \u0027cert_file\u0027: CONF.signing.certfile,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_facbaf1b","line":63,"in_reply_to":"1abeadc6_122bf982","updated":"2014-08-20 08:08:29.000000000","message":"yes, and it will be logged.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            try:"},{"line_number":61,"context_line":"                with open(CONF.signing.certfile, \u0027r\u0027) as certificate:"},{"line_number":62,"context_line":"                    return \"\".join(certificate.readlines()[1:-1])"},{"line_number":63,"context_line":"            except IOError as e:"},{"line_number":64,"context_line":"                msg \u003d (\"Canot open certificate %(cert_file)s. \""},{"line_number":65,"context_line":"                       \"Reason: %(reason)s\" % {"},{"line_number":66,"context_line":"                           \u0027cert_file\u0027: CONF.signing.certfile,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_122bf982","line":63,"in_reply_to":"1abeadc6_f98f4bca","updated":"2014-08-20 01:27:37.000000000","message":"++","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                with open(CONF.signing.certfile, \u0027r\u0027) as certificate:"},{"line_number":62,"context_line":"                    return \"\".join(certificate.readlines()[1:-1])"},{"line_number":63,"context_line":"            except IOError as e:"},{"line_number":64,"context_line":"                msg \u003d (\"Canot open certificate %(cert_file)s. \""},{"line_number":65,"context_line":"                       \"Reason: %(reason)s\" % {"},{"line_number":66,"context_line":"                           \u0027cert_file\u0027: CONF.signing.certfile,"},{"line_number":67,"context_line":"                           \u0027reason\u0027: e"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_723b4dd1","line":64,"updated":"2014-08-20 01:27:37.000000000","message":"prefix msg with _() to mark for translation","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                with open(CONF.signing.certfile, \u0027r\u0027) as certificate:"},{"line_number":62,"context_line":"                    return \"\".join(certificate.readlines()[1:-1])"},{"line_number":63,"context_line":"            except IOError as e:"},{"line_number":64,"context_line":"                msg \u003d (\"Canot open certificate %(cert_file)s. \""},{"line_number":65,"context_line":"                       \"Reason: %(reason)s\" % {"},{"line_number":66,"context_line":"                           \u0027cert_file\u0027: CONF.signing.certfile,"},{"line_number":67,"context_line":"                           \u0027reason\u0027: e"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_1ad30bd7","line":64,"in_reply_to":"1abeadc6_723b4dd1","updated":"2014-08-20 08:08:29.000000000","message":"good point.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                       })"},{"line_number":69,"context_line":"                raise IOError(msg)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        def keydescriptor():"},{"line_number":72,"context_line":"            cert \u003d get_cert()"},{"line_number":73,"context_line":"            return md.KeyDescriptor("},{"line_number":74,"context_line":"                key_info\u003dds.KeyInfo("}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_d230a1ea","line":71,"updated":"2014-08-20 01:27:37.000000000","message":"key_descriptor?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                       })"},{"line_number":69,"context_line":"                raise IOError(msg)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        def keydescriptor():"},{"line_number":72,"context_line":"            cert \u003d get_cert()"},{"line_number":73,"context_line":"            return md.KeyDescriptor("},{"line_number":74,"context_line":"                key_info\u003dds.KeyInfo("}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_7ad79fbf","line":71,"in_reply_to":"1abeadc6_d230a1ea","updated":"2014-08-20 08:08:29.000000000","message":"yeah, Python naming philosophy :-)","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                ), use\u003d\u0027signing\u0027"},{"line_number":79,"context_line":"            )"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        def singlesigon_service():"},{"line_number":82,"context_line":"            idp_sso_endpoint \u003d CONF.federation.idp_sso_endpoint"},{"line_number":83,"context_line":"            return md.SingleSignOnService(text\u003didp_sso_endpoint)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_54ad669b","line":81,"updated":"2014-08-19 21:37:39.000000000","message":"single_signon_service?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                ), use\u003d\u0027signing\u0027"},{"line_number":79,"context_line":"            )"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        def singlesigon_service():"},{"line_number":82,"context_line":"            idp_sso_endpoint \u003d CONF.federation.idp_sso_endpoint"},{"line_number":83,"context_line":"            return md.SingleSignOnService(text\u003didp_sso_endpoint)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_1aea2b75","line":81,"in_reply_to":"1abeadc6_54ad669b","updated":"2014-08-20 08:08:29.000000000","message":"yeah, Python naming philosophy :-)","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"}],"keystone/tests/federation_fixtures.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# Organization info"},{"line_number":18,"context_line":"IDP_ORGANIZATION_NAME \u003d \u0027ACME INC\u0027"},{"line_number":19,"context_line":"IDP_ORGANIZATION_DISPLAY_NAME \u003d \u0027ACME\u0027"},{"line_number":20,"context_line":"IDP_ORGANIZATION_URL \u003d \u0027https://acme.com\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Contact info"},{"line_number":23,"context_line":"IDP_CONTACT_GIVEN_NAME \u003d \u0027Joe\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_3ebaabc0","line":20,"updated":"2014-09-02 04:11:10.000000000","message":"acme.example.com","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# Organization info"},{"line_number":18,"context_line":"IDP_ORGANIZATION_NAME \u003d \u0027ACME INC\u0027"},{"line_number":19,"context_line":"IDP_ORGANIZATION_DISPLAY_NAME \u003d \u0027ACME\u0027"},{"line_number":20,"context_line":"IDP_ORGANIZATION_URL \u003d \u0027https://acme.com\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Contact info"},{"line_number":23,"context_line":"IDP_CONTACT_GIVEN_NAME \u003d \u0027Joe\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_30ed618c","line":20,"in_reply_to":"fa98f980_3ebaabc0","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# Contact info"},{"line_number":23,"context_line":"IDP_CONTACT_GIVEN_NAME \u003d \u0027Joe\u0027"},{"line_number":24,"context_line":"IDP_CONTACT_SURNAME \u003d \u0027Hacker\u0027"},{"line_number":25,"context_line":"IDP_CONTACT_EMAIL \u003d \u0027joe@acme.com\u0027"},{"line_number":26,"context_line":"IDP_CONTACT_TELEPHONE_NUMBER \u003d \u00271234567890\u0027"},{"line_number":27,"context_line":"IDP_CONTACT_TYPE \u003d \u0027technical\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_febf43a8","line":25,"updated":"2014-09-02 04:11:10.000000000","message":"same","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# Contact info"},{"line_number":23,"context_line":"IDP_CONTACT_GIVEN_NAME \u003d \u0027Joe\u0027"},{"line_number":24,"context_line":"IDP_CONTACT_SURNAME \u003d \u0027Hacker\u0027"},{"line_number":25,"context_line":"IDP_CONTACT_EMAIL \u003d \u0027joe@acme.com\u0027"},{"line_number":26,"context_line":"IDP_CONTACT_TELEPHONE_NUMBER \u003d \u00271234567890\u0027"},{"line_number":27,"context_line":"IDP_CONTACT_TYPE \u003d \u0027technical\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_70fe093a","line":25,"in_reply_to":"fa98f980_febf43a8","updated":"2014-09-02 14:08:59.000000000","message":"Done","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"        self.assertEqual(self.PROJECT, project_attribute[0].text)"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1673,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_b4d95a85","line":1672,"updated":"2014-08-19 21:37:39.000000000","message":"Does this actually need to subclass FederationTests? Does it require any of the setup from it?","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"        self.assertEqual(self.PROJECT, project_attribute[0].text)"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1673,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_40b1168e","line":1672,"in_reply_to":"1abeadc6_12a059f3","updated":"2014-08-20 08:08:29.000000000","message":"++","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcd312e3785438eb67976970f378cde5924dd849","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"        self.assertEqual(self.PROJECT, project_attribute[0].text)"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1673,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_12a059f3","line":1672,"in_reply_to":"1abeadc6_b4d95a85","updated":"2014-08-20 01:27:37.000000000","message":"FederationTests does the extension setup (paste, db migration), so it\u0027s handy, not super necessary ATM, but i assume marek will be adding a controller/router. So, I\u0027m ok with leaving it here.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"3f9ce059eacffd52efb1fac375e2a151df7e32a2","unresolved":false,"context_lines":[{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    def setUp(self):"},{"line_number":1676,"context_line":"        super(IdPMetadataGenerationTests, self).setUp()"},{"line_number":1677,"context_line":"        CONF.federation.entity_id \u003d \u0027https://localhost/v3/OS-FEDERATION/idp\u0027"},{"line_number":1678,"context_line":"        CONF.federation.idp_sso_endpoint \u003d (\u0027https://localhost/v3/\u0027"},{"line_number":1679,"context_line":"                                            \u0027OS-FEDERATION/saml2/SSO\u0027)"},{"line_number":1680,"context_line":"        self.generator \u003d metadata_generator.MetadataGenerator()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_391d4374","line":1677,"updated":"2014-08-19 21:37:39.000000000","message":"We should be using the config fixture here.","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d02bb2cab40e4befc1ccc41d0a6aa67520c8a93","unresolved":false,"context_lines":[{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    def setUp(self):"},{"line_number":1676,"context_line":"        super(IdPMetadataGenerationTests, self).setUp()"},{"line_number":1677,"context_line":"        CONF.federation.entity_id \u003d \u0027https://localhost/v3/OS-FEDERATION/idp\u0027"},{"line_number":1678,"context_line":"        CONF.federation.idp_sso_endpoint \u003d (\u0027https://localhost/v3/\u0027"},{"line_number":1679,"context_line":"                                            \u0027OS-FEDERATION/saml2/SSO\u0027)"},{"line_number":1680,"context_line":"        self.generator \u003d metadata_generator.MetadataGenerator()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_ab164bef","line":1677,"in_reply_to":"1abeadc6_391d4374","updated":"2014-08-20 08:08:29.000000000","message":"Done","commit_id":"906381ea2bd5fef3f7cc6bfff5aa02fd56a54433"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6ddde66af08eff4edd25fa5caa79b116d990016","unresolved":false,"context_lines":[{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"    def setUp(self):"},{"line_number":1693,"context_line":"        super(IdPMetadataGenerationTests, self).setUp()"},{"line_number":1694,"context_line":"        CONF.saml.idp_entity_id \u003d federation_fixtures.IDP_ENTITY_ID"},{"line_number":1695,"context_line":"        CONF.saml.idp_sso_endpoint \u003d federation_fixtures.IDP_SSO_ENDPOINT"},{"line_number":1696,"context_line":"        CONF.saml.idp_organization_name \u003d \\"},{"line_number":1697,"context_line":"            federation_fixtures.IDP_ORGANIZATION_NAME"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_238e8d2e","line":1694,"updated":"2014-08-29 07:35:03.000000000","message":"Try to load this only once? Setup will do it for every test.","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6282,"name":"Wu Wenxiang","email":"wu.wenxiang@algoblu.com","username":"wu-wenxiang"},"change_message_id":"dbbfd6effefee4ea9b3da18291d119eef1acaad0","unresolved":false,"context_lines":[{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"    def setUp(self):"},{"line_number":1693,"context_line":"        super(IdPMetadataGenerationTests, self).setUp()"},{"line_number":1694,"context_line":"        CONF.saml.idp_entity_id \u003d federation_fixtures.IDP_ENTITY_ID"},{"line_number":1695,"context_line":"        CONF.saml.idp_sso_endpoint \u003d federation_fixtures.IDP_SSO_ENDPOINT"},{"line_number":1696,"context_line":"        CONF.saml.idp_organization_name \u003d \\"},{"line_number":1697,"context_line":"            federation_fixtures.IDP_ORGANIZATION_NAME"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_800a94d0","line":1694,"in_reply_to":"1abeadc6_238e8d2e","updated":"2014-08-31 23:50:56.000000000","message":"Agree, +1","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2110c2e728c18901a892cd11fc1638d8305883ec","unresolved":false,"context_lines":[{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"    def setUp(self):"},{"line_number":1693,"context_line":"        super(IdPMetadataGenerationTests, self).setUp()"},{"line_number":1694,"context_line":"        CONF.saml.idp_entity_id \u003d federation_fixtures.IDP_ENTITY_ID"},{"line_number":1695,"context_line":"        CONF.saml.idp_sso_endpoint \u003d federation_fixtures.IDP_SSO_ENDPOINT"},{"line_number":1696,"context_line":"        CONF.saml.idp_organization_name \u003d \\"},{"line_number":1697,"context_line":"            federation_fixtures.IDP_ORGANIZATION_NAME"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_74a012f5","line":1694,"in_reply_to":"1abeadc6_238e8d2e","updated":"2014-09-01 03:45:20.000000000","message":"for some reason load_fixtures seems to be messing up. leaving this as-is for now.","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ec987350b2db810ab83cf821acedbf289bff7552","unresolved":false,"context_lines":[{"line_number":1698,"context_line":"        CONF.saml.idp_organization_display_name \u003d \\"},{"line_number":1699,"context_line":"            federation_fixtures.IDP_ORGANIZATION_DISPLAY_NAME"},{"line_number":1700,"context_line":"        CONF.saml.idp_organization_url \u003d \\"},{"line_number":1701,"context_line":"            federation_fixtures.IDP_ORGANIZATION_URL"},{"line_number":1702,"context_line":"        CONF.saml.idp_contact_name \u003d federation_fixtures.IDP_CONTACT_GIVEN_NAME"},{"line_number":1703,"context_line":"        CONF.saml.idp_contact_surname \u003d federation_fixtures.IDP_CONTACT_SURNAME"},{"line_number":1704,"context_line":"        CONF.saml.idp_contact_email \u003d federation_fixtures.IDP_CONTACT_EMAIL"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_0b00b664","line":1701,"updated":"2014-08-29 14:55:54.000000000","message":"suggest shortening these lines to avoid \\ line continuation.","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2110c2e728c18901a892cd11fc1638d8305883ec","unresolved":false,"context_lines":[{"line_number":1698,"context_line":"        CONF.saml.idp_organization_display_name \u003d \\"},{"line_number":1699,"context_line":"            federation_fixtures.IDP_ORGANIZATION_DISPLAY_NAME"},{"line_number":1700,"context_line":"        CONF.saml.idp_organization_url \u003d \\"},{"line_number":1701,"context_line":"            federation_fixtures.IDP_ORGANIZATION_URL"},{"line_number":1702,"context_line":"        CONF.saml.idp_contact_name \u003d federation_fixtures.IDP_CONTACT_GIVEN_NAME"},{"line_number":1703,"context_line":"        CONF.saml.idp_contact_surname \u003d federation_fixtures.IDP_CONTACT_SURNAME"},{"line_number":1704,"context_line":"        CONF.saml.idp_contact_email \u003d federation_fixtures.IDP_CONTACT_EMAIL"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_d4129e57","line":1701,"in_reply_to":"1abeadc6_0b00b664","updated":"2014-09-01 03:45:20.000000000","message":"Done","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6ddde66af08eff4edd25fa5caa79b116d990016","unresolved":false,"context_lines":[{"line_number":1714,"context_line":""},{"line_number":1715,"context_line":"    def test_metadata_validity(self):"},{"line_number":1716,"context_line":"        \"\"\"Call md.EntityDescriptor  method that does internal verification.\"\"\""},{"line_number":1717,"context_line":"        pass"},{"line_number":1718,"context_line":""},{"line_number":1719,"context_line":"    def test_check_idpsso(self):"},{"line_number":1720,"context_line":"        metadata \u003d self.generator.generate_metadata()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_e36f355e","line":1717,"updated":"2014-08-29 07:35:03.000000000","message":"Complete this test?","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6ddde66af08eff4edd25fa5caa79b116d990016","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"        self.assertEqual(federation_fixtures.IDP_CONTACT_EMAIL,"},{"line_number":1743,"context_line":"                         contact_person.email_address.text)"},{"line_number":1744,"context_line":"        self.assertEqual(federation_fixtures.IDP_CONTACT_TELEPHONE_NUMBER,"},{"line_number":1745,"context_line":"                         contact_person.telephone_number.text)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_43af097d","line":1745,"updated":"2014-08-29 07:35:03.000000000","message":"Missing contact type","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2110c2e728c18901a892cd11fc1638d8305883ec","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"        self.assertEqual(federation_fixtures.IDP_CONTACT_EMAIL,"},{"line_number":1743,"context_line":"                         contact_person.email_address.text)"},{"line_number":1744,"context_line":"        self.assertEqual(federation_fixtures.IDP_CONTACT_TELEPHONE_NUMBER,"},{"line_number":1745,"context_line":"                         contact_person.telephone_number.text)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_549b0ec9","line":1745,"in_reply_to":"1abeadc6_43af097d","updated":"2014-09-01 03:45:20.000000000","message":"Done","commit_id":"aed2bc9953485da116e7513feca866850cb502c3"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06ce3ad9686e378c0afee94a6ec46a2d802c4a4e","unresolved":false,"context_lines":[{"line_number":1764,"context_line":"        self.assertEqual(idp_public_key, cert_text)"},{"line_number":1765,"context_line":""},{"line_number":1766,"context_line":""},{"line_number":1767,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1768,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1769,"context_line":""},{"line_number":1770,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_dedb5f19","line":1767,"updated":"2014-09-02 04:11:10.000000000","message":"would appreciate some negative tests!","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":1764,"context_line":"        self.assertEqual(idp_public_key, cert_text)"},{"line_number":1765,"context_line":""},{"line_number":1766,"context_line":""},{"line_number":1767,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1768,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1769,"context_line":""},{"line_number":1770,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_831ec561","line":1767,"in_reply_to":"fa98f980_dedb5f19","updated":"2014-09-02 14:08:59.000000000","message":"++","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79fb39fb3e487c238a6960d570473d3f72930b46","unresolved":false,"context_lines":[{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"    @staticmethod"},{"line_number":1775,"context_line":"    def _configure_settings():"},{"line_number":1776,"context_line":"        CONF.saml.idp_entity_id \u003d federation_fixtures.IDP_ENTITY_ID"},{"line_number":1777,"context_line":"        CONF.saml.idp_sso_endpoint \u003d federation_fixtures.IDP_SSO_ENDPOINT"},{"line_number":1778,"context_line":"        CONF.saml.idp_organization_name \u003d ("},{"line_number":1779,"context_line":"            federation_fixtures.IDP_ORGANIZATION_NAME)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_16c6b149","line":1776,"updated":"2014-09-02 02:53:04.000000000","message":"Probably should be using the configuration fixture and this could just be called from setUp.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"    @staticmethod"},{"line_number":1775,"context_line":"    def _configure_settings():"},{"line_number":1776,"context_line":"        CONF.saml.idp_entity_id \u003d federation_fixtures.IDP_ENTITY_ID"},{"line_number":1777,"context_line":"        CONF.saml.idp_sso_endpoint \u003d federation_fixtures.IDP_SSO_ENDPOINT"},{"line_number":1778,"context_line":"        CONF.saml.idp_organization_name \u003d ("},{"line_number":1779,"context_line":"            federation_fixtures.IDP_ORGANIZATION_NAME)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_ff49fad0","line":1776,"in_reply_to":"fa98f980_16c6b149","updated":"2014-09-02 06:34:39.000000000","message":"look @ http://git.openstack.org/cgit/openstack/keystone/tree/keystone/tests/test_versions.py#n362 for guidance","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8ff7609021b239c9e535293478095da6ee5b1bb2","unresolved":false,"context_lines":[{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"    @staticmethod"},{"line_number":1775,"context_line":"    def _configure_settings():"},{"line_number":1776,"context_line":"        CONF.saml.idp_entity_id \u003d federation_fixtures.IDP_ENTITY_ID"},{"line_number":1777,"context_line":"        CONF.saml.idp_sso_endpoint \u003d federation_fixtures.IDP_SSO_ENDPOINT"},{"line_number":1778,"context_line":"        CONF.saml.idp_organization_name \u003d ("},{"line_number":1779,"context_line":"            federation_fixtures.IDP_ORGANIZATION_NAME)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_e316b1a6","line":1776,"in_reply_to":"fa98f980_ff49fad0","updated":"2014-09-02 14:08:59.000000000","message":"changed.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"79fb39fb3e487c238a6960d570473d3f72930b46","unresolved":false,"context_lines":[{"line_number":1801,"context_line":"    def serialize_metadata_object(self):"},{"line_number":1802,"context_line":"        \"\"\"Check whether serialization doesn\u0027t raise any exceptions.\"\"\""},{"line_number":1803,"context_line":"        self._configure_settings()"},{"line_number":1804,"context_line":"        self.generator.generate_metadata().to_string()"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def test_check_idpsso(self):"},{"line_number":1807,"context_line":"        self._configure_settings()"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_d602696e","line":1804,"updated":"2014-09-02 02:53:04.000000000","message":"Is there anything we can check about the value here?","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb009ebf3070f76f3d43dab9b707da5698d14fad","unresolved":false,"context_lines":[{"line_number":1801,"context_line":"    def serialize_metadata_object(self):"},{"line_number":1802,"context_line":"        \"\"\"Check whether serialization doesn\u0027t raise any exceptions.\"\"\""},{"line_number":1803,"context_line":"        self._configure_settings()"},{"line_number":1804,"context_line":"        self.generator.generate_metadata().to_string()"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def test_check_idpsso(self):"},{"line_number":1807,"context_line":"        self._configure_settings()"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_7f5b4a87","line":1804,"in_reply_to":"fa98f980_d602696e","updated":"2014-09-02 06:34:39.000000000","message":"this should be renamed to test_serialize_metadata_object as it currently doesn\u0027t run.\n\nyou *could* do the following to assert some data:\n  metadata_xml \u003d self.generator.generate_metadata().to_string()\n  metadata \u003d etree.fromstring(metadata_xml)\n  ...\n  go through metadata using [0] and .text to look for values.","commit_id":"e08f8769e3c3cb705e2642857065b10131d28a76"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6da316a39be04a520eee09706aca766c3c1ddb19","unresolved":false,"context_lines":[{"line_number":1764,"context_line":"        self.assertEqual(idp_public_key, cert_text)"},{"line_number":1765,"context_line":""},{"line_number":1766,"context_line":""},{"line_number":1767,"context_line":"# NOTE(marek-denis): Add negative tests."},{"line_number":1768,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1769,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1770,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_e3830602","line":1767,"updated":"2014-09-02 18:03:33.000000000","message":"I addressed this.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e8f48a3cb035355392ef3889a0d50f81bf85c871","unresolved":false,"context_lines":[{"line_number":1773,"context_line":"        self._configure_settings()"},{"line_number":1774,"context_line":"        self.generator \u003d keystone_idp.MetadataGenerator()"},{"line_number":1775,"context_line":""},{"line_number":1776,"context_line":"    def _configure_settings(self):"},{"line_number":1777,"context_line":"        self.config_fixture.config("},{"line_number":1778,"context_line":"            group\u003d\u0027saml\u0027,"},{"line_number":1779,"context_line":"            idp_entity_id\u003dfederation_fixtures.IDP_ENTITY_ID,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_77699b24","line":1776,"updated":"2014-09-02 15:18:24.000000000","message":"should be able to override self.config_overrides for consistency.","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6da316a39be04a520eee09706aca766c3c1ddb19","unresolved":false,"context_lines":[{"line_number":1773,"context_line":"        self._configure_settings()"},{"line_number":1774,"context_line":"        self.generator \u003d keystone_idp.MetadataGenerator()"},{"line_number":1775,"context_line":""},{"line_number":1776,"context_line":"    def _configure_settings(self):"},{"line_number":1777,"context_line":"        self.config_fixture.config("},{"line_number":1778,"context_line":"            group\u003d\u0027saml\u0027,"},{"line_number":1779,"context_line":"            idp_entity_id\u003dfederation_fixtures.IDP_ENTITY_ID,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_c38c4238","line":1776,"in_reply_to":"fa98f980_77699b24","updated":"2014-09-02 18:03:33.000000000","message":"Done","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"24df1dda43755c6f02f2c034808f343579514f87","unresolved":false,"context_lines":[{"line_number":1774,"context_line":"        self.generator \u003d keystone_idp.MetadataGenerator()"},{"line_number":1775,"context_line":""},{"line_number":1776,"context_line":"    def _configure_settings(self):"},{"line_number":1777,"context_line":"        self.config_fixture.config("},{"line_number":1778,"context_line":"            group\u003d\u0027saml\u0027,"},{"line_number":1779,"context_line":"            idp_entity_id\u003dfederation_fixtures.IDP_ENTITY_ID,"},{"line_number":1780,"context_line":"            idp_sso_endpoint\u003dfederation_fixtures.IDP_SSO_ENDPOINT,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_bc9bea70","line":1777,"updated":"2014-09-02 14:49:03.000000000","message":"nice","commit_id":"f17e1f1d3b7fbd945b3bcef70a34bbbbbcce08b6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6ee7a78b228018313d8800380e0bae0992cd4b3d","unresolved":false,"context_lines":[{"line_number":1832,"context_line":"        self.assertEqual(federation_fixtures.IDP_CONTACT_TYPE,"},{"line_number":1833,"context_line":"                         contact_person.contact_type)"},{"line_number":1834,"context_line":""},{"line_number":1835,"context_line":"    def test_metadata_no_organization(self):"},{"line_number":1836,"context_line":"        self.config_fixture.config("},{"line_number":1837,"context_line":"            group\u003d\u0027saml\u0027,"},{"line_number":1838,"context_line":"            idp_organization_display_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa98f980_f471fbe0","line":1835,"updated":"2014-09-02 20:49:47.000000000","message":"thanks for the negatives!","commit_id":"013492654f992303c1cd8ce80ad58c53df9b69e7"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b32a6207ba18939a7b1fca0efa910c4c57ebf90","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"        token_id \u003d uuid.uuid4().hex"},{"line_number":1897,"context_line":"        body \u003d self._create_generate_saml_request(token_id, region_id)"},{"line_number":1898,"context_line":"        self.post(self.SAML_GENERATION_ROUTE, body\u003dbody, expected_status\u003d404)"},{"line_number":1899,"context_line":""},{"line_number":1900,"context_line":"class IdPMetadataGenerationTests(FederationTests):"},{"line_number":1901,"context_line":"    \"\"\"A class for testing Identity Provider Metadata generation.\"\"\""},{"line_number":1902,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_6aee02b6","line":1899,"updated":"2014-09-02 21:38:41.000000000","message":"two line breaks between module level thingies","commit_id":"17abfeea8cc5c11119cbcbb8eec5375924daf676"}]}
