From 78c693ff63f926f3bea4de778890a9c8df8e8cc4 Mon Sep 17 00:00:00 2001 From: ziajka Date: Tue, 6 Nov 2018 13:31:14 +0100 Subject: [PATCH 1/3] Disable CORS cache, Fixes: #1445 --- gns3server/web/web_server.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gns3server/web/web_server.py b/gns3server/web/web_server.py index 7e8b56b7..3fb3fdec 100644 --- a/gns3server/web/web_server.py +++ b/gns3server/web/web_server.py @@ -261,15 +261,19 @@ class WebServer: # Background task started with the server self._app.on_startup.append(self._on_startup) + resource_options = aiohttp_cors.ResourceOptions( + expose_headers="*", allow_headers="*", max_age=0 + ) + # Allow CORS for this domains cors = aiohttp_cors.setup(self._app, defaults={ # Default web server for web gui dev - "http://127.0.0.1:8080": aiohttp_cors.ResourceOptions(expose_headers="*", allow_headers="*"), - "http://localhost:8080": aiohttp_cors.ResourceOptions(expose_headers="*", allow_headers="*"), - "http://127.0.0.1:4200": aiohttp_cors.ResourceOptions(expose_headers="*", allow_headers="*"), - "http://localhost:4200": aiohttp_cors.ResourceOptions(expose_headers="*", allow_headers="*"), - "http://gns3.github.io": aiohttp_cors.ResourceOptions(expose_headers="*", allow_headers="*"), - "https://gns3.github.io": aiohttp_cors.ResourceOptions(expose_headers="*", allow_headers="*") + "http://127.0.0.1:8080": resource_options, + "http://localhost:8080": resource_options, + "http://127.0.0.1:4200": resource_options, + "http://localhost:4200": resource_options, + "http://gns3.github.io": resource_options, + "https://gns3.github.io": resource_options }) PortManager.instance().console_host = self._host From 249b2255f63e36da25598e7ec41f3f14d92ea362 Mon Sep 17 00:00:00 2001 From: ziajka Date: Tue, 6 Nov 2018 13:37:03 +0100 Subject: [PATCH 2/3] Fix CORS response on node deletion, Fixes: #1446 --- .../handlers/api/controller/node_handler.py | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/gns3server/handlers/api/controller/node_handler.py b/gns3server/handlers/api/controller/node_handler.py index e2a394d5..075eda96 100644 --- a/gns3server/handlers/api/controller/node_handler.py +++ b/gns3server/handlers/api/controller/node_handler.py @@ -108,6 +108,23 @@ class NodeHandler: response.set_status(200) response.json(node) + @Route.delete( + r"/projects/{project_id}/nodes/{node_id}", + parameters={ + "project_id": "Project UUID", + "node_id": "Node UUID" + }, + status_codes={ + 204: "Instance deleted", + 400: "Invalid request", + 404: "Instance doesn't exist" + }, + description="Delete a node instance") + async def delete(request, response): + project = await Controller.instance().get_loaded_project(request.match_info["project_id"]) + await project.delete_node(request.match_info["node_id"]) + response.set_status(204) + @Route.post( r"/projects/{project_id}/nodes/start", parameters={ @@ -291,23 +308,6 @@ class NodeHandler: response.json(node) response.set_status(200) - @Route.delete( - r"/projects/{project_id}/nodes/{node_id}", - parameters={ - "project_id": "Project UUID", - "node_id": "Node UUID" - }, - status_codes={ - 204: "Instance deleted", - 400: "Invalid request", - 404: "Instance doesn't exist" - }, - description="Delete a node instance") - async def delete(request, response): - project = await Controller.instance().get_loaded_project(request.match_info["project_id"]) - await project.delete_node(request.match_info["node_id"]) - response.set_status(204) - @Route.get( r"/projects/{project_id}/nodes/{node_id}/links", parameters={ From 41fbbf7a565831f6dbd04209c75bf2573f82a14e Mon Sep 17 00:00:00 2001 From: ziajka Date: Thu, 8 Nov 2018 11:47:09 +0100 Subject: [PATCH 3/3] Reorder routes in order to get working CORS --- .../api/controller/project_handler.py | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/gns3server/handlers/api/controller/project_handler.py b/gns3server/handlers/api/controller/project_handler.py index eaf26900..ea22a00b 100644 --- a/gns3server/handlers/api/controller/project_handler.py +++ b/gns3server/handlers/api/controller/project_handler.py @@ -92,21 +92,6 @@ class ProjectHandler: project = controller.get_project(request.match_info["project_id"]) response.json(project) - @Route.get( - r"/projects/{project_id}/stats", - description="Get a project statistics", - parameters={ - "project_id": "Project UUID", - }, - status_codes={ - 200: "Project statistics returned", - 404: "The project doesn't exist" - }) - def get(request, response): - controller = Controller.instance() - project = controller.get_project(request.match_info["project_id"]) - response.json(project.stats()) - @Route.put( r"/projects/{project_id}", status_codes={ @@ -127,6 +112,39 @@ class ProjectHandler: response.set_status(200) response.json(project) + @Route.delete( + r"/projects/{project_id}", + description="Delete a project from disk", + parameters={ + "project_id": "Project UUID", + }, + status_codes={ + 204: "Changes have been written on disk", + 404: "The project doesn't exist" + }) + async def delete(request, response): + + controller = Controller.instance() + project = controller.get_project(request.match_info["project_id"]) + await project.delete() + controller.remove_project(project) + response.set_status(204) + + @Route.get( + r"/projects/{project_id}/stats", + description="Get a project statistics", + parameters={ + "project_id": "Project UUID", + }, + status_codes={ + 200: "Project statistics returned", + 404: "The project doesn't exist" + }) + def get(request, response): + controller = Controller.instance() + project = controller.get_project(request.match_info["project_id"]) + response.json(project.stats()) + @Route.post( r"/projects/{project_id}/close", description="Close a project", @@ -189,24 +207,6 @@ class ProjectHandler: response.set_status(201) response.json(project) - @Route.delete( - r"/projects/{project_id}", - description="Delete a project from disk", - parameters={ - "project_id": "Project UUID", - }, - status_codes={ - 204: "Changes have been written on disk", - 404: "The project doesn't exist" - }) - async def delete(request, response): - - controller = Controller.instance() - project = controller.get_project(request.match_info["project_id"]) - await project.delete() - controller.remove_project(project) - response.set_status(204) - @Route.get( r"/projects/{project_id}/notifications", description="Receive notifications about projects",