闲鱼自动回复管理系统是一个基于 Python + FastAPI 开发的自动化客服系统,专为闲鱼平台设计。系统通过 WebSocket 连接闲鱼服务器,实时接收和处理消息,提供智能化的自动回复服务。同时集成闲鱼自动发货,自动评价,自动擦亮等功能,实现闲鱼虚拟商品自动化流程。
This report summarizes scanner evidence for zhinianboke/xianyu-auto-reply, a Python project with 7,544 GitHub stars. SynthScan examined 295,828 lines of code across 1064 source files, recording 3969 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 15.7 (Elevated 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.
Can maintainers explain intent, assumptions, and trade-offs? 1180 finding(s).
Are imports declared and package/API names verified? 706 finding(s).
Are wrappers, guards, and repeated structures necessary? 2939 finding(s).
Which changes need focused human review? 3969 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 3969 distinct pattern matches across 13 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⚡ | promotion/backend/_bootstrap.py | 36 | except Exception as exc: | CODE |
| LOW | promotion/backend/app/api/routes/cookies.py | 318 | except Exception: | CODE |
| LOW | promotion/backend/app/api/routes/auth.py | 51 | except Exception: | CODE |
| LOW | promotion/backend/app/api/routes/geetest.py | 132 | except Exception as e: | CODE |
| LOW | promotion/backend/app/api/routes/geetest.py | 197 | except Exception as e: | CODE |
| LOW | promotion/backend/app/api/routes/settings.py | 57 | except Exception as e: | CODE |
| LOW | promotion/backend/app/api/routes/settings.py | 90 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/taobao_alliance_detail.py | 81 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/taobao_alliance_detail.py | 227 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/taobao_alliance_detail.py | 328 | except Exception as e: | CODE |
| LOW | …on/backend/app/services/publish_coupon_card_service.py | 86 | except Exception as exc: | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 46 | except Exception as exc: | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 73 | except Exception as exc: | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 98 | except Exception as exc: | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 153 | except Exception as card_exc: | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 156 | except Exception as exc: | CODE |
| LOW | …otion/backend/app/services/item_delete_sync_service.py | 80 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 187 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 212 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 322 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 449 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 546 | except Exception as e: | CODE |
| LOW⚡ | …end/app/services/published_item_id_repair_scheduler.py | 39 | except Exception as exc: | CODE |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 129 | except Exception as exc: | CODE |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 215 | except Exception as exc: | CODE |
| LOW⚡ | …nd/app/services/material_short_url_repair_scheduler.py | 34 | except Exception as exc: | CODE |
| LOW | …nd/app/services/material_short_url_repair_scheduler.py | 86 | except Exception as exc: | CODE |
| LOW | …nd/app/services/material_short_url_repair_scheduler.py | 151 | except Exception as exc: | CODE |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 41 | except Exception as e: | CODE |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 68 | except Exception as e: | CODE |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 73 | except Exception as e: | CODE |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 324 | except Exception as e: | CODE |
| LOW | …motion/backend/app/services/taobao_alliance_service.py | 313 | except Exception as e: | CODE |
| LOW⚡ | …/backend/app/services/publish_coupon_card_scheduler.py | 27 | except Exception as exc: | CODE |
| LOW | …/backend/app/services/publish_coupon_card_scheduler.py | 139 | except Exception as exc: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 37 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 66 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 47 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 82 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 119 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 277 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 296 | except Exception as e: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 312 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 63 | except Exception as e: | CODE |
| LOW⚡ | backend-web/_bootstrap.py | 85 | except Exception: | CODE |
| LOW⚡ | backend-web/_bootstrap.py | 93 | except Exception as e: | CODE |
| LOW⚡ | backend-web/_bootstrap.py | 100 | except Exception as e: | CODE |
| LOW⚡ | backend-web/_bootstrap.py | 107 | except Exception as e: | CODE |
| LOW⚡ | backend-web/_bootstrap.py | 115 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 145 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 160 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 166 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 182 | except Exception: | CODE |
| LOW | backend-web/_bootstrap.py | 216 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 230 | except Exception as e: | CODE |
| LOW | backend-web/_bootstrap.py | 280 | except Exception as e: | CODE |
| LOW | backend-web/app/core/http_client.py | 146 | except Exception: | CODE |
| LOW | backend-web/app/api/routes/listing_monitor.py | 201 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | backend-web/app/api/routes/listing_monitor.py | 282 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | backend-web/app/api/routes/listing_monitor.py | 423 | except Exception as exc: # noqa: BLE001 | CODE |
| 1673 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | promotion/backend/_bootstrap.py | 114 | except asyncio.CancelledError: | CODE |
| HIGH | promotion/backend/app/core/config.py | 61 | except json.JSONDecodeError: | CODE |
| HIGH | promotion/backend/app/api/routes/cookies.py | 318 | except Exception: | CODE |
| HIGH | promotion/backend/app/api/routes/cookies.py | 59 | except ValueError: | CODE |
| HIGH | …omotion/backend/app/services/publish_rule_scheduler.py | 484 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | backend-web/_bootstrap.py | 188 | except asyncio.CancelledError: | CODE |
| HIGH | backend-web/app/core/config.py | 127 | except json.JSONDecodeError: | CODE |
| HIGH | backend-web/app/api/routes/cookies.py | 631 | except Exception: | CODE |
| HIGH | backend-web/app/api/routes/feedback.py | 78 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/advertisements.py | 157 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/advertisements.py | 162 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/advertisements.py | 282 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/chat_new.py | 871 | except Exception: | CODE |
| HIGH | backend-web/app/api/routes/chat_new.py | 864 | except Exception: | CODE |
| HIGH | backend-web/app/api/routes/admin.py | 1201 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/admin.py | 1209 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/admin.py | 1372 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/admin.py | 1380 | except ValueError: | CODE |
| HIGH | backend-web/app/api/routes/admin.py | 569 | except Exception: | CODE |
| HIGH | backend-web/app/api/routes/chat_new_image.py | 136 | except Exception: | CODE |
| HIGH | backend-web/app/services/settlement_service.py | 116 | except Exception: | CODE |
| HIGH | backend-web/app/services/pickup_service.py | 115 | except Exception: | CODE |
| HIGH | backend-web/app/services/xianyu_direct_payload.py | 192 | except Exception: | CODE |
| HIGH | backend-web/app/services/account_login_log_service.py | 67 | except ValueError: | CODE |
| HIGH | backend-web/app/services/account_login_log_service.py | 74 | except ValueError: | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 345 | except Exception: | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 1048 | except Exception: | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 1671 | except Exception: | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 390 | except Exception: | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 1421 | except Exception: | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 1566 | except Exception: | CODE |
| HIGH | backend-web/app/services/version_service.py | 49 | except Exception: | CODE |
| HIGH | backend-web/app/services/db_backup_log_service.py | 60 | except ValueError: | CODE |
| HIGH | backend-web/app/services/db_backup_log_service.py | 69 | except ValueError: | CODE |
| HIGH | backend-web/app/services/chat_new/avatar_service.py | 74 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | backend-web/app/services/chat_new/im_client.py | 1094 | except asyncio.CancelledError: | CODE |
| HIGH | backend-web/app/services/chat_new/im_client.py | 1138 | except Exception: | CODE |
| HIGH | backend-web/app/services/chat_new/im_client.py | 1228 | except asyncio.CancelledError: | CODE |
| HIGH | backend-web/app/services/chat_new/im_client.py | 241 | except Exception: | CODE |
| HIGH | backend-web/app/services/chat_new/im_client.py | 249 | except Exception: | CODE |
| HIGH | backend-web/app/services/chat_new/im_client.py | 225 | except asyncio.CancelledError: | CODE |
| HIGH | websocket/_bootstrap.py | 141 | except asyncio.CancelledError: | CODE |
| HIGH | websocket/app/utils/image_uploader.py | 157 | except Exception: | CODE |
| HIGH | websocket/app/api/routes/internal.py | 2007 | except Exception: | CODE |
| HIGH | websocket/app/api/routes/internal.py | 2831 | except Exception: | CODE |
| HIGH | websocket/app/api/routes/password_login.py | 281 | except Exception: | CODE |
| HIGH | websocket/app/api/routes/password_login.py | 550 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/xianyu_async.py | 1288 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/xianyu_async.py | 1209 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/xianyu_async.py | 1948 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/cookie_token_manager.py | 601 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/cookie_token_manager.py | 1687 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/cookie_token_manager.py | 1876 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/cookie_token_manager.py | 965 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/cookie_token_manager.py | 987 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/cookie_token_manager.py | 1006 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/connection_manager.py | 177 | except (ValueError, TypeError): | CODE |
| HIGH | websocket/app/services/xianyu/auto_delivery_handler.py | 240 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/auto_delivery_handler.py | 279 | except Exception: | CODE |
| HIGH | websocket/app/services/xianyu/auto_delivery_handler.py | 2728 | except Exception: | CODE |
| 105 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | promotion/frontend/src/api/publishRule.ts | 113 | export async function getExecutePublishRuleStatus(taskId: string): Promise<ApiResponse<PublishRuleExecuteTask>> { | CODE |
| LOW⚡ | promotion/backend/_bootstrap.py | 29 | def _setup_windows_event_loop_policy() -> None: | CODE |
| LOW | promotion/backend/app/api/routes/cookies.py | 323 | async def _get_account_with_permission(session: AsyncSession, account_pk: int, current_user: User): | CODE |
| LOW | …omotion/backend/app/services/taobao_alliance_detail.py | 347 | def _parse_short_url_response(data: dict) -> dict: | CODE |
| LOW | …on/backend/app/services/publish_coupon_card_service.py | 54 | async def _get_publish_coupon_card_lock(user_id: int, published_item_id: str) -> asyncio.Lock: | CODE |
| LOW | …on/backend/app/services/publish_coupon_card_service.py | 64 | async def ensure_publish_coupon_card( | CODE |
| LOW | …on/backend/app/services/publish_coupon_card_service.py | 95 | async def _ensure_publish_coupon_card_once( | CODE |
| LOW | …on/backend/app/services/publish_coupon_card_service.py | 185 | async def get_publish_coupon_card_status( | CODE |
| LOW | promotion/backend/app/services/product_rule_service.py | 291 | async def sync_product_rules_to_publish_accounts( | CODE |
| LOW | promotion/backend/app/services/product_rule_service.py | 388 | async def sync_material_accounts_from_product_rules( | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 25 | async def save_publish_rule_progress( | CODE |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 54 | async def get_account_product_total_count(owner_id: int, account_id: str) -> int: | CODE |
| LOW⚡ | …omotion/backend/app/services/publish_rule_scheduler.py | 89 | def _generate_publish_trace_code() -> str: | CODE |
| LOW⚡ | …omotion/backend/app/services/publish_rule_scheduler.py | 92 | def _build_publish_title_with_trace(title: str | None, trace_code: str) -> str: | CODE |
| LOW⚡ | …omotion/backend/app/services/publish_rule_scheduler.py | 98 | async def _find_published_item_id_by_trace_code( | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 33 | def _build_rule_execution_key(rule_id: int, user_id: int) -> str: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 133 | async def get_manual_execute_publish_rule_status(task_id: str, user_id: int) -> dict: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 139 | async def _run_manual_execute_publish_rule_task(task_id: str, rule_id: int, user_id: int) -> None: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 199 | async def run_publish_rule_scheduler(): | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 217 | async def manual_execute_publish_rule(rule_id: int, user_id: int) -> dict: | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 277 | async def _execute_all_publish_rules(): | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 331 | async def _execute_single_publish_rule( | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 458 | async def _publish_material_to_xianyu( | CODE |
| LOW⚡ | …end/app/services/published_item_id_repair_scheduler.py | 31 | async def run_published_item_id_repair_scheduler() -> None: | CODE |
| LOW⚡ | …end/app/services/published_item_id_repair_scheduler.py | 44 | async def _repair_published_item_ids() -> None: | CODE |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 146 | async def _find_item_id_by_trace_code( | CODE |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 176 | async def _update_material_published_item_id( | CODE |
| LOW⚡ | …nd/app/services/material_short_url_repair_scheduler.py | 26 | async def run_material_short_url_repair_scheduler() -> None: | CODE |
| LOW⚡ | …nd/app/services/material_short_url_repair_scheduler.py | 39 | async def repair_material_short_urls_once() -> None: | CODE |
| LOW | …nd/app/services/material_short_url_repair_scheduler.py | 161 | async def _update_material_short_url(material_id: int, short_url: str) -> bool: | CODE |
| LOW | promotion/backend/app/services/material_service.py | 204 | def _normalize_material_items(items: list[dict]) -> list[dict]: | CODE |
| LOW | promotion/backend/app/services/material_service.py | 224 | async def _get_material_upsert_context( | CODE |
| LOW | promotion/backend/app/services/material_service.py | 275 | async def collect_creatable_material_items( | CODE |
| LOW | promotion/backend/app/services/material_service.py | 420 | def _normalize_publish_status_filter(publish_status: str, legacy_published: str) -> str: | CODE |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 28 | async def run_delete_rule_scheduler() -> None: | CODE |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 328 | def _is_session_expired_error(message: str) -> bool: | CODE |
| LOW | promotion/backend/app/services/publish_rule_service.py | 266 | async def _get_user_rule_by_account( | CODE |
| LOW | promotion/backend/app/services/publish_rule_service.py | 285 | async def _get_total_published_count_map( | CODE |
| LOW | promotion/backend/app/services/publish_rule_service.py | 325 | def _is_publish_rule_account_duplicate_error(exc: IntegrityError) -> bool: | CODE |
| LOW | promotion/backend/app/services/delete_rule_service.py | 251 | async def _get_user_rule_by_account( | CODE |
| LOW | promotion/backend/app/services/delete_rule_service.py | 270 | def _is_delete_rule_account_duplicate_error(exc: IntegrityError) -> bool: | CODE |
| LOW | …motion/backend/app/services/taobao_alliance_service.py | 499 | def _build_coupon_info_from_promotion_path(promotion_path: list[dict]) -> str: | CODE |
| LOW⚡ | …/backend/app/services/publish_coupon_card_scheduler.py | 20 | async def run_publish_coupon_card_scheduler() -> None: | CODE |
| LOW⚡ | …/backend/app/services/publish_coupon_card_scheduler.py | 32 | async def _load_existing_catalog_item_keys(rows: list[tuple[int, int, str | None]]) -> set[tuple[int, str]]: | CODE |
| LOW | …/backend/app/services/publish_coupon_card_scheduler.py | 56 | async def _repair_publish_coupon_cards() -> None: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 31 | async def check_database_connection() -> bool: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 96 | async def _get_table_unique_constraints(conn: AsyncConnection, table_name: str) -> list[dict]: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 115 | async def _ensure_unique_constraint( | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 168 | async def _check_product_rules_columns(conn: AsyncConnection, existing_tables: list[str]) -> bool: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 308 | async def _check_publish_rules_columns(conn: AsyncConnection, existing_tables: list[str]) -> None: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 372 | async def _check_delete_rules_columns(conn: AsyncConnection, existing_tables: list[str]) -> None: | CODE |
| LOW | …omotion/backend/app/services/database_check_service.py | 443 | async def _sync_rule_account_dimensions() -> None: | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 34 | async def run_product_rule_scheduler(): | CODE |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 325 | def merge_short_url_into_description(description: str, short_url: str) -> str: | CODE |
| LOW | backend-web/_bootstrap.py | 48 | async def check_database_connection(): | CODE |
| LOW | backend-web/_bootstrap.py | 319 | async def request_validation_exception_handler( | CODE |
| LOW | backend-web/app/api/deps.py | 109 | async def get_default_reply_service(session: AsyncSession = Depends(get_db_session)): | CODE |
| LOW | backend-web/app/api/deps.py | 121 | async def get_notification_channel_service(session: AsyncSession = Depends(get_db_session)): | CODE |
| LOW | backend-web/app/api/deps.py | 127 | async def get_system_setting_service(session: AsyncSession = Depends(get_db_session)): | CODE |
| LOW | backend-web/app/api/deps.py | 140 | async def get_account_login_log_service(session: AsyncSession = Depends(get_db_session)): | CODE |
| 756 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | promotion/backend/_bootstrap.py | 15 | CODE | |
| LOW | promotion/backend/main.py | 2 | CODE | |
| LOW | promotion/backend/main.py | 12 | CODE | |
| LOW | promotion/backend/app/core/config.py | 9 | CODE | |
| LOW | promotion/backend/app/core/security.py | 9 | CODE | |
| LOW | promotion/backend/app/api/deps.py | 9 | CODE | |
| LOW | promotion/backend/app/api/_exports.py | 7 | CODE | |
| LOW | promotion/backend/app/api/__init__.py | 2 | CODE | |
| LOW | promotion/backend/app/api/routes/delete_rule.py | 12 | CODE | |
| LOW | promotion/backend/app/api/routes/cookies.py | 11 | CODE | |
| LOW | promotion/backend/app/api/routes/auth.py | 9 | CODE | |
| LOW | promotion/backend/app/api/routes/auth.py | 11 | CODE | |
| LOW | promotion/backend/app/api/routes/material.py | 9 | CODE | |
| LOW | promotion/backend/app/api/routes/product_rule.py | 11 | CODE | |
| LOW | promotion/backend/app/api/routes/taobao_alliance.py | 9 | CODE | |
| LOW | promotion/backend/app/api/routes/dashboard.py | 8 | CODE | |
| LOW | promotion/backend/app/api/routes/settings.py | 8 | CODE | |
| LOW | promotion/backend/app/api/routes/publish_rule.py | 13 | CODE | |
| LOW | …omotion/backend/app/services/taobao_alliance_detail.py | 8 | CODE | |
| LOW | …on/backend/app/services/publish_coupon_card_service.py | 9 | CODE | |
| LOW | promotion/backend/app/services/product_rule_service.py | 9 | CODE | |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 9 | CODE | |
| LOW | promotion/backend/app/services/auth_service.py | 10 | CODE | |
| LOW | …otion/backend/app/services/item_delete_sync_service.py | 10 | CODE | |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 11 | CODE | |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 10 | CODE | |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 16 | CODE | |
| LOW | …nd/app/services/material_short_url_repair_scheduler.py | 10 | CODE | |
| LOW | promotion/backend/app/services/material_service.py | 10 | CODE | |
| LOW | promotion/backend/app/services/material_service.py | 18 | CODE | |
| LOW | promotion/backend/app/services/delete_rule_scheduler.py | 10 | CODE | |
| LOW | promotion/backend/app/services/publish_rule_service.py | 10 | CODE | |
| LOW | promotion/backend/app/services/delete_rule_service.py | 9 | CODE | |
| LOW | …motion/backend/app/services/taobao_alliance_service.py | 9 | CODE | |
| LOW | …/backend/app/services/publish_coupon_card_scheduler.py | 1 | CODE | |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 2 | CODE | |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 2 | CODE | |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 2 | CODE | |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 2 | CODE | |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 2 | CODE | |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 2 | CODE | |
| LOW | …omotion/backend/app/services/database_check_service.py | 9 | CODE | |
| LOW | …omotion/backend/app/services/database_check_service.py | 24 | CODE | |
| LOW | …omotion/backend/app/services/database_check_service.py | 25 | CODE | |
| LOW | …omotion/backend/app/services/database_check_service.py | 26 | CODE | |
| LOW | …omotion/backend/app/services/database_check_service.py | 27 | CODE | |
| LOW | …omotion/backend/app/services/database_check_service.py | 28 | CODE | |
| LOW | …omotion/backend/app/services/product_rule_scheduler.py | 12 | CODE | |
| LOW | backend-web/_bootstrap.py | 15 | CODE | |
| LOW | backend-web/main.py | 2 | CODE | |
| LOW | backend-web/main.py | 22 | CODE | |
| LOW | backend-web/app/core/config.py | 9 | CODE | |
| LOW | backend-web/app/core/paths.py | 9 | CODE | |
| LOW | backend-web/app/core/http_client.py | 11 | CODE | |
| LOW | backend-web/app/core/security.py | 14 | CODE | |
| LOW | backend-web/app/api/deps.py | 10 | CODE | |
| LOW | backend-web/app/api/__init__.py | 6 | CODE | |
| LOW | backend-web/app/api/__init__.py | 9 | CODE | |
| LOW | backend-web/app/api/__init__.py | 10 | CODE | |
| LOW | backend-web/app/api/routes/listing_monitor.py | 9 | CODE | |
| 627 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend-web/app/core/http_client.py | 86 | 发送HTTP请求(带重试) Args: method: HTTP方法 url: 请求URL headers: 请求头 | STRING |
| HIGH | backend-web/app/api/routes/external_publish.py | 116 | 将公开请求转换为现有单品发布执行服务使用的数据结构。 Args: payload: 公开发布请求。 account: 已校验归属的闲鱼账号。 Returns: 现有 | STRING |
| HIGH | backend-web/app/services/amap_inputtips_service.py | 71 | 根据关键词查询高德 POI 输入提示。 Args: keywords: 用户输入的所在地关键词。 city: 搜索城市,默认全国且不限制城市范围。 | STRING |
| HIGH | backend-web/app/services/platform_category_selection.py | 114 | 构造选择分类后重新获取动态属性所需的平台参数。 与单品发布界面一致,不要求调用方回传完整的分类字段:只要能用 channel_cat_id、tb_cat_id、cat_id 或分类名称中任意一个定位到分类卡里的选 | STRING |
| HIGH | backend-web/app/services/platform_category_service.py | 328 | 根据标题和描述返回平台分类候选,令牌过期时自动刷新并重试一次。 Args: title: 商品标题。 description: 商品描述。 | STRING |
| HIGH | backend-web/app/services/account_service.py | 527 | 协议化账号密码登录成功后保存账号(按前端传入的 account_id upsert)。 与扫码登录 upsert_account_from_qr 的差异:按 account_id(非 unb)定位, 并保存 | STRING |
| HIGH | …end-web/app/services/external_publish_media_service.py | 36 | 校验媒体类型。 Args: media_type: 调用方传入的媒体类型。 Returns: 规范化后的媒体类型。 Rais | STRING |
| HIGH | …end-web/app/services/external_publish_media_service.py | 73 | 将静态目录内文件转为发布器可读取的静态 URL。 Args: filepath: 静态目录内的媒体文件路径。 Returns: 以 /sta | STRING |
| HIGH | …end-web/app/services/external_publish_media_service.py | 95 | 保存一份公开发布媒体并返回 media_id。 Args: account: 已通过秘钥校验的闲鱼账号。 media_type: image、spec_im | STRING |
| HIGH | …end-web/app/services/external_publish_media_service.py | 141 | 按账号和预期类型解析 media_id 对应的静态地址。 Args: account: 已通过秘钥校验的闲鱼账号。 media_id: 公开上传接口返回的媒 | STRING |
| HIGH | …end-web/app/services/external_publish_media_service.py | 173 | 批量解析媒体 ID 并拒绝重复引用。 Args: account: 已通过秘钥校验的闲鱼账号。 media_ids: 媒体 ID 列表。 | STRING |
| HIGH | backend-web/app/services/xianyu_item_payload_builder.py | 306 | 构造 idleitem.publish / idleitem.edit 共用的 inputJson 载荷。 Args: item_data: 前端表单数据(标题、描述、图片、价格、规格、分类、发货设置等)。 | STRING |
| HIGH | backend-web/app/services/ai_listing_text_generator.py | 68 | 解析模型返回的 JSON 文案 Args: text: 模型输出。 expect: 本批期望条数。 Returns: 清洗后的条目列表(title/description/p | STRING |
| HIGH | backend-web/app/services/ai_listing_text_generator.py | 109 | 生成一批文案 Args: client: 复用的 httpx 客户端。 config: AI 铺货配置。 params: 任务参数快照。 keyword: 生成主题。 | STRING |
| HIGH | backend-web/app/services/external_account_service.py | 115 | 获取分销秘钥所属用户的指定账号,不校验启用状态。 公开接口只做归属校验:禁用账号也允许调用分类和发布接口, Cookie 失效等问题由平台调用结果如实返回给调用方。 Ar | STRING |
| HIGH | backend-web/app/services/ai_listing_runner.py | 81 | 为单条素材生成图片(受全局并发闸门约束) Args: client: 复用的 httpx 客户端。 config: AI 铺货配置。 keyword: 生成主题。 t | STRING |
| HIGH | backend-web/app/services/chat_new/im_client.py | 1030 | 发送 LWP 请求;遇到 code=400(Token/连接失效)时刷新 Token 重连 除自身收到 code=400 外,还处理「并发请求已把连接重连」的情况:本次请求可能 被那次 disconnect | STRING |
| HIGH | backend-web/app/services/chat_new/im_session_manager.py | 45 | 获取已连接的客户端,或新建连接 Args: account_id: 账号ID Returns: 已连接的GoofishImClient | STRING |
| HIGH | websocket/app/services/xianyu/xianyu_async.py | 2185 | 创建(或获取)单聊会话,返回会话ID(chat_id) 通过 LWP 协议 /r/SingleChatConversation/create 请求服务端: - 服务端基于 (pairFirs | STRING |
| HIGH | websocket/app/services/xianyu/xianyu_async.py | 2330 | 发送一次「创建会话」LWP 请求并等待响应,解析出 cid。 每次调用都重新读取当前 self.connection_manager.ws(断线重连后为新的 ws 对象)。 Args: | STRING |
| HIGH | scheduler/app/core/http_client.py | 84 | 发送HTTP请求(带重试) Args: method: HTTP方法 url: 请求URL headers: 请求头 | STRING |
| HIGH | common/utils/local_video_upload.py | 47 | 校验并保存一个视频文件。 Args: video: FastAPI 上传文件对象 upload_dir: 保存目录 max_size: 单文件最大字节数 Returns: | STRING |
| HIGH | common/utils/xianyu_utils.py | 30 | 将cookies字符串转换为字典 Args: cookies_str: Cookie字符串,格式如 "key1=value1; key2=value2" 兼容 "k | STRING |
| HIGH | common/utils/xianyu_utils.py | 420 | 解密消息数据 Args: data: Base64编码的MessagePack数据 Returns: 解密后的JSON字符串 Raises | STRING |
| HIGH | common/utils/agree_deliver.py | 107 | 在提货URL上追加订单号与订单表主键两个 GET 参数。 原提货URL由用户自行配置,可能本来就带查询参数(如 ?src=xy),此时按 & 合并追加、 不会重复出现 ?;原URL没有查询参数时才补 ?。原有同名参数以本次 | STRING |
| HIGH | common/utils/local_image_upload.py | 102 | 读取上传文件全部字节并按 ``max_size`` 校验大小。 Args: image: FastAPI 上传文件对象。 max_size: 最大字节数。``<= 0`` 表示不做大小校验 | STRING |
| HIGH | common/utils/local_image_upload.py | 161 | 统一处理图片上传:类型校验 → 大小校验 → 生成唯一文件名 → 写盘。 URL 拼接、失败回滚、业务保存等仍由调用方负责,函数只返回必要的中间结果。 Args: image: FastAPI 上传文件对 | STRING |
| HIGH | common/utils/local_image_upload.py | 246 | 把图片字节写入本地静态目录:格式校验 → 大小校验 → 唯一文件名 → 写盘。 与 :func:`save_uploaded_image` 的区别是入口不是 FastAPI ``UploadFile``, 而是已经拿到手的 | STRING |
| HIGH | common/utils/internal_token_service.py | 74 | 只读取已有的服务间 API 令牌,不创建或修改数据库记录。 Args: settings: 当前服务配置对象。 Returns: 已加载的服务间 API 令牌。 Raise | STRING |
| HIGH | common/db/session.py | 58 | 将SQL语句和参数编译成完整的可执行SQL Args: statement: SQL语句 parameters: 参数字典或元组 Returns: | STRING |
| HIGH | common/services/im_token_api.py | 130 | 调用闲鱼 IM Token API。 Args: cookies_str: 账号 Cookie 字符串。 device_id: 本次请求必须使用的 Device ID。 api_mo | STRING |
| HIGH | common/services/im_token_api.py | 282 | 调用远程 Token 接口并记录完整的风控日志。 远程接口请求超时(asyncio.TimeoutError)时,最多尝试 ``REMOTE_TOKEN_TIMEOUT_MAX_ATTEMPTS`` 次(首次 + 重试 2 | STRING |
| HIGH | common/services/im_token_api.py | 387 | 按系统设置调用 Token 接口。 网页模式仅调用本地网页端接口;远程模式在缓存未命中后直接调用远程接口, 不再请求本地网页端接口。远程失败时返回远程失败结果,由调用方继续处理 滑块或令牌过期。 Args | STRING |
| HIGH | common/services/listing_monitor_category_access.py | 30 | 校验分类存在且当前用户有权引用,返回分类对象。 Args: session: 数据库会话 category_id: 分类ID;None 表示"无分类",直接放行并返回 None ow | STRING |
| HIGH | common/services/ai_image_client.py | 102 | 流式下载图片并限制总字节数 先看 Content-Length 快速拒绝,再边收边累计实际字节,超限立即中断, 避免第三方返回超大文件把内存/磁盘打满。 Args: client: httpx 异 | STRING |
| HIGH | common/services/ai_image_client.py | 146 | 从响应体中取出图片条目列表 Args: data: /images/generations 响应体。 Returns: 图片条目列表,每项可能含 url 或 b64_json。 Ra | STRING |
| HIGH | common/services/ai_image_client.py | 166 | 把单个图片条目还原成字节内容 Args: client: httpx 异步客户端。 item: 图片条目(含 url 或 b64_json)。 timeout: 下载超时秒数。 | STRING |
| HIGH | common/services/ai_image_client.py | 204 | 调用图片生成接口并把结果落盘 Args: base_url: 图片接口基础地址。 api_key: 接口密钥,仅用于 Authorization 头。 model: 图片模型名称。 | STRING |
| HIGH | common/services/ai_text_client.py | 110 | 发一次 POST 请求并把失败统一转成 AiCallError 这里不复用 ai_provider_service.ensure_success_response:它会把完整请求地址写进日志, 部分中转网关把密钥放在 UR | STRING |
| HIGH | common/services/ai_text_client.py | 149 | 从响应体中取出模型输出的文本 Args: data: chat/completions 响应体。 Returns: 去除首尾空白的文本内容。 Raises: AiCa | STRING |
| HIGH | common/services/ai_text_client.py | 185 | 带退避重试的 POST:只重试网络异常/限流/服务端错误 401/403/400、以及响应体不是 JSON 这类问题重试也不会变,直接抛出。 Args: client: httpx 异步客户端。 | STRING |
| HIGH | common/services/ai_text_client.py | 230 | 调用 OpenAI 兼容的 chat/completions 生成文本 收到 400 时按"字符串content+关闭思考 → 字符串content → 数组content+关闭思考 → 数组content" 四种形态依次 | STRING |
| HIGH | common/services/token_request_lock.py | 78 | 获取账号级 Token 请求 Redis 锁。 Args: account_identifier: 闲鱼账号唯一标识,优先使用 unb/myid。 wait_timeout: 等待其他 Token | STRING |
| HIGH | common/services/listing_monitor_service.py | 180 | 校验分类存在且当前用户有权使用。 普通用户只能使用自己创建的分类;管理员(owner_id=None)可使用任意分类。 与分类列表的隔离规则保持一致,防止普通用户通过构造请求挂用他人分类。 | STRING |
| HIGH | common/services/xianyu_publish_media.py | 88 | 下载远程图片,带浏览器请求头并对图床限流做有限重试。 Args: url: 图片地址(http/https)。 Returns: tuple: (图片字节, Content-Type) | STRING |
| HIGH | common/services/listing_monitor_category_service.py | 142 | 创建分类 Args: owner_id: 当前用户ID name: 分类名称 Returns: 创建的分类详情 R | STRING |
| HIGH | common/services/listing_monitor_category_service.py | 181 | 修改分类名称 Args: category_id: 分类ID owner_id: 当前用户ID name: 新分类名称 Return | STRING |
| HIGH | common/services/xianyu_login/face_verification.py | 73 | 执行纯 API 人脸验证链路 Args: client: 贯穿登录全流程的 httpx.AsyncClient(携带 login.do 的 cookie jar) iframe_url: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | promotion/backend/app/api/routes/cookies.py | 309 | CODE | |
| LOW | promotion/backend/app/services/product_rule_service.py | 291 | CODE | |
| LOW | …ckend/app/services/publish_rule_persistence_service.py | 106 | CODE | |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 331 | CODE | |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 458 | CODE | |
| LOW | …end/app/services/published_item_id_repair_scheduler.py | 44 | CODE | |
| LOW | …nd/app/services/material_short_url_repair_scheduler.py | 39 | CODE | |
| LOW | …nd/app/services/material_short_url_repair_scheduler.py | 132 | CODE | |
| LOW | …/backend/app/services/publish_coupon_card_scheduler.py | 56 | CODE | |
| LOW | backend-web/app/api/routes/cookies.py | 591 | CODE | |
| LOW | backend-web/app/api/routes/auth.py | 35 | CODE | |
| LOW | backend-web/app/api/routes/shared_scan.py | 226 | CODE | |
| LOW | backend-web/app/api/routes/orders.py | 436 | CODE | |
| LOW | backend-web/app/api/routes/qr_login.py | 108 | CODE | |
| LOW | backend-web/app/api/routes/captcha.py | 384 | CODE | |
| LOW | backend-web/app/api/routes/chat_new.py | 78 | CODE | |
| LOW | backend-web/app/api/routes/chat_new.py | 244 | CODE | |
| LOW | backend-web/app/api/routes/chat_new.py | 737 | CODE | |
| LOW | backend-web/app/api/routes/chat_new.py | 830 | CODE | |
| LOW | backend-web/app/api/routes/admin.py | 404 | CODE | |
| LOW | backend-web/app/api/routes/agree_deliver.py | 67 | CODE | |
| LOW | backend-web/app/api/routes/cookie_refresh.py | 188 | CODE | |
| LOW | backend-web/app/api/routes/notifications.py | 74 | CODE | |
| LOW | backend-web/app/api/routes/auto_rate.py | 233 | CODE | |
| LOW | backend-web/app/api/routes/goofish_crawler.py | 245 | CODE | |
| LOW | backend-web/app/api/routes/message_filters.py | 82 | CODE | |
| LOW | backend-web/app/api/routes/items.py | 36 | CODE | |
| LOW | backend-web/app/services/product_publish_service.py | 230 | CODE | |
| LOW | backend-web/app/services/withdraw_risk_check.py | 129 | CODE | |
| LOW | backend-web/app/services/withdraw_risk_check.py | 241 | CODE | |
| LOW | backend-web/app/services/publish_execution_service.py | 241 | CODE | |
| LOW | backend-web/app/services/platform_category_service.py | 315 | CODE | |
| LOW | backend-web/app/services/account_service.py | 792 | CODE | |
| LOW | backend-web/app/services/account_service.py | 882 | CODE | |
| LOW | backend-web/app/services/pickup_service.py | 59 | CODE | |
| LOW | backend-web/app/services/xianyu_direct_payload.py | 198 | CODE | |
| LOW | backend-web/app/services/xianyu_item_payload_builder.py | 297 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 399 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 586 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 646 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1127 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1198 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1288 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1331 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1581 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1698 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1742 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1835 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 984 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 1223 | CODE | |
| LOW | backend-web/app/services/xianyu_publisher.py | 989 | CODE | |
| LOW | backend-web/app/services/account_export_service.py | 142 | CODE | |
| LOW | backend-web/app/services/qr_login/face_verification.py | 46 | CODE | |
| LOW | backend-web/app/services/password_login/flow.py | 191 | CODE | |
| LOW | backend-web/app/services/chat_new/avatar_service.py | 39 | CODE | |
| LOW | backend-web/app/services/chat_new/avatar_service.py | 250 | CODE | |
| LOW | backend-web/app/services/chat_new/im_client.py | 676 | CODE | |
| LOW | backend-web/app/services/chat_new/im_client.py | 1169 | CODE | |
| LOW | websocket/app/utils/image_uploader.py | 46 | CODE | |
| LOW | websocket/app/api/routes/internal.py | 275 | CODE | |
| 210 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | build_backend_web.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | build_backend_web.sh | 5 | # ========================================== | COMMENT |
| MEDIUM | build_scheduler.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | build_scheduler.sh | 5 | # ========================================== | COMMENT |
| MEDIUM | build_websocket.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | build_websocket.sh | 5 | # ========================================== | COMMENT |
| MEDIUM | build.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | build.sh | 6 | # ========================================== | COMMENT |
| MEDIUM | build.sh | 72 | # ========================================== | COMMENT |
| MEDIUM | build.sh | 74 | # ========================================== | COMMENT |
| MEDIUM | update.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | update.sh | 13 | # ========================================== | COMMENT |
| MEDIUM | update.sh | 377 | # ========================================== | COMMENT |
| MEDIUM | update.sh | 379 | # ========================================== | COMMENT |
| MEDIUM | deploy_remote.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | deploy_remote.sh | 7 | # ========================================== | COMMENT |
| MEDIUM | deploy_remote.sh | 54 | # ========================================== | COMMENT |
| MEDIUM | deploy_remote.sh | 56 | # ========================================== | COMMENT |
| MEDIUM | deploy.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | deploy.sh | 6 | # ========================================== | COMMENT |
| MEDIUM | deploy.sh | 53 | # ========================================== | COMMENT |
| MEDIUM | deploy.sh | 55 | # ========================================== | COMMENT |
| MEDIUM | build_frontend.sh | 2 | # ========================================== | COMMENT |
| MEDIUM | build_frontend.sh | 5 | # ========================================== | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 87 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 89 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 124 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 126 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 183 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 185 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 238 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 240 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 284 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/withdraw_risk_check.py | 286 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/email_service.py | 512 | # ── 风控检验 ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | backend-web/app/services/email_service.py | 521 | # ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | websocket/app/services/xianyu/connection_manager.py | 275 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | common/utils/service_restart.py | 371 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | common/utils/service_restart.py | 374 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | common/services/xianyu_order_client.py | 84 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | common/services/xianyu_order_client.py | 86 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | common/services/xianyu_order_client.py | 120 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | common/services/xianyu_order_client.py | 122 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | common/services/xianyu_order_client.py | 233 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | common/services/xianyu_order_client.py | 235 | # ------------------------------------------------------------------ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | promotion/backend/_bootstrap.py | 29 | def _setup_windows_event_loop_policy() -> None: | CODE |
| LOW | promotion/backend/app/api/_exports.py | 49 | __all__ = ["api_router"] | CODE |
| LOW | …omotion/backend/app/services/publish_rule_scheduler.py | 54 | def _update_manual_task(task_id: str, **kwargs) -> None: | CODE |
| LOW | …motion/backend/app/services/item_delete_api_service.py | 12 | __all__ = [ | CODE |
| LOW | backend-web/app/core/paths.py | 89 | __all__ = [ | CODE |
| LOW | backend-web/app/core/http_client.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/api/__init__.py | 12 | __all__ = ["api_router", "deps"] | CODE |
| LOW | backend-web/app/api/routes/_exports.py | 211 | __all__ = ["api_router"] | CODE |
| LOW | backend-web/app/api/routes/external_orders.py | 144 | __all__ = ["router"] | CODE |
| LOW | backend-web/app/api/routes/external_message_logs.py | 114 | __all__ = ["router"] | CODE |
| LOW | …ckend-web/app/api/routes/product_publish_capability.py | 82 | __all__ = ["router"] | CODE |
| LOW | backend-web/app/api/routes/external_accounts.py | 137 | __all__ = ["router"] | CODE |
| LOW | backend-web/app/api/routes/advertisements.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/api/routes/activation.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/api/routes/external_category.py | 190 | __all__ = ["router"] | CODE |
| LOW | backend-web/app/api/routes/external_shared.py | 121 | __all__ = [ | CODE |
| LOW | backend-web/app/api/routes/items.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/api/routes/external_publish.py | 303 | __all__ = ["router"] | CODE |
| LOW | backend-web/app/api/routes/external_api_route.py | 52 | __all__ = ["ExternalApiRoute"] | CODE |
| LOW | backend-web/app/services/ai_listing_task_service.py | 503 | __all__ = [ | CODE |
| LOW | backend-web/app/services/xianyu_direct_publisher.py | 116 | __all__ = ["DirectPublishError", "XianyuDirectPublisher"] | CODE |
| LOW | backend-web/app/services/recharge_service.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ckend-web/app/services/external_message_log_service.py | 126 | __all__ = [ | CODE |
| LOW | backend-web/app/services/withdraw_risk_check.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ckend-web/app/services/user_publish_address_service.py | 15 | __all__ = ["UserPublishAddressService", "_address_to_dict"] | CODE |
| LOW | backend-web/app/services/platform_category_fields.py | 42 | __all__ = ["category_result", "first_text"] | CODE |
| LOW | …web/app/services/publish_account_capability_service.py | 330 | __all__ = ["PublishAccountCapabilityService"] | CODE |
| LOW | backend-web/app/services/dashboard_stats_service.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/services/settlement_service.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/services/websocket_client.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/services/xianyu_personal_publisher.py | 217 | __all__ = ["XianyuPersonalPublisher"] | CODE |
| LOW | backend-web/app/services/item_service.py | 16 | __all__ = ["ItemService"] | CODE |
| LOW | backend-web/app/services/order_service.py | 15 | __all__ = ["OrderService"] | STRING |
| LOW | backend-web/app/services/remote_content_service.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend-web/app/services/platform_category_selection.py | 264 | __all__ = ["CategorySelectionError", "build_category_selection"] | CODE |
| LOW | backend-web/app/services/xianyu_item_edit_mapper.py | 353 | __all__ = ["map_edit_detail_to_form"] | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 396 | async def update_pause_duration(self, account: XYAccount, duration: int) -> None: | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 401 | async def update_message_expire_time(self, account: XYAccount, expire_time: int) -> None: | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 407 | async def update_reply_delay(self, account: XYAccount, delay_seconds: int) -> None: | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 430 | async def update_scheduled_redelivery(self, account: XYAccount, scheduled_redelivery: bool) -> None: | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 436 | async def update_scheduled_rate(self, account: XYAccount, scheduled_rate: bool) -> None: | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 593 | async def update_auto_polish(self, account: XYAccount, auto_polish: bool) -> None: | CODE |
| LOW⚡ | backend-web/app/services/account_service.py | 599 | async def update_confirm_before_send(self, account: XYAccount, confirm_before_send: bool) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 360 | async def update_cookie(self, account: XYAccount, value: str) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 366 | async def update_status(self, account: XYAccount, enabled: bool, disable_reason: str | None = None) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 380 | async def update_remark(self, account: XYAccount, remark: str) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 385 | async def update_auto_confirm(self, account: XYAccount, auto_confirm: bool) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 612 | async def update_send_before_confirm(self, account: XYAccount, send_before_confirm: bool) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 625 | async def update_only_send_card(self, account: XYAccount, only_send_card: bool) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 643 | async def update_auto_red_flower(self, account: XYAccount, auto_red_flower: bool) -> None: | CODE |
| LOW | backend-web/app/services/account_service.py | 659 | async def update_ai_reply_block_ordered_users(self, account: XYAccount, ai_reply_block_ordered_users: bool) -> None: | CODE |
| LOW | backend-web/app/services/__init__.py | 13 | __all__ = [ | CODE |
| LOW | backend-web/app/services/xianyu_item_snapshot.py | 303 | __all__ = [ | CODE |
| LOW | backend-web/app/services/alipay_service.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | …end-web/app/services/external_publish_media_service.py | 191 | __all__ = ["ExternalPublishMediaError", "ExternalPublishMediaService"] | CODE |
| LOW | backend-web/app/services/xianyu_item_payload_builder.py | 485 | __all__ = ["DirectPublishError", "build_item_payload"] | CODE |
| LOW | backend-web/app/services/publish_address_service.py | 17 | __all__ = ["PublishAddressService", "ResolvedPublishAddress", "PublishAddressQueueState", "_address_to_dict"] | CODE |
| LOW | backend-web/app/services/xianyu_item_edit_service.py | 341 | __all__ = ["edit_seller_item", "fetch_seller_item_edit_detail"] | CODE |
| LOW | backend-web/app/services/listing_monitor_service.py | 12 | __all__ = ["ListingMonitorService", "_task_to_dict"] | CODE |
| LOW | backend-web/app/services/ai_listing_text_generator.py | 149 | __all__ = ["TEXT_BATCH_SIZE", "generate_text_batch", "parse_generated_items"] | CODE |
| 70 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend-web/app/api/routes/payment.py | 177 | body: body.toString() | CODE |
| HIGH | backend-web/app/api/routes/payment.py | 269 | body: body.toString() | CODE |
| HIGH | backend-web/app/services/xianyu_publisher.py | 135 | Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); | CODE |
| HIGH | backend-web/app/services/search/slider_handler.py | 299 | return null; | CODE |
| HIGH | …bsocket/app/services/xianyu/cookies_refresh_service.py | 153 | Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); | STRING |
| HIGH | launcher/service_manager.py | 140 | error_msg = f'{{"success":false,"code":502,"message":"代理请求失败: {str(e)}","data":null}}' | CODE |
| HIGH | common/services/captcha/verification_checker.py | 159 | if (button && track) { | CODE |
| HIGH | common/services/captcha/verification_checker.py | 164 | return null; | CODE |
| HIGH | common/services/captcha/browser_features.py | 36 | get: () => undefined, | CODE |
| HIGH⚡ | common/services/captcha/xianyu_slider_stealth.py | 1009 | if (verifyButton && verifyButton.innerText && verifyButton.innerText.includes('立即验证')) { | CODE |
| HIGH⚡ | common/services/captcha/xianyu_slider_stealth.py | 1010 | const href = verifyButton.href || verifyButton.getAttribute('href') || null; | CODE |
| HIGH⚡ | common/services/captcha/xianyu_slider_stealth.py | 1010 | const href = verifyButton.href || verifyButton.getAttribute('href') || null; | CODE |
| HIGH⚡ | common/services/captcha/xianyu_slider_stealth.py | 1016 | return null; | CODE |
| HIGH | common/services/captcha/real_mouse_slider.py | 129 | try { Object.defineProperty(navigator, 'webdriver', { get: () => undefined, configurable: true }); } catch (e) {} | CODE |
| HIGH | common/services/captcha/real_mouse_slider.py | 140 | window.__cal.push([e.clientX, e.clientY, e.screenX, e.screenY, e.timeStamp, e.buttons]); | CODE |
| HIGH | common/services/captcha/real_mouse_coordinates.py | 90 | if (!button || !track) return null; | STRING |
| HIGH | common/services/captcha/slider_stealth.py | 146 | raise ImportError("Playwright 未安装,请运行: pip install playwright && playwright install chromium") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | promotion/backend/app/services/product_rule_service.py | 0 | 分页查询删除规则 args: session: 数据库会话 user_id: 用户id page: 页码 page_size: 每页条数 is_admin: 是否管理员(管理员查看所有用户数据) returns: 包含规则列表和总数的字典 | STRING |
| HIGH | promotion/backend/app/services/publish_rule_service.py | 0 | 分页查询删除规则 args: session: 数据库会话 user_id: 用户id page: 页码 page_size: 每页条数 is_admin: 是否管理员(管理员查看所有用户数据) returns: 包含规则列表和总数的字典 | STRING |
| HIGH | promotion/backend/app/services/delete_rule_service.py | 0 | 分页查询删除规则 args: session: 数据库会话 user_id: 用户id page: 页码 page_size: 每页条数 is_admin: 是否管理员(管理员查看所有用户数据) returns: 包含规则列表和总数的字典 | STRING |
| HIGH | …heduler/app/services/scheduler/listing_monitor_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| HIGH | scheduler/app/services/scheduler/polish_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| HIGH | scheduler/app/services/scheduler/redelivery_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| HIGH | scheduler/app/services/scheduler/red_flower_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| HIGH | scheduler/app/services/scheduler/login_renew_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| HIGH | …eduler/app/services/scheduler/api_cookie_renew_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| HIGH | scheduler/app/services/scheduler/rate_task.py | 0 | 主动清理过期的补评价日志 删除 created_at 早于 (当前北京时间 - log_retention_days 天) 的日志记录, 避免日志表无限增长。使用参数化的 orm delete 语句,避免 sql 注入。 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | promotion/backend/app/api/routes/material.py | 35 | CODE | |
| LOW | promotion/backend/app/api/routes/taobao_alliance.py | 69 | CODE | |
| LOW | promotion/backend/app/api/routes/taobao_alliance.py | 21 | CODE | |
| LOW | promotion/backend/app/api/routes/taobao_alliance.py | 93 | CODE | |
| LOW | promotion/backend/app/api/routes/taobao_alliance.py | 124 | CODE | |
| LOW | …motion/backend/app/services/taobao_alliance_service.py | 78 | CODE | |
| LOW | …motion/backend/app/services/taobao_alliance_service.py | 198 | CODE | |
| LOW | backend-web/app/api/routes/listing_monitor.py | 445 | CODE | |
| LOW | backend-web/app/api/routes/cookies.py | 230 | CODE | |
| LOW | backend-web/app/api/routes/cookies.py | 1050 | CODE | |
| LOW | backend-web/app/api/routes/product_publish.py | 370 | CODE | |
| LOW | backend-web/app/api/routes/risk_control_logs.py | 30 | CODE | |
| LOW | backend-web/app/api/routes/cards.py | 185 | CODE | |
| LOW | backend-web/app/api/routes/auto_reply_logs.py | 15 | CODE | |
| LOW | backend-web/app/api/routes/orders.py | 56 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 109 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 198 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 177 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 338 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 356 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 376 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 451 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 503 | CODE | |
| LOW | backend-web/app/api/routes/distribution.py | 529 | CODE | |
| LOW | backend-web/app/api/routes/account_login_logs.py | 21 | CODE | |
| LOW | backend-web/app/api/routes/items.py | 107 | CODE | |
| LOW | backend-web/app/api/routes/payment.py | 46 | CODE | |
| LOW | backend-web/app/services/websocket_client.py | 280 | CODE | |
| LOW | backend-web/app/services/publish_execution_service.py | 45 | CODE | |
| LOW | backend-web/app/services/account_service.py | 70 | CODE | |
| LOW | backend-web/app/services/auto_reply_log_service.py | 96 | CODE | |
| LOW | backend-web/app/services/dock_record_service.py | 305 | CODE | |
| LOW | websocket/app/services/xianyu/auto_delivery_handler.py | 3091 | CODE | |
| LOW | common/services/publish_log_service.py | 37 | CODE | |
| LOW | common/services/order_service.py | 95 | CODE | |
| LOW | common/services/listing_monitor_service.py | 1103 | CODE | |
| LOW | common/services/delivery_block_rule_meta.py | 62 | CODE | |
| LOW | common/services/xianyu_mtop.py | 128 | CODE | |
| LOW | common/services/captcha/real_mouse_slider.py | 99 | CODE | |
| LOW | common/services/captcha/orchestrator.py | 124 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | update.sh | 1 | #!/bin/bash | COMMENT |
| LOW | websocket/app/api/routes/internal.py | 1821 | card_source = rel_row[0] or 'own' | COMMENT |
| LOW | frontend/src/pages/items/Items.tsx | 301 | // 搜索关键词变更时自动触发查询(已改为手动点击查询按钮) | COMMENT |
| LOW | xianyu-mobile/ios/app/app-Bridging-Header.h | 1 | // | COMMENT |
| LOW | xianyu-mobile/hooks/usePagedList.ts | 1 | import { useCallback, useEffect, useRef, useState } from 'react'; | COMMENT |
| LOW | xianyu-mobile/api/wrappers/admin.ts | 281 | // 风控日志(对齐 web RiskLogs) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | common/db/init_database.py | 3690 | VALUES ('admin', 'admin@example.com', :password_hash, 'ACTIVE', 'ADMIN', NOW(), NOW()) | CODE |
| LOW | common/services/promotion_address_selector.py | 227 | placeholder = str(await current_input.get_attribute("placeholder") or "") | CODE |