Testing: Stabilized test suite and achieved 93% total coverage.
- Fixed CLI tests by patching local imports at source (psutil, os, Path). - Fixed Collector tests by globalizing docker.from_env mock. - Stabilized SSE stream tests via AsyncMock and immediate generator termination to prevent hangs. - Achieved >80% coverage on CLI (84%), Collector (97%), and DB Repository (100%). - Implemented SMTP Relay service tests (100%).
This commit is contained in:
419
ast_graph.md
Normal file
419
ast_graph.md
Normal file
@@ -0,0 +1,419 @@
|
||||
# DECNET Codebase AST Graph
|
||||
|
||||
This diagram shows the structural organization of the DECNET project, extracted directly from the Python Abstract Syntax Tree (AST). It includes modules (prefixed with `Module_`), their internal functions, and the classes and methods they contain.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Module_distros {
|
||||
+random_hostname()
|
||||
+get_distro()
|
||||
+random_distro()
|
||||
+all_distros()
|
||||
}
|
||||
class distros_DistroProfile {
|
||||
}
|
||||
Module_distros ..> distros_DistroProfile : contains
|
||||
|
||||
class custom_service_CustomService {
|
||||
+__init__()
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_custom_service ..> custom_service_CustomService : contains
|
||||
class Module_os_fingerprint {
|
||||
+get_os_sysctls()
|
||||
+all_os_families()
|
||||
}
|
||||
|
||||
class Module_network {
|
||||
+_run()
|
||||
+detect_interface()
|
||||
+detect_subnet()
|
||||
+get_host_ip()
|
||||
+allocate_ips()
|
||||
+create_macvlan_network()
|
||||
+create_ipvlan_network()
|
||||
+remove_macvlan_network()
|
||||
+_require_root()
|
||||
+setup_host_macvlan()
|
||||
+teardown_host_macvlan()
|
||||
+setup_host_ipvlan()
|
||||
+teardown_host_ipvlan()
|
||||
+ips_to_range()
|
||||
}
|
||||
|
||||
class Module_env {
|
||||
+_port()
|
||||
+_require_env()
|
||||
}
|
||||
|
||||
class Module_config {
|
||||
+random_hostname()
|
||||
+save_state()
|
||||
+load_state()
|
||||
+clear_state()
|
||||
}
|
||||
class config_DeckyConfig {
|
||||
+services_not_empty()
|
||||
}
|
||||
Module_config ..> config_DeckyConfig : contains
|
||||
class config_DecnetConfig {
|
||||
}
|
||||
Module_config ..> config_DecnetConfig : contains
|
||||
class Module_ini_loader {
|
||||
+load_ini()
|
||||
+load_ini_from_string()
|
||||
+validate_ini_string()
|
||||
+_parse_configparser()
|
||||
}
|
||||
class ini_loader_DeckySpec {
|
||||
}
|
||||
Module_ini_loader ..> ini_loader_DeckySpec : contains
|
||||
class ini_loader_CustomServiceSpec {
|
||||
}
|
||||
Module_ini_loader ..> ini_loader_CustomServiceSpec : contains
|
||||
class ini_loader_IniConfig {
|
||||
}
|
||||
Module_ini_loader ..> ini_loader_IniConfig : contains
|
||||
class Module_composer {
|
||||
+generate_compose()
|
||||
+write_compose()
|
||||
}
|
||||
|
||||
class Module_archetypes {
|
||||
+get_archetype()
|
||||
+all_archetypes()
|
||||
+random_archetype()
|
||||
}
|
||||
class archetypes_Archetype {
|
||||
}
|
||||
Module_archetypes ..> archetypes_Archetype : contains
|
||||
class Module_fleet {
|
||||
+all_service_names()
|
||||
+resolve_distros()
|
||||
+build_deckies()
|
||||
+build_deckies_from_ini()
|
||||
}
|
||||
|
||||
class Module_cli {
|
||||
+_kill_api()
|
||||
+api()
|
||||
+deploy()
|
||||
+collect()
|
||||
+mutate()
|
||||
+status()
|
||||
+teardown()
|
||||
+list_services()
|
||||
+list_distros()
|
||||
+correlate()
|
||||
+list_archetypes()
|
||||
+serve_web()
|
||||
}
|
||||
|
||||
|
||||
class services_base_BaseService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_base ..> services_base_BaseService : contains
|
||||
|
||||
class services_http_HTTPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_http ..> services_http_HTTPService : contains
|
||||
|
||||
class services_smtp_SMTPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_smtp ..> services_smtp_SMTPService : contains
|
||||
|
||||
class services_mysql_MySQLService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_mysql ..> services_mysql_MySQLService : contains
|
||||
|
||||
class services_redis_RedisService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_redis ..> services_redis_RedisService : contains
|
||||
|
||||
class services_elasticsearch_ElasticsearchService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_elasticsearch ..> services_elasticsearch_ElasticsearchService : contains
|
||||
|
||||
class services_ftp_FTPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_ftp ..> services_ftp_FTPService : contains
|
||||
|
||||
class services_imap_IMAPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_imap ..> services_imap_IMAPService : contains
|
||||
|
||||
class services_k8s_KubernetesAPIService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_k8s ..> services_k8s_KubernetesAPIService : contains
|
||||
|
||||
class services_ldap_LDAPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_ldap ..> services_ldap_LDAPService : contains
|
||||
|
||||
class services_llmnr_LLMNRService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_llmnr ..> services_llmnr_LLMNRService : contains
|
||||
|
||||
class services_mongodb_MongoDBService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_mongodb ..> services_mongodb_MongoDBService : contains
|
||||
|
||||
class services_mqtt_MQTTService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_mqtt ..> services_mqtt_MQTTService : contains
|
||||
|
||||
class services_mssql_MSSQLService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_mssql ..> services_mssql_MSSQLService : contains
|
||||
|
||||
class services_pop3_POP3Service {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_pop3 ..> services_pop3_POP3Service : contains
|
||||
|
||||
class services_postgres_PostgresService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_postgres ..> services_postgres_PostgresService : contains
|
||||
|
||||
class services_rdp_RDPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_rdp ..> services_rdp_RDPService : contains
|
||||
|
||||
class services_sip_SIPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_sip ..> services_sip_SIPService : contains
|
||||
|
||||
class services_smb_SMBService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_smb ..> services_smb_SMBService : contains
|
||||
|
||||
class services_snmp_SNMPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_snmp ..> services_snmp_SNMPService : contains
|
||||
|
||||
class services_tftp_TFTPService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_tftp ..> services_tftp_TFTPService : contains
|
||||
|
||||
class services_vnc_VNCService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_vnc ..> services_vnc_VNCService : contains
|
||||
|
||||
class services_docker_api_DockerAPIService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_docker_api ..> services_docker_api_DockerAPIService : contains
|
||||
class Module_services_registry {
|
||||
+_load_plugins()
|
||||
+register_custom_service()
|
||||
+get_service()
|
||||
+all_services()
|
||||
}
|
||||
|
||||
|
||||
class services_smtp_relay_SMTPRelayService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_smtp_relay ..> services_smtp_relay_SMTPRelayService : contains
|
||||
|
||||
class services_conpot_ConpotService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_conpot ..> services_conpot_ConpotService : contains
|
||||
|
||||
class services_ssh_SSHService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_ssh ..> services_ssh_SSHService : contains
|
||||
|
||||
class services_telnet_TelnetService {
|
||||
+compose_fragment()
|
||||
+dockerfile_context()
|
||||
}
|
||||
Module_services_telnet ..> services_telnet_TelnetService : contains
|
||||
class Module_logging_forwarder {
|
||||
+parse_log_target()
|
||||
+probe_log_target()
|
||||
}
|
||||
|
||||
class Module_logging_file_handler {
|
||||
+_get_logger()
|
||||
+write_syslog()
|
||||
+get_log_path()
|
||||
}
|
||||
|
||||
class Module_logging_syslog_formatter {
|
||||
+_pri()
|
||||
+_truncate()
|
||||
+_sd_escape()
|
||||
+_sd_element()
|
||||
+format_rfc5424()
|
||||
}
|
||||
|
||||
|
||||
class correlation_graph_TraversalHop {
|
||||
}
|
||||
Module_correlation_graph ..> correlation_graph_TraversalHop : contains
|
||||
class correlation_graph_AttackerTraversal {
|
||||
+first_seen()
|
||||
+last_seen()
|
||||
+duration_seconds()
|
||||
+deckies()
|
||||
+decky_count()
|
||||
+path()
|
||||
+to_dict()
|
||||
}
|
||||
Module_correlation_graph ..> correlation_graph_AttackerTraversal : contains
|
||||
class Module_correlation_engine {
|
||||
+_fmt_duration()
|
||||
}
|
||||
class correlation_engine_CorrelationEngine {
|
||||
+__init__()
|
||||
+ingest()
|
||||
+ingest_file()
|
||||
+traversals()
|
||||
+all_attackers()
|
||||
+report_table()
|
||||
+report_json()
|
||||
+traversal_syslog_lines()
|
||||
}
|
||||
Module_correlation_engine ..> correlation_engine_CorrelationEngine : contains
|
||||
class Module_correlation_parser {
|
||||
+_parse_sd_params()
|
||||
+_extract_attacker_ip()
|
||||
+parse_line()
|
||||
}
|
||||
class correlation_parser_LogEvent {
|
||||
}
|
||||
Module_correlation_parser ..> correlation_parser_LogEvent : contains
|
||||
class Module_web_auth {
|
||||
+verify_password()
|
||||
+get_password_hash()
|
||||
+create_access_token()
|
||||
}
|
||||
|
||||
class Module_engine_deployer {
|
||||
+_sync_logging_helper()
|
||||
+_compose()
|
||||
+_compose_with_retry()
|
||||
+deploy()
|
||||
+teardown()
|
||||
+status()
|
||||
+_print_status()
|
||||
}
|
||||
|
||||
class Module_collector_worker {
|
||||
+parse_rfc5424()
|
||||
+_load_service_container_names()
|
||||
+is_service_container()
|
||||
+is_service_event()
|
||||
+_stream_container()
|
||||
}
|
||||
|
||||
class Module_mutator_engine {
|
||||
+mutate_decky()
|
||||
+mutate_all()
|
||||
+run_watch_loop()
|
||||
}
|
||||
|
||||
|
||||
class web_db_repository_BaseRepository {
|
||||
}
|
||||
Module_web_db_repository ..> web_db_repository_BaseRepository : contains
|
||||
|
||||
class web_db_models_User {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_User : contains
|
||||
class web_db_models_Log {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_Log : contains
|
||||
class web_db_models_Bounty {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_Bounty : contains
|
||||
class web_db_models_Token {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_Token : contains
|
||||
class web_db_models_LoginRequest {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_LoginRequest : contains
|
||||
class web_db_models_ChangePasswordRequest {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_ChangePasswordRequest : contains
|
||||
class web_db_models_LogsResponse {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_LogsResponse : contains
|
||||
class web_db_models_BountyResponse {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_BountyResponse : contains
|
||||
class web_db_models_StatsResponse {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_StatsResponse : contains
|
||||
class web_db_models_MutateIntervalRequest {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_MutateIntervalRequest : contains
|
||||
class web_db_models_DeployIniRequest {
|
||||
}
|
||||
Module_web_db_models ..> web_db_models_DeployIniRequest : contains
|
||||
class Module_web_db_sqlite_database {
|
||||
+get_async_engine()
|
||||
+get_sync_engine()
|
||||
+init_db()
|
||||
}
|
||||
|
||||
|
||||
class web_db_sqlite_repository_SQLiteRepository {
|
||||
+__init__()
|
||||
+_initialize_sync()
|
||||
+_apply_filters()
|
||||
+_apply_bounty_filters()
|
||||
}
|
||||
Module_web_db_sqlite_repository ..> web_db_sqlite_repository_SQLiteRepository : contains
|
||||
```
|
||||
Reference in New Issue
Block a user