Disallow to modify a template if changes cannot be written on disk. Fixes #1695

This commit is contained in:
grossmj committed 2020-01-08 05:35:46 +08:00
1 parent a47fa83cec
commit 98f5454ccb
3 files changed
+22 -3

No files matched your search

+14
View File
@@ -132,6 +132,20 @@ class Controller:
self._computes = {}
self._projects = {}
def check_can_write_config(self):
"""
Check if the controller configuration can be written on disk
:returns: boolean
"""
try:
os.makedirs(os.path.dirname(self._config_file), exist_ok=True)
if not os.access(self._config_file, os.W_OK):
raise aiohttp.web.HTTPConflict(text="Change rejected, cannot write to controller configuration file '{}'".format(self._config_file))
except OSError as e:
raise aiohttp.web.HTTPConflict(text="Change rejected: {}".format(e))
def save(self):
"""
Save the controller configuration on disk
+3 -1
View File
@@ -177,9 +177,11 @@ class Template:
def update(self, **kwargs):
self._settings.update(kwargs)
from gns3server.controller import Controller
controller = Controller.instance()
Controller.instance().check_can_write_config()
self._settings.update(kwargs)
controller.notification.controller_emit("template.updated", self.__json__())
controller.save()
+5 -2
View File
@@ -93,8 +93,10 @@ class TemplateManager:
except jsonschema.ValidationError as e:
message = "JSON schema error adding template with JSON data '{}': {}".format(settings, e.message)
raise aiohttp.web.HTTPBadRequest(text=message)
self._templates[template.id] = template
from . import Controller
Controller.instance().check_can_write_config()
self._templates[template.id] = template
Controller.instance().save()
Controller.instance().notification.controller_emit("template.created", template.__json__())
return template
@@ -123,8 +125,9 @@ class TemplateManager:
template = self.get_template(template_id)
if template.builtin:
raise aiohttp.web.HTTPConflict(text="Template ID {} cannot be deleted because it is a builtin".format(template_id))
self._templates.pop(template_id)
from . import Controller
Controller.instance().check_can_write_config()
self._templates.pop(template_id)
Controller.instance().save()
Controller.instance().notification.controller_emit("template.deleted", template.__json__())