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.
- {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/METADATA +3 -3
- {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/RECORD +37 -31
- {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/WHEEL +1 -1
- gns3server/api/routes/controller/projects.py +20 -4
- gns3server/api/routes/index.py +3 -3
- gns3server/api/server.py +38 -3
- gns3server/appliances/arista-veos.gns3a +20 -514
- gns3server/appliances/cisco-7200.gns3a +26 -0
- gns3server/appliances/cisco-asav.gns3a +14 -1
- gns3server/appliances/cisco-iou-l2.gns3a +16 -4
- gns3server/appliances/cisco-iou-l3.gns3a +16 -4
- gns3server/appliances/innovaphone-app.gns3a +50 -0
- gns3server/appliances/innovaphone-ipva.gns3a +78 -0
- gns3server/appliances/pfsense.gns3a +14 -0
- gns3server/compute/iou/iou_vm.py +22 -12
- gns3server/controller/__init__.py +22 -21
- gns3server/controller/compute.py +1 -1
- gns3server/controller/node.py +2 -6
- gns3server/controller/project.py +1 -2
- gns3server/crash_report.py +1 -1
- gns3server/db/repositories/pools.py +1 -1
- gns3server/disks/empty100G.qcow2 +0 -0
- gns3server/disks/empty200G.qcow2 +0 -0
- gns3server/disks/empty30G.qcow2 +0 -0
- gns3server/disks/empty8G.qcow2 +0 -0
- gns3server/schemas/config.py +1 -1
- gns3server/static/favicon.ico +0 -0
- gns3server/static/redoc.standalone.js +1782 -0
- gns3server/static/swagger-ui-bundle.js +2 -0
- gns3server/static/swagger-ui.css +3 -0
- gns3server/static/web-ui/index.html +1 -1
- gns3server/static/web-ui/{main.ed82697b58d803e7.js → main.e55eeff5c0ba1cf4.js} +1 -1
- gns3server/utils/images.py +45 -35
- gns3server/version.py +2 -2
- {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/LICENSE +0 -0
- {gns3_server-3.0.0rc2.dist-info → gns3_server-3.0.1.dist-info}/entry_points.txt +0 -0
- {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.
|
|
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:
|
|
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:
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
108
|
-
gns3server/appliances/cisco-iou-l3.gns3a,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
558
|
-
gns3server/static/web-ui/main.
|
|
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=
|
|
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.
|
|
1241
|
-
gns3_server-3.0.
|
|
1242
|
-
gns3_server-3.0.
|
|
1243
|
-
gns3_server-3.0.
|
|
1244
|
-
gns3_server-3.0.
|
|
1245
|
-
gns3_server-3.0.
|
|
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,,
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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)
|
gns3server/api/routes/index.py
CHANGED
|
@@ -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",
|
|
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):
|