Пример #1
0
    def test_invalid_configuration(self):
        # Explicitly want a clean CWD here.
        set_cwd(tempfile.mkdtemp())
        cuckoo_create()

        cf = CuckooFeedback()

        with pytest.raises(CuckooFeedbackError) as e:
            cf.send_feedback(CuckooFeedbackObject(
                name=None, email="*****@*****.**", company="foo"
            ))
        e.match("Could not validate")

        with pytest.raises(CuckooFeedbackError) as e:
            cf.send_feedback(CuckooFeedbackObject(
                name="foo", email=None, company="foo"
            ))
        e.match("Could not validate")

        with pytest.raises(CuckooFeedbackError) as e:
            cf.send_feedback(CuckooFeedbackObject(
                name="foo", email="a@b,com", company="foo"
            ))
        e.match("Could not validate")

        with pytest.raises(CuckooFeedbackError) as e:
            cf.send_feedback(CuckooFeedbackObject(
                name="foo", email="*****@*****.**", company=None
            ))
        e.match("Could not validate")
Пример #2
0
    def feedback_send(request, body):
        f = CuckooFeedback()

        task_id = body.get("task_id")
        if task_id and task_id.isdigit():
            task_id = int(task_id)

        try:
            feedback_id = f.send_form(task_id=task_id,
                                      name=body.get("name"),
                                      company=body.get("company"),
                                      email=body.get("email"),
                                      message=body.get("message"),
                                      json_report=body.get(
                                          "include_analysis", False),
                                      memdump=body.get("include_memdump",
                                                       False))
        except CuckooFeedbackError as e:
            return json_error_response(str(e))

        return JsonResponse({
            "status": True,
            "feedback_id": feedback_id,
        },
                            safe=False)
Пример #3
0
 def process_exception(self, request, exception):
     request.exception = exception
     try:
         feedback = CuckooFeedback()
         feedback.send_exception(exception, request)
     except CuckooFeedbackError as e:
         log.warning("Error providing feedback to the backend: %s" % e)
Пример #4
0
    def test_send_data(self, p, q):
        q._get_report.return_value = self.report(
            "tests/files/sample_analysis_storage"
        )

        p.post.return_value.json.return_value = {
            "status": True, "feedback_id": 1,
        }

        feedback = CuckooFeedback()
        cf = CuckooFeedbackObject(
            "message", "*****@*****.**", "name", "company", True
        )
        cf.include_report_web(1)
        cf.include_analysis()
        assert feedback.send_feedback(cf) == 1

        p.post.assert_called_once_with(
            feedback.endpoint,
            data={
                "feedback": mock.ANY,
            },
            files={
                "file": mock.ANY,
            },
            headers=mock.ANY
        )

        # Ensure that the second entry for each file is an open file handle.
        files = p.post.call_args[1]["files"]
        z = zipfile.ZipFile(files["file"])
        assert "Starting analyzer" in z.read("analysis.log")
        assert len(z.read("cuckoo.log")) == 15274
Пример #5
0
    def test_send_data(self, p, q):
        q._get_report.return_value = self.report(
            "tests/files/sample_analysis_storage")

        p.post.return_value.json.return_value = {
            "status": True,
            "feedback_id": 1,
        }

        feedback = CuckooFeedback()
        cf = CuckooFeedbackObject("message", "*****@*****.**", "name",
                                  "company", True)
        cf.include_report_web(1)
        cf.include_analysis()
        assert feedback.send_feedback(cf) == 1

        p.post.assert_called_once_with(feedback.endpoint,
                                       data={
                                           "feedback": mock.ANY,
                                       },
                                       files={
                                           "file": mock.ANY,
                                       },
                                       headers=mock.ANY)

        # Ensure that the second entry for each file is an open file handle.
        files = p.post.call_args[1]["files"]
        z = zipfile.ZipFile(files["file"])
        assert "Starting analyzer" in z.read("analysis.log")
        assert len(z.read("cuckoo.log")) == 15274
Пример #6
0
 def process_exception(self, request, exception):
     request.exception = exception
     try:
         feedback = CuckooFeedback()
         feedback.send_exception(exception, request)
     except CuckooFeedbackError as e:
         log.warning(
             "Error providing feedback to the backend: %s" % e
         )
