Add possibility to check material-profiles.

Needed to add the filename to deserialize, feels a bit unsafe as an optional parameter, will discuss tomorrow.
part of CURA-6856
This commit is contained in:
Remco Burema 2019-10-29 17:45:19 +01:00
parent 7780d76eb6
commit 298eb27c7f
No known key found for this signature in database
GPG key ID: 215C49431D43F98C
3 changed files with 15 additions and 3 deletions

View file

@ -247,7 +247,7 @@ class ContainerManager(QObject):
try: try:
with open(file_url, "rt", encoding = "utf-8") as f: with open(file_url, "rt", encoding = "utf-8") as f:
container.deserialize(f.read()) container.deserialize(f.read(), file_url)
except PermissionError: except PermissionError:
return {"status": "error", "message": "Permission denied when trying to read the file."} return {"status": "error", "message": "Permission denied when trying to read the file."}
except ContainerFormatError: except ContainerFormatError:

View file

@ -157,7 +157,7 @@ class LegacyProfileReader(ProfileReader):
data = stream.getvalue() data = stream.getvalue()
profile = InstanceContainer(profile_id) profile = InstanceContainer(profile_id)
profile.deserialize(data) # Also performs the version upgrade. profile.deserialize(data, file_name) # Also performs the version upgrade.
profile.setDirty(True) profile.setDirty(True)
#We need to return one extruder stack and one global stack. #We need to return one extruder stack and one global stack.

View file

@ -15,8 +15,9 @@ import UM.Dictionary
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Trust import Trust
from cura.CuraApplication import CuraApplication from cura.CuraApplication import ApplicationMetadata, CuraApplication
from cura.Machines.ContainerTree import ContainerTree from cura.Machines.ContainerTree import ContainerTree
from cura.Machines.VariantType import VariantType from cura.Machines.VariantType import VariantType
@ -470,6 +471,17 @@ class XmlMaterialProfile(InstanceContainer):
## Overridden from InstanceContainer ## Overridden from InstanceContainer
def deserialize(self, serialized, file_name = None): def deserialize(self, serialized, file_name = None):
# NOTE: In an enterprise environment, IT might not trust every material package the user installs.
# In that case, check if this package is trusted first, and return prematurely if not.
if file_name is not None and ApplicationMetadata.CuraIsEnterpriseVersion:
from UM.Application import Application
install_prefix = os.path.abspath(Application.getInstallPrefix())
common_path = os.path.commonpath([install_prefix, file_name])
if common_path is None or not common_path.startswith(install_prefix):
if not Trust.getInstance().signedFileCheck(file_name):
raise Exception("Trust-check failed for material file {0}.".format(file_name))
containers_to_add = [] containers_to_add = []
# update the serialized data first # update the serialized data first
from UM.Settings.Interfaces import ContainerInterface from UM.Settings.Interfaces import ContainerInterface