async def api_create_api_key( response: Response, name: str = Form( ..., description="The name of the API key. The name must be unique."), description: Optional[str] = Form( None, description= "An optional description that adds additional context to an api key."), is_admin: Optional[bool] = Form( False, description= "Set this to True to create an admin-level api key. Defaults to a standard api key." ), ): try: result = await app.state.system.create_api_key(name, description, is_admin) if result: response.status_code = 201 return result.to_model().dict() return ApiKeyModel(api_key=result).dict() else: response.status_code = 200 return ApiKeyModel(api_key="").dict() except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
def _raise_exception_on_error(response): if response.status_code == 400: _raise_exception_from_error_model(ErrorModel.parse_obj( response.json())) elif response.status_code == 401: raise InvalidApiKeyError() elif response.status_code == 403: raise InvalidAccessError()
async def api_process_analysis_request(request: AnalysisRequestModel): try: await app.state.system.process_analysis_request( AnalysisRequest.from_dict(request.dict(), app.state.system)) return Response(status_code=200) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_get_api_keys(response: Response): try: result = await app.state.system.get_api_keys() response.status_code = 200 return ApiKeyListModel(api_keys=[_.to_model() for _ in result]).dict() except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_set_config(setting: ConfigurationSetting, ): try: await app.state.system.set_config(setting.name, setting.value, documentation=setting.documentation) return Response(status_code=201) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_delete_api_key(name: str = Path( ..., description="The name of the api key to delete.")): try: result = await app.state.system.delete_api_key(name) if result: return Response(status_code=200) else: return Response(status_code=404) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_get_analysis_details(uuid: str = Path( ..., description="The uuid of the analysis.")): try: result = await app.state.system.get_analysis_details(uuid) if result: return result else: raise HTTPException(status_code=404) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_unregister_alert_system(name: str = Path( ..., description="The name of the AMS to remove.")): try: result = await app.state.system.unregister_alert_system(name) if result: return Response(status_code=200) else: return Response(status_code=404) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_delete_config( key: str = Query(..., description="The configuration path to delete."), ): try: result = await app.state.system.delete_config(key) if result: return Response(status_code=200) else: raise HTTPException(status_code=404) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_register_alert_system(name: str = Path( ..., description= "The name of the alert management system. The name must be unique.")): try: result = await app.state.system.register_alert_system(name) if result: return Response(status_code=201) else: return Response(status_code=200) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
async def api_get_next_analysis_request(query: AnalysisRequestQueryModel): try: result = await app.state.system.get_next_analysis_request( query.owner, query.amt, timeout=query.timeout, version=query.version, extended_version=query.extended_version, ) except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict()) if not result: return Response(status_code=204) return result.to_model()
async def api_get_alerts( name: str = Path(..., description="The name of the AMS to acquire alerts for."), timeout: Optional[int] = Query( None, description= "Optional timeout (in seconds) of how long to wait if the queue is empty." ), ): try: result = await app.state.system.get_alerts(name, timeout) return AlertListModel(root_uuids=result).dict() except ACEError as e: return JSONResponse(status_code=400, content=ErrorModel(code=e.code, details=str(e)).dict())
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())