)]}'
{"barbican/model/models.py":[{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            ret[\u0027error_reason\u0027] \u003d self.error_reason"},{"line_number":462,"context_line":"        return ret"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def __init__(self, parsed_request\u003dNone):"},{"line_number":465,"context_line":"            \"\"\"Creates a Order entity from a dict.\"\"\""},{"line_number":466,"context_line":"            super(Order, self).__init__()"},{"line_number":467,"context_line":"            if parsed_request:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_869456e8","line":464,"updated":"2014-08-06 19:31:19.000000000","message":"Please move this __init__ method to above the _do_extra_dict_fields() method.","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            ret[\u0027error_reason\u0027] \u003d self.error_reason"},{"line_number":462,"context_line":"        return ret"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def __init__(self, parsed_request\u003dNone):"},{"line_number":465,"context_line":"            \"\"\"Creates a Order entity from a dict.\"\"\""},{"line_number":466,"context_line":"            super(Order, self).__init__()"},{"line_number":467,"context_line":"            if parsed_request:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ef35e5dc","line":464,"in_reply_to":"baada198_869456e8","updated":"2014-08-06 20:11:09.000000000","message":"Sure","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":482,"context_line":"    __tablename__ \u003d \u0027containers\u0027"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":485,"context_line":"    type \u003d sa.Column(sa.Enum(\u0027generic\u0027, \u0027rsa\u0027, \u0027dsa\u0027, \u0027certificate\u0027,"},{"line_number":486,"context_line":"                             name\u003d\u0027container_types\u0027))"},{"line_number":487,"context_line":"    tenant_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027tenants.id\u0027),"},{"line_number":488,"context_line":"                          nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_66b82279","line":485,"updated":"2014-08-06 19:31:19.000000000","message":"I can\u0027t recall, had we discussed adding a dsa type before, maybe at Atlanta?","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"c71cd43ee26323eb9bc03c2136db481c10136a63","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class ContainerSecret(BASE, ModelBase):"},{"line_number":192,"context_line":"    \"\"\"Represents an association between a Container and a Secret.\"\"\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    __tablename__ \u003d \u0027container_secret\u0027"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0523bcaa","line":192,"updated":"2014-08-07 15:30:06.000000000","message":"At first glace, ContainerSecret made no sense to me when I saw it used in the code.  It thought that it referred to a Container (and should have been named SecretContainer instead).  But this is an association ...\n\nMaybe a name like ContainerSecretMapping ? or ContainerSecretAssociation  instead?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class ContainerSecret(BASE, ModelBase):"},{"line_number":192,"context_line":"    \"\"\"Represents an association between a Container and a Secret.\"\"\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    __tablename__ \u003d \u0027container_secret\u0027"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6b6e09ca","line":192,"in_reply_to":"baada198_0523bcaa","updated":"2014-08-07 15:44:44.000000000","message":"This model is not part of this CR. I agree with you but can we take it in separate CR?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"1eb7350db025b9e3e357ba2ce3eba816b7fe8ed1","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class ContainerSecret(BASE, ModelBase):"},{"line_number":192,"context_line":"    \"\"\"Represents an association between a Container and a Secret.\"\"\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    __tablename__ \u003d \u0027container_secret\u0027"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a4df12d6","line":192,"in_reply_to":"baada198_6b6e09ca","updated":"2014-08-11 16:42:38.000000000","message":"Ade, Arvind noticed that this entity didn\u0027t extend ModelBase and added that here. Changing the name of the entity would be better for another CR though.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"004a0ba5b98feaebfacee695f4b48e781ac7e0eb","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class ContainerSecret(BASE, ModelBase):"},{"line_number":192,"context_line":"    \"\"\"Represents an association between a Container and a Secret.\"\"\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    __tablename__ \u003d \u0027container_secret\u0027"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8751020f","line":192,"in_reply_to":"baada198_a4df12d6","updated":"2014-08-12 13:21:35.000000000","message":"I\u0027m OK with moving this to a different CR.  Do we need a bug to track this?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e8f3d912eb9ff744e21a8ba4bc0eeefa7d69cf7a","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        backref\u003d\"order\","},{"line_number":463,"context_line":"        cascade\u003d\"all, delete-orphan\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def __init__(self, parsed_request\u003dNone):"},{"line_number":466,"context_line":"            \"\"\"Creates a Order entity from a dict.\"\"\""},{"line_number":467,"context_line":"            super(Order, self).__init__()"},{"line_number":468,"context_line":"            if parsed_request:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_f8a840dd","line":465,"updated":"2014-08-26 16:57:04.000000000","message":"I would rather see parsed_request broken out into two separate parameters, one for type and one for meta. IMO it makes it easier to read the code.\n\nThoughts?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"b3bdadb519b09394e0b9bd292c5d38e2eb432f8c","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        backref\u003d\"order\","},{"line_number":463,"context_line":"        cascade\u003d\"all, delete-orphan\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def __init__(self, parsed_request\u003dNone):"},{"line_number":466,"context_line":"            \"\"\"Creates a Order entity from a dict.\"\"\""},{"line_number":467,"context_line":"            super(Order, self).__init__()"},{"line_number":468,"context_line":"            if parsed_request:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_491b9172","line":465,"in_reply_to":"1abeadc6_5eb26549","updated":"2014-08-29 17:47:52.000000000","message":"I\u0027m thinking that mod should be a different CR as well.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"7053b140b8c4e52614d934737fce05ea1d3920c2","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        backref\u003d\"order\","},{"line_number":463,"context_line":"        cascade\u003d\"all, delete-orphan\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def __init__(self, parsed_request\u003dNone):"},{"line_number":466,"context_line":"            \"\"\"Creates a Order entity from a dict.\"\"\""},{"line_number":467,"context_line":"            super(Order, self).__init__()"},{"line_number":468,"context_line":"            if parsed_request:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_5eb26549","line":465,"in_reply_to":"1abeadc6_f8a840dd","updated":"2014-08-29 17:26:23.000000000","message":"I don\u0027t mind changing it but since this the pattern followed for other model\u0027s init (please see for container). I am little hesitant to make this change in this CR, I think we can have separate CR for this improvement.\n\nThoughts?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"}],"barbican/model/repositories.py":[{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"c71cd43ee26323eb9bc03c2136db481c10136a63","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self._set_repo(\u0027container_repo\u0027, ContainerRepo, kwargs)"},{"line_number":269,"context_line":"            self._set_repo(\u0027container_secret_repo\u0027, ContainerSecretRepo,"},{"line_number":270,"context_line":"                           kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _set_repo(self, repo_name, repo_cls, specs):"},{"line_number":273,"context_line":"        if specs and repo_name in specs:"},{"line_number":274,"context_line":"            setattr(self, repo_name, specs[repo_name] or repo_cls())"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c547044b","line":271,"updated":"2014-08-07 15:30:06.000000000","message":"In line with my comment in models.py, maybe this would become container_secret_mapping_repo ?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"004a0ba5b98feaebfacee695f4b48e781ac7e0eb","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self._set_repo(\u0027container_repo\u0027, ContainerRepo, kwargs)"},{"line_number":269,"context_line":"            self._set_repo(\u0027container_secret_repo\u0027, ContainerSecretRepo,"},{"line_number":270,"context_line":"                           kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _set_repo(self, repo_name, repo_cls, specs):"},{"line_number":273,"context_line":"        if specs and repo_name in specs:"},{"line_number":274,"context_line":"            setattr(self, repo_name, specs[repo_name] or repo_cls())"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a76b66b6","line":271,"in_reply_to":"baada198_c476c6d4","updated":"2014-08-12 13:21:35.000000000","message":"agreed","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"1eb7350db025b9e3e357ba2ce3eba816b7fe8ed1","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self._set_repo(\u0027container_repo\u0027, ContainerRepo, kwargs)"},{"line_number":269,"context_line":"            self._set_repo(\u0027container_secret_repo\u0027, ContainerSecretRepo,"},{"line_number":270,"context_line":"                           kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _set_repo(self, repo_name, repo_cls, specs):"},{"line_number":273,"context_line":"        if specs and repo_name in specs:"},{"line_number":274,"context_line":"            setattr(self, repo_name, specs[repo_name] or repo_cls())"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c476c6d4","line":271,"in_reply_to":"baada198_c547044b","updated":"2014-08-11 16:42:38.000000000","message":"See comments in models.py...this would be good in another CR too I\u0027d think.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"c71cd43ee26323eb9bc03c2136db481c10136a63","unresolved":false,"context_lines":[{"line_number":865,"context_line":""},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"class ContainerSecretRepo(BaseRepo):"},{"line_number":868,"context_line":"        \"\"\"Repository for the ContainerSecret entity.\"\"\""},{"line_number":869,"context_line":"        def _do_entity_name(self):"},{"line_number":870,"context_line":"            \"\"\"Sub-class hook: return entity name, such as for debugging.\"\"\""},{"line_number":871,"context_line":"            return \"ContainerSecret\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e559682a","line":868,"updated":"2014-08-07 15:30:06.000000000","message":"Same comment as above ..","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"3f13437dfa2999d0be8d830dd20e092b1543e530","unresolved":false,"context_lines":[{"line_number":865,"context_line":""},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"class ContainerSecretRepo(BaseRepo):"},{"line_number":868,"context_line":"        \"\"\"Repository for the ContainerSecret entity.\"\"\""},{"line_number":869,"context_line":"        def _do_entity_name(self):"},{"line_number":870,"context_line":"            \"\"\"Sub-class hook: return entity name, such as for debugging.\"\"\""},{"line_number":871,"context_line":"            return \"ContainerSecret\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ab3513a9","line":868,"in_reply_to":"baada198_6ba52902","updated":"2014-08-11 19:01:26.000000000","message":"Same as previous comments.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"004a0ba5b98feaebfacee695f4b48e781ac7e0eb","unresolved":false,"context_lines":[{"line_number":865,"context_line":""},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"class ContainerSecretRepo(BaseRepo):"},{"line_number":868,"context_line":"        \"\"\"Repository for the ContainerSecret entity.\"\"\""},{"line_number":869,"context_line":"        def _do_entity_name(self):"},{"line_number":870,"context_line":"            \"\"\"Sub-class hook: return entity name, such as for debugging.\"\"\""},{"line_number":871,"context_line":"            return \"ContainerSecret\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_075c1219","line":868,"in_reply_to":"baada198_ab3513a9","updated":"2014-08-12 13:21:35.000000000","message":"agreed","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":865,"context_line":""},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"class ContainerSecretRepo(BaseRepo):"},{"line_number":868,"context_line":"        \"\"\"Repository for the ContainerSecret entity.\"\"\""},{"line_number":869,"context_line":"        def _do_entity_name(self):"},{"line_number":870,"context_line":"            \"\"\"Sub-class hook: return entity name, such as for debugging.\"\"\""},{"line_number":871,"context_line":"            return \"ContainerSecret\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6ba52902","line":868,"in_reply_to":"baada198_e559682a","updated":"2014-08-07 15:44:44.000000000","message":"I can change the name for this repo can we do this name change along with model change? As model is not part of this CR\n\nThoughts?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"}],"barbican/plugin/crypto/crypto.py":[{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"d40f5630766f2aa708a68727dac2891dd0e4e229","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    #TODO(atiwari): fix 1331815"},{"line_number":361,"context_line":"    @abc.abstractmethod"},{"line_number":362,"context_line":"    def supports(self, type_enum, algorithm\u003dNone, bit_length\u003dNone,"},{"line_number":363,"context_line":"                 mode\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1b1f1b71","line":360,"updated":"2014-08-04 19:26:48.000000000","message":"I think it would be better to propose a blueprint for the change you suggested instead of putting a comment.  If you leave this comment here, please at least specify \u0027fix bug 1331815\u0027 for clarification","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        \"\"\""},{"line_number":358,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    #TODO(atiwari): fix 1331815"},{"line_number":361,"context_line":"    @abc.abstractmethod"},{"line_number":362,"context_line":"    def supports(self, type_enum, algorithm\u003dNone, bit_length\u003dNone,"},{"line_number":363,"context_line":"                 mode\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_20a7150b","line":360,"in_reply_to":"baada198_1b1f1b71","updated":"2014-08-05 22:40:00.000000000","message":"Enhanced comment, IMO we use BP for feature improvements.","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"}],"barbican/plugin/crypto/simple_crypto.py":[{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        return private_dto, public_dto, passphrase_dto"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    #TODO(atiwari): fix bug 1331815"},{"line_number":153,"context_line":"    def supports(self, type_enum, algorithm\u003dNone, bit_length\u003dNone,"},{"line_number":154,"context_line":"                 mode\u003dNone):"},{"line_number":155,"context_line":"        if type_enum \u003d\u003d c.PluginSupportTypes.ENCRYPT_DECRYPT:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_eeb5adee","line":152,"updated":"2014-09-02 19:51:19.000000000","message":"to be ready for hacking update pls put a space between # and TODO","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"}],"barbican/plugin/interface/secret_store.py":[{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"c71cd43ee26323eb9bc03c2136db481c10136a63","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    \"\"\"static function to check if algorithm supported\"\"\""},{"line_number":183,"context_line":"    @classmethod"},{"line_number":184,"context_line":"    def supports(self, value):"},{"line_number":185,"context_line":"        return value in self.__dict__.itervalues()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class KeySpec(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_252c4049","line":185,"updated":"2014-08-07 15:30:06.000000000","message":"This seems a little too kludgy and too apt for breakage.  Basically, if anyone adds a non-algorithm constant in this class, it will then show up as a supported algorithm.\n\nKaitlyn Farr\u0027s patch has some code that  groups types of supported algorithms.  We should use that instead.\n\nAlso, I\u0027m not sure what this methods is for.  We already have store_supports(), generate_supports() etc.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"5f35bd27e7867adc8eaf5efcd974fe6e5bae2120","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    \"\"\"static function to check if algorithm supported\"\"\""},{"line_number":183,"context_line":"    @classmethod"},{"line_number":184,"context_line":"    def supports(self, value):"},{"line_number":185,"context_line":"        return value in self.__dict__.itervalues()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class KeySpec(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_83a60f0c","line":185,"in_reply_to":"baada198_0b7f4d6a","updated":"2014-08-13 21:32:31.000000000","message":"fixed as Kaitlyn Farr\u0027s change","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    \"\"\"static function to check if algorithm supported\"\"\""},{"line_number":183,"context_line":"    @classmethod"},{"line_number":184,"context_line":"    def supports(self, value):"},{"line_number":185,"context_line":"        return value in self.__dict__.itervalues()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class KeySpec(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0b7f4d6a","line":185,"in_reply_to":"baada198_252c4049","updated":"2014-08-07 15:44:44.000000000","message":"I will look and make appropriate change","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"3a616c53ced57ca0ef0d8944faeb0e3cdb4578af","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        :returns: a dictionary that contains metadata about the key"},{"line_number":320,"context_line":"        \"\"\""},{"line_number":321,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractmethod"},{"line_number":324,"context_line":"    def store_secret(self, secret_dto, context):"},{"line_number":325,"context_line":"        \"\"\"Stores a key."}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_4a1b181b","line":322,"updated":"2014-08-15 13:52:54.000000000","message":"This descirption needs to be updated to reflect the new tuple that is being returned.","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"661be38a9615fda0595f04cf5f9282f76f57fe11","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        :returns: a dictionary that contains metadata about the key"},{"line_number":320,"context_line":"        \"\"\""},{"line_number":321,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractmethod"},{"line_number":324,"context_line":"    def store_secret(self, secret_dto, context):"},{"line_number":325,"context_line":"        \"\"\"Stores a key."}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_ff578a24","line":322,"in_reply_to":"7ac7a964_4a1b181b","updated":"2014-08-18 02:06:22.000000000","message":"Now that we\u0027ve implemented this using a tuple, I think I\u0027ve changed my mind about how this should be done.\n\nI now favor a DTO object -- something like\n\nAsymmetricKeyMetadataDTO  with fields:\nprivate_key_meta, public_key_meta, passphrase_meta\n\nThis gives us the specificity in the plugin contract that was missing before (and that the tuple provided).  But it is also more flexible and future-proof.\n\nIf we eventually decide to add another field to be returned, then existing plugins need not necessarily be modified.  This type of flexibility is why we chose to use DTO objects to begin with.","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b91ed89ae3169e67508a05174bd78d33be48dbd7","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        :returns: a dictionary that contains metadata about the key"},{"line_number":320,"context_line":"        \"\"\""},{"line_number":321,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @abc.abstractmethod"},{"line_number":324,"context_line":"    def store_secret(self, secret_dto, context):"},{"line_number":325,"context_line":"        \"\"\"Stores a key."}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_7367e925","line":322,"in_reply_to":"7ac7a964_4a1b181b","updated":"2014-08-18 18:26:07.000000000","message":"done, sorry I did not pay attention much on the doc strings.","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"4360c8e753c4796d16b538f8cab6f042faf49be7","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        elif alg.lower() in self.HMAC_ALGORITHMS:"},{"line_number":217,"context_line":"            return SecretType.HMAC"},{"line_number":218,"context_line":"        else:"},{"line_number":219,"context_line":"            return None"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class KeySpec(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d0cc3864","line":219,"updated":"2014-08-19 13:52:42.000000000","message":"I\u0027m ok with making this check case insensitive, but the question still remains  -- why were the unit tests passing before when the test was not case insensitive?\n\nDoes that mean that the relevant unit tests need to be improved?","commit_id":"0b7a9c1042b13b740c2f9149f9961124f0c3d4b5"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"9ddb1fc256f2d2daedd85a3763f79a3925091004","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        elif alg.lower() in self.HMAC_ALGORITHMS:"},{"line_number":217,"context_line":"            return SecretType.HMAC"},{"line_number":218,"context_line":"        else:"},{"line_number":219,"context_line":"            return None"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class KeySpec(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_e546cb20","line":219,"in_reply_to":"1abeadc6_d0cc3864","updated":"2014-08-19 17:19:09.000000000","message":"valid concern let me see","commit_id":"0b7a9c1042b13b740c2f9149f9961124f0c3d4b5"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"41c318a3008766d7ddd4602b19e05e2511522103","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        elif alg.lower() in self.HMAC_ALGORITHMS:"},{"line_number":217,"context_line":"            return SecretType.HMAC"},{"line_number":218,"context_line":"        else:"},{"line_number":219,"context_line":"            return None"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class KeySpec(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_dfba7709","line":219,"in_reply_to":"1abeadc6_e546cb20","updated":"2014-08-19 18:32:01.000000000","message":"Actually my test name was not starting with \"test_\" that is why that rest was not triggered.\nI am fixing it.","commit_id":"0b7a9c1042b13b740c2f9149f9961124f0c3d4b5"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"4360c8e753c4796d16b538f8cab6f042faf49be7","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        key pairs"},{"line_number":335,"context_line":"        \"\"\""},{"line_number":336,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    @abc.abstractmethod"},{"line_number":339,"context_line":"    def store_secret(self, secret_dto, context):"},{"line_number":340,"context_line":"        \"\"\"Stores a key."}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_70de0441","line":337,"updated":"2014-08-19 13:52:42.000000000","message":"Just to be clear, I think that a tuple of dicts is too rigid, but a dict of dicts is not specific enough.\n\nI think you need to define a ASymmetricKeyMetaDTO class in this file.  This class should contain three named dicts for the private_key_meta, public_key_meta and passphrase_key_meta, and this is what this method should return.","commit_id":"0b7a9c1042b13b740c2f9149f9961124f0c3d4b5"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"1b492b3830d905201c7c5977735d71a7dc8a63e8","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        \"\"\"Generate a new asymmetric key pairs and store it."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        Generates new asymmetric key pairs and stores it in the secret"},{"line_number":343,"context_line":"        store. Object of type AsymmetricKeyMetadataDTO will be returned"},{"line_number":344,"context_line":"        containing attributes of metadata for newly created key pairs."},{"line_number":345,"context_line":"        The metadata is stored by Barbican and passed into other methods"},{"line_number":346,"context_line":"        to aid the plugins. This can be useful for plugins that generate"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_a77a7223","line":343,"updated":"2014-08-25 02:32:38.000000000","message":"An object of type ..","commit_id":"401ce0a74d4cc88a28b61f68e4af6f883c9fc4f7"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"6c85c277f10008cdcb9b7ff62789ac1f00c99463","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        \"\"\"Generate a new asymmetric key pairs and store it."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        Generates new asymmetric key pairs and stores it in the secret"},{"line_number":343,"context_line":"        store. Object of type AsymmetricKeyMetadataDTO will be returned"},{"line_number":344,"context_line":"        containing attributes of metadata for newly created key pairs."},{"line_number":345,"context_line":"        The metadata is stored by Barbican and passed into other methods"},{"line_number":346,"context_line":"        to aid the plugins. This can be useful for plugins that generate"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_f1397142","line":343,"in_reply_to":"1abeadc6_a77a7223","updated":"2014-08-25 15:35:50.000000000","message":"sure","commit_id":"401ce0a74d4cc88a28b61f68e4af6f883c9fc4f7"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"1b492b3830d905201c7c5977735d71a7dc8a63e8","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        generate"},{"line_number":352,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":353,"context_line":"        :returns: a tuple of dictionaries that contains metadata about the"},{"line_number":354,"context_line":"        key pairs"},{"line_number":355,"context_line":"        \"\"\""},{"line_number":356,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_c7776e3a","line":354,"updated":"2014-08-25 02:32:38.000000000","message":"Please update this comment.  No longer a tuple of dictionaries.","commit_id":"401ce0a74d4cc88a28b61f68e4af6f883c9fc4f7"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"6c85c277f10008cdcb9b7ff62789ac1f00c99463","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        generate"},{"line_number":352,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":353,"context_line":"        :returns: a tuple of dictionaries that contains metadata about the"},{"line_number":354,"context_line":"        key pairs"},{"line_number":355,"context_line":"        \"\"\""},{"line_number":356,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_912afde5","line":354,"in_reply_to":"1abeadc6_c7776e3a","updated":"2014-08-25 15:35:50.000000000","message":"Sorry for that","commit_id":"401ce0a74d4cc88a28b61f68e4af6f883c9fc4f7"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"424189c0a3c32259aefd8d8f5b3de08f8d2aabd0","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                       HMACSHA512]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def get_secret_type(self, alg):"},{"line_number":212,"context_line":"        if str(alg).lower() in self.SYMMETRIC_ALGORITHMS:"},{"line_number":213,"context_line":"            return SecretType.SYMMETRIC"},{"line_number":214,"context_line":"        elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":215,"context_line":"            return SecretType.ASYMMETRIC"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_bd0423c7","line":212,"updated":"2014-08-25 18:40:24.000000000","message":"Well, either all \u0027alg.\u0027 entries in this method should have str() added to them, or else just add an if not alg: return None at the top of this method and don\u0027t worry about the str().","commit_id":"0dbe869fd0355f635215e38c1a01c16c8b84b3e2"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"4922f74d0278a55b4d78a0ebb4b8c43bde7f50b3","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                       HMACSHA512]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def get_secret_type(self, alg):"},{"line_number":212,"context_line":"        if str(alg).lower() in self.SYMMETRIC_ALGORITHMS:"},{"line_number":213,"context_line":"            return SecretType.SYMMETRIC"},{"line_number":214,"context_line":"        elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":215,"context_line":"            return SecretType.ASYMMETRIC"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_d12aa8e6","line":212,"in_reply_to":"1abeadc6_bd0423c7","updated":"2014-08-25 20:54:48.000000000","message":"You are correct, sorry I missed it","commit_id":"0dbe869fd0355f635215e38c1a01c16c8b84b3e2"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e8f3d912eb9ff744e21a8ba4bc0eeefa7d69cf7a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":161,"context_line":"    retrieve a asymmetric key."},{"line_number":162,"context_line":"    \"\"\""},{"line_number":163,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":164,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":165,"context_line":"    public key."},{"line_number":166,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_180c1c42","line":163,"updated":"2014-08-26 16:57:04.000000000","message":"I don\u0027t think this type should be defined. Where is this used?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"8906e27003219350c0ee394a003ee82f848d3ecc","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":161,"context_line":"    retrieve a asymmetric key."},{"line_number":162,"context_line":"    \"\"\""},{"line_number":163,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":164,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":165,"context_line":"    public key."},{"line_number":166,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_9c1f3709","line":163,"in_reply_to":"1abeadc6_180c1c42","updated":"2014-08-26 21:52:49.000000000","message":"The type is set in resources.py and is set on a SecretDTO before store secret is called on a SecretStore. The type needs to be one of public or private.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"443e5db295b9770c9b11da759bc676f5344382f2","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":161,"context_line":"    retrieve a asymmetric key."},{"line_number":162,"context_line":"    \"\"\""},{"line_number":163,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":164,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":165,"context_line":"    public key."},{"line_number":166,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_16c86373","line":163,"in_reply_to":"1abeadc6_9c1f3709","updated":"2014-08-26 21:56:34.000000000","message":"Agreed - I was wondering the same thing -- where is asymmetric used?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e8f3d912eb9ff744e21a8ba4bc0eeefa7d69cf7a","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    PRIVATE \u003d \"private\""},{"line_number":172,"context_line":"    \"\"\"Constant to define the HMAC key type."},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    HMAC \u003d \"hmac\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class KeyAlgorithm(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_d357e700","line":174,"updated":"2014-08-26 16:57:04.000000000","message":"Would this not be a symmetric key?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"b3bdadb519b09394e0b9bd292c5d38e2eb432f8c","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    PRIVATE \u003d \"private\""},{"line_number":172,"context_line":"    \"\"\"Constant to define the HMAC key type."},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    HMAC \u003d \"hmac\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class KeyAlgorithm(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_5effc501","line":174,"in_reply_to":"1abeadc6_13902342","updated":"2014-08-29 17:47:52.000000000","message":"I\u0027d like Paul to weigh in here as well if possible.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"7053b140b8c4e52614d934737fce05ea1d3920c2","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    PRIVATE \u003d \"private\""},{"line_number":172,"context_line":"    \"\"\"Constant to define the HMAC key type."},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    HMAC \u003d \"hmac\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class KeyAlgorithm(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_13902342","line":174,"in_reply_to":"1abeadc6_368b9f69","updated":"2014-08-29 17:26:23.000000000","message":"We are not storing the type with secret, that means all the above constants are hanging there for nothing. SecretDTO has field type but that is not in real use.\n\nIn that case we can remove all from here, thoughts?\n\nstore_crypto.generate_supports response uses these constants, I think we are going to store_crypto.generate_supports method before making the actual call for generate. Please see Ref1 and Ref2 in https://review.openstack.org/#/c/111412/15/barbican/plugin/resources.py. If my understanding is correct? Thoughts?\n\nhmac keys are not used for encryption/decryption but they are used to generate HmacSha digest, so this different than symmetric encryption keys. We want to have it on secret (later) so that we can define our searched on the same.\nThoughts?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"8906e27003219350c0ee394a003ee82f848d3ecc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    PRIVATE \u003d \"private\""},{"line_number":172,"context_line":"    \"\"\"Constant to define the HMAC key type."},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    HMAC \u003d \"hmac\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class KeyAlgorithm(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_368b9f69","line":174,"in_reply_to":"1abeadc6_d357e700","updated":"2014-08-26 21:52:49.000000000","message":"Let\u0027s get rid of this type and use symmetric key instead.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"8906e27003219350c0ee394a003ee82f848d3ecc","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        if alg and isinstance(alg, six.string_types):"},{"line_number":213,"context_line":"            if alg.lower() in self.SYMMETRIC_ALGORITHMS:"},{"line_number":214,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":215,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":216,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":217,"context_line":"            elif alg.lower() in self.HMAC_ALGORITHMS:"},{"line_number":218,"context_line":"                return SecretType.HMAC"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_b6440f1c","line":215,"updated":"2014-08-26 21:52:49.000000000","message":"Remove this elif. See my comments on removing the asymmetric type.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"8906e27003219350c0ee394a003ee82f848d3ecc","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":215,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":216,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":217,"context_line":"            elif alg.lower() in self.HMAC_ALGORITHMS:"},{"line_number":218,"context_line":"                return SecretType.HMAC"},{"line_number":219,"context_line":"            else:"},{"line_number":220,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_766197a7","line":217,"updated":"2014-08-26 21:52:49.000000000","message":"Remove this elif as well. This will be incorporated into symmetric algorithms.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e8f3d912eb9ff744e21a8ba4bc0eeefa7d69cf7a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"class KeySpec(object):"},{"line_number":226,"context_line":"    \"\"\"This object specifies the algorithm and bit length for a key.\"\"\""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def __init__(self, alg\u003dNone, bit_length\u003dNone, mode\u003dNone, passphrase\u003dNone):"},{"line_number":229,"context_line":"        \"\"\"Creates a new KeySpec."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        :param alg:algorithm for the key"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_9863cc19","line":228,"updated":"2014-08-26 16:57:04.000000000","message":"Please add comment describing passphrase parameter.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e8f3d912eb9ff744e21a8ba4bc0eeefa7d69cf7a","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        :param key_spec: KeySpec that contains details on the type of key to"},{"line_number":354,"context_line":"        generate"},{"line_number":355,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":356,"context_line":"        :returns: An object of type AsymmetricKeyMetadataDTO containing"},{"line_number":357,"context_line":"        metadata about the key pairs."},{"line_number":358,"context_line":"        \"\"\""},{"line_number":359,"context_line":"        raise NotImplementedError  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_b8bfa85f","line":356,"updated":"2014-08-26 16:57:04.000000000","message":"The return should likely be just a dictionary of key value pairs. This is how generate works. This way any plugin can store whatever attributes they want. With the DTO object now all plugins can only store those attributes.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"8906e27003219350c0ee394a003ee82f848d3ecc","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        :param key_spec: KeySpec that contains details on the type of key to"},{"line_number":354,"context_line":"        generate"},{"line_number":355,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":356,"context_line":"        :returns: An object of type AsymmetricKeyMetadataDTO containing"},{"line_number":357,"context_line":"        metadata about the key pairs."},{"line_number":358,"context_line":"        \"\"\""},{"line_number":359,"context_line":"        raise NotImplementedError  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_bcf23399","line":356,"in_reply_to":"1abeadc6_b8bfa85f","updated":"2014-08-26 21:52:49.000000000","message":"Disregard. Now I get it.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"443e5db295b9770c9b11da759bc676f5344382f2","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        :param key_spec: KeySpec that contains details on the type of key to"},{"line_number":354,"context_line":"        generate"},{"line_number":355,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":356,"context_line":"        :returns: An object of type AsymmetricKeyMetadataDTO containing"},{"line_number":357,"context_line":"        metadata about the key pairs."},{"line_number":358,"context_line":"        \"\"\""},{"line_number":359,"context_line":"        raise NotImplementedError  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_b6e08ffb","line":356,"in_reply_to":"1abeadc6_b8bfa85f","updated":"2014-08-26 21:56:34.000000000","message":"Nathan, the DTO consists of three fields which are supposed to be supposed to be dicts(). In this way, it does mirror what generate() does, except that three dicts are returned instead of one - because up to three entities are being returned.\n\nI think some better documentation that each of the metadata in the docstring for AsymmetricKeyGenerationDTO to specify that each of the fields is in fact a dict would help.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"0cb2ba6c1a235a3a1c50aa9414d57467be67b2af","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    \"\"\"Constant to define the asymmetric key type. Used by getSecret to"},{"line_number":161,"context_line":"    retrieve a asymmetric key."},{"line_number":162,"context_line":"    \"\"\""},{"line_number":163,"context_line":"    ASYMMETRIC \u003d \"asymmetric\""},{"line_number":164,"context_line":"    \"\"\"Constant to define the public key type. Used by getSecret to retrieve a"},{"line_number":165,"context_line":"    public key."},{"line_number":166,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_5dd2625c","line":163,"updated":"2014-08-29 22:59:11.000000000","message":"This type should be removed. The type is used for the store operation. An asymmetric type does not make sense. The secret is either a public key or a private key.","commit_id":"a3a3b05dd75329184d6c0573f474d85cd7035f93"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"0cb2ba6c1a235a3a1c50aa9414d57467be67b2af","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    PRIVATE \u003d \"private\""},{"line_number":172,"context_line":"    \"\"\"Constant to define the HMAC key type."},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    HMAC \u003d \"hmac\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class KeyAlgorithm(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_ddc5928e","line":174,"updated":"2014-08-29 22:59:11.000000000","message":"This would fall under symmetric key. Please remove this type.","commit_id":"a3a3b05dd75329184d6c0573f474d85cd7035f93"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"0cb2ba6c1a235a3a1c50aa9414d57467be67b2af","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        if alg and isinstance(alg, six.string_types):"},{"line_number":213,"context_line":"            if alg.lower() in self.SYMMETRIC_ALGORITHMS:"},{"line_number":214,"context_line":"                return SecretType.SYMMETRIC"},{"line_number":215,"context_line":"            elif alg.lower() in self.ASYMMETRIC_ALGORITHMS:"},{"line_number":216,"context_line":"                return SecretType.ASYMMETRIC"},{"line_number":217,"context_line":"            elif alg.lower() in self.HMAC_ALGORITHMS:"},{"line_number":218,"context_line":"                return SecretType.HMAC"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_5d3982a2","line":215,"updated":"2014-08-29 22:59:11.000000000","message":"See comments on key types for asymmetric and hmac.","commit_id":"a3a3b05dd75329184d6c0573f474d85cd7035f93"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"0cb2ba6c1a235a3a1c50aa9414d57467be67b2af","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        :param alg:algorithm for the key"},{"line_number":232,"context_line":"        :param bit_length:bit length of the key"},{"line_number":233,"context_line":"        :param mode:algorithm mode for the key"},{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        self.alg \u003d alg"},{"line_number":236,"context_line":"        self.bit_length \u003d bit_length"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_dd4cb244","line":233,"updated":"2014-08-29 22:59:11.000000000","message":"Add a description for the passphrase argument.","commit_id":"a3a3b05dd75329184d6c0573f474d85cd7035f93"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"0cb2ba6c1a235a3a1c50aa9414d57467be67b2af","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    @abc.abstractmethod"},{"line_number":342,"context_line":"    def generate_asymmetric_key(self, key_spec, context):"},{"line_number":343,"context_line":"        \"\"\"Generate a new asymmetric key pairs and store it."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        Generates new asymmetric key pairs and stores it in the secret"},{"line_number":346,"context_line":"        store. An object of type AsymmetricKeyMetadataDTO will be returned"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_3d4e8638","line":343,"updated":"2014-08-29 22:59:11.000000000","message":"nit-pick, but should be key pair and stores it.","commit_id":"a3a3b05dd75329184d6c0573f474d85cd7035f93"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"8a4f672f3e595dd8cc512ea6209d28576921d91c","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    \"\"\"Constant for the HMACSHA512 algorithm.\"\"\""},{"line_number":199,"context_line":"    HMACSHA512 \u003d \"hmacsha512\""},{"line_number":200,"context_line":"    \"\"\"List of hmac algorithms\"\"\""},{"line_number":201,"context_line":"    HMAC_ALGORITHMS \u003d [HMACSHA1, HMACSHA256, HMACSHA348,"},{"line_number":202,"context_line":"                       HMACSHA512]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_secret_type(self, alg):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_dd9fc5b2","line":201,"updated":"2014-09-02 17:04:51.000000000","message":"These should be added to SYMMETRIC_ALGORITHMS","commit_id":"6c7be05db71ab8eb012b9d665282336ed4d44308"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b547d4b1f8653bcc7113a93db294e8608808800b","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    \"\"\"Constant for the HMACSHA512 algorithm.\"\"\""},{"line_number":199,"context_line":"    HMACSHA512 \u003d \"hmacsha512\""},{"line_number":200,"context_line":"    \"\"\"List of hmac algorithms\"\"\""},{"line_number":201,"context_line":"    HMAC_ALGORITHMS \u003d [HMACSHA1, HMACSHA256, HMACSHA348,"},{"line_number":202,"context_line":"                       HMACSHA512]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_secret_type(self, alg):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_5d3bd537","line":201,"in_reply_to":"fa98f980_dd9fc5b2","updated":"2014-09-02 17:18:24.000000000","message":"I will fix it","commit_id":"6c7be05db71ab8eb012b9d665282336ed4d44308"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"77b1c9fdba27a071c7290407ab7e443ac12a965b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    HMACSHA512 \u003d \"hmacsha512\""},{"line_number":200,"context_line":"    \"\"\"List of hmac algorithms\"\"\""},{"line_number":201,"context_line":"    ASYMMETRIC_ALGORITHMS \u003d ASYMMETRIC_ALGORITHMS + \\"},{"line_number":202,"context_line":"        [HMACSHA1, HMACSHA256, HMACSHA348, HMACSHA512]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_secret_type(self, alg):"},{"line_number":205,"context_line":"        if alg and isinstance(alg, six.string_types):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_c893814d","line":202,"updated":"2014-09-02 17:40:51.000000000","message":"This is confusing - why not just modify the definition above?\n\nJust move the HMAC stuff up.","commit_id":"e20f51462004a3ba669bb719b648b0707c19fc4f"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"cb17946ede79f338215357472f8e546ce26906c0","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    HMACSHA512 \u003d \"hmacsha512\""},{"line_number":200,"context_line":"    \"\"\"List of hmac algorithms\"\"\""},{"line_number":201,"context_line":"    ASYMMETRIC_ALGORITHMS \u003d ASYMMETRIC_ALGORITHMS + \\"},{"line_number":202,"context_line":"        [HMACSHA1, HMACSHA256, HMACSHA348, HMACSHA512]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_secret_type(self, alg):"},{"line_number":205,"context_line":"        if alg and isinstance(alg, six.string_types):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_c8cb811c","line":202,"in_reply_to":"fa98f980_c893814d","updated":"2014-09-02 17:50:42.000000000","message":"Sure,  let me fix it.","commit_id":"e20f51462004a3ba669bb719b648b0707c19fc4f"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e550fc5266e67e504842678f39a13e129ee10d00","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    \"\"\"List of asymmetric algorithms\"\"\""},{"line_number":189,"context_line":"    ASYMMETRIC_ALGORITHMS \u003d [DIFFIE_HELLMAN, DSA, RSA, EC,"},{"line_number":190,"context_line":"                             HMACSHA1, HMACSHA256, HMACSHA348,"},{"line_number":191,"context_line":"                             HMACSHA512]"},{"line_number":192,"context_line":"    \"\"\"Constant for the AES algorithm.\"\"\""},{"line_number":193,"context_line":"    AES \u003d \"aes\""},{"line_number":194,"context_line":"    \"\"\"Constant for the DES algorithm.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_af99dc20","line":191,"updated":"2014-09-02 21:18:54.000000000","message":"HMAC algorithms should be in SYMMETRIC_ALGORITHMS.","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    \"\"\"List of asymmetric algorithms\"\"\""},{"line_number":189,"context_line":"    ASYMMETRIC_ALGORITHMS \u003d [DIFFIE_HELLMAN, DSA, RSA, EC,"},{"line_number":190,"context_line":"                             HMACSHA1, HMACSHA256, HMACSHA348,"},{"line_number":191,"context_line":"                             HMACSHA512]"},{"line_number":192,"context_line":"    \"\"\"Constant for the AES algorithm.\"\"\""},{"line_number":193,"context_line":"    AES \u003d \"aes\""},{"line_number":194,"context_line":"    \"\"\"Constant for the DES algorithm.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_6291c6f0","line":191,"in_reply_to":"fa98f980_af99dc20","updated":"2014-09-02 23:20:13.000000000","message":"I am sorry, too much multi tasking causes this.","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":260,"context_line":"class AsymmetricKeyMetadataDTO(object):"},{"line_number":261,"context_line":"    \"\"\"This DTO encapsulates metadata(s) for asymmetric key"},{"line_number":262,"context_line":"    components. These components are private_key_meta,"},{"line_number":263,"context_line":"    public_key_meta and passphrese_meta."},{"line_number":264,"context_line":"    \"\"\""},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def __init__(self, private_key_meta\u003dNone,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_0eb031f3","line":263,"updated":"2014-09-02 19:51:19.000000000","message":"misspelled passphrase","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":260,"context_line":"class AsymmetricKeyMetadataDTO(object):"},{"line_number":261,"context_line":"    \"\"\"This DTO encapsulates metadata(s) for asymmetric key"},{"line_number":262,"context_line":"    components. These components are private_key_meta,"},{"line_number":263,"context_line":"    public_key_meta and passphrese_meta."},{"line_number":264,"context_line":"    \"\"\""},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def __init__(self, private_key_meta\u003dNone,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_e2b4d683","line":263,"in_reply_to":"fa98f980_0eb031f3","updated":"2014-09-02 23:20:13.000000000","message":"great catch, thanks","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    @abc.abstractmethod"},{"line_number":329,"context_line":"    def generate_asymmetric_key(self, key_spec, context):"},{"line_number":330,"context_line":"        \"\"\"Generate a new asymmetric key pairs and store it."},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        Generates new asymmetric key pairs and stores it in the secret"},{"line_number":333,"context_line":"        store. An object of type AsymmetricKeyMetadataDTO will be returned"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_ae89e527","line":330,"updated":"2014-09-02 19:51:19.000000000","message":"This just generates a single keypair, right?  If so then it should be singular \"pair\"","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    @abc.abstractmethod"},{"line_number":329,"context_line":"    def generate_asymmetric_key(self, key_spec, context):"},{"line_number":330,"context_line":"        \"\"\"Generate a new asymmetric key pairs and store it."},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        Generates new asymmetric key pairs and stores it in the secret"},{"line_number":333,"context_line":"        store. An object of type AsymmetricKeyMetadataDTO will be returned"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_e26bf6ee","line":330,"in_reply_to":"fa98f980_ae89e527","updated":"2014-09-02 23:20:13.000000000","message":"sure","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    def generate_asymmetric_key(self, key_spec, context):"},{"line_number":330,"context_line":"        \"\"\"Generate a new asymmetric key pairs and store it."},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        Generates new asymmetric key pairs and stores it in the secret"},{"line_number":333,"context_line":"        store. An object of type AsymmetricKeyMetadataDTO will be returned"},{"line_number":334,"context_line":"        containing attributes of metadata for newly created key pairs."},{"line_number":335,"context_line":"        The metadata is stored by Barbican and passed into other methods"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_ce8c6938","line":332,"updated":"2014-09-02 19:51:19.000000000","message":"singlular \"pair\"","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        generate"},{"line_number":342,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":343,"context_line":"        :returns: An object of type AsymmetricKeyMetadataDTO containing"},{"line_number":344,"context_line":"        metadata about the key pairs."},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_6ec53d3b","line":344,"updated":"2014-09-02 19:51:19.000000000","message":"singluar \"pair\"","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        generate"},{"line_number":342,"context_line":"        :param context: SecretStoreContext for secret"},{"line_number":343,"context_line":"        :returns: An object of type AsymmetricKeyMetadataDTO containing"},{"line_number":344,"context_line":"        metadata about the key pairs."},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        raise NotImplementedError  # pragma: no cover"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_827ceab6","line":344,"in_reply_to":"fa98f980_6ec53d3b","updated":"2014-09-02 23:20:13.000000000","message":"fixed all","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"}],"barbican/plugin/resources.py":[{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"d40f5630766f2aa708a68727dac2891dd0e4e229","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":159,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":160,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"},{"line_number":161,"context_line":"                                    passphrase\u003dspec.get(\u0027passphrase\u0027))"},{"line_number":162,"context_line":"    if not generate_plugin:"},{"line_number":163,"context_line":"        generate_plugin \u003d secret_store.SecretStorePluginManager()\\"},{"line_number":164,"context_line":"            .get_plugin_generate(key_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c93dda2d","line":161,"updated":"2014-08-04 19:26:48.000000000","message":"Is it possible for this to also have a \u0027mode\u0027?","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":159,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":160,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"},{"line_number":161,"context_line":"                                    passphrase\u003dspec.get(\u0027passphrase\u0027))"},{"line_number":162,"context_line":"    if not generate_plugin:"},{"line_number":163,"context_line":"        generate_plugin \u003d secret_store.SecretStorePluginManager()\\"},{"line_number":164,"context_line":"            .get_plugin_generate(key_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c0c57991","line":161,"in_reply_to":"baada198_c93dda2d","updated":"2014-08-05 22:40:00.000000000","message":"I think mode only makes sense for AES symmetric keys, that is why no mode here.","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":154,"context_line":"        into a secure backend."},{"line_number":155,"context_line":"    \"\"\""},{"line_number":156,"context_line":"    generate_plugin \u003d kwargs.get(\u0027generate_plugin\u0027)"},{"line_number":157,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":158,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":159,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_c95741c8","line":156,"updated":"2014-08-06 19:31:19.000000000","message":"I\u0027m curious why you would be passing in a generate_plugin to this method?","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":154,"context_line":"        into a secure backend."},{"line_number":155,"context_line":"    \"\"\""},{"line_number":156,"context_line":"    generate_plugin \u003d kwargs.get(\u0027generate_plugin\u0027)"},{"line_number":157,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":158,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":159,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_efbfa5fb","line":156,"in_reply_to":"baada198_c95741c8","updated":"2014-08-06 20:11:09.000000000","message":"I wanted to unit test this method (https://review.openstack.org/#/c/111412/2/barbican/tests/plugin/test_resource.py). We need \"generate_plugin\" to satisfy this unit line# 184, let me know if you think it is not correct way?","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                           repos\u003drepos)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    #TODO(john-wood-w) Replace with single \u0027generate_key()\u0027 call once"},{"line_number":183,"context_line":"    #  asymmetric and symmetric generation is combined."},{"line_number":184,"context_line":"    secret_metadata \u003d generate_plugin.\\"},{"line_number":185,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_74cc48bf","line":183,"updated":"2014-08-06 19:31:19.000000000","message":"I think keeping asymmetric and symmetric generation separate like you are doing here make sense actually, mainly due to the different return types (secret_model vs container_model. So this TODO can go away.","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                           repos\u003drepos)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    #TODO(john-wood-w) Replace with single \u0027generate_key()\u0027 call once"},{"line_number":183,"context_line":"    #  asymmetric and symmetric generation is combined."},{"line_number":184,"context_line":"    secret_metadata \u003d generate_plugin.\\"},{"line_number":185,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_2f519dd9","line":183,"in_reply_to":"baada198_74cc48bf","updated":"2014-08-06 20:11:09.000000000","message":"OK, I will remove","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    #TODO(john-wood-w) Replace with single \u0027generate_key()\u0027 call once"},{"line_number":183,"context_line":"    #  asymmetric and symmetric generation is combined."},{"line_number":184,"context_line":"    secret_metadata \u003d generate_plugin.\\"},{"line_number":185,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # Save secret and metadata."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_745a88f6","line":184,"updated":"2014-08-06 19:31:19.000000000","message":"It would be less confusing to call this container_metadata I think. Also, this DTO should have inside of it three secret_metadata dto types, for the public, private and optional passphrases. Those inner secret metadatas are what should be passed into lines #190, 196 and 203 below.","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    #TODO(john-wood-w) Replace with single \u0027generate_key()\u0027 call once"},{"line_number":183,"context_line":"    #  asymmetric and symmetric generation is combined."},{"line_number":184,"context_line":"    secret_metadata \u003d generate_plugin.\\"},{"line_number":185,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # Save secret and metadata."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_0f8cd938","line":184,"in_reply_to":"baada198_745a88f6","updated":"2014-08-06 20:11:09.000000000","message":"I have fixed the first part of this comment but did not get the second part.\nCan you please explain it ?","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                              generate_plugin,"},{"line_number":205,"context_line":"                              content_type, repos)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        # Now create container"},{"line_number":208,"context_line":"    container_model \u003d models.Container()"},{"line_number":209,"context_line":"    container_model.name \u003d spec.get(\u0027name\u0027)"},{"line_number":210,"context_line":"    container_model.type \u003d spec.get(\u0027algorithm\u0027).lower()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_945f1c74","line":207,"updated":"2014-08-06 19:31:19.000000000","message":"Please put the lines below into a _save_container(...) function.","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                              generate_plugin,"},{"line_number":205,"context_line":"                              content_type, repos)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        # Now create container"},{"line_number":208,"context_line":"    container_model \u003d models.Container()"},{"line_number":209,"context_line":"    container_model.name \u003d spec.get(\u0027name\u0027)"},{"line_number":210,"context_line":"    container_model.type \u003d spec.get(\u0027algorithm\u0027).lower()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8f9469e8","line":207,"in_reply_to":"baada198_945f1c74","updated":"2014-08-06 20:11:09.000000000","message":"done","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Now create container"},{"line_number":208,"context_line":"    container_model \u003d models.Container()"},{"line_number":209,"context_line":"    container_model.name \u003d spec.get(\u0027name\u0027)"},{"line_number":210,"context_line":"    container_model.type \u003d spec.get(\u0027algorithm\u0027).lower()"},{"line_number":211,"context_line":"    container_model.status \u003d models.States.ACTIVE"},{"line_number":212,"context_line":"    container_model.tenant_id \u003d tenant_model.id"},{"line_number":213,"context_line":"    repos.container_repo.create_from(container_model)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_747528ff","line":210,"updated":"2014-08-06 19:31:19.000000000","message":"I\u0027d feel better if this said spec.get(\u0027algorithm\u0027,\u0027\u0027).lower() even though specs is validated before this method (hopefully).","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Now create container"},{"line_number":208,"context_line":"    container_model \u003d models.Container()"},{"line_number":209,"context_line":"    container_model.name \u003d spec.get(\u0027name\u0027)"},{"line_number":210,"context_line":"    container_model.type \u003d spec.get(\u0027algorithm\u0027).lower()"},{"line_number":211,"context_line":"    container_model.status \u003d models.States.ACTIVE"},{"line_number":212,"context_line":"    container_model.tenant_id \u003d tenant_model.id"},{"line_number":213,"context_line":"    repos.container_repo.create_from(container_model)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8fb549d1","line":210,"in_reply_to":"baada198_747528ff","updated":"2014-08-06 20:11:09.000000000","message":"done","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":185,"context_line":"        into a secure backend."},{"line_number":186,"context_line":"    \"\"\""},{"line_number":187,"context_line":"    generate_plugin \u003d kwargs.get(\u0027generate_plugin\u0027)"},{"line_number":188,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":189,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":190,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d5c7c43b","line":187,"updated":"2014-08-07 04:10:58.000000000","message":"Instead of doing passing in the plugin for testing, perform patching, similar to line #46 of this example:\nhttps://review.openstack.org/#/c/107190/14/barbican/tests/tasks/test_certificate_resources.py,cm\nSo just mock the plugin manager, and then have the get plugin call return your mock plugin.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"c71cd43ee26323eb9bc03c2136db481c10136a63","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":185,"context_line":"        into a secure backend."},{"line_number":186,"context_line":"    \"\"\""},{"line_number":187,"context_line":"    generate_plugin \u003d kwargs.get(\u0027generate_plugin\u0027)"},{"line_number":188,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":189,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":190,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e5e888e1","line":187,"in_reply_to":"baada198_d5c7c43b","updated":"2014-08-07 15:30:06.000000000","message":"++","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"5f35bd27e7867adc8eaf5efcd974fe6e5bae2120","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":185,"context_line":"        into a secure backend."},{"line_number":186,"context_line":"    \"\"\""},{"line_number":187,"context_line":"    generate_plugin \u003d kwargs.get(\u0027generate_plugin\u0027)"},{"line_number":188,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":189,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":190,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_9a7b0929","line":187,"in_reply_to":"baada198_d5c7c43b","updated":"2014-08-13 21:32:31.000000000","message":"Thanks John for the great alternative.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":185,"context_line":"        into a secure backend."},{"line_number":186,"context_line":"    \"\"\""},{"line_number":187,"context_line":"    generate_plugin \u003d kwargs.get(\u0027generate_plugin\u0027)"},{"line_number":188,"context_line":"    # Locate a suitable plugin to store the secret."},{"line_number":189,"context_line":"    key_spec \u003d secret_store.KeySpec(alg\u003dspec.get(\u0027algorithm\u0027),"},{"line_number":190,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_4b794581","line":187,"in_reply_to":"baada198_e5e888e1","updated":"2014-08-07 15:44:44.000000000","message":"Sure","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    # Save secret and metadata."},{"line_number":217,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"},{"line_number":218,"context_line":"    _save_secret_metadata(private_secret_model,"},{"line_number":219,"context_line":"                          container_metadata,"},{"line_number":220,"context_line":"                          generate_plugin,"},{"line_number":221,"context_line":"                          content_type, repos)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_75fa7878","line":219,"updated":"2014-08-07 04:10:58.000000000","message":"So this should be container_metadata.private","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"5f35bd27e7867adc8eaf5efcd974fe6e5bae2120","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    # Save secret and metadata."},{"line_number":217,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"},{"line_number":218,"context_line":"    _save_secret_metadata(private_secret_model,"},{"line_number":219,"context_line":"                          container_metadata,"},{"line_number":220,"context_line":"                          generate_plugin,"},{"line_number":221,"context_line":"                          content_type, repos)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_06c5e45a","line":219,"in_reply_to":"baada198_44c4a193","updated":"2014-08-13 21:32:31.000000000","message":"fixed, please take a look. Let me know if it is not done correctly?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    # Save secret and metadata."},{"line_number":217,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"},{"line_number":218,"context_line":"    _save_secret_metadata(private_secret_model,"},{"line_number":219,"context_line":"                          container_metadata,"},{"line_number":220,"context_line":"                          generate_plugin,"},{"line_number":221,"context_line":"                          content_type, repos)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_cb51d5da","line":219,"in_reply_to":"baada198_75fa7878","updated":"2014-08-07 15:44:44.000000000","message":"John, need some clarification here as also mentioned by Ade","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"c71cd43ee26323eb9bc03c2136db481c10136a63","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    # Save secret and metadata."},{"line_number":217,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"},{"line_number":218,"context_line":"    _save_secret_metadata(private_secret_model,"},{"line_number":219,"context_line":"                          container_metadata,"},{"line_number":220,"context_line":"                          generate_plugin,"},{"line_number":221,"context_line":"                          content_type, repos)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b0732c4e","line":219,"in_reply_to":"baada198_75fa7878","updated":"2014-08-07 15:30:06.000000000","message":"Where are container_metadata{.public, private, passphrase} defined?\n\nAs I understand it right now, the plugin contract just says to return a single metadata dict() object, but specifies nothing about the expected structure of that dict().  Do we want a dict of dicts()?\n\nIs this something we want to specify in the plugin contract in secret_store.py?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"28a3540f0e3cd93a48c8ee1ea19e317bbfdd37ed","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    # Save secret and metadata."},{"line_number":217,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"},{"line_number":218,"context_line":"    _save_secret_metadata(private_secret_model,"},{"line_number":219,"context_line":"                          container_metadata,"},{"line_number":220,"context_line":"                          generate_plugin,"},{"line_number":221,"context_line":"                          content_type, repos)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_44c4a193","line":219,"in_reply_to":"baada198_a4a9fdde","updated":"2014-08-08 20:02:59.000000000","message":"Ade mentioned another option is to just return a tuple of dicts...that is probably cleaner here I think. Does that make sense?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"95dc71b180338c50ae9e8309a7fa1ba2e59c911f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    # Save secret and metadata."},{"line_number":217,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"},{"line_number":218,"context_line":"    _save_secret_metadata(private_secret_model,"},{"line_number":219,"context_line":"                          container_metadata,"},{"line_number":220,"context_line":"                          generate_plugin,"},{"line_number":221,"context_line":"                          content_type, repos)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a4a9fdde","line":219,"in_reply_to":"baada198_cb51d5da","updated":"2014-08-08 20:00:24.000000000","message":"The generate_asymmetric_key call needs to return three metadata dicts, one each for the three secret components. So container_metadata probably should be a DTO that has these three dicts located on it.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    _save_secret(public_secret_model, tenant_model, repos)"},{"line_number":224,"context_line":"    _save_secret_metadata(public_secret_model,"},{"line_number":225,"context_line":"                          container_metadata,"},{"line_number":226,"context_line":"                          generate_plugin,"},{"line_number":227,"context_line":"                          content_type, repos)"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_95fd4c70","line":225,"updated":"2014-08-07 04:10:58.000000000","message":"So this should be container_metadata.public","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    if spec.get(\u0027passphrase\u0027):"},{"line_number":230,"context_line":"        _save_secret(passphrase_secret_model, tenant_model, repos)"},{"line_number":231,"context_line":"        _save_secret_metadata(passphrase_secret_model,"},{"line_number":232,"context_line":"                              container_metadata,"},{"line_number":233,"context_line":"                              generate_plugin,"},{"line_number":234,"context_line":"                              content_type, repos)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d5eee4b5","line":232,"updated":"2014-08-07 04:10:58.000000000","message":"So this should be container_metadata.passphrase","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    container_model.status \u003d models.States.ACTIVE"},{"line_number":308,"context_line":"    container_model.tenant_id \u003d tenant_model.id"},{"line_number":309,"context_line":"    repos.container_repo.create_from(container_model)"},{"line_number":310,"context_line":"# create container_secret for private_key"},{"line_number":311,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":312,"context_line":"    new_consec_assoc.name \u003d \u0027private_key\u0027"},{"line_number":313,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b53a5033","line":310,"updated":"2014-08-07 04:10:58.000000000","message":"Can you 4-space indent the comment, and put a blank line above the comment?","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"5f35bd27e7867adc8eaf5efcd974fe6e5bae2120","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    container_model.status \u003d models.States.ACTIVE"},{"line_number":308,"context_line":"    container_model.tenant_id \u003d tenant_model.id"},{"line_number":309,"context_line":"    repos.container_repo.create_from(container_model)"},{"line_number":310,"context_line":"# create container_secret for private_key"},{"line_number":311,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":312,"context_line":"    new_consec_assoc.name \u003d \u0027private_key\u0027"},{"line_number":313,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_268f4825","line":310,"in_reply_to":"baada198_b53a5033","updated":"2014-08-13 21:32:31.000000000","message":"done, sorry I missed those indent","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"},{"line_number":314,"context_line":"    new_consec_assoc.secret_id \u003d private_secret_model.id"},{"line_number":315,"context_line":"    repos.container_secret_repo.create_from(new_consec_assoc)"},{"line_number":316,"context_line":"# create container_secret for public_key"},{"line_number":317,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":318,"context_line":"    new_consec_assoc.name \u003d \u0027public_key\u0027"},{"line_number":319,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_5511f4ac","line":316,"updated":"2014-08-07 04:10:58.000000000","message":"See above.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"},{"line_number":320,"context_line":"    new_consec_assoc.secret_id \u003d public_secret_model.id"},{"line_number":321,"context_line":"    repos.container_secret_repo.create_from(new_consec_assoc)"},{"line_number":322,"context_line":"    if spec.get(\u0027passphrase\u0027):"},{"line_number":323,"context_line":"        # create container_secret for passphrase"},{"line_number":324,"context_line":"        new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":325,"context_line":"        new_consec_assoc.name \u003d \u0027private_key_passphrase\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_35756000","line":322,"updated":"2014-08-07 04:10:58.000000000","message":"Please add a comment above this if block (similar to above comments, with 4 spacing and line above.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"f4bc89e40cbb6bee94e894a876eb5ba761ef1918","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                           repos\u003drepos)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    container_metadata \u003d generate_plugin.\\"},{"line_number":239,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    # Save secret and metadata."},{"line_number":242,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ac7a964_40f8867c","line":239,"updated":"2014-08-14 14:00:37.000000000","message":"Arvind, I think it was decided to return a tuple rather than a single dict().  That way the contract between plugins and barbican core is clearer.\n\nSo generate_asymmetric_key() should return :\n(public_key, private_key, private_key_passphrase)","commit_id":"427fc267c8e77ac8ff195d003d344729a85ea7f5"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"6c5d54c6e86b5b9b48f0be9608c4c1b9d280ee0e","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                           repos\u003drepos)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    container_metadata \u003d generate_plugin.\\"},{"line_number":239,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    # Save secret and metadata."},{"line_number":242,"context_line":"    _save_secret(private_secret_model, tenant_model, repos)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ac7a964_54f8487c","line":239,"in_reply_to":"7ac7a964_40f8867c","updated":"2014-08-14 15:38:11.000000000","message":"I will make that change","commit_id":"427fc267c8e77ac8ff195d003d344729a85ea7f5"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"950b5b48c6c92321129b2cd69c2c27cb8d00c70a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    #  and unit test patch work is completed."},{"line_number":108,"context_line":"    context \u003d secret_store.SecretStoreContext(secret_model\u003dsecret_model,"},{"line_number":109,"context_line":"                                              tenant_model\u003dtenant_model,"},{"line_number":110,"context_line":"                                              repos\u003drepos)"},{"line_number":111,"context_line":"    secret_type \u003d secret_store.KeyAlgorithm().get_secret_type(key_spec.alg)"},{"line_number":112,"context_line":"    secret_dto \u003d secret_store.SecretDTO(type\u003dsecret_type,"},{"line_number":113,"context_line":"                                        secret\u003dunencrypted,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_083dc08f","line":110,"updated":"2014-08-19 01:31:05.000000000","message":"the context here is set to a Tenant object and failing the devstack gate:\n\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers Traceback (most recent call last):\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/api/controllers/__init__.py\", line 95, in handler\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     return fn(inst, *args, **kwargs)\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/api/controllers/__init__.py\", line 81, in enforcer\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     return fn(inst, *args, **kwargs)\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/api/controllers/__init__.py\", line 127, in content_types_enforcer\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     return fn(inst, *args, **kwargs)\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/api/controllers/secrets.py\", line 285, in on_post\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     transport_key_id\u003ddata.get(\u0027transport_key_id\u0027))\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/plugin/resources.py\", line 117, in store_secret\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     secret_metadata \u003d store_plugin.store_secret(secret_dto, context)\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/plugin/store_crypto.py\", line 74, in store_secret\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     datum_model, context.repos)\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers   File \"/opt/stack/new/barbican/barbican/plugin/store_crypto.py\", line 256, in _store_secret_and_datum\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers     if not context.secret_model.id:\n2014-08-18 19:39:43.105 30412 TRACE barbican.api.controllers AttributeError: \u0027Tenant\u0027 object has no attribute \u0027secret_model\u0027","commit_id":"0b7a9c1042b13b740c2f9149f9961124f0c3d4b5"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"d72ee750b45754d7f903d0e41a960d6861e826d5","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                           tenant_model\u003dtenant_model,"},{"line_number":236,"context_line":"                           repos\u003drepos)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    private_metadata, public_metadata, passphrase_metadata \u003d generate_plugin.\\"},{"line_number":239,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    # Save secret and metadata."}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_3360b2ce","line":238,"updated":"2014-08-21 16:49:47.000000000","message":"Arvind, Ade had suggested returning a DTO here instead, with these three dicts contained inside of it. I think that\u0027s a good approach as well. Can you make that change as well as the testing mods?","commit_id":"beb070e94ac39de7a170bf35a8eb3618aab53181"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"7053b140b8c4e52614d934737fce05ea1d3920c2","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                                              tenant_model\u003dtenant_model,"},{"line_number":193,"context_line":"                                              repos\u003drepos)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    #TODO(john-wood-w) Replace with single \u0027generate_key()\u0027 call once"},{"line_number":196,"context_line":"    #  asymmetric and symmetric generation is combined."},{"line_number":197,"context_line":"    secret_metadata \u003d generate_plugin.\\"},{"line_number":198,"context_line":"        generate_symmetric_key(key_spec, context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_beb29903","line":195,"updated":"2014-08-29 17:26:23.000000000","message":"Ref1- I think we need to call \"store_crypto.generate_supports\" to make sure that plugin supports this type.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"b3bdadb519b09394e0b9bd292c5d38e2eb432f8c","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                                              tenant_model\u003dtenant_model,"},{"line_number":193,"context_line":"                                              repos\u003drepos)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    #TODO(john-wood-w) Replace with single \u0027generate_key()\u0027 call once"},{"line_number":196,"context_line":"    #  asymmetric and symmetric generation is combined."},{"line_number":197,"context_line":"    secret_metadata \u003d generate_plugin.\\"},{"line_number":198,"context_line":"        generate_symmetric_key(key_spec, context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_c955e1fa","line":195,"in_reply_to":"1abeadc6_beb29903","updated":"2014-08-29 17:47:52.000000000","message":"I\u0027m not following you on this Arvind. We would not want this module\u0027s block (business logic stuff) to depend on functions in a plugin impl module in store_crypto unless specific to store_crypto instance (the subject of that CR to remove config parameter). Does that make sense?","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"7053b140b8c4e52614d934737fce05ea1d3920c2","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                           passphrase_secret_model\u003dpassphrase_secret_model,"},{"line_number":235,"context_line":"                           tenant_model\u003dtenant_model,"},{"line_number":236,"context_line":"                           repos\u003drepos)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    asymmetric_meta_dto \u003d generate_plugin.\\"},{"line_number":239,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_1ee46d0b","line":237,"updated":"2014-08-29 17:26:23.000000000","message":"Ref2- I think we need to call \"store_crypto.generate_supports\" to make sure that plugin supports this type.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"b3bdadb519b09394e0b9bd292c5d38e2eb432f8c","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                           passphrase_secret_model\u003dpassphrase_secret_model,"},{"line_number":235,"context_line":"                           tenant_model\u003dtenant_model,"},{"line_number":236,"context_line":"                           repos\u003drepos)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    asymmetric_meta_dto \u003d generate_plugin.\\"},{"line_number":239,"context_line":"        generate_asymmetric_key(key_spec, context)"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_69b20d4a","line":237,"in_reply_to":"1abeadc6_1ee46d0b","updated":"2014-08-29 17:47:52.000000000","message":"Are you referring to interface.secret_store.py\u0027s generate_supports()?  If so, that is called when the plugin in retrieved at line 218 above.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":6783,"name":"Nathan Reller","email":"nathan.s.reller@gmail.com","username":"rellerreller"},"change_message_id":"e8f3d912eb9ff744e21a8ba4bc0eeefa7d69cf7a","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    # create container_secret for private_key"},{"line_number":337,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":338,"context_line":"    new_consec_assoc.name \u003d \u0027private_key\u0027"},{"line_number":339,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"},{"line_number":340,"context_line":"    new_consec_assoc.secret_id \u003d private_secret_model.id"},{"line_number":341,"context_line":"    repos.container_secret_repo.create_from(new_consec_assoc)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_f3cdc3b8","line":338,"updated":"2014-08-26 16:57:04.000000000","message":"Code on lines 336-341 is repeated three times. You could make a helper function.","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"7053b140b8c4e52614d934737fce05ea1d3920c2","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    # create container_secret for private_key"},{"line_number":337,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":338,"context_line":"    new_consec_assoc.name \u003d \u0027private_key\u0027"},{"line_number":339,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"},{"line_number":340,"context_line":"    new_consec_assoc.secret_id \u003d private_secret_model.id"},{"line_number":341,"context_line":"    repos.container_secret_repo.create_from(new_consec_assoc)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_1e370de4","line":338,"in_reply_to":"1abeadc6_f3cdc3b8","updated":"2014-08-29 17:26:23.000000000","message":"Done","commit_id":"46a503a50400cc0fccc265511e0797cd51bac3cf"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def generate_asymmetric_secret(spec, content_type,"},{"line_number":211,"context_line":"                               tenant_model, repos):"},{"line_number":212,"context_line":"    \"\"\"Generate a asymmetric secrets and store"},{"line_number":213,"context_line":"        into a secure backend."},{"line_number":214,"context_line":"    \"\"\""},{"line_number":215,"context_line":"    # Locate a suitable plugin to store the secret."}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_aede450f","line":212,"updated":"2014-09-02 19:51:19.000000000","message":"\"an asymmetric secret\"","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"},{"line_number":218,"context_line":"                                    passphrase\u003dspec.get(\u0027passphrase\u0027))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    generate_plugin \u003d secret_store.SecretStorePluginManager()\\"},{"line_number":221,"context_line":"        .get_plugin_generate(key_spec)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    # Create secret models to eventually save metadata to."}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_8ed7c1ec","line":220,"updated":"2014-09-02 19:51:19.000000000","message":"another hacking issue - avoid backslash.  There are a few in here, I won\u0027t bother marking \u0027em all.","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                                    bit_length\u003dspec.get(\u0027bit_length\u0027),"},{"line_number":218,"context_line":"                                    passphrase\u003dspec.get(\u0027passphrase\u0027))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    generate_plugin \u003d secret_store.SecretStorePluginManager()\\"},{"line_number":221,"context_line":"        .get_plugin_generate(key_spec)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    # Create secret models to eventually save metadata to."}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_6549d05f","line":220,"in_reply_to":"fa98f980_8ed7c1ec","updated":"2014-09-02 23:20:13.000000000","message":"Can we handle this hacking requirement in new CR?","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if spec.get(\u0027passphrase\u0027) else None"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    # Generate the secret."},{"line_number":230,"context_line":"    #TODO(john-wood-w) Remove the SecretStoreContext once repository factory"},{"line_number":231,"context_line":"    #  and unit test patch work is completed."},{"line_number":232,"context_line":"    context \u003d secret_store.\\"},{"line_number":233,"context_line":"        SecretStoreContext(content_type\u003dcontent_type,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_ae61e53a","line":230,"updated":"2014-09-02 19:51:19.000000000","message":"space between # and TODO","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if spec.get(\u0027passphrase\u0027) else None"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    # Generate the secret."},{"line_number":230,"context_line":"    #TODO(john-wood-w) Remove the SecretStoreContext once repository factory"},{"line_number":231,"context_line":"    #  and unit test patch work is completed."},{"line_number":232,"context_line":"    context \u003d secret_store.\\"},{"line_number":233,"context_line":"        SecretStoreContext(content_type\u003dcontent_type,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_c57b5c8a","line":230,"in_reply_to":"fa98f980_ae61e53a","updated":"2014-09-02 23:20:13.000000000","message":"done","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                          generate_plugin,"},{"line_number":254,"context_line":"                          content_type, repos)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    if spec.get(\u0027passphrase\u0027):"},{"line_number":257,"context_line":"        _save_secret(passphrase_secret_model, tenant_model, repos)"},{"line_number":258,"context_line":"        _save_secret_metadata(passphrase_secret_model,"},{"line_number":259,"context_line":"                              asymmetric_meta_dto.passphrase_meta,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_4efeb939","line":256,"updated":"2014-09-02 19:51:19.000000000","message":"can we use \"if passphrase_secret_model:\" instead?","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                          generate_plugin,"},{"line_number":254,"context_line":"                          content_type, repos)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    if spec.get(\u0027passphrase\u0027):"},{"line_number":257,"context_line":"        _save_secret(passphrase_secret_model, tenant_model, repos)"},{"line_number":258,"context_line":"        _save_secret_metadata(passphrase_secret_model,"},{"line_number":259,"context_line":"                              asymmetric_meta_dto.passphrase_meta,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_6560f0cf","line":256,"in_reply_to":"fa98f980_4efeb939","updated":"2014-09-02 23:20:13.000000000","message":"spec have passphrase only. so no I can not do that.","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                                         public_secret_model,"},{"line_number":346,"context_line":"                                         container_model)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    if spec.get(\u0027passphrase\u0027):"},{"line_number":349,"context_line":"        # create container_secret for passphrase"},{"line_number":350,"context_line":"        _create_container_secret_association(repos, \u0027private_key_passphrase\u0027,"},{"line_number":351,"context_line":"                                             passphrase_secret_model,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_2e7895c3","line":348,"updated":"2014-09-02 19:51:19.000000000","message":"should we check passphrase_secret_model here?","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                                         public_secret_model,"},{"line_number":346,"context_line":"                                         container_model)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    if spec.get(\u0027passphrase\u0027):"},{"line_number":349,"context_line":"        # create container_secret for passphrase"},{"line_number":350,"context_line":"        _create_container_secret_association(repos, \u0027private_key_passphrase\u0027,"},{"line_number":351,"context_line":"                                             passphrase_secret_model,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_a59d78be","line":348,"in_reply_to":"fa98f980_2e7895c3","updated":"2014-09-02 23:20:13.000000000","message":"as mentioned above","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"def _create_container_secret_association(repos, assoc_name, secret_model,"},{"line_number":357,"context_line":"                                         container_model):"},{"line_number":358,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":359,"context_line":"    new_consec_assoc.name \u003d assoc_name"},{"line_number":360,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"},{"line_number":361,"context_line":"    new_consec_assoc.secret_id \u003d secret_model.id"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_fbce4eb3","line":358,"updated":"2014-09-02 19:51:19.000000000","message":"instead of consec can we say container_secret?  consec sounds like something the government came up with :-)","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"def _create_container_secret_association(repos, assoc_name, secret_model,"},{"line_number":357,"context_line":"                                         container_model):"},{"line_number":358,"context_line":"    new_consec_assoc \u003d models.ContainerSecret()"},{"line_number":359,"context_line":"    new_consec_assoc.name \u003d assoc_name"},{"line_number":360,"context_line":"    new_consec_assoc.container_id \u003d container_model.id"},{"line_number":361,"context_line":"    new_consec_assoc.secret_id \u003d secret_model.id"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_c5899c76","line":358,"in_reply_to":"fa98f980_fbce4eb3","updated":"2014-09-02 23:20:13.000000000","message":"done","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"}],"barbican/plugin/store_crypto.py":[{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"439d9d6784e80633ec139fecc4d45e924b78e707","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        \"\"\"Generates an asymmetric key."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        Returns a tuple object that can be used to retrieve secret"},{"line_number":165,"context_line":"        for private_key, Public_key and passphrase"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        #used for test only"},{"line_number":168,"context_line":"        generating_plugin \u003d kargs.get(\u0027generating_plugin\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a2a0bbf3","line":165,"updated":"2014-08-04 20:53:12.000000000","message":"nit - public doesn\u0027t need to be capitalized","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        \"\"\"Generates an asymmetric key."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        Returns a tuple object that can be used to retrieve secret"},{"line_number":165,"context_line":"        for private_key, Public_key and passphrase"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        #used for test only"},{"line_number":168,"context_line":"        generating_plugin \u003d kargs.get(\u0027generating_plugin\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_40b96915","line":165,"in_reply_to":"baada198_a2a0bbf3","updated":"2014-08-05 22:40:00.000000000","message":"will fix","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"439d9d6784e80633ec139fecc4d45e924b78e707","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        for private_key, Public_key and passphrase"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        #used for test only"},{"line_number":168,"context_line":"        generating_plugin \u003d kargs.get(\u0027generating_plugin\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":171,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8284975d","line":168,"updated":"2014-08-04 20:53:12.000000000","message":"why is this here if its only for testing?","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        for private_key, Public_key and passphrase"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        #used for test only"},{"line_number":168,"context_line":"        generating_plugin \u003d kargs.get(\u0027generating_plugin\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":171,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_80ce218e","line":168,"in_reply_to":"baada198_8284975d","updated":"2014-08-05 22:40:00.000000000","message":"To unit test this method I have to pass ref to generating_plugin which not needed for integration run. Without this it wd not be easy to unit test it, let me know if that is an issue ?\nI can remove comment.","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":170,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"},{"line_number":171,"context_line":"            raise sstore.SecretAlgorithmNotSupportedException(key_spec.alg)"},{"line_number":172,"context_line":"        if not generating_plugin:"},{"line_number":173,"context_line":"            generating_plugin \u003d crypto.CryptoPluginManager()\\"},{"line_number":174,"context_line":"                .get_plugin_store_generate(plugin_type,"},{"line_number":175,"context_line":"                                           key_spec.alg,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_b4cd0033","line":172,"updated":"2014-08-06 19:31:19.000000000","message":"Please see earlier comment about why we need this passed in plugin?","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":170,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"},{"line_number":171,"context_line":"            raise sstore.SecretAlgorithmNotSupportedException(key_spec.alg)"},{"line_number":172,"context_line":"        if not generating_plugin:"},{"line_number":173,"context_line":"            generating_plugin \u003d crypto.CryptoPluginManager()\\"},{"line_number":174,"context_line":"                .get_plugin_store_generate(plugin_type,"},{"line_number":175,"context_line":"                                           key_spec.alg,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_4fa17139","line":172,"in_reply_to":"baada198_b4cd0033","updated":"2014-08-06 20:11:09.000000000","message":"I have explained the need in resource module. Please let me know if that is not the correct way?","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # Create an encrypted datum instances for each secret type"},{"line_number":193,"context_line":"        # and add the created cypher text."},{"line_number":194,"context_line":"        priv_datum \u003d models.EncryptedDatum(None, kek_datum_model)"},{"line_number":195,"context_line":"        priv_datum.content_type \u003d context.content_type"},{"line_number":196,"context_line":"        priv_datum.cypher_text \u003d base64.b64encode(private_key_dto.cypher_text)"},{"line_number":197,"context_line":"        priv_datum.kek_meta_extended \u003d private_key_dto.kek_meta_extended"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_544f448c","line":194,"updated":"2014-08-06 19:31:19.000000000","message":"Please look into moving these EncryptedDatum create/setup lines into the _store_secret_and_datum() function to clean up the code a bit.","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"f6fddc53ac7d36e3f7c3bfb82848558686659602","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        priv_datum.content_type \u003d context.content_type"},{"line_number":196,"context_line":"        priv_datum.cypher_text \u003d base64.b64encode(private_key_dto.cypher_text)"},{"line_number":197,"context_line":"        priv_datum.kek_meta_extended \u003d private_key_dto.kek_meta_extended"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self._store_secret_and_datum(context.tenant_model,"},{"line_number":200,"context_line":"                                     context.private_secret_model, priv_datum,"},{"line_number":201,"context_line":"                                     context.repos)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_b4b26094","line":198,"updated":"2014-08-06 19:31:19.000000000","message":"Please remove thw empty line at line #198","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"c25061b5ac485865cc6b8c4bb5144730d19f61e6","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        priv_datum.content_type \u003d context.content_type"},{"line_number":196,"context_line":"        priv_datum.cypher_text \u003d base64.b64encode(private_key_dto.cypher_text)"},{"line_number":197,"context_line":"        priv_datum.kek_meta_extended \u003d private_key_dto.kek_meta_extended"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self._store_secret_and_datum(context.tenant_model,"},{"line_number":200,"context_line":"                                     context.private_secret_model, priv_datum,"},{"line_number":201,"context_line":"                                     context.repos)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9ad2e531","line":198,"in_reply_to":"baada198_b4b26094","updated":"2014-08-06 20:11:09.000000000","message":"fixed","commit_id":"ad7cf6d53b4c0bb04683eb32da77124738d1a820"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":170,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"},{"line_number":171,"context_line":"            raise sstore.SecretAlgorithmNotSupportedException(key_spec.alg)"},{"line_number":172,"context_line":"        if not generating_plugin:"},{"line_number":173,"context_line":"            generating_plugin \u003d crypto.CryptoPluginManager()\\"},{"line_number":174,"context_line":"                .get_plugin_store_generate(plugin_type,"},{"line_number":175,"context_line":"                                           key_spec.alg,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f5720811","line":172,"updated":"2014-08-07 04:10:58.000000000","message":"Please use patching to unit test rather than explicit passing in of plugins.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"5f35bd27e7867adc8eaf5efcd974fe6e5bae2120","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":170,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"},{"line_number":171,"context_line":"            raise sstore.SecretAlgorithmNotSupportedException(key_spec.alg)"},{"line_number":172,"context_line":"        if not generating_plugin:"},{"line_number":173,"context_line":"            generating_plugin \u003d crypto.CryptoPluginManager()\\"},{"line_number":174,"context_line":"                .get_plugin_store_generate(plugin_type,"},{"line_number":175,"context_line":"                                           key_spec.alg,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_c69f6c4f","line":172,"in_reply_to":"baada198_f5720811","updated":"2014-08-13 21:32:31.000000000","message":"done","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"},{"line_number":170,"context_line":"        if crypto.PluginSupportTypes.ASYMMETRIC_KEY_GENERATION !\u003d plugin_type:"},{"line_number":171,"context_line":"            raise sstore.SecretAlgorithmNotSupportedException(key_spec.alg)"},{"line_number":172,"context_line":"        if not generating_plugin:"},{"line_number":173,"context_line":"            generating_plugin \u003d crypto.CryptoPluginManager()\\"},{"line_number":174,"context_line":"                .get_plugin_store_generate(plugin_type,"},{"line_number":175,"context_line":"                                           key_spec.alg,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0b34adaa","line":172,"in_reply_to":"baada198_f5720811","updated":"2014-08-07 15:44:44.000000000","message":"ok","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"ff74ed3d24349fccee8c9538fbe0f04d356a96ea","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # Create an encrypted datum instances for each secret type"},{"line_number":193,"context_line":"        # and add the created cypher text."},{"line_number":194,"context_line":"        priv_datum \u003d self._setup_secret_datum(context, kek_datum_model,"},{"line_number":195,"context_line":"                                              private_key_dto)"},{"line_number":196,"context_line":"        self._store_secret_and_datum(context.tenant_model,"},{"line_number":197,"context_line":"                                     context.private_secret_model, priv_datum,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b5d6d0c2","line":194,"updated":"2014-08-07 04:10:58.000000000","message":"I think the _setup_secret_datum() and _store_secret_and_datum() methods can be combined (into just the _store_secret_and_datum() method).  Look at all places where _store_secret_and_datum() is used in this module, and I think you\u0027ll find that they all can be refactored this way.","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"5f35bd27e7867adc8eaf5efcd974fe6e5bae2120","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # Create an encrypted datum instances for each secret type"},{"line_number":193,"context_line":"        # and add the created cypher text."},{"line_number":194,"context_line":"        priv_datum \u003d self._setup_secret_datum(context, kek_datum_model,"},{"line_number":195,"context_line":"                                              private_key_dto)"},{"line_number":196,"context_line":"        self._store_secret_and_datum(context.tenant_model,"},{"line_number":197,"context_line":"                                     context.private_secret_model, priv_datum,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_76b9f0e8","line":194,"in_reply_to":"baada198_b5d6d0c2","updated":"2014-08-13 21:32:31.000000000","message":"fixed","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"2d1624a35957c5133ffd89e55041938db4bf5e19","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # Create an encrypted datum instances for each secret type"},{"line_number":193,"context_line":"        # and add the created cypher text."},{"line_number":194,"context_line":"        priv_datum \u003d self._setup_secret_datum(context, kek_datum_model,"},{"line_number":195,"context_line":"                                              private_key_dto)"},{"line_number":196,"context_line":"        self._store_secret_and_datum(context.tenant_model,"},{"line_number":197,"context_line":"                                     context.private_secret_model, priv_datum,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_4b55c5c0","line":194,"in_reply_to":"baada198_b5d6d0c2","updated":"2014-08-07 15:44:44.000000000","message":"sure","commit_id":"aaa563205c653b26743d3e7ab1d0db15199bc272"},{"author":{"_account_id":1091,"name":"Arun Kant","email":"arukant@cisco.com","username":"arunkant-uws"},"change_message_id":"2fbe983a5aa2cfdecf60cce3710c26e6654604c1","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        \"\"\"Generates an asymmetric key."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        Returns a dict object that can be used to retrieve secret"},{"line_number":166,"context_line":"        for private_key, public_key and passphrase"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_86f9cb4f","line":166,"updated":"2014-08-14 19:22:43.000000000","message":"Is it correct statement as returned value is tuple.\n\nAlso this return value differs from original interface secret_store.SecretStoreBase class comments where it expects dict in return. Will be good to have them in sync.","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"3a616c53ced57ca0ef0d8944faeb0e3cdb4578af","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        \"\"\"Generates an asymmetric key."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        Returns a dict object that can be used to retrieve secret"},{"line_number":166,"context_line":"        for private_key, public_key and passphrase"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        plugin_type \u003d self._determine_generation_type(key_spec.alg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_6a51b4d7","line":166,"in_reply_to":"7ac7a964_86f9cb4f","updated":"2014-08-15 13:52:54.000000000","message":"Correct.  This comment needs to be changed as well as the original comment in SecretStore.py","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"3a616c53ced57ca0ef0d8944faeb0e3cdb4578af","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self._store_secret_and_datum(context,"},{"line_number":204,"context_line":"                                         kek_datum_model,"},{"line_number":205,"context_line":"                                         passwd_dto)"},{"line_number":206,"context_line":"            passphrase_metadata \u003d None"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return private_metadata, public_metadata, passphrase_metadata"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_4a94f8e1","line":206,"updated":"2014-08-15 13:52:54.000000000","message":"If passwd_dto is None, then passphrase_metadata is not defined (and therefore None?)\n\nIt may simply be clearer to just say something like this:\n\n# This plugin does not require any metadata to be stored\n# for the private_metadata, public_metadata, \n# passphrase_metadata\n\nreturn None, None, None","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b91ed89ae3169e67508a05174bd78d33be48dbd7","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self._store_secret_and_datum(context,"},{"line_number":204,"context_line":"                                         kek_datum_model,"},{"line_number":205,"context_line":"                                         passwd_dto)"},{"line_number":206,"context_line":"            passphrase_metadata \u003d None"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return private_metadata, public_metadata, passphrase_metadata"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_166303dd","line":206,"in_reply_to":"7ac7a964_4a94f8e1","updated":"2014-08-18 18:26:07.000000000","message":"That is why I wanted to return dict of dict. IMO which looks clean to me instead of tuple of dicts.\n\nAny way I will clean it","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":1091,"name":"Arun Kant","email":"arukant@cisco.com","username":"arunkant-uws"},"change_message_id":"2fbe983a5aa2cfdecf60cce3710c26e6654604c1","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        given key_spec."},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        return (key_spec and"},{"line_number":217,"context_line":"                sstore.KeyAlgorithm().get_secret_type(key_spec.alg.upper()))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def store_secret_supports(self, key_spec):"},{"line_number":220,"context_line":"        \"\"\"Key storage supported?"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_10edf5c3","line":217,"updated":"2014-08-14 19:22:43.000000000","message":"Is not algorithm stored as lowercase value in KeyAlgorithm class and this comparison would always fail? \nhttps://review.openstack.org/#/c/111412/6/barbican/plugin/interface/secret_store.py,cm (Line 166 onwards)\n\nMay be I am missing something as related unit test seems to be passing.","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"3a616c53ced57ca0ef0d8944faeb0e3cdb4578af","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        given key_spec."},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        return (key_spec and"},{"line_number":217,"context_line":"                sstore.KeyAlgorithm().get_secret_type(key_spec.alg.upper()))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def store_secret_supports(self, key_spec):"},{"line_number":220,"context_line":"        \"\"\"Key storage supported?"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_4a307801","line":217,"in_reply_to":"7ac7a964_10edf5c3","updated":"2014-08-15 13:52:54.000000000","message":"Good point.  Whats up with that?  Why are the tests passing?","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"b91ed89ae3169e67508a05174bd78d33be48dbd7","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        given key_spec."},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        return (key_spec and"},{"line_number":217,"context_line":"                sstore.KeyAlgorithm().get_secret_type(key_spec.alg.upper()))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def store_secret_supports(self, key_spec):"},{"line_number":220,"context_line":"        \"\"\"Key storage supported?"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac7a964_b65c0fef","line":217,"in_reply_to":"7ac7a964_4a307801","updated":"2014-08-18 18:26:07.000000000","message":"I think I need to improve get_secret_type method so that it will be case insensitive.\nRight now the list in KeyAlgorithm has all in caps.","commit_id":"14a3695eb2b5db3b8566ca85286a8e5032aed1c4"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        encrypt_dto \u003d crypto.EncryptDTO(secret_dto.secret)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        #Enhance the context with content_type, This is needed to build"},{"line_number":59,"context_line":"        #datum_model to store"},{"line_number":60,"context_line":"        if not getattr(context, \u0027content_type\u0027, \u0027\u0027):"},{"line_number":61,"context_line":"            context.content_type \u003d secret_dto.content_type"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_5b567ad3","line":58,"updated":"2014-09-02 19:51:19.000000000","message":"space between # and text","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        Returns a AsymmetricKeyMetadataDTO object containing"},{"line_number":158,"context_line":"        metadata(s) for asymmetric key components. The metadata"},{"line_number":159,"context_line":"        can be used to retrieve individual component of"},{"line_number":160,"context_line":"        asymmetric key pairs."},{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_bb0926df","line":159,"updated":"2014-09-02 19:51:19.000000000","message":"components (plural)","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        Returns a AsymmetricKeyMetadataDTO object containing"},{"line_number":158,"context_line":"        metadata(s) for asymmetric key components. The metadata"},{"line_number":159,"context_line":"        can be used to retrieve individual component of"},{"line_number":160,"context_line":"        asymmetric key pairs."},{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_4595ac85","line":159,"in_reply_to":"fa98f980_bb0926df","updated":"2014-09-02 23:20:13.000000000","message":"thanks","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            context.repos.secret_repo.create_from(secret_model)"},{"line_number":251,"context_line":"            new_assoc \u003d models.TenantSecret()"},{"line_number":252,"context_line":"            new_assoc.tenant_id \u003d context.tenant_model.id"},{"line_number":253,"context_line":"            new_assoc.secret_id \u003d secret_model.id"},{"line_number":254,"context_line":"            new_assoc.role \u003d \"admin\""},{"line_number":255,"context_line":"            new_assoc.status \u003d models.States.ACTIVE"},{"line_number":256,"context_line":"            context.repos.tenant_secret_repo.create_from(new_assoc)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_de27b862","line":253,"updated":"2014-09-02 19:51:19.000000000","message":"won\u0027t secret_model.id be None here (based on line 249)?","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"91ab1b9edb945f9f464efdd2d879bfcc1acf5eab","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            context.repos.secret_repo.create_from(secret_model)"},{"line_number":251,"context_line":"            new_assoc \u003d models.TenantSecret()"},{"line_number":252,"context_line":"            new_assoc.tenant_id \u003d context.tenant_model.id"},{"line_number":253,"context_line":"            new_assoc.secret_id \u003d secret_model.id"},{"line_number":254,"context_line":"            new_assoc.role \u003d \"admin\""},{"line_number":255,"context_line":"            new_assoc.status \u003d models.States.ACTIVE"},{"line_number":256,"context_line":"            context.repos.tenant_secret_repo.create_from(new_assoc)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_21395ff3","line":253,"in_reply_to":"fa98f980_de27b862","updated":"2014-09-03 15:29:23.000000000","message":"No, line #250 will update the reference.","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        datum_model.content_type \u003d context.content_type"},{"line_number":261,"context_line":"        datum_model.cypher_text \u003d base64.b64encode(generated_dto.cypher_text)"},{"line_number":262,"context_line":"        datum_model.kek_meta_extended \u003d generated_dto.kek_meta_extended"},{"line_number":263,"context_line":"        datum_model.secret_id \u003d secret_model.id"},{"line_number":264,"context_line":"        context.repos.datum_repo.create_from(datum_model)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _indicate_bind_completed(self, kek_meta_dto, kek_datum):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_1e21404d","line":263,"updated":"2014-09-02 19:51:19.000000000","message":"any problem if this is None? (see above)","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        datum_model.content_type \u003d context.content_type"},{"line_number":261,"context_line":"        datum_model.cypher_text \u003d base64.b64encode(generated_dto.cypher_text)"},{"line_number":262,"context_line":"        datum_model.kek_meta_extended \u003d generated_dto.kek_meta_extended"},{"line_number":263,"context_line":"        datum_model.secret_id \u003d secret_model.id"},{"line_number":264,"context_line":"        context.repos.datum_repo.create_from(datum_model)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _indicate_bind_completed(self, kek_meta_dto, kek_datum):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_454a0c27","line":263,"in_reply_to":"fa98f980_1e21404d","updated":"2014-09-02 23:20:13.000000000","message":"these are copy paste from previous code. wd you mind if use separate cr to make this improvement?","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"91ab1b9edb945f9f464efdd2d879bfcc1acf5eab","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        datum_model.content_type \u003d context.content_type"},{"line_number":261,"context_line":"        datum_model.cypher_text \u003d base64.b64encode(generated_dto.cypher_text)"},{"line_number":262,"context_line":"        datum_model.kek_meta_extended \u003d generated_dto.kek_meta_extended"},{"line_number":263,"context_line":"        datum_model.secret_id \u003d secret_model.id"},{"line_number":264,"context_line":"        context.repos.datum_repo.create_from(datum_model)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _indicate_bind_completed(self, kek_meta_dto, kek_datum):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_413ae3e7","line":263,"in_reply_to":"fa98f980_454a0c27","updated":"2014-09-03 15:29:23.000000000","message":"Steve please see my comment above","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"}],"barbican/tests/plugin/crypto/test_crypto.py":[{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                plugin.ResponseDTO(\u0027insecure_public_key\u0027, None),"},{"line_number":58,"context_line":"                passwd_res_dto)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    #TODO(atiwari): fix bug 1331815"},{"line_number":61,"context_line":"    def supports(self, type_enum, algorithm\u003dNone, bit_length\u003dNone, mode\u003dNone):"},{"line_number":62,"context_line":"        if type_enum \u003d\u003d plugin.PluginSupportTypes.ENCRYPT_DECRYPT:"},{"line_number":63,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_5eae6886","line":60,"updated":"2014-09-02 19:51:19.000000000","message":"space between # and TODO","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                plugin.ResponseDTO(\u0027insecure_public_key\u0027, None),"},{"line_number":58,"context_line":"                passwd_res_dto)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    #TODO(atiwari): fix bug 1331815"},{"line_number":61,"context_line":"    def supports(self, type_enum, algorithm\u003dNone, bit_length\u003dNone, mode\u003dNone):"},{"line_number":62,"context_line":"        if type_enum \u003d\u003d plugin.PluginSupportTypes.ENCRYPT_DECRYPT:"},{"line_number":63,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_8515d4e6","line":60,"in_reply_to":"fa98f980_5eae6886","updated":"2014-09-02 23:20:13.000000000","message":"done","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"}],"barbican/tests/plugin/test_resource.py":[{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"fb26e5cea2125682dbb391abf16c66e928089e9a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        tenant_secret_repo \u003d mock.MagicMock()"},{"line_number":43,"context_line":"        tenant_secret_repo.create_from.return_value \u003d None"},{"line_number":44,"context_line":"        secret_meta_repo \u003d mock.MagicMock()"},{"line_number":45,"context_line":"        secret_meta_repo.create_from.return_value \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.repos \u003d repo.Repositories(container_repo\u003dcontainer_repo,"},{"line_number":48,"context_line":"                                       container_secret_repo\u003d"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c2568fcc","line":45,"updated":"2014-08-04 21:26:32.000000000","message":"Minor: the same two lines are repeated several times here. Maybe create a separate function and use it like:\n\nsecret_meta_repo \u003d _mock_repo_with_create_from()","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        tenant_secret_repo \u003d mock.MagicMock()"},{"line_number":43,"context_line":"        tenant_secret_repo.create_from.return_value \u003d None"},{"line_number":44,"context_line":"        secret_meta_repo \u003d mock.MagicMock()"},{"line_number":45,"context_line":"        secret_meta_repo.create_from.return_value \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.repos \u003d repo.Repositories(container_repo\u003dcontainer_repo,"},{"line_number":48,"context_line":"                                       container_secret_repo\u003d"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_409a4970","line":45,"in_reply_to":"baada198_c2568fcc","updated":"2014-08-05 22:40:00.000000000","message":"We are doing it everywhere, can leave it like that?","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"fb26e5cea2125682dbb391abf16c66e928089e9a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.assertTrue(self.repos.container_repo.create_from.call_count"},{"line_number":72,"context_line":"                        \u003d\u003d 1)"},{"line_number":73,"context_line":"        self.assertTrue(self.repos.container_secret_repo.create_from.call_count"},{"line_number":74,"context_line":"                        \u003d\u003d 3)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_generate_asymmetric_without_passphrase(self):"},{"line_number":77,"context_line":"        \"\"\"test asymmetric secret generation without passphrase.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_023b27c8","line":74,"updated":"2014-08-04 21:26:32.000000000","message":"Can you use assertEqual instead of assertTrue here? Using assertEqual will print the value of call_count in the error message, while assertTrue will only say something like \"false is not true\".","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.assertTrue(self.repos.container_repo.create_from.call_count"},{"line_number":72,"context_line":"                        \u003d\u003d 1)"},{"line_number":73,"context_line":"        self.assertTrue(self.repos.container_secret_repo.create_from.call_count"},{"line_number":74,"context_line":"                        \u003d\u003d 3)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_generate_asymmetric_without_passphrase(self):"},{"line_number":77,"context_line":"        \"\"\"test asymmetric secret generation without passphrase.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c0af399c","line":74,"in_reply_to":"baada198_023b27c8","updated":"2014-08-05 22:40:00.000000000","message":"thanks, I will fix it","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"ae45ae353de89b2da7863d46dd577354fb3ad715","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.content_type \u003d \u0027application/octet-stream\u0027"},{"line_number":33,"context_line":"        self.tenant_model \u003d mock.MagicMock()"},{"line_number":34,"context_line":"        asymmetric_meta_dto \u003d secret_store.AsymmetricKeyMetadataDTO()"},{"line_number":35,"context_line":"        #Mock plug-in"},{"line_number":36,"context_line":"        self.generate_plugin \u003d mock.MagicMock()"},{"line_number":37,"context_line":"        self.generate_plugin.generate_asymmetric_key.return_value \u003d\\"},{"line_number":38,"context_line":"            asymmetric_meta_dto"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_de36d851","line":35,"updated":"2014-09-02 19:51:19.000000000","message":"space after #","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"8fa073d544e6e95710305019b2d8de9c1ac1ee14","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.content_type \u003d \u0027application/octet-stream\u0027"},{"line_number":33,"context_line":"        self.tenant_model \u003d mock.MagicMock()"},{"line_number":34,"context_line":"        asymmetric_meta_dto \u003d secret_store.AsymmetricKeyMetadataDTO()"},{"line_number":35,"context_line":"        #Mock plug-in"},{"line_number":36,"context_line":"        self.generate_plugin \u003d mock.MagicMock()"},{"line_number":37,"context_line":"        self.generate_plugin.generate_asymmetric_key.return_value \u003d\\"},{"line_number":38,"context_line":"            asymmetric_meta_dto"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_052ac42b","line":35,"in_reply_to":"fa98f980_de36d851","updated":"2014-09-02 23:20:13.000000000","message":"done","commit_id":"af36f9697da9610c46dc98928e41a5d991555230"}],"barbican/tests/plugin/test_store_crypto.py":[{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"fb26e5cea2125682dbb391abf16c66e928089e9a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.public_key_dto \u003d mock.MagicMock()"},{"line_number":34,"context_line":"        self.public_key_dto.cypher_text \u003d \"asdasd\""},{"line_number":35,"context_line":"        self.passphrase_dto \u003d mock.MagicMock()"},{"line_number":36,"context_line":"        self.passphrase_dto.cypher_text \u003d \"asdasd\""},{"line_number":37,"context_line":"        self.generating_plugin \u003d mock.MagicMock()"},{"line_number":38,"context_line":"        tenant_repo \u003d mock.MagicMock()"},{"line_number":39,"context_line":"        secret_repo \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_22158be5","line":36,"updated":"2014-08-04 21:26:32.000000000","message":"Minor. These lines could be shortened to:\n\nself.private_key_dto \u003d mock.MagicMock(cypher_text\u003d\"asdasd\")","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.public_key_dto \u003d mock.MagicMock()"},{"line_number":34,"context_line":"        self.public_key_dto.cypher_text \u003d \"asdasd\""},{"line_number":35,"context_line":"        self.passphrase_dto \u003d mock.MagicMock()"},{"line_number":36,"context_line":"        self.passphrase_dto.cypher_text \u003d \"asdasd\""},{"line_number":37,"context_line":"        self.generating_plugin \u003d mock.MagicMock()"},{"line_number":38,"context_line":"        tenant_repo \u003d mock.MagicMock()"},{"line_number":39,"context_line":"        secret_repo \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_80ff0169","line":36,"in_reply_to":"baada198_22158be5","updated":"2014-08-05 22:40:00.000000000","message":"sure","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"fb26e5cea2125682dbb391abf16c66e928089e9a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        kek_repo \u003d mock.MagicMock()"},{"line_number":50,"context_line":"        kek_repo.create_from.return_value \u003d None"},{"line_number":51,"context_line":"        datum_repo \u003d mock.MagicMock()"},{"line_number":52,"context_line":"        datum_repo.create_from.return_value \u003d None"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.repos \u003d repo.Repositories(container_repo\u003dcontainer_repo,"},{"line_number":55,"context_line":"                                       container_secret_repo\u003d"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_02f2479a","line":52,"updated":"2014-08-04 21:26:32.000000000","message":"Similar comment as a previous file: the same two lines are repeated several times and could be refactored into a separate function.","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":994,"name":"Arvind Tiwari","email":"arvindt7@gmail.com","username":"arvind-tiwari"},"change_message_id":"eda7832840ba34fd8208f7b83ded66d7b38cf663","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        kek_repo \u003d mock.MagicMock()"},{"line_number":50,"context_line":"        kek_repo.create_from.return_value \u003d None"},{"line_number":51,"context_line":"        datum_repo \u003d mock.MagicMock()"},{"line_number":52,"context_line":"        datum_repo.create_from.return_value \u003d None"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.repos \u003d repo.Repositories(container_repo\u003dcontainer_repo,"},{"line_number":55,"context_line":"                                       container_secret_repo\u003d"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_40e08997","line":52,"in_reply_to":"baada198_02f2479a","updated":"2014-08-05 22:40:00.000000000","message":"keeping it as it was a minor. thoughts?","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"fb26e5cea2125682dbb391abf16c66e928089e9a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.assertTrue(self.generating_plugin.generate_asymmetric.call_count"},{"line_number":91,"context_line":"                        \u003d\u003d 1)"},{"line_number":92,"context_line":"        self.assertTrue(self.repos.datum_repo.create_from.call_count"},{"line_number":93,"context_line":"                        \u003d\u003d 3)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def generate_asymmetric_key_without_passphrase(self):"},{"line_number":96,"context_line":"        \"\"\"test asymmetric secret generation without passphrase.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5d1180ad","line":93,"updated":"2014-08-04 21:26:32.000000000","message":"Similar as previous file: use assertEqual instead of assertTrue here and in the test below.","commit_id":"a1a05007c1bd95c4428cb1bee955ea8930f5ff36"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"fe1639fe6f9624e82be252d3ffc797a032213eb0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            self.generating_plugin"},{"line_number":40,"context_line":"        }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        self.gen_plugin_patcher \u003d mock.patch("},{"line_number":43,"context_line":"            \u0027barbican.plugin.crypto.crypto\u0027"},{"line_number":44,"context_line":"            \u0027.CryptoPluginManager\u0027,"},{"line_number":45,"context_line":"            **gen_plugin_config"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_a8429165","line":42,"updated":"2014-08-21 16:45:22.000000000","message":"Arvind, the CryptoPluginManager is now has an _ in front of it, and is in a different module now (manager.py).  Also, since it is a singleton accessed via global, you need to instead patch the global reference, and not the _CryptoPluginManager class (because patching this class is too late...the global reference has already happened on import to the this test module). \n\nPlease look at my CR for an example of how to deal with this in your tests: https://review.openstack.org/#/c/115301/5/barbican/tests/tasks/test_certificate_resources.py,cm at line 132 and whereever EVENT_PLUGIN_MANAGER is used.","commit_id":"beb070e94ac39de7a170bf35a8eb3618aab53181"}]}
