Ejemplo n.º 1
0
    def InitFromDatabaseObject(self, db_obj, approval_subject_obj=None):
        _InitApiApprovalFromDatabaseObject(self, db_obj)

        if not approval_subject_obj:
            approval_subject_obj = data_store.REL_DB.ReadHuntObject(
                db_obj.subject_id)
            approval_subject_counters = data_store.REL_DB.ReadHuntCounters(
                db_obj.subject_id)
            self.subject = api_hunt.ApiHunt().InitFromHuntObject(
                approval_subject_obj,
                hunt_counters=approval_subject_counters,
                with_full_summary=True)
        original_object = approval_subject_obj.original_object

        if original_object.object_type == "FLOW_REFERENCE":
            original_flow = data_store.REL_DB.ReadFlowObject(
                original_object.flow_reference.client_id,
                original_object.flow_reference.flow_id)
            self.copied_from_flow = api_flow.ApiFlow().InitFromFlowObject(
                original_flow)
        elif original_object.object_type == "HUNT_REFERENCE":
            original_hunt = data_store.REL_DB.ReadHuntObject(
                original_object.hunt_reference.hunt_id)
            original_hunt_counters = data_store.REL_DB.ReadHuntCounters(
                original_object.hunt_reference.hunt_id)
            self.copied_from_hunt = api_hunt.ApiHunt().InitFromHuntObject(
                original_hunt,
                hunt_counters=original_hunt_counters,
                with_full_summary=True)

        return self
Ejemplo n.º 2
0
    def testDoesNothingIfArgsHaveNoChanges(self):
        before = hunt_plugin.ApiHunt().InitFromAff4Object(
            aff4.FACTORY.Open(self.hunt.urn, token=self.token))

        self.handler.Handle(self.args, token=self.token)

        after = hunt_plugin.ApiHunt().InitFromAff4Object(
            aff4.FACTORY.Open(self.hunt.urn, token=self.token))

        self.assertEqual(before, after)
Ejemplo n.º 3
0
    def testDoesNothingIfArgsHaveNoChanges(self):
        before = hunt_plugin.ApiHunt().InitFromHuntObject(
            data_store.REL_DB.ReadHuntObject(self.hunt_id))

        self.handler.Handle(self.args, token=self.token)

        after = hunt_plugin.ApiHunt().InitFromHuntObject(
            data_store.REL_DB.ReadHuntObject(self.hunt_id))

        self.assertEqual(before, after)
Ejemplo n.º 4
0
    def testDoesNotModifyHuntIfStateChangeFails(self):
        self.args.client_limit = 42
        self.args.state = "COMPLETED"
        with self.assertRaises(hunt_plugin.InvalidHuntStateError):
            self.handler.Handle(self.args, token=self.token)

        if data_store.RelationalDBEnabled():
            after = hunt_plugin.ApiHunt().InitFromHuntObject(
                data_store.REL_DB.ReadHuntObject(self.hunt_id))
        else:
            after = hunt_plugin.ApiHunt().InitFromAff4Object(
                aff4.FACTORY.Open(self.hunt_urn, token=self.token))
        self.assertNotEqual(after.client_limit, 42)
Ejemplo n.º 5
0
    def testModifiesHuntCorrectly(self):
        self.args.client_rate = 100
        self.args.client_limit = 42
        self.args.duration = rdfvalue.Duration("1d")

        self.handler.Handle(self.args, token=self.token)

        if data_store.RelationalDBEnabled():
            after = hunt_plugin.ApiHunt().InitFromHuntObject(
                data_store.REL_DB.ReadHuntObject(self.hunt_id))
        else:
            after = hunt_plugin.ApiHunt().InitFromAff4Object(
                aff4.FACTORY.Open(self.hunt_urn, token=self.token))

        self.assertEqual(after.client_rate, 100)
        self.assertEqual(after.client_limit, 42)
        self.assertEqual(after.duration, rdfvalue.Duration("1d"))
