Mail hosting made simple
This report presents the forensic synthetic code analysis of modoboa/modoboa, a Python project with 3,528 GitHub stars. SynthScan v2.0 examined 95,829 lines of code across 784 source files, recording 549 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 7.2 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 549 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/ldapsync/lib.py | 192 | def import_accounts_from_ldap(config): | CODE |
| LOW | modoboa/ldapsync/lib.py | 257 | def _check_dovecot_conf_value(name, value): | CODE |
| LOW | modoboa/ldapsync/lib.py | 265 | def update_dovecot_config_file(config): | CODE |
| LOW | modoboa/ldapsync/tests.py | 37 | def test_username_with_dn_metacharacters_is_escaped(self): | CODE |
| LOW | modoboa/ldapsync/tests.py | 97 | def test_invalid_conf_file_path(self): | CODE |
| LOW | modoboa/rspamd/api/v2/serializers.py | 45 | def validate_selector_map_path(self, value): | CODE |
| LOW | modoboa/calendars/tests.py | 76 | def test_rights_file_generation(self): | CODE |
| LOW | modoboa/calendars/tests.py | 112 | def test_rights_file_generation_with_admin(self): | CODE |
| LOW | modoboa/calendars/tests.py | 170 | def test_create_calendar_rejects_rights_injection(self, client_mock): | CODE |
| LOW | modoboa/calendars/tests.py | 278 | def test_create_calendar_rejects_unowned_domain(self, client_mock): | CODE |
| LOW | modoboa/calendars/tests.py | 376 | def test_create_accessrule_denied_mailbox(self): | CODE |
| LOW | modoboa/calendars/tests.py | 393 | def test_create_accessrule_mailbox_not_found(self): | CODE |
| LOW | modoboa/calendars/tests.py | 408 | def test_create_accessrule_denied_calendar(self): | CODE |
| LOW | modoboa/calendars/tests.py | 430 | def test_update_accessrule_denied_calendar(self): | CODE |
| LOW | modoboa/calendars/tests.py | 454 | def test_rights_generation_excludes_forged_rule(self): | CODE |
| LOW | modoboa/calendars/tests.py | 512 | def test_update_accessrule_permission(self): | CODE |
| LOW | modoboa/calendars/tests.py | 569 | def test_get_user_events_wrong_calendar(self): | CODE |
| LOW | modoboa/calendars/tests.py | 650 | def test_move_event_between_cals(self): | CODE |
| LOW | modoboa/calendars/tests.py | 672 | def test_shared_events_own_domain(self): | CODE |
| LOW | modoboa/calendars/tests.py | 679 | def test_shared_events_cross_domain_denied(self): | CODE |
| LOW | modoboa/calendars/tests.py | 711 | def test_shared_events_import_cross_domain_denied(self): | CODE |
| LOW | modoboa/policyd/handlers.py | 37 | def set_mailbox_message_limit(sender, instance, created, **kwargs): | CODE |
| LOW | modoboa/policyd/core.py | 91 | def get_notification_recipients(): | CODE |
| LOW | modoboa/policyd/core.py | 276 | def start_reset_counters_coro(): | CODE |
| LOW | modoboa/policyd/tests.py | 309 | def test_domain_signal_handler(self): | CODE |
| LOW | modoboa/policyd/tests.py | 331 | def test_domain_sent_messages_none_counter(self): | CODE |
| LOW | modoboa/policyd/tests.py | 339 | def test_mailbox_sent_messages_none_counter(self): | CODE |
| LOW | modoboa/imap_migration/checks.py | 23 | def check_auto_creation_is_enabled(app_configs, **kwargs): | CODE |
| LOW | modoboa/imap_migration/apps.py | 7 | def load_imapmigration_settings(): | CODE |
| LOW | modoboa/imap_migration/tests.py | 68 | def test_authentication_forbidden_characters(self, mock_imap): | CODE |
| LOW | modoboa/imap_migration/tests.py | 85 | def test_authenticate_and_rename(self, mock_imap): | CODE |
| LOW | modoboa/imap_migration/tests.py | 98 | def test_authenticate_conflicts(self, mock_imap): | CODE |
| LOW | modoboa/imap_migration/tests.py | 126 | def test_generate_offlineimap_config(self): | CODE |
| LOW | modoboa/imap_migration/tests.py | 182 | def test_migration_list_cross_tenant_isolation(self): | CODE |
| LOW | modoboa/imap_migration/tests.py | 236 | def test_check_connection_denied_to_simple_users(self): | CODE |
| LOW | modoboa/imap_migration/tests.py | 319 | def test_folder_filters_reject_code_injection(self): | CODE |
| LOW | modoboa/imap_migration/tests.py | 344 | def test_folder_filter_exclude_rejects_invalid_regex(self): | CODE |
| LOW | modoboa/imap_migration/tests.py | 349 | def test_legitimate_folder_filters_accepted(self): | CODE |
| LOW | modoboa/imap_migration/api/v2/serializers.py | 15 | def validate_no_code_injection(value): | CODE |
| LOW | modoboa/imap_migration/api/v2/serializers.py | 47 | def validate_folder_filter_exclude(self, value): | CODE |
| LOW | modoboa/imap_migration/api/v2/serializers.py | 57 | def validate_folder_filter_include(self, value): | CODE |
| LOW | modoboa/transport/handlers.py | 19 | def serialize_transport_settings(sender, instance, **kwargs): | CODE |
| LOW | modoboa/core/models.py | 46 | def is_password_scheme_in_use(self, password_hasher: type[PasswordHasher]) -> bool: | CODE |
| LOW | modoboa/core/checks.py | 70 | def check_rsa_private_key_exists(app_configs, **kwargs): | CODE |
| LOW | modoboa/core/jobs.py | 33 | def communicate_with_public_api(): | CODE |
| LOW | modoboa/core/extensions.py | 52 | def get_frontend_menu_entries(self) -> list[dict]: | CODE |
| LOW | modoboa/core/extensions.py | 82 | def get_frontend_ui_extensions(self) -> dict[str, list[dict]]: | CODE |
| LOW | modoboa/core/utils.py | 92 | def check_for_deprecated_password_schemes() -> Optional[type[PasswordHasher]]: # NOQA | CODE |
| LOW | modoboa/core/mocks.py | 40 | def modo_api_versions_no_update(url, request): | CODE |
| LOW | modoboa/core/password_hashers/__init__.py | 36 | def get_configured_password_hasher() -> type[PasswordHasher]: | CODE |
| LOW | modoboa/core/password_hashers/utils.py | 70 | def cache_available_password_hasher(bypass_cache: bool = False): | CODE |
| LOW | modoboa/core/password_hashers/base.py | 111 | def get_deprecated_password_hashers(cls) -> list[type["PasswordHasher"]]: | CODE |
| LOW | modoboa/core/tests/test_ldap.py | 26 | def activate_ldap_authentication(self): | CODE |
| LOW | modoboa/core/tests/test_ldap.py | 100 | def test_searchbind_authentication(self): | CODE |
| LOW | modoboa/core/tests/test_ldap.py | 123 | def test_directbind_authentication(self): | CODE |
| LOW | modoboa/core/tests/test_ldap.py | 154 | def test_update_password_ldap(self): | CODE |
| LOW | modoboa/core/tests/test_extensions.py | 118 | def test_remote_url_passthrough(self): | CODE |
| LOW | modoboa/core/tests/test_extensions.py | 131 | def test_remote_static_path_resolved_via_static_url(self): | CODE |
| LOW | modoboa/core/tests/test_extensions.py | 146 | def test_remote_url_takes_precedence_over_static_path(self): | CODE |
| LOW | modoboa/core/tests/test_extensions.py | 158 | def test_remote_none_when_not_declared(self): | CODE |
| 323 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | modoboa/core/password_validation.py | 3 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/core/api/v1/serializers.py | 6 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/core/api/v2/serializers.py | 13 | from django.core.exceptions import ValidationError as djangoValidationError | CODE |
| CRITICAL | modoboa/admin/lib.py | 14 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/admin/models/alias.py | 7 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/admin/models/domain.py | 7 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/admin/api/v1/serializers.py | 6 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/admin/api/v2/serializers.py | 7 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | modoboa/lib/validators.py | 5 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL⚡ | modoboa/lib/tests/test_validators.py | 3 | from django.core.exceptions import ValidationError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/ldapsync/apps.py | 8 | CODE | |
| LOW | modoboa/rspamd/apps.py | 29 | CODE | |
| LOW | modoboa/calendars/apps.py | 13 | CODE | |
| LOW | modoboa/policyd/apps.py | 13 | CODE | |
| LOW | modoboa/imap_migration/apps.py | 34 | CODE | |
| LOW | modoboa/transport/apps.py | 8 | CODE | |
| LOW | modoboa/core/apps.py | 37 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 3 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 3 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 3 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 3 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 3 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 3 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 11 | CODE | |
| LOW | modoboa/core/password_hashers/__init__.py | 11 | CODE | |
| LOW | modoboa/core/password_hashers/base.py | 10 | CODE | |
| LOW | modoboa/core/password_hashers/base.py | 11 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/core/views/__init__.py | 3 | CODE | |
| LOW | modoboa/amavis/apps.py | 14 | CODE | |
| LOW | modoboa/amavis/apps.py | 15 | CODE | |
| LOW | modoboa/amavis/checks/__init__.py | 2 | CODE | |
| LOW | modoboa/contacts/apps.py | 10 | CODE | |
| LOW | modoboa/admin/apps.py | 17 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 3 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 4 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 4 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 4 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 5 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 6 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 7 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 8 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 8 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 8 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 8 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 9 | CODE | |
| LOW | modoboa/admin/models/__init__.py | 9 | CODE | |
| LOW | modoboa/limits/apps.py | 31 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 1 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 1 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 1 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 6 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 6 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 6 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 7 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 7 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 7 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 7 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 8 | CODE | |
| LOW | modoboa/webmail/lib/__init__.py | 9 | CODE | |
| LOW | modoboa/webmail/lib/imaputils.py | 12 | CODE | |
| LOW | modoboa/lib/tests/__init__.py | 26 | CODE | |
| LOW | modoboa/pdfcredentials/apps.py | 35 | CODE | |
| LOW | modoboa/relaydomains/apps.py | 13 | CODE | |
| LOW | modoboa/relaydomains/apps.py | 14 | CODE | |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/ldapsync/lib.py | 192 | CODE | |
| LOW | modoboa/rspamd/api/v2/serializers.py | 10 | CODE | |
| LOW | modoboa/imap_migration/api/v2/serializers.py | 109 | CODE | |
| LOW | modoboa/transport/backends.py | 31 | CODE | |
| LOW | modoboa/core/password_hashers/utils.py | 17 | CODE | |
| LOW | modoboa/core/api/v2/serializers.py | 243 | CODE | |
| LOW | modoboa/amavis/lib.py | 179 | CODE | |
| LOW | modoboa/amavis/sql_connector.py | 91 | CODE | |
| LOW | modoboa/amavis/viewsets.py | 171 | CODE | |
| LOW | modoboa/amavis/serializers.py | 36 | CODE | |
| LOW | modoboa/contacts/lib/carddav.py | 346 | CODE | |
| LOW | modoboa/contacts/lib/carddav.py | 382 | CODE | |
| LOW | modoboa/admin/dns_checker.py | 123 | CODE | |
| LOW | modoboa/admin/lib.py | 178 | CODE | |
| LOW | modoboa/admin/lib.py | 247 | CODE | |
| LOW | modoboa/admin/lib.py | 334 | CODE | |
| LOW | modoboa/admin/handlers.py | 277 | CODE | |
| LOW | …doboa/admin/management/commands/subcommands/_import.py | 45 | CODE | |
| LOW | …doboa/admin/management/commands/subcommands/_import.py | 84 | CODE | |
| LOW | …doboa/admin/management/commands/subcommands/_repair.py | 26 | CODE | |
| LOW | modoboa/admin/models/alias.py | 184 | CODE | |
| LOW | modoboa/sievefilters/rfc6266.py | 57 | CODE | |
| LOW | modoboa/sievefilters/api/v2/serializers.py | 69 | CODE | |
| LOW | modoboa/sievefilters/api/v2/serializers.py | 125 | CODE | |
| LOW | modoboa/webmail/mocks.py | 16 | CODE | |
| LOW | modoboa/webmail/mocks.py | 42 | CODE | |
| LOW | modoboa/webmail/tests/test_fetch_parser.py | 11 | CODE | |
| LOW | modoboa/webmail/lib/fetch_parser.py | 131 | CODE | |
| LOW | modoboa/webmail/lib/fetch_parser.py | 235 | CODE | |
| LOW | modoboa/webmail/lib/rfc6266.py | 57 | CODE | |
| LOW | modoboa/webmail/lib/imaputils.py | 147 | CODE | |
| LOW | modoboa/webmail/lib/imaputils.py | 324 | CODE | |
| LOW | modoboa/webmail/lib/imapemail.py | 143 | CODE | |
| LOW | modoboa/webmail/lib/imapemail.py | 195 | CODE | |
| LOW | modoboa/parameters/tools.py | 104 | CODE | |
| LOW | modoboa/lib/email_utils.py | 121 | CODE | |
| LOW | modoboa/lib/imap_utf7.py | 96 | CODE | |
| LOW | modoboa/pdfcredentials/api/v2/serializers.py | 72 | CODE | |
| LOW | modoboa/pdfcredentials/api/v2/tests.py | 49 | CODE | |
| LOW | modoboa/pdfcredentials/api/v2/tests.py | 68 | CODE | |
| LOW | modoboa/dmarc/lib.py | 169 | CODE | |
| LOW | modoboa/dmarc/lib.py | 295 | CODE | |
| LOW | modoboa/maillog/management/commands/logparser.py | 364 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | modoboa/rspamd/apps.py | 0 | load core settings. this function must be manually called (see :file:`urls.py`) in order to load base settings. | STRING |
| HIGH | modoboa/imap_migration/apps.py | 0 | load core settings. this function must be manually called (see :file:`urls.py`) in order to load base settings. | STRING |
| HIGH | modoboa/core/apps.py | 0 | load core settings. this function must be manually called (see :file:`urls.py`) in order to load base settings. | STRING |
| HIGH | modoboa/pdfcredentials/apps.py | 0 | load core settings. this function must be manually called (see :file:`urls.py`) in order to load base settings. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/imap_migration/auth_backends.py | 77 | # Check if old addresses must be converted | COMMENT |
| LOW | modoboa/core/tests/test_core.py | 223 | # Check if same hostname is not added more than once | COMMENT |
| LOW | modoboa/admin/tests/test_alias_targets.py | 48 | # Check if local domain is still allowed | COMMENT |
| LOW | modoboa/admin/models/domain.py | 256 | # Check if domain's limit for domain admins is not reached yet | COMMENT |
| LOW | modoboa/admin/api/v2/tests.py | 352 | # Check if self alias has been created | COMMENT |
| LOW | modoboa/admin/api/v2/tests.py | 479 | # Check if self alias has been deleted | COMMENT |
| LOW | modoboa/admin/api/v2/tests.py | 562 | # Check if self aliases have been deleted | COMMENT |
| LOW | modoboa/admin/api/v2/tests.py | 696 | # Check if self alias has been updated | COMMENT |
| LOW | modoboa/limits/tests/test_domain_limits.py | 112 | # Check if defined limit can't be exceeded | COMMENT |
| LOW | modoboa/webmail/lib/fetch_parser.py | 152 | # Check if we are parsing a list of mime part or a | COMMENT |
| LOW | modoboa/webmail/lib/fetch_parser.py | 173 | # Check if previous element was a mime part. If so, we are | COMMENT |
| LOW | modoboa/pdfcredentials/api/v2/tests.py | 75 | # Check if link is present in listing page | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/core/context_processors.py | 17 | except Exception: | CODE |
| LOW | modoboa/core/management/commands/load_initial_data.py | 98 | except Exception as e: | CODE |
| LOW | modoboa/webmail/lib/attachments.py | 85 | except Exception as e: | CODE |
| LOW | modoboa/webmail/lib/attachments.py | 118 | except Exception as e: | CODE |
| LOW | …tials/management/commands/reencrypt_pdf_credentials.py | 40 | except Exception as exc: | CODE |
| MEDIUM | modoboa/dmarc/lib.py | 228 | print("Error: the attachment does not match the mimetype") | CODE |
| MEDIUM | modoboa/maillog/lib.py | 20 | print("Error: failed to convert date and time", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/core/management/commands/load_initial_data.py | 201 | # policy = create_user_and_policy("@{0}".format(dom.name)) | COMMENT |
| LOW | modoboa/amavis/models.py | 1 | # This is an auto-generated Django model module. | COMMENT |
| LOW | modoboa/contacts/lib/carddav.py | 1 | # vim: set ts=4 sw=4 expandtab sts=4: | COMMENT |
| LOW | modoboa/admin/tests/test_export.py | 101 | COMMENT | |
| LOW | modoboa/admin/tests/test_export.py | 121 | COMMENT | |
| LOW | modoboa/admin/tests/test_export.py | 141 | COMMENT | |
| LOW | frontend/vite.config.js | 1 | // Plugins | COMMENT |
| LOW | test_project/test_project/settings.py | 281 | COMMENT | |
| LOW | test_project/test_project/settings.py | 461 | "ATOMIC_REQUESTS": True, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/rspamd/jobs.py | 101 | def update_rspamd_maps(domain_ids: list[int]) -> None: | CODE |
| LOW | modoboa/core/models.py | 134 | def set_password(self, raw_value: str, curvalue: str | None = None) -> None: | CODE |
| LOW | modoboa/core/views/__init__.py | 13 | __all__ = [ | CODE |
| LOW | modoboa/admin/models/__init__.py | 11 | __all__ = [ | CODE |
| LOW | modoboa/webmail/lib/__init__.py | 12 | __all__ = [ | CODE |
| LOW | modoboa/webmail/lib/imapheader.py | 15 | __all__ = [ | CODE |
| LOW | modoboa/parameters/tools.py | 237 | def set_values(self, values: dict, app: str | None = None) -> None: | CODE |
| LOW | modoboa/lib/imap_utf7.py | 169 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | modoboa/amavis/tests/test_handlers.py | 33 | # Create a domain alias | COMMENT |
| MEDIUM | modoboa/admin/api/v2/tests.py | 767 | # Create an alias for another user | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | doc-ng/rest_api.md | 42 | Authorization: Token <YOUR_TOKEN> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/calendars/mocks.py | 74 | CODE | |
| LOW | modoboa/webmail/tests/test_fetch_parser.py | 29 | CODE | |
| LOW | modoboa/parameters/tools.py | 71 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | modoboa/autoconfig/tests.py | 37 | resp = self.client.post(url, {"EmailAddress": "test@test.com"}) | CODE |
| LOW | modoboa/sievefilters/mocks.py | 31 | if anyof (header :contains "From" "user@example.com") { | CODE |
| LOW | modoboa/sievefilters/api/v2/tests.py | 261 | email_filter = "user@example.com" | CODE |