
    M'QiF                     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                       \ rS rSrSrSrS rS\S\4S jr	S r
S	 rS\4S
 jrS\\   4S jrS\S\\   4S jrS\\\\   4   4S jrS\4S jrS\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-  U l        U R                  S-  U l        U R                  S-  S-  S-  U l        SU l        SU l	        U R                  5         U R                  5         g)u   初始化加载器configdatau   场景映射.jsonzknowledge_taxonomy.jsonge10webN)r   __file__parentproject_root
config_dirscene_config_pathtaxonomy_pathweb_data_dir_taxonomy_data_vulnerability_db_load_taxonomy_load_vulnerability_dbselfs    L   /Users/yu22x/Desktop/ddd_副本123/ctf/app/services/loaders/config_loader.py__init__ConfigLoader.__init__   s     !N1188??FF++h6? "&3F!F!__/HH --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                    U R                   R                  5       (       d  [        SU R                    35      eU R                  U R                   5      U l        U R                  (       a#  [        S[        U R                  5       S35        gg)u   加载知识分类数据u   未找到知识分类文件: u!   ✅ 已加载知识分类数据: u    个一级分类N)r   r&   FileNotFoundErrorr/   r   r%   lenr   s    r   r   ConfigLoader._load_taxonomyB   sw    !!((**#&CDDVDVCW$XYY"2243E3EF5c$:M:M6N5OO_`a r   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/   r3   name)r   possible_filenames	load_pathfilename	test_pathr   s         r   r   #ConfigLoader._load_vulnerability_dbL   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                   (       a  [        SU R                   35        U R                  U R                  5      nU(       a  [	        U[
        5      (       d   U R                   (       a  [        S5        S/ 0$ UR                  S/ 5      nU R                   (       a  [        S[        U5       35        SU0$ )u   加载场景配置u    正在加载场景配置文件: u$   场景数据为空或格式不正确scenesu   解析到的场景数量: )r$   r%   r   r/   
isinstancedictgetr3   )r   
scene_datar?   s      r   load_scene_configConfigLoader.load_scene_configm   s    ??4T5K5K4LMN))$*@*@A
J!=!=<=b>!"-??.s6{m<=&!!r   c                 H    [        U R                  R                  5       5      $ )u   获取所有一级分类)listr   keysr   s    r   get_all_categoriesConfigLoader.get_all_categories   s    D'',,.//r   categoryc                 p    XR                   ;  a  / $ [        U R                   U   R                  5       5      $ )uB   获取指定一级分类下的所有二级分类（漏洞类型）)r   rG   rH   )r   rK   s     r   get_vulnerabilities_by_category,ConfigLoader.get_vulnerabilities_by_category   s2    ...ID''166899r   c                 r    0 nU R                   R                  5        H  nU R                  U5      X'   M     U$ )u@   获取所有漏洞分类（一级分类 -> 二级分类列表）)r   rH   rM   )r   resultrK   s      r   get_all_vulnerabilities$ConfigLoader.get_all_vulnerabilities   s8    ++002H#CCHMF 3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）r6   rK   u   其他	languages)idr8   rT   )rU   r8   r6   
categories)r   rB   itemsappend)	r   r6   category_map	vuln_name	vuln_datarK   rV   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）r6   r   rB   r   r`   r6   s      r   is_valid_vulnerability#ConfigLoader.is_valid_vulnerability   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）r6   rK    rb   rc   s      r   get_category_for_vulnerability+ConfigLoader.get_category_for_vulnerability   s:    00445FK0"6:::rJJr   c                 ^    U R                   R                  5        H  nX;   d  M
  X!   s  $    / $ )u$   获取指定漏洞的知识点列表)r   values)r   r`   category_datas      r   get_knowledge_points!ConfigLoader.get_knowledge_points   s1    !00779M!2$88 : 	r   )r   r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r$   r   r   r   r/   r   r   rD   r   r+   rI   rM   rQ   r^   boolrd   rh   rm   __static_attributes__ r   r   r   r      s    " J&* $ 2b=B"4 "&0DI 0: :S	 :c49n)= * *65 5 5
  s tDz 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     	  o of < r   