From c55acba7094d782e825a4c59e41b7293403221f3 Mon Sep 17 00:00:00 2001 From: Merelden Date: Tue, 14 Oct 2025 16:14:11 +0500 Subject: [PATCH] Tech docs for API Gonets --- .../.doctrees/api/config.doctree | Bin 0 -> 2882 bytes .../.doctrees/api/config/cors.doctree | Bin 0 -> 12929 bytes .../.doctrees/api/config/init_config.doctree | Bin 0 -> 2475 bytes .../.doctrees/api/config/ports.doctree | Bin 0 -> 14703 bytes .../.doctrees/api/core.doctree | Bin 0 -> 2764 bytes .../.doctrees/api/core/cli_executor.doctree | Bin 0 -> 12134 bytes .../.doctrees/api/endpoints.doctree | Bin 0 -> 2993 bytes .../.doctrees/api/endpoints/auth.doctree | Bin 0 -> 44025 bytes .../.doctrees/api/endpoints/ip.doctree | Bin 0 -> 37727 bytes .../.doctrees/api/endpoints/network.doctree | Bin 0 -> 51549 bytes .../.doctrees/api/endpoints/settings.doctree | Bin 0 -> 51288 bytes .../.doctrees/api/endpoints/subnet.doctree | Bin 0 -> 97939 bytes .../.doctrees/api/endpoints/ufw.doctree | Bin 0 -> 47484 bytes .../.doctrees/api/endpoints/websocket.doctree | Bin 0 -> 35025 bytes .../.doctrees/api/models.doctree | Bin 0 -> 2914 bytes .../.doctrees/api/models/auth.doctree | Bin 0 -> 53075 bytes .../.doctrees/api/models/network.doctree | Bin 0 -> 172284 bytes .../.doctrees/api/models/request.doctree | Bin 0 -> 28490 bytes .../.doctrees/api/models/subnet.doctree | Bin 0 -> 55322 bytes .../.doctrees/api/models/ufw.doctree | Bin 0 -> 91733 bytes .../.doctrees/api/models/wifi.doctree | Bin 0 -> 46958 bytes .../.doctrees/api/services.doctree | Bin 0 -> 3122 bytes .../.doctrees/api/services/arp_service.doctree | Bin 0 -> 24261 bytes .../.doctrees/api/services/auth_service.doctree | Bin 0 -> 24813 bytes .../.doctrees/api/services/connect_service.doctree | Bin 0 -> 39862 bytes .../.doctrees/api/services/firewalld_service.doctree | Bin 0 -> 50471 bytes .../.doctrees/api/services/ip_service.doctree | Bin 0 -> 33311 bytes .../.doctrees/api/services/network_service.doctree | Bin 0 -> 150403 bytes .../.doctrees/api/services/settings_service.doctree | Bin 0 -> 20820 bytes .../.doctrees/api/services/subnet_service.doctree | Bin 0 -> 134713 bytes .../.doctrees/api/services/ufw_service.doctree | Bin 0 -> 46048 bytes .../.doctrees/api/services/wifi_service.doctree | Bin 0 -> 43472 bytes .../.doctrees/api/storage.doctree | Bin 0 -> 2856 bytes .../.doctrees/api/storage/json_storage.doctree | Bin 0 -> 34460 bytes .../.doctrees/api/storage/session_storage.doctree | Bin 0 -> 40655 bytes .../.doctrees/api/utils.doctree | Bin 0 -> 2793 bytes .../.doctrees/api/utils/i18n.doctree | Bin 0 -> 13074 bytes .../.doctrees/environment.pickle | Bin 0 -> 327367 bytes .../Техническая-документация-api/.doctrees/index.doctree | Bin 0 -> 3996 bytes .../Техническая-документация-api/api/config.md | 5 + .../Техническая-документация-api/api/config/cors.md | 27 ++ .../api/config/init_config.md | 1 + .../Техническая-документация-api/api/config/ports.md | 28 ++ .../Техническая-документация-api/api/core.md | 3 + .../Техническая-документация-api/api/core/cli_executor.md | 22 ++ .../Техническая-документация-api/api/endpoints.md | 9 + .../Техническая-документация-api/api/endpoints/auth.md | 90 ++++++ .../Техническая-документация-api/api/endpoints/ip.md | 63 ++++ .../Техническая-документация-api/api/endpoints/network.md | 93 ++++++ .../api/endpoints/settings.md | 104 +++++++ .../Техническая-документация-api/api/endpoints/subnet.md | 193 +++++++++++++ .../Техническая-документация-api/api/endpoints/ufw.md | 104 +++++++ .../api/endpoints/websocket.md | 78 +++++ .../Техническая-документация-api/api/models.md | 8 + .../Техническая-документация-api/api/models/auth.md | 85 ++++++ .../Техническая-документация-api/api/models/network.md | 238 +++++++++++++++ .../Техническая-документация-api/api/models/request.md | 49 ++++ .../Техническая-документация-api/api/models/subnet.md | 70 +++++ .../Техническая-документация-api/api/models/ufw.md | 195 +++++++++++++ .../Техническая-документация-api/api/models/wifi.md | 55 ++++ .../Техническая-документация-api/api/services.md | 12 + .../api/services/arp_service.md | 55 ++++ .../api/services/auth_service.md | 35 +++ .../api/services/connect_service.md | 71 +++++ .../api/services/firewalld_service.md | 72 +++++ .../api/services/ip_service.md | 61 ++++ .../api/services/network_service.md | 195 +++++++++++++ .../api/services/settings_service.md | 43 +++ .../api/services/subnet_service.md | 272 ++++++++++++++++++ .../api/services/ufw_service.md | 108 +++++++ .../api/services/wifi_service.md | 61 ++++ .../Техническая-документация-api/api/storage.md | 4 + .../api/storage/json_storage.md | 75 +++++ .../api/storage/session_storage.md | 95 ++++++ .../Техническая-документация-api/api/utils.md | 3 + .../Техническая-документация-api/api/utils/i18n.md | 23 ++ .../Техническая-документация-api/index.md | 45 +++ 77 files changed, 2750 insertions(+) create mode 100644 Документация/Техническая-документация-api/.doctrees/api/config.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/config/cors.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/config/init_config.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/config/ports.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/core.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/core/cli_executor.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/auth.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/ip.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/network.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/settings.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/subnet.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/ufw.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/endpoints/websocket.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models/auth.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models/network.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models/request.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models/subnet.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models/ufw.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/models/wifi.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/arp_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/auth_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/connect_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/firewalld_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/ip_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/network_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/settings_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/subnet_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/ufw_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/services/wifi_service.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/storage.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/storage/json_storage.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/storage/session_storage.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/utils.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/api/utils/i18n.doctree create mode 100644 Документация/Техническая-документация-api/.doctrees/environment.pickle create mode 100644 Документация/Техническая-документация-api/.doctrees/index.doctree create mode 100644 Документация/Техническая-документация-api/api/config.md create mode 100644 Документация/Техническая-документация-api/api/config/cors.md create mode 100644 Документация/Техническая-документация-api/api/config/init_config.md create mode 100644 Документация/Техническая-документация-api/api/config/ports.md create mode 100644 Документация/Техническая-документация-api/api/core.md create mode 100644 Документация/Техническая-документация-api/api/core/cli_executor.md create mode 100644 Документация/Техническая-документация-api/api/endpoints.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/auth.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/ip.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/network.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/settings.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/subnet.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/ufw.md create mode 100644 Документация/Техническая-документация-api/api/endpoints/websocket.md create mode 100644 Документация/Техническая-документация-api/api/models.md create mode 100644 Документация/Техническая-документация-api/api/models/auth.md create mode 100644 Документация/Техническая-документация-api/api/models/network.md create mode 100644 Документация/Техническая-документация-api/api/models/request.md create mode 100644 Документация/Техническая-документация-api/api/models/subnet.md create mode 100644 Документация/Техническая-документация-api/api/models/ufw.md create mode 100644 Документация/Техническая-документация-api/api/models/wifi.md create mode 100644 Документация/Техническая-документация-api/api/services.md create mode 100644 Документация/Техническая-документация-api/api/services/arp_service.md create mode 100644 Документация/Техническая-документация-api/api/services/auth_service.md create mode 100644 Документация/Техническая-документация-api/api/services/connect_service.md create mode 100644 Документация/Техническая-документация-api/api/services/firewalld_service.md create mode 100644 Документация/Техническая-документация-api/api/services/ip_service.md create mode 100644 Документация/Техническая-документация-api/api/services/network_service.md create mode 100644 Документация/Техническая-документация-api/api/services/settings_service.md create mode 100644 Документация/Техническая-документация-api/api/services/subnet_service.md create mode 100644 Документация/Техническая-документация-api/api/services/ufw_service.md create mode 100644 Документация/Техническая-документация-api/api/services/wifi_service.md create mode 100644 Документация/Техническая-документация-api/api/storage.md create mode 100644 Документация/Техническая-документация-api/api/storage/json_storage.md create mode 100644 Документация/Техническая-документация-api/api/storage/session_storage.md create mode 100644 Документация/Техническая-документация-api/api/utils.md create mode 100644 Документация/Техническая-документация-api/api/utils/i18n.md create mode 100644 Документация/Техническая-документация-api/index.md diff --git a/Документация/Техническая-документация-api/.doctrees/api/config.doctree b/Документация/Техническая-документация-api/.doctrees/api/config.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f1718f847bbc6e5b38ab68c232720f649f38a3bb GIT binary patch literal 2882 zcmaJ@TW=gS6mBki%Vsy1UR1RSst}Yw$u1xy5WFDZEg}yE^#Lgwd1t(96OTREo@Vn< zsR&v%$Py1V65>}N@lqkdZ%F2H)^6Z*x85&!zWUbE{tjStO zeh-@s%dMbuTkiJx@8|!V|9$b(`K$9kFMhmudj7}7^Yd31zxZ$lM^?X~)8PDnG@to0 zux3UOhV^XIb)q_Mw&I#qxQA|4a7q1PJ|b?7SgZLcw@5RjwZapF6kID7#25(i-H;?L zzuHNjT`oo>KGt*`baL0SWD>SK>$5wo%kHujw&Ok>GL_O{N;MS;mBW;9In1>B4&^b! ziINomzJB;Vym$AqbI_9FZ%sykEvoEP@r(~MY%rbwlgtC*Yzzv!-5o+Ym zT$AwxrNdXRGEocKGEYY+ZQ>8ExwQgSMoDoB-8I1TGL4+Q!#-d;>;X!;iuMf9`h{}1 zjjC$E|$`Vo5qtYqLlLvoGt{>+*up_Fuus)NNoN#SJ zt>tn8)^F8gV62t26!>$^M?~akU_A$#Dz{l~{UPfgy3T}3s)^d#sVtq_eBpXw+5ijD zbgXphU%0*jfHQzH4MWSo;N4O}1uZ1e3AZeoaUA}t0~P5H-MXd$yOE%eDayI*))*1> zvf;Mq6sSjbHa9b+hHE5rluzKUe?qiG6``RiNg?T=WibsYh4{Ec%_1sel|ak8PHxBh zAMYEE@14cXh-$5L#E47;a0wV7x7d2OQC5D=N~5si-R_m0D<;^_u3s9x3}AM2XK~}o zNw*mi0PqY$eFPHnt|y3`27kGbI`UN@qI8!{3hkuZaCur=ceIJb^u446@n4tu>yEt*X}I; zR1Y|{|q1|@70Aw1~%&ZfLOcoGw<~Gf#v}77FK4AhsfOl1> zfctfm60q$19F#UF)b(OrE+e60QeGBrH)aI!pz$TyQ01b8IDMRFa1ov?#RX8!0NfUk za5)ABs-dtQri95ySJZeKuqzZPnHb&%#~zTu&60q=r-*=2YT@H%46Wmc;u04TF5ED5 zi>SA%*AB2M#^pdeb1PIn4sQ(CE=LKt3nX%xaB#y$mgosC|M0%pLQp`K#ghx;99Lu* zl)Xa?^SWS z7jtwxxQE435-2&-E5n?ZlzIpry-i0-)a@@+Z(I@9+MNZ9otf9-(Ds6Tj8<*Kli=o6 zTh$J3d<={j&my1#*Ga5|Kw*&s?u*tJmHcH${e*t>dleho? literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/config/cors.doctree b/Документация/Техническая-документация-api/.doctrees/api/config/cors.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6612d0febb30b3d37fbf4e133e34dd2a5bc08e45 GIT binary patch literal 12929 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 E3l6OlxBvhE literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/config/init_config.doctree b/Документация/Техническая-документация-api/.doctrees/api/config/init_config.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5fc3e7b3cf9865b7f15bf64334577fa52502a10e GIT binary patch literal 2475 zcmZuz&u<(x6i$=wZZ@0UCjEgBZ4g3G3RQNg!~t>Tz#$@sf_ekXJNArCJoaFF+RdR7 z94a-EZ#8%RR6ftlPIgyBiZXtFem}qOz5F%!=il*O^Al#wWVM&d&9!0N#c-GeCD%TF zh+qF5-^OQQZ0Q?kYMb#G_MnjoshH(D{uaev7&)GKX>_kI24W~i&E3FDulUAIxStuF z%VI9I^rZcco$}pZ`6_w+U!8Zcjb&I-c=l18gfZzu6$fG1MR*zRDyezAtd}$#QSYr> z)*hLqOb#S-h&qfiMV*5X-vdp{_Un+<)$L(Pvn$KP2PEAE=016h?FW`Q_!S1p;*oTFFJ5@nR$Uxpm0q>|!7Bicb-w z_zXdHWjara=Utho_#8$3;`Vl{h*Uhq?K1=`z7b;tdC&$ap6?o8n^`~TODCR(hu%`{ z6ip2!$fU5`wWS+)f9vf8G`kiHGaYf0OVaOk-AQWwD3X%D*G z8tu7eF$`Z(Rih6*>V~HFRqf-Ym|cc(!8Nzk8yj(86b<#XtZxTV{H{qQ*SboTAOYW$^bFjYZN?(8Erh@xO^X`3ER3Z$tpLtjPJwD0Z$cx zTPBJ)7<}AHxZ;h3ypdjzHN4=jd(h$SG8|i88S9DSuQ|%OAC3f7{c#XZ`3lTHcD{CN zr9l`lzN`zlo4uh{ql(b5oR*M`(T6<4(jYyx{#H~uUNb{hWkS;lUsc9&viY)sNao3F>12!7dxS|x zmntQah94e|);s~{j**N5GaAz2ZrZ7lT&i|3eU!f7#BtjYlj~%Sq2CjXX7s5&Ufc<% ziEMz4E`UNMOX=g!CtrnG#VZ1eU{L9-DcEt6EGc47ya*o)?<@DiVga$6SJz$`JvX)h zogO94CIDy>&r7t&qaBBkpMUx7cc|yg=Gl(fi*+;L2Iw)F)HyKF4Tbw@O1OHt zqbAFQU1ey?#I%;KA|O*PIRkyK5rN>`!^fixT33W)e<(s3c5Abo-iOm}w*spwZwJ~< zIN+bCY#IPn?&&c(!q>1MB**V9a*|?ZAAHkJJySBO;Y&Z;z%+zTdV4Y+} zDHIktU|)=W?BpMi{JZ!P;KzR?pb`FuaOijIu%8=S;z=)VS~ih7Q#DHvDN?tNSQ>5J L6iCavUe5mmZCK%4 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/config/ports.doctree b/Документация/Техническая-документация-api/.doctrees/api/config/ports.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2c9ca03766680743dd36c529379deda8ecb4ed9f GIT binary patch literal 14703 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 HVmAICl+sSe literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/core/cli_executor.doctree b/Документация/Техническая-документация-api/.doctrees/api/core/cli_executor.doctree new file mode 100644 index 0000000000000000000000000000000000000000..234090eb036ad4366955d8001d067591565bfee9 GIT binary patch literal 12134 zcmd^FX^b3472frF@5}3CITjm@AS7$>?gj}YSfW5cBp?$Dg%CwDNvF4`W~$pg-9sPt z?hn8r3fYAc5u}464vAY)fW&d^IB{Z!01^s^m;s3&DB?$c@e2_F5+~t%Gkk$h z@;C7zen8y3!uHHPwytqcF_ym>o8c8O?Jf9!4gOz?|BJLS@FuY3 zc4Gc^zElut~{92{ULYFo1leP{@-b^X!LtDu*GH=0$#s2OEGFJ8aRPb(nd)_UINoeL0wlA@X zX+kcgF5j8XF&^@W*mI&_507)Q$0gaFG*6bcNDgUUl*S4wzu1q;F``nDI7W!Jr*5;G zI&oF%0$?P|Cv0}of=^DwZ1!lFp2guX3tsQ!5XRxcA~UG7C=m-r!>`6J3%lJA+#mq$ zYQlvW!4uRW5%WDgmQ=iN6tpX&DyuI%E!dEV31Wu7M*c7%rs>j%8#RFipCn3k~)&g#qW-)3D3 zs;(Wez;rcm{#zL*=fz0M(Ly8JI>xepTNHaGTCu0OfzaLDSW>RCBo5--@4&HNBWP~# zhcdIzsU-;V+9(yhR&LXlm+*#Uw`9degNnJ4&`Bz)3Uk@Hh@urn2W}i5|sR zQaoK(vpo`JFCo-kQSSy$ycn;QRa*BiMAQpVv{%We0QmV-(SEAVOYnf7Y<;i&`PMV7 z=UUI;@99eGZ0ou9gO%2kt#hsOtxK&JTBqChwl3o7sn(@R>rDGg7`g=TivYNYNe@=w zk6tv_WTpLHJF3&h1 zuI_*_U|9_f@Xmq3fq~Yyz~l4a^6B;iN(8NQs}rq9FmeH3UTELjzE4W?6#kxTe_qLq zM0uuiPZ+P^)Mv3UTn=LIo=WSP3TB*w{LcX3Ea^Z6uMj;g(iWr=w8Vu9-p>N$NuYt4 z+xJb7yxXS$aIW=q`@YJel>b>^!}s&hlT$Rab^356jH-Sd9ZFTI0zD$dIVS?i00&ItWEcw~q#I5T*J4<8T{g%~yArSY$@yubXv$SjXQ*Y0k|MSyay>yQb!J1g@v zgWNVwSV;5=LlXNs6+9FEOj+?Y4Dal~uzgg4FLhQ3dO?x}QO}Dr|9cjs?Y)z`JI0Yr z-S>hA*GP5m&#t!+yK*C;S;|QIB66lmv&gi@cY$lPb53pvL z;&#{K$T!o)x7U{}fkJ-i*f|1m{0gO*B8+{zg+Bu7X7*8sT)Liatg&_N*xGs^bigwl zsGHrWUnrs8QL|fpG4S4+t@hn+P+(GeuE{t6d|=Sg{6nO4^hL3a^Vy#3IFV@dSNku%JKgN$I-z)txULRQIEWA4rBS`! zm+D<`eP_QkNhr1p$=}TEWv2tDZmzqjd5YPNQ)ZIaK>1_ji&5>=jtM;rp8RqCMEQvE zRIh6+evS+NwDSn<^StwI{3#cig*@0iknm^4TnACOb|G3&;LLp}$f}WpRb|fS%KTa6 zMN(|GzFJh6+7GG%hE`cZr2%yelnYQYkhO>BTjyjBrk5SIPzRBf51NRQ1S$+vw~{4} zyfk$MFcq=-(Y_j~doSV~Dt1@?1Pc-UAf-}OF={sM3VYY86^T?Obg`( z{GadDHJWhCtCGcxE%|%Flb0`xCx22r`6K?wI>nyKqUIlISWol1qA%_+Gh$hz$<5F% zoq4olYWK19?;VTxuMoVd2>q)hbbC-ermGWdkGj1q?3aU$^G_^Xjy0QlVP82my|z#G z_Y%}8XWihTew@Pxat9xxG>lsj2ZV(WKn?o!@IX z(->TYn0L3nuEK&IGUU~V9w$0XJP#ZH;p}36H(k#D5DFHY8!@9Zx#|cRnaGF_ud&D` zmB=c}y3*@reXQ8p-IueqOmxR+(k?|e98u{^dC4A`mHJxH6YiQG-M=_vm?nKj$Gu<= z|AMX|Ns%*!Ih)Qjex*xsW(c*&oQaRO9V93v?d}YhNt)PpS(5JS8l3a680`d*RXqDn z;ukO@JJ$7{v8b3ig2EK{tDQIN>AkFi8ASpsIqdupTSIdfsy+I<=P#)qqfIgD`Pt)4 zHoQdrL>nkpOr;;Q_c=hM_vv8{H0$}d_R-!12~{C!gXo{_&#(XUSQ zWH%M+q>qbrdnxZ}Gqc{TUTJ`tHEhws==rcgg9!(QF4^e92Mhr=An0iI{WZaHPL++nT;l1CIjD( zKq@Y6*Ap?gf`nC(K;@<50GLQ$>O=J6 zhOu7rafP`lW^g35oAM-zi6ItzlNw7MS_<_N3_u(=m`nY8XY;@I#S;cv6m0`I`A`W(Z z=~%+~2Q*vEsC5e(ve^g9A37$BeY6MYUdX{B7kf&?v}=0x*sL>foVu3wpg~kz6)-e| zRgEg6CK#Zh=ES371b(814k2*Fu4W2>exDf=4WULcB=(>u2{rP#(KK?E1Y_j@N?9!M zOqUj%l_OHwN&3Z5Gh}hqH_$={sC|e%e#i`crqmKEGEUf`tyFf_sM?{q=F&z|Dn~O@ zf!R%AGa;Ors+2=(QZS=tqqmA$N?%7$K!Qd+*_nWrHLO;J$S2WB3sI@pBZFd&>x%cd@h?^bj?n?Vz1ZL%e}UQ8Qd!S;26)+}uDM@Rt3c4vU&6 zNJ#)74YWEyJQ2h(hViAhUH>ldb0(-+9m~^5vHZ2!@-SYLRQ5OvmTeZ*Bn~))6&^KQ zARCX&HCRzK;>nRQaS%G$FmmI}FO$>W$t|%j-0&iE-QaeeyZ8_N-Rn};CZ@s$`nrry z$FS-UjJis`t5?JIEi+~9L5m~ZwIFz9Z{V_IA!Z+sn+R0Y&#dmUl^fWC_V||V)u02Z zU)WEM0$0}^V0MFa*Y!TL%2C=IG-=a(>X=NI@1#W)SiNDLtPVJqYnJkn=A8H#CLZgQn* zG;gWkg4NXsnPNY+P4r{pN)+*tG7TovTt)g6O5^mu8-@eHe+w7;}IJZ%squ$%eL zwbCyLcyJz;ACqf9bg_Kb1(U%}gpbh=rQ;8Q1@|Yn!4Pnv0h0npL&#ns%za2{crqWB c;+wQR%Z;m~E_JeaG^fDLr5=G|dAzp#Z}Eit2><{9 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/endpoints.doctree b/Документация/Техническая-документация-api/.doctrees/api/endpoints.doctree new file mode 100644 index 0000000000000000000000000000000000000000..61c2e615540d8416d1b33f8766c0d12e8ee9686d GIT binary patch literal 2993 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

