)]}'
{"keystone/api/os_simple_cert.py":[{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"55af2063a90ce5ea17b3d6392f137a8e23d7afa3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":43,"context_line":"    @ks_flask.unenforced_api"},{"line_number":44,"context_line":"    def get(self):"},{"line_number":45,"context_line":"        return _get_certificate(CONF.signing.ca_certs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bfb3d3c7_c1f496f3","side":"PARENT","line":45,"range":{"start_line":45,"start_character":31,"end_line":45,"end_character":53},"updated":"2019-05-31 06:19:31.000000000","message":"The API uses this class SimpleCertCAResource that requires the value from the CONF. I am looking for the better solution so that we do not need to get rid of whole API.","commit_id":"d2b5550214cecd8a753253066d61e3419e76e952"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"47cfd48d12059592659a5a68fa50697264f5d575","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":43,"context_line":"    @ks_flask.unenforced_api"},{"line_number":44,"context_line":"    def get(self):"},{"line_number":45,"context_line":"        return _get_certificate(CONF.signing.ca_certs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_8973c74d","side":"PARENT","line":45,"range":{"start_line":45,"start_character":31,"end_line":45,"end_character":53},"in_reply_to":"9fb8cfa7_572a5890","updated":"2019-06-19 10:19:14.000000000","message":"Done","commit_id":"d2b5550214cecd8a753253066d61e3419e76e952"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"027945dd5bfbf22f53fbe80ec19065670e46195c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":43,"context_line":"    @ks_flask.unenforced_api"},{"line_number":44,"context_line":"    def get(self):"},{"line_number":45,"context_line":"        return _get_certificate(CONF.signing.ca_certs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_572a5890","side":"PARENT","line":45,"range":{"start_line":45,"start_character":31,"end_line":45,"end_character":53},"in_reply_to":"bfb3d3c7_c1f496f3","updated":"2019-06-18 16:23:35.000000000","message":"You could keep the actual method here, but just return an empty list or response.\n\n  def get(self):\n      return []","commit_id":"d2b5550214cecd8a753253066d61e3419e76e952"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"027945dd5bfbf22f53fbe80ec19065670e46195c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"},{"line_number":49,"context_line":"    @ks_flask.unenforced_api"},{"line_number":50,"context_line":"    def get(self):"},{"line_number":51,"context_line":"        return _get_certificate(CONF.signing.certfile)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class SimpleCertAPI(ks_flask.APIBase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_f7182c85","side":"PARENT","line":51,"updated":"2019-06-18 16:23:35.000000000","message":"Similiar concept here.","commit_id":"d2b5550214cecd8a753253066d61e3419e76e952"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"47cfd48d12059592659a5a68fa50697264f5d575","unresolved":false,"context_lines":[{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"},{"line_number":49,"context_line":"    @ks_flask.unenforced_api"},{"line_number":50,"context_line":"    def get(self):"},{"line_number":51,"context_line":"        return _get_certificate(CONF.signing.certfile)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class SimpleCertAPI(ks_flask.APIBase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_298e5b27","side":"PARENT","line":51,"in_reply_to":"9fb8cfa7_f7182c85","updated":"2019-06-19 10:19:14.000000000","message":"Done","commit_id":"d2b5550214cecd8a753253066d61e3419e76e952"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"248869700d411bdc8e67241902fda5d0bc27e325","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":31,"context_line":"    @ks_flask.unenforced_api"},{"line_number":32,"context_line":"    def get(self):"},{"line_number":33,"context_line":"        return flask.make_response({}, http_client.FORBIDDEN)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_44a7da0c","line":33,"range":{"start_line":33,"start_character":39,"end_line":33,"end_character":60},"updated":"2019-06-20 15:22:29.000000000","message":"Instead of returning a 403, we could just return:\n\n  {\n      \u0027revoked\u0027: []\n  }\n\nas the response body. Then we\u0027re not changing the actual API.","commit_id":"dadac5db055fc81534c4ecec2bcc7d0d59b040a6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2f6bafc01e1ce9aac5e1f631b5c3098bb4becae","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import flask"},{"line_number":16,"context_line":"import flask_restful"},{"line_number":17,"context_line":"from six.moves import http_client"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.api._shared import json_home_relations"},{"line_number":20,"context_line":"import keystone.conf"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fb8cfa7_5fd54f42","line":17,"updated":"2019-06-21 21:11:10.000000000","message":"Looks like we can remove this now.","commit_id":"fdbf33b50ffc58e46fc0ffb19bac71694c6d3fe0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2f6bafc01e1ce9aac5e1f631b5c3098bb4becae","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.api._shared import json_home_relations"},{"line_number":20,"context_line":"import keystone.conf"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone.server import flask as ks_flask"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9fb8cfa7_9fe1872d","line":21,"updated":"2019-06-21 21:11:10.000000000","message":"Looks like we can remove this now, too.","commit_id":"fdbf33b50ffc58e46fc0ffb19bac71694c6d3fe0"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"165e1e7ead8b384cdbc7bd9c839d57b79f7a99f3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        return flask.make_response({\u0027revoked\u0027: []})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_8638f2d2","line":32,"range":{"start_line":32,"start_character":35,"end_line":32,"end_character":50},"updated":"2019-06-28 17:05:12.000000000","message":"This wasn\u0027t a JSON API before and doesn\u0027t have anything to do with revocation. It simply returned the text of the cert. If it didn\u0027t exist, we deliberately raised a 500 with the CertificateFilesUnavailable error:\n\nhttps://developer.openstack.org/api-ref/identity/v3-ext/index.html?expanded\u003dshow-ca-certificate-detail#os-simple-cert-api\n\nI sort of think that\u0027s actually the correct behavior to maintain, it\u0027s the only behavior that makes sense.","commit_id":"54080d7288f780a5cd92415c2a18880c4fb9dfd6"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"1944fdf5e0e266d342f8d428f2bd7a281193d53b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        return flask.make_response({\u0027revoked\u0027: []})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_2a32045f","line":32,"range":{"start_line":32,"start_character":35,"end_line":32,"end_character":50},"in_reply_to":"9fb8cfa7_8638f2d2","updated":"2019-07-02 11:24:05.000000000","message":"To maintain the behavior I have left it empty.","commit_id":"54080d7288f780a5cd92415c2a18880c4fb9dfd6"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"24db50ae32a902ac6f381aaa7b0d86147037843a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":43,"context_line":"    @ks_flask.unenforced_api"},{"line_number":44,"context_line":"    def get(self):"},{"line_number":45,"context_line":"        return _get_certificate()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fb8cfa7_73b54bd0","line":45,"updated":"2019-07-02 23:04:32.000000000","message":"_get_certificate requires an argument, so this is going to fail with a syntax error rather than correctly enter the function and raise the CertificateFilesUnavailable error.\n\nI suggest to delete the _get_certificate function on line 31 and instead here unconditionally raise exception.CertificateFilesUnavailable.","commit_id":"add6634b600e1a6a9ad607a8dc15fb334f6e723d"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"d08f8ffe4682ef811218d17532fce679f4bcefe5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":43,"context_line":"    @ks_flask.unenforced_api"},{"line_number":44,"context_line":"    def get(self):"},{"line_number":45,"context_line":"        return _get_certificate()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fb8cfa7_24678b54","line":45,"in_reply_to":"9fb8cfa7_73b54bd0","updated":"2019-07-03 05:39:52.000000000","message":"Done","commit_id":"add6634b600e1a6a9ad607a8dc15fb334f6e723d"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"5dd69efb22bc40912dcc65eed2409f72f605da30","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.CertificateFilesUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_54e34306","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":51},"updated":"2019-07-05 06:20:09.000000000","message":"This error message should be updated as well. Instead of saying that \"certificates are not available\", we should say something  that \"the API is useless now.\"","commit_id":"7f42705bfd225bce1c3d77056e55952ee253bde1"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"7392be03c60ff2e853a94a77b39b9060fd2c04f3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.CertificateFilesUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_f8f0f6cb","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":51},"in_reply_to":"7faddb67_54e34306","updated":"2019-07-09 10:24:09.000000000","message":"Done","commit_id":"7f42705bfd225bce1c3d77056e55952ee253bde1"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3a04d2a54103e71abd80b00600b9a0e7b33c92c7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.APIUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_1bca7a6c","line":32,"updated":"2019-07-11 16:50:33.000000000","message":"Not mentioned so far on this patch, but discussed in this week\u0027s keystone meeting:\n\nhttp://eavesdrop.openstack.org/meetings/keystone/2019/keystone.2019-07-09-16.00.log.html#l-98\n\nWe were discussing whether we should continue to raise a 500 or change this to a 410. I brought it up with the API-SIG:\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-sdks/%23openstack-sdks.2019-07-11.log.html#t2019-07-11T16:18:01\n\nNaturally they recommended we find some more graceful way of handling this so that the behavior of a request that worked before (e.g. the ca_certs config option was set to a valid file path and this API returned a 200) would continue to work. This might still be possible - maybe we have it return some dummy contents or an empty string? If this isn\u0027t realistic they recommended changing this to return a 410.","commit_id":"0709ee778c3ab0d4842535a1c516c99c570db74e"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"0eec46953d72b6d72a34f201d11b826822671a65","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.APIUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_e901786b","line":32,"in_reply_to":"7faddb67_1ab574cd","updated":"2019-07-18 09:27:45.000000000","message":"Done","commit_id":"0709ee778c3ab0d4842535a1c516c99c570db74e"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"0eec46953d72b6d72a34f201d11b826822671a65","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.APIUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_89fc8470","line":32,"in_reply_to":"7faddb67_1bca7a6c","updated":"2019-07-18 09:27:45.000000000","message":"Done","commit_id":"0709ee778c3ab0d4842535a1c516c99c570db74e"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"cecd7746d6f458612c66f3e30a338c5c283af71b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.APIUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_85203c4a","line":32,"in_reply_to":"7faddb67_1bca7a6c","updated":"2019-07-12 05:27:14.000000000","message":"IMO it should return 410 since it states that keystone does not support this API. I can wait for other core members to give their opinion.","commit_id":"0709ee778c3ab0d4842535a1c516c99c570db74e"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"db38622115b3b52728d460fa00c89a3c9c1ccd1d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.APIUnavailable()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_1ab574cd","line":32,"in_reply_to":"7faddb67_85203c4a","updated":"2019-07-15 02:52:53.000000000","message":"PKI things is removed long time ago. +1 for 410 by me, even there is a little API backward compatibility problem.","commit_id":"0709ee778c3ab0d4842535a1c516c99c570db74e"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"24a2d611222e4f1557d0121843334a93c2fdb4c4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.Gone()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7faddb67_9607b818","line":32,"updated":"2019-07-18 16:49:16.000000000","message":"Might be nice to have a custom message explaining why this no longer works","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"55d58543338fbac0592d8cb3e6e76b880b76ff81","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class SimpleCertCAResource(flask_restful.Resource):"},{"line_number":30,"context_line":"    @ks_flask.unenforced_api"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        raise exception.Gone()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7faddb67_5da07890","line":32,"in_reply_to":"7faddb67_9607b818","updated":"2019-07-19 05:17:32.000000000","message":"Done","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"21f266d02b99ecbb637d6af9ff51014eeefc6bb9","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @ks_flask.unenforced_api"},{"line_number":32,"context_line":"    def get(self):"},{"line_number":33,"context_line":"        raise exception.Gone("},{"line_number":34,"context_line":"            message\u003d_(\u0027The API isn\\\u0027t supported due to the\u0027"},{"line_number":35,"context_line":"                      \u0027removal of PKI setup in Pike. Returning a\u0027"},{"line_number":36,"context_line":"                      \u0027410 instead of removing the API\u0027))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_4d3c38e0","line":36,"range":{"start_line":34,"start_character":22,"end_line":36,"end_character":55},"updated":"2019-07-19 22:03:50.000000000","message":"How about: \"This API is no longer available due to the removal of support for PKI tokens.\" (Don\u0027t say \"Pike\" as we\u0027re only removing this API now in Train)","commit_id":"7116b46b6e33c870cd22181eb0072f56f46a6338"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"26912dcd9ee4da465554cc73adf529dd2b545548","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @ks_flask.unenforced_api"},{"line_number":32,"context_line":"    def get(self):"},{"line_number":33,"context_line":"        raise exception.Gone("},{"line_number":34,"context_line":"            message\u003d_(\u0027The API isn\\\u0027t supported due to the\u0027"},{"line_number":35,"context_line":"                      \u0027removal of PKI setup in Pike. Returning a\u0027"},{"line_number":36,"context_line":"                      \u0027410 instead of removing the API\u0027))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7faddb67_a67e29ac","line":36,"range":{"start_line":34,"start_character":22,"end_line":36,"end_character":55},"in_reply_to":"7faddb67_4d3c38e0","updated":"2019-07-20 12:25:55.000000000","message":"+1","commit_id":"7116b46b6e33c870cd22181eb0072f56f46a6338"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4158b83d6a17eb208813f3c9d292610dc3046cc9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def get(self):"},{"line_number":33,"context_line":"        raise exception.Gone("},{"line_number":34,"context_line":"            message\u003d_(\u0027This API is no longer available due to the removal\u0027"},{"line_number":35,"context_line":"                      \u0027of support for PKI tokens. Returning a 410 instead\u0027"},{"line_number":36,"context_line":"                      \u0027of removing the API\u0027))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class SimpleCertListResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":25,"id":"7faddb67_ba058e7c","line":36,"range":{"start_line":35,"start_character":49,"end_line":36,"end_character":42},"updated":"2019-07-25 21:16:58.000000000","message":"(nit) this is unnecessary information","commit_id":"b836aa221ca593a61a4ab87fc26d4be228376863"}],"keystone/conf/signing.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2f6bafc01e1ce9aac5e1f631b5c3098bb4becae","unresolved":false,"context_lines":[{"line_number":22,"context_line":"These options remain for backwards compatibility."},{"line_number":23,"context_line":"\"\"\")"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"certfile \u003d cfg.StrOpt("},{"line_number":26,"context_line":"    \u0027certfile\u0027,"},{"line_number":27,"context_line":"    default\u003dconstants._CERTFILE,"},{"line_number":28,"context_line":"    deprecated_for_removal\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fb8cfa7_1fb597cd","side":"PARENT","line":25,"updated":"2019-06-21 21:11:10.000000000","message":"Some of these options are still used in tests [0]. Those tests aren\u0027t failing because they\u0027re not actually run. TestFetchRevocationList doesn\u0027t actually inherit from any sort of testcase implementation, so they\u0027re ignored.\n\nWe should be running those tests and removing the options.\n\n[0] https://opendev.org/openstack/keystone/src/branch/master/keystone/tests/unit/test_v3_auth.py#L5472","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"55fd7d1e5b16b92db712ead41f60e47f1cf5f2b4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"These options remain for backwards compatibility."},{"line_number":23,"context_line":"\"\"\")"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"certfile \u003d cfg.StrOpt("},{"line_number":26,"context_line":"    \u0027certfile\u0027,"},{"line_number":27,"context_line":"    default\u003dconstants._CERTFILE,"},{"line_number":28,"context_line":"    deprecated_for_removal\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fb8cfa7_8945c217","side":"PARENT","line":25,"in_reply_to":"9fb8cfa7_1fb597cd","updated":"2019-06-24 10:01:03.000000000","message":"When running these tests the API return code is 403 [1]. In order for API to return 200 with empty response it might require changing [2]. Is this the requested change?\n\n[1] http://paste.openstack.org/show/753294/\n[2] https://github.com/openstack/keystone/blob/master/keystone/api/auth.py#L268","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"77d4048ce3137dab935007b633e04af032ab4124","unresolved":false,"context_lines":[{"line_number":22,"context_line":"These options remain for backwards compatibility."},{"line_number":23,"context_line":"\"\"\")"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"certfile \u003d cfg.StrOpt("},{"line_number":26,"context_line":"    \u0027certfile\u0027,"},{"line_number":27,"context_line":"    default\u003dconstants._CERTFILE,"},{"line_number":28,"context_line":"    deprecated_for_removal\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fb8cfa7_b037c34d","side":"PARENT","line":25,"in_reply_to":"9fb8cfa7_8945c217","updated":"2019-06-24 15:03:55.000000000","message":"Oh, dang. Looks like my name is on that, too. Sorry about that.\n\nYeah, the comment makes sense. You can disregard my comment about returning 200 OK. We\u0027ll plan to keep the API and have it return 403. Then we\u0027ll just remove the configuration options everywhere.\n\nWe can also just refactor those tests or remove them. Instead, we should just have two tests that ensure the if statement is working properly (e.g., one test to make sure we return a 403 and another to make sure we return a 410 when it makes sense).","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"618ae7d31d85f8828ff9c97e5640c7f7b24a43ab","unresolved":false,"context_lines":[{"line_number":22,"context_line":"These options remain for backwards compatibility."},{"line_number":23,"context_line":"\"\"\")"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"certfile \u003d cfg.StrOpt("},{"line_number":26,"context_line":"    \u0027certfile\u0027,"},{"line_number":27,"context_line":"    default\u003dconstants._CERTFILE,"},{"line_number":28,"context_line":"    deprecated_for_removal\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9fb8cfa7_198a6e69","side":"PARENT","line":25,"in_reply_to":"9fb8cfa7_b037c34d","updated":"2019-06-25 06:25:20.000000000","message":"I added test cases for returning 403 and may be in future when we will remove the API, I can add 410 for it?","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"}],"keystone/exception.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"24a2d611222e4f1557d0121843334a93c2fdb4c4","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"class APIUnavailable(UnexpectedError):"},{"line_number":598,"context_line":"    debug_message_format \u003d _(\"The API service you have requested is not in\""},{"line_number":599,"context_line":"                             \"operation.\")"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"class MalformedEndpoint(UnexpectedError):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7faddb67_0b588153","line":599,"updated":"2019-07-18 16:49:16.000000000","message":"This exception isn\u0027t needed any more","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"55d58543338fbac0592d8cb3e6e76b880b76ff81","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"class APIUnavailable(UnexpectedError):"},{"line_number":598,"context_line":"    debug_message_format \u003d _(\"The API service you have requested is not in\""},{"line_number":599,"context_line":"                             \"operation.\")"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"class MalformedEndpoint(UnexpectedError):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7faddb67_fdaa846e","line":599,"in_reply_to":"7faddb67_0b588153","updated":"2019-07-19 05:17:32.000000000","message":"Done","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"}],"keystone/tests/unit/test_contrib_simple_cert.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"24a2d611222e4f1557d0121843334a93c2fdb4c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"7faddb67_ab15ad4a","side":"PARENT","line":64,"updated":"2019-07-18 16:49:16.000000000","message":"Instead of deleting this file, you could change the tests to ensure a 410 is raised for these APIs.","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"21f266d02b99ecbb637d6af9ff51014eeefc6bb9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"7faddb67_ed8ac4bc","side":"PARENT","line":64,"in_reply_to":"7faddb67_ab15ad4a","updated":"2019-07-19 22:03:50.000000000","message":"Missed this?","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"d14394addde98f1387bfe35a7adbfdd28501e305","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"7faddb67_23dbfd4f","side":"PARENT","line":64,"in_reply_to":"7faddb67_ed8ac4bc","updated":"2019-07-22 13:27:24.000000000","message":"yes, I think I missed this. Sorry","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"f1692ce457f64bdd1c5cc41ba19b1c399b446863","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def test_signing_cert(self):"},{"line_number":51,"context_line":"        self.request_cert(self.CERT_PATH)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_missing_file(self):"},{"line_number":54,"context_line":"        # these files do not exist"},{"line_number":55,"context_line":"        self.config_fixture.config(group\u003d\u0027signing\u0027,"},{"line_number":56,"context_line":"                                   ca_certs\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":24,"id":"7faddb67_e98cdb80","side":"PARENT","line":53,"range":{"start_line":53,"start_character":8,"end_line":53,"end_character":32},"updated":"2019-07-23 05:19:44.000000000","message":"Removed the test case. Don\u0027t think it is valid to check the missing files","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"248869700d411bdc8e67241902fda5d0bc27e325","unresolved":false,"context_lines":[{"line_number":5472,"context_line":"        clear \u003d cms.cms_verify(signed, CONF.signing.certfile,"},{"line_number":5473,"context_line":"                               CONF.signing.ca_certs)"},{"line_number":5474,"context_line":"        payload \u003d json.loads(clear)"},{"line_number":5475,"context_line":"        self.assertEqual({\u0027revoked\u0027: []}, payload)"},{"line_number":5476,"context_line":""},{"line_number":5477,"context_line":"    def test_head_ids_no_tokens(self):"},{"line_number":5478,"context_line":"        self.head("}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_44727aaf","side":"PARENT","line":5475,"range":{"start_line":5475,"start_character":8,"end_line":5475,"end_character":50},"updated":"2019-06-20 15:22:29.000000000","message":"We could keep this behavior instead of throwing a 403 Forbidden. I\u0027d prefer to not change the API response code and instead just return the same thing no matter what.","commit_id":"94a1b57897b52f980176354a94830f63a26365dd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a22766765654c82e3f31b95ad97824c5914af8c","unresolved":false,"context_lines":[{"line_number":5465,"context_line":""},{"line_number":5466,"context_line":"    def test_get_ids_no_tokens_returns_forbidden(self):"},{"line_number":5467,"context_line":"        # NOTE(vishakha): Since this API is deprecated and isn\u0027t supported."},{"line_number":5468,"context_line":"        # Returning a 403 till API is removed. When API is removed a 410"},{"line_number":5469,"context_line":"        # can be returned."},{"line_number":5470,"context_line":"        self.get("},{"line_number":5471,"context_line":"            \u0027/auth/tokens/OS-PKI/revoked\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_720a85d2","line":5468,"range":{"start_line":5468,"start_character":47,"end_line":5468,"end_character":51},"updated":"2019-06-26 19:09:41.000000000","message":"nit: If/when*","commit_id":"a39b8c51fc73c2e62add1219470863403bb62125"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"3f25fbe27fcdea45a73aea92c7f890273616fad7","unresolved":false,"context_lines":[{"line_number":5465,"context_line":""},{"line_number":5466,"context_line":"    def test_get_ids_no_tokens_returns_forbidden(self):"},{"line_number":5467,"context_line":"        # NOTE(vishakha): Since this API is deprecated and isn\u0027t supported."},{"line_number":5468,"context_line":"        # Returning a 403 till API is removed. When API is removed a 410"},{"line_number":5469,"context_line":"        # can be returned."},{"line_number":5470,"context_line":"        self.get("},{"line_number":5471,"context_line":"            \u0027/auth/tokens/OS-PKI/revoked\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_3956295e","line":5468,"range":{"start_line":5468,"start_character":47,"end_line":5468,"end_character":51},"in_reply_to":"9fb8cfa7_720a85d2","updated":"2019-06-27 05:03:13.000000000","message":"Done","commit_id":"a39b8c51fc73c2e62add1219470863403bb62125"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0a22766765654c82e3f31b95ad97824c5914af8c","unresolved":false,"context_lines":[{"line_number":5474,"context_line":""},{"line_number":5475,"context_line":"    def test_head_ids_no_tokens_returns_forbidden(self):"},{"line_number":5476,"context_line":"        # NOTE(vishakha): Since this API is deprecated and isn\u0027t supported."},{"line_number":5477,"context_line":"        # Returning a 403 till API is removed. When API is removed a 410"},{"line_number":5478,"context_line":"        # can be returned."},{"line_number":5479,"context_line":"        self.head("},{"line_number":5480,"context_line":"            \u0027/auth/tokens/OS-PKI/revoked\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_b2fb1dbc","line":5477,"range":{"start_line":5477,"start_character":47,"end_line":5477,"end_character":51},"updated":"2019-06-26 19:09:41.000000000","message":"nit: If/when*","commit_id":"a39b8c51fc73c2e62add1219470863403bb62125"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"3f25fbe27fcdea45a73aea92c7f890273616fad7","unresolved":false,"context_lines":[{"line_number":5474,"context_line":""},{"line_number":5475,"context_line":"    def test_head_ids_no_tokens_returns_forbidden(self):"},{"line_number":5476,"context_line":"        # NOTE(vishakha): Since this API is deprecated and isn\u0027t supported."},{"line_number":5477,"context_line":"        # Returning a 403 till API is removed. When API is removed a 410"},{"line_number":5478,"context_line":"        # can be returned."},{"line_number":5479,"context_line":"        self.head("},{"line_number":5480,"context_line":"            \u0027/auth/tokens/OS-PKI/revoked\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_5953dd6b","line":5477,"range":{"start_line":5477,"start_character":47,"end_line":5477,"end_character":51},"in_reply_to":"9fb8cfa7_b2fb1dbc","updated":"2019-06-27 05:03:13.000000000","message":"Done","commit_id":"a39b8c51fc73c2e62add1219470863403bb62125"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"165e1e7ead8b384cdbc7bd9c839d57b79f7a99f3","unresolved":false,"context_lines":[{"line_number":5456,"context_line":"        self.assertTrue(reg.match(passcode))"},{"line_number":5457,"context_line":""},{"line_number":5458,"context_line":""},{"line_number":5459,"context_line":"class TestFetchRevocationList(test_v3.RestfulTestCase):"},{"line_number":5460,"context_line":"    \"\"\"Test fetch token revocation list on the v3 Identity API.\"\"\""},{"line_number":5461,"context_line":""},{"line_number":5462,"context_line":"    def config_overrides(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_265266df","line":5459,"updated":"2019-06-28 17:05:12.000000000","message":"You should mention in the commit message why these tests were changed, since it\u0027s not immediately clear why the tests needed to be changed since this API wasn\u0027t changed. I might also suggest splitting this into a different patch.","commit_id":"54080d7288f780a5cd92415c2a18880c4fb9dfd6"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"1944fdf5e0e266d342f8d428f2bd7a281193d53b","unresolved":false,"context_lines":[{"line_number":5456,"context_line":"        self.assertTrue(reg.match(passcode))"},{"line_number":5457,"context_line":""},{"line_number":5458,"context_line":""},{"line_number":5459,"context_line":"class TestFetchRevocationList(test_v3.RestfulTestCase):"},{"line_number":5460,"context_line":"    \"\"\"Test fetch token revocation list on the v3 Identity API.\"\"\""},{"line_number":5461,"context_line":""},{"line_number":5462,"context_line":"    def config_overrides(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_4a9f3801","line":5459,"in_reply_to":"9fb8cfa7_265266df","updated":"2019-07-02 11:24:05.000000000","message":"Updated a new patch https://review.opendev.org/#/c/668654/","commit_id":"54080d7288f780a5cd92415c2a18880c4fb9dfd6"}],"releasenotes/notes/removed-as-of-train-92b2942a680eb859.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"248869700d411bdc8e67241902fda5d0bc27e325","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"  - \u003e"},{"line_number":12,"context_line":"    [`bug 1829453 \u003chttps://bugs.launchpad.net/keystone/+bug/1829453\u003e`_]"},{"line_number":13,"context_line":"    The deprecated config options in `signing` is removed now."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"9fb8cfa7_a4b7b63a","line":13,"range":{"start_line":13,"start_character":47,"end_line":13,"end_character":49},"updated":"2019-06-20 15:22:29.000000000","message":"nit: are not removed*","commit_id":"dadac5db055fc81534c4ecec2bcc7d0d59b040a6"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"165e1e7ead8b384cdbc7bd9c839d57b79f7a99f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"9fb8cfa7_266b4685","line":14,"updated":"2019-06-28 17:05:12.000000000","message":"Add another upgrade release note explaining the consequences to the OS-SIMPLE-CERT API.","commit_id":"54080d7288f780a5cd92415c2a18880c4fb9dfd6"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"1944fdf5e0e266d342f8d428f2bd7a281193d53b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"9fb8cfa7_8a99b01f","line":14,"in_reply_to":"9fb8cfa7_266b4685","updated":"2019-07-02 11:24:05.000000000","message":"Done","commit_id":"54080d7288f780a5cd92415c2a18880c4fb9dfd6"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"24a2d611222e4f1557d0121843334a93c2fdb4c4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"upgrade:"},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    [`bug 1829453 \u003chttps://bugs.launchpad.net/keystone/+bug/1829453\u003e`_]"},{"line_number":18,"context_line":"    The os-simple-cert-api will return 500 due to the deprecation of"},{"line_number":19,"context_line":"    config options signing [ca_certs] and signing[cert_file]."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7faddb67_0b2de1a6","line":18,"range":{"start_line":18,"start_character":39,"end_line":18,"end_character":42},"updated":"2019-07-18 16:49:16.000000000","message":"410","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"24a2d611222e4f1557d0121843334a93c2fdb4c4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"upgrade:"},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    [`bug 1829453 \u003chttps://bugs.launchpad.net/keystone/+bug/1829453\u003e`_]"},{"line_number":18,"context_line":"    The os-simple-cert-api will return 500 due to the deprecation of"},{"line_number":19,"context_line":"    config options signing [ca_certs] and signing[cert_file]."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7faddb67_2b28dd94","line":18,"range":{"start_line":18,"start_character":54,"end_line":18,"end_character":65},"updated":"2019-07-18 16:49:16.000000000","message":"We\u0027re removing it, not deprecating it.","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"55d58543338fbac0592d8cb3e6e76b880b76ff81","unresolved":false,"context_lines":[{"line_number":15,"context_line":"upgrade:"},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    [`bug 1829453 \u003chttps://bugs.launchpad.net/keystone/+bug/1829453\u003e`_]"},{"line_number":18,"context_line":"    The os-simple-cert-api will return 500 due to the deprecation of"},{"line_number":19,"context_line":"    config options signing [ca_certs] and signing[cert_file]."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7faddb67_1da680ac","line":18,"range":{"start_line":18,"start_character":39,"end_line":18,"end_character":42},"in_reply_to":"7faddb67_0b2de1a6","updated":"2019-07-19 05:17:32.000000000","message":"Done","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"55d58543338fbac0592d8cb3e6e76b880b76ff81","unresolved":false,"context_lines":[{"line_number":15,"context_line":"upgrade:"},{"line_number":16,"context_line":"  - |"},{"line_number":17,"context_line":"    [`bug 1829453 \u003chttps://bugs.launchpad.net/keystone/+bug/1829453\u003e`_]"},{"line_number":18,"context_line":"    The os-simple-cert-api will return 500 due to the deprecation of"},{"line_number":19,"context_line":"    config options signing [ca_certs] and signing[cert_file]."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7faddb67_bdbaccbd","line":18,"range":{"start_line":18,"start_character":54,"end_line":18,"end_character":65},"in_reply_to":"7faddb67_2b28dd94","updated":"2019-07-19 05:17:32.000000000","message":"Done","commit_id":"0359157e08decadc92b2ca028dee4ec9aaaa1153"}]}