Ejemplo n.º 6
0
    def testDoesNotModifyHuntIfStateChangeFails(self):
        with self.assertRaises(hunt_plugin.InvalidHuntStateError):
            self.args.client_limit = 42
            self.args.state = "COMPLETED"
            self.handler.Handle(self.args, token=self.token)

        after = hunt_plugin.ApiHunt().InitFromAff4Object(
            aff4.FACTORY.Open(self.hunt.urn, token=self.token))
        self.assertNotEqual(after.client_limit, 42)
Ejemplo n.º 7
0
    def testDoesNothingIfArgsHaveNoChanges(self):
        if data_store.RelationalDBEnabled():
            before = hunt_plugin.ApiHunt().InitFromHuntObject(
                data_store.REL_DB.ReadHuntObject(self.hunt_id))
        else:
            before = hunt_plugin.ApiHunt().InitFromAff4Object(
                aff4.FACTORY.Open(self.hunt_urn, token=self.token))

        self.handler.Handle(self.args, token=self.token)

        if data_store.RelationalDBEnabled():
            after = hunt_plugin.ApiHunt().InitFromHuntObject(
                data_store.REL_DB.ReadHuntObject(self.hunt_id))
        else:
            after = hunt_plugin.ApiHunt().InitFromAff4Object(
                aff4.FACTORY.Open(self.hunt_urn, token=self.token))

        self.assertEqual(before, after)
Ejemplo n.º 8
0
  def testModifiesHuntCorrectly(self):
    self.args.client_rate = 100
    self.args.client_limit = 42
    self.args.expires = rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42)

    self.handler.Handle(self.args, token=self.token)

    if data_store.RelationalDBReadEnabled("hunts"):
      after = hunt_plugin.ApiHunt().InitFromHuntObject(
          data_store.REL_DB.ReadHuntObject(self.hunt_id))
    else:
      after = hunt_plugin.ApiHunt().InitFromAff4Object(
          aff4.FACTORY.Open(self.hunt_urn, token=self.token))

    self.assertEqual(after.client_rate, 100)
    self.assertEqual(after.client_limit, 42)
    self.assertEqual(after.expires,
                     rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))
Ejemplo n.º 9
0
    def testModifiesHuntCorrectly(self):
        self.args.client_rate = 100
        self.args.client_limit = 42
        self.args.expires = rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42)

        self.handler.Handle(self.args, token=self.token)

        after = hunt_plugin.ApiHunt().InitFromAff4Object(
            aff4.FACTORY.Open(self.hunt.urn, token=self.token))
        self.assertEqual(after.client_rate, 100)
        self.assertEqual(after.client_limit, 42)
        self.assertEqual(after.expires,
                         rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))
Ejemplo n.º 10
0
    def testModifiesHuntCorrectly(self):
        self.args.client_rate = 100
        self.args.client_limit = 42
        self.args.duration = rdfvalue.DurationSeconds("1d")

        self.handler.Handle(self.args, token=self.token)

        after = hunt_plugin.ApiHunt().InitFromHuntObject(
            data_store.REL_DB.ReadHuntObject(self.hunt_id))

        self.assertEqual(after.client_rate, 100)
        self.assertEqual(after.client_limit, 42)
        self.assertEqual(after.duration, rdfvalue.DurationSeconds("1d"))
Ejemplo n.º 11
0
    def testModifiesHuntCorrectly(self):
        duration = rdfvalue.Duration("1w")

        self.args.client_rate = 100
        self.args.client_limit = 42
        self.args.expires = rdfvalue.RDFDatetime.Now() + duration

        self.handler.Handle(self.args, token=self.token)

        if data_store.RelationalDBReadEnabled():
            after = hunt_plugin.ApiHunt().InitFromHuntObject(
                data_store.REL_DB.ReadHuntObject(self.hunt_id))
        else:
            after = hunt_plugin.ApiHunt().InitFromAff4Object(
                aff4.FACTORY.Open(self.hunt_urn, token=self.token))

        self.assertEqual(after.client_rate, 100)
        self.assertEqual(after.client_limit, 42)

        # TODO: The test should not modify expiry time (because it
        # should not be possible to modify it). Instead, it should modify duration
        # and test that for change.
        now = rdfvalue.RDFDatetime.Now()
        self.assertBetween(after.expires - duration, after.created, now)