mirror of
https://github.com/GNS3/gns3-server
synced 2025-01-13 01:20:58 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
5a32d8a779
@ -1499,6 +1499,9 @@ class Router(BaseVM):
|
|||||||
module_workdir = self.project.module_working_directory(self.manager.module_name.lower())
|
module_workdir = self.project.module_working_directory(self.manager.module_name.lower())
|
||||||
startup_config_base64, private_config_base64 = yield from self.extract_config()
|
startup_config_base64, private_config_base64 = yield from self.extract_config()
|
||||||
if startup_config_base64:
|
if startup_config_base64:
|
||||||
|
if not self.startup_config:
|
||||||
|
self._startup_config = os.path.join("configs", "i{}_startup-config.cfg".format(self._dynamips_id))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
config = base64.b64decode(startup_config_base64).decode("utf-8", errors="replace")
|
config = base64.b64decode(startup_config_base64).decode("utf-8", errors="replace")
|
||||||
config = "!\n" + config.replace("\r", "")
|
config = "!\n" + config.replace("\r", "")
|
||||||
@ -1510,6 +1513,9 @@ class Router(BaseVM):
|
|||||||
raise DynamipsError("Could not save the startup configuration {}: {}".format(config_path, e))
|
raise DynamipsError("Could not save the startup configuration {}: {}".format(config_path, e))
|
||||||
|
|
||||||
if private_config_base64:
|
if private_config_base64:
|
||||||
|
if not self.private_config:
|
||||||
|
self._private_config = os.path.join("configs", "i{}_private-config.cfg".format(self._dynamips_id))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
config = base64.b64decode(private_config_base64).decode("utf-8", errors="replace")
|
config = base64.b64decode(private_config_base64).decode("utf-8", errors="replace")
|
||||||
config = "!\n" + config.replace("\r", "")
|
config = "!\n" + config.replace("\r", "")
|
||||||
|
@ -168,7 +168,7 @@ class VirtualBox(BaseManager):
|
|||||||
vms = []
|
vms = []
|
||||||
result = yield from self.execute("list", ["vms"])
|
result = yield from self.execute("list", ["vms"])
|
||||||
for line in result:
|
for line in result:
|
||||||
if line[0] != '"' or line[-1:] != "}":
|
if len(line) == 0 or line[0] != '"' or line[-1:] != "}":
|
||||||
continue # Broken output (perhaps a carriage return in VM name
|
continue # Broken output (perhaps a carriage return in VM name
|
||||||
vmname, _ = line.rsplit(' ', 1)
|
vmname, _ = line.rsplit(' ', 1)
|
||||||
vmname = vmname.strip('"')
|
vmname = vmname.strip('"')
|
||||||
|
@ -83,6 +83,28 @@ class Route(object):
|
|||||||
def delete(cls, path, *args, **kw):
|
def delete(cls, path, *args, **kw):
|
||||||
return cls._route('DELETE', path, *args, **kw)
|
return cls._route('DELETE', path, *args, **kw)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def authenticate(cls, request, route, server_config):
|
||||||
|
"""
|
||||||
|
Ask user for authentication
|
||||||
|
|
||||||
|
:returns: Response if you need to auth the user otherwise None
|
||||||
|
"""
|
||||||
|
user = server_config.get("user", "").strip()
|
||||||
|
password = server_config.get("password", "").strip()
|
||||||
|
|
||||||
|
if len(user) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
if "AUTHORIZATION" in request.headers:
|
||||||
|
if request.headers["AUTHORIZATION"] == aiohttp.helpers.BasicAuth(user, password).encode():
|
||||||
|
return
|
||||||
|
|
||||||
|
response = Response(request=request, route=route)
|
||||||
|
response.set_status(401)
|
||||||
|
response.headers["WWW-Authenticate"] = 'Basic realm="GNS3 server"'
|
||||||
|
return response
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _route(cls, method, path, *args, **kw):
|
def _route(cls, method, path, *args, **kw):
|
||||||
# This block is executed only the first time
|
# This block is executed only the first time
|
||||||
@ -118,6 +140,13 @@ class Route(object):
|
|||||||
def control_schema(request):
|
def control_schema(request):
|
||||||
# This block is executed at each method call
|
# This block is executed at each method call
|
||||||
|
|
||||||
|
server_config = Config.instance().get_section_config("Server")
|
||||||
|
|
||||||
|
# Authenticate
|
||||||
|
response = cls.authenticate(request, route, server_config)
|
||||||
|
if response:
|
||||||
|
return response
|
||||||
|
|
||||||
# Non API call
|
# Non API call
|
||||||
if api_version is None:
|
if api_version is None:
|
||||||
response = Response(request=request, route=route, output_schema=output_schema)
|
response = Response(request=request, route=route, output_schema=output_schema)
|
||||||
@ -127,7 +156,6 @@ class Route(object):
|
|||||||
# API call
|
# API call
|
||||||
try:
|
try:
|
||||||
request = yield from parse_request(request, input_schema)
|
request = yield from parse_request(request, input_schema)
|
||||||
server_config = Config.instance().get_section_config("Server")
|
|
||||||
record_file = server_config.get("record")
|
record_file = server_config.get("record")
|
||||||
if record_file:
|
if record_file:
|
||||||
try:
|
try:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
netifaces==0.10.4
|
gns3-netifaces==0.10.4.1
|
||||||
jsonschema==2.4.0
|
jsonschema==2.4.0
|
||||||
aiohttp==0.14.4
|
aiohttp==0.14.4
|
||||||
Jinja2==2.7.3
|
Jinja2==2.7.3
|
||||||
|
3
setup.py
3
setup.py
@ -34,7 +34,8 @@ class PyTest(TestCommand):
|
|||||||
sys.exit(errcode)
|
sys.exit(errcode)
|
||||||
|
|
||||||
|
|
||||||
dependencies = ["aiohttp>=0.14.4",
|
dependencies = ["gns3-netifaces>=0.10.4.1",
|
||||||
|
"aiohttp>=0.14.4",
|
||||||
"jsonschema>=2.4.0",
|
"jsonschema>=2.4.0",
|
||||||
"Jinja2>=2.7.3",
|
"Jinja2>=2.7.3",
|
||||||
"raven>=5.2.0"]
|
"raven>=5.2.0"]
|
||||||
|
@ -75,9 +75,9 @@ def test_get_list(manager, loop):
|
|||||||
vm_list = ['"Windows 8.1" {27b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}',
|
vm_list = ['"Windows 8.1" {27b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}',
|
||||||
'"Carriage',
|
'"Carriage',
|
||||||
'Return" {27b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}',
|
'Return" {27b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}',
|
||||||
|
'',
|
||||||
'"<inaccessible>" {42b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}',
|
'"<inaccessible>" {42b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}',
|
||||||
'"Linux Microcore 4.7.1" {ccd8c50b-c172-457d-99fa-dd69371ede0e}'
|
'"Linux Microcore 4.7.1" {ccd8c50b-c172-457d-99fa-dd69371ede0e}']
|
||||||
]
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def execute_mock(cmd, args):
|
def execute_mock(cmd, args):
|
||||||
|
Loading…
Reference in New Issue
Block a user