)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5419441994d1952f3428dada3a3f2b47ce887f18","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The audit initiator is basically a context with all the information"},{"line_number":10,"context_line":"about the current operation available. This information is all gathered"},{"line_number":11,"context_line":"from the request and context so we can simplify its generation by moving"},{"line_number":12,"context_line":"it onto the request object."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: If91eacd3e07e0d9cd825f92b06c0ac819b3daf8c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9ad45d7e_02bbadc5","line":12,"updated":"2016-08-08 15:53:01.000000000","message":"Does this only apply to CADF notifications?","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5da5931c9afec998dd9104320e9e98fe92204713","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The audit initiator is basically a context with all the information"},{"line_number":10,"context_line":"about the current operation available. This information is all gathered"},{"line_number":11,"context_line":"from the request and context so we can simplify its generation by moving"},{"line_number":12,"context_line":"it onto the request object."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: If91eacd3e07e0d9cd825f92b06c0ac819b3daf8c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3ac371cc_9a771202","line":12,"in_reply_to":"9ad45d7e_02bbadc5","updated":"2016-08-15 00:47:27.000000000","message":"This is basically a refactor. It applies to both.","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"}],"keystone/auth/plugins/mapped.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ca278842c11c351cecd076d21af9881c445540da","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        raise"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        outcome \u003d taxonomy.OUTCOME_SUCCESS"},{"line_number":183,"context_line":"        notifications.send_saml_audit_notification(\u0027authenticate\u0027,"},{"line_number":184,"context_line":"                                                   request,"},{"line_number":185,"context_line":"                                                   user_id, group_ids,"},{"line_number":186,"context_line":"                                                   identity_provider,"},{"line_number":187,"context_line":"                                                   protocol, token_id,"},{"line_number":188,"context_line":"                                                   outcome)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_bc70a9a5","line":185,"range":{"start_line":183,"start_character":0,"end_line":185,"end_character":70},"updated":"2016-07-15 13:04:08.000000000","message":"I think this is the only spot where we may not have the user_id in the context, and that\u0027s why we were passing it in? i don\u0027t recall","commit_id":"ac4b9f0e7d7ffb959efa2fb041cd5e9e989c4cf7"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"83c50d8145a31d3680bd37973e980fa659e42c23","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        raise"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        outcome \u003d taxonomy.OUTCOME_SUCCESS"},{"line_number":183,"context_line":"        notifications.send_saml_audit_notification(\u0027authenticate\u0027,"},{"line_number":184,"context_line":"                                                   request,"},{"line_number":185,"context_line":"                                                   user_id, group_ids,"},{"line_number":186,"context_line":"                                                   identity_provider,"},{"line_number":187,"context_line":"                                                   protocol, token_id,"},{"line_number":188,"context_line":"                                                   outcome)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_675cd7ed","line":185,"range":{"start_line":183,"start_character":0,"end_line":185,"end_character":70},"in_reply_to":"1aa78d24_bc70a9a5","updated":"2016-07-19 23:28:48.000000000","message":"Interesting, so i haven\u0027t actually changed anything here but i think it might have been broken for a while. \n\nWe pass the user_id and group_ids we want to use but then we construct the notification using the context_dict - which probably doesn\u0027t contain anything useful at all. \n\nI would want to check with someone whether what the send_saml_audit_notification function is doing is correct anyway.","commit_id":"ac4b9f0e7d7ffb959efa2fb041cd5e9e989c4cf7"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6c7ac47492ff9a71a949c79ea38d97d6a7e5ff9f","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        ref \u003d self._validate_endpoint_region(ref, request)"},{"line_number":358,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027],"},{"line_number":359,"context_line":"                                               ref,"},{"line_number":360,"context_line":"                                               request.audit_initiator)"},{"line_number":361,"context_line":"        return EndpointV3.wrap_member(request.context_dict, ref)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    @controller.filterprotected(\u0027interface\u0027, \u0027service_id\u0027, \u0027region_id\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_a9f77d57","line":360,"updated":"2016-10-07 15:02:38.000000000","message":"One minor suggestion that we could probably do in a separate patch would be to pass request.audit_initiator as a kwarg since initiator is defined as a kwarg in the manager method signatures.","commit_id":"9117e45d6e7c65f6623c02fd13a599c1b01ed09f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"42b823f90f4e684c2d2bc3a4eae7eeba5b063922","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        ref \u003d self._validate_endpoint_region(ref, request)"},{"line_number":358,"context_line":"        ref \u003d self.catalog_api.create_endpoint(ref[\u0027id\u0027],"},{"line_number":359,"context_line":"                                               ref,"},{"line_number":360,"context_line":"                                               request.audit_initiator)"},{"line_number":361,"context_line":"        return EndpointV3.wrap_member(request.context_dict, ref)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    @controller.filterprotected(\u0027interface\u0027, \u0027service_id\u0027, \u0027region_id\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_db32ca5d","line":360,"in_reply_to":"1a95cdbc_a9f77d57","updated":"2016-10-07 15:03:30.000000000","message":"I\u0027m working on a patch locally to do this since I don\u0027t think it\u0027s worth holding this up. I\u0027ll base it on this patch, steal it if you want!","commit_id":"9117e45d6e7c65f6623c02fd13a599c1b01ed09f"}],"keystone/common/request.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cbb2e772ff8cbb7e18ef69feae97799016c2e7a1","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.Unauthorized()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def audit_initiator(self):"},{"line_number":99,"context_line":"        \"\"\"A pyCADF initiator describing the current authenticated context.\"\"\""},{"line_number":100,"context_line":"        pycadf_host \u003d host.Host(address\u003dself.remote_addr,"},{"line_number":101,"context_line":"                                agent\u003dself.user_agent)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_bf9f2b5e","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":23},"updated":"2016-08-03 13:46:43.000000000","message":"what i\u0027m referring to in notifications.py","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5da5931c9afec998dd9104320e9e98fe92204713","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.Unauthorized()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def audit_initiator(self):"},{"line_number":99,"context_line":"        \"\"\"A pyCADF initiator describing the current authenticated context.\"\"\""},{"line_number":100,"context_line":"        pycadf_host \u003d host.Host(address\u003dself.remote_addr,"},{"line_number":101,"context_line":"                                agent\u003dself.user_agent)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_5a6d9a31","line":98,"in_reply_to":"9ad45d7e_62354945","updated":"2016-08-15 00:47:27.000000000","message":"It shouldn\u0027t matter as far as i can tell. All I\u0027ve done there is refactor the old code that acts like a context for notifications. The same context is used for both cadf and basic.","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5419441994d1952f3428dada3a3f2b47ce887f18","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.Unauthorized()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def audit_initiator(self):"},{"line_number":99,"context_line":"        \"\"\"A pyCADF initiator describing the current authenticated context.\"\"\""},{"line_number":100,"context_line":"        pycadf_host \u003d host.Host(address\u003dself.remote_addr,"},{"line_number":101,"context_line":"                                agent\u003dself.user_agent)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_62354945","line":98,"in_reply_to":"bacf61ea_bf9f2b5e","updated":"2016-08-08 15:53:01.000000000","message":"Does this get executed if keystone is deployed without CADF notifications? What about basic notifications?","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"}],"keystone/notifications.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"83c50d8145a31d3680bd37973e980fa659e42c23","unresolved":false,"context_lines":[{"line_number":625,"context_line":"    :param outcome: One of :class:`pycadf.cadftaxonomy`"},{"line_number":626,"context_line":"    :type outcome: str"},{"line_number":627,"context_line":"    \"\"\""},{"line_number":628,"context_line":"    initiator \u003d _get_request_audit_info(context)"},{"line_number":629,"context_line":"    target \u003d resource.Resource(typeURI\u003dtaxonomy.ACCOUNT_USER)"},{"line_number":630,"context_line":"    audit_type \u003d SAML_AUDIT_TYPE"},{"line_number":631,"context_line":"    user_id \u003d user_id or taxonomy.UNKNOWN"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_e7ed67f0","side":"PARENT","line":628,"updated":"2016-07-19 23:28:48.000000000","message":"see here, we are constructing the initiator (so getting remote_host and stuff) but we never passed in the user_id so that wasn\u0027t getting filled in previously anyway.","commit_id":"4a0970df88b4f80ac564474cce0c29249944b8db"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ca278842c11c351cecd076d21af9881c445540da","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    {\u0027res_id\u0027: resource_id, \u0027event_type\u0027: event_type})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":422,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    :param context: Request context"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_a17366b3","line":421,"range":{"start_line":421,"start_character":4,"end_line":421,"end_character":51},"updated":"2016-07-15 13:04:08.000000000","message":"remove this?","commit_id":"ac4b9f0e7d7ffb959efa2fb041cd5e9e989c4cf7"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"83c50d8145a31d3680bd37973e980fa659e42c23","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    {\u0027res_id\u0027: resource_id, \u0027event_type\u0027: event_type})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":422,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    :param context: Request context"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_c797838e","line":421,"range":{"start_line":421,"start_character":4,"end_line":421,"end_character":51},"in_reply_to":"1aa78d24_a17366b3","updated":"2016-07-19 23:28:48.000000000","message":"I\u0027d like to, there is one other place (in this file) that logs authentication requests where there is no auth context information that i\u0027m leaving it for. \n\nWe could probably inline it for that case but i don\u0027t want to complicate the patch.","commit_id":"ac4b9f0e7d7ffb959efa2fb041cd5e9e989c4cf7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cbb2e772ff8cbb7e18ef69feae97799016c2e7a1","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    {\u0027res_id\u0027: resource_id, \u0027event_type\u0027: event_type})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":422,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    :param context: Request context"},{"line_number":425,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":426,"context_line":"    :returns: Auditing data about the request"},{"line_number":427,"context_line":"    :rtype: :class:`pycadf.Resource`"},{"line_number":428,"context_line":"    \"\"\""},{"line_number":429,"context_line":"    remote_addr \u003d None"},{"line_number":430,"context_line":"    http_user_agent \u003d None"},{"line_number":431,"context_line":"    project_id \u003d None"},{"line_number":432,"context_line":"    domain_id \u003d None"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    if context and \u0027environment\u0027 in context and context[\u0027environment\u0027]:"},{"line_number":435,"context_line":"        environment \u003d context[\u0027environment\u0027]"},{"line_number":436,"context_line":"        remote_addr \u003d environment.get(\u0027REMOTE_ADDR\u0027)"},{"line_number":437,"context_line":"        http_user_agent \u003d environment.get(\u0027HTTP_USER_AGENT\u0027)"},{"line_number":438,"context_line":"        if not user_id:"},{"line_number":439,"context_line":"            user_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":440,"context_line":"                                      {}).get(\u0027user_id\u0027)"},{"line_number":441,"context_line":"        project_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":442,"context_line":"                                     {}).get(\u0027project_id\u0027)"},{"line_number":443,"context_line":"        domain_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":444,"context_line":"                                    {}).get(\u0027domain_id\u0027)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    host \u003d pycadf.host.Host(address\u003dremote_addr, agent\u003dhttp_user_agent)"},{"line_number":447,"context_line":"    initiator \u003d resource.Resource(typeURI\u003dtaxonomy.ACCOUNT_USER, host\u003dhost)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    if user_id:"},{"line_number":450,"context_line":"        initiator.user_id \u003d user_id"},{"line_number":451,"context_line":"        initiator.id \u003d utils.resource_uuid(user_id)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    if project_id:"},{"line_number":454,"context_line":"        initiator.project_id \u003d project_id"},{"line_number":455,"context_line":"    if domain_id:"},{"line_number":456,"context_line":"        initiator.domain_id \u003d domain_id"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    return initiator"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"class CadfNotificationWrapper(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_7fe77312","line":458,"range":{"start_line":421,"start_character":0,"end_line":458,"end_character":20},"updated":"2016-08-03 13:46:43.000000000","message":"for other reviewers, here is where the logic for audit_initiator is coming from when we add it to the request.","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d08e385d7ad80f89a41994778bc23d000166a7d2","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    {\u0027res_id\u0027: resource_id, \u0027event_type\u0027: event_type})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":422,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    :param context: Request context"},{"line_number":425,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":426,"context_line":"    :returns: Auditing data about the request"},{"line_number":427,"context_line":"    :rtype: :class:`pycadf.Resource`"},{"line_number":428,"context_line":"    \"\"\""},{"line_number":429,"context_line":"    remote_addr \u003d None"},{"line_number":430,"context_line":"    http_user_agent \u003d None"},{"line_number":431,"context_line":"    project_id \u003d None"},{"line_number":432,"context_line":"    domain_id \u003d None"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    if context and \u0027environment\u0027 in context and context[\u0027environment\u0027]:"},{"line_number":435,"context_line":"        environment \u003d context[\u0027environment\u0027]"},{"line_number":436,"context_line":"        remote_addr \u003d environment.get(\u0027REMOTE_ADDR\u0027)"},{"line_number":437,"context_line":"        http_user_agent \u003d environment.get(\u0027HTTP_USER_AGENT\u0027)"},{"line_number":438,"context_line":"        if not user_id:"},{"line_number":439,"context_line":"            user_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":440,"context_line":"                                      {}).get(\u0027user_id\u0027)"},{"line_number":441,"context_line":"        project_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":442,"context_line":"                                     {}).get(\u0027project_id\u0027)"},{"line_number":443,"context_line":"        domain_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":444,"context_line":"                                    {}).get(\u0027domain_id\u0027)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    host \u003d pycadf.host.Host(address\u003dremote_addr, agent\u003dhttp_user_agent)"},{"line_number":447,"context_line":"    initiator \u003d resource.Resource(typeURI\u003dtaxonomy.ACCOUNT_USER, host\u003dhost)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    if user_id:"},{"line_number":450,"context_line":"        initiator.user_id \u003d user_id"},{"line_number":451,"context_line":"        initiator.id \u003d utils.resource_uuid(user_id)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    if project_id:"},{"line_number":454,"context_line":"        initiator.project_id \u003d project_id"},{"line_number":455,"context_line":"    if domain_id:"},{"line_number":456,"context_line":"        initiator.domain_id \u003d domain_id"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    return initiator"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"class CadfNotificationWrapper(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_a94a52aa","line":458,"range":{"start_line":421,"start_character":0,"end_line":458,"end_character":20},"in_reply_to":"3ac371cc_eb89eccb","updated":"2016-08-16 05:13:50.000000000","message":"it\u0027s still used in places where the context is not the same as the auth context, like when you\u0027re doing saml auth. I\u0027ll remove it ASAP, but for this review i\u0027m just catching the common case.","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a87ac271314970c3bf4a9134350338d21a10afc0","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    {\u0027res_id\u0027: resource_id, \u0027event_type\u0027: event_type})"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":422,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    :param context: Request context"},{"line_number":425,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":426,"context_line":"    :returns: Auditing data about the request"},{"line_number":427,"context_line":"    :rtype: :class:`pycadf.Resource`"},{"line_number":428,"context_line":"    \"\"\""},{"line_number":429,"context_line":"    remote_addr \u003d None"},{"line_number":430,"context_line":"    http_user_agent \u003d None"},{"line_number":431,"context_line":"    project_id \u003d None"},{"line_number":432,"context_line":"    domain_id \u003d None"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    if context and \u0027environment\u0027 in context and context[\u0027environment\u0027]:"},{"line_number":435,"context_line":"        environment \u003d context[\u0027environment\u0027]"},{"line_number":436,"context_line":"        remote_addr \u003d environment.get(\u0027REMOTE_ADDR\u0027)"},{"line_number":437,"context_line":"        http_user_agent \u003d environment.get(\u0027HTTP_USER_AGENT\u0027)"},{"line_number":438,"context_line":"        if not user_id:"},{"line_number":439,"context_line":"            user_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":440,"context_line":"                                      {}).get(\u0027user_id\u0027)"},{"line_number":441,"context_line":"        project_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":442,"context_line":"                                     {}).get(\u0027project_id\u0027)"},{"line_number":443,"context_line":"        domain_id \u003d environment.get(\u0027KEYSTONE_AUTH_CONTEXT\u0027,"},{"line_number":444,"context_line":"                                    {}).get(\u0027domain_id\u0027)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    host \u003d pycadf.host.Host(address\u003dremote_addr, agent\u003dhttp_user_agent)"},{"line_number":447,"context_line":"    initiator \u003d resource.Resource(typeURI\u003dtaxonomy.ACCOUNT_USER, host\u003dhost)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    if user_id:"},{"line_number":450,"context_line":"        initiator.user_id \u003d user_id"},{"line_number":451,"context_line":"        initiator.id \u003d utils.resource_uuid(user_id)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    if project_id:"},{"line_number":454,"context_line":"        initiator.project_id \u003d project_id"},{"line_number":455,"context_line":"    if domain_id:"},{"line_number":456,"context_line":"        initiator.domain_id \u003d domain_id"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    return initiator"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"class CadfNotificationWrapper(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_eb89eccb","line":458,"range":{"start_line":421,"start_character":0,"end_line":458,"end_character":20},"in_reply_to":"bacf61ea_7fe77312","updated":"2016-08-15 21:36:31.000000000","message":"so perhaps this can now be removed?","commit_id":"8109085b25b6c607c79052154835f55d3cfcfd33"}]}
