
    \i                     Z    S r SSKrSSKrSSKJr  SSKJrJr   " S S5      rSq	S\4S jr
g)	up   
配置加载器 - 统一加载所有JSON配置文件

合并了原来的 json_loader.py 和 taxonomy_loader.py
    N)Path)DictListc                   l    \ rS rSrSrSrS rS\S\4S jr	S r
S\4S	 jrS
\S\4S jrS
\S\4S jrSrg)ConfigLoader   u   统一的配置加载器Fc                    [        [        5      R                  R                  R                  R                  U l        U R                  S-  S-  U l        U R                  S-  S-  S-  U l        SU l        U R                  5         g)u   初始化加载器configdatage10webN)r   __file__parentproject_root
config_dirweb_data_dir_vulnerability_db_load_vulnerability_db)selfs    D   /Users/yu22x/Desktop/ddd_副本138/ctf/app/services/config/loader.py__init__ConfigLoader.__init__   sv     !N1188??FF++h6? !--6>G "& 	##%    	file_pathreturnc           	      r    U R                   (       a  [        SU 35        UR                  5       (       d   U R                   (       a  [        SU 35        g[        USSS9 n[        R
                  " U5      nU R                   (       a  [        S5        UsSSS5        $ ! , (       d  f       g= f! [        R                   a5  nU R                   (       a  [        SU S	[        U5       35         SnAgSnAf[         a5  nU R                   (       a  [        S
U S	[        U5       35         SnAgSnAff = f)u   加载JSON文件的通用方法u   正在加载JSON文件: u   文件不存在: Nrzutf-8)encodingu   成功加载JSON文件u   JSON解析错误 z: u   加载JSON文件出错 )	
debug_modeprintexistsopenjsonloadJSONDecodeErrorstr	Exception)r   r   fr   es        r   _load_json_fileConfigLoader._load_json_file#   s    	0<=##%%??-i[9:iw71yy|??24	 877
 ## 	))Bs1vh?@ 	/	{"SVHEF	sH   AB0 B0 !4B	B0 
B-)B0 -B0 0D6+C44D6+D11D6c                    / SQnSnU R                   R                  5       (       a1  U H+  nU R                   U-  nUR                  5       (       d  M)  Un  O   U(       d@  [        SU R                    S35        [        SSR                  U5       35        S0 0U l        gU R                  U5      nU(       a5  SU;   a/  XPl        [        S[        US   5       S	UR                   S35        gS0 0U l        g)
u<   加载漏洞库数据（支持自动检测多种文件名）)zvulnerability_db.jsonzweb_knowledge_db.jsonzweb_db.jsonzknowledge_db.jsonNu4   ⚠️ 未找到漏洞库文件（已检查目录：u   ）u      尝试的文件名：z, vulnerabilitiesu   ✅ 已加载漏洞库数据: u    个漏洞类型（来源：)r   r!   r    joinr   r*   lenname)r   possible_filenames	load_pathfilename	test_pathr   s         r   r   #ConfigLoader._load_vulnerability_db<   s   
 	##%%. --8	##%% )I	 / HIZIZH[[^_`,TYY7I-J,KLM&7%<D"##I.%-%)"23t<M7N3O2PPlmvm{m{l||  A  B&7%<D"r   c           	      \   U R                   R                  S0 5      n0 nUR                  5        HG  u  p4UR                  SS5      nXR;  a  / X%'   X%   R                  UUUR                  S/ 5      S.5        MI     / nUR                  5        H  u  pxUR                  UUUS.5        M     SU0$ )uL   获取用于前端显示的漏洞数据结构（从 vulnerability_db.json）r-   categoryu   其他	languages)idr0   r8   )r9   r0   r-   
categories)r   getitemsappend)	r   r-   category_map	vuln_name	vuln_datar7   r:   category_namevulnss	            r   get_vulnerabilities_for_display,ConfigLoader.get_vulnerabilities_for_display[   s    00445FK $3$9$9$; I }}Z:H+)+&"))!&]];;+ 	 %< 
$0$6$6$8 M#%#(  %9 j))r   vulnerability_namec                 B    U R                   R                  S0 5      nX;   $ )u=   检查漏洞名称是否有效（从 vulnerability_db.json）r-   r   r;   r   rE   r-   s      r   is_valid_vulnerability#ConfigLoader.is_valid_vulnerabilityv   s$    00445FK!44r   c                 n    U R                   R                  S0 5      nX;   a  X!   R                  SS5      $ g)u@   获取漏洞所属的一级分类（从 vulnerability_db.json）r-   r7    rG   rH   s      r   get_category_for_vulnerability+ConfigLoader.get_category_for_vulnerability{   s:    00445FK0"6:::rJJr   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r*   r   rC   r&   boolrI   rM   __static_attributes__ r   r   r   r      s[    " J& $ 2=>* *65 5 5
  r   r   r   c                  0    [         c
  [        5       q [         $ )u-   获取配置加载器实例（单例模式）)_config_loaderr   rV   r   r   get_config_loaderrY      s     %r   )rS   r#   ospathlibr   typingr   r   r   rX   rY   rV   r   r   <module>r]      s8     	  r rj < r   