Example #1
0
    def Handle(self, args, context=None):
        client_id = str(args.client_id)
        flow_id = str(args.operation_id)

        precondition.ValidateClientId(client_id)
        precondition.ValidateFlowId(flow_id)

        # TODO(user): test both exception scenarios below.
        try:
            flow_obj = data_store.REL_DB.ReadFlowObject(client_id, flow_id)
        except db.UnknownFlowError:
            raise InterrogateOperationNotFoundError(
                "Operation with id %s not found" % args.operation_id)

        expected_flow_name = compatibility.GetName(discovery.Interrogate)
        if flow_obj.flow_class_name != expected_flow_name:
            raise InterrogateOperationNotFoundError(
                "Operation with id %s not found" % args.operation_id)

        complete = flow_obj.flow_state != flow_obj.FlowState.RUNNING

        result = ApiGetInterrogateOperationStateResult()
        if complete:
            result.state = ApiGetInterrogateOperationStateResult.State.FINISHED
        else:
            result.state = ApiGetInterrogateOperationStateResult.State.RUNNING

        return result
Example #2
0
    def Handle(self, args, token=None):
        if data_store.RelationalDBEnabled():
            client_id = str(args.client_id)
            flow_id = str(args.operation_id)

            precondition.ValidateClientId(client_id)
            precondition.ValidateFlowId(flow_id)

            # TODO(user): test both exception scenarios below.
            try:
                flow_obj = data_store.REL_DB.ReadFlowObject(client_id, flow_id)
            except db.UnknownFlowError:
                raise InterrogateOperationNotFoundError(
                    "Operation with id %s not found" % args.operation_id)

            expected_flow_name = compatibility.GetName(discovery.Interrogate)
            if flow_obj.flow_class_name != expected_flow_name:
                raise InterrogateOperationNotFoundError(
                    "Operation with id %s not found" % args.operation_id)

            complete = flow_obj.flow_state != flow_obj.FlowState.RUNNING
        else:
            try:
                flow_obj = aff4.FACTORY.Open(args.operation_id,
                                             aff4_type=aff4_flows.Interrogate,
                                             token=token)

                complete = not flow_obj.GetRunner().IsRunning()
            except aff4.InstantiationError:
                raise InterrogateOperationNotFoundError(
                    "Operation with id %s not found" % args.operation_id)

        result = ApiGetInterrogateOperationStateResult()
        if complete:
            result.state = ApiGetInterrogateOperationStateResult.State.FINISHED
        else:
            result.state = ApiGetInterrogateOperationStateResult.State.RUNNING

        return result