)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"31ebca799128e59911b59bf4b3a89222a6e3d9d3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kuo-tung Kao \u003cjelly.k@inwinstack.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-21 09:41:29 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow admin to download deactive image"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Based on specs, the glance should allow"},{"line_number":10,"context_line":"admin to download deactive images."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a29b11f_4beba678","line":7,"updated":"2015-10-21 03:33:00.000000000","message":"deactivated","commit_id":"3c2fba588c87f9f481cf098535db524596a9aa07"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"31ebca799128e59911b59bf4b3a89222a6e3d9d3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow admin to download deactive image"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Based on specs, the glance should allow"},{"line_number":10,"context_line":"admin to download deactive images."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"http://specs.openstack.org/openstack/"},{"line_number":13,"context_line":"glance-specs/specs/kilo/deactivate-image.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a29b11f_eb04f24a","line":10,"updated":"2015-10-21 03:33:00.000000000","message":"same","commit_id":"3c2fba588c87f9f481cf098535db524596a9aa07"}],"glance/api/v1/controller.py":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"11076c3279d322b9f8322b171017d8416c8fc751","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        image \u003d self.get_image_meta_or_404(request, image_id)"},{"line_number":61,"context_line":"        if image[\u0027status\u0027] \u003d\u003d \u0027deactivated\u0027 and not request.context.is_admin:"},{"line_number":62,"context_line":"            msg \u003d \"Image %s is deactivated\" % image_id"},{"line_number":63,"context_line":"            LOG.debug(msg)"},{"line_number":64,"context_line":"            msg \u003d _(\"Image %s is deactivated\") % image_id"},{"line_number":65,"context_line":"            raise webob.exc.HTTPForbidden("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_e11eed5d","line":62,"updated":"2015-10-23 02:29:58.000000000","message":"the message should be changed as well IMO.","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"02240eaa530fc28e272c2ff18adfc02444711388","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        image \u003d self.get_image_meta_or_404(request, image_id)"},{"line_number":61,"context_line":"        if image[\u0027status\u0027] \u003d\u003d \u0027deactivated\u0027 and not request.context.is_admin:"},{"line_number":62,"context_line":"            msg \u003d \"Image %s is deactivated\" % image_id"},{"line_number":63,"context_line":"            LOG.debug(msg)"},{"line_number":64,"context_line":"            msg \u003d _(\"Image %s is deactivated\") % image_id"},{"line_number":65,"context_line":"            raise webob.exc.HTTPForbidden("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_e10d8de8","line":62,"in_reply_to":"3a29b11f_2185c558","updated":"2015-10-23 02:46:50.000000000","message":"Such as:\n\"Image %s is deactivated. Non-administrator user is unable to download the data.\" % image_id.\n\nI think it\u0027ll be more clear.","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"508033f5a77b092024fcb75d4f0214758d7db8bf","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        image \u003d self.get_image_meta_or_404(request, image_id)"},{"line_number":61,"context_line":"        if image[\u0027status\u0027] \u003d\u003d \u0027deactivated\u0027 and not request.context.is_admin:"},{"line_number":62,"context_line":"            msg \u003d \"Image %s is deactivated\" % image_id"},{"line_number":63,"context_line":"            LOG.debug(msg)"},{"line_number":64,"context_line":"            msg \u003d _(\"Image %s is deactivated\") % image_id"},{"line_number":65,"context_line":"            raise webob.exc.HTTPForbidden("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_2185c558","line":62,"in_reply_to":"3a29b11f_e11eed5d","updated":"2015-10-23 02:37:24.000000000","message":"Well,  I think the message is enough. What\u0027s your suggestion?","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"02240eaa530fc28e272c2ff18adfc02444711388","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            raise webob.exc.HTTPForbidden("},{"line_number":66,"context_line":"                msg, request\u003drequest, content_type\u003d\u0027type/plain\u0027)"},{"line_number":67,"context_line":"        if image[\u0027status\u0027] not in [\u0027active\u0027, \u0027deactivated\u0027]:"},{"line_number":68,"context_line":"            msg \u003d \"Image %s is not active\" % image_id"},{"line_number":69,"context_line":"            LOG.debug(msg)"},{"line_number":70,"context_line":"            msg \u003d _(\"Image %s is not active\") % image_id"},{"line_number":71,"context_line":"            raise webob.exc.HTTPNotFound("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_6102ddb5","line":68,"updated":"2015-10-23 02:46:50.000000000","message":"\"Image %s is not active or deactivated\" % image_id","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"11076c3279d322b9f8322b171017d8416c8fc751","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if image[\u0027status\u0027] not in [\u0027active\u0027, \u0027deactivated\u0027]:"},{"line_number":68,"context_line":"            msg \u003d \"Image %s is not active\" % image_id"},{"line_number":69,"context_line":"            LOG.debug(msg)"},{"line_number":70,"context_line":"            msg \u003d _(\"Image %s is not active\") % image_id"},{"line_number":71,"context_line":"            raise webob.exc.HTTPNotFound("},{"line_number":72,"context_line":"                msg, request\u003drequest, content_type\u003d\u0027text/plain\u0027)"},{"line_number":73,"context_line":"        return image"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_86006f03","line":70,"updated":"2015-10-23 02:29:58.000000000","message":"dito","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"508033f5a77b092024fcb75d4f0214758d7db8bf","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if image[\u0027status\u0027] not in [\u0027active\u0027, \u0027deactivated\u0027]:"},{"line_number":68,"context_line":"            msg \u003d \"Image %s is not active\" % image_id"},{"line_number":69,"context_line":"            LOG.debug(msg)"},{"line_number":70,"context_line":"            msg \u003d _(\"Image %s is not active\") % image_id"},{"line_number":71,"context_line":"            raise webob.exc.HTTPNotFound("},{"line_number":72,"context_line":"                msg, request\u003drequest, content_type\u003d\u0027text/plain\u0027)"},{"line_number":73,"context_line":"        return image"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_81b3794c","line":70,"in_reply_to":"3a29b11f_41532117","updated":"2015-10-23 02:37:24.000000000","message":"ditto","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"2aa2e564cb9abb58127b8863bf0b1b7f8efc56b3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if image[\u0027status\u0027] not in [\u0027active\u0027, \u0027deactivated\u0027]:"},{"line_number":68,"context_line":"            msg \u003d \"Image %s is not active\" % image_id"},{"line_number":69,"context_line":"            LOG.debug(msg)"},{"line_number":70,"context_line":"            msg \u003d _(\"Image %s is not active\") % image_id"},{"line_number":71,"context_line":"            raise webob.exc.HTTPNotFound("},{"line_number":72,"context_line":"                msg, request\u003drequest, content_type\u003d\u0027text/plain\u0027)"},{"line_number":73,"context_line":"        return image"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_41532117","line":70,"in_reply_to":"3a29b11f_86006f03","updated":"2015-10-23 02:31:04.000000000","message":"s/dito/ditto","commit_id":"adfd881089d3e27a6206ae761d1a42e93298efac"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"8abac6fc8f006b658e796fa40da269c962da810b","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_valid_image_meta_or_error(self, request, image_id):"},{"line_number":56,"context_line":"        \"\"\""},{"line_number":57,"context_line":"        Same as get_image_meta_or_404 except that it will raise a 403 if the"},{"line_number":58,"context_line":"        image is deactivated or 404 if the image is otherwise not \u0027active\u0027."},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        image \u003d self.get_image_meta_or_404(request, image_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a29b11f_5c9226f7","line":57,"updated":"2015-10-23 04:33:26.000000000","message":"\u0027raise a 403 for non-admin user if the ...\u0027","commit_id":"f113db586e5930c8dc9ac93354db538d29eada59"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"8abac6fc8f006b658e796fa40da269c962da810b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        image \u003d self.get_image_meta_or_404(request, image_id)"},{"line_number":61,"context_line":"        if image[\u0027status\u0027] \u003d\u003d \u0027deactivated\u0027 and not request.context.is_admin:"},{"line_number":62,"context_line":"            msg \u003d (\"Image %s is deactivated. Non-administrator user \""},{"line_number":63,"context_line":"                   \"is unable to download the data.\") % image_id"},{"line_number":64,"context_line":"            LOG.debug(msg)"},{"line_number":65,"context_line":"            msg \u003d _(\"Image %s is deactivated. Non-administrator user \""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a29b11f_7ca4c249","line":62,"updated":"2015-10-23 04:33:26.000000000","message":"Why don\u0027t we just use the same message that\u0027s in v2.\n\"The requested image has been deactivated. Image data download is forbidden for non-admin users\"","commit_id":"f113db586e5930c8dc9ac93354db538d29eada59"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"8abac6fc8f006b658e796fa40da269c962da810b","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                   \"is unable to download the data.\") % image_id"},{"line_number":64,"context_line":"            LOG.debug(msg)"},{"line_number":65,"context_line":"            msg \u003d _(\"Image %s is deactivated. Non-administrator user \""},{"line_number":66,"context_line":"                    \"is unable to download the data.\") % image_id"},{"line_number":67,"context_line":"            raise webob.exc.HTTPForbidden("},{"line_number":68,"context_line":"                msg, request\u003drequest, content_type\u003d\u0027type/plain\u0027)"},{"line_number":69,"context_line":"        if image[\u0027status\u0027] not in [\u0027active\u0027, \u0027deactivated\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a29b11f_1c66ee29","line":66,"updated":"2015-10-23 04:33:26.000000000","message":"Ditto","commit_id":"f113db586e5930c8dc9ac93354db538d29eada59"}],"glance/api/v1/images.py":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"07b578712a15d8ac388e01a121374880da1c6a9d","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                    msg \u003d \"Image %s is not active or deactivated\" % id"},{"line_number":503,"context_line":"                    LOG.debug(msg)"},{"line_number":504,"context_line":"                    msg \u003d _(\"Image %s is not active or deactivated\") % id"},{"line_number":505,"context_line":"                    raise HTTPNotFound("},{"line_number":506,"context_line":"                        msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_3671ad0f","line":505,"updated":"2015-10-22 09:32:00.000000000","message":"Should raise 403 HTTPForbidden.","commit_id":"6a3af889fc539d8dafa58a4b3adbc5821b7710d4"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8fdecb27d69f1084b3cfba32ec34d42f85290a54","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                    raise HTTPNotFound("},{"line_number":506,"context_line":"                        msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"            else:"},{"line_number":509,"context_line":"                image_meta \u003d self.get_active_image_meta_or_error(req, id)"},{"line_number":510,"context_line":"        except HTTPNotFound:"},{"line_number":511,"context_line":"            # provision for backward-compatibility breaking issue"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_3699ad7c","line":508,"updated":"2015-10-22 09:28:56.000000000","message":"why not add admin check at https://github.com/openstack/glance/blob/master/glance/api/v1/controller.py#L61\nlike v2 does: \nif image[\u0027status\u0027] \u003d\u003d \u0027deactivated\u0027 and not req.context.is_admin:\nand do some change in get_active_image_meta_or_error?\nit\u0027s more simple IMO.","commit_id":"6a3af889fc539d8dafa58a4b3adbc5821b7710d4"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"42f99aecfc3e1bf29fbb70f42eb13aae6dde698d","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                    raise HTTPNotFound("},{"line_number":506,"context_line":"                        msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"            else:"},{"line_number":509,"context_line":"                image_meta \u003d self.get_active_image_meta_or_error(req, id)"},{"line_number":510,"context_line":"        except HTTPNotFound:"},{"line_number":511,"context_line":"            # provision for backward-compatibility breaking issue"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_f25c964c","line":508,"in_reply_to":"3a29b11f_3699ad7c","updated":"2015-10-22 13:49:49.000000000","message":"+1\nWas about to suggest the same.","commit_id":"6a3af889fc539d8dafa58a4b3adbc5821b7710d4"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"cd02d16c2b73ee82ee827d918a51d430f804ec04","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                    raise HTTPNotFound("},{"line_number":506,"context_line":"                        msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"            else:"},{"line_number":509,"context_line":"                image_meta \u003d self.get_active_image_meta_or_error(req, id)"},{"line_number":510,"context_line":"        except HTTPNotFound:"},{"line_number":511,"context_line":"            # provision for backward-compatibility breaking issue"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_565d4945","line":508,"in_reply_to":"3a29b11f_3699ad7c","updated":"2015-10-22 09:39:04.000000000","message":"Nice suggestion. The function,\"get_active_image_meta_or_error\", is only used here. So we could change it without side effect.","commit_id":"6a3af889fc539d8dafa58a4b3adbc5821b7710d4"}],"glance/api/v2/image_data.py":[{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"8abac6fc8f006b658e796fa40da269c962da810b","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            image \u003d image_repo.get(image_id)"},{"line_number":198,"context_line":"            if image.status \u003d\u003d \u0027deactivated\u0027 and not req.context.is_admin:"},{"line_number":199,"context_line":"                msg \u003d _(\u0027The requested image has been deactivated. \u0027"},{"line_number":200,"context_line":"                        \u0027Image data download is forbidden.\u0027)"},{"line_number":201,"context_line":"                raise exception.Forbidden(message\u003dmsg)"},{"line_number":202,"context_line":"            if not image.locations:"},{"line_number":203,"context_line":"                raise exception.ImageDataNotFound()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a29b11f_9c8c3edb","line":200,"updated":"2015-10-23 04:33:26.000000000","message":"\u0027is forbidden for non-admin users\"\nJust like you mentioned it explicitly in v1.","commit_id":"f113db586e5930c8dc9ac93354db538d29eada59"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"13578edc94f682bd6e8a86920247d43e983e6af9","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                msg \u003d _(\u0027The requested image, %s, has been deactivated. \u0027"},{"line_number":200,"context_line":"                        \u0027Image data download is forbidden \u0027"},{"line_number":201,"context_line":"                        \u0027for non-admin users.\u0027) % image_id"},{"line_number":202,"context_line":"                raise exception.Forbidden(message\u003dmsg)"},{"line_number":203,"context_line":"            if not image.locations:"},{"line_number":204,"context_line":"                raise exception.ImageDataNotFound()"},{"line_number":205,"context_line":"        except exception.ImageDataNotFound as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_58230456","line":202,"updated":"2015-10-23 12:32:22.000000000","message":"Can\u0027t we raise HTTPForbidden here?","commit_id":"186a816bf024556c176bccd8236e46d48b3c471d"}],"glance/tests/functional/test_cache_middleware.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"dede2ec79d157a9a1eeb230c477b472e80e98be9","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        response, content \u003d http.request(path, \u0027GET\u0027)"},{"line_number":387,"context_line":"        self.assertEqual(403, response.status)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        # Download the image with v2. Ensure it is forbidden"},{"line_number":390,"context_line":"        path \u003d \"http://%s:%d/v2/images/%s/file\" % (\"127.0.0.1\", self.api_port,"},{"line_number":391,"context_line":"                                                   image_id)"},{"line_number":392,"context_line":"        http \u003d httplib2.Http()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_fd2d918f","line":389,"updated":"2015-09-11 09:09:57.000000000","message":"IMO this comment need to be changed","commit_id":"41bb5a86a37ce275717a2a9e50e0cb8c2efe425a"}]}
