gns3-server 3.0.0rc2__py3-none-any.whl → 3.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of gns3-server might be problematic. Click here for more details.

Files changed (37) hide show
  1. {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/METADATA +3 -3
  2. {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/RECORD +37 -31
  3. {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/WHEEL +1 -1
  4. gns3server/api/routes/controller/projects.py +20 -4
  5. gns3server/api/routes/index.py +3 -3
  6. gns3server/api/server.py +38 -3
  7. gns3server/appliances/arista-veos.gns3a +20 -514
  8. gns3server/appliances/cisco-7200.gns3a +26 -0
  9. gns3server/appliances/cisco-asav.gns3a +14 -1
  10. gns3server/appliances/cisco-iou-l2.gns3a +16 -4
  11. gns3server/appliances/cisco-iou-l3.gns3a +16 -4
  12. gns3server/appliances/innovaphone-app.gns3a +50 -0
  13. gns3server/appliances/innovaphone-ipva.gns3a +78 -0
  14. gns3server/appliances/pfsense.gns3a +14 -0
  15. gns3server/compute/iou/iou_vm.py +22 -12
  16. gns3server/controller/__init__.py +22 -21
  17. gns3server/controller/compute.py +1 -1
  18. gns3server/controller/node.py +2 -6
  19. gns3server/controller/project.py +1 -2
  20. gns3server/crash_report.py +1 -1
  21. gns3server/db/repositories/pools.py +1 -1
  22. gns3server/disks/empty100G.qcow2 +0 -0
  23. gns3server/disks/empty200G.qcow2 +0 -0
  24. gns3server/disks/empty30G.qcow2 +0 -0
  25. gns3server/disks/empty8G.qcow2 +0 -0
  26. gns3server/schemas/config.py +1 -1
  27. gns3server/static/favicon.ico +0 -0
  28. gns3server/static/redoc.standalone.js +1782 -0
  29. gns3server/static/swagger-ui-bundle.js +2 -0
  30. gns3server/static/swagger-ui.css +3 -0
  31. gns3server/static/web-ui/index.html +1 -1
  32. gns3server/static/web-ui/{main.ed82697b58d803e7.js → main.e55eeff5c0ba1cf4.js} +1 -1
  33. gns3server/utils/images.py +45 -35
  34. gns3server/version.py +2 -2
  35. {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/LICENSE +0 -0
  36. {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/entry_points.txt +0 -0
  37. {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gns3-server
3
- Version: 3.0.0rc2
3
+ Version: 3.0.1
4
4
  Summary: GNS3 graphical interface for the GNS3 server.
5
5
  Author-email: Jeremy Grossmann <developers@gns3.com>
6
- License: GNU GENERAL PUBLIC LICENSE
6
+ License: GNU GENERAL PUBLIC LICENSE
7
7
  Version 3, 29 June 2007
8
8
 
9
9
  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
@@ -730,7 +730,7 @@ Requires-Dist: pytest-timeout==2.3.1; extra == "dev"
730
730
  Requires-Dist: pytest-asyncio==0.21.2; extra == "dev"
731
731
  Requires-Dist: requests==2.32.3; extra == "dev"
732
732
  Requires-Dist: httpx==0.27.2; extra == "dev"
733
- Requires-Dist: httpx-ws==0.6.2; extra == "dev"
733
+ Requires-Dist: httpx_ws==0.6.2; extra == "dev"
734
734
 
735
735
  # GNS3 server repository
736
736
 
@@ -2,15 +2,15 @@ gns3server/__init__.py,sha256=7t93V0ASczMyzTR7up2g0FBQ6Rm1eC8wxyysMKUeAKE,716
2
2
  gns3server/__main__.py,sha256=5CO8WDwpzZ2BRo3Ct95MhMGxyXQ3QsHBcWt3jPlcLb0,736
3
3
  gns3server/alembic.ini,sha256=XWHHdJ3QOHO3NJh5LK6bMHT6kv7GzAr26X1hs43DH4o,3086
4
4
  gns3server/config.py,sha256=3UmjwcthW-gMKbLEPzygzrEVJYza-H1IWRjJZ_L1-tg,9244
5
- gns3server/crash_report.py,sha256=67G-uyPj9xXnNGGOLbY3GXN75f3YQvVP2k0tfYrZULI,6021
5
+ gns3server/crash_report.py,sha256=nUDfhsd9WLbYOEXpvgVJR0--mggDB4fpy-U3SDCiRPA,6021
6
6
  gns3server/logger.py,sha256=zjHjyyqK74YMVPdjjznj03xWO42Kx3RDeVnZflT-0eI,5309
7
7
  gns3server/main.py,sha256=w16TCAYfTmdKsrCjm7rt4hlwsaMfLiWxw8598K4B3zA,2286
8
8
  gns3server/server.py,sha256=6wtW4I0nKXkuIbJAn0h_xgpiOrGjQpnLgs1Ngj8p5Dw,13362
9
- gns3server/version.py,sha256=YN7XwT6qmhM62LJW3GAa6htdu7m4p13nco83zeRPBTo,1467
9
+ gns3server/version.py,sha256=62q_NlnEdUU9OlLnmYb4TXBYGDYIqieOYV-jSQOp8bY,1462
10
10
  gns3server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- gns3server/api/server.py,sha256=V1hRgbjOg2eCslyuiQNh0kY3ysqGE2PzS-5hirCwZTg,6756
11
+ gns3server/api/server.py,sha256=LQAKxtBaVxylgVTqRpVhdwACdkaibDryOSUT2us5PUk,7972
12
12
  gns3server/api/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- gns3server/api/routes/index.py,sha256=z8G4mb0u0xl2JETSlwTv4LugnrWhSCLp_OvqyJU3wUQ,3233
13
+ gns3server/api/routes/index.py,sha256=Zw5RerRIurKRE5773D9vvtvYjQqBtD1R_q-UiDGwwx0,3308
14
14
  gns3server/api/routes/compute/__init__.py,sha256=Mccr7yhdhHtPN_5THI9Zqj0sJUKiEHm6kK0kaQpXd8I,7648
15
15
  gns3server/api/routes/compute/atm_switch_nodes.py,sha256=pWUQszCnK0j4bfSvT90z8tcuuK-M_2f0KKvtpCPV0dM,7294
16
16
  gns3server/api/routes/compute/capabilities.py,sha256=vCaxxzVuTKbTWwXUf_Y829XjIetONUFSlEO5w5fq-7I,1604
@@ -45,7 +45,7 @@ gns3server/api/routes/controller/links.py,sha256=LgqmdVUUwtpipDhDzRdzUyKpsr1Or-t
45
45
  gns3server/api/routes/controller/nodes.py,sha256=WeWmKVDU7aG9GeW4ZbvD79P12Ov0jTIZ5lw4fJjWq8s,18855
46
46
  gns3server/api/routes/controller/pools.py,sha256=FCSqEmRxRvjMKM_iGwERxUrukJEGczV_XRpa8mSZmFw,7806
47
47
  gns3server/api/routes/controller/privileges.py,sha256=mdjt1oHg2rIGonCopFfDXr7BCa_y3ky4_pMu8no0BCQ,1011
48
- gns3server/api/routes/controller/projects.py,sha256=iUTBAiZP9ULJInM8R_ZZUJNXTiO6KPruga2Di9VQlU0,20934
48
+ gns3server/api/routes/controller/projects.py,sha256=1I5QL3rB35POkfBoObPH0xbUz-NkJlyJirqO-xIm2QE,21846
49
49
  gns3server/api/routes/controller/roles.py,sha256=IQ-9BcUDOWqFpxSU7CEZWuEZ6H0VaWv4AfHxT0NZ8ME,6089
50
50
  gns3server/api/routes/controller/snapshots.py,sha256=GMBL2nQJp8VJRpo7LpzHSBhPn1SJbvjs0HugDFqCOYE,3559
51
51
  gns3server/api/routes/controller/symbols.py,sha256=D_fD-j421LJjiO0Rtgo82psxm4WLgN1psVqTdc4psSw,3825
@@ -64,7 +64,7 @@ gns3server/appliances/almalinux.gns3a,sha256=F37VYRnx0twhNxibZsAN9BKjISl1zu-6hwj
64
64
  gns3server/appliances/alpine-linux-virt.gns3a,sha256=0BDnDSVRIllXk6Tpuyk1G2vWv9uiwyaCmdd_vYyBK-g,2567
65
65
  gns3server/appliances/alpine-linux.gns3a,sha256=LZs8KQNJQtmpUn7uVOmLlb23kjQHc9Vbrhk-VzwT68o,810
66
66
  gns3server/appliances/arista-ceos.gns3a,sha256=_N88hNErMaD4Wt7AcL4EfGpaohsMhvXWqFkvgcgPeiE,2316
67
- gns3server/appliances/arista-veos.gns3a,sha256=eYhEjRv3DILXEC7beXSZCdgXlo7sCyDDNtCvA_YX7EU,21384
67
+ gns3server/appliances/arista-veos.gns3a,sha256=loRhjHc9FBTYd9yVvXAlkhJUmHEBi6MPua2Cxq5h4z4,3852
68
68
  gns3server/appliances/aruba-arubaoscx.gns3a,sha256=01hM4O8Ji_-37gkIItYIcIlCpdc8CIkThxk40jZ-17U,8936
69
69
  gns3server/appliances/aruba-vgw.gns3a,sha256=r5SiuZteas6ELVyZKnZQ3HDH8KkvZv2W5XSBVApNg-0,2664
70
70
  gns3server/appliances/aruba-vmc.gns3a,sha256=OUcQEmC8F_56AjcFDlRYgv86BJD4L4bufNhJXSahId4,1884
@@ -89,9 +89,9 @@ gns3server/appliances/cisco-3640.gns3a,sha256=V1aVDoC3CJn0nOSPsA6-FIsr9TUhyjW5EU
89
89
  gns3server/appliances/cisco-3660.gns3a,sha256=Dquz2Jbh6buXpAnxg6s5MlIu_7KAypPHBrC5_vD_BXY,1087
90
90
  gns3server/appliances/cisco-3725.gns3a,sha256=H-nJfGPXbFpYrYcDIYYDGqhqDdEIK5Vt3KZaYj8SNyk,1109
91
91
  gns3server/appliances/cisco-3745.gns3a,sha256=t0EXMF5EGhFJ7EPYjrtNILYvmv-GBETiu78kKkrLP9g,1333
92
- gns3server/appliances/cisco-7200.gns3a,sha256=KsWkuAlsdvmaJCh_N-O6iYJ-RNh0TMrJTU9PkqxUkpA,2014
92
+ gns3server/appliances/cisco-7200.gns3a,sha256=ewMAXkl7DyFNEUVdGnQvGrGU7vI4yzg18IabGLuptmc,2813
93
93
  gns3server/appliances/cisco-asa.gns3a,sha256=4sd-9i6LvGFZbeE44UMe2hZlvBPIa9EdyEvVCUR56YY,3364
94
- gns3server/appliances/cisco-asav.gns3a,sha256=zxPEqGn7OlYG4r07G6Xk9pA_L0MybAQ6MiWIAM_OdZI,7901
94
+ gns3server/appliances/cisco-asav.gns3a,sha256=Hy8NSkO69wMUcIBpdneQfTDdVkAa3CrH1ytBaF_Txk0,8451
95
95
  gns3server/appliances/cisco-c8000v.gns3a,sha256=5XBHc8wxxWWsrleLwEjbEVUnC_SVJwtgJl-q3f2iKMU,4302
96
96
  gns3server/appliances/cisco-cat9k.gns3a,sha256=j7TII2wOGAnnC5Cnphd1s5yYTGuga4Vh3z7fBST20ko,2342
97
97
  gns3server/appliances/cisco-csr1000v.gns3a,sha256=ftxLK9BKSbU006mmIO13UjPVp9bDjrBLK0z1sO1hzSo,12622
@@ -104,8 +104,8 @@ gns3server/appliances/cisco-iosv.gns3a,sha256=c0KC3BWrSNaVzPkyrGHHkdLFbILcLDKmye
104
104
  gns3server/appliances/cisco-iosvl2.gns3a,sha256=40W6B4gkcA0j9j8tqODxrmAOfMHJwZ6-ejjivJxuekc,3433
105
105
  gns3server/appliances/cisco-iosxrv.gns3a,sha256=608DbTO8S53OHa-7LxQs6ACaP74isocPgvuaoCQnoWs,1957
106
106
  gns3server/appliances/cisco-iosxrv9k.gns3a,sha256=KnkkQ8-29Mnsh_GlxnjhBAp5tUSGhgxEVvsBJttgf94,6912
107
- gns3server/appliances/cisco-iou-l2.gns3a,sha256=RayCF05ykbkdjEp7BX5tDdcKaQZidmSrACgGytjHObQ,2121
108
- gns3server/appliances/cisco-iou-l3.gns3a,sha256=xfv10BoY2DcsTderTuW1M4Jn2NoFLHefoe3Kyt7yx3g,2170
107
+ gns3server/appliances/cisco-iou-l2.gns3a,sha256=4X-X747kuqFi0JCMyvDVJ2kMvv4XE2C0PvN0XGnfe7o,2490
108
+ gns3server/appliances/cisco-iou-l3.gns3a,sha256=NauCJq61HwXxK_5UMxk-YIWjEsRPethDc7XGJ9j4imM,2533
109
109
  gns3server/appliances/cisco-ise.gns3a,sha256=L4pE-_DT4PzyAcysEtv797-wMycVfmt0tceh3JAIlHw,6264
110
110
  gns3server/appliances/cisco-ngipsv.gns3a,sha256=haggzWY-W2kYY9GxX9ZAFaM46pLrb9Qz0P1t1NTPIDw,3137
111
111
  gns3server/appliances/cisco-nxosv.gns3a,sha256=uK8j6LIo7U4WFnDpy4az3fH4WgB_4uT71w8ocmGHxkM,1963
@@ -160,6 +160,8 @@ gns3server/appliances/huawei-ar1kv.gns3a,sha256=O4pNFq11tL123Wat4CO2R0A3AB_I3TfR
160
160
  gns3server/appliances/huawei-ce12800.gns3a,sha256=3vmwHdIwP6jE0hl3pFtN0eLpYj5hE4Plm9kj4766izw,1670
161
161
  gns3server/appliances/huawei-ne40e.gns3a,sha256=PM8IyxRXCIl450LSyoPCAtNJtPLe6e5BZTim2m6Vj7I,3669
162
162
  gns3server/appliances/huawei-usg6kv.gns3a,sha256=UK0gAqn8UlUQPzpwqU0uttoUbFLVTy4GZyYNMr3GirE,2357
163
+ gns3server/appliances/innovaphone-app.gns3a,sha256=tzzaLqnF_K3PhFmRRSjgbhu-WCHs9dNCS3FPVtiojXA,2645
164
+ gns3server/appliances/innovaphone-ipva.gns3a,sha256=iMEFGOTW8xS1l5L8Xha8qGI56cBR_Y_F5c48zklhHyg,3446
163
165
  gns3server/appliances/ipfire.gns3a,sha256=oOsJiAgTAQ9WMiVF6qSqFFeF-bMZHNUyZQF7EXzUyx4,7726
164
166
  gns3server/appliances/ipterm.gns3a,sha256=6FGTKH-uhZxOyFgI101twv-Y8ozD5cdk_j0nV2bdBZY,763
165
167
  gns3server/appliances/ipxe.gns3a,sha256=-bTj1C5fSFpyAeMJfxeN3YPEoKmpFtjo8NJwIMbOHa4,1705
@@ -222,7 +224,7 @@ gns3server/appliances/ovs-snmp.gns3a,sha256=df-qv6BACuNzLYiLGAV5JS_LVMLZMAHdQ-RI
222
224
  gns3server/appliances/packetfence-zen.gns3a,sha256=MvdTQ8rP-U0SwHMYmU1jyBIbIqh72wJySBf3Zi8EcR8,6488
223
225
  gns3server/appliances/pan-vm-fw.gns3a,sha256=lCcDKXG3W0R8QFbCAYvBpFEVFZQ80JiwkOpFO8gt9WQ,8933
224
226
  gns3server/appliances/parrot-os.gns3a,sha256=gh7TcG5RHAnr-RZZZzqqvb_LGyHciwt7tsNHqfr0PHk,2768
225
- gns3server/appliances/pfsense.gns3a,sha256=IOEexeiPwgxtS-mIOQoq6RdIOqLktzMcLthD5WN3xTY,5035
227
+ gns3server/appliances/pfsense.gns3a,sha256=5zADm3wUCUZi8hjGeb-bhrLJLagoz4khUK4F2DrCD_M,5544
226
228
  gns3server/appliances/proxmox-mg.gns3a,sha256=4tCaKnj9DUxwBkq5coLFI0QuqHBC31hlSjHax8CGvk0,3320
227
229
  gns3server/appliances/puppy-linux.gns3a,sha256=FyqZdUkdTv7JiNwSuMGzQ56ukGmf6428RIH2l2HL0Mw,3083
228
230
  gns3server/appliances/python-go-perl-php.gns3a,sha256=IIa_eJyzsHs35LFcjpvgKup6hVemMxDjCXQuzNsNv8I,590
@@ -350,7 +352,7 @@ gns3server/compute/dynamips/nodes/frame_relay_switch.py,sha256=HY7RXSpFQ9SfMMyPw
350
352
  gns3server/compute/dynamips/nodes/router.py,sha256=vVqFpC9VAWg4mqPLo1Vhu9jg1-HFtJDI6wFOvR6ulxE,60555
351
353
  gns3server/compute/iou/__init__.py,sha256=pgEHE_zN-N7uQc35hxOfpJxz1jHherz_BGJ-IMTVrcE,1660
352
354
  gns3server/compute/iou/iou_error.py,sha256=222QePf0Hftip6s3q7Xk2xpDLIOXjCsXTRpytrflU4Q,798
353
- gns3server/compute/iou/iou_vm.py,sha256=A3iEYcy3EQY9khqojHYrcY6kGIiGuaGSYlcGJXKVdTY,53498
355
+ gns3server/compute/iou/iou_vm.py,sha256=jRZ59D3LnjKC1zk2y1NcLWQbL0VyZWKTiT8YemuHleg,53783
354
356
  gns3server/compute/iou/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
357
  gns3server/compute/iou/utils/iou_export.py,sha256=hAscEFSunx537Itu1VgrNOKwy5uyzl2zX3Kf-b2fcGQ,7272
356
358
  gns3server/compute/iou/utils/iou_import.py,sha256=YgjCbdLF5zN2pyRKeZe7JWKRmQKs8sm10Z3KUJUQvr8,7439
@@ -386,19 +388,19 @@ gns3server/configs/ios_etherswitch_startup-config.txt,sha256=zf1QafnlBe729AsDcqL
386
388
  gns3server/configs/iou_l2_base_startup-config.txt,sha256=LYtQ1pOsmLzEg6DjObmB7PvOhMP93DZkQDFvXh1b2IU,1726
387
389
  gns3server/configs/iou_l3_base_startup-config.txt,sha256=zF3Ovq-jKZY0UpiAe8VqhlTzcA7ms1JHWY67vj5gmJQ,1495
388
390
  gns3server/configs/vpcs_base_config.txt,sha256=HsThZLGuqANwIjYrCUklQlvHQq6owMdzlXDDE2aWrBQ,199
389
- gns3server/controller/__init__.py,sha256=KVXSzVZc4-BoeGpwZ4MZnyhWHg2icXx1PzQCD4ezeOw,24614
391
+ gns3server/controller/__init__.py,sha256=Hw1Af7wEi6obaiaQtp5a3D-DejwX94kcvPCbKEpN5gA,24898
390
392
  gns3server/controller/appliance.py,sha256=xxHdtgBHFN85hxeg3kS6SLyFYDJp3llTSr0LXupByr0,2128
391
393
  gns3server/controller/appliance_manager.py,sha256=sJD7A9J1bvaLfSycvxaISCVER8AVUvFcW0EytqHqehQ,20984
392
394
  gns3server/controller/appliance_to_template.py,sha256=nM4PIbPxXqYUq7B1oyLhyGz3ZC2QAdk7qClMVTdlJQo,5224
393
- gns3server/controller/compute.py,sha256=EiTNFp904MO5yh3kAzoGmjtOf6RtQL7uvVGJGxVDobA,25468
395
+ gns3server/controller/compute.py,sha256=rvhJq5GlmBKD9a4bmaDM3rQHmhC0u-ctRaF7JvXYE1k,25469
394
396
  gns3server/controller/controller_error.py,sha256=pYW8eY3VZeBl6nSUOUQh-47pbeKfRtSwbkLiWpleHoo,2071
395
397
  gns3server/controller/drawing.py,sha256=yMN46Ev0dV-wBA4P4g0xzq-XU1qHVcKGmwriO_0GvsU,7179
396
398
  gns3server/controller/export_project.py,sha256=uN5NeMCy1ajMhrEWOli6lHsJNQCI6eRatMss4_kX8vE,12917
397
399
  gns3server/controller/import_project.py,sha256=Lz7ZT0-e_q-5vnzudyAHU4azi-IDLb1MDHZoIGekYEo,13442
398
400
  gns3server/controller/link.py,sha256=EG2iTVSZLpy-xMKCnVEWueRrR1c2MpDJFkWLaihfeM8,14205
399
- gns3server/controller/node.py,sha256=oPR0vukGgcmGoLnESjuKugmjAxBNB0ARn3n_Id8MzvI,28656
401
+ gns3server/controller/node.py,sha256=JRpKD_9crOWJyTvYObZjeV78n7OvAHfg8RjEGEp3vkg,28487
400
402
  gns3server/controller/notification.py,sha256=HXFx5dWMxNOW6vrquz8-j9UGbQGgRmvudX5-okhQPL0,4995
401
- gns3server/controller/project.py,sha256=GHpG1bnwmIbjotiUx9lqVpMlbqbFcVDBtSx8dTBitEk,46769
403
+ gns3server/controller/project.py,sha256=6dWTWx07-MG2QQ0FiDi4M49l7ns2BF1XrjZEUG2MhHU,46709
402
404
  gns3server/controller/snapshot.py,sha256=v3ai8e60i34eSPH3XyGYlol-Tm7LjDOjpI2XxPjC6VA,5150
403
405
  gns3server/controller/symbol_themes.py,sha256=2ElOc3myCkukM60xLkiKfONPPV4jGseFoEEKBotMpYk,7897
404
406
  gns3server/controller/symbols.py,sha256=3vKGTSvpMDVsT8AadxurUWHulJ4k45wj7rLHppf_-XA,6106
@@ -439,7 +441,7 @@ gns3server/db/repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
439
441
  gns3server/db/repositories/base.py,sha256=a6HZJ4mu9GVpdUCZseA65xy8nzrkN_M00WLFKYVmCzM,874
440
442
  gns3server/db/repositories/computes.py,sha256=Km00JeclL6xDZ_863keGTiU38lZ-ufQhKmiU8hvWEj8,3445
441
443
  gns3server/db/repositories/images.py,sha256=9q4iKsEybNyq2IilfTZ5HgWhJO92LuBEnQC6SueMFo8,4742
442
- gns3server/db/repositories/pools.py,sha256=kWueXAK1Ncm2NIA5gSVx5Xj6GM_a80E56_lmlKdNUaY,7566
444
+ gns3server/db/repositories/pools.py,sha256=2Iqwg1DPuEr1e47trjBtSHLPwuRP7PtxVpMUA6VyY3M,7569
443
445
  gns3server/db/repositories/rbac.py,sha256=vkWFp2OiehaETpaff_-_BHFQJZxX1wiukqmdj0rAbQk,15052
444
446
  gns3server/db/repositories/templates.py,sha256=ut-HtgblS_Sr8q1BxP0dGAXhOvpmwxK5B7N2yzj8T-E,6479
445
447
  gns3server/db/repositories/users.py,sha256=e1NCZFR8f00MvwovBwXbn0oEo8lAo1okEC01DSuJY2E,9914
@@ -451,18 +453,18 @@ gns3server/db_migrations/versions/9a5292aa4389_add_mac_address_field_in_docker_.
451
453
  gns3server/disks/OVMF.fd,sha256=-OwrYUOfa6EMWK7AyA04iz1YFPuHVflpT3AgSOfF7JQ,2097152
452
454
  gns3server/disks/OVMF_CODE.fd,sha256=qg-YobiVMx1MrrdiWlNkQrFL0PbDcK-aVT5qMnE9H8c,3653632
453
455
  gns3server/disks/OVMF_VARS.fd,sha256=XSrDgzcbQIOYrM7n7CfIwJ6lt0oN4M7qZRM4ixW-XR4,540672
454
- gns3server/disks/empty100G.qcow2,sha256=PLDeAkln8i0tJ-uHVoa6h2AU0myvAKaW0HaWdT6SQr0,198208
456
+ gns3server/disks/empty100G.qcow2,sha256=szO0OyVI4flYHU-1L1wtYDx9Q6FLcKaJ3dPjvJE-a7Q,198656
455
457
  gns3server/disks/empty10G.qcow2,sha256=I6Ht6slptJiHRIRjcWn9CN5Kfxj0OFlP7nEDI2ugANs,196768
456
458
  gns3server/disks/empty150G.qcow2,sha256=vFOkEJL4NX0InGZ1XoL53iw2UkWaTEvhRSBeTFUCfok,199008
457
459
  gns3server/disks/empty1T.qcow2,sha256=r_BqVG-qu_ZxI7dQ39jUngQG1XZzAFCiKcCUpF7UDsM,212992
458
- gns3server/disks/empty200G.qcow2,sha256=E-Xxj1Zg6mr5KdM0ItFymYrljk8nucO2ZI9bXtTsr6g,199808
460
+ gns3server/disks/empty200G.qcow2,sha256=aAiNh79kOgVQdUA8Sb-aSiE5lE0uwhfbPq4H6Ucddd4,200192
459
461
  gns3server/disks/empty20G.qcow2,sha256=aTMT09WvnXxLfxRbFBuzNC1Dm_oaRFtf_R8c3vVxZHY,196928
460
462
  gns3server/disks/empty250G.qcow2,sha256=Xk5PBfkCWLhga83vBHwH20vPUwPzWvVXsJK4qBexAP4,200608
461
- gns3server/disks/empty30G.qcow2,sha256=u58rNLrWPEirnIUpxwTEw93oBtdlOs8tznrNqgTI1VA,197088
463
+ gns3server/disks/empty30G.qcow2,sha256=jH0MvSQQRMF0MBiluNBtwIKoq0ig0Uk00paT4QV5Q8g,197120
462
464
  gns3server/disks/empty40G.qcow2,sha256=BAgrXgv4OqWc3ntbuTKNlwe7HmOJu_W8gk7SMRHLIl4,197248
463
465
  gns3server/disks/empty500G.qcow2,sha256=1bzhErVA92teI8eGanRfWNz5L_qsoXcjw8S6ogVnHkk,204608
464
466
  gns3server/disks/empty50G.qcow2,sha256=0xH2zzGoXFtZkp4sohs2f2TTxNpmuYcifZ3RIUV8oy0,197408
465
- gns3server/disks/empty8G.qcow2,sha256=A2xKq9k6cqDJjWTF95bOC9nwai5VyZpWmdkohy3igpg,196736
467
+ gns3server/disks/empty8G.qcow2,sha256=h4opruf7CAaeU_cHVc7O-hYYLEnsRfxxKKpP1zUxpR8,197120
466
468
  gns3server/gns3_server.egg-info/PKG-INFO,sha256=tyJRDvQJPe9Io7DKt8iLFENR1986XEgTIRh95qFeZmo,8496
467
469
  gns3server/gns3_server.egg-info/SOURCES.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
468
470
  gns3server/gns3_server.egg-info/dependency_links.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
@@ -472,7 +474,7 @@ gns3server/gns3_server.egg-info/requires.txt,sha256=Qe88BytcYyC7Y5VIC2C2p6uGkwsw
472
474
  gns3server/gns3_server.egg-info/top_level.txt,sha256=RDXhr8McCnZQAwpsyWA2Ob6qpksfGyfsINUHMBnHYrE,17
473
475
  gns3server/schemas/__init__.py,sha256=CRQ-F1ECLygbNG7507CLDy61T24MaelgofgOERwnVLA,4595
474
476
  gns3server/schemas/common.py,sha256=Ey3u-2qJtla421XA9pAas0fl5S-jyB2aBH-JR-pIyC4,1630
475
- gns3server/schemas/config.py,sha256=SJRruKmAJ0fuDG9v1y-LpiwQBJklBwUoFJN4HsMZTEA,6791
477
+ gns3server/schemas/config.py,sha256=ijOqQgdR_5SXgV51rifub7vxFhPrbyKyJs_TRe1pBzI,6769
476
478
  gns3server/schemas/link.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
477
479
  gns3server/schemas/qemu_disk_image.py,sha256=8v5WTPugneV-o6zD4WC1ydx3rqNAq_PmqIUMbGauGI0,2850
478
480
  gns3server/schemas/version.py,sha256=j-AF7nqpSWONh24wnJV5ksY5dkLQftrxpTW_q5ONJvQ,1029
@@ -526,6 +528,10 @@ gns3server/services/authentication.py,sha256=jOIrJW4VMaAf_0zz-1TCyN35sJ2ekDbjRhK
526
528
  gns3server/services/computes.py,sha256=ZcHb7HXxdVjtV0N0ggxOkvDL7mFpemisXLwXMrNNmpQ,3411
527
529
  gns3server/services/templates.py,sha256=w_8grcTPVMXFWGqF40aBQ2OeXK5WDd-yQ4OD6q9jKIg,14211
528
530
  gns3server/static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
531
+ gns3server/static/favicon.ico,sha256=FXPutWm5O1TQ2lJKKCRD5PWoF6oKrx5ANf28LOTWQO0,15086
532
+ gns3server/static/redoc.standalone.js,sha256=77kGx7mVN9EcdER2ZM4gQ-E-ra_N6AZq9QseAeD6kt0,1042008
533
+ gns3server/static/swagger-ui-bundle.js,sha256=xQuUu8TwI5Qyb7eu0fT7aTs2d_Sz0zRODWExgIy_KB8,1426050
534
+ gns3server/static/swagger-ui.css,sha256=jzPZlgJTFwSdSphk9CHqsrKiR4cvOIAm-pTGVJEyWec,152072
529
535
  gns3server/static/web-ui/3rdpartylicenses.txt,sha256=sSjcTMHISiaRrJTrJ8j9YnEq3wX0iGQOoYjvrjW7Oss,129318
530
536
  gns3server/static/web-ui/465.92c7ab880f2504d3.js,sha256=66TyTl_8pCOnZTB2nJZQLFkhuf91y3nPE9eW-BY-yRM,14038
531
537
  gns3server/static/web-ui/MaterialIcons-Regular.196fa4a92dd6fa73.ttf,sha256=t_Sjq1YgSPKN0fppFgG8QzY6YdD4dtFtgxbFLk8y1pY,128180
@@ -554,8 +560,8 @@ gns3server/static/web-ui/NotoSans-Regular.bb384defbe36eaec.svg,sha256=uECuQtpAPz
554
560
  gns3server/static/web-ui/NotoSans-Regular.e6139cb1663a1c57.ttf,sha256=NPyxxROGVf4PlLBl3aiZC8bvHIpeR0bbt37H7hWtNGI,512588
555
561
  gns3server/static/web-ui/ReleaseNotes.txt,sha256=uag7ABM-yXleLBxhtetbpVOCssZPXcd_lLMyUAdQsn4,5527
556
562
  gns3server/static/web-ui/favicon.ico,sha256=ucy7cQDhOulawYo6ntAIV_MhtjtJjx-3q6tQb8HEDpk,5430
557
- gns3server/static/web-ui/index.html,sha256=b8RzdsWVadah1PxiGgUI6weGsvg2idT4Rt9rnwdPQDk,11546
558
- gns3server/static/web-ui/main.ed82697b58d803e7.js,sha256=pH_KdzCd5IPcq0xT5l7O5tB_QK2ePLEnqKe3W6rhBJs,4319498
563
+ gns3server/static/web-ui/index.html,sha256=Y5NmkKO3FodIF5PNfMyqjTzLoULkxbj0C9Xkt76k1zA,11546
564
+ gns3server/static/web-ui/main.e55eeff5c0ba1cf4.js,sha256=TVRGMvBf99gE94FKPiDNYJ7acMu7nBFZXUSCAsx510k,4320056
559
565
  gns3server/static/web-ui/polyfills.319c79dd175e50d0.js,sha256=sQPX0SyLyUHk_0gvODKsdL3-lQsQ_whJeMgxx6tO04A,38362
560
566
  gns3server/static/web-ui/roboto-latin-100.539f0a96b40596f7.woff2,sha256=EoI9WFYFI4EhVUr_i7BgojXcNvN-_Z-x5-bqGpYivDU,15808
561
567
  gns3server/static/web-ui/roboto-latin-100.5ba994dac3e79ea8.woff,sha256=xOrU3p96_yN9BrUw6thBPRNXQn9qkllENCu04rHc5tA,20368
@@ -1219,7 +1225,7 @@ gns3server/utils/file_watcher.py,sha256=CF-5dB-RVSj8xuVxJ9siSpf3QOnXpw3n2IkjCzRg
1219
1225
  gns3server/utils/get_resource.py,sha256=WWW4mejsye6Tpw5UmIT6drfcUDqs-YhLxSlQaNboRDg,1534
1220
1226
  gns3server/utils/hostname.py,sha256=XUswUi47n-LfUbMiZ5AOs_Crl6lln606nhttEaJanpA,3342
1221
1227
  gns3server/utils/http_client.py,sha256=MD-yZA2VjQonqOlPiU4SXo9AjQWDYFFP0ZeZzz680EI,2318
1222
- gns3server/utils/images.py,sha256=CvjFDqbILuVdbLe9VpO6UevPaXWuD7OjsUMhYAo3LWc,14026
1228
+ gns3server/utils/images.py,sha256=Jm-mCUSKwsXP1yWKjSwWOye0_473b0eSbWE0jGHOT8U,14439
1223
1229
  gns3server/utils/interfaces.py,sha256=DwsZXwPxmc5E-QwquzMqAfQRLrrt-GyYUjUDxFKqEZo,8981
1224
1230
  gns3server/utils/notification_queue.py,sha256=EO2vHr_Lkxiq9NP-6u6eDsVvFNKbe-QSZqHADU-Ynss,2688
1225
1231
  gns3server/utils/path.py,sha256=m4kj9NoFMLQfMAEG1HJ97x-zAdw0bxq-14tCwaIOSKc,2348
@@ -1237,9 +1243,9 @@ gns3server/utils/asyncio/telnet_server.py,sha256=dteUIryUX25iRr5-dMkdBYSTNZQZfLK
1237
1243
  gns3server/utils/zipfile_zstd/__init__.py,sha256=QXfnwyxx_CDJdAgOzqqBAD_7WDudc9VN03U0Gfccr5I,163
1238
1244
  gns3server/utils/zipfile_zstd/_patcher.py,sha256=RCMj1y8OrIJheEGnuERDH0l2hvLaFl5wa_IZNiTpBbU,380
1239
1245
  gns3server/utils/zipfile_zstd/_zipfile.py,sha256=KvAeNmWZHu2LHuUOZ8_Tnu_dRi3NOIWM6I3hg_c7NsQ,2189
1240
- gns3_server-3.0.0rc2.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
1241
- gns3_server-3.0.0rc2.dist-info/METADATA,sha256=USg6Gz5t50xHP5_Ea9vquRRmjP-hWC91P0FJDL04eus,48267
1242
- gns3_server-3.0.0rc2.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
1243
- gns3_server-3.0.0rc2.dist-info/entry_points.txt,sha256=kgHc6rA0RfDOTAkTDSwgWXKHWG4r5mQ-SsmpCHNgXPI,92
1244
- gns3_server-3.0.0rc2.dist-info/top_level.txt,sha256=GvKJnXIKLBmewtHjQXkvmtz79ZW51IsfCoPMbHoWehQ,11
1245
- gns3_server-3.0.0rc2.dist-info/RECORD,,
1246
+ gns3_server-3.0.1.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
1247
+ gns3_server-3.0.1.dist-info/METADATA,sha256=zaBKSX0ONVpKe4Ltl86liwChiiZ6ilUlYVSCcyREMLA,48284
1248
+ gns3_server-3.0.1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
1249
+ gns3_server-3.0.1.dist-info/entry_points.txt,sha256=kgHc6rA0RfDOTAkTDSwgWXKHWG4r5mQ-SsmpCHNgXPI,92
1250
+ gns3_server-3.0.1.dist-info/top_level.txt,sha256=GvKJnXIKLBmewtHjQXkvmtz79ZW51IsfCoPMbHoWehQ,11
1251
+ gns3_server-3.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -426,26 +426,42 @@ async def import_project(
426
426
  status_code=status.HTTP_201_CREATED,
427
427
  response_model=schemas.Project,
428
428
  responses={**responses, 409: {"model": schemas.ErrorMessage, "description": "Could not duplicate project"}},
429
- dependencies=[Depends(has_privilege("Project.Allocate"))]
429
+ dependencies=[Depends(has_privilege("Project.Audit"))]
430
430
  )
431
431
  async def duplicate_project(
432
432
  project_data: schemas.ProjectDuplicate,
433
433
  project: Project = Depends(dep_project),
434
+ current_user: schemas.User = Depends(get_current_active_user),
435
+ rbac_repo: RbacRepository = Depends(get_repository(RbacRepository)),
434
436
  pools_repo: ResourcePoolsRepository = Depends(get_repository(ResourcePoolsRepository))
435
437
  ) -> schemas.Project:
436
438
  """
437
439
  Duplicate a project.
438
440
 
439
- Required privilege: Project.Allocate
441
+ Required privilege: Project.Audit
440
442
  """
441
443
 
444
+ pool_memberships = await pools_repo.get_resource_memberships(project.id)
445
+
446
+ # check if the project can be duplicated somewhere (either in a pool or in the root)
447
+ if not current_user.is_superadmin:
448
+ can_be_duplicated_somewhere = False
449
+ if pool_memberships:
450
+ for pool in pool_memberships:
451
+ if await rbac_repo.check_user_has_privilege(current_user.user_id, f"/pools/{pool.resource_pool_id}", "Project.Allocate"):
452
+ can_be_duplicated_somewhere = True
453
+ break
454
+
455
+ if not can_be_duplicated_somewhere and not await rbac_repo.check_user_has_privilege(current_user.user_id, "/projects", "Project.Allocate"):
456
+ log.warning(f"Project {project.name} cannot be duplicated anywhere")
457
+ raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
458
+
442
459
  reset_mac_addresses = project_data.reset_mac_addresses
443
460
  new_project = await project.duplicate(
444
461
  name=project_data.name, reset_mac_addresses=reset_mac_addresses
445
462
  )
446
463
 
447
- # Add the new project in the same resource pools if the duplicated project is in any
448
- pool_memberships = await pools_repo.get_resource_memberships(project.id)
464
+ # Add the new project in the same resource pools if the duplicated project belongs to any
449
465
  if pool_memberships:
450
466
  resource_create = schemas.ResourceCreate(resource_id=new_project.id, resource_type="project", name=new_project.name)
451
467
  resource = await pools_repo.create_resource(resource_create)
@@ -27,20 +27,20 @@ router = APIRouter()
27
27
  templates = Jinja2Templates(directory=os.path.join("gns3server", "templates"))
28
28
 
29
29
 
30
- @router.get("/")
30
+ @router.get("/", include_in_schema=False)
31
31
  async def root():
32
32
 
33
33
  return RedirectResponse("/static/web-ui/bundled", status_code=308) # permanent redirect
34
34
 
35
35
 
36
- @router.get("/debug", response_class=HTMLResponse, deprecated=True)
36
+ @router.get("/debug", response_class=HTMLResponse, deprecated=True, include_in_schema=False)
37
37
  def debug(request: Request):
38
38
 
39
39
  kwargs = {"request": request, "gns3_version": __version__, "gns3_host": request.client.host}
40
40
  return templates.TemplateResponse("index.html", kwargs)
41
41
 
42
42
 
43
- @router.get("/static/web-ui/{file_path:path}", description="Web user interface")
43
+ @router.get("/static/web-ui/{file_path:path}", description="Web user interface", include_in_schema=False)
44
44
  async def web_ui(file_path: str):
45
45
 
46
46
  file_path = os.path.normpath(file_path).strip("/")
gns3server/api/server.py CHANGED
@@ -19,15 +19,20 @@
19
19
  FastAPI app
20
20
  """
21
21
 
22
- import time
23
-
24
22
  from fastapi import FastAPI, Request, HTTPException, status
25
23
  from fastapi.middleware.cors import CORSMiddleware
26
24
  from fastapi.responses import JSONResponse
27
25
  from fastapi.exceptions import RequestValidationError
26
+ from fastapi.staticfiles import StaticFiles
28
27
  from sqlalchemy.exc import SQLAlchemyError
29
28
  from uvicorn.main import Server as UvicornServer
30
29
 
30
+ from fastapi.openapi.docs import (
31
+ get_redoc_html,
32
+ get_swagger_ui_html,
33
+ get_swagger_ui_oauth2_redirect_html,
34
+ )
35
+
31
36
  from gns3server.controller.controller_error import (
32
37
  ControllerError,
33
38
  ControllerNotFoundError,
@@ -51,7 +56,11 @@ log = logging.getLogger(__name__)
51
56
  def get_application() -> FastAPI:
52
57
 
53
58
  application = FastAPI(
54
- title="GNS3 controller API", description="This page describes the public controller API for GNS3", version="v3"
59
+ title="GNS3 controller API",
60
+ description="This page describes the public controller API for GNS3",
61
+ version="v3",
62
+ docs_url=None,
63
+ redoc_url=None
55
64
  )
56
65
 
57
66
  application.add_middleware(
@@ -66,6 +75,7 @@ def get_application() -> FastAPI:
66
75
  application.add_event_handler("shutdown", tasks.create_shutdown_handler(application))
67
76
  application.include_router(index.router, tags=["Index"])
68
77
  application.include_router(controller.router, prefix="/v3")
78
+ application.mount("/static", StaticFiles(packages=[('gns3server', 'static')]), name="static")
69
79
  application.mount("/v3/compute", compute_api, name="compute")
70
80
 
71
81
  return application
@@ -85,6 +95,31 @@ def handle_exit(*args, **kwargs):
85
95
 
86
96
  UvicornServer.handle_exit = handle_exit
87
97
 
98
+ # Configure self-hosting JavaScript and CSS for docs
99
+ @app.get("/docs", include_in_schema=False)
100
+ async def custom_swagger_ui_html():
101
+ return get_swagger_ui_html(
102
+ openapi_url=app.openapi_url,
103
+ title=app.title + " - Swagger UI",
104
+ oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
105
+ swagger_js_url="/static/swagger-ui-bundle.js",
106
+ swagger_css_url="/static/swagger-ui.css",
107
+ swagger_favicon_url="/static/favicon.ico"
108
+ )
109
+
110
+ @app.get(app.swagger_ui_oauth2_redirect_url, include_in_schema=False)
111
+ async def swagger_ui_redirect():
112
+ return get_swagger_ui_oauth2_redirect_html()
113
+
114
+
115
+ @app.get("/redoc", include_in_schema=False)
116
+ async def redoc_html():
117
+ return get_redoc_html(
118
+ openapi_url=app.openapi_url,
119
+ title=app.title + " - ReDoc",
120
+ redoc_js_url="/static/redoc.standalone.js",
121
+ redoc_favicon_url="/static/favicon.ico"
122
+ )
88
123
 
89
124
  @app.exception_handler(ControllerError)
90
125
  async def controller_error_handler(request: Request, exc: ControllerError):