Exemple #1
0
async def test_EVENT_AMT_MODIFIED(system):
    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_MODIFIED, handler)

    amt = AnalysisModuleType("test", "")
    await system.register_analysis_module_type(amt)

    assert handler.event is None

    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_MODIFIED, handler)

    # still not modified yet
    await system.register_analysis_module_type(amt)

    assert handler.event is None

    # modify version
    amt.version = "1.0.1"

    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_MODIFIED, handler)

    # modified this time
    await system.register_analysis_module_type(amt)

    await handler.wait()
    assert handler.event.name == EVENT_AMT_MODIFIED
    assert AnalysisModuleType.from_dict(handler.event.args) == amt
Exemple #2
0
    def from_dict(value: dict,
                  system: "ace.system.ACESystem") -> "AnalysisRequest":
        assert isinstance(value, dict)

        data = AnalysisRequestModel(**value)

        root = None
        if isinstance(data.root, RootAnalysisModel):
            root = RootAnalysis.from_dict(data.root.dict(), system=system)

        observable = None
        if data.observable:
            observable = Observable.from_dict(data.observable.dict(), root)
            observable = root.get_observable(observable)

        type = None
        if data.type:
            type = AnalysisModuleType.from_dict(data.type.dict())

        ar = AnalysisRequest(system, root, observable, type)
        ar.id = data.id
        # ar.dependency_analysis = json_data["dependency_analysis"]
        ar.status = data.status
        ar.owner = data.owner

        if data.original_root:
            ar.original_root = RootAnalysis.from_dict(
                data.original_root.dict(), system)

        if data.modified_root:
            ar.modified_root = RootAnalysis.from_dict(
                data.modified_root.dict(), system)

        return ar
Exemple #3
0
    async def register_analysis_module_type(
            self, amt: AnalysisModuleType) -> AnalysisModuleType:
        assert isinstance(amt, AnalysisModuleType)
        async with self.get_client() as client:
            response = await client.post("/amt", json=amt.to_dict())

        _raise_exception_on_error(response)
        return AnalysisModuleType.from_dict(response.json())
Exemple #4
0
 async def i_get_all_analysis_module_types(
         self) -> list[AnalysisModuleType]:
     async with self.get_db() as db:
         return [
             AnalysisModuleType.from_dict(json.loads(_[0].json_data))
             for _ in (
                 await db.execute(select(AnalysisModuleTracking))).all()
         ]
Exemple #5
0
    async def get_analysis_module_type(
            self, name: str) -> Union[AnalysisModuleType, None]:
        assert isinstance(name, str) and name
        async with self.get_client() as client:
            response = await client.get(f"/amt/{name}")

        _raise_exception_on_error(response)
        if response.status_code == 404:
            return None

        return AnalysisModuleType.from_dict(response.json())
Exemple #6
0
    async def i_get_analysis_module_type(
            self, name: str) -> Union[AnalysisModuleType, None]:
        async with self.get_db() as db:
            db_amt = (await db.execute(
                select(AnalysisModuleTracking).where(
                    AnalysisModuleTracking.name == name))).scalar()

            if db_amt is None:
                return None

            return AnalysisModuleType.from_dict(json.loads(db_amt.json_data))
def test_analysis_module_type_serialization():
    amt = AnalysisModuleType(
        name="test",
        description="test",
        observable_types=["test1", "test2"],
        directives=["test1", "test2"],
        dependencies=["test1", "test2"],
        tags=["test1", "test2"],
        modes=["test1", "test2"],
        cache_ttl=60,
        extended_version={"test1": "test2"},
        types=["test1", "test2"],
    )

    assert amt == AnalysisModuleType.from_dict(amt.to_dict())
    assert amt == AnalysisModuleType.from_json(amt.to_json())
Exemple #8
0
async def test_EVENT_AMT_DELETED(system):
    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_DELETED, handler)

    amt = AnalysisModuleType("test", "")
    await system.register_analysis_module_type(amt)
    await system.delete_analysis_module_type(amt)

    await handler.wait()
    assert handler.event.name == EVENT_AMT_DELETED
    assert AnalysisModuleType.from_dict(handler.event.args) == amt

    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_DELETED, handler)
    await system.delete_analysis_module_type(amt)

    assert handler.event is None
Exemple #9
0
async def test_EVENT_AMT_NEW(system):
    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_NEW, handler)

    amt = AnalysisModuleType("test", "")
    await system.register_analysis_module_type(amt)

    await handler.wait()
    assert handler.event.name == EVENT_AMT_NEW
    assert AnalysisModuleType.from_dict(handler.event.args) == amt

    handler = TestEventHandler()
    await system.register_event_handler(EVENT_AMT_NEW, handler)

    # already registered so should not be new
    await system.register_analysis_module_type(amt)

    assert handler.event is None
Exemple #10
0
async def api_register_analysis_module_type(amt: AnalysisModuleTypeModel):
    try:
        result = await app.state.system.register_analysis_module_type(AnalysisModuleType.from_dict(amt.dict()))
        return result.to_dict()
    except ACEError as e:
        return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())