)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d6f5df5f3c32f23b02173cf99036fe0349a9e63f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"proxy. If this is the case, the HTTP redirections and the links"},{"line_number":11,"context_line":"returned in the REST response bodies are build using http protocol"},{"line_number":12,"context_line":"instead of"},{"line_number":13,"context_line":"https."},{"line_number":14,"context_line":"To handle this situation, a new middleware was added. The purpose of the"},{"line_number":15,"context_line":"SSLMiddleware is to update the wsgi.url_scheme environment variable of"},{"line_number":16,"context_line":"the request with the value contained in an HTTP header that can be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUH%2F%2FZ0E%3D","line":13,"updated":"2014-01-14 04:17:34.000000000","message":"This text wrapping is really weird and interrupts cognitive flow. Please fix it on the next patch iteration.","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"295ddfb4ef14372f79947f1b56512169a11d3da9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"proxy. If this is the case, the HTTP redirections and the links"},{"line_number":11,"context_line":"returned in the REST response bodies are build using http protocol"},{"line_number":12,"context_line":"instead of"},{"line_number":13,"context_line":"https."},{"line_number":14,"context_line":"To handle this situation, a new middleware was added. The purpose of the"},{"line_number":15,"context_line":"SSLMiddleware is to update the wsgi.url_scheme environment variable of"},{"line_number":16,"context_line":"the request with the value contained in an HTTP header that can be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUH%2F%2FYAw%3D","line":13,"in_reply_to":"AAAAUH%2F%2FZ0E%3D","updated":"2014-01-14 14:36:43.000000000","message":"Done","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"73fc992384801b84930e4dde06a25db69af2acc2","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The Heat API doesn\u0027t behave properly if it is behind an SSL termination"},{"line_number":10,"context_line":"proxy. If this is the case, the HTTP redirections and the links"},{"line_number":11,"context_line":"returned in the REST response bodies are build using http protocol"},{"line_number":12,"context_line":"instead of https."},{"line_number":13,"context_line":"To handle this situation, a new middleware was added. The purpose of the"},{"line_number":14,"context_line":"SSLMiddleware is to update the wsgi.url_scheme environment variable of"},{"line_number":15,"context_line":"the request with the value contained in an HTTP header that can be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAUH%2F%2FWsE%3D","line":12,"updated":"2014-01-14 18:10:59.000000000","message":"For the future, please separate paragraphs either with a first-word indent, or a single white-space line.","commit_id":"f99fc9df784544092d00061f297898a95be78810"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"fb70447acd672b65ee93bd04ddb90185e84b9612","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The Heat API doesn\u0027t behave properly if it is behind an SSL termination"},{"line_number":10,"context_line":"proxy. If this is the case, the HTTP redirections and the links"},{"line_number":11,"context_line":"returned in the REST response bodies are build using http protocol"},{"line_number":12,"context_line":"instead of https."},{"line_number":13,"context_line":"To handle this situation, a new middleware was added. The purpose of the"},{"line_number":14,"context_line":"SSLMiddleware is to update the wsgi.url_scheme environment variable of"},{"line_number":15,"context_line":"the request with the value contained in an HTTP header that can be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAUH%2F%2FWa0%3D","line":12,"in_reply_to":"AAAAUH%2F%2FWsE%3D","updated":"2014-01-14 19:00:45.000000000","message":"Done","commit_id":"f99fc9df784544092d00061f297898a95be78810"}],"etc/heat/api-paste.ini":[{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"ef81c9add69ff76b7f162172245a09bac048bfe7","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAUH%2F%2Fakc%3D","line":4,"updated":"2014-01-14 00:17:09.000000000","message":"I would prefer this be optional and documented rather than in the default configuration.","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"bd5b1768d77b4df4157fda2a073103f816081f60","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAUH%2F%2FYHY%3D","line":4,"in_reply_to":"AAAAUH%2F%2FZ0M%3D","updated":"2014-01-14 13:31:50.000000000","message":"Fair enough. Bar your other comments, I\u0027ll +2.","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d6f5df5f3c32f23b02173cf99036fe0349a9e63f","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAUH%2F%2FZ0M%3D","line":4,"in_reply_to":"AAAAUH%2F%2Fakc%3D","updated":"2014-01-14 04:17:34.000000000","message":"I disagree Randall. It does nothing negative, and it makes the default work in the more common production scenario of being behind an SSL terminator rather than self-hosting SSL.","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"ef81c9add69ff76b7f162172245a09bac048bfe7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#   flavor \u003d standalone"},{"line_number":13,"context_line":"#"},{"line_number":14,"context_line":"[pipeline:heat-api-standalone]"},{"line_number":15,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authpassword context apiv1app"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# heat-api pipeline for custom cloud backends"},{"line_number":18,"context_line":"# i.e. in heat.conf:"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAUH%2F%2FakY%3D","line":15,"updated":"2014-01-14 00:17:09.000000000","message":"Same as above.","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":9412,"name":"Andres Buraschi","email":"andres.buraschi@intel.com","username":"aburaschi"},"change_message_id":"2df83d448c55f4186e107a683a4f63991af407d9","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAUH%2F%2FXBg%3D","line":4,"updated":"2014-01-14 17:04:40.000000000","message":"Just wondering... why is ssl put in front of faultwrap in the pipeline? I can\u0027t see any exceptions that whould suggest a change in the order, but it looks like faultwrap could manage some ssl \"faults\" if you put it the other way round...\n\n(same comment for the pipeline below...)","commit_id":"f99fc9df784544092d00061f297898a95be78810"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"fb70447acd672b65ee93bd04ddb90185e84b9612","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAUH%2F%2FWao%3D","line":4,"in_reply_to":"AAAAUH%2F%2FWr4%3D","updated":"2014-01-14 19:00:45.000000000","message":"Done","commit_id":"f99fc9df784544092d00061f297898a95be78810"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"fb70447acd672b65ee93bd04ddb90185e84b9612","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAUH%2F%2FWas%3D","line":4,"in_reply_to":"AAAAUH%2F%2FXBg%3D","updated":"2014-01-14 19:00:45.000000000","message":"Done","commit_id":"f99fc9df784544092d00061f297898a95be78810"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"73fc992384801b84930e4dde06a25db69af2acc2","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# heat-api pipeline"},{"line_number":3,"context_line":"[pipeline:heat-api]"},{"line_number":4,"context_line":"pipeline \u003d ssl faultwrap versionnegotiation authtoken context apiv1app"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"# heat-api pipeline for standalone heat"},{"line_number":7,"context_line":"# ie. uses alternative auth backend that authenticates users against keystone"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAUH%2F%2FWr4%3D","line":4,"in_reply_to":"AAAAUH%2F%2FXBg%3D","updated":"2014-01-14 18:10:59.000000000","message":"I agree.. seems like the order should be swapped.","commit_id":"f99fc9df784544092d00061f297898a95be78810"}],"heat/api/middleware/ssl.py":[{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"6f7058c389cee87d921030f35523bcc6f03205cf","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":"\"\"\"A middleware that replaces the request wsgi.url_scheme environment variable"},{"line_number":15,"context_line":"with the value of HTTP header configured in secure_proxy_ssl_header if exists"},{"line_number":16,"context_line":"in the incoming request."},{"line_number":17,"context_line":"This is useful if the server is bewhind a SSL termination proxy."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6iE%3D","line":16,"updated":"2013-12-27 08:39:16.000000000","message":"Maybe this docstring would look better if joined to middleware class docstring.","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"69ecf0166283dbd7b48c7be4ec4ca93445271e95","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":"\"\"\"A middleware that replaces the request wsgi.url_scheme environment variable"},{"line_number":15,"context_line":"with the value of HTTP header configured in secure_proxy_ssl_header if exists"},{"line_number":16,"context_line":"in the incoming request."},{"line_number":17,"context_line":"This is useful if the server is bewhind a SSL termination proxy."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F578%3D","line":16,"in_reply_to":"AAAAT3%2F%2F6iE%3D","updated":"2013-12-27 13:09:12.000000000","message":"Done","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"6f7058c389cee87d921030f35523bcc6f03205cf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"from heat.common import wsgi"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"_default_secure_proxy_ssl_header \u003d \"X-Forwarded-Proto\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"ssl_middleware_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027secure_proxy_ssl_header\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6ko%3D","line":23,"updated":"2013-12-27 08:39:16.000000000","message":"What reason behind extracting this value as constant? It is used only once.","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"69ecf0166283dbd7b48c7be4ec4ca93445271e95","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"from heat.common import wsgi"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"_default_secure_proxy_ssl_header \u003d \"X-Forwarded-Proto\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"ssl_middleware_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027secure_proxy_ssl_header\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F574%3D","line":23,"in_reply_to":"AAAAT3%2F%2F6ko%3D","updated":"2013-12-27 13:09:12.000000000","message":"Done","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"6f7058c389cee87d921030f35523bcc6f03205cf","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\"The HTTP Header that will be used to determine which \""},{"line_number":29,"context_line":"                    \"the original request protocol scheme was, even if it was \""},{"line_number":30,"context_line":"                    \"removed by an SSL terminator proxy.\""},{"line_number":31,"context_line":"                    \"The default value for this option is: X-Forwarded-Proto\")"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":"cfg.CONF.register_opts(ssl_middleware_opts)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6h8%3D","line":31,"updated":"2013-12-27 08:39:16.000000000","message":"No need to mention default value here.","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"69ecf0166283dbd7b48c7be4ec4ca93445271e95","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\"The HTTP Header that will be used to determine which \""},{"line_number":29,"context_line":"                    \"the original request protocol scheme was, even if it was \""},{"line_number":30,"context_line":"                    \"removed by an SSL terminator proxy.\""},{"line_number":31,"context_line":"                    \"The default value for this option is: X-Forwarded-Proto\")"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":"cfg.CONF.register_opts(ssl_middleware_opts)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F570%3D","line":31,"in_reply_to":"AAAAT3%2F%2F6h8%3D","updated":"2013-12-27 13:09:12.000000000","message":"Done","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"6f7058c389cee87d921030f35523bcc6f03205cf","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def __init__(self, application):"},{"line_number":42,"context_line":"        self.secure_proxy_ssl_header \u003d \\"},{"line_number":43,"context_line":"            cfg.CONF.secure_proxy_ssl_header.upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":44,"context_line":"        super(SSLMiddleware, self).__init__(application)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_request(self, req):"},{"line_number":47,"context_line":"        req.environ[\u0027wsgi.url_scheme\u0027] \u003d req.environ.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6j8%3D","line":44,"updated":"2013-12-27 08:39:16.000000000","message":"Usually, when no additional processing on params should be done, __init__ of base class is called first. But actually there is no reason to call base class at all - all what it does - assigns application to self.application, since application not used at all in this Middleware - no reason to call base class.","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"610d27e8e94eb0b2d047e7db68942bfc2c1f685b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def __init__(self, application):"},{"line_number":42,"context_line":"        self.secure_proxy_ssl_header \u003d \\"},{"line_number":43,"context_line":"            cfg.CONF.secure_proxy_ssl_header.upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":44,"context_line":"        super(SSLMiddleware, self).__init__(application)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_request(self, req):"},{"line_number":47,"context_line":"        req.environ[\u0027wsgi.url_scheme\u0027] \u003d req.environ.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5tM%3D","line":44,"in_reply_to":"AAAAT3%2F%2F57k%3D","updated":"2013-12-27 13:58:51.000000000","message":"If I don\u0027t call super(), tempest will fail. I will upload a new patch.","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"69ecf0166283dbd7b48c7be4ec4ca93445271e95","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def __init__(self, application):"},{"line_number":42,"context_line":"        self.secure_proxy_ssl_header \u003d \\"},{"line_number":43,"context_line":"            cfg.CONF.secure_proxy_ssl_header.upper().replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":44,"context_line":"        super(SSLMiddleware, self).__init__(application)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_request(self, req):"},{"line_number":47,"context_line":"        req.environ[\u0027wsgi.url_scheme\u0027] \u003d req.environ.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F57k%3D","line":44,"in_reply_to":"AAAAT3%2F%2F6j8%3D","updated":"2013-12-27 13:09:12.000000000","message":"Done","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"6f7058c389cee87d921030f35523bcc6f03205cf","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_request(self, req):"},{"line_number":47,"context_line":"        req.environ[\u0027wsgi.url_scheme\u0027] \u003d req.environ.get("},{"line_number":48,"context_line":"            \u0027HTTP_{0}\u0027.format(self.secure_proxy_ssl_header),"},{"line_number":49,"context_line":"            req.environ[\u0027wsgi.url_scheme\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6kM%3D","line":48,"updated":"2013-12-27 08:39:16.000000000","message":"Preprocessing (joining with HTTP_) should be joined with preprocessing done in __init__, No reason to doing work in two places.","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"69ecf0166283dbd7b48c7be4ec4ca93445271e95","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_request(self, req):"},{"line_number":47,"context_line":"        req.environ[\u0027wsgi.url_scheme\u0027] \u003d req.environ.get("},{"line_number":48,"context_line":"            \u0027HTTP_{0}\u0027.format(self.secure_proxy_ssl_header),"},{"line_number":49,"context_line":"            req.environ[\u0027wsgi.url_scheme\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F57w%3D","line":48,"in_reply_to":"AAAAT3%2F%2F6kM%3D","updated":"2013-12-27 13:09:12.000000000","message":"Done","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"ef81c9add69ff76b7f162172245a09bac048bfe7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\"A middleware that replaces the request wsgi.url_scheme environment"},{"line_number":30,"context_line":"    variable with the value of HTTP header configured in"},{"line_number":31,"context_line":"    secure_proxy_ssl_header if exists in the incoming request."},{"line_number":32,"context_line":"    This is useful if the server is bewhind a SSL termination proxy."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    def __init__(self, application):"},{"line_number":35,"context_line":"        super(SSLMiddleware, self).__init__(application)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fal4%3D","line":32,"updated":"2014-01-14 00:17:09.000000000","message":"spelling. s/bewhind/behind","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"295ddfb4ef14372f79947f1b56512169a11d3da9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\"A middleware that replaces the request wsgi.url_scheme environment"},{"line_number":30,"context_line":"    variable with the value of HTTP header configured in"},{"line_number":31,"context_line":"    secure_proxy_ssl_header if exists in the incoming request."},{"line_number":32,"context_line":"    This is useful if the server is bewhind a SSL termination proxy."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    def __init__(self, application):"},{"line_number":35,"context_line":"        super(SSLMiddleware, self).__init__(application)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FYAo%3D","line":32,"in_reply_to":"AAAAUH%2F%2Fal4%3D","updated":"2014-01-14 14:36:43.000000000","message":"Done","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"}],"heat/tests/test_ssl_middleware.py":[{"author":{"_account_id":7225,"name":"Serg Melikyan","email":"smelikyan@mirantis.com","username":"smelikyan"},"change_message_id":"6f7058c389cee87d921030f35523bcc6f03205cf","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"load_tests \u003d testscenarios.load_tests_apply_scenarios"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SSLMiddlewareTest(HeatTestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6hM%3D","line":23,"updated":"2013-12-27 08:39:16.000000000","message":"Please, note that there is a commit regarding usage of testscenarios - https://review.openstack.org/64145","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"69ecf0166283dbd7b48c7be4ec4ca93445271e95","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"load_tests \u003d testscenarios.load_tests_apply_scenarios"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SSLMiddlewareTest(HeatTestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F52s%3D","line":23,"in_reply_to":"AAAAT3%2F%2F6hM%3D","updated":"2013-12-27 13:09:12.000000000","message":"Done","commit_id":"9c408accf35b1454af68649c1073b8764f130823"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d6f5df5f3c32f23b02173cf99036fe0349a9e63f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        middleware \u003d ssl.SSLMiddleware(None)"},{"line_number":43,"context_line":"        request \u003d webob.Request.blank(\u0027/stacks\u0027, headers\u003dself.headers)"},{"line_number":44,"context_line":"        self.assertEqual(None, middleware.process_request(request))"},{"line_number":45,"context_line":"        self.assertEqual(self.forwarded_protocol,"},{"line_number":46,"context_line":"                         request.environ[\u0027wsgi.url_scheme\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FZzw%3D","line":44,"updated":"2014-01-14 04:17:34.000000000","message":"Please use assertIsNone(), None is equal to things other than None.","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"},{"author":{"_account_id":9331,"name":"Pablo Andres Fuente","email":"pablo.andres.fuente@gmail.com","username":"pafuent"},"change_message_id":"295ddfb4ef14372f79947f1b56512169a11d3da9","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        middleware \u003d ssl.SSLMiddleware(None)"},{"line_number":43,"context_line":"        request \u003d webob.Request.blank(\u0027/stacks\u0027, headers\u003dself.headers)"},{"line_number":44,"context_line":"        self.assertEqual(None, middleware.process_request(request))"},{"line_number":45,"context_line":"        self.assertEqual(self.forwarded_protocol,"},{"line_number":46,"context_line":"                         request.environ[\u0027wsgi.url_scheme\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FYAs%3D","line":44,"in_reply_to":"AAAAUH%2F%2FZzw%3D","updated":"2014-01-14 14:36:43.000000000","message":"Done","commit_id":"54110b38438023959f48ba4f08bb3a3e6d3f5486"}]}