Пример #7
0
    def test_exception_no_analysis(self):
        feedback = CuckooFeedback()
        responses.add(responses.POST,
                      feedback.endpoint,
                      json={
                          "status": True,
                          "feedback_id": 1,
                      },
                      status=200)

        assert feedback.send_exception(Exception("Mock Exception"), None) == 1
Пример #8
0
    def test_exception_no_analysis(self):
        feedback = CuckooFeedback()
        responses.add(
            responses.POST, feedback.endpoint, json={
                "status": True,
                "feedback_id": 1,
            }, status=200
        )

        assert feedback.send_exception(
            Exception("Mock Exception"), None
        ) == 1
Пример #9
0
    def run(self, results):
        # Nothing to see here.
        if not results.get("debug", {}).get("errors"):
            return

        feedback = CuckooFeedback()
        if not feedback.enabled():
            return

        fo = CuckooFeedbackObject(
            message="One or more errors occurred during an analysis",
            automated=True)

        for error in results["debug"]["errors"]:
            fo.add_error(error)

        fo.gather_export_files(self.analysis_path)
        feedback.send_feedback(fo)
Пример #10
0
    def test_include_404_report(self, p, q):
        class request(object):
            method = "GET"

            class resolver_match(object):
                kwargs = {
                    "task_id": 1,
                }

        q._get_report.return_value = {}
        p.return_value.report = None
        p.return_value.validate.side_effect = CuckooFeedbackError

        with pytest.raises(CuckooFeedbackError):
            feedback = CuckooFeedback()
            feedback.send_exception(Exception, request)

        p.return_value.include_report_web.assert_called_once()
        p.return_value.include_analysis.assert_not_called()
Пример #11
0
    def test_send_data(self, p, q, c):
        set_cwd(tempfile.mkdtemp())
        fake_task = cwd(analysis=1)
        shutil.copytree("tests/files/sample_analysis_storage", fake_task)

        q.get_report.return_value = self.report(
            "tests/files/sample_analysis_storage")

        p.post.return_value.json.return_value = {
            "status": True,
            "feedback_id": 1,
        }

        c.from_confdir.return_value = {}

        feedback = CuckooFeedback()
        cf = CuckooFeedbackObject("message",
                                  "*****@*****.**",
                                  "name",
                                  "company",
                                  True,
                                  include_files=True,
                                  task_id=1)
        cf.include_report_web(1)
        assert feedback.send_feedback(cf) == 1

        p.post.assert_called_once_with(feedback.endpoint,
                                       data={
                                           "feedback": mock.ANY,
                                       },
                                       files={
                                           "file": mock.ANY,
                                       },
                                       headers=mock.ANY)

        # Ensure that the second entry for each file is an open file handle.
        files = p.post.call_args[1]["files"]
        z = zipfile.ZipFile(files["file"])

        assert "Starting analyzer" in z.read("analysis.log")
        assert len(z.read("cuckoo.log")) == 15274
        shutil.rmtree(fake_task)
Пример #12
0
    def feedback_send(request, body):
        f = CuckooFeedback()

        task_id = body.get("task_id")
        if task_id and task_id.isdigit():
            task_id = int(task_id)

        try:
            feedback_id = f.send_form(
                task_id=task_id,
                name=body.get("name"),
                company=body.get("company"),
                email=body.get("email"),
                message=body.get("message"),
                json_report=body.get("include_analysis", False),
                memdump=body.get("include_memdump", False)
            )
        except CuckooFeedbackError as e:
            return json_error_response(str(e))

        return JsonResponse({
            "status": True,
            "feedback_id": feedback_id,
        }, safe=False)
Пример #13
0
    def test_exception_middleware(self, rf):
        feedback = CuckooFeedback()
        responses.add(
            responses.POST, feedback.endpoint, json={
                "status": True,
                "feedback_id": 0,
            }, status=200
        )

        try:
            raise Exception("This is an exception!")
        except Exception as e:
            em = ExceptionMiddleware()
            assert em.process_exception(
                rf.get("/analysis/1/summary"), e
            ) is None