Merge pull request #533 from modoboa/fix-prevent-old-ext-install
Prevent installation of incompatible extensions
This commit is contained in:
@@ -21,13 +21,14 @@ COMPATIBILITY_MATRIX = {
|
||||
"modoboa-sievefilters": ">=1.1.1",
|
||||
"modoboa-webmail": ">=1.2.0",
|
||||
},
|
||||
"2.1.0": {
|
||||
"modoboa-pdfcredentials": None,
|
||||
"modoboa-dmarc": None,
|
||||
"modoboa-imap-migration": None,
|
||||
},
|
||||
}
|
||||
|
||||
EXTENSIONS_AVAILABILITY = {
|
||||
"modoboa-contacts": "1.7.4",
|
||||
}
|
||||
|
||||
REMOVED_EXTENSIONS = {
|
||||
"modoboa-pdfcredentials": "2.1.0",
|
||||
"modoboa-dmarc": "2.1.0",
|
||||
"modoboa-imap-migration": "2.1.0"
|
||||
}
|
||||
|
||||
@@ -65,12 +65,16 @@ class Modoboa(base.Installer):
|
||||
|
||||
def is_extension_ok_for_version(self, extension, version):
|
||||
"""Check if extension can be installed with this modo version."""
|
||||
if extension not in compatibility_matrix.EXTENSIONS_AVAILABILITY:
|
||||
return True
|
||||
version = utils.convert_version_to_int(version)
|
||||
min_version = compatibility_matrix.EXTENSIONS_AVAILABILITY[extension]
|
||||
min_version = utils.convert_version_to_int(min_version)
|
||||
return version >= min_version
|
||||
if extension in compatibility_matrix.EXTENSIONS_AVAILABILITY:
|
||||
min_version = compatibility_matrix.EXTENSIONS_AVAILABILITY[extension]
|
||||
min_version = utils.convert_version_to_int(min_version)
|
||||
return version >= min_version
|
||||
if extension in compatibility_matrix.REMOVED_EXTENSIONS:
|
||||
max_version = compatibility_matrix.REMOVED_EXTENSIONS[extension]
|
||||
max_version = utils.convert_version_to_int(max_version)
|
||||
return version < max_version
|
||||
return True
|
||||
|
||||
def _setup_venv(self):
|
||||
"""Prepare a dedicated virtualenv."""
|
||||
@@ -80,6 +84,13 @@ class Modoboa(base.Installer):
|
||||
version = self.config.get("modoboa", "version")
|
||||
if version == "latest":
|
||||
packages += ["modoboa"] + self.extensions
|
||||
for extension in list(self.extensions):
|
||||
if extension in compatibility_matrix.REMOVED_EXTENSIONS.keys():
|
||||
self.extensions.remove(extension)
|
||||
self.extensions = [
|
||||
extension for extension in self.extensions
|
||||
if extension not in compatibility_matrix.REMOVED_EXTENSIONS
|
||||
]
|
||||
else:
|
||||
matrix = compatibility_matrix.COMPATIBILITY_MATRIX[version]
|
||||
packages.append("modoboa=={}".format(version))
|
||||
|
||||
Reference in New Issue
Block a user