E8OYz8(MpxbsB#GA7Z`?H0JZ}(FhC;g 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 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/endpoints/settings.doctree b/Документация/Техническая-документация-api/.doctrees/api/endpoints/settings.doctree new file mode 100644 index 0000000000000000000000000000000000000000..568530a4ee75f016ef9d5b360772214239c3bacb GIT binary patch literal 51288 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 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/endpoints/websocket.doctree b/Документация/Техническая-документация-api/.doctrees/api/endpoints/websocket.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a9e651a5ac87c9279bdd8e353617e250febc64ea GIT binary patch literal 35025 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 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/models.doctree b/Документация/Техническая-документация-api/.doctrees/api/models.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8b7a591da26b7e25028553a8d87e34c3548a1062 GIT binary patch literal 2914 zcmZWrTW=gS6wYmL+3e=h7NIsl6@n5d$pYd5!3zR}5E1)OPdZD$Xqz=2WVL z8t>WxNU5~`rGNV;|I8n|jwTmI))>bz5e6+&+EUh|MEc&Vq4$QX)w65``nifG&2Ho*0Vj=iE97YrfXJi z4c(UDlKNpjB5s>ltNAFm2q(C|$rA%tT`LyE7=ZY0NRpOc?Ih3UixG*>H5~_;+_fy3 zge}kd>^AGNJ8Y93x=#j7rF4)|O+`ZGASGN5GOd0<8q8p#B*njPA3PkuQ8OSJAEd}E z608j(I6B+NM~Ju`t29%&Ocruerp@h|jBzM0`ASyYsC9$u09g`=L8n01?B5(&zufHGPs(gc0QT7vxPo z!jS^*FTnZuqQDmIUGOmnNZk&XvB(oT=A!hAeab##U$8IPSL|!*+9{bPG=pnI(` z3XY-B6QM@_$~75JkbZpiDn&KWmU%itc@lrN=C%t48YRUgWVb=(c`9=D4*P%|vim5@ z7D{{y`Yff??N*sTxzHrbsP<$r%i;XHb7}-VU?8nk1nRwyBUN$0?td1zPiDmmYC2G} zSu(6}2P|23WzlZUdv@R5w3_2XQJu8Qg& z+L<9`FS)j%)^a()RM@Y_#8@k7DR}Fe4~YO9Y682a%59cgKVrAMmnpma5l}?UtEe(9$Thcz3k2v!a6i;`*i1 zxdXGKhszr)C*58M0K_v4`4I@nyPhC&l9LHVx)ZE7(4X#xrm@mVgk}b9U?z;Ap=-uU zju9i$!IK#qSkv_}kW@5>+y)2NdP$yUQO!qWwE#G%s3j3W;ckHx-4IGYhcZL+L`Bmy zuxXD@Gi7MBc(R~KY@?^#@RF~)QNj%wi4aKTWoyeG$xfnTY`FbF@aF0a*5HlADRuckrS{`@RVEs&E8wCpV2Hri(rh&xJcMeKt=?< zhrV#HGHWyQ@n8VhoMxAnDS4{&1nqPyNEQx2GO{#9c`VA&27dD9dmkd7eLap>)CXj) z{@zSII+p~#o>P6wsT~(KFbxLGrUJ$~mWyo)8Qdlb+V>J3Fp7Kb%H4_~ zbskY%{vyIf9foe<^?vml0$0Vj9B5Z=lgg*zZQ|PHC_(RniCiWey^?qCTmUn_v2ZCo#!VV>fl1H2W$@|(r%v2mRM*vkwaKJzTTGVCt? zKW1IydW*FxPWNJtiU;%1SR$b%XL6;Ri%2O4=TX~qq(oi*LiFYeSW9=7G$o8b@SXmKnLJWiC)4h m(4gq0)p~d=!QC1z>ej8E8{o+#lx#Z*^Q{^M;Req~r~d(#0hWva literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/models/auth.doctree b/Документация/Техническая-документация-api/.doctrees/api/models/auth.doctree new file mode 100644 index 0000000000000000000000000000000000000000..01ef1fa1533635b49b909a5638c35184c4f120c9 GIT binary patch literal 53075 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 G@&5-SPfN%E literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/models/network.doctree b/Документация/Техническая-документация-api/.doctrees/api/models/network.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cbd295ec1efc848f491b32c11ae85329a8daff69 GIT binary patch literal 172284 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 VSkg- literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/models/request.doctree b/Документация/Техническая-документация-api/.doctrees/api/models/request.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5e2c5f55674ee70c0a49b8288435ebfc17af6338 GIT binary patch literal 28490 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 A9smFU literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/services/settings_service.doctree b/Документация/Техническая-документация-api/.doctrees/api/services/settings_service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e71df7830817c6c9176d618f1bc7ac1c2df9e69e GIT binary patch literal 20820 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 QkKrOYT*5cu)pFzi3p{X#8UO$Q literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/storage.doctree b/Документация/Техническая-документация-api/.doctrees/api/storage.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6612d61268d0497be57e0b59d0a2dde5fbd39054 GIT binary patch literal 2856 zcmZuzU2hyU6wTLuWwV=)wy0_oR3RvVl3hSNAjAWL$B2C>sH#+cQ58|=Ksv!&i|gjeRny3)D>` zM0Kug(>1FUM{Y}SN&P4v6SqyQ)qI>=94#DWlP3mgyH+fSF)-r0AxT<(wUa!%8jMMN zrs*X3#DUOobZzOV?yP0c7~rAPnnt-&RLMI{6ktJz{L02nfkt*sw^KO0UUAIgj!oFv4 z*sg}T78vzVh$tv3%p#RWsNw~rK0z3%EM1y><$9r~fCbTPqIBwCxxN8mvj{o~t;rzZ z-O@q@EiBPFw=7zy8v9iXDw&Vmj;5K?HWKt11)Ljhn-NhD8*ZP@I8e02=4Rp4aE*kH z^C`CLpA#*CB0MxDDJ&h7ET-W|AwMpGSwv;55_oyn$?fFi>l4HAeYiRqQLUAZ7?Ftp zBS8b4Ew1d-Dm zO$u-)7;iwO?uMqZ(n$nKgErVEw2zT%#!60bM!><71shn?^+|43bY*fI99-)qd74Ev zAAxFN;Gm+GM1+95g{4qKDE*ZwGc-?BG)n`U_UJ5AhDOUP3yQ=xdd3Ye`MMh=+>o&d z2dT1bEp!6S?cgv5$|yvKpuNg1T68k^UiiW$hU!9?REB5?>fJ>jLY>MX8r*&m8)ze^ zV4>hCxBkbyk6k~bSp+}xVh?nKA+xE#W*tk$ zkWdoZb=w_*kZDvavpzs%vcQl_w`VS-C9{a}DHHgCyjwyA-tU-{KxMz?khB3%H;QpN zjD(6wc}cjVm=WZI!k1zL$_0d2eU@j~B0Nlr)?f7i+!L^HIROW%rf?9tgvrO(+;|$e zD-O z6xdtASbno7?6Gm3V6Yb%GJNjYlS{+y;s0aSHLkZ@t73I8=BRks9uZ4RkmSOzOmo>% z`XPDLHXSQbm%nhmdCgdRcUB^H7P}UU4p!o$wQ3t41Glcns%CK4qhZ8&2Z0s1PGThl zfW;YbU$lOx?61S&|2$ncFa1L(0Ixx43GX+9qL;hY&11#ft<6Q MRjnZ0;Q4s)FTEIq<^TWy literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/storage/json_storage.doctree b/Документация/Техническая-документация-api/.doctrees/api/storage/json_storage.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b982459eeeca1ba987b5b289b57f8608c5665819 GIT binary patch literal 34460 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 J@~KUY{U6u>D_8&k literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/storage/session_storage.doctree b/Документация/Техническая-документация-api/.doctrees/api/storage/session_storage.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0a27cbb7f877e5f79245c0f930e5881c48adb1d GIT binary patch literal 40655 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 RgLzsEi*+Lz(b~l5{{g15YXblP literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/utils.doctree b/Документация/Техническая-документация-api/.doctrees/api/utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8b267dc132cc5d4c451f29dce8e35ec18fd245b0 GIT binary patch literal 2793 zcmZWr-EJH;6i$=uUy|MYv_+^*P=%lrN_HvYqUseAmle4vC{iyf%RA#;n|SQO_B5M| zN>J3Q5x%Q=0$!pLFOj?e&%)=K*~xB*w95GS`22p~v43m*_3y??`R50zP6{Wa9V(qN z8+Np;e>LTfEIXFTw+C zww!R1Eo}M0#ow2&FFsuSbMfKw_2r)-YC>`SXEuv2|F{1pR6(?J3YRYM9p58OjC{?v z>(Gw;x)h3qqhd_`26fJeap90sOkqu=7UB9%BB`|y;=842R(*BTBEMRUX>wxNBI246>5|l{R>KAM^mjB{{8gqc!WUhh~{Ec z)!0}haPV}s7$fCwqO)8VDqSc~RXM+Hb1u|uNYk`#OULQN8Mau;N|%3v{P;Z-@l*Uh z!|y(R5AeI=dyQvgj^Y_n=6mD^&BjPPdaT0RK>e0bi7Zk!5wg_c-&5bs=qzQqhVWH-M+BXbS!n|CaCb zhbYWCYCJ^$mXh+@b?%3!hUPglfiC75&wqW@n`j3RV2z2``$srZm&Xq-|5ySbofj+` z>cP-j)#NfDbZR-6Mb8cN_(Olo8LF(Lu|Nb!m>Om)=(U`7R901}b;_a?(ccX}ND32y zO&S<)%_S9_eb+MQgqnh!yA4|>Mk~jF9p65tvOvcgy0&%U^1_89J~;BdDO1c)r%k{j zr67c(S&qe~(b^$YG<+8PjZyHMRR{!rPoS_-FAF2F>Z1uHQX}pnlveEES@3%km{HoX zh0S-qABO@EKxPwdvhdCiEYOz|Kt9eE3xjtn36rdpkW=9}nbQ;g>H{@jkNlQlxi*eS z_L8BTtA2x1*(_Urm(2vK=%_2~T&d+-DH|74xEq{OqfkX?7)CQldT3d~VoEVSp-?lz zRH9R81>Y;&GD?wUd4)CIH}Bj`~O>6ntM&H7)3rq1-9ft6-?VX;`97NY6pf-X8r&`=B^zSvuSB_JMXJdx zi)h+mvs_z77EhKCNgR18tf=t1O;Ta$SjI%^C_8hWfOA_&#)26o>0q>9tC9H#^B=`8 zII+x>#AGU3OVRI5%pmlsT4K2EMzR4mY6=uekqH-m-1))}a+VWN1cOW^Wx=+hWK0oz zVP=y6v3W$ux!Y^-$Q0Q^FSGYic5k*p-@AOpMq1NdRPUpQNDg86x0}IrzApK+Fz>Px+ZM2drKC3bFby0y(Rk? zt;WTN!0qd{>K)wk7#InjG(ZKelSE62!XgLU7o8t!`TLkW%-A>K85n?P9k_&tm_^eo iug&mS5^px*vTvL9g9A93#+GfQalX}~Al~4`c=#Wv4rep~ literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/utils/i18n.doctree b/Документация/Техническая-документация-api/.doctrees/api/utils/i18n.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6bacef5b3245c952e505629709ac6594d7169b5f GIT binary patch literal 13074 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 F{|{c3+u#5I literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/environment.pickle b/Документация/Техническая-документация-api/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..1e96efd377e0400a86fa4a9aa8d1322d05a23de1 GIT binary patch literal 327367 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’. + +#### get_ports() → List[int] + +Возвращает список всех номеров портов. + +* **Returns:** + Список номеров портов. diff --git a/Документация/Техническая-документация-api/api/core.md b/Документация/Техническая-документация-api/api/core.md new file mode 100644 index 0000000..f3e32ae --- /dev/null +++ b/Документация/Техническая-документация-api/api/core.md @@ -0,0 +1,3 @@ +# Core + +* [core.cli_executor](cli_executor.md) diff --git a/Документация/Техническая-документация-api/api/core/cli_executor.md b/Документация/Техническая-документация-api/api/core/cli_executor.md new file mode 100644 index 0000000..df8c657 --- /dev/null +++ b/Документация/Техническая-документация-api/api/core/cli_executor.md @@ -0,0 +1,22 @@ +# core.cli_executor + +### *class* core.cli_executor.CLIExecutor + +Bases: `object` + +Утилита для безопасного выполнения CLI‑команд. + +Назначение: +: Инкапсулирует вызов subprocess.run и приводит результат к удобному + кортежу (код возврата, stdout) без генерации исключений при ошибках. + +#### *static* run(command: list) → Tuple[int, str] + +Выполняет команду в системе и возвращает код и вывод. + +* **Parameters:** + **command** (*list*) – Список аргументов команды для выполнения. +* **Returns:** + Код возврата и вывод команды. +* **Return type:** + tuple diff --git a/Документация/Техническая-документация-api/api/endpoints.md b/Документация/Техническая-документация-api/api/endpoints.md new file mode 100644 index 0000000..5dad0fe --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints.md @@ -0,0 +1,9 @@ +# API эндпоинты + +* [api.v1.auth](Техническая-документация-api/api/endpoints/auth.md) +* [api.v1.ip](ip.md) +* [api.v1.network](Техническая-документация-api/api/endpoints/network.md) +* [api.v1.settings](settings.md) +* [api.v1.subnet](Техническая-документация-api/api/endpoints/subnet.md) +* [api.v1.ufw](Техническая-документация-api/api/endpoints/ufw.md) +* [api.v1.websocket](websocket.md) diff --git a/Документация/Техническая-документация-api/api/endpoints/auth.md b/Документация/Техническая-документация-api/api/endpoints/auth.md new file mode 100644 index 0000000..5a19f57 --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/auth.md @@ -0,0 +1,90 @@ +# api.v1.auth + +### *async* api.v1.auth.check_users_file(translations: Translations = Depends(translations_dependency)) + +Проверяет, существует ли файл users.json и содержит ли он пользователей. + +Возвращает информацию о состоянии файла и наличии пользователей. + +* **Returns:** + Словарь с ключами: + : - ”exists” (bool): Существует ли файл. + - ”has_users” (bool): Содержит ли файл пользователей. + - ”message” (str): Сообщение с описанием результата. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если произошла ошибка при проверке файла (status_code=500). + +### *async* api.v1.auth.get_current_user(request: Request, translations: Translations = Depends(translations_dependency)) + +Возвращает данные текущего пользователя и токен. + +Проверяет активную сессию по client_id и возвращает информацию о пользователе +и токен для дальнейшего использования. + +* **Parameters:** + * **request** (*Request*) – Объект запроса для получения client_id (IP-адрес клиента). + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами “user” (UserResponse), “access_token” (str) и + : ”token_type” (str, всегда “bearer”). +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если сессия не найдена или истекла (status_code=401) или + произошла внутренняя ошибка (status_code=500). + +### *async* api.v1.auth.login(user: UserLogin, request: Request, translations: Translations = Depends(translations_dependency)) + +Авторизует пользователя и создаёт сессию. + +Проверяет учетные данные пользователя и возвращает токен и session_id для +последующей авторизации. + +* **Parameters:** + * **user** (*UserLogin*) – Объект с данными для входа (username, password). + * **request** (*Request*) – Объект запроса для получения client_id (IP-адрес клиента). + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Объект с access_token и session_id для авторизации. +* **Return type:** + Token +* **Raises:** + **HTTPException** – Если учетные данные неверны (status_code=401) или произошла + внутренняя ошибка (status_code=500). + +### *async* api.v1.auth.logout(request: Request, translations: Translations = Depends(translations_dependency)) + +Выход из системы, удаление сессии. + +Удаляет активную сессию пользователя по client_id. + +* **Parameters:** + * **request** (*Request*) – Объект запроса для получения client_id (IP-адрес клиента). + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Пустой словарь или сообщение об успешном выходе. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если сессия не найдена (status_code=401) или произошла + внутренняя ошибка (status_code=500). + +### *async* api.v1.auth.register(user: UserCreate, translations: Translations = Depends(translations_dependency)) + +Регистрирует нового пользователя. + +Создаёт нового пользователя на основе предоставленных данных и возвращает +информацию о зарегистрированном пользователе. + +* **Parameters:** + * **user** (*UserCreate*) – Объект с данными нового пользователя (username, password, is_admin). + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Объект с данными зарегистрированного пользователя (id, username, is_admin). +* **Return type:** + UserResponse +* **Raises:** + **HTTPException** – Если пользователь уже существует (status_code=400) или произошла + внутренняя ошибка (status_code=500). diff --git a/Документация/Техническая-документация-api/api/endpoints/ip.md b/Документация/Техническая-документация-api/api/endpoints/ip.md new file mode 100644 index 0000000..2997a1e --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/ip.md @@ -0,0 +1,63 @@ +# api.v1.ip + +### *async* api.v1.ip.apply_ip_config(data: Dict[str, Any] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency)) + +Применяет проверенные IP-настройки к указанному сетевому профилю. + +Обновляет настройки соединения через NetworkManager, отключает и +переподключает устройство к сети. + +* **Parameters:** + * **data** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными конфигурации, включая + “connection_id” и “ipv4_updates” с обновлениями IP-настроек. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами: + : - ”success” (bool): Успешность операции. + - ”message” (str): Сообщение об успешном применении настроек. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если подключение не найдено (status_code=404) или + произошла внутренняя ошибка (status_code=500). + +### *async* api.v1.ip.check_ip_config(data: Dict[str, Any] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency)) + +Проверяет доступность IP-адреса перед его применением. + +Выполняет ARP-сканирование для проверки, занят ли указанный IP-адрес, +и возвращает результат проверки. + +* **Parameters:** + * **data** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными конфигурации, включая + “ipv4_updates” с полем “ipv4.address-data” для нового IP-адреса. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами: + : - ”available” (bool): Доступен ли IP-адрес. + - ”message” (str): Сообщение о результате проверки. +* **Return type:** + Dict[str, Any] +* **Raises:** + **HTTPException** – Если произошла внутренняя ошибка (status_code=500). + +### *async* api.v1.ip.save_ip_config(data: Dict[str, Any] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency)) + +Применяет проверенные IP-настройки для отката сетевого профиля. + +Используется для сохранения и отката настроек сетевого профиля к предыдущему +состоянию через NetworkManager. + +* **Parameters:** + * **data** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными конфигурации, включая + “connection_id” и “ipv4_updates” с обновлениями IP-настроек. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами: + : - ”success” (bool): Успешность операции. + - ”message” (str): Сообщение об успешном применении настроек. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если подключение не найдено (status_code=404) или + произошла внутренняя ошибка (status_code=500). diff --git a/Документация/Техническая-документация-api/api/endpoints/network.md b/Документация/Техническая-документация-api/api/endpoints/network.md new file mode 100644 index 0000000..b911246 --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/network.md @@ -0,0 +1,93 @@ +# api.v1.network + +### *class* api.v1.network.ContainerPositionManager + +Bases: `object` + +Класс для управления позициями и состоянием контейнеров. + +Хранит и обновляет координаты (x, y) и состояние (isOpen) для контейнеров +активации и деактивации. + +#### get_position_and_state(container_name: str, translations: Translations = Depends(translations_dependency)) → Tuple[int, int, bool] + +Получает текущие координаты и состояние указанного контейнера. + +* **Parameters:** + * **container_name** (*str*) – Имя контейнера (“activation” или “deactivation”). + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Кортеж с координатами (x, y) и состоянием (isOpen). +* **Return type:** + Tuple[int, int, bool] +* **Raises:** + **ValueError** – Если указан неверный идентификатор контейнера. + +#### update_position(container_id: int, x: int, y: int, isOpen: bool) → None + +Обновляет позицию и состояние контейнера по его идентификатору. + +* **Parameters:** + * **container_id** (*int*) – Идентификатор контейнера (1 для “activation”, 2 для “deactivation”). + * **x** (*int*) – Новая координата X. + * **y** (*int*) – Новая координата Y. + * **isOpen** (*bool*) – Новое состояние контейнера (открыт/закрыт). +* **Raises:** + **ValueError** – Если container_id не соответствует ни одному контейнеру. + +### *async* api.v1.network.get_hostname(translations: Translations = Depends(translations_dependency)) + +Возвращает имя хоста системы. + +Выполняет запрос к сервису для получения имени хоста. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключом “hostname” и значением имени хоста. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если произошла ошибка при получении имени хоста (status_code=500). + +### *async* api.v1.network.get_network_data(translations: Translations = Depends(translations_dependency)) → Dict[str, Dict] + +Возвращает текущие сетевые данные в виде словаря. + +Получает данные о сетевых интерфейсах, разделяет их на активные и неактивные, +и возвращает их в формате Activation и Deactivation с учётом позиций и состояний +контейнеров. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами “activation” и “deactivation”, содержащими + : данные о соответствующих контейнерах. +* **Return type:** + Dict[str, Dict] +* **Raises:** + **HTTPException** – Если произошла ошибка при получении данных (status_code=500). + +### *async* api.v1.network.update_container_position(data: Dict[str, int | bool] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency)) + +Обновляет позицию и состояние контейнера. + +Принимает данные о новом положении и состоянии контейнера и обновляет их +в менеджере позиций. + +* **Parameters:** + * **data** (*Dict* *[**str* *,* *Union* *[**int* *,* *bool* *]* *]*) – Словарь с ключами: + - “container_id” (int): Идентификатор контейнера (1 или 2). + - “container_x” (int): Новая координата X. + - “container_y” (int): Новая координата Y. + - “isOpen” (bool): Новое состояние контейнера (открыт/закрыт). + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами: + : - ”success” (bool): Успешность операции. + - ”message” (str): Сообщение об успешном обновлении. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если отсутствуют обязательные поля (status_code=400) или + типы данных неверны. diff --git a/Документация/Техническая-документация-api/api/endpoints/settings.md b/Документация/Техническая-документация-api/api/endpoints/settings.md new file mode 100644 index 0000000..a892d4a --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/settings.md @@ -0,0 +1,104 @@ +# api.v1.settings + +### api.v1.settings.clear_all_data(translations: Translations = Depends(translations_dependency)) + +Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах. + +Удаляет все записи из devices.json и wifi.json. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешной очистке. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если произошла ошибка очистки (status_code=500). + +### api.v1.settings.clear_subnet(subnet: str | None = None, translations: Translations = Depends(translations_dependency)) + +Очищает данные узлов подсети, сохранённые в devices.json. + +Удаляет все записи об узлах подсети, оставляя файл пустым. + +* **Parameters:** + * **subnet** (*Optional* *[**str* *]*) – Подсеть в формате CIDR (например, “10.1.1.0/24”). + Если None, очищает все подсети. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешной очистке. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если произошла ошибка очистки (status_code=500). + +### api.v1.settings.clear_wifi(translations: Translations = Depends(translations_dependency)) + +Очищает данные точек доступа Wi-Fi, сохранённые в wifi.json. + +Удаляет все записи о точках доступа, оставляя файл пустым. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешной очистке. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если произошла ошибка очистки (status_code=500). + +### *async* api.v1.settings.export_devices(request: SubnetScanRequest = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency)) + +Экспортирует файл с данными устройств в формате JSON для указанной подсети. + +* **Parameters:** + * **request** (*SubnetScanRequest*) – Объект с полем subnet в формате CIDR. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Файл .json для скачивания. +* **Return type:** + FileResponse +* **Raises:** + **HTTPException** – Если файл не найден (status_code=404). + +### *async* api.v1.settings.export_wifi(translations: Translations = Depends(translations_dependency)) + +Экспортирует файл с данными устройств в формате JSON. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Returns:** + Файл wifi.json для скачивания. +* **Return type:** + FileResponse +* **Raises:** + **HTTPException** – Если файл не найден (status_code=404). + +### *async* api.v1.settings.get_system_language(request: Request, translations: Translations = Depends(translations_dependency)) + +Выводит текущий язык, установленный в системе на основе locale. + +Выполняет команду ‘locale’ в системе и извлекает параметры LANG + +* **Parameters:** + * **request** (*Request*) – Объект запроса для доступа к параметрам. + * **translations** – Объект переводов текущего языка. +* **Returns:** + Словарь с текущим языком системы. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если не удалось извлечь системный язык (status_code=500). + +### api.v1.settings.set_language(locale: str, response: Response, translations: Translations = Depends(translations_dependency)) + +Устанавливает куку locale для смены языка пользователя. + +* **Parameters:** + * **locale** (*str*) – Используемый язык. + * **response** (*Response*) – Запрос. + * **translations** – Объект переводов текущего языка. +* **Returns:** + Сообщение об успешной установке языка. +* **Return type:** + dict diff --git a/Документация/Техническая-документация-api/api/endpoints/subnet.md b/Документация/Техническая-документация-api/api/endpoints/subnet.md new file mode 100644 index 0000000..cae5698 --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/subnet.md @@ -0,0 +1,193 @@ +# api.v1.subnet + +### api.v1.subnet.add_note(mac: str, request: NoteRequest, subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency)) + +Добавляет заметку для устройства по MAC-адресу. + +Привязывает заметку к устройству, идентифицируемому по MAC-адресу. + +* **Parameters:** + * **mac** (*str*) – MAC-адрес устройства. + * **request** (*NoteRequest*) – Объект с полем “note” для текста заметки. + * **subnet_service** – Сервис сканирования подсети. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном добавлении заметки. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если устройство не найдено (status_code=404), заметка уже + существует (status_code=400), или произошла внутренняя ошибка (status_code=500). + +### api.v1.subnet.add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(translations_dependency)) + +Добавляет заметку для сети Wi-Fi по SSID. + +Привязывает заметку к Wi-Fi сети, идентифицируемой по SSID. + +* **Parameters:** + * **ssid** (*str*) – Идентификатор Wi-Fi сети. + * **request** (*NoteRequest*) – Объект с полем “note” для текста заметки. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном добавлении заметки. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если сеть не найдена (status_code=404), заметка уже + существует (status_code=400), или произошла внутренняя ошибка (status_code=500). + +### api.v1.subnet.connect_to_wifi(request: WifiConnectRequest, translations: Translations = Depends(translations_dependency)) + +Подключается к Wi-Fi сети по SSID и паролю. + +Выполняет подключение к указанной Wi-Fi сети с использованием предоставленных +учетных данных. + +* **Parameters:** + * **request** (*WifiConnectRequest*) – Объект с полями “ssid” и “password”. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном подключении. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если подключение не удалось (status_code=400). + +### api.v1.subnet.delete_note(mac: str, subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency)) + +Удаляет заметку для устройства по MAC-адресу. + +Удаляет привязанную заметку для указанного устройства. + +* **Parameters:** + * **mac** (*str*) – MAC-адрес устройства. + * **subnet_service** – Сервис сканирования подсети. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном удалении заметки. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если устройство не найдено (status_code=404), заметка не + существует (status_code=400), или произошла внутренняя ошибка (status_code=500). + +### api.v1.subnet.delete_wifi_note(ssid: str, translations: Translations = Depends(translations_dependency)) + +Удаляет заметку для сети Wi-Fi по SSID. + +Удаляет привязанную заметку для указанной Wi-Fi сети. + +* **Parameters:** + * **ssid** (*str*) – Идентификатор Wi-Fi сети. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном удалении заметки. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если сеть не найдена (status_code=404), заметка не + существует (status_code=400), или произошла внутренняя ошибка (status_code=500). + +### api.v1.subnet.disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translations = Depends(translations_dependency)) + +Отключается от Wi-Fi сети по указанному SSID. + +Выполняет отключение от указанной Wi-Fi сети. + +* **Parameters:** + * **request** (*WifiDisconnectRequest*) – Объект с полем “ssid”. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном отключении. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если отключение не удалось (status_code=400). + +### api.v1.subnet.get_wifi_status(translations: Translations = Depends(translations_dependency)) + +Проверяет статус текущего подключения к Wi-Fi. + +Возвращает информацию о текущем состоянии подключения и SSID, если подключение активно. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с ключами: + : - ”status” (str): Состояние (“connected” или другое). + - ”ssid” (str, optional): SSID текущей сети, если подключено. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если проверка статуса не удалась (status_code=400). + +### api.v1.subnet.scan_subnet(request: SubnetScanRequest = Body(PydanticUndefined), subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency)) + +Сканирует локальную подсеть и возвращает данные об устройствах. + +Выполняет сканирование указанной подсети для обнаружения активных устройств. + +* **Parameters:** + * **request** (*SubnetScanRequest*) – Объект с полем subnet. + * **subnet_service** – Сервис сканирования подсети. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Объект с результатами сканирования (устройства и их данные). +* **Return type:** + SubnetScanResult +* **Raises:** + **HTTPException** – Если произошла ошибка сканирования (status_code=500). + +### api.v1.subnet.scan_wifi(timeout: int = 30, translations: Translations = Depends(translations_dependency)) + +Сканирует Wi-Fi точки доступа и возвращает данные о них. + +Выполняет сканирование доступных Wi-Fi сетей с указанным таймаутом. + +* **Parameters:** + * **timeout** (*int* *,* *optional*) – Таймаут сканирования в секундах. По умолчанию 30. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Объект с результатами сканирования (список Wi-Fi сетей). +* **Return type:** + WifiScanResult +* **Raises:** + **HTTPException** – Если произошла ошибка сканирования Wi-Fi (status_code=500). + +### api.v1.subnet.update_note(mac: str, request: NoteRequest, subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency)) + +Обновляет заметку для устройства по MAC-адресу. + +Изменяет существующую заметку, привязанную к устройству. + +* **Parameters:** + * **mac** (*str*) – MAC-адрес устройства. + * **request** (*NoteRequest*) – Объект с полем “note” для нового текста заметки. + * **subnet_service** – Сервис сканирования подсети. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном обновлении заметки. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если устройство не найдено (status_code=404), заметка не + существует (status_code=400), или произошла внутренняя ошибка (status_code=500). + +### api.v1.subnet.update_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(translations_dependency)) + +Обновляет заметку для сети Wi-Fi по SSID. + +Изменяет существующую заметку, привязанную к Wi-Fi сети. + +* **Parameters:** + * **ssid** (*str*) – Идентификатор Wi-Fi сети. + * **request** (*NoteRequest*) – Объект с полем “note” для нового текста заметки. + * **translations** – Объект переводов для текущего языка. +* **Returns:** + Словарь с сообщением об успешном обновлении заметки. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если сеть не найдена (status_code=404), заметка не + существует (status_code=400), или произошла внутренняя ошибка (status_code=500). diff --git a/Документация/Техническая-документация-api/api/endpoints/ufw.md b/Документация/Техническая-документация-api/api/endpoints/ufw.md new file mode 100644 index 0000000..52fa536 --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/ufw.md @@ -0,0 +1,104 @@ +# api.v1.ufw + +### *class* api.v1.ufw.RuleNumbers(, numbers: List[int]) + +Bases: `BaseModel` + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### numbers *: List[int]* + +### *async* api.v1.ufw.add_ufw_in_rules(rules: List[UFWRule]) + +Добавляет входящие (in) правила UFW. + +* **Parameters:** + **rules** (*List* *[**UFWRule* *]*) – Список правил, определяющих направления, + порты/диапазоны/протоколы и действия (allow/deny/reject). +* **Returns:** + Итог выполнения с количеством успешно добавленных правил и деталями + по каждому правилу. +* **Return type:** + dict +* **Raises:** + * **HTTPException** – Если UFW отключен (status_code=400) или при внутренних + * **ошибках** **(****status_code=500****)****.** – + +### *async* api.v1.ufw.add_ufw_out_rules(rules: List[UFWRule]) + +Добавляет исходящие (out) правила UFW. + +* **Parameters:** + **rules** (*List* *[**UFWRule* *]*) – Список правил исходящего трафика для добавления. +* **Returns:** + Объект статуса с сообщением об успешном добавлении. +* **Return type:** + dict +* **Raises:** + * **HTTPException** – Если UFW отключен (status_code=400) или при внутренних + * **ошибках** **(****status_code=500****)****.** – + +### *async* api.v1.ufw.delete_ufw_rules(rule_numbers: RuleNumbers) + +Удаляет правила UFW по их номерам. + +* **Parameters:** + **rule_numbers** (*RuleNumbers*) – Номера правил, подлежащих удалению (как в + выводе ufw status numbered). +* **Returns:** + Информация об общем количестве удаляемых правил, числе успешных и + возможной ошибке. +* **Return type:** + dict +* **Raises:** + **HTTPException** – При ошибках удаления (status_code=500). + +### *async* api.v1.ufw.disable_ufw() + +Выключает UFW. + +* **Returns:** + Словарь с ключами status и message при успешном выполнении. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если выключение завершилось неуспешно (status_code=500). + +### *async* api.v1.ufw.enable_ufw() + +Включает UFW. + +* **Returns:** + Словарь с ключами status и message при успешном выполнении. +* **Return type:** + dict +* **Raises:** + **HTTPException** – Если включение завершилось неуспешно (status_code=500). + +### *async* api.v1.ufw.get_ufw_rules() + +Возвращает все правила UFW. + +Осуществляет обращение к сервису UFWService для чтения текущего списка +правил брандмауэра и возвращает результат в сериализованном виде для клиента. + +* **Returns:** + Структура с коллекцией правил и сопутствующей + информацией о состоянии. +* **Return type:** + UFWRulesResponse +* **Raises:** + **HTTPException** – В случае ошибок взаимодействия с UFW (status_code=500). + +### *async* api.v1.ufw.get_ufw_status() + +Возвращает текущий статус UFW. + +* **Returns:** + Объект со сведениями о включенности UFW и деталями статуса. +* **Return type:** + UFWStatus +* **Raises:** + **HTTPException** – Если не удалось получить статус (status_code=500). diff --git a/Документация/Техническая-документация-api/api/endpoints/websocket.md b/Документация/Техническая-документация-api/api/endpoints/websocket.md new file mode 100644 index 0000000..2e0e595 --- /dev/null +++ b/Документация/Техническая-документация-api/api/endpoints/websocket.md @@ -0,0 +1,78 @@ +# api.v1.websocket + +### *class* api.v1.websocket.WebSocketManager + +Bases: `object` + +Класс для управления подключениями к WebSocket-серверу. + +Обрабатывает подключение, отключение и трансляцию сообщений для клиентов, +подключённых через WebSocket. + +#### *async* broadcast(message: dict) + +Транслирует сообщения всем подключённым клиентам. + +Отправляет JSON-данные всем активным соединениям, обрабатывая +отключения клиентов. + +* **Parameters:** + **message** (*dict*) – Сообщение для трансляции в формате JSON. +* **Raises:** + * **WebSocketDisconnect** – Если клиент неожиданно отключился. + * **Exception** – Если произошла другая ошибка при отправке. + +#### *async* connect(websocket: WebSocket) + +Подключает клиента к WebSocket-серверу. + +Принимает подключение и добавляет WebSocket в список активных соединений. + +* **Parameters:** + **websocket** (*WebSocket*) – Объект WebSocket для подключения. +* **Raises:** + **Exception** – Если произошла ошибка при принятии подключения. + +#### disconnect(websocket: WebSocket) + +Отключает клиента от WebSocket-серверу. + +Удаляет WebSocket из списка активных соединений. + +* **Parameters:** + **websocket** (*WebSocket*) – Объект WebSocket для отключения. + +### *async* api.v1.websocket.broadcast_data(translations: Translations = Depends(translations_dependency)) + +Таск для периодической трансляции сетевых данных. + +Выполняет сканирование сети и отправляет данные всем подключённым клиентам +с интервалом в 2 секунды. + +* **Parameters:** + **translations** – Объект переводов для текущего языка. +* **Raises:** + **Exception** – Если произошла ошибка при получении данных или трансляции. + +### *async* api.v1.websocket.startup_event() + +Запуск таска для трансляции сетевых данных при старте приложения. + +Создаёт асинхронную задачу для периодической трансляции данных. + +* **Raises:** + **Exception** – Если произошла ошибка при запуске таска. + +### *async* api.v1.websocket.websocket_endpoint(websocket: WebSocket, translations: Translations = Depends(translations_dependency)) + +Обработчик WebSocket-соединения. + +Управляет соединением клиента, принимает данные для обновления позиций +контейнеров и транслирует сетевые данные. + +* **Parameters:** + * **websocket** (*WebSocket*) – Объект WebSocket для обработки соединения. + * **translations** – Объект переводов для текущего языка. +* **Raises:** + * **WebSocketDisconnect** – Если клиент отключился. + * **Exception** – Если произошла ошибка при обработке данных. diff --git a/Документация/Техническая-документация-api/api/models.md b/Документация/Техническая-документация-api/api/models.md new file mode 100644 index 0000000..b3142ac --- /dev/null +++ b/Документация/Техническая-документация-api/api/models.md @@ -0,0 +1,8 @@ +# Модели + +* [models.auth](Техническая-документация-api/api/models/auth.md) +* [models.network](Техническая-документация-api/api/models/network.md) +* [models.request](request.md) +* [models.subnet](Техническая-документация-api/api/models/subnet.md) +* [models.ufw](Техническая-документация-api/api/models/ufw.md) +* [models.wifi](wifi.md) diff --git a/Документация/Техническая-документация-api/api/models/auth.md b/Документация/Техническая-документация-api/api/models/auth.md new file mode 100644 index 0000000..fa1f1e1 --- /dev/null +++ b/Документация/Техническая-документация-api/api/models/auth.md @@ -0,0 +1,85 @@ +# models.auth + +### *class* models.auth.Token(, access_token: str, token_type: str, session_id: str | None = None, user: UserResponse | None = None) + +Bases: `BaseModel` + +Токен пользователя + +Атрибуты: +: access_token (str): Токен пользователя (захэширован) + token_type (str): Тип токена + session_id (Optional[str]): Идентификатор сессии + user (Optional[UserResponse]): Пользователь на основе проверки наличия пользователя + +#### access_token *: str* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### session_id *: str | None* + +#### token_type *: str* + +#### user *: UserResponse | None* + +### *class* models.auth.UserCreate(, username: str, password: str, is_admin: bool = False) + +Bases: `BaseModel` + +Модель созданного пользователя + +Атрибуты: +: username (str): Имя пользователя + password (str): Пароль пользователя + is_admin (bool): Административный доступ + +#### is_admin *: bool* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### password *: str* + +#### username *: str* + +### *class* models.auth.UserLogin(, username: str, password: str) + +Bases: `BaseModel` + +Модель авторизации пользователя + +Атрибуты: +: username (str): Имя пользователя + password (str): Пароль пользователя + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### password *: str* + +#### username *: str* + +### *class* models.auth.UserResponse(, id: int, username: str, is_admin: bool) + +Bases: `BaseModel` + +Модель проверки наличия пользователя + +Атрибуты: +: id (int): Идентификатор + username (str): Имя пользователя + is_admin (bool): Административный доступ + +#### id *: int* + +#### is_admin *: bool* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### username *: str* diff --git a/Документация/Техническая-документация-api/api/models/network.md b/Документация/Техническая-документация-api/api/models/network.md new file mode 100644 index 0000000..a8ef200 --- /dev/null +++ b/Документация/Техническая-документация-api/api/models/network.md @@ -0,0 +1,238 @@ +# models.network + +### *class* models.network.Activation(, id: int, interfaces: List[NetworkInterface | WiFiDevice], container_x: int, container_y: int, isOpen: bool = True) + +Bases: `BaseModel` + +Модель активированных интерфейсов + +Атрибуты: +: id (int): Идентификатор ноды активированных интерфейсов + interfaces (List[Union[NetworkInterface, WiFiDevice]]): Активированные интерфейсы + container_x (int): Положение по X на холсте + container_y (int): Положение по Y на холсте + isOpen (bool): Флаг скрытия ноды на холсте + +#### container_x *: int* + +#### container_y *: int* + +#### id *: int* + +#### interfaces *: List[NetworkInterface | WiFiDevice]* + +#### isOpen *: bool* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +### *class* models.network.Deactivation(, id: int, interfaces: List[NetworkInterface | WiFiDevice], container_x: int, container_y: int, isOpen: bool = True) + +Bases: `BaseModel` + +Модель отключенных интерфейсов + +Атрибуты: +: id (int): Идентификатор ноды отключенных интерфейсов + interfaces (List[Union[NetworkInterface, WiFiDevice]]): Отключенные интерфейсы + container_x (int): Положение по X на холсте + container_y (int): Положение по Y на холсте + isOpen (bool): Флаг скрытия ноды на холсте + +#### container_x *: int* + +#### container_y *: int* + +#### id *: int* + +#### interfaces *: List[NetworkInterface | WiFiDevice]* + +#### isOpen *: bool* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +### *class* models.network.IPConfig(, configurations: List[IndividualIPConfig]) + +Bases: `BaseModel` + +Модель конфигурации IP (IPv4/IPv6) + +Атрибуты: +: configurations (List[IndividualIPConfig]): Список индивидуальных IP-конфигураций + +#### configurations *: List[IndividualIPConfig]* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +### *class* models.network.IPv4Route(, destination: str, prefix: int, next_hop: str, metric: int) + +Bases: `BaseModel` + +Модель маршрута IPv4 + +Атрибуты: +: destination (str): IP-адрес назначения + prefix (int): Префикс подсети в формате CIDR + next_hop (str): Адрес следующего узла (маршрутизатор) + metric (int): Метрика маршрута + +#### destination *: str* + +#### metric *: int* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### next_hop *: str* + +#### prefix *: int* + +### *class* models.network.IPv6Route(, destination: str, prefix: int, next_hop: str, metric: int) + +Bases: `BaseModel` + +Модель маршрута IPv6 + +Атрибуты: +: destination (str): IP-адрес назначения + prefix (int): Префикс подсети (CIDR) + next_hop (str): Адрес следующего узла (маршрутизатор) + metric (int): Метрика маршрута + +#### destination *: str* + +#### metric *: int* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### next_hop *: str* + +#### prefix *: int* + +### *class* models.network.IndividualIPConfig(, address: str, routes: List[IPv4Route | IPv6Route], method: str | None, gateway: str, dns: List[str]) + +Bases: `BaseModel` + +Модель индивидуальной конфигурации IP-адреса + +Атрибуты: +: address (str): IP-адрес интерфейса + routes (List[Union[IPv4Route, IPv6Route]]): Список маршрутов (IPv4/IPv6) + method (Optional[str]): Метод назначения IP + gateway (str): Основной шлюз по умолчанию + dns (List[str]): Список DNS-серверов + +#### address *: str* + +#### dns *: List[str]* + +#### gateway *: str* + +#### method *: str | None* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### routes *: List[IPv4Route | IPv6Route]* + +### *class* models.network.NetworkInterface(, name: str, type: str, mac_address: str, device_state: str, active_connection: str, device_mtu: str, ipv4: IPConfig, ipv6: IPConfig, container_x: int = 0, container_y: int = 0) + +Bases: `BaseModel` + +Модель базового сетевого интерфейса + +Атрибуты: +: name (str): Название интерфейса + type (str): Тип интерфейса + mac_address (str): MAC-адрес устройства + device_state (str): Состояние устройства + active_connection (str): Название активного соединения + device_mtu (str): MTU устройства + ipv4 (IPConfig): Конфигурация IPv4 + ipv6 (IPConfig): Конфигурация IPv6 + container_x (int): Положение по X на холсте + container_y (int): Положение по Y на холсте + +#### active_connection *: str* + +#### container_x *: int* + +#### container_y *: int* + +#### device_mtu *: str* + +#### device_state *: str* + +#### ipv4 *: IPConfig* + +#### ipv6 *: IPConfig* + +#### mac_address *: str* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### name *: str* + +#### type *: str* + +### *class* models.network.NetworkInterfacesContainer(, interfaces: List[NetworkInterface | WiFiDevice], container_x: int, container_y: int) + +Bases: `BaseModel` + +Контейнер для группы сетевых интерфейсов с координатами + +Атрибуты: +: interfaces (List[Union[NetworkInterface, WiFiDevice]]): Список интерфейсов + container_x (int): Положение по оси X + container_y (int): Положение по оси Y + +#### container_x *: int* + +#### container_y *: int* + +#### interfaces *: List[NetworkInterface | WiFiDevice]* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +### *class* models.network.WiFiDevice(, name: str, type: str, mac_address: str, device_state: str, active_connection: str, device_mtu: str, ipv4: IPConfig, ipv6: IPConfig, container_x: int = 0, container_y: int = 0, ssid: str | None = None, bssid: str | None = None, bitrate: int | None = None, strength: int | None = None, frequency: float | None = None, mode: str | int = None) + +Bases: `NetworkInterface` + +Модель Wi-Fi устройства (наследуется от NetworkInterface) + +Атрибуты: +: ssid (Optional[str]): Название Wi-Fi сети + bssid (Optional[str]): MAC-адрес точки доступа + bitrate (Optional[int]): Скорость соединения + strength (Optional[int]): Уровень сигнала + frequency (Optional[float]): Частота + mode (Union[str, int]): Режим работы + +#### bitrate *: int | None* + +#### bssid *: str | None* + +#### frequency *: float | None* + +#### mode *: str | int* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### ssid *: str | None* + +#### strength *: int | None* diff --git a/Документация/Техническая-документация-api/api/models/request.md b/Документация/Техническая-документация-api/api/models/request.md new file mode 100644 index 0000000..90e9223 --- /dev/null +++ b/Документация/Техническая-документация-api/api/models/request.md @@ -0,0 +1,49 @@ +# models.request + +### *class* models.request.NoteRequest(, note: str) + +Bases: `BaseModel` + +Модель добавления заметки к просканированному устройству + +Атрибуты: +: note (str): Заметка устройства + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### note *: str* + +### *class* models.request.WifiConnectRequest(, ssid: str, password: str) + +Bases: `BaseModel` + +Модель для подключения к точке доступа Wi-Fi + +Атрибуты: +: ssid (str): Название точки доступа Wi-Fi + password (str): Пароль точки доступа Wi-Fi + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### password *: str* + +#### ssid *: str* + +### *class* models.request.WifiDisconnectRequest(, ssid: str) + +Bases: `BaseModel` + +Модель для отключения от точки доступа Wi-Fi + +Атрибуты: +: ssid (str): Название точки доступа Wi-Fi + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### ssid *: str* diff --git a/Документация/Техническая-документация-api/api/models/subnet.md b/Документация/Техническая-документация-api/api/models/subnet.md new file mode 100644 index 0000000..49ca2ab --- /dev/null +++ b/Документация/Техническая-документация-api/api/models/subnet.md @@ -0,0 +1,70 @@ +# models.subnet + +### *class* models.subnet.Device(, ip: str, mac: str | None = None, hostname: str | None = None, vendor: str | None = None, open_ports: List[str] = [], status: str, last_seen: str | None = None, note: str | None = None) + +Bases: `BaseModel` + +Сканируемое устройство в подсети + +Атрибуты: +: ip (str): IP-адрес устройства + mac (Optional[str]): MAC-адрес устройства + hostname (Optional[str]): Имя хоста + vendor (Optional[str]): Название производителя устройства (По MAC-адресу) + open_ports (List[str]): Открытые порты устройства + status (str): Статус устройства (онлайн/оффлайн) + last_seen (Optional[str]): Последняя активность устройства + note (Optional[str]): Заметка устройства + +#### hostname *: str | None* + +#### ip *: str* + +#### last_seen *: str | None* + +#### mac *: str | None* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### note *: str | None* + +#### open_ports *: List[str]* + +#### status *: str* + +#### vendor *: str | None* + +### *class* models.subnet.SubnetScanRequest(, subnet: str | None = None) + +Bases: `BaseModel` + +Параметры для сканирования подсети + +Атрибуты: +: subnet (Optional[str]): Подсеть для сканирования (например 192.168.1.0/24), опционально + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### subnet *: str | None* + +### *class* models.subnet.SubnetScanResult(, devices: List[Device] = [], error: str | None = None) + +Bases: `BaseModel` + +Результат сканирования устройств в подсети + +Атрибуты: +: devices (List[Device]): Список просканированных устройств + error (Optional[str]): Сообщение об ошибке, если сканирование не удалось + +#### devices *: List[Device]* + +#### error *: str | None* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. diff --git a/Документация/Техническая-документация-api/api/models/ufw.md b/Документация/Техническая-документация-api/api/models/ufw.md new file mode 100644 index 0000000..d4074ee --- /dev/null +++ b/Документация/Техническая-документация-api/api/models/ufw.md @@ -0,0 +1,195 @@ +# models.ufw + +### *class* models.ufw.Action(\*values) + +Bases: `str`, `Enum` + +Enum для действий UFW. + +#### ALLOW + +Разрешить трафик + +#### DENY + +Запретить трафик без уведомления + +#### REJECT + +Запретить трафик с уведомлением отправителю + +#### ALLOW *= 'allow'* + +#### DENY *= 'deny'* + +#### REJECT *= 'reject'* + +### *class* models.ufw.Direction(\*values) + +Bases: `str`, `Enum` + +Enum для направления трафика UFW. + +#### IN + +Входящий трафик + +#### OUT + +Исходящий трафик + +#### IN *= 'in'* + +#### OUT *= 'out'* + +### *class* models.ufw.Protocol(\*values) + +Bases: `str`, `Enum` + +Enum для сетевых протоколов UFW. + +#### BOTH *= 'both'* + +#### TCP *= 'tcp'* + +#### UDP *= 'udp'* + +#### *property* protocols *: List[str]* + +Возвращает список протоколов для использования в команде UFW. + +### *class* models.ufw.UFWRule(, action: Action, direction: Direction, from_ip: str, to_ip: str, port: int | str, protocol: Protocol, comment: str | None = None) + +Bases: `BaseModel` + +Модель правила UFW + +#### action *: Action* + +#### comment *: str | None* + +#### direction *: Direction* + +#### from_ip *: str* + +#### *classmethod* from_ufw_output(line: str) → UFWRule + +Создает экземпляр UFWRule из строки вывода команды ‘ufw status numbered’. + +* **Parameters:** + **line** – Строка вывода UFW (например, “[1] 80/tcp ALLOW IN 192.168.1.0/24 # Web Server”) +* **Returns:** + Новый экземпляр правила +* **Return type:** + UFWRule + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### port *: int | str* + +#### protocol *: Protocol* + +#### to_ip *: str* + +#### to_ufw_command() → str + +Преобразует правило в команду UFW. + +#### *classmethod* validate_action(v) + +Приводит значение action к нижнему регистру перед валидацией + +#### *classmethod* validate_ip(v) + +Проверяет корректность IP адреса + +#### *classmethod* validate_ip_version_compatibility(v, values) + +Проверяет совместимость версий IP адресов + +#### *classmethod* validate_port(v) + +Проверяет корректность порта или диапазона портов. + +* **Parameters:** + **v** – Порт (число) или диапазон портов (строка вида “3000:3999”) +* **Returns:** + Валидированное значение порта +* **Return type:** + Union[int, str] +* **Raises:** + **ValueError** – Если порт или диапазон портов некорректен + +#### *classmethod* validate_protocol(v) + +Приводит значение protocol к нижнему регистру перед валидацией + +### *class* models.ufw.UFWRulesResponse(\*, enabled: bool, rules: ~typing.List[~models.ufw.UFWRule] = ) + +Bases: `BaseModel` + +Модель для представления списка правил UFW. + +#### enabled + +Включен ли UFW + +* **Type:** + bool + +#### rules + +Список правил UFW + +* **Type:** + List[models.ufw.UFWRule] + +#### total_rules + +Общее количество правил + +#### enabled *: bool* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### rules *: List[UFWRule]* + +#### *property* total_rules *: int* + +Возвращает общее количество правил. + +### *class* models.ufw.UFWStatus(, enabled: bool, message: str) + +Bases: `BaseModel` + +Модель для представления статуса UFW. + +#### enabled + +Включен ли UFW + +* **Type:** + bool + +#### message + +Сообщение о статусе + +* **Type:** + str + +#### last_checked + +Время последней проверки статуса + +#### enabled *: bool* + +#### message *: str* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. diff --git a/Документация/Техническая-документация-api/api/models/wifi.md b/Документация/Техническая-документация-api/api/models/wifi.md new file mode 100644 index 0000000..d227e7c --- /dev/null +++ b/Документация/Техническая-документация-api/api/models/wifi.md @@ -0,0 +1,55 @@ +# models.wifi + +### *class* models.wifi.WifiAccessPoint(, ssid: str | None = None, bssid: str, channel: int | None = None, signal: int | None = None, encryption: str | None = None, frequency: str | None = None, vendor: str | None = None, hidden: bool = False, note: str | None = None) + +Bases: `BaseModel` + +Модель точки доступа Wi-Fi + +Атрибуты: +: ssid (Optional[str]): Название точки доступа. Может быть скрытым + bssid (str): Уникальный идентификатор точки доступа (по типу MAC-адреса) + channel (Optional[int]): Канал, на котором работает точка доступа + signal (Optional[int]): Уровень сигнала (dBm) + encryption (Optional[str]): Тип шифрования (WPA2, WPA3, открытая и т.д.) + frequency (Optional[str]): Частота вещания (2.4GHz/5GHz) + vendor (Optional[str]): Производитель точки доступа (определяется по MAC-адресу) + hidden (bool): Флаг скрытия названия точки доступа (ssid) + note (Optional[str]): Заметка для точки доступа + +#### bssid *: str* + +#### channel *: int | None* + +#### encryption *: str | None* + +#### frequency *: str | None* + +#### hidden *: bool* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. + +#### note *: str | None* + +#### signal *: int | None* + +#### ssid *: str | None* + +#### vendor *: str | None* + +### *class* models.wifi.WifiScanResult(, access_points: List[WifiAccessPoint]) + +Bases: `BaseModel` + +Результат сканирования Wi-Fi + +Атрибуты: +: access_points (List[WifiAccessPoint]): Список найденных Wi-Fi точек доступа + +#### access_points *: List[WifiAccessPoint]* + +#### model_config *: ClassVar[ConfigDict]* *= {}* + +Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]. diff --git a/Документация/Техническая-документация-api/api/services.md b/Документация/Техническая-документация-api/api/services.md new file mode 100644 index 0000000..e4dfa52 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services.md @@ -0,0 +1,12 @@ +# Сервисы + +* [ARP Service](arp_service.md) +* [Auth Service](auth_service.md) +* [Connect Service](connect_service.md) +* [Firewalld Service](firewalld_service.md) +* [IP Service](ip_service.md) +* [Network Service](network_service.md) +* [Settings Service](settings_service.md) +* [Subnet Service](subnet_service.md) +* [UFW Service](ufw_service.md) +* [Wifi Service](wifi_service.md) diff --git a/Документация/Техническая-документация-api/api/services/arp_service.md b/Документация/Техническая-документация-api/api/services/arp_service.md new file mode 100644 index 0000000..609b0b7 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/arp_service.md @@ -0,0 +1,55 @@ +# ARP Service + +Сервис низкоуровневого ARP-сканирования локальной сети. + +Назначение: + +- Обнаружение активных узлов в пределах сетей хоста путём широковещательных ARP‑запросов от имени выбранного интерфейса. +- Помощь сервисам более высокого уровня (например, IPService) при проверке занятости адресов перед применением конфигураций. + +Особенности реализации: + +- Определяет подключённые сети интерфейса через netifaces и строит CIDR для сканирования. +- Формирует ARP‑пакеты с помощью scapy (Ether/ARP) и отправляет их с таймаутом. +- Добавляет локальный адрес интерфейса в результирующий список клиентов. + +Требования/ограничения: + +- Для отправки ARP‑кадров могут потребоваться повышенные привилегии или capability на сырой сокет. + +### *class* services.arp_service.NetworkScanner(interface=None, translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Инициализация сетевого сканера. + +Предоставляет методы для сканирования сети с использованием ARP-запросов и +вывода информации о клиентах. + +#### print_clients(clients) + +Выводит список адресов клиентов в формате таблицы. + +* **Parameters:** + **clients** (*List* *[**dict* *]*) – Список словарей с ключами “ip” и “mac”, + представляющих клиентов. + +Выводит IP-адреса и MAC-адреса в отсортированном по IP порядке. + +#### scan_network(attempts=3, timeout=2) + +Сканирует сеть для обнаружения активных клиентов. + +* **Parameters:** + * **attempts** (*int* *,* *optional*) – Количество попыток отправки ARP-запросов. + По умолчанию 3. + * **timeout** (*int* *,* *optional*) – Таймаут ожидания ответа в секундах. + По умолчанию 2. +* **Returns:** + Список словарей с ключами “ip” и “mac”, представляющих + : обнаруженных клиентов, включая локальные IP-адреса. +* **Return type:** + List[dict] + +#### NOTE +Учитывает локальные IP-адреса интерфейса и удаляет дубликаты. diff --git a/Документация/Техническая-документация-api/api/services/auth_service.md b/Документация/Техническая-документация-api/api/services/auth_service.md new file mode 100644 index 0000000..f9623fd --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/auth_service.md @@ -0,0 +1,35 @@ +# Auth Service + +### *class* services.auth_service.AuthService(translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Сервис для регистрации, авторизации и управления сессиями + +#### create_access_token(data: dict) → str + +Создаёт токен + +#### get_current_user(token: str = Depends(OAuth2PasswordBearer)) → UserResponse + +Получает текущего пользователя по токену + +#### get_user_by_session(client_id: str) → dict + +Получает пользователя и токен по client_id + +#### login(user: UserLogin, client_id: str) → dict + +Авторизует пользователя, создаёт сессию и возвращает токен + +#### logout(client_id: str) + +Выполняет выход из системы, удаляя последнюю сессию для client_id + +#### register(user: UserCreate) → UserResponse + +Регистрирует нового пользователя + +#### verify_token(token: str) → dict | None + +Проверяет токен diff --git a/Документация/Техническая-документация-api/api/services/connect_service.md b/Документация/Техническая-документация-api/api/services/connect_service.md new file mode 100644 index 0000000..9c0c9fa --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/connect_service.md @@ -0,0 +1,71 @@ +# Connect Service + +Сервис управления подключениями Wi‑Fi через nmcli. + +Назначение: + +- Предоставляет операции подключения/отключения к точкам доступа и проверки текущего статуса, ориентируясь на системный NetworkManager. + +Поведение: + +- Автоматически определяет активный Wi‑Fi‑интерфейс. +- Валидирует наличие SSID в листинге перед подключением и интерпретирует частые ошибки nmcli (неверный пароль, отсутствующая сеть и т.п.). + +Ограничения: + +- Требуются права для управления сетевыми соединениями в системе. +- В окружениях без NetworkManager команды nmcli будут недоступны. + +### *class* services.connect_service.WifiConnectionService(translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Сервис для управления подключением к Wi-Fi сетям с использованием nmcli. + +Предоставляет методы для подключения, отключения и проверки статуса Wi-Fi соединений. + +#### connect(ssid: str, password: str) → Tuple[bool, str | None] + +Подключается к Wi-Fi сети по SSID и паролю. + +* **Parameters:** + * **ssid** (*str*) – Идентификатор сети Wi-Fi. + * **password** (*str*) – Пароль для подключения. +* **Returns:** + Кортеж (успех, сообщение об ошибке). + : - Успех: (True, None). + - Ошибка: (False, сообщение об ошибке). +* **Return type:** + Tuple[bool, Optional[str]] +* **Raises:** + * **subprocess.CalledProcessError** – Если команда nmcli завершилась с ошибкой. + * **Exception** – Если произошла неизвестная ошибка при выполнении. + +#### disconnect(ssid: str) → Tuple[bool, str | None] + +Отключается от Wi-Fi сети по указанному SSID. + +* **Parameters:** + **ssid** (*str*) – Идентификатор сети Wi-Fi для отключения. +* **Returns:** + Кортеж (успех, сообщение об ошибке). + : - Успех: (True, None или сообщение, если подключение не найдено). + - Ошибка: (False, сообщение об ошибке). +* **Return type:** + Tuple[bool, Optional[str]] +* **Raises:** + * **subprocess.CalledProcessError** – Если команда nmcli завершилась с ошибкой. + * **Exception** – Если произошла неизвестная ошибка при выполнении. + +#### get_status() → Tuple[bool, str | None] + +Проверяет статус текущего подключения к Wi-Fi. + +* **Returns:** + Кортеж (успех, SSID или сообщение об ошибке). + : - Успех: (True, SSID текущей сети). + - Ошибка или отсутствие подключения: (False, сообщение об ошибке). +* **Return type:** + Tuple[bool, Optional[str]] +* **Raises:** + **Exception** – Если произошла ошибка при выполнении команды nmcli. diff --git a/Документация/Техническая-документация-api/api/services/firewalld_service.md b/Документация/Техническая-документация-api/api/services/firewalld_service.md new file mode 100644 index 0000000..bfd4951 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/firewalld_service.md @@ -0,0 +1,72 @@ +# Firewalld Service + +Сервис для управления firewalld через D‑Bus. + +Назначение: + +- Обёртка над интерфейсами org.fedoraproject.FirewallD1 для выполнения типовых операций по зонам: просмотр/изменение дефолтной зоны, добавление и удаление сервисов, портов, источников, перезагрузка конфигурации. + +Примечания: + +- Используется pydbus.SystemBus для доступа к системной шине. +- Методы генерируют дружелюбные исключения при ошибках, содержащие контекст операции. + +### *class* services.firewalld_service.FirewalldService + +Bases: `object` + +#### add_port(zone: str, port: int, protocol: str, timeout: int | None = 0) → None + +Add a port to a zone. + +#### add_service(zone: str, service: str, timeout: int | None = 0) → None + +Add a service to a zone. + +#### add_source(zone: str, source: str) → None + +Add a source to a zone. + +#### get_default_zone() → str + +Get the default zone. + +#### get_ports(zone: str) → List[str] + +Get list of ports in a zone. + +#### get_services(zone: str) → List[str] + +Get list of services in a zone. + +#### get_sources(zone: str) → List[str] + +Get list of sources in a zone. + +#### get_zone_settings(zone: str) → Dict + +Get all settings for a zone. + +#### get_zones() → List[str] + +Get list of all zones. + +#### reload() → None + +Reload firewall rules. + +#### remove_port(zone: str, port: int, protocol: str) → None + +Remove a port from a zone. + +#### remove_service(zone: str, service: str) → None + +Remove a service from a zone. + +#### remove_source(zone: str, source: str) → None + +Remove a source from a zone. + +#### set_default_zone(zone: str) → None + +Set the default zone. diff --git a/Документация/Техническая-документация-api/api/services/ip_service.md b/Документация/Техническая-документация-api/api/services/ip_service.md new file mode 100644 index 0000000..390ff87 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/ip_service.md @@ -0,0 +1,61 @@ +# IP Service + +Сервис проверки и применения IP‑настроек через NetworkManager (D‑Bus). + +Назначение: + +- Перед применением конфигурации проверяет занятость IP адреса, сканируя сегмент сети средствами ARP (через NetworkScanner). +- Применяет изменения профиля подключения через sdbus_async.networkmanager и выполняет переподключение интерфейса. + +Требования/ограничения: + +- Доступ к системной шине D‑Bus и права на изменения сетевых профилей. +- Структура входных данных должна соответствовать схеме ipv4_updates для корректного обновления вложенных полей у профиля. + +### *class* services.ip_service.IPService + +Bases: `object` + +Сервис проверки доступности IP-адреса и применения настроек сети. + +Предоставляет асинхронные методы для проверки занятости IP-адреса с использованием +ARP-сканирования и применения настроек через NetworkManager. + +#### *async* apply_ip_config(args: Dict[str, Any], translations: Translations = Depends(translations_dependency)) → None + +Применяет проверенные настройки IP к указанному соединению. + +Перезапускает шину D-Bus, обновляет настройки соединения через NetworkManager, +отключает и переподключает устройство к сети. + +* **Parameters:** + * **args** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными, включая: + - “connection_id” (str): Идентификатор соединения. + - “ipv4_updates” (Dict): Обновления настроек IPv4. + * **translations** (*Translations*) – Объект переводов. +* **Raises:** + * **ValueError** – Если соединение с указанным ID не найдено. + * **RuntimeError** – Если устройство для интерфейса не найдено. + +#### NOTE +Требуются права для изменения настроек через NetworkManager. + +#### *async* check_ip_config(args: Dict[str, Any], translations: Translations = Depends(translations_dependency)) → Dict[str, Any] + +Проверяет доступность IP-адреса перед его применением. + +Выполняет ARP-сканирование сети для проверки, занят ли указанный IP-адрес. +Перезапускает шину D-Bus перед выполнением. + +* **Parameters:** + * **args** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными, включая “ipv4_updates” + с полем “ipv4.address-data” для нового IP-адреса. + * **translations** (*Translations*) – Объект переводов. +* **Returns:** + Словарь с ключами: + : - ”available” (bool): Доступен ли IP-адрес. + - ”message” (str): Сообщение о результате проверки. +* **Return type:** + Dict[str, Any] +* **Raises:** + **Exception** – Если произошла ошибка при сканировании ARP. diff --git a/Документация/Техническая-документация-api/api/services/network_service.md b/Документация/Техническая-документация-api/api/services/network_service.md new file mode 100644 index 0000000..27780ef --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/network_service.md @@ -0,0 +1,195 @@ +# Network Service + +Сервис чтения сетевого состояния через NetworkManager (D‑Bus). + +Назначение: + +- Предоставляет асинхронные методы для сборки унифицированных моделей сетевых интерфейсов (Ethernet/Wi‑Fi), их IP‑конфигураций, а также получения имени хоста. Используется API‑слоем для визуализации и управления. + +Особенности: + +- Фильтрация loopback и явно неактивных интерфейсов. +- Адаптация данных D‑Bus в pydantic‑модели (NetworkInterface, WiFiDevice, NetworkInterfacesContainer). + +### *class* services.network_service.NetworkService(translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Сервис для взаимодействия с NetworkManager через D-Bus. + +Предоставляет асинхронные методы для получения информации о сетевых интерфейсах, +их конфигурациях IP, Wi-Fi и состояниях. + +#### *async* get_activated_interfaces(initial_positions: Dict[str, Tuple[int, int]] = None) → List[NetworkInterface] + +Получает список активных сетевых интерфейсов. + +* **Parameters:** + **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None. +* **Returns:** + Список активных интерфейсов (state == “100”). +* **Return type:** + List[NetworkInterface] + +#### *async* get_activated_interfaces_container(initial_positions: Dict[str, Tuple[int, int]] = None, container_x: int = 0, container_y: int = 0) → NetworkInterfacesContainer + +Получает объект, содержащий список активных интерфейсов и координаты контейнера. + +* **Parameters:** + * **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None. + * **container_x** (*int* *,* *optional*) – Координата X контейнера. По умолчанию 0. + * **container_y** (*int* *,* *optional*) – Координата Y контейнера. По умолчанию 0. +* **Returns:** + Объект с активными интерфейсами и координатами. +* **Return type:** + NetworkInterfacesContainer + +#### *async* get_connection_name(device: sdbus_async.networkmanager.NetworkDeviceGeneric) → str + +Извлекает имя соединения (GENERAL.CONNECTION) для устройства. + +* **Parameters:** + **device** (*NetworkDeviceGeneric*) – Объект устройства NetworkManager. +* **Returns:** + Имя соединения или “unknown” в случае ошибки. +* **Return type:** + str +* **Raises:** + **Exception** – Если произошла ошибка при получении настроек соединения. + +#### *async* get_deactivated_interfaces(initial_positions: Dict[str, Tuple[int, int]] = None) → List[NetworkInterface] + +Получает список неактивных сетевых интерфейсов. + +* **Parameters:** + **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None. +* **Returns:** + Список интерфейсов с state != “100”. +* **Return type:** + List[NetworkInterface] + +#### *async* get_deactivated_interfaces_container(initial_positions: Dict[str, Tuple[int, int]] = None, container_x: int = 0, container_y: int = 0) → NetworkInterfacesContainer + +Получает объект, содержащий список неактивных интерфейсов и координаты контейнера. + +* **Parameters:** + * **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None. + * **container_x** (*int* *,* *optional*) – Координата X контейнера. По умолчанию 0. + * **container_y** (*int* *,* *optional*) – Координата Y контейнера. По умолчанию 0. +* **Returns:** + Объект с неактивными интерфейсами и координатами. +* **Return type:** + NetworkInterfacesContainer + +#### *async* get_hostname() → Dict[str, str] + +Возвращает имя хоста из команды hostname в формате JSON. + +* **Returns:** + Словарь с ключом “hostname” и значением имени хоста. +* **Return type:** + Dict[str, str] +* **Raises:** + **RuntimeError** – Если произошла ошибка при выполнении команды hostname + или обработке вывода. + +#### *async* get_interfaces_by_state(state: str, initial_positions: Dict[str, Tuple[int, int]] = None) → List[NetworkInterface] + +Получает список интерфейсов по указанному состоянию. + +* **Parameters:** + * **state** (*str*) – Состояние интерфейса (например, “100” для активных). + * **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None. +* **Returns:** + Список интерфейсов с указанным состоянием. +* **Return type:** + List[NetworkInterface] + +#### *async* get_interfaces_container(state: str | None = None, initial_positions: Dict[str, Tuple[int, int]] = None, container_x: int = 0, container_y: int = 0) → NetworkInterfacesContainer + +Получает объект, содержащий список интерфейсов и координаты контейнера. + +* **Parameters:** + * **state** (*Optional* *[**str* *]* *,* *optional*) – Состояние интерфейсов (например, “100”). + По умолчанию None (все интерфейсы). + * **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None. + * **container_x** (*int* *,* *optional*) – Координата X контейнера. По умолчанию 0. + * **container_y** (*int* *,* *optional*) – Координата Y контейнера. По умолчанию 0. +* **Returns:** + Объект с интерфейсами и координатами контейнера. +* **Return type:** + NetworkInterfacesContainer + +#### *async* get_ip_config(device: sdbus_async.networkmanager.NetworkDeviceGeneric, ip_version: str) → List[IndividualIPConfig] + +Получает конфигурацию IP для устройства. + +* **Parameters:** + * **device** (*NetworkDeviceGeneric*) – Объект устройства NetworkManager. + * **ip_version** (*str*) – Версия IP (“4” или “6”). +* **Returns:** + Список конфигураций IP, включая адреса и маршруты. +* **Return type:** + List[IndividualIPConfig] +* **Raises:** + **Exception** – Если произошла ошибка при получении данных IP. + +#### *async* get_ip_method(device: sdbus_async.networkmanager.NetworkDeviceGeneric, ip_type: str) → str + +Получает метод IP (например, “auto”, “manual”) для указанного устройства. + +* **Parameters:** + * **device** (*NetworkDeviceGeneric*) – Объект устройства NetworkManager. + * **ip_type** (*str*) – Тип IP (например, “ipv4” или “ipv6”). +* **Returns:** + Метод IP или “unknown” в случае ошибки. +* **Return type:** + str +* **Raises:** + **Exception** – Если произошла ошибка при получении настроек соединения. + +#### *async* get_network_interfaces(initial_positions: Dict[str, Tuple[int, int]] = None) → List[NetworkInterface | WiFiDevice] + +Получает список сетевых интерфейсов. + +* **Parameters:** + **initial_positions** (*Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *,* *optional*) – Словарь начальных + координат (x, y) для интерфейсов. По умолчанию None (используются (100, 100)). +* **Returns:** + Список объектов интерфейсов, + : включая Wi-Fi устройства. +* **Return type:** + List[Union[NetworkInterface, WiFiDevice]] + +Исключает интерфейсы типа LOOPBACK и неактивные состояния (state == “10”). + +#### *async* get_network_interfaces_container(initial_positions: Dict[str, Tuple[int, int]] | None = None) → NetworkInterfacesContainer + +Получает контейнер с сетевыми интерфейсами и координатами контейнера. + +* **Parameters:** + **initial_positions** (*Optional* *[**Dict* *[**str* *,* *Tuple* *[**int* *,* *int* *]* *]* *]* *,* *optional*) – Словарь начальных координат (x, y) для интерфейсов. По умолчанию None. +* **Returns:** + Объект с интерфейсами и координатами (0, 0). +* **Return type:** + NetworkInterfacesContainer + +#### *async* get_wifi_info(wifi_device: sdbus_async.networkmanager.NetworkDeviceWireless) → Dict[str, str | int | None] + +Получает информацию о Wi-Fi устройстве. + +* **Parameters:** + **wifi_device** (*NetworkDeviceWireless*) – Объект Wi-Fi устройства NetworkManager. +* **Returns:** + Словарь с данными Wi-Fi (SSID, BSSID, + : bitrate, strength, frequency, mode), где значения могут быть None. +* **Return type:** + Dict[str, Optional[Union[str, int]]] +* **Raises:** + **Exception** – Если произошла ошибка при получении данных точки доступа. diff --git a/Документация/Техническая-документация-api/api/services/settings_service.md b/Документация/Техническая-документация-api/api/services/settings_service.md new file mode 100644 index 0000000..bc73b07 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/settings_service.md @@ -0,0 +1,43 @@ +# Settings Service + +### *class* services.settings_service.SettingsService(translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Сервис для управления настройками и очистки данных сети. + +#### clear_all_data() → bool + +Очищает данные узлов всех подсетей и точек доступа Wi-Fi. + +* **Returns:** + True, если очистка успешна. +* **Return type:** + bool +* **Raises:** + **Exception** – Если произошла ошибка при записи в один из файлов. + +#### clear_subnet(subnet: str | None = None) → bool + +Очищает данные узлов подсети в указанном файле или во всех файлах. + +* **Parameters:** + **subnet** (*Optional* *[**str* *]*) – Подсеть в формате CIDR (например, “10.1.1.0/24”). + Если None, очищает все подсети. +* **Returns:** + True, если очистка успешна. +* **Return type:** + bool +* **Raises:** + **Exception** – Если произошла ошибка при записи в файл. + +#### clear_wifi() → bool + +Очищает данные точек доступа Wi-Fi в файле wifi.json. + +* **Returns:** + True, если очистка успешна. +* **Return type:** + bool +* **Raises:** + **Exception** – Если произошла ошибка при записи в файл. diff --git a/Документация/Техническая-документация-api/api/services/subnet_service.md b/Документация/Техническая-документация-api/api/services/subnet_service.md new file mode 100644 index 0000000..009e602 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/subnet_service.md @@ -0,0 +1,272 @@ +# Subnet Service + +### *class* services.subnet_service.DeviceInfoCollector(translations: Translations) + +Bases: `object` + +Класс для сбора информации об устройствах, включая вендоров и хостнеймы. + +Источники данных: +: - MacLookup: сопоставление префикса MAC (OUI) с названием производителя. + - DNS: gethostbyaddr с малым таймаутом для обратного разрешения имени. + - NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS‑имён. + +Политика кэширования: +: - Результаты get_vendor кэшируются с помощью functools.lru_cache. + - Результаты nbtscan аккумулируются в словарях nbtscan_cache/nbtscan_results + на время жизни экземпляра. + +#### get_hostname(ip: str) → str | None + +Получает хостнейм для указанного IP-адреса. + +Пробует сначала DNS, затем NetBIOS. + +* **Parameters:** + **ip** (*str*) – IP-адрес устройства. +* **Returns:** + Хостнейм или None, если не удалось определить. +* **Return type:** + Optional[str] + +#### get_vendor(mac: str) → str + +Получает вендора устройства по MAC-адресу. + +Использует кэширование для повышения производительности. + +* **Parameters:** + **mac** (*str*) – MAC-адрес устройства. +* **Returns:** + Название вендора или “Неизвестный” в случае ошибки. +* **Return type:** + str + +#### scan_nbtscan(subnet: str) → None + +Сканирует подсеть с помощью nbtscan для получения хостнеймов. + +Сохраняет результаты в кэш и логирует процесс. + +* **Parameters:** + **subnet** (*str*) – Подсеть в формате CIDR. + +### *class* services.subnet_service.DeviceStorage(base_path: str = 'storage/subnets', translations: Translations = None) + +Bases: `object` + +Класс для хранения и управления данными об устройствах. + +Формат файла подсети: + +```default +{ + "devices": [Device, ...] +} +``` + +Политика очистки: + +- Метод \_clean_old_devices удаляет оффлайн‑устройства, не наблюдавшиеся более 7 дней, + чтобы поддерживать актуальность списка. + +#### get_subnet_file(subnet: str) → Path + +Возвращает путь к файлу для конкретной подсети. + +Заменяет символы ‘/’ на ‘_’ для корректного имени файла. + +* **Parameters:** + **subnet** (*str*) – Подсеть в формате CIDR. +* **Returns:** + Путь к файлу. +* **Return type:** + Path + +#### load_devices(subnet: str) → Dict[str, Device] + +Загружает устройства для указанной подсети. + +Читает данные из JSON-файла и фильтрует устаревшие устройства. + +* **Parameters:** + **subnet** (*str*) – Подсеть в формате CIDR. +* **Returns:** + Словарь устройств с MAC как ключом. +* **Return type:** + Dict[str, Device] + +#### save_devices(subnet: str, devices: List[Device]) → None + +Сохраняет устройства для указанной подсети. + +Записывает данные в JSON-файл. + +* **Parameters:** + * **subnet** (*str*) – Подсеть в формате CIDR. + * **devices** (*List* *[**Device* *]*) – Список устройств для сохранения. +* **Raises:** + **Exception** – Если произошла ошибка при сохранении. + +### *class* services.subnet_service.NetworkScanner(interface: str, translations: Translations) + +Bases: `object` + +Класс для сканирования подсети с использованием ARP-запросов. + +Назначение: +: Обнаруживает активные устройства в локальной сети, отправляя широковещательные + ARP‑запросы по указанной подсети и собирая ответы (IP, MAC). + +Детали реализации: +: - Использует scapy (Ether + ARP) для генерации пакетов и srp для + отправки/получения на канальном уровне от имени заданного интерфейса. + - Таймаут ожидания ответа короткий (2 секунды), ориентирован на интерактивные + сценарии UI. + +Ограничения и замечания: +: - Требуются права для отправки низкоуровневых пакетов (capabilities/root). + - В сетях с фильтрацией широковещания количество обнаруженных устройств + может быть ограничено. + +#### scan(subnet: str) → List[Tuple[str, str]] + +Сканирует подсеть с использованием ARP-запросов. + +Отправляет ARP-пакеты для обнаружения активных устройств и возвращает +список кортежей (IP, MAC). + +* **Parameters:** + **subnet** (*str*) – Подсеть в формате CIDR (например, “10.1.1.0/24”). +* **Returns:** + Список кортежей (IP-адрес, MAC-адрес) обнаруженных устройств. +* **Return type:** + List[Tuple[str, str]] +* **Raises:** + **Exception** – Если произошла ошибка сканирования. + +### *class* services.subnet_service.PortScanner(interface: str, translations: Translations) + +Bases: `object` + +Класс для сканирования открытых портов на устройствах. + +Назначение: +: Плейсхолдер для будущего функционала активного сканирования TCP/UDP‑портов + у обнаруженных узлов. В текущей версии возвращает пустой список. + +План развития: +: - Добавить неблокирующее сканирование наиболее распространённых портов + (22, 80, 443 и т.д.) с ограничением по времени. + - Настраиваемые профили глубины и скорости сканирования. + +#### scan(ip: str) → List[str] + +Сканирует открытые порты на указанном IP-адресе. + +Пока возвращает пустой список, так как функциональность не реализована. + +* **Parameters:** + **ip** (*str*) – IP-адрес устройства для сканирования. +* **Returns:** + Список открытых портов (пока пустой). +* **Return type:** + List[str] + +### *class* services.subnet_service.SubnetService(translations: Translations) + +Bases: `object` + +Сервис для сканирования подсетей и управления устройствами. + +Роль сервиса: +: Объединяет сетевое сканирование (ARP), сбор дополнительной информации + (вендор, хостнейм), слияние с кэшем предыдущих результатов и персистентное + хранение данных по подсетям. Предоставляет вспомогательные операции для + локального узла и работы с заметками устройств. + +Поток выполнения скана (scan_subnet): +: 1. Определение подсети (вручную или авто по интерфейсу). + 2. Загрузка ранее сохранённых устройств подсети. + 3. Добавление локального устройства (если принадлежит подсети). + 4. ARP‑сканирование и параллельная обработка узлов (обогащение данных). + 5. Маркировка оффлайн‑узлов из кэша, не встреченных в текущем скане. + 6. Сортировка по IP и сохранение объединённого списка в JSON. + +#### add_note(mac: str, note: str, translations: Translations) → Tuple[bool, Tuple[str, Dict] | None] + +Добавляет заметку для устройства по MAC-адресу. + +Привязывает заметку к устройству, если оно существует. + +* **Parameters:** + * **mac** (*str*) – MAC-адрес устройства. + * **note** (*str*) – Текст заметки. + * **translations** (*Translations*) – Объект переводов для текущего языка. +* **Returns:** + Кортеж (успех, результат), + : где результат содержит код ошибки/успеха и данные. +* **Return type:** + Tuple[bool, Optional[Tuple[str, Dict]]] + +#### delete_note(mac: str, translations: Translations) → Tuple[bool, Tuple[str, Dict] | None] + +Удаляет заметку для устройства по MAC-адресу. + +Удаляет привязанную заметку, если она существует. + +* **Parameters:** + * **mac** (*str*) – MAC-адрес устройства. + * **translations** (*Translations*) – Объект переводов для текущего языка. +* **Returns:** + Кортеж (успех, результат), + : где результат содержит код ошибки/успеха и данные. +* **Return type:** + Tuple[bool, Optional[Tuple[str, Dict]]] + +#### scan_subnet(subnet: str | None = None) → SubnetScanResult + +Сканирует указанную подсеть и возвращает результаты. + +Выполняет ARP-сканирование, собирает информацию о устройствах и сохраняет данные. + +* **Parameters:** + **subnet** (*Optional* *[**str* *]*) – Подсеть в формате CIDR (например, “10.1.1.0/24”). + Если None или пустая строка, определяется автоматически. +* **Returns:** + Объект с результатами сканирования, содержащий список + : устройств или сообщение об ошибке. +* **Return type:** + SubnetScanResult +* **Raises:** + **Exception** – Если произошла ошибка сканирования. + +#### update_note(mac: str, note: str, translations: Translations) → Tuple[bool, Tuple[str, Dict] | None] + +Обновляет заметку для устройства по MAC-адресу. + +Изменяет существующую заметку, если она есть. + +* **Parameters:** + * **mac** (*str*) – MAC-адрес устройства. + * **note** (*str*) – Новый текст заметки. + * **translations** (*Translations*) – Объект переводов для текущего языка. +* **Returns:** + Кортеж (успех, результат), + : где результат содержит код ошибки/успеха и данные. +* **Return type:** + Tuple[bool, Optional[Tuple[str, Dict]]] + +### services.subnet_service.get_subnet_service(translations: Translations = Depends(translations_dependency)) + +Фабричная функция для создания экземпляра SubnetService. + +Использует зависимости FastAPI для получения объекта переводов и возвращает +экземпляр SubnetService с текущей локализацией. + +* **Parameters:** + **translations** (*Translations*) – Объект переводов для текущего языка. +* **Returns:** + Экземпляр сервиса для работы с подсетями. +* **Return type:** + SubnetService diff --git a/Документация/Техническая-документация-api/api/services/ufw_service.md b/Документация/Техническая-документация-api/api/services/ufw_service.md new file mode 100644 index 0000000..379e445 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/ufw_service.md @@ -0,0 +1,108 @@ +# UFW Service + +### *class* services.ufw_service.UFWService + +Bases: `object` + +Сервис взаимодействия с UFW (Uncomplicated Firewall). + +Назначение: +: - Чтение статуса и списка правил брандмауэра. + - Добавление, удаление и массовая обработка правил с поддержкой диапазонов портов, + комментариев и выбором протоколов. + +Детали реализации: +: - Команды выполняются через sudo ufw …; вывод парсится в модели pydantic. + - Для операций удаления соблюдается порядок с конца, чтобы не нарушать нумерацию. + +#### add_rules(rules: List[UFWRule]) → dict + +Добавляет правила UFW. + +* **Parameters:** + **rules** – Список правил для добавления +* **Returns:** + Результат добавления правил +* **Return type:** + dict + +#### add_rules_base(rules: List[UFWRule], direction: str = '') → bool + +Базовый метод для добавления правил UFW. + +* **Parameters:** + * **rules** – Список правил для добавления + * **direction** – Направление трафика (“in” или “out”) +* **Returns:** + True если все правила были успешно добавлены, False в противном случае +* **Return type:** + bool + +#### add_ufw_in_rules(rules: List[UFWRule]) → bool + +Добавляет входящие (in) правила UFW. + +* **Parameters:** + **rules** (*List* *[**UFWRule* *]*) – Список правил для добавления +* **Returns:** + True если все правила были успешно добавлены, False в противном случае +* **Return type:** + bool + +#### add_ufw_out_rules(rules: List[UFWRule]) → bool + +Добавляет исходящие (out) правила UFW. + +* **Parameters:** + **rules** (*List* *[**UFWRule* *]*) – Список правил для добавления +* **Returns:** + True если все правила были успешно добавлены, False в противном случае +* **Return type:** + bool + +#### delete_rules(rule_numbers: List[int]) → dict + +Удаляет правила UFW по их номерам. + +* **Parameters:** + **rule_numbers** (*List* *[**int* *]*) – Список номеров правил для удаления +* **Returns:** + Результат операции удаления +* **Return type:** + dict + +#### disable_ufw() → bool + +Выключает UFW. + +* **Returns:** + True если успешно выключен, False в противном случае +* **Return type:** + bool + +#### enable_ufw() → bool + +Включает UFW. + +* **Returns:** + True если успешно включен, False в противном случае +* **Return type:** + bool + +#### get_ufw_rules() → UFWRulesResponse + +Получает список правил UFW. + +* **Returns:** + Объект, содержащий статус UFW и список правил +* **Return type:** + UFWRulesResponse + +#### get_ufw_status() → UFWStatus + +Проверяет статус UFW. + +* **Returns:** + Объект с информацией о статусе UFW +* **Return type:** + UFWStatus diff --git a/Документация/Техническая-документация-api/api/services/wifi_service.md b/Документация/Техническая-документация-api/api/services/wifi_service.md new file mode 100644 index 0000000..2bfee67 --- /dev/null +++ b/Документация/Техническая-документация-api/api/services/wifi_service.md @@ -0,0 +1,61 @@ +# Wifi Service + +### *class* services.wifi_service.WifiService(translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Сервис для сканирования текущих Wi‑Fi точек доступа и заметок. + +Источники данных: +: - pywifi для базового сканирования и получения списка AP. + - iw dev scan для уточнения частоты, сигнала и безопасности. + - MacLookup для определения вендора по BSSID. + +Политики: +: - Выбор лучшего AP по SSID по уровню сигнала. + - Кэширование определения вендора. + - Сохранение SSID даже без заметок для будущих операций. + +#### add_note(ssid: str, note: str) → Tuple[bool, str | None] + +Добавляет заметку к сети Wi-Fi по SSID. + +#### delete_note(ssid: str) → Tuple[bool, str | None] + +Удаляет заметку сети Wi-Fi по SSID. + +#### get_vendor(mac: str) → str + +Определяет вендора по MAC-адресу с использованием кэширования. + +#### scan_wifi(timeout: int = 30) → WifiScanResult + +Сканирует текущие Wi-Fi точки доступа. + +#### update_note(ssid: str, note: str) → Tuple[bool, str | None] + +Обновляет заметку сети Wi-Fi по SSID. + +### *class* services.wifi_service.WifiStorage(storage_path: str = 'storage/wifi/wifi.json', translations: Translations = Depends(translations_dependency)) + +Bases: `object` + +Класс для хранения данных о Wi‑Fi сетях и их заметках по SSID. + +Формат: +: { + : “networks”: [{“ssid”: str, “note”: Optional[str]}] +
+ } + +Поведение: +: - Создаёт директорию хранения при инициализации, ведёт логирование путей. + - Валидация структуры при чтении, безопасная запись с Unicode и отступами. + +#### load_notes() → Dict[str, str | None] + +Загружает заметки по SSID из файла хранения. + +#### save_notes(notes: Dict[str, str | None]) → None + +Сохраняет заметки по SSID в файл. diff --git a/Документация/Техническая-документация-api/api/storage.md b/Документация/Техническая-документация-api/api/storage.md new file mode 100644 index 0000000..adedeb1 --- /dev/null +++ b/Документация/Техническая-документация-api/api/storage.md @@ -0,0 +1,4 @@ +# Хранилища + +* [storage.json_storage](json_storage.md) +* [storage.session_storage](session_storage.md) diff --git a/Документация/Техническая-документация-api/api/storage/json_storage.md b/Документация/Техническая-документация-api/api/storage/json_storage.md new file mode 100644 index 0000000..261e32d --- /dev/null +++ b/Документация/Техническая-документация-api/api/storage/json_storage.md @@ -0,0 +1,75 @@ +# storage.json_storage + +### *class* storage.json_storage.JsonStorage(file_path: str = '/etc/gonets/users.json') + +Bases: `object` + +Хранилище пользователей в JSON-файле. + +Назначение: +: Обеспечивает простое файловое хранилище для учетных записей пользователей + без полноценной СУБД. Подходит для встраиваемых окружений и сценариев, + где важна минимальная зависимость от внешних сервисов. + +Формат данных: +: JSON‑структура вида: + { +
+ > “users”: [ + > : {“id”: int, “username”: str, “password_hash”: str, “is_admin”: bool}, + > … +
+ > ], + > “next_id”: int +
+ } + +Безопасность: +: Пароли никогда не сохраняются в открытом виде. Для хеширования используется + passlib.context.CryptContext со схемой bcrypt. Файл создаётся с правами + доступа 0o600 (только владелец). + +Ограничения и замечания: +: - Отсутствует конкурентный доступ/блокировки файла — при использовании в + многопроцессной среде может потребоваться внешняя синхронизация. + - Имя файла и каталог по умолчанию /etc/gonets/users.json предполагают + наличие прав на запись и предварительную подготовку окружения. + +#### create_user(user: UserCreate) → UserResponse + +Создаёт нового пользователя с хешированием пароля. + +* **Parameters:** + **user** (*UserCreate*) – Объект с данными нового пользователя (username, password, is_admin). +* **Returns:** + Объект с данными созданного пользователя (id, username, is_admin). +* **Return type:** + UserResponse +* **Raises:** + * **ValueError** – Если пользователь с таким именем уже существует. + * **Exception** – Если произошла ошибка при записи данных. + +#### get_user_by_username(username: str) → dict | None + +Получает данные пользователя по имени. + +* **Parameters:** + **username** (*str*) – Имя пользователя для поиска. +* **Returns:** + Словарь с данными пользователя или None, если пользователь не найден. +* **Return type:** + Optional[dict] +* **Raises:** + **Exception** – Если произошла ошибка при чтении файла. + +#### verify_password(plain_password: str, hashed_password: str) → bool + +Проверяет соответствие введённого пароля хэшированному. + +* **Parameters:** + * **plain_password** (*str*) – Введённый пользователем пароль. + * **hashed_password** (*str*) – Хэшированный пароль из хранилища. +* **Returns:** + True, если пароль верен, False в противном случае. +* **Return type:** + bool diff --git a/Документация/Техническая-документация-api/api/storage/session_storage.md b/Документация/Техническая-документация-api/api/storage/session_storage.md new file mode 100644 index 0000000..87a7991 --- /dev/null +++ b/Документация/Техническая-документация-api/api/storage/session_storage.md @@ -0,0 +1,95 @@ +# storage.session_storage + +### *class* storage.session_storage.SessionStorage(file_path: str = '/etc/gonets/sessions.json') + +Bases: `object` + +Хранилище сессий пользователей в JSON-файле. + +Назначение: +: Лёгкое файловое хранилище для сессионных токенов, сопоставленных с + client_id (например, IP клиента). Предназначено для сред без БД и + persistent‑кэшей. Обеспечивает базовые операции и авто‑очистку протухших + сессий. + +Формат данных: +: { + : “sessions”: { + : “”: { + : “username”: str, + “token”: str, + “client_id”: str, + “created_at”: ISO8601 str, + “expiry”: ISO8601 str +
+ } +
+ } + +Политика TTL: +: Каждая сессия действует 30 минут. При создании/чтении/удалении вызывается + clean_expired_sessions() для удаления протухших записей. + +Ограничения: +: - Нет файловых блокировок: в многопроцессных конфигурациях возможны гонки. + - Размещение по умолчанию /etc/gonets/sessions.json требует прав на запись. + +#### clean_expired_sessions() + +Удаляет все истекшие сессии из хранилища. + +* **Raises:** + **Exception** – Если произошла ошибка при чтении или записи данных. + +#### NOTE +Проверяет срок действия каждой сессии и удаляет те, что истекли, +записывая обновлённые данные. + +#### create_session(username: str, token: str, client_id: str) → str + +Создаёт новую сессию и возвращает уникальный session_id. + +* **Parameters:** + * **username** (*str*) – Имя пользователя, для которого создаётся сессия. + * **token** (*str*) – Токен аутентификации. + * **client_id** (*str*) – Идентификатор клиента. +* **Returns:** + Уникальный идентификатор сессии (session_id). +* **Return type:** + str +* **Raises:** + **Exception** – Если произошла ошибка при создании или записи сессии. + +#### NOTE +Удаляет истекшие сессии перед созданием новой и устанавливает срок +действия 30 минут. + +#### delete_session(session_id: str) + +Удаляет сессию по указанному session_id. + +* **Parameters:** + **session_id** (*str*) – Уникальный идентификатор сессии. +* **Raises:** + **Exception** – Если произошла ошибка при чтении или записи данных. + +#### NOTE +Очищает истекшие сессии перед удалением. + +#### get_latest_session(client_id: str) → Dict | None + +Получает последнюю активную сессию для указанного client_id. + +* **Parameters:** + **client_id** (*str*) – Идентификатор клиента. +* **Returns:** + Словарь с данными последней активной сессии, включая + : ”session_id”, или None, если сессия не найдена. +* **Return type:** + Optional[Dict] +* **Raises:** + **Exception** – Если произошла ошибка при чтении или обработке данных. + +#### NOTE +Очищает истекшие сессии перед поиском и возвращает сессию с самым +поздним временем создания. diff --git a/Документация/Техническая-документация-api/api/utils.md b/Документация/Техническая-документация-api/api/utils.md new file mode 100644 index 0000000..bf7c30c --- /dev/null +++ b/Документация/Техническая-документация-api/api/utils.md @@ -0,0 +1,3 @@ +# Утилиты + +* [utils.i18n](i18n.md) diff --git a/Документация/Техническая-документация-api/api/utils/i18n.md b/Документация/Техническая-документация-api/api/utils/i18n.md new file mode 100644 index 0000000..7ccd96f --- /dev/null +++ b/Документация/Техническая-документация-api/api/utils/i18n.md @@ -0,0 +1,23 @@ +# utils.i18n + +Утилиты локализации и зависимости переводов для FastAPI. + +Содержимое модуля: +: - get_translations(): фабрика зависимости FastAPI, считывающая локаль из + query‑параметра locale, cookie locale или заголовка Accept-Language + (по приоритету), с дефолтом ru. Возвращает функцию‑зависимость, которая + подгружает babel.support.Translations из каталога SRV/locales. + - \_(): удобная обёртка для получения перевода строки с использованием + текущей локали (или дефолтного ru, если контекст запроса не передан). + +Особенности: +: - При отсутствии словаря перевода для выбранной локали выполняется fallback на + русскую локаль, что гарантирует наличие строк интерфейса. + - Локаль определяется только по первому языку из Accept-Language (без + региональных суффиксов) для упрощения. + - Модуль ведёт отладочное логирование выбора и загрузки локали. + +### utils.i18n.get_translations() → callable + +Создаёт зависимость для загрузки переводов на основе заголовка Accept-Language +или параметра запроса ‘locale’. По умолчанию используется русский язык. diff --git a/Документация/Техническая-документация-api/index.md b/Документация/Техническая-документация-api/index.md new file mode 100644 index 0000000..99616f2 --- /dev/null +++ b/Документация/Техническая-документация-api/index.md @@ -0,0 +1,45 @@ +# GONETS SRV Documentation + +Добро пожаловать в документацию серверной части GONETS (SRV). + +## Содержание + +## Разделы + +* [Сервисы](services.md) + * [ARP Service](arp_service.md) + * [Auth Service](auth_service.md) + * [Connect Service](connect_service.md) + * [Firewalld Service](firewalld_service.md) + * [IP Service](ip_service.md) + * [Network Service](network_service.md) + * [Settings Service](settings_service.md) + * [Subnet Service](subnet_service.md) + * [UFW Service](ufw_service.md) + * [Wifi Service](wifi_service.md) +* [Модели](models.md) + * [models.auth](Техническая-документация-api/api/models/auth.md) + * [models.network](Техническая-документация-api/api/models/network.md) + * [models.request](request.md) + * [models.subnet](Техническая-документация-api/api/models/subnet.md) + * [models.ufw](Техническая-документация-api/api/models/ufw.md) + * [models.wifi](wifi.md) +* [API эндпоинты](endpoints.md) + * [api.v1.auth](Техническая-документация-api/api/endpoints/auth.md) + * [api.v1.ip](ip.md) + * [api.v1.network](Техническая-документация-api/api/endpoints/network.md) + * [api.v1.settings](settings.md) + * [api.v1.subnet](Техническая-документация-api/api/endpoints/subnet.md) + * [api.v1.ufw](Техническая-документация-api/api/endpoints/ufw.md) + * [api.v1.websocket](websocket.md) +* [Конфигурация](config.md) + * [config.cors](cors.md) + * [config.init_config](init_config.md) + * [config.ports](ports.md) +* [Core](core.md) + * [core.cli_executor](cli_executor.md) +* [Хранилища](storage.md) + * [storage.json_storage](json_storage.md) + * [storage.session_storage](session_storage.md) +* [Утилиты](utils.md) + * [utils.i18n](i18n.md)

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 F{{!MNLAd|` literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/models/ufw.doctree b/Документация/Техническая-документация-api/.doctrees/api/models/ufw.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ce999f4b2690f01e4ec55e9e3e4ca157391e4397 GIT binary patch literal 91733 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 z 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 VmuY4>TwMy7lZe1#d3|#1e*o43*ysQN literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/services.doctree b/Документация/Техническая-документация-api/.doctrees/api/services.doctree new file mode 100644 index 0000000000000000000000000000000000000000..05fe38563059ca1eec398a713f223189b7923e72 GIT binary patch literal 3122 zcmZWrU2hyU6iu4$SF*eLXbYuHP=%lklw<+%fRK<7AcP34P(gjGM&23k+N{SOY)`Uz zsMJ0bHNtN-60f}Q1CWsT8OcB5cxHC96C$lLzP`Tq`udz>KWqH{pu1B1xqhPJ+;U+K zrAnyrt{n_1mDa!V?>_fW{l4pHa$;1jW9r=sJYvR0qN(&xJX>)sLu1R8T==sFYqHi8 zzmLg=SG>LbEpmWuy=GVA7R(+Sf!cDWwO+vvUzUPWQ@z%AxV1ERC2D%1b!hwhE~Y;IX?dbc(m zD=D%0n#Y?pk1^Nugb0z;d|t2l@OlOH6lm&+($m`Vz1ng^t>toJYA$!{F8K&?Y7X@- zdqiD3C9{NPmiePq zfRJPbV*uHSP$Pflnv5p^625v>z=feL^K=BDCH`o|trvVUN{UnXu7jAD2b#0@*hg%a zJp{Zu0P7)$P=kistPpf?qDhuf?a4A)!ut0wK_23OOLP$;kmy4!sX*rX7td=a-c@+q2zl41*1=ltrn)z|6bVfp;5a2@jmr}b1g9H;Si#rF<};h+XyFk>fO#5VWhHj zY4WA(1$6}iqS;vK)W39n0|I9egd>QwLBPAEg$i0&q7x3L&UFs?ss)ws4P95$Olcbl zdQ8#IYi^wpu^2YoHl1;F(Gr`Rxl_Y65<1E!NY_6hT7qTp(3GUGbZ}%b4OGL@us>YC z40>6>eCcj|;>t?56*d6i8HWA{Y{Q(4!Vc>wGmPCYrn}wxdLpb_NQ)XzM zsA!f3G;PsYrVNdiR~8U~79VrNOT2DI2{&XU!bYkpTXUX(b6sr4KsgK2A!x61i{`54 zUJGAHg8QK$CY2#tg7e;h2H~8_A;fJvkPWbr6QEG=lw1G()&tkiXcmDY5Hg8t5J|eh zG9suw@WS0@)@J6@!2o7+n4Mat<90B@G<(?*W>s~ z_+YsVe}5hx%q0P@Q>qU+wc{cO)L_7DDv+#W$p{omf>gKN9srp}3uZ1h5Sc6>cPR6WJ8yW7Gm`@ z&yXTK(F)nGGyr!5EL@I(fl3s1f=ZZtbj6LQ0lPwxl8NDcH1&WC?i1X?_7oK`N-c8S zis3blC>}B*!jmJ2Zc+7i^|}LA#kdr-Gq*CBb}1#`E|AD&f-4@lvqVqu019uc zZ4?D$Sv)Zz=eQ<=l)IgpwS0NOjA-MU||zm8VT3;zfV!21|n o!i(16(95g~@u-@;Q8qAKaW`J@&Et; literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/services/arp_service.doctree b/Документация/Техническая-документация-api/.doctrees/api/services/arp_service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f40a78f273a854cf6c2680cf56036e447ff2bad1 GIT binary patch literal 24261 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 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/services/auth_service.doctree b/Документация/Техническая-документация-api/.doctrees/api/services/auth_service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3d69920b9effff558a669042cbf564fe2ae529c3 GIT binary patch literal 24813 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 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/services/firewalld_service.doctree b/Документация/Техническая-документация-api/.doctrees/api/services/firewalld_service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..33edddddc63b76203b78ea51cacf1b8982896351 GIT binary patch literal 50471 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 literal 0 HcmV?d00001 diff --git a/Документация/Техническая-документация-api/.doctrees/api/services/network_service.doctree b/Документация/Техническая-документация-api/.doctrees/api/services/network_service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a7e5e82e4f183f81b5319e9eeb0b1095a3840cce GIT binary patch literal 150403 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