Supporting multi-protocol multi-user(Vmess, Vless, Trojan, ShadowSocks, Wireguard, Hysteria, Tunnel, Mixed, HTTP, Tun, MTProto، AmneziaWG)
This report summarizes scanner evidence for MHSanaei/3x-ui, a Go project with 48,972 GitHub stars. SynthScan examined 450,107 lines of code across 1916 source files, recording 232 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 0.7 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 202 finding(s).
Are imports declared and package/API names verified? 23 finding(s).
Are wrappers, guards, and repeated structures necessary? 97 finding(s).
Which changes need focused human review? 232 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 232 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/test/basics-happy-eyeballs.test.tsx | 8 | function settingsWithMalformedHappyEyeballs(): XraySettingsValue { | CODE |
| LOW | frontend/src/test/inbound-form-modal.test.tsx | 45 | function chooseVirtualizedProtocol(optionText: string) { | CODE |
| LOW | frontend/src/test/outbounds-loopback-index.test.tsx | 10 | function settingsWithHiddenLoopback(): XraySettingsValue { | CODE |
| LOW | frontend/src/test/routing-loopback-index.test.tsx | 10 | function settingsWithHiddenLoopback(): XraySettingsValue { | CODE |
| LOW | frontend/src/test/mtproto-egress-picker.test.tsx | 17 | function mockConfigWithBlockOutbound() { | CODE |
| LOW | frontend/src/test/outbound-identity-tags-case.test.tsx | 11 | function settingsWithCapitalisedProtocol(): XraySettingsValue { | CODE |
| LOW | frontend/src/hooks/useTheme.tsx | 140 | export function pauseAnimationsUntilLeave(elementId: string): void { | CODE |
| LOW | frontend/src/lib/tuic.ts | 3 | export function normalizeTuicCongestionController(value: unknown): TuicCongestionController { | CODE |
| LOW | frontend/src/lib/tuic.ts | 19 | export function resolveTuicServerSettings( | CODE |
| LOW | frontend/src/lib/clients/external-link.ts | 1 | export function resolveExternalLinkExpiry( | CODE |
| LOW | frontend/src/lib/xray/stream-wire-normalize.ts | 148 | export function validateRealityMaxClientVer(max: string, min: string): string | undefined { | CODE |
| LOW | frontend/src/lib/xray/stream-wire-normalize.ts | 162 | function liftLegacyXhttpSessionKeys(obj: Record<string, unknown>): void { | CODE |
| LOW | frontend/src/lib/xray/stream-wire-normalize.ts | 341 | export function normalizeStreamSettingsForWire( | CODE |
| LOW | frontend/src/lib/xray/outbound-form-adapter.ts | 82 | export function freedomDomainStrategyFromWire(outbound: { | CODE |
| LOW | frontend/src/lib/xray/outbound-form-adapter.ts | 289 | function liftLegacyWireguardStrategy( | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 27 | export function createDefaultFreedomOutboundSettings(): FreedomOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 31 | export function createDefaultBlackholeOutboundSettings(): BlackholeOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 35 | export function createDefaultLoopbackOutboundSettings(): LoopbackOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 39 | export function createDefaultDNSOutboundSettings(): DNSOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 49 | export function createDefaultVmessOutboundSettings(): VmessOutboundSettings { | CODE |
| LOW | frontend/src/lib/xray/outbound-defaults.ts | 61 | export function createDefaultVlessOutboundSettings(): VlessOutboundSettings { | CODE |
| LOW | frontend/src/lib/xray/outbound-defaults.ts | 71 | export function createDefaultTrojanOutboundSettings(): TrojanOutboundSettings { | CODE |
| LOW | frontend/src/lib/xray/outbound-defaults.ts | 82 | export function createDefaultShadowsocksOutboundSettings(): ShadowsocksOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 95 | export function createDefaultSocksOutboundSettings(): SocksOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 101 | export function createDefaultHttpOutboundSettings(): HttpOutboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/outbound-defaults.ts | 111 | export function createDefaultWireguardOutboundSettings( | CODE |
| LOW | frontend/src/lib/xray/outbound-defaults.ts | 130 | export function createDefaultHysteriaOutboundSettings(): HysteriaOutboundSettings { | CODE |
| LOW | frontend/src/lib/xray/outbound-defaults.ts | 134 | export function createDefaultMasqueOutboundSettings(): MasqueOutboundSettings { | CODE |
| LOW | frontend/src/lib/xray/outbound-defaults.ts | 161 | export function createDefaultOutboundSettings(protocol: string): AnyOutboundSettings | null { | CODE |
| LOW | frontend/src/lib/xray/outbound-link-parser.ts | 70 | function applyXhttpStringFromParams(xhttp: Raw, params: URLSearchParams): void { | CODE |
| LOW | frontend/src/lib/xray/outbound-link-parser.ts | 445 | function sanitizeFinalMaskQuicParams(parsed: Record<string, unknown>): void { | CODE |
| LOW | frontend/src/lib/xray/outbound-link-parser.ts | 463 | function applyObfsLocalPluginParams(params: URLSearchParams): void { | CODE |
| LOW | frontend/src/lib/xray/xdns-mask.ts | 50 | export function upgradeLegacyXdnsSettings(settings: Raw): { next: Raw; changed: boolean } { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 103 | export function createDefaultTrojanClient(seed: TrojanClientSeed = {}): TrojanClient { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 120 | export function createDefaultShadowsocksClient( | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 138 | export function createDefaultHysteriaClient(seed: HysteriaClientSeed = {}): HysteriaClient { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 166 | export function createDefaultVlessInboundSettings(): VlessInboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 175 | export function createDefaultVmessInboundSettings(): VmessInboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 179 | export function createDefaultTrojanInboundSettings(): TrojanInboundSettings { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 190 | export function createDefaultShadowsocksInboundSettings( | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 210 | export function createDefaultHysteriaInboundSettings( | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 219 | export function createDefaultHttpInboundSettings(): HttpInboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 226 | export function createDefaultMixedInboundSettings(): MixedInboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 249 | export function createDefaultMtprotoInboundSettings(): MtprotoInboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 259 | export function createDefaultMtprotoClient(domain: string): Partial<MtprotoClient> { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 265 | export function createDefaultTunnelInboundSettings(): TunnelInboundSettings { | CODE |
| LOW⚡ | frontend/src/lib/xray/inbound-defaults.ts | 273 | export function createDefaultTunInboundSettings(): TunInboundSettings { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 303 | export function createDefaultWireguardInboundSettings( | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 325 | export function createDefaultAmneziawgInboundSettings(): AmneziawgInboundSettings { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 346 | export function createDefaultMasqueInboundSettings(): MasqueInboundSettings { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 350 | export function createDefaultTuicInboundSettings(): TuicInboundSettings { | CODE |
| LOW | frontend/src/lib/xray/inbound-defaults.ts | 390 | export function createDefaultInboundSettings(protocol: string): AnyInboundSettings | null { | CODE |
| LOW | frontend/src/lib/xray/inbound-from-db.ts | 25 | function fillProtocolSettingsDefaults( | CODE |
| LOW | frontend/src/lib/xray/inbound-form-adapter.ts | 332 | export function dropLegacyOptionalEmpties( | CODE |
| LOW | frontend/src/lib/xray/inbound-link.ts | 142 | function hasShareableFinalMaskValue(value: unknown): boolean { | CODE |
| LOW | frontend/src/lib/xray/inbound-link.ts | 221 | function pinUnsafeFingerprintForCipherSuites( | CODE |
| LOW | frontend/src/lib/xray/inbound-link.ts | 396 | function applyExternalProxyTLSParams( | CODE |
| LOW | frontend/src/lib/xray/inbound-link.ts | 1353 | function normalizeShareAddrStrategy(strategy: string | undefined): ShareAddrStrategy { | CODE |
| LOW | frontend/src/lib/xray/inbound-tls-defaults.ts | 17 | export function createTlsSettingsWithDefaultCert(network?: string): Record<string, unknown> { | CODE |
| LOW | frontend/src/lib/xray/inbound-tls-defaults.ts | 35 | export function createMasqueTlsSettingsWithDefaultCert(): Record<string, unknown> { | CODE |
| 30 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.sh | 1801 | pkill -f 'tuic-server.*-c .*bin/tuic/tuic_[0-9]+\.json' > /dev/null 2>&1 || true | COMMENT |
| LOW | install.sh | 1861 | if [[ -f bin/mtg-linux-arm ]]; then | COMMENT |
| LOW | update.sh | 341 | # filesystems stay as they are), and that would break the panel's own use of | COMMENT |
| LOW | docker-compose.yml | 1 | services: | COMMENT |
| LOW | docker-compose.yml | 21 | - NET_RAW | COMMENT |
| LOW | frontend/vitest.shims.d.ts | 1 | /// <reference types="@vitest/browser-playwright" /> | COMMENT |
| LOW | frontend/src/schemas/api/inbound.ts | 1 | import { z } from 'zod'; | COMMENT |
| LOW | frontend/src/schemas/protocols/stream/xhttp.ts | 1 | import { z } from 'zod'; | COMMENT |
| LOW | frontend/src/schemas/protocols/stream/finalmask.ts | 1 | import { z } from 'zod'; | COMMENT |
| LOW | frontend/src/schemas/protocols/inbound/amneziawg.ts | 1 | import { z } from 'zod'; | COMMENT |
| LOW | frontend/src/components/form/HeaderMapEditor.tsx | 1 | import { useEffect, useRef, useState } from 'react'; | COMMENT |
| LOW | frontend/src/lib/xray/outbound-link-parser.ts | 1 | import { Base64 } from '@/utils'; | COMMENT |
| LOW | frontend/src/pages/index/logParse.ts | 1 | // Parser for the panel log viewer. Logs reach the UI in two shapes: | COMMENT |
| LOW | frontend/src/pages/xray/balancers/balancer-helpers.ts | 41 | COMMENT | |
| LOW | deploy/test/smoke-noninteractive.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | deploy/cloud-init/cloud-init.yaml | 1 | #cloud-config | COMMENT |
| LOW | deploy/cloud-init/cloud-init.yaml | 21 | - path: /opt/xui-bootstrap.sh | COMMENT |
| LOW | internal/amneziawgnet/portfwd.go | 1 | // Phase 3.6: per-client port-forwarding. A real Go listener bound to each | COMMENT |
| LOW | internal/amneziawgnet/portfwd.go | 61 | port int | COMMENT |
| LOW | internal/amneziawgnet/relay_e2e_test.go | 21 | "github.com/mhsanaei/3x-ui/v3/internal/util/wireguard" | COMMENT |
| LOW | internal/amneziawgnet/manager_test.go | 181 | } | COMMENT |
| LOW | internal/amneziawgnet/manager_test.go | 261 | } | COMMENT |
| LOW | internal/amneziawgnet/netstack_test.go | 1 | package amneziawgnet | COMMENT |
| LOW | internal/amneziawgnet/v6alias.go | 1 | // Phase 3.5: restoring each opted-in peer's distinct public IPv6 source | COMMENT |
| LOW | internal/amneziawgnet/device.go | 21 | // means amneziawg-go's own real-protocol defaults throughout: classic | COMMENT |
| LOW | internal/amneziawgnet/device.go | 41 | MaxHandshakeAttempts string | COMMENT |
| LOW | internal/amneziawgnet/device.go | 101 | // configure any peers or bring the interface up -- a caller that will relay | COMMENT |
| LOW | internal/amneziawgnet/device_test.go | 21 | // TestNewDeviceHandshakeForwarderAndIdentity is Phase 1's real end-to-end | COMMENT |
| LOW | internal/amneziawgnet/device_test.go | 221 | COMMENT | |
| LOW | internal/amneziawgnet/manager.go | 121 | // includes replace_peers=true -- see buildUAPIConfig -- and its own | COMMENT |
| LOW | internal/amneziawgnet/socks_config.go | 21 | } | COMMENT |
| LOW | internal/database/migrate_data.go | 21 | ) | COMMENT |
| LOW | internal/database/model/model.go | 81 | COMMENT | |
| LOW | internal/database/model/model.go | 501 | } | COMMENT |
| LOW | internal/database/model/model.go | 581 | switch method { | COMMENT |
| LOW | internal/web/runtime/remote.go | 41 | // endpoint-specific caps and a concurrency budget remain follow-ups. Node | COMMENT |
| LOW | internal/web/job/node_traffic_sync_job.go | 241 | } | COMMENT |
| LOW | internal/web/job/xray_traffic_job.go | 21 | outboundService outbound.OutboundService | COMMENT |
| LOW | internal/web/service/golden_fixtures_xray_test.go | 21 | COMMENT | |
| LOW | internal/web/service/server.go | 1361 | // logger call in internal/amneziawg, internal/amneziawgnet and their jobs | COMMENT |
| LOW | internal/web/service/server.go | 1621 | backupPath := filepath.Join(backupDir, "backup.db") | COMMENT |
| LOW | internal/web/service/inbound_traffic.go | 581 | // | COMMENT |
| LOW | internal/web/service/client_attach_test.go | 1 | package service | COMMENT |
| LOW | internal/web/service/client_attach_test.go | 61 | // valid for THIS inbound" -- so an identity whose stored address came from | COMMENT |
| LOW | internal/web/service/inbound_migration.go | 61 | if err = tx.Migrator().DropColumn(&xray.ClientTraffic{}, "all_time"); err != nil { | COMMENT |
| LOW | internal/web/service/xray_setting_dns_routing.go | 281 | // at a private IP (e.g. a self-hosted AdGuard Home / Pi-hole reachable on | COMMENT |
| LOW | internal/web/service/inbound.go | 341 | TlsFlowCapable bool `json:"tlsFlowCapable" example:"true"` | COMMENT |
| LOW | internal/web/service/inbound.go | 821 | // Minecraft session profiles xray-core has required since v26.7.28 (#6487). | COMMENT |
| LOW | internal/web/service/client_wireguard.go | 221 | // maps that get persisted into the inbound settings. Existing values are never | COMMENT |
| LOW | internal/web/service/xray_setting.go | 261 | return err | COMMENT |
| LOW | internal/web/service/xray_setting.go | 321 | // Why this matters (#4113, #2818): an admin who adds a cascade outbound | COMMENT |
| LOW | internal/web/service/client_inbound_apply.go | 1441 | return true, needRestart, nil | COMMENT |
| LOW | internal/web/service/client_inbound_apply_test.go | 41 | } | COMMENT |
| LOW | internal/web/service/xray.go | 441 | } | COMMENT |
| LOW | internal/web/service/xray.go | 761 | }) | COMMENT |
| LOW | internal/web/service/xray.go | 961 | COMMENT | |
| LOW | internal/web/service/xray.go | 981 | // | COMMENT |
| LOW | internal/web/service/inbound_node.go | 541 | COMMENT | |
| LOW | internal/web/service/inbound_node.go | 641 | } | COMMENT |
| LOW | internal/web/service/panel/panel.go | 61 | // Number.MAX_SAFE_INTEGER), which would let two different runs round to the | COMMENT |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | internal/web/translation/es-ES.json | 2847 | "placeholder": "Escriba un comando o busque clientes, inbounds, páginas...", | CODE |
| LOW | internal/web/translation/ja-JP.json | 2847 | "placeholder": "コマンドを入力するか、クライアント、インバウンド、ページを検索...", | CODE |
| LOW | internal/web/translation/zh-CN.json | 2847 | "placeholder": "输入命令或搜索客户端、入站、页面...", | CODE |
| LOW | internal/web/translation/tr-TR.json | 2847 | "placeholder": "Komut yazın veya istemcileri, gelen bağlantıları, sayfaları arayın...", | CODE |
| LOW | internal/web/translation/id-ID.json | 2847 | "placeholder": "Ketik perintah atau cari klien, inbound, halaman...", | CODE |
| LOW | internal/web/translation/sk-SK.json | 2847 | "placeholder": "Zadajte príkaz alebo hľadajte klientov, vstupy či stránky…", | CODE |
| LOW | internal/web/translation/uk-UA.json | 2847 | "placeholder": "Введіть команду або знайдіть клієнтів, інбаунди, сторінки...", | CODE |
| LOW | internal/web/translation/ar-EG.json | 2847 | "placeholder": "اكتب أمرًا أو ابحث عن العملاء، المنافذ، الصفحات...", | CODE |
| LOW | internal/web/translation/fa-IR.json | 2847 | "placeholder": "جستجوی کلاینتها، اینباندها، صفحات یا تایپ دستور...", | CODE |
| LOW | internal/web/translation/pt-BR.json | 2847 | "placeholder": "Digite um comando ou busque clientes, inbounds, páginas...", | CODE |
| LOW | internal/web/translation/zh-TW.json | 2847 | "placeholder": "輸入命令或搜尋客戶端、入站、頁面...", | CODE |
| LOW | internal/web/translation/ru-RU.json | 2847 | "placeholder": "Введите команду или найдите клиентов, инбаунды, страницы...", | CODE |
| LOW | internal/web/translation/en-US.json | 2847 | "placeholder": "Type a command or search clients, inbounds, pages...", | CODE |
| LOW | internal/web/translation/vi-VN.json | 2847 | "placeholder": "Nhập lệnh hoặc tìm kiếm khách hàng, cổng vào, trang...", | CODE |
| LOW | internal/web/job/ldap_sync_job_test.go | 22 | c := j.buildClient("user@example.com", 10, 0, 0) | CODE |
| LOW | internal/web/job/ldap_sync_job_test.go | 52 | const email = "user@example.com" | CODE |
| LOW | internal/web/service/inbound_clients_tuic_test.go | 86 | "private_key": "dummy-key", | CODE |
| LOW | internal/web/service/inbound_tuic_test.go | 26 | "private_key": "dummy-key", | CODE |
| LOW | internal/web/service/email/email_test.go | 157 | mustSet("to", settingService.SetSmtpTo("admin@example.com")) | CODE |
| LOW | internal/web/service/email/email_test.go | 193 | mustSet("to", settingService.SetSmtpTo("admin@example.com")) | CODE |
| LOW | internal/amneziawg/params_test.go | 371 | for _, v := range []string{"", "user@example.com", "MCPfRGcDGotJ6TcnIdDqsemj2cMIiGHnPUHM5ivXN18=", "<r 148>"} { | CODE |
| LOW | internal/xray/api_test.go | 9 | err := (&XrayAPI{}).RemoveUser("in-443-tcp", "user@example.com") | CODE |
| LOW | .github/workflows/claude-pr-review.yml | 393 | # posted a "placeholder"), and posting it would mark the PR as reviewed. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | deploy/cloud-init/cloud-init.yaml | 2 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/cloud-init/cloud-init.yaml | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/cloud-init/cloud-init.yaml | 45 | # ------------------------------------------------------------------------ | COMMENT |
| MEDIUM | .github/workflows/release.yml | 200 | # ================================= | COMMENT |
| MEDIUM | .github/workflows/release.yml | 202 | # ================================= | COMMENT |
| MEDIUM | .github/workflows/release.yml | 341 | # ================================= | COMMENT |
| MEDIUM | .github/workflows/release.yml | 343 | # ================================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | x-ui.sh | 1096 | # Check if the firewall is inactive | COMMENT |
| LOW | x-ui.sh | 1117 | # Check if the input is valid | COMMENT |
| LOW | x-ui.sh | 1145 | # Check if the port range has been successfully opened | COMMENT |
| LOW | x-ui.sh | 1148 | # Check if the individual port has been successfully opened | COMMENT |
| LOW | x-ui.sh | 1216 | # Check if the port range has been deleted | COMMENT |
| LOW | x-ui.sh | 1219 | # Check if the individual port has been deleted | COMMENT |
| LOW | x-ui.sh | 1342 | # Check if acme.sh is already installed | COMMENT |
| LOW | x-ui.sh | 2128 | # Check if Speedtest is already installed | COMMENT |
| LOW⚡ | x-ui.sh | 2369 | # Check if log file exists | COMMENT |
| LOW⚡ | x-ui.sh | 2374 | # Check if service log file exists so fail2ban won't return error | COMMENT |
| LOW | install.sh | 438 | # Check if acme.sh is installed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | internal/web/service/server.go | 2848 | // robust for IP-only self-signed certs that carry no DNS SANs. | COMMENT |
| MEDIUM | internal/web/service/inbound_migration.go | 75 | // sync merge (SetRemoteTraffic) and makes the sync robust even when | COMMENT |
| MEDIUM | internal/web/service/tgbot/tgbot.go | 477 | // Create robust fasthttp client | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | internal/web/service/inbound_node.go | 1777 | // Step 1: Get ClientTraffic records for emails in the input list. | COMMENT |
| LOW⚡ | internal/web/service/inbound_node.go | 1789 | // Step 2: Sort clients by (Up + Down) descending | COMMENT |
| LOW⚡ | internal/web/service/inbound_node.go | 1794 | // Step 3: Extract sorted valid emails and track found ones | COMMENT |
| LOW⚡ | internal/web/service/inbound_node.go | 1802 | // Step 4: Identify emails that were not found in the database | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | internal/web/service/inbound_node.go | 1777 | // Step 1: Get ClientTraffic records for emails in the input list. | COMMENT |
| LOW⚡ | internal/web/service/inbound_node.go | 1789 | // Step 2: Sort clients by (Up + Down) descending | COMMENT |
| LOW⚡ | internal/web/service/inbound_node.go | 1794 | // Step 3: Extract sorted valid emails and track found ones | COMMENT |
| LOW⚡ | internal/web/service/inbound_node.go | 1802 | // Step 4: Identify emails that were not found in the database | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | frontend/src/lib/xray/outbound-defaults.ts | 25 | // this is intentional and matches the legacy "scaffold object" behavior. | COMMENT |
| MEDIUM | docs/lib/xray/routing.ts | 119 | // otherwise scaffold the matching monitor (observatory for leastPing, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/lib/shared.ts | 26 | // AI-generated interactive wiki of the 3x-ui codebase. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | x-ui.sh | 2379 | # Create the iplimit jail files | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | x-ui.sh | 1349 | cd ~ || return 1 # Ensure you can change to the home directory | CODE |