)]}'
{"etc/keystone.conf.sample":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":710,"context_line":"# the environment. (string value)"},{"line_number":711,"context_line":"#assertion_prefix\u003d"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"# Path to xmlsec1 binary (string value)"},{"line_number":714,"context_line":"#xmlsec1_binary\u003d/usr/bin/xmlsec1"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"# Directory where temporary unsigned SAML Assertions will be"}],"source_content_type":"application/octet-stream","patch_set":35,"id":"1abeadc6_aa38203e","line":713,"updated":"2014-08-27 01:05:35.000000000","message":"generate the sample config file using `tox -e sample_config`.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e195d64e21fe6acc969f1a07a9dd9bd52c04e96b","unresolved":false,"context_lines":[{"line_number":366,"context_line":"#logging_exception_prefix\u003d%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"# List of logger\u003dLEVEL pairs. (list value)"},{"line_number":369,"context_line":"#default_log_levels\u003damqp\u003dWARN,amqplib\u003dWARN,boto\u003dWARN,qpid\u003dWARN,sqlalchemy\u003dWARN,suds\u003dINFO,oslo.messaging\u003dINFO,iso8601\u003dWARN,requests.packages.urllib3.connectionpool\u003dWARN,urllib3.connectionpool\u003dWARN,websocket\u003dWARN,keystonemiddleware\u003dWARN,routes.middleware\u003dWARN,stevedore\u003dWARN"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"# Enables or disables publication of error events. (boolean"},{"line_number":372,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":42,"id":"1abeadc6_02796b2e","line":369,"updated":"2014-08-29 22:34:50.000000000","message":"I don\u0027t think this config update is related to this change.","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"abb3e06ee587f579584016628dc1a78e77854093","unresolved":false,"context_lines":[{"line_number":366,"context_line":"#logging_exception_prefix\u003d%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"# List of logger\u003dLEVEL pairs. (list value)"},{"line_number":369,"context_line":"#default_log_levels\u003damqp\u003dWARN,amqplib\u003dWARN,boto\u003dWARN,qpid\u003dWARN,sqlalchemy\u003dWARN,suds\u003dINFO,oslo.messaging\u003dINFO,iso8601\u003dWARN,requests.packages.urllib3.connectionpool\u003dWARN,urllib3.connectionpool\u003dWARN,websocket\u003dWARN,keystonemiddleware\u003dWARN,routes.middleware\u003dWARN,stevedore\u003dWARN"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"# Enables or disables publication of error events. (boolean"},{"line_number":372,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":42,"id":"1abeadc6_22f02790","line":369,"in_reply_to":"1abeadc6_02796b2e","updated":"2014-08-29 22:42:39.000000000","message":"fixing now","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e195d64e21fe6acc969f1a07a9dd9bd52c04e96b","unresolved":false,"context_lines":[{"line_number":886,"context_line":"#user_name_attribute\u003dsn"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"# LDAP attribute mapped to user email. (string value)"},{"line_number":889,"context_line":"#user_mail_attribute\u003dmail"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"# LDAP attribute mapped to password. (string value)"},{"line_number":892,"context_line":"#user_pass_attribute\u003duserPassword"}],"source_content_type":"application/octet-stream","patch_set":42,"id":"1abeadc6_426fe35f","line":889,"updated":"2014-08-29 22:34:50.000000000","message":"same comment here.","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"abb3e06ee587f579584016628dc1a78e77854093","unresolved":false,"context_lines":[{"line_number":886,"context_line":"#user_name_attribute\u003dsn"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"# LDAP attribute mapped to user email. (string value)"},{"line_number":889,"context_line":"#user_mail_attribute\u003dmail"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"# LDAP attribute mapped to password. (string value)"},{"line_number":892,"context_line":"#user_pass_attribute\u003duserPassword"}],"source_content_type":"application/octet-stream","patch_set":42,"id":"1abeadc6_42eb63a3","line":889,"in_reply_to":"1abeadc6_426fe35f","updated":"2014-08-29 22:42:39.000000000","message":"fixing now","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"}],"keystone/common/config.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ec6ea7f8f67f00f129c0207b30c6811398a8d6e5","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                   help\u003d\u0027Value to be used when filtering assertion parameters \u0027"},{"line_number":433,"context_line":"                        \u0027from the environment.\u0027),"},{"line_number":434,"context_line":"        cfg.StrOpt(\u0027xmlsec1_binary\u0027,"},{"line_number":435,"context_line":"                   default\u003d\u0027/usr/bin/xmlsec1\u0027,"},{"line_number":436,"context_line":"                   help\u003d\u0027Path to xmlsec1 binary\u0027),"},{"line_number":437,"context_line":"        cfg.StrOpt(\u0027assertions_dir\u0027,"},{"line_number":438,"context_line":"                   default\u003d\u0027/tmp\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"1abeadc6_f823e0a4","line":435,"updated":"2014-08-26 16:27:17.000000000","message":"can this just default to xmlsec1 if it\u0027s already in the $PATH, or do you actually need an absolute path for some reason? for me, the value would be /usr/local/bin/xmlsec1 :(","commit_id":"e8afed76ff8d2394b309f9f14747033b7add8103"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f7a5eb2d01f3185005fc0cc16280d56308e70ed5","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                        \u0027specify absolute path or adjust your PATH \u0027"},{"line_number":439,"context_line":"                        \u0027environment variable if the binary cannot be found.\u0027),"},{"line_number":440,"context_line":"        cfg.StrOpt(\u0027assertions_dir\u0027,"},{"line_number":441,"context_line":"                   default\u003d\u0027/tmp\u0027,"},{"line_number":442,"context_line":"                   help\u003d\u0027Directory where temporary unsigned SAML Assertions \u0027"},{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_a5bf6efb","line":441,"updated":"2014-08-27 03:51:58.000000000","message":"for security, i\u0027d suggest defaulting to tempfile.mkdtemp()","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"91039d7f1761d6ce27685ab217d35d78d54c01cb","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                        \u0027specify absolute path or adjust your PATH \u0027"},{"line_number":439,"context_line":"                        \u0027environment variable if the binary cannot be found.\u0027),"},{"line_number":440,"context_line":"        cfg.StrOpt(\u0027assertions_dir\u0027,"},{"line_number":441,"context_line":"                   default\u003d\u0027/tmp\u0027,"},{"line_number":442,"context_line":"                   help\u003d\u0027Directory where temporary unsigned SAML Assertions \u0027"},{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_6880cb46","line":441,"in_reply_to":"1abeadc6_a5bf6efb","updated":"2014-08-27 04:43:20.000000000","message":"i\u0027m going to remove this option","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                        \u0027environment variable if the binary cannot be found.\u0027),"},{"line_number":440,"context_line":"        cfg.StrOpt(\u0027assertions_dir\u0027,"},{"line_number":441,"context_line":"                   default\u003d\u0027/tmp\u0027,"},{"line_number":442,"context_line":"                   help\u003d\u0027Directory where temporary unsigned SAML Assertions \u0027"},{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"},{"line_number":445,"context_line":"                        \u0027make this directory readable/writeable for a \u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_4a794cfb","line":442,"updated":"2014-08-27 01:05:35.000000000","message":"lowercase \"assertions\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                        \u0027environment variable if the binary cannot be found.\u0027),"},{"line_number":440,"context_line":"        cfg.StrOpt(\u0027assertions_dir\u0027,"},{"line_number":441,"context_line":"                   default\u003d\u0027/tmp\u0027,"},{"line_number":442,"context_line":"                   help\u003d\u0027Directory where temporary unsigned SAML Assertions \u0027"},{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"},{"line_number":445,"context_line":"                        \u0027make this directory readable/writeable for a \u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_ff4ad381","line":442,"in_reply_to":"1abeadc6_4a794cfb","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                   help\u003d\u0027Directory where temporary unsigned SAML Assertions \u0027"},{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"},{"line_number":445,"context_line":"                        \u0027make this directory readable/writeable for a \u0027"},{"line_number":446,"context_line":"                        \u0027Keystone process.\u0027),"},{"line_number":447,"context_line":"    ],"},{"line_number":448,"context_line":"    \u0027policy\u0027: ["}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_aa8660d9","line":445,"updated":"2014-08-27 01:05:35.000000000","message":"change \"for a\" to \"to the\"\n\nAlso, this sentence seems pretty obvious so could be removed.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                   help\u003d\u0027Directory where temporary unsigned SAML Assertions \u0027"},{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"},{"line_number":445,"context_line":"                        \u0027make this directory readable/writeable for a \u0027"},{"line_number":446,"context_line":"                        \u0027Keystone process.\u0027),"},{"line_number":447,"context_line":"    ],"},{"line_number":448,"context_line":"    \u0027policy\u0027: ["}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_3f452b70","line":445,"in_reply_to":"1abeadc6_aa8660d9","updated":"2014-08-27 03:18:14.000000000","message":"Done, deleting the sentence as i agree with brant.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f7a5eb2d01f3185005fc0cc16280d56308e70ed5","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"},{"line_number":445,"context_line":"                        \u0027make this directory readable/writeable for a \u0027"},{"line_number":446,"context_line":"                        \u0027Keystone process.\u0027),"},{"line_number":447,"context_line":"    ],"},{"line_number":448,"context_line":"    \u0027policy\u0027: ["},{"line_number":449,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_e5b96616","line":446,"updated":"2014-08-27 03:51:58.000000000","message":"which would all be true by default if you use tempfile.mkdtemp()","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"91039d7f1761d6ce27685ab217d35d78d54c01cb","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                        \u0027will be stored. Those files will be deleted after \u0027"},{"line_number":444,"context_line":"                        \u0027the assertion is signed. It is very important to \u0027"},{"line_number":445,"context_line":"                        \u0027make this directory readable/writeable for a \u0027"},{"line_number":446,"context_line":"                        \u0027Keystone process.\u0027),"},{"line_number":447,"context_line":"    ],"},{"line_number":448,"context_line":"    \u0027policy\u0027: ["},{"line_number":449,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_e8b4db36","line":446,"in_reply_to":"1abeadc6_e5b96616","updated":"2014-08-27 04:43:20.000000000","message":"since it\u0027s a single file, i don\u0027t think it\u0027s necessary to use mkdtemp()... using just tempfile.NamedTemporaryFile which calls mkstemp() (same as mkdtemp but no directory)","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":817,"context_line":"    \u0027saml\u0027: ["},{"line_number":818,"context_line":"        cfg.IntOpt(\u0027assertion_expiration_time\u0027, default\u003d3600,"},{"line_number":819,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated SAML \u0027"},{"line_number":820,"context_line":"                        \u0027assertion created by Keystone.\u0027)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    ]"},{"line_number":823,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_6a15289a","line":820,"updated":"2014-08-27 01:05:35.000000000","message":"(nit) leave a trailing , for consistency.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":817,"context_line":"    \u0027saml\u0027: ["},{"line_number":818,"context_line":"        cfg.IntOpt(\u0027assertion_expiration_time\u0027, default\u003d3600,"},{"line_number":819,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated SAML \u0027"},{"line_number":820,"context_line":"                        \u0027assertion created by Keystone.\u0027)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    ]"},{"line_number":823,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_1f35cff6","line":820,"in_reply_to":"1abeadc6_6a15289a","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":819,"context_line":"                   help\u003d\u0027Default TTL, in seconds, for any generated SAML \u0027"},{"line_number":820,"context_line":"                        \u0027assertion created by Keystone.\u0027)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    ]"},{"line_number":823,"context_line":"}"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_ff31f30b","line":822,"updated":"2014-08-27 03:18:14.000000000","message":"added a trailing , here too","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                   help\u003d\u0027Binary to be called for XML signing. \u0027"},{"line_number":811,"context_line":"                        \u0027Install appropriate package, \u0027"},{"line_number":812,"context_line":"                        \u0027specify absolute path or adjust your PATH \u0027"},{"line_number":813,"context_line":"                        \u0027environment variable if the binary cannot be found.\u0027),"},{"line_number":814,"context_line":"    ],"},{"line_number":815,"context_line":"}"},{"line_number":816,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_eeb0118d","line":813,"updated":"2014-08-28 23:00:36.000000000","message":"(nit) consume more whitespace\n\ngood text though","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                   help\u003d\u0027Binary to be called for XML signing. \u0027"},{"line_number":811,"context_line":"                        \u0027Install appropriate package, \u0027"},{"line_number":812,"context_line":"                        \u0027specify absolute path or adjust your PATH \u0027"},{"line_number":813,"context_line":"                        \u0027environment variable if the binary cannot be found.\u0027),"},{"line_number":814,"context_line":"    ],"},{"line_number":815,"context_line":"}"},{"line_number":816,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_f409b695","line":813,"in_reply_to":"1abeadc6_eeb0118d","updated":"2014-08-29 05:42:51.000000000","message":"Done","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb2e02a3bc087cbb729cda92f9b74fbfdddc97f7","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                        \u0027your PATH environment variable if the binary cannot \u0027"},{"line_number":813,"context_line":"                        \u0027be found.\u0027),"},{"line_number":814,"context_line":"        cfg.StrOpt(\u0027certfile\u0027,"},{"line_number":815,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/certs/signing_cert.pem\u0027,"},{"line_number":816,"context_line":"                   help\u003d\u0027Path of the certfile for SAML signing. For \u0027"},{"line_number":817,"context_line":"                        \u0027non-production environments, you may be interested \u0027"},{"line_number":818,"context_line":"                        \u0027in using `keystone-manage pki_setup` to generate \u0027"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_4d82aa53","line":815,"updated":"2014-08-31 17:03:53.000000000","message":"since this is the same as the signing certfile default, make a variable so that it\u0027s shared.","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e4d173a68ba5e0d95e2e07292aebca25afbfa67","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                        \u0027your PATH environment variable if the binary cannot \u0027"},{"line_number":813,"context_line":"                        \u0027be found.\u0027),"},{"line_number":814,"context_line":"        cfg.StrOpt(\u0027certfile\u0027,"},{"line_number":815,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/certs/signing_cert.pem\u0027,"},{"line_number":816,"context_line":"                   help\u003d\u0027Path of the certfile for SAML signing. For \u0027"},{"line_number":817,"context_line":"                        \u0027non-production environments, you may be interested \u0027"},{"line_number":818,"context_line":"                        \u0027in using `keystone-manage pki_setup` to generate \u0027"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_80bb74c3","line":815,"in_reply_to":"fa98f980_4d82aa53","updated":"2014-09-01 01:09:36.000000000","message":"Done","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb2e02a3bc087cbb729cda92f9b74fbfdddc97f7","unresolved":false,"context_lines":[{"line_number":818,"context_line":"                        \u0027in using `keystone-manage pki_setup` to generate \u0027"},{"line_number":819,"context_line":"                        \u0027self-signed certificates.\u0027),"},{"line_number":820,"context_line":"        cfg.StrOpt(\u0027keyfile\u0027,"},{"line_number":821,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/private/signing_key.pem\u0027,"},{"line_number":822,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing.\u0027),"},{"line_number":823,"context_line":"    ],"},{"line_number":824,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_6d876e62","line":821,"updated":"2014-08-31 17:03:53.000000000","message":"since this is the same as the signing keyfile default, make a variable so that it\u0027s shared.","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e4d173a68ba5e0d95e2e07292aebca25afbfa67","unresolved":false,"context_lines":[{"line_number":818,"context_line":"                        \u0027in using `keystone-manage pki_setup` to generate \u0027"},{"line_number":819,"context_line":"                        \u0027self-signed certificates.\u0027),"},{"line_number":820,"context_line":"        cfg.StrOpt(\u0027keyfile\u0027,"},{"line_number":821,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/private/signing_key.pem\u0027,"},{"line_number":822,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing.\u0027),"},{"line_number":823,"context_line":"    ],"},{"line_number":824,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_c0b57cce","line":821,"in_reply_to":"fa98f980_6d876e62","updated":"2014-09-01 01:09:36.000000000","message":"Done","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"67c118de796d7df94c2b9816ac2941147cb0d06d","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                        \u0027your PATH environment variable if the binary cannot \u0027"},{"line_number":815,"context_line":"                        \u0027be found.\u0027),"},{"line_number":816,"context_line":"        cfg.StrOpt(\u0027certfile\u0027,"},{"line_number":817,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/certs/signing_cert.pem\u0027,"},{"line_number":818,"context_line":"                   help\u003d\u0027Path of the certfile for SAML signing. For \u0027"},{"line_number":819,"context_line":"                        \u0027non-production environments, you may be interested \u0027"},{"line_number":820,"context_line":"                        \u0027in using `keystone-manage pki_setup` to generate \u0027"}],"source_content_type":"text/x-python","patch_set":50,"id":"fa98f980_06231c06","line":817,"updated":"2014-09-01 02:19:12.000000000","message":"Why didn\u0027t you use _CERTFILE  here as well?","commit_id":"9a0822cf5f476c409d42ca715ba1813b300a59f5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1f07783119e90e4b3018e3c493038f4f928bde14","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                        \u0027your PATH environment variable if the binary cannot \u0027"},{"line_number":815,"context_line":"                        \u0027be found.\u0027),"},{"line_number":816,"context_line":"        cfg.StrOpt(\u0027certfile\u0027,"},{"line_number":817,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/certs/signing_cert.pem\u0027,"},{"line_number":818,"context_line":"                   help\u003d\u0027Path of the certfile for SAML signing. For \u0027"},{"line_number":819,"context_line":"                        \u0027non-production environments, you may be interested \u0027"},{"line_number":820,"context_line":"                        \u0027in using `keystone-manage pki_setup` to generate \u0027"}],"source_content_type":"text/x-python","patch_set":50,"id":"fa98f980_e90b4b29","line":817,"in_reply_to":"fa98f980_06231c06","updated":"2014-09-01 03:32:28.000000000","message":"because I forgot. next patch will have this updated :)","commit_id":"9a0822cf5f476c409d42ca715ba1813b300a59f5"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"67c118de796d7df94c2b9816ac2941147cb0d06d","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                        \u0027self-signed certificates. Note, the path cannot \u0027"},{"line_number":822,"context_line":"                        \u0027contain a comma.\u0027),"},{"line_number":823,"context_line":"        cfg.StrOpt(\u0027keyfile\u0027,"},{"line_number":824,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/private/signing_key.pem\u0027,"},{"line_number":825,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing. Note, the path \u0027"},{"line_number":826,"context_line":"                        \u0027cannot contain a comma.\u0027),"},{"line_number":827,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":50,"id":"fa98f980_667948fc","line":824,"updated":"2014-09-01 02:19:12.000000000","message":"Why didn\u0027t you use _KEYFILE  here as well?","commit_id":"9a0822cf5f476c409d42ca715ba1813b300a59f5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1f07783119e90e4b3018e3c493038f4f928bde14","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                        \u0027self-signed certificates. Note, the path cannot \u0027"},{"line_number":822,"context_line":"                        \u0027contain a comma.\u0027),"},{"line_number":823,"context_line":"        cfg.StrOpt(\u0027keyfile\u0027,"},{"line_number":824,"context_line":"                   default\u003d\u0027/etc/keystone/ssl/private/signing_key.pem\u0027,"},{"line_number":825,"context_line":"                   help\u003d\u0027Path of the keyfile for SAML signing. Note, the path \u0027"},{"line_number":826,"context_line":"                        \u0027cannot contain a comma.\u0027),"},{"line_number":827,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":50,"id":"fa98f980_29063321","line":824,"in_reply_to":"fa98f980_667948fc","updated":"2014-09-01 03:32:28.000000000","message":"same","commit_id":"9a0822cf5f476c409d42ca715ba1813b300a59f5"}],"keystone/contrib/federation/idp.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2e90cb2d98790df137ed0248e19331b0bd553998","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        expires_in \u003d self._determine_expiration_time(expires_in)"},{"line_number":60,"context_line":"        status \u003d self._create_status()"},{"line_number":61,"context_line":"        saml_issuer \u003d self._create_issuer(issuer)"},{"line_number":62,"context_line":"        subject \u003d self._create_subject(user, expires_in, recipient)"},{"line_number":63,"context_line":"        attribute_statement \u003d self._create_attribute_statement(user, roles,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_b341863b","line":60,"updated":"2014-08-19 14:05:44.000000000","message":"I\u0027d use the actual methods order as they appear here. Was expecting _create_status() to be after _determine_expiration_time()","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"dbf4aa842867482b5552ff25a7804c253049e052","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        expires_in \u003d self._determine_expiration_time(expires_in)"},{"line_number":60,"context_line":"        status \u003d self._create_status()"},{"line_number":61,"context_line":"        saml_issuer \u003d self._create_issuer(issuer)"},{"line_number":62,"context_line":"        subject \u003d self._create_subject(user, expires_in, recipient)"},{"line_number":63,"context_line":"        attribute_statement \u003d self._create_attribute_statement(user, roles,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_c120ecb2","line":60,"in_reply_to":"1abeadc6_b341863b","updated":"2014-08-19 14:51:08.000000000","message":"I would group them by being really \u0027helping methods\u0027 (_determine_expiration_time) and methods that create Response XML objects.","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2bce47e9e395a8e78302c63571f010fd2866b821","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        expires_in \u003d self._determine_expiration_time(expires_in)"},{"line_number":60,"context_line":"        status \u003d self._create_status()"},{"line_number":61,"context_line":"        saml_issuer \u003d self._create_issuer(issuer)"},{"line_number":62,"context_line":"        subject \u003d self._create_subject(user, expires_in, recipient)"},{"line_number":63,"context_line":"        attribute_statement \u003d self._create_attribute_statement(user, roles,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_47514c0d","line":60,"in_reply_to":"1abeadc6_c120ecb2","updated":"2014-08-19 15:09:12.000000000","message":"++ so I\u0027ll separate the groups and order them internally with the order they appear here.","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2e90cb2d98790df137ed0248e19331b0bd553998","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                \u003cns0:AttributeValue"},{"line_number":128,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edemo\u003c/ns0:AttributeValue\u003e"},{"line_number":129,"context_line":"                \u003cns0:AttributeValue"},{"line_number":130,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eservice\u003c/ns0:AttributeValue\u003e"},{"line_number":131,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":132,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_projects\" Name\u003d\"projects\""},{"line_number":133,"context_line":"              NameFormat\u003d\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"\u003e"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_f3621ed7","line":130,"updated":"2014-08-19 14:05:44.000000000","message":"I\u0027d use real world examples here, like \"admin\" and \"member\". What you think?","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2bce47e9e395a8e78302c63571f010fd2866b821","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                \u003cns0:AttributeValue"},{"line_number":128,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edemo\u003c/ns0:AttributeValue\u003e"},{"line_number":129,"context_line":"                \u003cns0:AttributeValue"},{"line_number":130,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eservice\u003c/ns0:AttributeValue\u003e"},{"line_number":131,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":132,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_projects\" Name\u003d\"projects\""},{"line_number":133,"context_line":"              NameFormat\u003d\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"\u003e"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_3c7d43e8","line":130,"in_reply_to":"1abeadc6_e106c81f","updated":"2014-08-19 15:09:12.000000000","message":"Done","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"dbf4aa842867482b5552ff25a7804c253049e052","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                \u003cns0:AttributeValue"},{"line_number":128,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edemo\u003c/ns0:AttributeValue\u003e"},{"line_number":129,"context_line":"                \u003cns0:AttributeValue"},{"line_number":130,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eservice\u003c/ns0:AttributeValue\u003e"},{"line_number":131,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":132,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_projects\" Name\u003d\"projects\""},{"line_number":133,"context_line":"              NameFormat\u003d\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"\u003e"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_e106c81f","line":130,"in_reply_to":"1abeadc6_f3621ed7","updated":"2014-08-19 14:51:08.000000000","message":"Feel free to push a patch with such changes :-)","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"45bcfe76f81a863a25b9ee89dfbde735f713ce11","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from keystone.common import config"},{"line_number":28,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d config.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_6210f601","line":29,"updated":"2014-08-19 15:31:14.000000000","message":"(nit) add newline","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b1f30ccd62c2af3601530c4b4843ab0376db1d85","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from keystone.common import config"},{"line_number":28,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d config.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_6eb0d3f4","line":29,"in_reply_to":"1abeadc6_6210f601","updated":"2014-08-19 20:59:20.000000000","message":"Done","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"45bcfe76f81a863a25b9ee89dfbde735f713ce11","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_825c32ef","line":394,"updated":"2014-08-19 15:31:14.000000000","message":"Is there a way to do this without the temporary files?","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"7a73fd203120762f2ad89c13e8f401a691b0ccc6","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_99de643e","line":394,"in_reply_to":"1abeadc6_825c32ef","updated":"2014-08-19 16:00:21.000000000","message":"Yes there is:  http://pyxmlsec.labs.libre-entreprise.org/index.php?section\u003dexamples\u0026id\u003d3","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e47cf4f1794d413ae9f3c1cdf51aa1ca96ed777d","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_f92bcb91","line":394,"in_reply_to":"1abeadc6_99de643e","updated":"2014-08-19 21:26:13.000000000","message":"that implies depending on xmlsec python package, or another similar one","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ad2478e9a25f67dd031ad4b1d8c021c02880204e","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_28a16e47","line":394,"in_reply_to":"1abeadc6_f92bcb91","updated":"2014-08-19 22:20:08.000000000","message":"I just tried the command line app and unfortunately I couldn\u0027t convince it to use stdin instead of a file.","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"45bcfe76f81a863a25b9ee89dfbde735f713ce11","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"},{"line_number":398,"context_line":"            msg \u003d (\"Cannot write temporary SAML assertion %(name)s. \""},{"line_number":399,"context_line":"                   \"Reason: %(reason)s\" % {"},{"line_number":400,"context_line":"                       \"name\": assertion_file.name,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_225fdee6","line":397,"updated":"2014-08-19 15:31:14.000000000","message":"Should this error be logged?","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b1f30ccd62c2af3601530c4b4843ab0376db1d85","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"},{"line_number":398,"context_line":"            msg \u003d (\"Cannot write temporary SAML assertion %(name)s. \""},{"line_number":399,"context_line":"                   \"Reason: %(reason)s\" % {"},{"line_number":400,"context_line":"                       \"name\": assertion_file.name,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_8e960f4b","line":397,"in_reply_to":"1abeadc6_225fdee6","updated":"2014-08-19 20:59:20.000000000","message":"Done","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"45bcfe76f81a863a25b9ee89dfbde735f713ce11","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":415,"context_line":"                saml.Assertion, output_stdout)"},{"line_number":416,"context_line":"        except xml.etree.ElementTree.ParseError as e:"},{"line_number":417,"context_line":"            raise e"},{"line_number":418,"context_line":"        else:"},{"line_number":419,"context_line":"            return signed_assertion"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_a24bee29","line":417,"updated":"2014-08-19 15:31:14.000000000","message":"Do you want to just \u0027raise\u0027 to get the original stack trace or is \u0027raise e\u0027 on purpose?","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"05cadc4af23a65d6f2a6d1f2f243034171ebb394","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":415,"context_line":"                saml.Assertion, output_stdout)"},{"line_number":416,"context_line":"        except xml.etree.ElementTree.ParseError as e:"},{"line_number":417,"context_line":"            raise e"},{"line_number":418,"context_line":"        else:"},{"line_number":419,"context_line":"            return signed_assertion"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_59bdac67","line":417,"in_reply_to":"1abeadc6_a24bee29","updated":"2014-08-19 16:07:29.000000000","message":"To be honest I didn\u0027t have any idea what exactly should be raised there so decided to leave full stack trace.","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7fe5386f206ee39292d31bd0ac651b61f4f2bc1d","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        }"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        try:"},{"line_number":391,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":392,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":393,"context_line":"            assertion_file.flush()"},{"line_number":394,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":24,"id":"1abeadc6_4eb6b7fb","line":391,"updated":"2014-08-19 20:59:27.000000000","message":"use mkstemp() instead","commit_id":"e170dde57432ece02358f07ca17923579d827620"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7fe5386f206ee39292d31bd0ac651b61f4f2bc1d","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":393,"context_line":"            assertion_file.flush()"},{"line_number":394,"context_line":"        except IOError as e:"},{"line_number":395,"context_line":"            msg \u003d (\"Cannot write temporary SAML assertion %(name)s. \""},{"line_number":396,"context_line":"                   \"Reason: %(reason)s\" % {"},{"line_number":397,"context_line":"                       \"name\": assertion_file.name,"},{"line_number":398,"context_line":"                       \"reason\": e"}],"source_content_type":"text/x-python","patch_set":24,"id":"1abeadc6_0ebcbfdb","line":395,"updated":"2014-08-19 20:59:27.000000000","message":"use _() to mark for translation","commit_id":"e170dde57432ece02358f07ca17923579d827620"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"82c5bccc1020aaaf626b709006c0ee29b8a2c31a","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.mkstemp(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_b9ab13d5","line":394,"updated":"2014-08-19 21:09:09.000000000","message":"Docs  https://docs.python.org/2/library/tempfile.html say:\n\n\"Unlike TemporaryFile(), the user of mkstemp() is responsible for deleting the temporary file when done with it.\" and here we are not deleting it.\n\nProposed solutions:\n\n- wrap with try/catch/finally and manually delete the file\n-revert to (Named)TemporaryFile that handles that for us automatically.","commit_id":"72b2a0b28ee8900d1ab88100917f81444d0426d3"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"36827411ad75bc74bea2a8d095fdfb2d9798cd5b","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.mkstemp(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_3931c3a2","line":394,"updated":"2014-08-19 21:13:10.000000000","message":"I don\u0027t think this can work. mkstemp doesn\u0027t return a file object. Any reason you moved away from NamedTemporaryFile. Under the hood it uses mkstemp anyway...","commit_id":"72b2a0b28ee8900d1ab88100917f81444d0426d3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":"import xml"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":"from saml2 import samlp  # noqa"},{"line_number":22,"context_line":"import xmldsig  # noqa"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_cadabce8","line":19,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"# noqa\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import xml"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":"from saml2 import samlp  # noqa"},{"line_number":22,"context_line":"import xmldsig  # noqa"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_2ae09095","line":20,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"# noqa\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":"from saml2 import samlp  # noqa"},{"line_number":22,"context_line":"import xmldsig  # noqa"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from keystone.common import config"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_ca01dc3a","line":21,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"# noqa\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":"from saml2 import samlp  # noqa"},{"line_number":22,"context_line":"import xmldsig  # noqa"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from keystone.common import config"},{"line_number":25,"context_line":"from keystone.i18n import _"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_6a98c81b","line":22,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"# noqa\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :type issuer: string"},{"line_number":46,"context_line":"        :param recipient: URL of the recipient"},{"line_number":47,"context_line":"        :type recipient: string"},{"line_number":48,"context_line":"        :param user: Keystone user name"},{"line_number":49,"context_line":"        :type user: string"},{"line_number":50,"context_line":"        :param roles: Comma separated list of Keystone role names"},{"line_number":51,"context_line":"        :type roles: list"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_ca763cd8","line":48,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"Keystone\". what else would it be?","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :type issuer: string"},{"line_number":46,"context_line":"        :param recipient: URL of the recipient"},{"line_number":47,"context_line":"        :type recipient: string"},{"line_number":48,"context_line":"        :param user: Keystone user name"},{"line_number":49,"context_line":"        :type user: string"},{"line_number":50,"context_line":"        :param roles: Comma separated list of Keystone role names"},{"line_number":51,"context_line":"        :type roles: list"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_5f3f47d6","line":48,"in_reply_to":"1abeadc6_ca763cd8","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        :type recipient: string"},{"line_number":48,"context_line":"        :param user: Keystone user name"},{"line_number":49,"context_line":"        :type user: string"},{"line_number":50,"context_line":"        :param roles: Comma separated list of Keystone role names"},{"line_number":51,"context_line":"        :type roles: list"},{"line_number":52,"context_line":"        :param project: Keystone project name"},{"line_number":53,"context_line":"        :type project: string"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_2a7c10b5","line":50,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"Keystone\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        :type recipient: string"},{"line_number":48,"context_line":"        :param user: Keystone user name"},{"line_number":49,"context_line":"        :type user: string"},{"line_number":50,"context_line":"        :param roles: Comma separated list of Keystone role names"},{"line_number":51,"context_line":"        :type roles: list"},{"line_number":52,"context_line":"        :param project: Keystone project name"},{"line_number":53,"context_line":"        :type project: string"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_7f25e3c0","line":50,"in_reply_to":"1abeadc6_2a7c10b5","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :type user: string"},{"line_number":50,"context_line":"        :param roles: Comma separated list of Keystone role names"},{"line_number":51,"context_line":"        :type roles: list"},{"line_number":52,"context_line":"        :param project: Keystone project name"},{"line_number":53,"context_line":"        :type project: string"},{"line_number":54,"context_line":"        :param expires_in: Sets how long the assertion is valid for, in seconds"},{"line_number":55,"context_line":"        :type expires_in: int"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_4a4a2c84","line":52,"updated":"2014-08-27 01:05:35.000000000","message":"remove Keystone","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :type user: string"},{"line_number":50,"context_line":"        :param roles: Comma separated list of Keystone role names"},{"line_number":51,"context_line":"        :type roles: list"},{"line_number":52,"context_line":"        :param project: Keystone project name"},{"line_number":53,"context_line":"        :type project: string"},{"line_number":54,"context_line":"        :param expires_in: Sets how long the assertion is valid for, in seconds"},{"line_number":55,"context_line":"        :type expires_in: int"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_9f20ffb1","line":52,"in_reply_to":"1abeadc6_4a4a2c84","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        :return: XML \u003cResponse\u003e object"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        expires_in \u003d self._determine_expiration_time(expires_in)"},{"line_number":61,"context_line":"        status \u003d self._create_status()"},{"line_number":62,"context_line":"        saml_issuer \u003d self._create_issuer(issuer)"},{"line_number":63,"context_line":"        subject \u003d self._create_subject(user, expires_in, recipient)"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_4a314c0a","line":60,"updated":"2014-08-27 01:05:35.000000000","message":"this should be expiration_time since it\u0027s not the number of seconds to expiration anymore.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        :return: XML \u003cResponse\u003e object"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        expires_in \u003d self._determine_expiration_time(expires_in)"},{"line_number":61,"context_line":"        status \u003d self._create_status()"},{"line_number":62,"context_line":"        saml_issuer \u003d self._create_issuer(issuer)"},{"line_number":63,"context_line":"        subject \u003d self._create_subject(user, expires_in, recipient)"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_1f1cef76","line":60,"in_reply_to":"1abeadc6_4a314c0a","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                return (\u0027--id-attr:id\u0027, \u0027Assertion\u0027)"},{"line_number":380,"context_line":"            return None"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        xmlsec_binary \u003d CONF.federation.xmlsec1_binary"},{"line_number":383,"context_line":"        idp_private_key \u003d CONF.signing.keyfile"},{"line_number":384,"context_line":"        idp_public_key \u003d CONF.signing.certfile"},{"line_number":385,"context_line":"        assertions_dir \u003d CONF.federationl.assertions_dir"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_c5670fe9","line":382,"updated":"2014-08-27 01:05:35.000000000","message":"this method is untested.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                return (\u0027--id-attr:id\u0027, \u0027Assertion\u0027)"},{"line_number":380,"context_line":"            return None"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        xmlsec_binary \u003d CONF.federation.xmlsec1_binary"},{"line_number":383,"context_line":"        idp_private_key \u003d CONF.signing.keyfile"},{"line_number":384,"context_line":"        idp_public_key \u003d CONF.signing.certfile"},{"line_number":385,"context_line":"        assertions_dir \u003d CONF.federationl.assertions_dir"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_e2187c77","line":382,"in_reply_to":"1abeadc6_c5670fe9","updated":"2014-08-27 03:18:14.000000000","message":"I\u0027ll update tests in the next patch, responding to minor issues first","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_653abb99","line":394,"updated":"2014-08-27 01:05:35.000000000","message":"with tempfile.NamedTemporaryFile(dir\u003dassertions_dir) as assertion_file:\n\nshould be used instead.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        }"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        try:"},{"line_number":394,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":395,"context_line":"            assertion_file.write(assertion.to_string())"},{"line_number":396,"context_line":"            assertion_file.flush()"},{"line_number":397,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_42585032","line":394,"in_reply_to":"1abeadc6_653abb99","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":414,"context_line":"                saml.Assertion, output_stdout)"},{"line_number":415,"context_line":"        except xml.etree.ElementTree.ParseError:"},{"line_number":416,"context_line":"            raise"},{"line_number":417,"context_line":"        else:"},{"line_number":418,"context_line":"            return signed_assertion"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_e5d7ab4d","line":416,"updated":"2014-08-27 01:05:35.000000000","message":"what\u0027s the point of catching one exception and re-raising it? isn\u0027t the result the same as if there was no try/except/else?","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":414,"context_line":"                saml.Assertion, output_stdout)"},{"line_number":415,"context_line":"        except xml.etree.ElementTree.ParseError:"},{"line_number":416,"context_line":"            raise"},{"line_number":417,"context_line":"        else:"},{"line_number":418,"context_line":"            return signed_assertion"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_e25ddc16","line":416,"in_reply_to":"1abeadc6_e5d7ab4d","updated":"2014-08-27 03:18:14.000000000","message":"i\u0027m not sure what the point was here, it\u0027s a pretty small set of branches so i don\u0027t think we\u0027re going to end up with invalid xml.\n\ni\u0027m going to go ahead and remove the try/catch/else","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return timeutils.isotime(future, subsecond\u003dTrue)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _create_status(self):"},{"line_number":86,"context_line":"        \"\"\"Creating Status"},{"line_number":87,"context_line":"        \u003cns0:Status xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e"},{"line_number":88,"context_line":"            \u003cns0:StatusCode"},{"line_number":89,"context_line":"              Value\u003d\"urn:oasis:names:tc:SAML:2.0:status:Success\" /\u003e"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_8e379dfe","line":86,"updated":"2014-08-28 23:00:36.000000000","message":"nit throughout this module that will be enforced by hacking soon: follow your one line summary with a blank line. also, none of these are actually summaries and they\u0027re completely redundant :(","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return timeutils.isotime(future, subsecond\u003dTrue)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _create_status(self):"},{"line_number":86,"context_line":"        \"\"\"Creating Status"},{"line_number":87,"context_line":"        \u003cns0:Status xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e"},{"line_number":88,"context_line":"            \u003cns0:StatusCode"},{"line_number":89,"context_line":"              Value\u003d\"urn:oasis:names:tc:SAML:2.0:status:Success\" /\u003e"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_f430d657","line":86,"in_reply_to":"1abeadc6_8e379dfe","updated":"2014-08-29 05:42:51.000000000","message":"I tweaked all the docstrings to be less brief.","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9a9b65fd9042f94ec8ee0e18ee0aa33ed2566b9a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return timeutils.isotime(future, subsecond\u003dTrue)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _create_status(self):"},{"line_number":86,"context_line":"        \"\"\"Creating Status"},{"line_number":87,"context_line":"        \u003cns0:Status xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e"},{"line_number":88,"context_line":"            \u003cns0:StatusCode"},{"line_number":89,"context_line":"              Value\u003d\"urn:oasis:names:tc:SAML:2.0:status:Success\" /\u003e"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_ab19a1d2","line":86,"in_reply_to":"1abeadc6_8e379dfe","updated":"2014-08-29 02:56:18.000000000","message":"have any suggestions for what to do? I kinda wanted to keep the XML, but I guess since we\u0027re checking in an XML file, its not necessary","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        }"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            with tempfile.NamedTemporaryFile() as assertion_file:"},{"line_number":393,"context_line":"                assertion_file.write(assertion.to_string())"},{"line_number":394,"context_line":"                assertion_file.flush()"},{"line_number":395,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_a2062d1a","line":392,"updated":"2014-08-28 23:00:36.000000000","message":"as mentioned in a previous review, use mkstemp","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        }"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            with tempfile.NamedTemporaryFile() as assertion_file:"},{"line_number":393,"context_line":"                assertion_file.write(assertion.to_string())"},{"line_number":394,"context_line":"                assertion_file.flush()"},{"line_number":395,"context_line":"        except IOError as e:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_5460aa00","line":392,"in_reply_to":"1abeadc6_a2062d1a","updated":"2014-08-29 05:42:51.000000000","message":"changed to mkstemp","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eabd92cd60aed3c660021019d1bd69e5f3acb1aa","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            with tempfile.NamedTemporaryFile() as assertion_file:"},{"line_number":393,"context_line":"                assertion_file.write(assertion.to_string())"},{"line_number":394,"context_line":"                assertion_file.flush()"},{"line_number":395,"context_line":"        except IOError as e:"},{"line_number":396,"context_line":"            msg \u003d _(\"Cannot create temporary SAML assertion at: %(name)s. \""},{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_e01e8b6f","line":394,"updated":"2014-08-28 00:00:40.000000000","message":"remove this or add a comment why it\u0027s needed, because it shouldn\u0027t be necessary.","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            with tempfile.NamedTemporaryFile() as assertion_file:"},{"line_number":393,"context_line":"                assertion_file.write(assertion.to_string())"},{"line_number":394,"context_line":"                assertion_file.flush()"},{"line_number":395,"context_line":"        except IOError as e:"},{"line_number":396,"context_line":"            msg \u003d _(\"Cannot create temporary SAML assertion at: %(name)s. \""},{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_4e002502","line":394,"in_reply_to":"1abeadc6_e01e8b6f","updated":"2014-08-28 23:00:36.000000000","message":"++","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            with tempfile.NamedTemporaryFile() as assertion_file:"},{"line_number":393,"context_line":"                assertion_file.write(assertion.to_string())"},{"line_number":394,"context_line":"                assertion_file.flush()"},{"line_number":395,"context_line":"        except IOError as e:"},{"line_number":396,"context_line":"            msg \u003d _(\"Cannot create temporary SAML assertion at: %(name)s. \""},{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_1443926c","line":394,"in_reply_to":"1abeadc6_e01e8b6f","updated":"2014-08-29 05:42:51.000000000","message":"w/o the flush, the data was not being saved to the file.","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eabd92cd60aed3c660021019d1bd69e5f3acb1aa","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        except IOError as e:"},{"line_number":396,"context_line":"            msg \u003d _(\"Cannot create temporary SAML assertion at: %(name)s. \""},{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"},{"line_number":398,"context_line":"            msg \u003d msg % {\"name\": assertion_file.name, \"reason\": e}"},{"line_number":399,"context_line":"            LOG.error(msg)"},{"line_number":400,"context_line":"            raise IOError(msg)"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_0042a767","line":398,"updated":"2014-08-28 00:00:40.000000000","message":"assertion_file might not have been bound at this point.","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        except IOError as e:"},{"line_number":396,"context_line":"            msg \u003d _(\"Cannot create temporary SAML assertion at: %(name)s. \""},{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"},{"line_number":398,"context_line":"            msg \u003d msg % {\"name\": assertion_file.name, \"reason\": e}"},{"line_number":399,"context_line":"            LOG.error(msg)"},{"line_number":400,"context_line":"            raise IOError(msg)"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_343deedd","line":398,"in_reply_to":"1abeadc6_0042a767","updated":"2014-08-29 05:42:51.000000000","message":"swapped to the suggestions dolph wrote","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"},{"line_number":398,"context_line":"            msg \u003d msg % {\"name\": assertion_file.name, \"reason\": e}"},{"line_number":399,"context_line":"            LOG.error(msg)"},{"line_number":400,"context_line":"            raise IOError(msg)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        command_list \u003d [xmlsec_binary, \u0027--sign\u0027, \u0027--privkey-pem\u0027, certificates]"},{"line_number":403,"context_line":"        id_tags \u003d estimate_id_tag(assertion)"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_22485d5b","line":400,"updated":"2014-08-28 23:00:36.000000000","message":"i\u0027m not sure what the point of trying to catch any of this is, but definitely DO NOT raise a new IOError - that discards the root traceback","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                    \"Reason: %(reason)s\")"},{"line_number":398,"context_line":"            msg \u003d msg % {\"name\": assertion_file.name, \"reason\": e}"},{"line_number":399,"context_line":"            LOG.error(msg)"},{"line_number":400,"context_line":"            raise IOError(msg)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        command_list \u003d [xmlsec_binary, \u0027--sign\u0027, \u0027--privkey-pem\u0027, certificates]"},{"line_number":403,"context_line":"        id_tags \u003d estimate_id_tag(assertion)"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_f4361602","line":400,"in_reply_to":"1abeadc6_22485d5b","updated":"2014-08-29 05:42:51.000000000","message":"swapped to the suggestions dolph wrote","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eabd92cd60aed3c660021019d1bd69e5f3acb1aa","unresolved":false,"context_lines":[{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        if id_tags:"},{"line_number":406,"context_line":"            command_list.extend(id_tags)"},{"line_number":407,"context_line":"        command_list.append(assertion_file.name)"},{"line_number":408,"context_line":"        process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":409,"context_line":"                                   stderr\u003dsubprocess.PIPE)"},{"line_number":410,"context_line":"        output_stdout \u003d process.stdout.read()"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_c0198f89","line":407,"updated":"2014-08-28 00:00:40.000000000","message":"assertion_file should have been deleted when the NamedTemporaryFile context was closed (the context should be expanded to include this line).","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        if id_tags:"},{"line_number":406,"context_line":"            command_list.extend(id_tags)"},{"line_number":407,"context_line":"        command_list.append(assertion_file.name)"},{"line_number":408,"context_line":"        process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":409,"context_line":"                                   stderr\u003dsubprocess.PIPE)"},{"line_number":410,"context_line":"        output_stdout \u003d process.stdout.read()"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_942de2aa","line":407,"in_reply_to":"1abeadc6_22b69d3e","updated":"2014-08-29 05:42:51.000000000","message":"swapped to the suggestions dolph wrote","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        if id_tags:"},{"line_number":406,"context_line":"            command_list.extend(id_tags)"},{"line_number":407,"context_line":"        command_list.append(assertion_file.name)"},{"line_number":408,"context_line":"        process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":409,"context_line":"                                   stderr\u003dsubprocess.PIPE)"},{"line_number":410,"context_line":"        output_stdout \u003d process.stdout.read()"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_22b69d3e","line":407,"in_reply_to":"1abeadc6_c0198f89","updated":"2014-08-28 23:00:36.000000000","message":"yeah... this shouldn\u0027t work at all, according to my understanding. maybe the flush is making this funky?","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        output_stdout \u003d process.stdout.read()"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        return saml2.create_class_from_xml_string(saml.Assertion,"},{"line_number":413,"context_line":"                                                  output_stdout)"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_a20c6ded","line":413,"updated":"2014-08-28 23:00:36.000000000","message":"regarding this whole bit, i took a stab at rewriting some of it to my understanding. this is untested though: http://pasteraw.com/43iidlfh6kooyw0gitm6ia54e3olob6","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba3c36d405e504ce3e02e2206438e6b3c4db077e","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        output_stdout \u003d process.stdout.read()"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        return saml2.create_class_from_xml_string(saml.Assertion,"},{"line_number":413,"context_line":"                                                  output_stdout)"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_34140e4c","line":413,"in_reply_to":"1abeadc6_a20c6ded","updated":"2014-08-29 05:42:51.000000000","message":"tried something else","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32d59106156c5a057eec1c4f22f62962b9b7ca6c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        status.status_code \u003d status_code"},{"line_number":101,"context_line":"        return status"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _create_issuer(self, issuer_name):"},{"line_number":104,"context_line":"        \"\"\"Create an object that represents a SAML Issuer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        \u003cns0:Issuer"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_1f0e348c","line":103,"updated":"2014-08-29 13:53:47.000000000","message":"isn\u0027t this the issuer_url, according to line 43?","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        status.status_code \u003d status_code"},{"line_number":101,"context_line":"        return status"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _create_issuer(self, issuer_name):"},{"line_number":104,"context_line":"        \"\"\"Create an object that represents a SAML Issuer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        \u003cns0:Issuer"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_2fc2dd33","line":103,"in_reply_to":"1abeadc6_1f0e348c","updated":"2014-08-29 15:27:24.000000000","message":"++ is it a name or URL? URI?","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        status.status_code \u003d status_code"},{"line_number":101,"context_line":"        return status"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _create_issuer(self, issuer_name):"},{"line_number":104,"context_line":"        \"\"\"Create an object that represents a SAML Issuer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        \u003cns0:Issuer"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_8984c95e","line":103,"in_reply_to":"1abeadc6_2fc2dd33","updated":"2014-08-29 18:04:29.000000000","message":"changed to issuer_url, as it\u0027s a url","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32d59106156c5a057eec1c4f22f62962b9b7ca6c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        issuer.set_text(issuer_name)"},{"line_number":117,"context_line":"        return issuer"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_subject(self, user, expiration_time, recipient):"},{"line_number":120,"context_line":"        \"\"\"Create an object that represents a SAML Subject."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        \u003cns0:Subject\u003e"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_bf62a03b","line":119,"updated":"2014-08-29 13:53:47.000000000","message":"recipient_url? or change issuer_name above to be issuer","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"166a8b7553a0b3a3dfba0b7e09fe179dc2600323","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        issuer.set_text(issuer_name)"},{"line_number":117,"context_line":"        return issuer"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_subject(self, user, expiration_time, recipient):"},{"line_number":120,"context_line":"        \"\"\"Create an object that represents a SAML Subject."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        \u003cns0:Subject\u003e"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_904eb336","line":119,"in_reply_to":"1abeadc6_bf62a03b","updated":"2014-08-29 14:35:35.000000000","message":"no, it creates the object, not the url.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        response.id \u003d uuid.uuid4().hex"},{"line_number":283,"context_line":"        response.destination \u003d recipient"},{"line_number":284,"context_line":"        response.issue_instant \u003d timeutils.isotime()"},{"line_number":285,"context_line":"        response.version \u003d \"2.0\""},{"line_number":286,"context_line":"        response.issuer \u003d issuer"},{"line_number":287,"context_line":"        response.status \u003d status"},{"line_number":288,"context_line":"        response.assertion \u003d assertion"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_30e95fe6","line":285,"updated":"2014-08-29 14:42:45.000000000","message":"This represents the version of the SAML spec right?","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        response.id \u003d uuid.uuid4().hex"},{"line_number":283,"context_line":"        response.destination \u003d recipient"},{"line_number":284,"context_line":"        response.issue_instant \u003d timeutils.isotime()"},{"line_number":285,"context_line":"        response.version \u003d \"2.0\""},{"line_number":286,"context_line":"        response.issuer \u003d issuer"},{"line_number":287,"context_line":"        response.status \u003d status"},{"line_number":288,"context_line":"        response.assertion \u003d assertion"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_69e04d26","line":285,"in_reply_to":"1abeadc6_30e95fe6","updated":"2014-08-29 18:04:29.000000000","message":"correcto","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        c14_transform \u003d xmldsig.Transform(algorithm\u003dxmldsig.ALG_EXC_C14N)"},{"line_number":334,"context_line":"        transforms.transform \u003d [envelope_transform, c14_transform]"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        # digest method"},{"line_number":337,"context_line":"        digest_method \u003d xmldsig.DigestMethod(algorithm\u003dxmldsig.DIGEST_SHA1)"},{"line_number":338,"context_line":"        # digest value"},{"line_number":339,"context_line":"        digest_value \u003d xmldsig.DigestValue()"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_10b623f9","line":336,"updated":"2014-08-29 14:42:45.000000000","message":"(nit) i don\u0027t there this comment and the next provide any value","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        c14_transform \u003d xmldsig.Transform(algorithm\u003dxmldsig.ALG_EXC_C14N)"},{"line_number":334,"context_line":"        transforms.transform \u003d [envelope_transform, c14_transform]"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        # digest method"},{"line_number":337,"context_line":"        digest_method \u003d xmldsig.DigestMethod(algorithm\u003dxmldsig.DIGEST_SHA1)"},{"line_number":338,"context_line":"        # digest value"},{"line_number":339,"context_line":"        digest_value \u003d xmldsig.DigestValue()"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_6f069587","line":336,"in_reply_to":"1abeadc6_10b623f9","updated":"2014-08-29 15:27:24.000000000","message":"++","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"166a8b7553a0b3a3dfba0b7e09fe179dc2600323","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            command_list.extend(id_tags)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_10438313","line":412,"updated":"2014-08-29 14:35:35.000000000","message":"Dolph, why not keep the assertions in one place? Easier to restrict the access for others.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            command_list.extend(id_tags)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_cfd249d0","line":412,"in_reply_to":"1abeadc6_10438313","updated":"2014-08-29 15:27:24.000000000","message":"i\u0027m not sure i follow the question. i didn\u0027t write this code and i have no idea what fileutils.write_to_tempfile does.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30c2690cce1926769dd8f4607a322db3d24c115d","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            command_list.extend(id_tags)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_bbc5398f","line":412,"in_reply_to":"1abeadc6_98cc1537","updated":"2014-08-30 07:46:05.000000000","message":"and I was referring to the preffix. Why did we remove option \u0027assertion_dir\u0027? IMHO it may be easier to keep assertions in one place and be able to specify it.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2f811155546625489035cd05fd3a72cad5de3b14","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            command_list.extend(id_tags)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_98cc1537","line":412,"in_reply_to":"1abeadc6_cfd249d0","updated":"2014-08-29 16:34:13.000000000","message":"write_to_tempfile uses mkstemp and writes the contents to the file then returns the path while cleaning up the FD. It is just a wrapper for mkstemp.  This might need a prefix, etc.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32d59106156c5a057eec1c4f22f62962b9b7ca6c","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_ba970eeb","line":414,"updated":"2014-08-29 13:53:47.000000000","message":"tests are failing here because a file isn\u0027t being found.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_cf6ec9ff","line":414,"in_reply_to":"1abeadc6_10b2a3e4","updated":"2014-08-29 15:27:24.000000000","message":"depending on how write_to_tempfile works, a child process might not have access to the file.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"166a8b7553a0b3a3dfba0b7e09fe179dc2600323","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_10b2a3e4","line":414,"in_reply_to":"1abeadc6_ba970eeb","updated":"2014-08-29 14:35:35.000000000","message":"they passed on my laptop, which rather means it\u0027s the jenkins vm which is (properly) hardened....","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5d1824322bfa9e7fdb36c0bf11e240aa4cbdbd8e","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        try:"},{"line_number":412,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":413,"context_line":"            command_list.append(file_path)"},{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_1e10ed4c","line":414,"in_reply_to":"1abeadc6_cf6ec9ff","updated":"2014-08-29 17:08:42.000000000","message":"ugh right, i forgot that the machines we run this on won\u0027t necessarily have xmlsec installed... i think thats the cause.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"166a8b7553a0b3a3dfba0b7e09fe179dc2600323","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"},{"line_number":418,"context_line":"            raise"},{"line_number":419,"context_line":"        finally:"},{"line_number":420,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_10cc63ba","line":417,"updated":"2014-08-29 14:35:35.000000000","message":"I think we should log the error here. Also, if xmlsec1 fails to sign the XML the XMLParsingError will be raised, this also should be logged (at least at the debug level).","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"},{"line_number":418,"context_line":"            raise"},{"line_number":419,"context_line":"        finally:"},{"line_number":420,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_d08d8b32","line":417,"updated":"2014-08-29 14:42:45.000000000","message":"Why catch the error just to re-raise it?","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"},{"line_number":418,"context_line":"            raise"},{"line_number":419,"context_line":"        finally:"},{"line_number":420,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_09e999e5","line":417,"in_reply_to":"1abeadc6_8f4f7191","updated":"2014-08-29 18:04:29.000000000","message":"I logged a message and stacktrace","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":415,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":416,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":417,"context_line":"        except IOError:"},{"line_number":418,"context_line":"            raise"},{"line_number":419,"context_line":"        finally:"},{"line_number":420,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_8f4f7191","line":417,"in_reply_to":"1abeadc6_d08d8b32","updated":"2014-08-29 15:27:24.000000000","message":"just remove the except block if you\u0027re not going to have a useful log message","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e72dec3dc86cf482e5cbf7a1be386568d3ac051e","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":411,"context_line":"            command_list.append(file_path)"},{"line_number":412,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":413,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":414,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":415,"context_line":"        except IOError as e:"},{"line_number":416,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_62df7f0d","line":413,"updated":"2014-08-29 22:39:29.000000000","message":"you don\u0027t need a process.wait() in here?","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"abb3e06ee587f579584016628dc1a78e77854093","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            file_path \u003d fileutils.write_to_tempfile(assertion.to_string())"},{"line_number":411,"context_line":"            command_list.append(file_path)"},{"line_number":412,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":413,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":414,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":415,"context_line":"        except IOError as e:"},{"line_number":416,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_02232b05","line":413,"in_reply_to":"1abeadc6_62df7f0d","updated":"2014-08-29 22:42:39.000000000","message":"doesn\u0027t appear so, would it reduce the chance of a race condition?","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e72dec3dc86cf482e5cbf7a1be386568d3ac051e","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        finally:"},{"line_number":421,"context_line":"            try:"},{"line_number":422,"context_line":"                os.remove(file_path)"},{"line_number":423,"context_line":"            except OSError:"},{"line_number":424,"context_line":"                pass"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        return saml2.create_class_from_xml_string(saml.Assertion,"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_02c7ab45","line":423,"updated":"2014-08-29 22:39:29.000000000","message":"why would you get an oserror here?","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"abb3e06ee587f579584016628dc1a78e77854093","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        finally:"},{"line_number":421,"context_line":"            try:"},{"line_number":422,"context_line":"                os.remove(file_path)"},{"line_number":423,"context_line":"            except OSError:"},{"line_number":424,"context_line":"                pass"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        return saml2.create_class_from_xml_string(saml.Assertion,"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_6214df9f","line":423,"in_reply_to":"1abeadc6_02c7ab45","updated":"2014-08-29 22:42:39.000000000","message":"in case we failed to remove the file\n\nhttp://stackoverflow.com/questions/10840533/most-pythonic-way-to-delete-a-file-which-may-not-exist","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        :type recipient: string"},{"line_number":47,"context_line":"        :param user: User name"},{"line_number":48,"context_line":"        :type user: string"},{"line_number":49,"context_line":"        :param roles: Comma separated list of role names"},{"line_number":50,"context_line":"        :type roles: list"},{"line_number":51,"context_line":"        :param project: Project name"},{"line_number":52,"context_line":"        :type project: string"}],"source_content_type":"text/x-python","patch_set":47,"id":"1abeadc6_8dcbe2a2","line":49,"updated":"2014-08-30 17:15:08.000000000","message":"remove \"Comma separated\"","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        :type recipient: string"},{"line_number":47,"context_line":"        :param user: User name"},{"line_number":48,"context_line":"        :type user: string"},{"line_number":49,"context_line":"        :param roles: Comma separated list of role names"},{"line_number":50,"context_line":"        :type roles: list"},{"line_number":51,"context_line":"        :param project: Project name"},{"line_number":52,"context_line":"        :type project: string"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_01c5d45a","line":49,"in_reply_to":"1abeadc6_8dcbe2a2","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        issuer.set_text(issuer_url)"},{"line_number":117,"context_line":"        return issuer"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_subject(self, user, expiration_time, recipient_url):"},{"line_number":120,"context_line":"        \"\"\"Create an object that represents a SAML Subject."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        \u003cns0:Subject\u003e"}],"source_content_type":"text/x-python","patch_set":47,"id":"1abeadc6_ade89ee2","line":119,"updated":"2014-08-30 17:15:08.000000000","message":"suggest change \"recipient_url\" to \"recipient\" for consistency.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        issuer.set_text(issuer_url)"},{"line_number":117,"context_line":"        return issuer"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_subject(self, user, expiration_time, recipient_url):"},{"line_number":120,"context_line":"        \"\"\"Create an object that represents a SAML Subject."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        \u003cns0:Subject\u003e"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_21a1f8a9","line":119,"in_reply_to":"1abeadc6_ade89ee2","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        name_id.format \u003d saml.NAMEID_FORMAT_EMAILADDRESS"},{"line_number":139,"context_line":"        subject_conf_data \u003d saml.SubjectConfirmationData()"},{"line_number":140,"context_line":"        subject_conf_data.recipient \u003d recipient_url"},{"line_number":141,"context_line":"        subject_conf_data.not_on_or_after \u003d expiration_time"},{"line_number":142,"context_line":"        subject_conf \u003d saml.SubjectConfirmation()"},{"line_number":143,"context_line":"        subject_conf.method \u003d saml.SCM_BEARER"},{"line_number":144,"context_line":"        subject_conf.subject_confirmation_data \u003d subject_conf_data"}],"source_content_type":"text/x-python","patch_set":47,"id":"1abeadc6_2dbc8edb","line":141,"updated":"2014-08-30 17:15:08.000000000","message":"this isn\u0027t mentioned in the docstring.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        name_id.format \u003d saml.NAMEID_FORMAT_EMAILADDRESS"},{"line_number":139,"context_line":"        subject_conf_data \u003d saml.SubjectConfirmationData()"},{"line_number":140,"context_line":"        subject_conf_data.recipient \u003d recipient_url"},{"line_number":141,"context_line":"        subject_conf_data.not_on_or_after \u003d expiration_time"},{"line_number":142,"context_line":"        subject_conf \u003d saml.SubjectConfirmation()"},{"line_number":143,"context_line":"        subject_conf.method \u003d saml.SCM_BEARER"},{"line_number":144,"context_line":"        subject_conf.subject_confirmation_data \u003d subject_conf_data"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_c1910c54","line":141,"in_reply_to":"1abeadc6_2dbc8edb","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":179,"context_line":"        user_attribute.friendly_name \u003d \"keystone_user\""},{"line_number":180,"context_line":"        user_attribute.name \u003d \"user\""},{"line_number":181,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":182,"context_line":"        user_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_61822002","line":179,"updated":"2014-08-31 06:43:46.000000000","message":"changed this to openstack_user too","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":179,"context_line":"        user_attribute.friendly_name \u003d \"keystone_user\""},{"line_number":180,"context_line":"        user_attribute.name \u003d \"user\""},{"line_number":181,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":182,"context_line":"        user_value \u003d saml.AttributeValue()"},{"line_number":183,"context_line":"        user_value.set_text(user)"},{"line_number":184,"context_line":"        user_attribute.attribute_value \u003d user_value"}],"source_content_type":"text/x-python","patch_set":47,"id":"1abeadc6_6dfcc672","line":181,"updated":"2014-08-30 17:15:08.000000000","message":"looking at some docs, if the name format is URI then name needs to be a URI, but here the name is just \"user\", which isn\u0027t a URI.\n\nThis comment applies to all the names.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":179,"context_line":"        user_attribute.friendly_name \u003d \"keystone_user\""},{"line_number":180,"context_line":"        user_attribute.name \u003d \"user\""},{"line_number":181,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":182,"context_line":"        user_value \u003d saml.AttributeValue()"},{"line_number":183,"context_line":"        user_value.set_text(user)"},{"line_number":184,"context_line":"        user_attribute.attribute_value \u003d user_value"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_41943c37","line":181,"in_reply_to":"1abeadc6_6dfcc672","updated":"2014-08-31 06:43:46.000000000","message":"i\u0027ll have to dig into the saml spec to get more info on this one, I based the format on existing assertions that we had used.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        user_attribute.attribute_value \u003d user_value"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        roles_attribute \u003d saml.Attribute()"},{"line_number":187,"context_line":"        roles_attribute.friendly_name \u003d \"keystone_roles\""},{"line_number":188,"context_line":"        roles_attribute.name \u003d \"roles\""},{"line_number":189,"context_line":"        roles_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"1abeadc6_0dd432e7","line":187,"updated":"2014-08-30 17:15:08.000000000","message":"this should be openstack_identity_roles or openstack_roles","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        user_attribute.attribute_value \u003d user_value"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        roles_attribute \u003d saml.Attribute()"},{"line_number":187,"context_line":"        roles_attribute.friendly_name \u003d \"keystone_roles\""},{"line_number":188,"context_line":"        roles_attribute.name \u003d \"roles\""},{"line_number":189,"context_line":"        roles_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_418d1c31","line":187,"in_reply_to":"1abeadc6_0dd432e7","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            roles_attribute.attribute_value.append(role_value)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        project_attribute \u003d saml.Attribute()"},{"line_number":197,"context_line":"        project_attribute.friendly_name \u003d \"keystone_project\""},{"line_number":198,"context_line":"        project_attribute.name \u003d \"project\""},{"line_number":199,"context_line":"        project_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":200,"context_line":"        project_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_72b598cc","line":197,"updated":"2014-08-30 17:15:08.000000000","message":"openstack_project","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            roles_attribute.attribute_value.append(role_value)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        project_attribute \u003d saml.Attribute()"},{"line_number":197,"context_line":"        project_attribute.friendly_name \u003d \"keystone_project\""},{"line_number":198,"context_line":"        project_attribute.name \u003d \"project\""},{"line_number":199,"context_line":"        project_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":200,"context_line":"        project_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_21881822","line":197,"in_reply_to":"fa98f980_72b598cc","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        assertion \u003d saml.Assertion()"},{"line_number":260,"context_line":"        assertion.id \u003d self.assertion_id"},{"line_number":261,"context_line":"        assertion.issue_instant \u003d timeutils.isotime()"},{"line_number":262,"context_line":"        assertion.issuer \u003d issuer"},{"line_number":263,"context_line":"        assertion.signature \u003d signature"},{"line_number":264,"context_line":"        assertion.subject \u003d subject"},{"line_number":265,"context_line":"        assertion.authn_statement \u003d authn_statement"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_12dd2c15","line":262,"updated":"2014-08-30 17:15:08.000000000","message":"this isn\u0027t mentioned in the docstring.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        assertion \u003d saml.Assertion()"},{"line_number":260,"context_line":"        assertion.id \u003d self.assertion_id"},{"line_number":261,"context_line":"        assertion.issue_instant \u003d timeutils.isotime()"},{"line_number":262,"context_line":"        assertion.issuer \u003d issuer"},{"line_number":263,"context_line":"        assertion.signature \u003d signature"},{"line_number":264,"context_line":"        assertion.subject \u003d subject"},{"line_number":265,"context_line":"        assertion.authn_statement \u003d authn_statement"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_81b544cf","line":262,"in_reply_to":"fa98f980_12dd2c15","updated":"2014-08-31 06:43:46.000000000","message":"issuer, subject, authn_statement, signature and attribute_statement all fall under the \u003cAssertion\u003e tags, so it would be huge, which is why i opted to just highlight the ones specific to assertion. I\u0027ll add tags, and leave them open, hope that works.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        response.id \u003d uuid.uuid4().hex"},{"line_number":283,"context_line":"        response.destination \u003d recipient"},{"line_number":284,"context_line":"        response.issue_instant \u003d timeutils.isotime()"},{"line_number":285,"context_line":"        response.version \u003d \"2.0\""},{"line_number":286,"context_line":"        response.issuer \u003d issuer"},{"line_number":287,"context_line":"        response.status \u003d status"},{"line_number":288,"context_line":"        response.assertion \u003d assertion"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_32e230d6","line":285,"updated":"2014-08-30 17:15:08.000000000","message":"use \u0027 for strings consistently","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        response.id \u003d uuid.uuid4().hex"},{"line_number":283,"context_line":"        response.destination \u003d recipient"},{"line_number":284,"context_line":"        response.issue_instant \u003d timeutils.isotime()"},{"line_number":285,"context_line":"        response.version \u003d \"2.0\""},{"line_number":286,"context_line":"        response.issuer \u003d issuer"},{"line_number":287,"context_line":"        response.status \u003d status"},{"line_number":288,"context_line":"        response.assertion \u003d assertion"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_a1f7a88b","line":285,"in_reply_to":"fa98f980_32e230d6","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        response.destination \u003d recipient"},{"line_number":284,"context_line":"        response.issue_instant \u003d timeutils.isotime()"},{"line_number":285,"context_line":"        response.version \u003d \"2.0\""},{"line_number":286,"context_line":"        response.issuer \u003d issuer"},{"line_number":287,"context_line":"        response.status \u003d status"},{"line_number":288,"context_line":"        response.assertion \u003d assertion"},{"line_number":289,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_52e7b4e4","line":286,"updated":"2014-08-30 17:15:08.000000000","message":"some of these are mentioned in the docstring.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        response.destination \u003d recipient"},{"line_number":284,"context_line":"        response.issue_instant \u003d timeutils.isotime()"},{"line_number":285,"context_line":"        response.version \u003d \"2.0\""},{"line_number":286,"context_line":"        response.issuer \u003d issuer"},{"line_number":287,"context_line":"        response.status \u003d status"},{"line_number":288,"context_line":"        response.assertion \u003d assertion"},{"line_number":289,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_c1f4ac89","line":286,"in_reply_to":"fa98f980_52e7b4e4","updated":"2014-08-31 06:43:46.000000000","message":"same issue as above, the content would be too much, so i just put the tags in there.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        :return: XML \u003cSignature\u003e object"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        canonical_method \u003d xmldsig.CanonicalizationMethod()"},{"line_number":325,"context_line":"        canonical_method.algorithm \u003d xmldsig.ALG_EXC_C14N"},{"line_number":326,"context_line":"        signature_method \u003d xmldsig.SignatureMethod("},{"line_number":327,"context_line":"            algorithm\u003dxmldsig.SIG_RSA_SHA1)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_b2cd4060","line":324,"updated":"2014-08-30 17:15:08.000000000","message":"chang \"canonical\" to \"canonicalization\"","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        :return: XML \u003cSignature\u003e object"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        canonical_method \u003d xmldsig.CanonicalizationMethod()"},{"line_number":325,"context_line":"        canonical_method.algorithm \u003d xmldsig.ALG_EXC_C14N"},{"line_number":326,"context_line":"        signature_method \u003d xmldsig.SignatureMethod("},{"line_number":327,"context_line":"            algorithm\u003dxmldsig.SIG_RSA_SHA1)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_01ef94b1","line":324,"in_reply_to":"fa98f980_b2cd4060","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        canonical_method \u003d xmldsig.CanonicalizationMethod()"},{"line_number":325,"context_line":"        canonical_method.algorithm \u003d xmldsig.ALG_EXC_C14N"},{"line_number":326,"context_line":"        signature_method \u003d xmldsig.SignatureMethod("},{"line_number":327,"context_line":"            algorithm\u003dxmldsig.SIG_RSA_SHA1)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        transforms \u003d xmldsig.Transforms()"},{"line_number":330,"context_line":"        envelope_transform \u003d xmldsig.Transform("}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_32095096","line":327,"updated":"2014-08-30 17:15:08.000000000","message":"are we stuck with SHA1?","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        canonical_method \u003d xmldsig.CanonicalizationMethod()"},{"line_number":325,"context_line":"        canonical_method.algorithm \u003d xmldsig.ALG_EXC_C14N"},{"line_number":326,"context_line":"        signature_method \u003d xmldsig.SignatureMethod("},{"line_number":327,"context_line":"            algorithm\u003dxmldsig.SIG_RSA_SHA1)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        transforms \u003d xmldsig.Transforms()"},{"line_number":330,"context_line":"        envelope_transform \u003d xmldsig.Transform("}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_4117dca3","line":327,"in_reply_to":"fa98f980_32095096","updated":"2014-08-31 06:43:46.000000000","message":"there are others, but i based these values off of existing assertions, i believe the one i tested, and the one marek tested both used sha1, did you have an alternate in mind?\n\nalternates:\n\n  ENCODING_BASE64 \u003d \u0027http://www.w3.org/2000/09/xmldsig#base64\u0027\n  DIGEST_SHA1 \u003d \u0027http://www.w3.org/2000/09/xmldsig#sha1\u0027\n  ALG_EXC_C14N \u003d \u0027http://www.w3.org/2001/10/xml-exc-c14n#\u0027\n  SIG_DSA_SHA1 \u003d \u0027http://www.w3.org/2000/09/xmldsig#dsa-sha1\u0027\n  MAC_SHA1 \u003d \u0027http://www.w3.org/2000/09/xmldsig#hmac-sha1\u0027","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        key_info \u003d xmldsig.KeyInfo()"},{"line_number":353,"context_line":"        key_info.x509_data \u003d x509_data"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        signature_value \u003d xmldsig.SignatureValue()"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        signature \u003d xmldsig.Signature()"},{"line_number":358,"context_line":"        signature.signed_info \u003d signed_info"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_92f75c8c","line":355,"updated":"2014-08-30 17:15:08.000000000","message":"could just put this at line 359.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        key_info \u003d xmldsig.KeyInfo()"},{"line_number":353,"context_line":"        key_info.x509_data \u003d x509_data"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        signature_value \u003d xmldsig.SignatureValue()"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        signature \u003d xmldsig.Signature()"},{"line_number":358,"context_line":"        signature.signed_info \u003d signed_info"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_212bb8ec","line":355,"in_reply_to":"fa98f980_92f75c8c","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        return signature"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _sign_assertion(self, assertion):"},{"line_number":365,"context_line":"        \"\"\"Sign a SAML assertion."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        This method utilizes ``xmlsec1`` binary and signs SAML assertions in a"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_5235f444","line":364,"updated":"2014-08-30 17:15:08.000000000","message":"I\u0027d prefer it if this method was moved out of the class. It\u0027s a lot different than the other methods.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        return signature"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _sign_assertion(self, assertion):"},{"line_number":365,"context_line":"        \"\"\"Sign a SAML assertion."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        This method utilizes ``xmlsec1`` binary and signs SAML assertions in a"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_01f9544d","line":364,"in_reply_to":"fa98f980_5235f444","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        :return: XML \u003cAssertion\u003e object"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        \"\"\""},{"line_number":382,"context_line":"        def estimate_id_tag(assertion):"},{"line_number":383,"context_line":"            attributes \u003d assertion.c_attributes.keys()"},{"line_number":384,"context_line":"            if \u0027ID\u0027 in attributes:"},{"line_number":385,"context_line":"                return (\u0027--id-attr:ID\u0027, \u0027Assertion\u0027)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_f24508b4","line":382,"updated":"2014-08-30 17:15:08.000000000","message":"add a comment why this is necessary.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        :return: XML \u003cAssertion\u003e object"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        \"\"\""},{"line_number":382,"context_line":"        def estimate_id_tag(assertion):"},{"line_number":383,"context_line":"            attributes \u003d assertion.c_attributes.keys()"},{"line_number":384,"context_line":"            if \u0027ID\u0027 in attributes:"},{"line_number":385,"context_line":"                return (\u0027--id-attr:ID\u0027, \u0027Assertion\u0027)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_2163b81b","line":382,"in_reply_to":"fa98f980_f24508b4","updated":"2014-08-31 06:43:46.000000000","message":"i\u0027ll have to bug marek about this.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            return None"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        xmlsec_binary \u003d CONF.saml.xmlsec1_binary"},{"line_number":391,"context_line":"        idp_private_key \u003d CONF.signing.keyfile"},{"line_number":392,"context_line":"        idp_public_key \u003d CONF.signing.certfile"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_32307056","line":391,"updated":"2014-08-30 17:15:08.000000000","message":"do we want to require using the PKI certificate for the k2k certificate?\n\nI think we should have a separate certificate for this.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            return None"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        xmlsec_binary \u003d CONF.saml.xmlsec1_binary"},{"line_number":391,"context_line":"        idp_private_key \u003d CONF.signing.keyfile"},{"line_number":392,"context_line":"        idp_public_key \u003d CONF.signing.certfile"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_a18888c7","line":391,"in_reply_to":"fa98f980_32307056","updated":"2014-08-31 06:43:46.000000000","message":"I can add two new parameters to the config file","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"},{"line_number":395,"context_line":"        certificates \u003d \"%(idp_private_key)s,%(idp_public_key)s\" % {"},{"line_number":396,"context_line":"            \u0027idp_public_key\u0027: idp_public_key,"},{"line_number":397,"context_line":"            \u0027idp_private_key\u0027: idp_private_key"},{"line_number":398,"context_line":"        }"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_d24804cf","line":396,"updated":"2014-08-30 17:15:08.000000000","message":"how does this work if idp_public_key or idp_private_key contains a , ? Does xmlsec1 provide some way to escape a , in the filename?","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"},{"line_number":395,"context_line":"        certificates \u003d \"%(idp_private_key)s,%(idp_public_key)s\" % {"},{"line_number":396,"context_line":"            \u0027idp_public_key\u0027: idp_public_key,"},{"line_number":397,"context_line":"            \u0027idp_private_key\u0027: idp_private_key"},{"line_number":398,"context_line":"        }"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_c1858cae","line":396,"in_reply_to":"fa98f980_d24804cf","updated":"2014-08-31 06:43:46.000000000","message":"i have no idea.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            command_list.append(file_path)"},{"line_number":409,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_926cbc38","line":411,"updated":"2014-08-30 17:15:08.000000000","message":"use check_output. https://docs.python.org/2/library/subprocess.html#subprocess.check_output\n\nThis isn\u0027t valid because the process might still be running, or not even started yet.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            command_list.append(file_path)"},{"line_number":409,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_81ed448e","line":411,"in_reply_to":"fa98f980_72ed988b","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2285ed5ad48bf299ddbd48f5b2a146ebdc5028a1","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            command_list.append(file_path)"},{"line_number":409,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_72ed988b","line":411,"in_reply_to":"fa98f980_926cbc38","updated":"2014-08-30 17:27:48.000000000","message":"I was going to say .communicate() but same net effect.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"},{"line_number":415,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_f21c28c4","line":412,"updated":"2014-08-30 17:15:08.000000000","message":"why only checking for IOError? Any error that occurs here is an error when signing assertion.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            process \u003d subprocess.Popen(command_list, stdout\u003dsubprocess.PIPE,"},{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"},{"line_number":415,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_21601835","line":412,"in_reply_to":"fa98f980_f21c28c4","updated":"2014-08-31 06:43:46.000000000","message":"Changed to Exception to catch all errors","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"},{"line_number":415,"context_line":"            LOG.error(msg)"},{"line_number":416,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_721118ac","line":413,"updated":"2014-08-30 17:15:08.000000000","message":"use _LE","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                                       stderr\u003dsubprocess.PIPE)"},{"line_number":411,"context_line":"            output_stdout \u003d process.stdout.read()"},{"line_number":412,"context_line":"        except IOError as e:"},{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"},{"line_number":415,"context_line":"            LOG.error(msg)"},{"line_number":416,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_c1690c27","line":413,"in_reply_to":"fa98f980_721118ac","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"},{"line_number":415,"context_line":"            LOG.error(msg)"},{"line_number":416,"context_line":"            raise"},{"line_number":417,"context_line":"        finally:"},{"line_number":418,"context_line":"            try:"},{"line_number":419,"context_line":"                os.remove(file_path)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_321790a5","line":416,"updated":"2014-08-30 17:15:08.000000000","message":"Raise a new exception rather than log and raise the old one. The caller can log any error that occurs, all it needs is the info.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            msg \u003d _(\"Error occured when signing assertion, reason: %(reason)s\")"},{"line_number":414,"context_line":"            msg \u003d msg % {\"reason\": e}"},{"line_number":415,"context_line":"            LOG.error(msg)"},{"line_number":416,"context_line":"            raise"},{"line_number":417,"context_line":"        finally:"},{"line_number":418,"context_line":"            try:"},{"line_number":419,"context_line":"                os.remove(file_path)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_e1a9b025","line":416,"in_reply_to":"fa98f980_321790a5","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb2e02a3bc087cbb729cda92f9b74fbfdddc97f7","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":182,"context_line":"        user_attribute.friendly_name \u003d \u0027openstack_user\u0027"},{"line_number":183,"context_line":"        user_attribute.name \u003d \u0027user\u0027"},{"line_number":184,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":185,"context_line":"        user_value \u003d saml.AttributeValue()"},{"line_number":186,"context_line":"        user_value.set_text(user)"},{"line_number":187,"context_line":"        user_attribute.attribute_value \u003d user_value"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_0d4b425a","line":184,"updated":"2014-08-31 17:03:53.000000000","message":"looking at some docs, if the name format is URI then name needs to be a URI, but here the name is just \"user\", which isn\u0027t a URI.\n\nThis comment applies to all the names.","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e4d173a68ba5e0d95e2e07292aebca25afbfa67","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":182,"context_line":"        user_attribute.friendly_name \u003d \u0027openstack_user\u0027"},{"line_number":183,"context_line":"        user_attribute.name \u003d \u0027user\u0027"},{"line_number":184,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":185,"context_line":"        user_value \u003d saml.AttributeValue()"},{"line_number":186,"context_line":"        user_value.set_text(user)"},{"line_number":187,"context_line":"        user_attribute.attribute_value \u003d user_value"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_40550c1c","line":184,"in_reply_to":"fa98f980_0d4b425a","updated":"2014-09-01 01:09:36.000000000","message":"I think it\u0027s best to leave it as unspecified urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified\n\nShibboleth\u0027s doc:\nhttps://wiki.shibboleth.net/confluence/display/SHIB2/AttributeNaming\n\nMy interpretation is that we don\u0027t need to have it be a URI, but if we did want to we could do something like:\n\n  https://openstack.org/identity/attributes/openstack_user","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb2e02a3bc087cbb729cda92f9b74fbfdddc97f7","unresolved":false,"context_lines":[{"line_number":389,"context_line":"    :return: XML \u003cAssertion\u003e object"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    \"\"\""},{"line_number":392,"context_line":"    def estimate_id_tag(assertion):"},{"line_number":393,"context_line":"        attributes \u003d assertion.c_attributes.keys()"},{"line_number":394,"context_line":"        if \u0027ID\u0027 in attributes:"},{"line_number":395,"context_line":"            return (\u0027--id-attr:ID\u0027, \u0027Assertion\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_8d6e52c8","line":392,"updated":"2014-08-31 17:03:53.000000000","message":"add a comment why this is necessary.","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e4d173a68ba5e0d95e2e07292aebca25afbfa67","unresolved":false,"context_lines":[{"line_number":389,"context_line":"    :return: XML \u003cAssertion\u003e object"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    \"\"\""},{"line_number":392,"context_line":"    def estimate_id_tag(assertion):"},{"line_number":393,"context_line":"        attributes \u003d assertion.c_attributes.keys()"},{"line_number":394,"context_line":"        if \u0027ID\u0027 in attributes:"},{"line_number":395,"context_line":"            return (\u0027--id-attr:ID\u0027, \u0027Assertion\u0027)"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_e3e60a16","line":392,"in_reply_to":"fa98f980_8d6e52c8","updated":"2014-09-01 01:09:36.000000000","message":"Done","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb2e02a3bc087cbb729cda92f9b74fbfdddc97f7","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    idp_public_key \u003d CONF.saml.certfile"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"},{"line_number":405,"context_line":"    certificates \u003d \u0027%(idp_private_key)s,%(idp_public_key)s\u0027 % {"},{"line_number":406,"context_line":"        \u0027idp_public_key\u0027: idp_public_key,"},{"line_number":407,"context_line":"        \u0027idp_private_key\u0027: idp_private_key"},{"line_number":408,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_0d6262d8","line":405,"updated":"2014-08-31 17:03:53.000000000","message":"how does this work if idp_public_key or idp_private_key contains a , ? Does xmlsec1 provide some way to escape a , in the filename?","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e4d173a68ba5e0d95e2e07292aebca25afbfa67","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    idp_public_key \u003d CONF.saml.certfile"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"},{"line_number":405,"context_line":"    certificates \u003d \u0027%(idp_private_key)s,%(idp_public_key)s\u0027 % {"},{"line_number":406,"context_line":"        \u0027idp_public_key\u0027: idp_public_key,"},{"line_number":407,"context_line":"        \u0027idp_private_key\u0027: idp_private_key"},{"line_number":408,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_03e4ee0b","line":405,"in_reply_to":"fa98f980_0d6262d8","updated":"2014-09-01 01:09:36.000000000","message":"Blows up if a comma is in the file path:\n\n  cp examples/pki/private/signing_key.pem testcomma,dot.pem\n  xmlsec1 --sign --privkey-pem testcomma,dot.pem,examples/pki/certs/signing_cert.pem --id-attr:ID Assertion /tmp/tmp0OMnPZ/tmp1ZeYyY\n\n  func\u003dxmlSecOpenSSLAppKeyLoad:file\u003dapp.c:line\u003d131:obj\u003dunknown:subj\u003dBIO_new_file:error\u003d4:crypto library function failed:filename\u003dtestcomma;errno\u003d2\n  func\u003dxmlSecAppCryptoSimpleKeysMngrKeyAndCertsLoad:file\u003dcrypto.c:line\u003d118:obj\u003dunknown:subj\u003dxmlSecCryptoAppKeyLoad:error\u003d1:xmlsec library function failed:uri\u003dtestcomma\n  Error: failed to load private key from \"testcomma\".\n\nI\u0027ve added this limitation to the config file.","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"67c118de796d7df94c2b9816ac2941147cb0d06d","unresolved":false,"context_lines":[{"line_number":157,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":158,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":159,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_user\" Name\u003d\"user\""},{"line_number":160,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":161,"context_line":"                \u003cns0:AttributeValue"},{"line_number":162,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":163,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":50,"id":"fa98f980_66606836","line":160,"updated":"2014-09-01 02:19:12.000000000","message":"why ...? that seems like a strange value","commit_id":"9a0822cf5f476c409d42ca715ba1813b300a59f5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1f07783119e90e4b3018e3c493038f4f928bde14","unresolved":false,"context_lines":[{"line_number":157,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":158,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":159,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_user\" Name\u003d\"user\""},{"line_number":160,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":161,"context_line":"                \u003cns0:AttributeValue"},{"line_number":162,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":163,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":50,"id":"fa98f980_69183b85","line":160,"in_reply_to":"fa98f980_66606836","updated":"2014-09-01 03:32:28.000000000","message":"it\u0027s actually longer, i just didn\u0027t want to break 80 characters, they all start the same \"urn:oasis:names:tc:SAML:2.0\"","commit_id":"9a0822cf5f476c409d42ca715ba1813b300a59f5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        :type issuer: string"},{"line_number":47,"context_line":"        :param recipient: URL of the recipient"},{"line_number":48,"context_line":"        :type recipient: string"},{"line_number":49,"context_line":"        :param user: User name"},{"line_number":50,"context_line":"        :type user: string"},{"line_number":51,"context_line":"        :param roles: List of role names"},{"line_number":52,"context_line":"        :type roles: list"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_71c48092","line":49,"updated":"2014-09-01 17:44:24.000000000","message":"this should be user email address.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        :type issuer: string"},{"line_number":47,"context_line":"        :param recipient: URL of the recipient"},{"line_number":48,"context_line":"        :type recipient: string"},{"line_number":49,"context_line":"        :param user: User name"},{"line_number":50,"context_line":"        :type user: string"},{"line_number":51,"context_line":"        :param roles: List of role names"},{"line_number":52,"context_line":"        :type roles: list"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_532db645","line":49,"in_reply_to":"fa98f980_71c48092","updated":"2014-09-01 22:13:29.000000000","message":"since this is now unspecified i think it can be a username.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \u003cns0:Subject\u003e"},{"line_number":125,"context_line":"            \u003cns0:NameID"},{"line_number":126,"context_line":"              Format\u003d\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"\u003e"},{"line_number":127,"context_line":"                8c520fea70434c6ea5bd04d2dc529d32\u003c/ns0:NameID\u003e"},{"line_number":128,"context_line":"            \u003cns0:SubjectConfirmation"},{"line_number":129,"context_line":"              Method\u003d\"urn:oasis:names:tc:SAML:2.0:cm:bearer\"\u003e"},{"line_number":130,"context_line":"                \u003cns0:SubjectConfirmationData"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_91dac476","line":127,"updated":"2014-09-01 17:44:24.000000000","message":"this doesn\u0027t look like an email address.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \u003cns0:Subject\u003e"},{"line_number":125,"context_line":"            \u003cns0:NameID"},{"line_number":126,"context_line":"              Format\u003d\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"\u003e"},{"line_number":127,"context_line":"                8c520fea70434c6ea5bd04d2dc529d32\u003c/ns0:NameID\u003e"},{"line_number":128,"context_line":"            \u003cns0:SubjectConfirmation"},{"line_number":129,"context_line":"              Method\u003d\"urn:oasis:names:tc:SAML:2.0:cm:bearer\"\u003e"},{"line_number":130,"context_line":"                \u003cns0:SubjectConfirmationData"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_b0ced8b2","line":127,"in_reply_to":"fa98f980_91dac476","updated":"2014-09-01 22:13:29.000000000","message":"Done","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        name_id \u003d saml.NameID()"},{"line_number":140,"context_line":"        name_id.set_text(user)"},{"line_number":141,"context_line":"        name_id.format \u003d saml.NAMEID_FORMAT_EMAILADDRESS"},{"line_number":142,"context_line":"        subject_conf_data \u003d saml.SubjectConfirmationData()"},{"line_number":143,"context_line":"        subject_conf_data.recipient \u003d recipient"},{"line_number":144,"context_line":"        subject_conf_data.not_on_or_after \u003d expiration_time"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_11efb41f","line":141,"updated":"2014-09-01 17:44:24.000000000","message":"the user name is going to be an email address?","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        name_id \u003d saml.NameID()"},{"line_number":140,"context_line":"        name_id.set_text(user)"},{"line_number":141,"context_line":"        name_id.format \u003d saml.NAMEID_FORMAT_EMAILADDRESS"},{"line_number":142,"context_line":"        subject_conf_data \u003d saml.SubjectConfirmationData()"},{"line_number":143,"context_line":"        subject_conf_data.recipient \u003d recipient"},{"line_number":144,"context_line":"        subject_conf_data.not_on_or_after \u003d expiration_time"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_77e46d0d","line":141,"in_reply_to":"fa98f980_11efb41f","updated":"2014-09-01 22:13:29.000000000","message":"Actually we should not force email identification, so I am removing it.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u003cns0:AttributeStatement"},{"line_number":157,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":158,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":159,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_user\" Name\u003d\"user\""},{"line_number":160,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":161,"context_line":"                \u003cns0:AttributeValue"},{"line_number":162,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_31103801","line":159,"updated":"2014-09-01 17:44:24.000000000","message":"remove FriendlyName since it\u0027s the same as name.\n\nAlso, change Name\u003d\"openstack_user\" to match the code.\n\nThis comment applies to other FriendlyName and Name values in this example.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u003cns0:AttributeStatement"},{"line_number":157,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":158,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":159,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_user\" Name\u003d\"user\""},{"line_number":160,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":161,"context_line":"                \u003cns0:AttributeValue"},{"line_number":162,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_10dc0412","line":159,"in_reply_to":"fa98f980_31103801","updated":"2014-09-01 22:13:29.000000000","message":"Done","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":158,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":159,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_user\" Name\u003d\"user\""},{"line_number":160,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":161,"context_line":"                \u003cns0:AttributeValue"},{"line_number":162,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":163,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_714ba02b","line":160,"updated":"2014-09-01 17:44:24.000000000","message":"remove this since the default is unspecified.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":157,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":158,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":159,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_user\" Name\u003d\"user\""},{"line_number":160,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":161,"context_line":"                \u003cns0:AttributeValue"},{"line_number":162,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":163,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_70e1d0cf","line":160,"in_reply_to":"fa98f980_714ba02b","updated":"2014-09-01 22:13:29.000000000","message":"Done","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                \u003cns0:AttributeValue"},{"line_number":169,"context_line":"                  xsi:type\u003d\"xs:string\"\u003emember\u003c/ns0:AttributeValue\u003e"},{"line_number":170,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":171,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_projects\" Name\u003d\"projects\""},{"line_number":172,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":173,"context_line":"                \u003cns0:AttributeValue"},{"line_number":174,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edevelopment\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_f12cf04c","line":171,"updated":"2014-09-01 17:44:24.000000000","message":"change projects to project.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                \u003cns0:AttributeValue"},{"line_number":169,"context_line":"                  xsi:type\u003d\"xs:string\"\u003emember\u003c/ns0:AttributeValue\u003e"},{"line_number":170,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":171,"context_line":"            \u003cns0:Attribute FriendlyName\u003d\"keystone_projects\" Name\u003d\"projects\""},{"line_number":172,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":173,"context_line":"                \u003cns0:AttributeValue"},{"line_number":174,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edevelopment\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_90363451","line":171,"in_reply_to":"fa98f980_f12cf04c","updated":"2014-09-01 22:13:29.000000000","message":"Done","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        openstack_user \u003d \u0027openstack_user\u0027"},{"line_number":182,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":183,"context_line":"        user_attribute.friendly_name \u003d openstack_user"},{"line_number":184,"context_line":"        user_attribute.name \u003d openstack_user"},{"line_number":185,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_UNSPECIFIED"},{"line_number":186,"context_line":"        user_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_36b74e88","line":183,"updated":"2014-09-01 17:44:24.000000000","message":"friendly_name is optional and there\u0027s no reason to have it if it\u0027s the same as the name. Remove this.\n\nAlso, this applies in other places where friendly_name is used.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        openstack_user \u003d \u0027openstack_user\u0027"},{"line_number":182,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":183,"context_line":"        user_attribute.friendly_name \u003d openstack_user"},{"line_number":184,"context_line":"        user_attribute.name \u003d openstack_user"},{"line_number":185,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_UNSPECIFIED"},{"line_number":186,"context_line":"        user_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_d368c6bc","line":183,"in_reply_to":"fa98f980_36b74e88","updated":"2014-09-01 22:13:29.000000000","message":"removed friendly names everywhere.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":183,"context_line":"        user_attribute.friendly_name \u003d openstack_user"},{"line_number":184,"context_line":"        user_attribute.name \u003d openstack_user"},{"line_number":185,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_UNSPECIFIED"},{"line_number":186,"context_line":"        user_value \u003d saml.AttributeValue()"},{"line_number":187,"context_line":"        user_value.set_text(user)"},{"line_number":188,"context_line":"        user_attribute.attribute_value \u003d user_value"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_16cdea31","line":185,"updated":"2014-09-01 17:44:24.000000000","message":"name_format is optional and the default is unspecified, so just leave it off.\n\nThis applies in other places where name_format is unspecified.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        user_attribute \u003d saml.Attribute()"},{"line_number":183,"context_line":"        user_attribute.friendly_name \u003d openstack_user"},{"line_number":184,"context_line":"        user_attribute.name \u003d openstack_user"},{"line_number":185,"context_line":"        user_attribute.name_format \u003d saml.NAME_FORMAT_UNSPECIFIED"},{"line_number":186,"context_line":"        user_value \u003d saml.AttributeValue()"},{"line_number":187,"context_line":"        user_value.set_text(user)"},{"line_number":188,"context_line":"        user_attribute.attribute_value \u003d user_value"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_93a63e0f","line":185,"in_reply_to":"fa98f980_16cdea31","updated":"2014-09-01 22:13:29.000000000","message":"Done","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        \"\"\"Ensure ID attributes are included in signature."},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        Adds attributes `ID` from all nodes with `Assertion` to the list of"},{"line_number":399,"context_line":"        known attributes."},{"line_number":400,"context_line":"        \"\"\""},{"line_number":401,"context_line":"        attributes \u003d assertion.c_attributes.keys()"},{"line_number":402,"context_line":"        if \u0027ID\u0027 in attributes:"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_161eca70","line":399,"updated":"2014-09-01 17:44:24.000000000","message":"it looks like this function is actually trying to figure out if ID is used or id is used... why would ID ever be used? Why would id ever be used? Why is it correct to do this?","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        \"\"\"Ensure ID attributes are included in signature."},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        Adds attributes `ID` from all nodes with `Assertion` to the list of"},{"line_number":399,"context_line":"        known attributes."},{"line_number":400,"context_line":"        \"\"\""},{"line_number":401,"context_line":"        attributes \u003d assertion.c_attributes.keys()"},{"line_number":402,"context_line":"        if \u0027ID\u0027 in attributes:"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_7309dadc","line":399,"in_reply_to":"fa98f980_161eca70","updated":"2014-09-01 22:13:29.000000000","message":"id is a xml tag with a certain value assigned to it for a unique identification. \u003cSignature\u003e \u0027template\u0027 should be filled with \u0027#\u0027\u003cid-tag-value\u003e so only this particular part instead of the whole XML is signed. We want to sign \u003cAssertion\u003e only. ID or id need to be specified to the xmlsec1 binary so it can properly parse and find XML objects.\n\nHowever, since we can predict what will the tag name be (\u0027ID\u0027, not \u0027id\u0027 nor \u0027Id\u0027) we can enforce name in the command_list and therefore remove this subfunction.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            return (\u0027--id-attr:ID\u0027, \u0027Assertion\u0027)"},{"line_number":404,"context_line":"        if \u0027id\u0027 in attributes:"},{"line_number":405,"context_line":"            return (\u0027--id-attr:id\u0027, \u0027Assertion\u0027)"},{"line_number":406,"context_line":"        return None"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    xmlsec_binary \u003d CONF.saml.xmlsec1_binary"},{"line_number":409,"context_line":"    idp_private_key \u003d CONF.saml.keyfile"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_b19fc85e","line":406,"updated":"2014-09-01 17:44:24.000000000","message":"could have this return an empty list and then wouldn\u0027t have to check \"if id_tags\" below.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            return (\u0027--id-attr:ID\u0027, \u0027Assertion\u0027)"},{"line_number":404,"context_line":"        if \u0027id\u0027 in attributes:"},{"line_number":405,"context_line":"            return (\u0027--id-attr:id\u0027, \u0027Assertion\u0027)"},{"line_number":406,"context_line":"        return None"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    xmlsec_binary \u003d CONF.saml.xmlsec1_binary"},{"line_number":409,"context_line":"    idp_private_key \u003d CONF.saml.keyfile"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_304588b3","line":406,"in_reply_to":"fa98f980_b19fc85e","updated":"2014-09-01 22:13:29.000000000","message":"yes.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        \u003cns0:Subject\u003e"},{"line_number":125,"context_line":"            \u003cns0:NameID"},{"line_number":126,"context_line":"              Format\u003d\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"\u003e"},{"line_number":127,"context_line":"                john@smith.com\u003c/ns0:NameID\u003e"},{"line_number":128,"context_line":"            \u003cns0:SubjectConfirmation"},{"line_number":129,"context_line":"              Method\u003d\"urn:oasis:names:tc:SAML:2.0:cm:bearer\"\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_3b21e0fb","line":126,"updated":"2014-09-02 02:32:49.000000000","message":"the format won\u0027t be there anymore.","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        \u003cns0:Subject\u003e"},{"line_number":125,"context_line":"            \u003cns0:NameID"},{"line_number":126,"context_line":"              Format\u003d\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"\u003e"},{"line_number":127,"context_line":"                john@smith.com\u003c/ns0:NameID\u003e"},{"line_number":128,"context_line":"            \u003cns0:SubjectConfirmation"},{"line_number":129,"context_line":"              Method\u003d\"urn:oasis:names:tc:SAML:2.0:cm:bearer\"\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_985e4475","line":126,"in_reply_to":"fa98f980_3b21e0fb","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \u003cns0:AttributeStatement"},{"line_number":156,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":157,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":158,"context_line":"            \u003cns0:Attribute Name\u003d\"user\"\u003e"},{"line_number":159,"context_line":"                \u003cns0:AttributeValue"},{"line_number":160,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":161,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_db5e1476","line":158,"updated":"2014-09-02 02:32:49.000000000","message":"this should be openstack_user","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \u003cns0:AttributeStatement"},{"line_number":156,"context_line":"          xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\""},{"line_number":157,"context_line":"          xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\"\u003e"},{"line_number":158,"context_line":"            \u003cns0:Attribute Name\u003d\"user\"\u003e"},{"line_number":159,"context_line":"                \u003cns0:AttributeValue"},{"line_number":160,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":161,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_184a54ac","line":158,"in_reply_to":"fa98f980_db5e1476","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                \u003cns0:AttributeValue"},{"line_number":160,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":161,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":162,"context_line":"            \u003cns0:Attribute Name\u003d\"roles\""},{"line_number":163,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":164,"context_line":"                \u003cns0:AttributeValue"},{"line_number":165,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eadmin\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_fb54b855","line":162,"updated":"2014-09-02 02:32:49.000000000","message":"should be openstack_roles","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                \u003cns0:AttributeValue"},{"line_number":160,"context_line":"                  xsi:type\u003d\"xs:string\"\u003etest_user\u003c/ns0:AttributeValue\u003e"},{"line_number":161,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":162,"context_line":"            \u003cns0:Attribute Name\u003d\"roles\""},{"line_number":163,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":164,"context_line":"                \u003cns0:AttributeValue"},{"line_number":165,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eadmin\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_38ef1889","line":162,"in_reply_to":"fa98f980_fb54b855","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                \u003cns0:AttributeValue"},{"line_number":167,"context_line":"                  xsi:type\u003d\"xs:string\"\u003emember\u003c/ns0:AttributeValue\u003e"},{"line_number":168,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":169,"context_line":"            \u003cns0:Attribute Name\u003d\"projects\""},{"line_number":170,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":171,"context_line":"                \u003cns0:AttributeValue"},{"line_number":172,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edevelopment\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_3b4f20bf","line":169,"updated":"2014-09-02 02:32:49.000000000","message":"should be openstack_projects","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                \u003cns0:AttributeValue"},{"line_number":167,"context_line":"                  xsi:type\u003d\"xs:string\"\u003emember\u003c/ns0:AttributeValue\u003e"},{"line_number":168,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":169,"context_line":"            \u003cns0:Attribute Name\u003d\"projects\""},{"line_number":170,"context_line":"              NameFormat\u003d\"urn:oasis:...:SAML:2.0:attrname-format:unspecified\"\u003e"},{"line_number":171,"context_line":"                \u003cns0:AttributeValue"},{"line_number":172,"context_line":"                  xsi:type\u003d\"xs:string\"\u003edevelopment\u003c/ns0:AttributeValue\u003e"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_58f21c70","line":169,"in_reply_to":"fa98f980_3b4f20bf","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":388,"context_line":"    idp_private_key \u003d CONF.saml.keyfile"},{"line_number":389,"context_line":"    idp_public_key \u003d CONF.saml.certfile"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"},{"line_number":392,"context_line":"    certificates \u003d \u0027%(idp_private_key)s,%(idp_public_key)s\u0027 % {"},{"line_number":393,"context_line":"        \u0027idp_public_key\u0027: idp_public_key,"},{"line_number":394,"context_line":"        \u0027idp_private_key\u0027: idp_private_key"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_bbe95082","line":391,"updated":"2014-09-02 02:32:49.000000000","message":"could add --id-attr:ID Assertion to this command example","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":388,"context_line":"    idp_private_key \u003d CONF.saml.keyfile"},{"line_number":389,"context_line":"    idp_public_key \u003d CONF.saml.certfile"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID \u003ctag\u003e \u003cfile\u003e"},{"line_number":392,"context_line":"    certificates \u003d \u0027%(idp_private_key)s,%(idp_public_key)s\u0027 % {"},{"line_number":393,"context_line":"        \u0027idp_public_key\u0027: idp_public_key,"},{"line_number":394,"context_line":"        \u0027idp_private_key\u0027: idp_private_key"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_58993c1e","line":391,"in_reply_to":"fa98f980_bbe95082","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"}],"keystone/contrib/federation/samlgen.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def samlize_token(user_id, roles):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    \"\"\" Creating Subject"},{"line_number":26,"context_line":"    \u003cns0:Subject\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_753614ea","line":23,"updated":"2014-07-30 05:57:41.000000000","message":"probably should change this to user_name","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f88789fa823d6259c5d5fbdc5a97e257ab692862","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def samlize_token(user_id, roles):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    \"\"\" Creating Subject"},{"line_number":26,"context_line":"    \u003cns0:Subject\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_afe5ada5","line":23,"in_reply_to":"baada198_753614ea","updated":"2014-07-30 14:17:38.000000000","message":"why?","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    name_id.text \u003d user_id"},{"line_number":35,"context_line":"    name_id.format \u003d saml.NAMEID_FORMAT_EMAILADDRESS"},{"line_number":36,"context_line":"    subject_conf_data \u003d saml.SubjectConfirmationData()"},{"line_number":37,"context_line":"    subject_conf_data.recipient \u003d \"http://beta.com/Shibboleth.sso/SAML2/POST\""},{"line_number":38,"context_line":"    subject_conf_data.not_on_or_after \u003d timeutils.isotime()"},{"line_number":39,"context_line":"    subject_conf \u003d saml.SubjectConfirmation()"},{"line_number":40,"context_line":"    subject_conf.method \u003d saml.SCM_BEARER"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_15287884","line":37,"updated":"2014-07-30 05:57:41.000000000","message":"should come the other region\u0027s URL field.","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    name_id.format \u003d saml.NAMEID_FORMAT_EMAILADDRESS"},{"line_number":36,"context_line":"    subject_conf_data \u003d saml.SubjectConfirmationData()"},{"line_number":37,"context_line":"    subject_conf_data.recipient \u003d \"http://beta.com/Shibboleth.sso/SAML2/POST\""},{"line_number":38,"context_line":"    subject_conf_data.not_on_or_after \u003d timeutils.isotime()"},{"line_number":39,"context_line":"    subject_conf \u003d saml.SubjectConfirmation()"},{"line_number":40,"context_line":"    subject_conf.method \u003d saml.SCM_BEARER"},{"line_number":41,"context_line":"    subject_conf.add_extension_element(subject_conf_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_950c883b","line":38,"updated":"2014-07-30 05:57:41.000000000","message":"this should be some date in the future","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    attribute_statement \u003d saml.AttributeStatement()"},{"line_number":57,"context_line":"    user_attribute \u003d saml.Attribute()"},{"line_number":58,"context_line":"    user_attribute.friendly_name \u003d \"keystone_user\""},{"line_number":59,"context_line":"    user_attribute.name \u003d \"user\""},{"line_number":60,"context_line":"    user_attribute.name_format \u003d saml.NAME_FORMAT_URI"},{"line_number":61,"context_line":"    user_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_154f986b","line":58,"updated":"2014-07-30 05:57:41.000000000","message":"I\u0027m not sure if we need the friendly_name defined","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    authn_statement \u003d saml.AuthnStatement()"},{"line_number":87,"context_line":"    authn_statement.authn_instant \u003d timeutils.isotime()"},{"line_number":88,"context_line":"    authn_statement.session_index \u003d uuid.uuid4().hex"},{"line_number":89,"context_line":"    authn_statement.session_not_on_or_after \u003d timeutils.isotime()"},{"line_number":90,"context_line":"    authn_context \u003d saml.AuthnContext()"},{"line_number":91,"context_line":"    authn_context_class \u003d saml.AuthnContextClassRef()"},{"line_number":92,"context_line":"    authn_context_class.text \u003d saml.AUTHN_PASSWORD"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_753d34bc","line":89,"updated":"2014-07-30 05:57:41.000000000","message":"this should be some date in the future","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    authn_context_class \u003d saml.AuthnContextClassRef()"},{"line_number":92,"context_line":"    authn_context_class.text \u003d saml.AUTHN_PASSWORD"},{"line_number":93,"context_line":"    authn_authority \u003d saml.AuthenticatingAuthority()"},{"line_number":94,"context_line":"    authn_authority.text \u003d \"https://acme.com\""},{"line_number":95,"context_line":"    authn_context.add_extension_element(authn_context_class)"},{"line_number":96,"context_line":"    authn_context.add_extension_element(authn_authority)"},{"line_number":97,"context_line":"    authn_statement.add_extension_element(authn_context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_759294a1","line":94,"updated":"2014-07-30 05:57:41.000000000","message":"should be CONF.public_endpoint % CONF.public_port","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f88789fa823d6259c5d5fbdc5a97e257ab692862","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    canonical_method \u003d xmldsig.CanonicalizationMethod()"},{"line_number":134,"context_line":"    canonical_method.algorithm \u003d xmldsig.ALG_EXC_C14N"},{"line_number":135,"context_line":"    sig_method \u003d xmldsig.SignatureMethod()"},{"line_number":136,"context_line":"    sig_method.algorithm \u003d xmldsig.SIG_RSA_SHA1"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    transforms \u003d xmldsig.Transforms()"},{"line_number":139,"context_line":"    transform \u003d xmldsig.Transform()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6f2e35ad","line":136,"updated":"2014-07-30 14:17:38.000000000","message":"Do these have to be configurable?","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f88789fa823d6259c5d5fbdc5a97e257ab692862","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    transforms.add_extension_element(transform)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    digest_method \u003d xmldsig.DigestMethod()"},{"line_number":144,"context_line":"    digest_method.algorithm \u003d xmldsig.DIGEST_SHA1"},{"line_number":145,"context_line":"    digest_value \u003d xmldsig.DigestValue()"},{"line_number":146,"context_line":"    digest_value.text \u003d uuid.uuid4().hex"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_af384def","line":144,"updated":"2014-07-30 14:17:38.000000000","message":"same comment here.","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    digest_method \u003d xmldsig.DigestMethod()"},{"line_number":144,"context_line":"    digest_method.algorithm \u003d xmldsig.DIGEST_SHA1"},{"line_number":145,"context_line":"    digest_value \u003d xmldsig.DigestValue()"},{"line_number":146,"context_line":"    digest_value.text \u003d uuid.uuid4().hex"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    reference \u003d xmldsig.Reference()"},{"line_number":149,"context_line":"    reference.uri \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_15eb1813","line":146,"updated":"2014-07-30 05:57:41.000000000","message":"no idea about this value","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    digest_value.text \u003d uuid.uuid4().hex"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    reference \u003d xmldsig.Reference()"},{"line_number":149,"context_line":"    reference.uri \u003d uuid.uuid4().hex"},{"line_number":150,"context_line":"    reference.add_extension_element(digest_method)"},{"line_number":151,"context_line":"    reference.add_extension_element(digest_value)"},{"line_number":152,"context_line":"    reference.add_extension_element(transforms)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_55f590eb","line":149,"updated":"2014-07-30 05:57:41.000000000","message":"no idea about this value","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    signed_info.add_extension_element(reference)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    sig_value \u003d xmldsig.SignatureValue()"},{"line_number":160,"context_line":"    sig_value.text \u003d uuid.uuid4().hex"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    signature \u003d xmldsig.Signature()"},{"line_number":163,"context_line":"    signature.id \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_b5ba6c09","line":160,"updated":"2014-07-30 05:57:41.000000000","message":"not sure what values to use for this field","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"46a88795808dba1b72cd85980e17342c0d6a844d","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    Add Issuer, Status and Assertion"},{"line_number":183,"context_line":"    \"\"\""},{"line_number":184,"context_line":"    response \u003d samlp.Response()"},{"line_number":185,"context_line":"    response.destination \u003d \"http://beta.com/Shibboleth.sso/SAML2/POST\""},{"line_number":186,"context_line":"    response.id \u003d uuid.uuid4().hex"},{"line_number":187,"context_line":"    response.issue_instant \u003d timeutils.isotime()"},{"line_number":188,"context_line":"    response.version \u003d \"2.0\""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_35c73c9a","line":185,"updated":"2014-07-30 05:57:41.000000000","message":"should come from region URL","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a3c9c7522399c483d2101840a2fce3e198265d7c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":45,"context_line":"        future \u003d now + datetime.timedelta(days\u003dexpires_in)"},{"line_number":46,"context_line":"        expires_in \u003d timeutils.isotime(future, subsecond\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        status \u003d self._create_status()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_40770dd1","line":45,"updated":"2014-08-11 08:19:08.000000000","message":"i would rather put seconds here:\n\n - I suspect in the first iteration of making this going to the master branch keystoneclient will not use any caching, dates comparision and so on and it will ask everytime for a new assertion. So there is no reason to issue assertion valid longer that single minutes (i would say no more than 5 minutes).\n\n- you can easily express days using seconds whereas it\u0027s slightly harder to express seconds with days.","commit_id":"6896d5a6d3b9924c43e893829d106e209f22c924"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import subprocess"},{"line_number":15,"context_line":"import tempfile"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":"import xml"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import saml2"},{"line_number":20,"context_line":"from saml2 import saml"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_2a4381b1","line":17,"updated":"2014-08-13 05:15:06.000000000","message":"curious, why xml instead of lxml?","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6fc862ad729b9bb1bb76726410dabb0466ca6d5f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import subprocess"},{"line_number":15,"context_line":"import tempfile"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":"import xml"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import saml2"},{"line_number":20,"context_line":"from saml2 import saml"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_654cbf40","line":17,"in_reply_to":"baada198_2a4381b1","updated":"2014-08-13 06:52:47.000000000","message":"xml.\u003c\u003e.\u003c\u003e.ParseError exception was being raised when xmlsec1 had some problems and didn\u0027t output proper XML. I think this is because pysaml2 design and used classes/exceptions.","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        :param expires_in: Sets how long the assertion is valid for, in seconds"},{"line_number":45,"context_line":"        :type expires_in: int"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        :return:"},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        now \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_4a40b5a2","line":47,"updated":"2014-08-13 05:15:06.000000000","message":"should state what is actually being returned.","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6fc862ad729b9bb1bb76726410dabb0466ca6d5f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        :param expires_in: Sets how long the assertion is valid for, in seconds"},{"line_number":45,"context_line":"        :type expires_in: int"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        :return:"},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        now \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_c552ebd9","line":47,"in_reply_to":"baada198_4a40b5a2","updated":"2014-08-13 06:52:47.000000000","message":"Done","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        \u003cKeyInfo\u003e"},{"line_number":261,"context_line":"            \u003cX509Data /\u003e"},{"line_number":262,"context_line":"            \u003c/KeyInfo\u003e"},{"line_number":263,"context_line":"\u003c       /Signature\u003e"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        :return XML \u003cSignature\u003e object :"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_8a2acde4","line":263,"updated":"2014-08-13 05:15:06.000000000","message":"this one bracket is funnily positioned","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6fc862ad729b9bb1bb76726410dabb0466ca6d5f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        \u003cKeyInfo\u003e"},{"line_number":261,"context_line":"            \u003cX509Data /\u003e"},{"line_number":262,"context_line":"            \u003c/KeyInfo\u003e"},{"line_number":263,"context_line":"\u003c       /Signature\u003e"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        :return XML \u003cSignature\u003e object :"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_85ff13b1","line":263,"in_reply_to":"baada198_8a2acde4","updated":"2014-08-13 06:52:47.000000000","message":"right...","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        envelope_transform \u003d xmldsig.Transform("},{"line_number":275,"context_line":"            algorithm\u003dxmldsig.TRANSFORM_ENVELOPED)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        c14_transform \u003d xmldsig.Transform(algorithm\u003dxmldsig.ALG_EXC_C14N)"},{"line_number":278,"context_line":"        transforms.transform \u003d [envelope_transform, c14_transform]"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        # digest method"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_bfc989ad","line":277,"updated":"2014-08-13 05:15:06.000000000","message":"++ thanks for finding this","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        \"\"\"Sign SAML assertion"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        This method utilizes ``xmlsec1`` binary and signs SAML assertions in a"},{"line_number":314,"context_line":"        separated processes. The ``xmlsec1`` cannot read input data from the"},{"line_number":315,"context_line":"        stdin so the prepared assertion needs to be seialized and stored in the"},{"line_number":316,"context_line":"        temporary file. ``tempfile.NamedTemporaryFile`` was used here as it"},{"line_number":317,"context_line":"        deletes the file from the filesystem after the file-like"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_74b0f340","line":314,"updated":"2014-08-13 05:15:06.000000000","message":"nit: s/separeated processes/separate process","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6fc862ad729b9bb1bb76726410dabb0466ca6d5f","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        \"\"\"Sign SAML assertion"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        This method utilizes ``xmlsec1`` binary and signs SAML assertions in a"},{"line_number":314,"context_line":"        separated processes. The ``xmlsec1`` cannot read input data from the"},{"line_number":315,"context_line":"        stdin so the prepared assertion needs to be seialized and stored in the"},{"line_number":316,"context_line":"        temporary file. ``tempfile.NamedTemporaryFile`` was used here as it"},{"line_number":317,"context_line":"        deletes the file from the filesystem after the file-like"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e50e0fe4","line":314,"in_reply_to":"baada198_74b0f340","updated":"2014-08-13 06:52:47.000000000","message":"yeah :-)","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        idp_public_key \u003d CONF.federation.idp_public_key"},{"line_number":335,"context_line":"        # NOTE(marek-denis): It should be safe to assume the parameter will"},{"line_number":336,"context_line":"        # default to something like \u0027/tmp\u0027"},{"line_number":337,"context_line":"        assertions_dir \u003d CONF.federation.assertions_dir or \u0027/tmp\u0027"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        # xmlsec1 --sign --privkey-pem privkey.pem,cert.pem"},{"line_number":340,"context_line":"        # tosign.xml"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_1445f715","line":337,"updated":"2014-08-13 05:15:06.000000000","message":"i don\u0027t think you need \n\n  or \u0027/tmp\u0027\n\nhere if it\u0027s already the default in the common.config","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6fc862ad729b9bb1bb76726410dabb0466ca6d5f","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        idp_public_key \u003d CONF.federation.idp_public_key"},{"line_number":335,"context_line":"        # NOTE(marek-denis): It should be safe to assume the parameter will"},{"line_number":336,"context_line":"        # default to something like \u0027/tmp\u0027"},{"line_number":337,"context_line":"        assertions_dir \u003d CONF.federation.assertions_dir or \u0027/tmp\u0027"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        # xmlsec1 --sign --privkey-pem privkey.pem,cert.pem"},{"line_number":340,"context_line":"        # tosign.xml"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_05f303e9","line":337,"in_reply_to":"baada198_1445f715","updated":"2014-08-13 06:52:47.000000000","message":"Done","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        try:"},{"line_number":348,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":349,"context_line":"            assertion_file.write(str(assertion))"},{"line_number":350,"context_line":"            assertion_file.flush()"},{"line_number":351,"context_line":"        except IOError:"},{"line_number":352,"context_line":"            # FIXME(marek-denis): We must do SOMETHING in case the exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d4545f58","line":349,"updated":"2014-08-13 05:15:06.000000000","message":"str(assertion) worked? i would have thought you needed to do assertion.to_string() or something","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6fc862ad729b9bb1bb76726410dabb0466ca6d5f","unresolved":false,"context_lines":[{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        try:"},{"line_number":348,"context_line":"            assertion_file \u003d tempfile.NamedTemporaryFile(dir\u003dassertions_dir)"},{"line_number":349,"context_line":"            assertion_file.write(str(assertion))"},{"line_number":350,"context_line":"            assertion_file.flush()"},{"line_number":351,"context_line":"        except IOError:"},{"line_number":352,"context_line":"            # FIXME(marek-denis): We must do SOMETHING in case the exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e581affb","line":349,"in_reply_to":"baada198_d4545f58","updated":"2014-08-13 06:52:47.000000000","message":"yes, it did. normally when dealing with lxml.XML objects i need to use etree.tostring(obj), however this is a object defined by pysaml and I am guessing __str__() was reimplemented there.","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0c1807cd8a2422b6b4ad4782c504c1d08029738e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        authn_statement \u003d saml.AuthnStatement()"},{"line_number":163,"context_line":"        authn_statement.authn_instant \u003d timeutils.isotime()"},{"line_number":164,"context_line":"        authn_statement.session_index \u003d uuid.uuid4().hex"},{"line_number":165,"context_line":"        authn_statement.session_not_on_or_after \u003d expires_in"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        authn_context \u003d saml.AuthnContext()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_aa0cd497","line":164,"updated":"2014-08-13 14:35:39.000000000","message":"just a note that this value only seem helpful if there are multiple sessions for a user: http://blog.sweetxml.org/2008/01/saml-v20-sessionindex-what-and-why.html","commit_id":"46df9094ab02034e2eec780ec14eaea0e1d931fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0c1807cd8a2422b6b4ad4782c504c1d08029738e","unresolved":false,"context_lines":[{"line_number":212,"context_line":"          Version\u003d\"2.0\"\u003e"},{"line_number":213,"context_line":"        \"\"\""},{"line_number":214,"context_line":"        assertion \u003d saml.Assertion()"},{"line_number":215,"context_line":"        # NOTE(marek-denis): ID value not used for now."},{"line_number":216,"context_line":"        assertion.id \u003d self.assertion_id"},{"line_number":217,"context_line":"        assertion.issue_instant \u003d timeutils.isotime()"},{"line_number":218,"context_line":"        assertion.issuer \u003d issuer"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_0a0ce092","line":215,"updated":"2014-08-13 14:35:39.000000000","message":"rm this comment","commit_id":"46df9094ab02034e2eec780ec14eaea0e1d931fb"}],"keystone/exception.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4f915c7250c3f576a0058b8817f96034587ec897","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class SAMLSigningError(Error):"},{"line_number":142,"context_line":"    message_format \u003d _(\u0027Unable to sign SAML assertion. It is likely that this \u0027"},{"line_number":143,"context_line":"                       \u0027server does not have xmlsec1 installed, or this is \u0027"},{"line_number":144,"context_line":"                       \u0027the result of misconfiguration. Reason %(reason)s\u0027)"},{"line_number":145,"context_line":"    code \u003d 403"}],"source_content_type":"text/x-python","patch_set":51,"id":"fa98f980_0ff24f9a","line":142,"updated":"2014-09-01 05:13:29.000000000","message":"This message makes this sound more like a 500 than a 403.","commit_id":"12664df04fc1edef43e7ca6be6705d86339c20d8"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"674cd992db3f6440870f659b9ba57800a5bfae12","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class SAMLSigningError(Error):"},{"line_number":142,"context_line":"    message_format \u003d _(\u0027Unable to sign SAML assertion. It is likely that this \u0027"},{"line_number":143,"context_line":"                       \u0027server does not have xmlsec1 installed, or this is \u0027"},{"line_number":144,"context_line":"                       \u0027the result of misconfiguration. Reason %(reason)s\u0027)"},{"line_number":145,"context_line":"    code \u003d 403"}],"source_content_type":"text/x-python","patch_set":51,"id":"fa98f980_baed038e","line":142,"in_reply_to":"fa98f980_0ff24f9a","updated":"2014-09-01 06:11:04.000000000","message":"+++","commit_id":"12664df04fc1edef43e7ca6be6705d86339c20d8"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"5c4a9941f40b74f40a0ce5c1ced34e2b54f416e5","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class SAMLSigningError(Error):"},{"line_number":142,"context_line":"    message_format \u003d _(\u0027Unable to sign SAML assertion. It is likely that this \u0027"},{"line_number":143,"context_line":"                       \u0027server does not have xmlsec1 installed, or this is \u0027"},{"line_number":144,"context_line":"                       \u0027the result of misconfiguration. Reason %(reason)s\u0027)"},{"line_number":145,"context_line":"    code \u003d 403"}],"source_content_type":"text/x-python","patch_set":51,"id":"fa98f980_cb20269e","line":142,"in_reply_to":"fa98f980_baed038e","updated":"2014-09-01 14:03:39.000000000","message":"changed to class inheriting from UnexpectedError","commit_id":"12664df04fc1edef43e7ca6be6705d86339c20d8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                             \u0027that this server does not have xmlsec1 \u0027"},{"line_number":398,"context_line":"                             \u0027installed, or this is the result of \u0027"},{"line_number":399,"context_line":"                             \u0027misconfiguration. Reason %(reason)s\u0027)"},{"line_number":400,"context_line":"    code \u003d 500"},{"line_number":401,"context_line":"    title \u003d \u0027Error signing SAML assertion\u0027"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_51269cb8","line":400,"updated":"2014-09-01 17:44:24.000000000","message":"500 is the default so remove this line.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                             \u0027that this server does not have xmlsec1 \u0027"},{"line_number":398,"context_line":"                             \u0027installed, or this is the result of \u0027"},{"line_number":399,"context_line":"                             \u0027misconfiguration. Reason %(reason)s\u0027)"},{"line_number":400,"context_line":"    code \u003d 500"},{"line_number":401,"context_line":"    title \u003d \u0027Error signing SAML assertion\u0027"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_5c95d03e","line":400,"in_reply_to":"fa98f980_51269cb8","updated":"2014-09-01 22:13:29.000000000","message":"Done","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"}],"keystone/tests/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eb2e02a3bc087cbb729cda92f9b74fbfdddc97f7","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            driver\u003d\u0027keystone.trust.backends.kvs.Trust\u0027)"},{"line_number":367,"context_line":"        self.config_fixture.config("},{"line_number":368,"context_line":"            group\u003d\u0027saml\u0027,"},{"line_number":369,"context_line":"            certfile\u003d\u0027examples/pki/certs/signing_cert.pem\u0027,"},{"line_number":370,"context_line":"            keyfile\u003d\u0027examples/pki/private/signing_key.pem\u0027)"},{"line_number":371,"context_line":"        self.config_fixture.config("},{"line_number":372,"context_line":"            default_log_levels\u003d["}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_0d90a294","line":369,"updated":"2014-08-31 17:03:53.000000000","message":"create a variable and share it.","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e4d173a68ba5e0d95e2e07292aebca25afbfa67","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            driver\u003d\u0027keystone.trust.backends.kvs.Trust\u0027)"},{"line_number":367,"context_line":"        self.config_fixture.config("},{"line_number":368,"context_line":"            group\u003d\u0027saml\u0027,"},{"line_number":369,"context_line":"            certfile\u003d\u0027examples/pki/certs/signing_cert.pem\u0027,"},{"line_number":370,"context_line":"            keyfile\u003d\u0027examples/pki/private/signing_key.pem\u0027)"},{"line_number":371,"context_line":"        self.config_fixture.config("},{"line_number":372,"context_line":"            default_log_levels\u003d["}],"source_content_type":"text/x-python","patch_set":49,"id":"fa98f980_60b690de","line":369,"in_reply_to":"fa98f980_0d90a294","updated":"2014-09-01 01:09:36.000000000","message":"Done","commit_id":"de1953a8fbd9d034a4a327064445359e35d1c2a4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4f915c7250c3f576a0058b8817f96034587ec897","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        return copy.copy(self._config_file_list)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":51,"id":"fa98f980_8f355f48","line":330,"updated":"2014-09-01 05:13:29.000000000","message":"I wouldn\u0027t hold anything up because of it, but I would prefer to have these settings mocked closer to the test where they are used.","commit_id":"12664df04fc1edef43e7ca6be6705d86339c20d8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        return copy.copy(self._config_file_list)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_31583832","line":330,"updated":"2014-09-01 17:44:24.000000000","message":"the name should be signing_certfile since there\u0027s an ssl certfile, too.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        return copy.copy(self._config_file_list)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_33ed92f0","line":330,"in_reply_to":"fa98f980_31583832","updated":"2014-09-01 22:13:29.000000000","message":"Do want me to change this entry as well as the filename in the filesystem, or have separate files and other ones called signing_certfile.pem etc?","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1a52ab79e1d679488d2a5704bc576fa11f60f0d1","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"},{"line_number":334,"context_line":"        self.config_fixture.config(admin_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_b14b4858","line":331,"updated":"2014-09-01 17:44:24.000000000","message":"signing_keyfile","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"238f64f5b0d5c887d608a0c4743033d5061fa433","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"},{"line_number":334,"context_line":"        self.config_fixture.config(admin_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa98f980_93b55ef0","line":331,"in_reply_to":"fa98f980_b14b4858","updated":"2014-09-01 22:13:29.000000000","message":"same as above.","commit_id":"2a199434463bd76720ab7b94e24abf5b6b474511"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        return copy.copy(self._config_file_list)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_7b9608f2","line":330,"updated":"2014-09-02 02:32:49.000000000","message":"I meant change the name of the variable not the file:\n\n signing_certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        return copy.copy(self._config_file_list)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_d821acfd","line":330,"in_reply_to":"fa98f980_7b9608f2","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2e5229700226bc31e2c551332d5b5aa40aafbe58","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"},{"line_number":334,"context_line":"        self.config_fixture.config(admin_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_9b99ec21","line":331,"updated":"2014-09-02 02:32:49.000000000","message":"change the variable to signing_keyfile.","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ee0ac69d3ddb3566825e2e26e94c531b6e73fe06","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def config_overrides(self):"},{"line_number":330,"context_line":"        certfile \u003d \u0027examples/pki/certs/signing_cert.pem\u0027"},{"line_number":331,"context_line":"        keyfile \u003d \u0027examples/pki/private/signing_key.pem\u0027"},{"line_number":332,"context_line":"        # Exercise multiple worker process code paths"},{"line_number":333,"context_line":"        self.config_fixture.config(public_workers\u003d2)"},{"line_number":334,"context_line":"        self.config_fixture.config(admin_workers\u003d2)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa98f980_181c14c1","line":331,"in_reply_to":"fa98f980_9b99ec21","updated":"2014-09-02 07:53:24.000000000","message":"Done","commit_id":"60b2c8e7a8b1cf8cf08d92fafa4514e27ea7c13a"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e42dfa2ba154f8d05bc57139d143146ef9db6b7","unresolved":false,"context_lines":[{"line_number":1580,"context_line":"    ROLES \u003d [\u0027demo\u0027, \u0027service\u0027]"},{"line_number":1581,"context_line":"    EXPIRES_IN \u003d 3600"},{"line_number":1582,"context_line":"    PUBLIC_KEY \u003d CONF.signing.certfile"},{"line_number":1583,"context_line":"    PRIVATE_KEY \u003d CONF.signing.certfile"},{"line_number":1584,"context_line":""},{"line_number":1585,"context_line":"    def load_fixtures(self, fixtures):"},{"line_number":1586,"context_line":"        super(FederationTests, self).load_fixtures(fixtures)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_2ac2a154","line":1583,"updated":"2014-08-13 05:15:06.000000000","message":"can probably delete this, not being used","commit_id":"e08415ae2ba00c581a0b912e8be36b65d802123f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f03b18ce67ec859703d5961a463808e93c4668d","unresolved":false,"context_lines":[{"line_number":1581,"context_line":""},{"line_number":1582,"context_line":"    def _load_federation_config_options(self):"},{"line_number":1583,"context_line":"        CONF.federation.idp_private_key \u003d CONF.signing.keyfile"},{"line_number":1584,"context_line":"        CONF.federation.idp_public_key \u003d CONF.signing.certfile"},{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"    def test_samlize_token_values(self):"},{"line_number":1587,"context_line":"        \"\"\"Test the SAML generator produces a SAML object."}],"source_content_type":"text/x-python","patch_set":14,"id":"7ac7a964_2bbfadd1","line":1584,"updated":"2014-08-15 22:34:14.000000000","message":"need to figure out why this isn\u0027t working in jenkins, it\u0027s fine in my dev. env.","commit_id":"2f384991ca293785ba7cb2e985cb061d7f50ee7b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2e90cb2d98790df137ed0248e19331b0bd553998","unresolved":false,"context_lines":[{"line_number":1586,"context_line":"    ISSUER \u003d \u0027https://acme.com/FIM/sps/openstack/saml20\u0027"},{"line_number":1587,"context_line":"    RECIPIENT \u003d \u0027http://beta.com/Shibboleth.sso/SAML2/POST\u0027"},{"line_number":1588,"context_line":"    SUBJECT \u003d \u0027stevemar\u0027"},{"line_number":1589,"context_line":"    ROLES \u003d [\u0027demo\u0027, \u0027service\u0027]"},{"line_number":1590,"context_line":"    PROJECT \u003d \u0027development\u0027"},{"line_number":1591,"context_line":""},{"line_number":1592,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1abeadc6_93a9eae1","line":1589,"updated":"2014-08-19 14:05:44.000000000","message":"same here, for real world examples.","commit_id":"6d343a89e868a376178c40d54664801cd29a1ec6"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"45bcfe76f81a863a25b9ee89dfbde735f713ce11","unresolved":false,"context_lines":[{"line_number":1593,"context_line":"        super(SAMLGenerationTests, self).setUp()"},{"line_number":1594,"context_line":"        # Make sure we don\u0027t use xmlsec1 binary. A method using it must be"},{"line_number":1595,"context_line":"        # mocked."},{"line_number":1596,"context_line":"        CONF.federation.xmlsec1_binary \u003d \u0027/tmp/nonexisting\u0027"},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"        self.signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":1599,"context_line":"            saml.Assertion, self._load_xml(\u0027signed_saml2_assertion.xml\u0027))"}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_42d77a23","line":1596,"updated":"2014-08-19 15:31:14.000000000","message":"This should use the config fixture.","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"45bcfe76f81a863a25b9ee89dfbde735f713ce11","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"        self.assertIsNotNone(assertion)"},{"line_number":1623,"context_line":"        self.assertEqual(saml.Assertion, type(assertion))"},{"line_number":1624,"context_line":"        issuer \u003d response.issuer"},{"line_number":1625,"context_line":"        self.assertEqual(response.destination, self.RECIPIENT)"},{"line_number":1626,"context_line":"        self.assertEqual(issuer.text, self.ISSUER)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"        # TODO(stevemar): Match generated key text to key that was used."}],"source_content_type":"text/x-python","patch_set":23,"id":"1abeadc6_22899e26","line":1625,"updated":"2014-08-19 15:31:14.000000000","message":"I think the order for all of the assertEqual methods should be switched. The order should be (expected, observed).","commit_id":"fb4ccbdce5dafebf046cc323ab4b3bc55d8eef5f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from lxml import etree"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.auth import controllers as auth_controllers"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_45885f22","line":19,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"# noqa\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from lxml import etree"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.auth import controllers as auth_controllers"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_6280ec46","line":19,"in_reply_to":"1abeadc6_45885f22","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from lxml import etree"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.auth import controllers as auth_controllers"},{"line_number":23,"context_line":"from keystone.common import dependency"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_a585b308","line":20,"updated":"2014-08-27 01:05:35.000000000","message":"remove \"# noqa\"","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from lxml import etree"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import saml2  # noqa"},{"line_number":20,"context_line":"from saml2 import saml  # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.auth import controllers as auth_controllers"},{"line_number":23,"context_line":"from keystone.common import dependency"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_427db06d","line":20,"in_reply_to":"1abeadc6_a585b308","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1cdd000c7ecb954b58131aa81706fe69b4830523","unresolved":false,"context_lines":[{"line_number":1596,"context_line":"            saml.Assertion, self._load_xml(\u0027signed_saml2_assertion.xml\u0027))"},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"    def _load_xml(self, filename):"},{"line_number":1599,"context_line":"        with open(XMLDIR + filename, \u0027r\u0027) as certificate:"},{"line_number":1600,"context_line":"            return certificate.read()"},{"line_number":1601,"context_line":""},{"line_number":1602,"context_line":"    def test_samlize_token_values(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_a59cd35e","line":1599,"updated":"2014-08-27 01:05:35.000000000","message":"os.path.join should be used to create paths consistently.","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ed88fd616bcd9da7472c2df027b689b264fcb8f1","unresolved":false,"context_lines":[{"line_number":1596,"context_line":"            saml.Assertion, self._load_xml(\u0027signed_saml2_assertion.xml\u0027))"},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"    def _load_xml(self, filename):"},{"line_number":1599,"context_line":"        with open(XMLDIR + filename, \u0027r\u0027) as certificate:"},{"line_number":1600,"context_line":"            return certificate.read()"},{"line_number":1601,"context_line":""},{"line_number":1602,"context_line":"    def test_samlize_token_values(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_82e7c811","line":1599,"in_reply_to":"1abeadc6_a59cd35e","updated":"2014-08-27 03:18:14.000000000","message":"Done","commit_id":"3a12848d8e0d182ba842934053c137705d7fd079"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"        assertion \u003d response.assertion"},{"line_number":1634,"context_line":"        self.assertIsNotNone(assertion)"},{"line_number":1635,"context_line":"        self.assertEqual(saml.Assertion, type(assertion))"},{"line_number":1636,"context_line":"        issuer \u003d response.issuer"},{"line_number":1637,"context_line":"        self.assertEqual(response.destination, self.RECIPIENT)"},{"line_number":1638,"context_line":"        self.assertEqual(issuer.text, self.ISSUER)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_70faf743","line":1635,"updated":"2014-08-29 14:42:45.000000000","message":"assertIsInstance?","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"        assertion \u003d response.assertion"},{"line_number":1634,"context_line":"        self.assertIsNotNone(assertion)"},{"line_number":1635,"context_line":"        self.assertEqual(saml.Assertion, type(assertion))"},{"line_number":1636,"context_line":"        issuer \u003d response.issuer"},{"line_number":1637,"context_line":"        self.assertEqual(response.destination, self.RECIPIENT)"},{"line_number":1638,"context_line":"        self.assertEqual(issuer.text, self.ISSUER)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_6f1a157e","line":1635,"in_reply_to":"1abeadc6_70faf743","updated":"2014-08-29 15:27:24.000000000","message":"++","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"        assertion \u003d response.assertion"},{"line_number":1634,"context_line":"        self.assertIsNotNone(assertion)"},{"line_number":1635,"context_line":"        self.assertEqual(saml.Assertion, type(assertion))"},{"line_number":1636,"context_line":"        issuer \u003d response.issuer"},{"line_number":1637,"context_line":"        self.assertEqual(response.destination, self.RECIPIENT)"},{"line_number":1638,"context_line":"        self.assertEqual(issuer.text, self.ISSUER)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_897689a2","line":1635,"in_reply_to":"1abeadc6_70faf743","updated":"2014-08-29 18:04:29.000000000","message":"Done","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":1634,"context_line":"        self.assertIsNotNone(assertion)"},{"line_number":1635,"context_line":"        self.assertEqual(saml.Assertion, type(assertion))"},{"line_number":1636,"context_line":"        issuer \u003d response.issuer"},{"line_number":1637,"context_line":"        self.assertEqual(response.destination, self.RECIPIENT)"},{"line_number":1638,"context_line":"        self.assertEqual(issuer.text, self.ISSUER)"},{"line_number":1639,"context_line":""},{"line_number":1640,"context_line":"        user_attribute \u003d assertion.attribute_statement[0].attribute[0]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_1037034e","line":1637,"updated":"2014-08-29 14:42:45.000000000","message":"Probably should switch the order of these two. The order should be (expected, observed).","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":1634,"context_line":"        self.assertIsNotNone(assertion)"},{"line_number":1635,"context_line":"        self.assertEqual(saml.Assertion, type(assertion))"},{"line_number":1636,"context_line":"        issuer \u003d response.issuer"},{"line_number":1637,"context_line":"        self.assertEqual(response.destination, self.RECIPIENT)"},{"line_number":1638,"context_line":"        self.assertEqual(issuer.text, self.ISSUER)"},{"line_number":1639,"context_line":""},{"line_number":1640,"context_line":"        user_attribute \u003d assertion.attribute_statement[0].attribute[0]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_096a79b2","line":1637,"in_reply_to":"1abeadc6_1037034e","updated":"2014-08-29 18:04:29.000000000","message":"Done","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32d59106156c5a057eec1c4f22f62962b9b7ca6c","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"        self.assertEqual(self.PROJECT, project_attribute[0].text)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def test_saml_signing(self):"},{"line_number":1686,"context_line":"        \"\"\"Test the SAML generator produces a SAML object."},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"        Test the SAML generator directly by passing known arguments, the result"},{"line_number":1689,"context_line":"        should be a SAML object that consistently includes attributes based on"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_7ad9f620","line":1686,"updated":"2014-08-29 13:53:47.000000000","message":"nit: s/Test the/Test that the/","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"        self.assertEqual(self.PROJECT, project_attribute[0].text)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def test_saml_signing(self):"},{"line_number":1686,"context_line":"        \"\"\"Test the SAML generator produces a SAML object."},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"        Test the SAML generator directly by passing known arguments, the result"},{"line_number":1689,"context_line":"        should be a SAML object that consistently includes attributes based on"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_695bed21","line":1686,"in_reply_to":"1abeadc6_7ad9f620","updated":"2014-08-29 18:04:29.000000000","message":"Done","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":1697,"context_line":""},{"line_number":1698,"context_line":"        signature \u003d response.assertion.signature"},{"line_number":1699,"context_line":"        self.assertIsNotNone(signature)"},{"line_number":1700,"context_line":"        self.assertEqual(xmldsig.Signature, type(signature))"},{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"        idp_public_key \u003d sigver.read_cert_from_file(CONF.signing.certfile,"},{"line_number":1703,"context_line":"                                                    \u0027pem\u0027)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_308b1fc4","line":1700,"updated":"2014-08-29 14:42:45.000000000","message":"assertIsInstance?","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":1697,"context_line":""},{"line_number":1698,"context_line":"        signature \u003d response.assertion.signature"},{"line_number":1699,"context_line":"        self.assertIsNotNone(signature)"},{"line_number":1700,"context_line":"        self.assertEqual(xmldsig.Signature, type(signature))"},{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"        idp_public_key \u003d sigver.read_cert_from_file(CONF.signing.certfile,"},{"line_number":1703,"context_line":"                                                    \u0027pem\u0027)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_4960f1ce","line":1700,"in_reply_to":"1abeadc6_308b1fc4","updated":"2014-08-29 18:04:29.000000000","message":"Done","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e72dec3dc86cf482e5cbf7a1be386568d3ac051e","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"    ROLES \u003d [\u0027admin\u0027, \u0027member\u0027]"},{"line_number":1607,"context_line":"    PROJECT \u003d \u0027development\u0027"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"    def _is_xmlsec1_installed(self):"},{"line_number":1610,"context_line":"        xmlsec \u003d \u0027xmlsec1\u0027"},{"line_number":1611,"context_line":"        try:"},{"line_number":1612,"context_line":"            subprocess.call([xmlsec])"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_628a1f1c","line":1609,"updated":"2014-08-29 22:39:29.000000000","message":"this should not be an instance method - make it a module method","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a8ff1375aca6195d78b7c10884ca613b23a5946a","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"    ROLES \u003d [\u0027admin\u0027, \u0027member\u0027]"},{"line_number":1607,"context_line":"    PROJECT \u003d \u0027development\u0027"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"    def _is_xmlsec1_installed(self):"},{"line_number":1610,"context_line":"        xmlsec \u003d \u0027xmlsec1\u0027"},{"line_number":1611,"context_line":"        try:"},{"line_number":1612,"context_line":"            subprocess.call([xmlsec])"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_e2554f50","line":1609,"in_reply_to":"1abeadc6_628a1f1c","updated":"2014-08-29 22:48:56.000000000","message":"OK","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e72dec3dc86cf482e5cbf7a1be386568d3ac051e","unresolved":false,"context_lines":[{"line_number":1614,"context_line":"            LOG.debug(\u0027%s is not installed\u0027 % xmlsec)"},{"line_number":1615,"context_line":"            return False"},{"line_number":1616,"context_line":"        else:"},{"line_number":1617,"context_line":"            LOG.debug(\u0027%s found\u0027 % xmlsec)"},{"line_number":1618,"context_line":"            return True"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_02cb2b72","line":1617,"updated":"2014-08-29 22:39:29.000000000","message":"not sure this is worth a debug","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a8ff1375aca6195d78b7c10884ca613b23a5946a","unresolved":false,"context_lines":[{"line_number":1614,"context_line":"            LOG.debug(\u0027%s is not installed\u0027 % xmlsec)"},{"line_number":1615,"context_line":"            return False"},{"line_number":1616,"context_line":"        else:"},{"line_number":1617,"context_line":"            LOG.debug(\u0027%s found\u0027 % xmlsec)"},{"line_number":1618,"context_line":"            return True"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_e2dc6fe6","line":1617,"in_reply_to":"1abeadc6_02cb2b72","updated":"2014-08-29 22:48:56.000000000","message":"yeah, i was debating that too, i guess i\u0027ll take it out here and leave it in above","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e72dec3dc86cf482e5cbf7a1be386568d3ac051e","unresolved":false,"context_lines":[{"line_number":1703,"context_line":""},{"line_number":1704,"context_line":"        \"\"\""},{"line_number":1705,"context_line":"        if not self._is_xmlsec1_installed():"},{"line_number":1706,"context_line":"            self.skip(\u0027xmlsec1 is not installed\u0027)"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":1709,"context_line":"        response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_e2a46fa7","line":1706,"updated":"2014-08-29 22:39:29.000000000","message":"preferrably wrap the test method with:\n\n  @unittest.skipIf(not _is_xmlsec1_installed(), \u0027xmlsec1 is not installed\u0027)","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a8ff1375aca6195d78b7c10884ca613b23a5946a","unresolved":false,"context_lines":[{"line_number":1703,"context_line":""},{"line_number":1704,"context_line":"        \"\"\""},{"line_number":1705,"context_line":"        if not self._is_xmlsec1_installed():"},{"line_number":1706,"context_line":"            self.skip(\u0027xmlsec1 is not installed\u0027)"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":1709,"context_line":"        response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_22e3c7a4","line":1706,"in_reply_to":"1abeadc6_e2a46fa7","updated":"2014-08-29 22:48:56.000000000","message":"alrighty","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e72dec3dc86cf482e5cbf7a1be386568d3ac051e","unresolved":false,"context_lines":[{"line_number":1721,"context_line":"        # NOTE(stevemar): Rather than one line of text, the certificate is"},{"line_number":1722,"context_line":"        # printed with newlines for readability, we remove these so we can"},{"line_number":1723,"context_line":"        # match it with the key that we used."},{"line_number":1724,"context_line":"        cert_text \u003d cert_text.replace(\u0027\\n\u0027, \u0027\u0027)"},{"line_number":1725,"context_line":"        self.assertEqual(idp_public_key, cert_text)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_22abc775","line":1724,"updated":"2014-08-29 22:39:29.000000000","message":"instead of \u0027\\n\u0027\n\n  import os\n  os.linesep  # celebrate platform independence day","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a8ff1375aca6195d78b7c10884ca613b23a5946a","unresolved":false,"context_lines":[{"line_number":1721,"context_line":"        # NOTE(stevemar): Rather than one line of text, the certificate is"},{"line_number":1722,"context_line":"        # printed with newlines for readability, we remove these so we can"},{"line_number":1723,"context_line":"        # match it with the key that we used."},{"line_number":1724,"context_line":"        cert_text \u003d cert_text.replace(\u0027\\n\u0027, \u0027\u0027)"},{"line_number":1725,"context_line":"        self.assertEqual(idp_public_key, cert_text)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1abeadc6_42de03db","line":1724,"in_reply_to":"1abeadc6_22abc775","updated":"2014-08-29 22:48:56.000000000","message":"neat","commit_id":"5229311e0bc1c43f318edb18cc9c45ed62744c77"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"dda89717285fbaf37a116d52be4931ec9bfce9ad","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"        project_attribute \u003d assertion[4][2]"},{"line_number":1695,"context_line":"        self.assertEqual(self.PROJECT, project_attribute[0].text)"},{"line_number":1696,"context_line":""},{"line_number":1697,"context_line":"    @unittest.skipIf(not _is_xmlsec1_installed(), \u0027xmlsec1 is not installed\u0027)"},{"line_number":1698,"context_line":"    def test_saml_signing(self):"},{"line_number":1699,"context_line":"        \"\"\"Test that the SAML generator produces a SAML object."},{"line_number":1700,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"1abeadc6_6a9af114","line":1697,"updated":"2014-08-30 04:02:52.000000000","message":"apparently this is making python 2.6 fail","commit_id":"00d2c7daf9955a70c226a882ab3439e60b8d8ed7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b63d9de39aaa807da9501bb9ebffdccd557f4749","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"    def setUp(self):"},{"line_number":1620,"context_line":"        super(SAMLGenerationTests, self).setUp()"},{"line_number":1621,"context_line":"        self.signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":1622,"context_line":"            saml.Assertion, self._load_xml(\u0027signed_saml2_assertion.xml\u0027))"},{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"    def _load_xml(self, filename):"},{"line_number":1625,"context_line":"        with open(os.path.join(XMLDIR, filename), \u0027r\u0027) as certificate:"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_f2734813","line":1622,"updated":"2014-08-30 17:15:08.000000000","message":"looks like this could also be a class variable.","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff21b42072043e637e80885212ac03433a65dc90","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"    def setUp(self):"},{"line_number":1620,"context_line":"        super(SAMLGenerationTests, self).setUp()"},{"line_number":1621,"context_line":"        self.signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":1622,"context_line":"            saml.Assertion, self._load_xml(\u0027signed_saml2_assertion.xml\u0027))"},{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"    def _load_xml(self, filename):"},{"line_number":1625,"context_line":"        with open(os.path.join(XMLDIR, filename), \u0027r\u0027) as certificate:"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa98f980_616dc004","line":1622,"in_reply_to":"fa98f980_f2734813","updated":"2014-08-31 06:43:46.000000000","message":"Done","commit_id":"af124bfaf5cdfdeb6b790b4b9292cb35c7cfcac6"}],"keystone/tests/xml/signed_saml2_assertion.xml":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"79d6e22c1931a3883498ea108fdd4495e87c877d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cns0:Assertion xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns:ns1\u003d\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\" ID\u003d\"9a22528bfe194b2880edce5d60414d6a\" IssueInstant\u003d\"2014-08-19T10:53:57Z\"\u003e"},{"line_number":2,"context_line":"  \u003cns0:Issuer Format\u003d\"urn:oasis:names:tc:SAML:2.0:nameid-format:entity\"\u003ehttps://acme.com/FIM/sps/openstack/saml20\u003c/ns0:Issuer\u003e"},{"line_number":3,"context_line":"  \u003cns1:Signature\u003e"},{"line_number":4,"context_line":"    \u003cns1:SignedInfo\u003e"}],"source_content_type":"application/xml","patch_set":39,"id":"1abeadc6_d20aee1e","line":1,"updated":"2014-08-29 15:27:24.000000000","message":"instead of naming this directory \"xml\" - can you name it something about the directory contents, and not just their format? like saml2/ or federation/ or whatever","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cns0:Assertion xmlns:ns0\u003d\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns:ns1\u003d\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xsi\u003d\"http://www.w3.org/2001/XMLSchema-instance\" ID\u003d\"9a22528bfe194b2880edce5d60414d6a\" IssueInstant\u003d\"2014-08-19T10:53:57Z\"\u003e"},{"line_number":2,"context_line":"  \u003cns0:Issuer Format\u003d\"urn:oasis:names:tc:SAML:2.0:nameid-format:entity\"\u003ehttps://acme.com/FIM/sps/openstack/saml20\u003c/ns0:Issuer\u003e"},{"line_number":3,"context_line":"  \u003cns1:Signature\u003e"},{"line_number":4,"context_line":"    \u003cns1:SignedInfo\u003e"}],"source_content_type":"application/xml","patch_set":39,"id":"1abeadc6_a92b4580","line":1,"in_reply_to":"1abeadc6_d20aee1e","updated":"2014-08-29 18:04:29.000000000","message":"went with saml2","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"}],"test-requirements.txt":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f88789fa823d6259c5d5fbdc5a97e257ab692862","unresolved":false,"context_lines":[{"line_number":16,"context_line":"ldappool\u003e\u003d1.0"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Optional for Keyston2Keystone"},{"line_number":19,"context_line":"pysaml2"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Testing"},{"line_number":22,"context_line":"# computes code coverage percentages"}],"source_content_type":"text/plain","patch_set":2,"id":"baada198_4fddf1dc","line":19,"updated":"2014-07-30 14:17:38.000000000","message":"This will have to be brought over to global requirements","commit_id":"fcbdf5ecdc74923396779f9a6fb3b42e483380c4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-ldap\u003d\u003d2.3.13"},{"line_number":16,"context_line":"ldappool\u003e\u003d1.0 # MPL"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Optional for Keystone2Keystone"},{"line_number":19,"context_line":"pysaml2"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Testing"}],"source_content_type":"text/plain","patch_set":37,"id":"1abeadc6_6e76fc3f","line":18,"updated":"2014-08-28 23:00:36.000000000","message":"it\u0027s an optional requirement that\u0027s *required* for keystone2keystone","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9a9b65fd9042f94ec8ee0e18ee0aa33ed2566b9a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-ldap\u003d\u003d2.3.13"},{"line_number":16,"context_line":"ldappool\u003e\u003d1.0 # MPL"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Optional for Keystone2Keystone"},{"line_number":19,"context_line":"pysaml2"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Testing"}],"source_content_type":"text/plain","patch_set":37,"id":"1abeadc6_6b3ce92f","line":18,"in_reply_to":"1abeadc6_6e76fc3f","updated":"2014-08-29 02:56:18.000000000","message":"ha! I\u0027ll make it clearer","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5e34767b8012477936e0cfc879b97033421b1c9d","unresolved":false,"context_lines":[{"line_number":16,"context_line":"ldappool\u003e\u003d1.0 # MPL"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Optional for Keystone2Keystone"},{"line_number":19,"context_line":"pysaml2"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Testing"},{"line_number":22,"context_line":"# computes code coverage percentages"}],"source_content_type":"text/plain","patch_set":37,"id":"1abeadc6_6e9fdc5f","line":19,"updated":"2014-08-28 23:00:36.000000000","message":"yay!","commit_id":"fa843847f7c560b7c88c63f69a7557f0c77fd731"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"86a5819a521b9c6749e7e4d8c89a5a78023ac6fa","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-ldap\u003d\u003d2.3.13"},{"line_number":16,"context_line":"ldappool\u003e\u003d1.0 # MPL"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Required only for Federating Multiple Keystones"},{"line_number":19,"context_line":"pysaml2"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Testing"}],"source_content_type":"text/plain","patch_set":39,"id":"1abeadc6_d0682bf7","line":18,"updated":"2014-08-29 14:42:45.000000000","message":"(nit) i don\u0027t think the \u0027f\u0027 and \u0027m\u0027 here need to be capitalized.","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"94298a1010313456f870fc069315221196f537bd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-ldap\u003d\u003d2.3.13"},{"line_number":16,"context_line":"ldappool\u003e\u003d1.0 # MPL"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# Required only for Federating Multiple Keystones"},{"line_number":19,"context_line":"pysaml2"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Testing"}],"source_content_type":"text/plain","patch_set":39,"id":"1abeadc6_093c39c7","line":18,"in_reply_to":"1abeadc6_d0682bf7","updated":"2014-08-29 18:04:29.000000000","message":"Done","commit_id":"655fab0876daabf37a71808d0520909fa9d6bdd9"}]}
