mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-01 04:38:12 +00:00
Add symbol dimensions endpoint and SSL support for packet capture with remote HTTPS server.
This commit is contained in:
parent
802959f9ab
commit
fa4c9a91ca
@ -57,6 +57,22 @@ async def get_symbol(symbol_id: str):
|
|||||||
return ControllerNotFoundError("Could not get symbol file: {}".format(e))
|
return ControllerNotFoundError("Could not get symbol file: {}".format(e))
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{symbol_id:path}/dimensions",
|
||||||
|
responses={404: {"model": schemas.ErrorMessage, "description": "Could not find symbol"}})
|
||||||
|
async def get_symbol_dimensions(symbol_id: str):
|
||||||
|
"""
|
||||||
|
Get a symbol dimensions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
controller = Controller.instance()
|
||||||
|
try:
|
||||||
|
width, height, _ = controller.symbols.get_size(symbol_id)
|
||||||
|
symbol_dimensions = {'width': width, 'height': height}
|
||||||
|
return symbol_dimensions
|
||||||
|
except (KeyError, OSError, ValueError) as e:
|
||||||
|
return ControllerNotFoundError("Could not get symbol file: {}".format(e))
|
||||||
|
|
||||||
|
|
||||||
@router.post("/{symbol_id:path}/raw",
|
@router.post("/{symbol_id:path}/raw",
|
||||||
status_code=status.HTTP_204_NO_CONTENT)
|
status_code=status.HTTP_204_NO_CONTENT)
|
||||||
async def upload_symbol(symbol_id: str, request: Request):
|
async def upload_symbol(symbol_id: str, request: Request):
|
||||||
|
@ -51,6 +51,7 @@ class Controller:
|
|||||||
|
|
||||||
self._computes = {}
|
self._computes = {}
|
||||||
self._projects = {}
|
self._projects = {}
|
||||||
|
self._ssl_context = None
|
||||||
self._notification = Notification(self)
|
self._notification = Notification(self)
|
||||||
self.gns3vm = GNS3VM(self)
|
self.gns3vm = GNS3VM(self)
|
||||||
self.symbols = Symbols()
|
self.symbols = Symbols()
|
||||||
@ -82,15 +83,14 @@ class Controller:
|
|||||||
|
|
||||||
self._load_controller_settings()
|
self._load_controller_settings()
|
||||||
|
|
||||||
ssl_context = None
|
|
||||||
if server_config.getboolean("ssl"):
|
if server_config.getboolean("ssl"):
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
log.critical("SSL mode is not supported on Windows")
|
log.critical("SSL mode is not supported on Windows")
|
||||||
raise SystemExit
|
raise SystemExit
|
||||||
ssl_context = self._create_ssl_context(server_config)
|
self._ssl_context = self._create_ssl_context(server_config)
|
||||||
|
|
||||||
protocol = server_config.get("protocol", "http")
|
protocol = server_config.get("protocol", "http")
|
||||||
if ssl_context and protocol != "https":
|
if self._ssl_context and protocol != "https":
|
||||||
log.warning("Protocol changed to 'https' for local compute because SSL is enabled".format(port))
|
log.warning("Protocol changed to 'https' for local compute because SSL is enabled".format(port))
|
||||||
protocol = "https"
|
protocol = "https"
|
||||||
try:
|
try:
|
||||||
@ -104,7 +104,7 @@ class Controller:
|
|||||||
password=server_config.get("password", ""),
|
password=server_config.get("password", ""),
|
||||||
force=True,
|
force=True,
|
||||||
connect=True,
|
connect=True,
|
||||||
ssl_context=ssl_context)
|
ssl_context=self._ssl_context)
|
||||||
except ControllerError:
|
except ControllerError:
|
||||||
log.fatal("Cannot access to the local server, make sure something else is not running on the TCP port {}".format(port))
|
log.fatal("Cannot access to the local server, make sure something else is not running on the TCP port {}".format(port))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@ -140,6 +140,13 @@ class Controller:
|
|||||||
raise SystemExit
|
raise SystemExit
|
||||||
return ssl_context
|
return ssl_context
|
||||||
|
|
||||||
|
def ssl_context(self):
|
||||||
|
"""
|
||||||
|
Returns the SSL context for the server.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._ssl_context
|
||||||
|
|
||||||
def _update_config(self):
|
def _update_config(self):
|
||||||
"""
|
"""
|
||||||
Call this when the server configuration file changes.
|
Call this when the server configuration file changes.
|
||||||
|
@ -30,9 +30,10 @@ class HTTPClient:
|
|||||||
_aiohttp_client: aiohttp.ClientSession = None
|
_aiohttp_client: aiohttp.ClientSession = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_client(cls) -> aiohttp.ClientSession:
|
def get_client(cls, ssl_context=None) -> aiohttp.ClientSession:
|
||||||
if cls._aiohttp_client is None:
|
if cls._aiohttp_client is None:
|
||||||
cls._aiohttp_client = aiohttp.ClientSession(connector=aiohttp.TCPConnector(family=socket.AF_INET))
|
connector = aiohttp.TCPConnector(family=socket.AF_INET, ssl_context=ssl_context)
|
||||||
|
cls._aiohttp_client = aiohttp.ClientSession(connector=connector)
|
||||||
return cls._aiohttp_client
|
return cls._aiohttp_client
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -42,9 +43,9 @@ class HTTPClient:
|
|||||||
cls._aiohttp_client = None
|
cls._aiohttp_client = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def request(cls, method: str, url: str, user: str = None, password: str = None, **kwargs):
|
def request(cls, method: str, url: str, user: str = None, password: str = None, ssl_context=None, **kwargs):
|
||||||
|
|
||||||
client = cls.get_client()
|
client = cls.get_client(ssl_context=ssl_context)
|
||||||
basic_auth = None
|
basic_auth = None
|
||||||
if user:
|
if user:
|
||||||
if not password:
|
if not password:
|
||||||
|
Loading…
Reference in New Issue
Block a user