예제 #1
0
  def Handle(self, args, token=None):
    hunt_urn = args.hunt_id.ToURN()
    hunt = aff4.FACTORY.Open(
        hunt_urn, aff4_type=implementation.GRRHunt, token=token)

    hunt_api_object = ApiHunt().InitFromAff4Object(hunt)
    description = ("Files downloaded by hunt %s (%s, '%s') created by user %s "
                   "on %s" % (hunt_api_object.name,
                              hunt_api_object.urn.Basename(),
                              hunt_api_object.description,
                              hunt_api_object.creator, hunt_api_object.created))

    collection = implementation.GRRHunt.ResultCollectionForHID(hunt_urn)

    target_file_prefix = "hunt_" + hunt.urn.Basename().replace(":", "_")

    if args.archive_format == args.ArchiveFormat.ZIP:
      archive_format = api_call_handler_utils.CollectionArchiveGenerator.ZIP
      file_extension = ".zip"
    elif args.archive_format == args.ArchiveFormat.TAR_GZ:
      archive_format = api_call_handler_utils.CollectionArchiveGenerator.TAR_GZ
      file_extension = ".tar.gz"
    else:
      raise ValueError("Unknown archive format: %s" % args.archive_format)

    generator = api_call_handler_utils.CollectionArchiveGenerator(
        prefix=target_file_prefix,
        description=description,
        archive_format=archive_format)
    content_generator = self._WrapContentGenerator(
        generator, collection, args, token=token)
    return api_call_handler_base.ApiBinaryStream(
        target_file_prefix + file_extension,
        content_generator=content_generator)
예제 #2
0
    def Handle(self, args, token=None):
        flow_urn = args.flow_id.ResolveClientFlowURN(args.client_id,
                                                     token=token)
        flow_obj = aff4.FACTORY.Open(flow_urn,
                                     aff4_type=flow.GRRFlow,
                                     mode="r",
                                     token=token)

        flow_api_object = ApiFlow().InitFromAff4Object(flow_obj,
                                                       flow_id=args.flow_id)
        description = (
            "Files downloaded by flow %s (%s) that ran on client %s by "
            "user %s on %s" %
            (flow_api_object.name, args.flow_id, args.client_id,
             flow_api_object.creator, flow_api_object.started_at))

        collection_urn = flow_obj.GetRunner().output_urn
        target_file_prefix = "%s_flow_%s_%s" % (
            args.client_id, flow_obj.runner_args.flow_name,
            flow_urn.Basename().replace(":", "_"))

        collection = aff4.FACTORY.Open(collection_urn, token=token)

        if args.archive_format == args.ArchiveFormat.ZIP:
            archive_format = api_call_handler_utils.CollectionArchiveGenerator.ZIP
            file_extension = ".zip"
        elif args.archive_format == args.ArchiveFormat.TAR_GZ:
            archive_format = api_call_handler_utils.CollectionArchiveGenerator.TAR_GZ
            file_extension = ".tar.gz"
        else:
            raise ValueError("Unknown archive format: %s" %
                             args.archive_format)

        generator = api_call_handler_utils.CollectionArchiveGenerator(
            prefix=target_file_prefix,
            description=description,
            archive_format=archive_format,
            predicate=self._BuildPredicate(args.client_id, token=token),
            client_id=args.client_id.ToClientURN())
        content_generator = self._WrapContentGenerator(generator,
                                                       collection,
                                                       args,
                                                       token=token)
        return api_call_handler_base.ApiBinaryStream(
            target_file_prefix + file_extension,
            content_generator=content_generator)
  def _GenerateArchive(
      self,
      collection,
      archive_format=api_call_handler_utils.CollectionArchiveGenerator.ZIP):

    self.fd_path = os.path.join(self.temp_dir, "archive")

    archive_generator = api_call_handler_utils.CollectionArchiveGenerator(
        archive_format=archive_format,
        prefix="test_prefix",
        description="Test description")
    with open(self.fd_path, "w") as out_fd:
      for chunk in archive_generator.Generate(collection, token=self.token):
        out_fd.write(chunk)

    self.fd = open(self.fd_path, "r")
    return self.fd, self.fd_path