diff --git a/modoboa/admin/app_settings.py b/modoboa/admin/app_settings.py index b074e2690..4baa7f38c 100644 --- a/modoboa/admin/app_settings.py +++ b/modoboa/admin/app_settings.py @@ -3,6 +3,7 @@ from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.lib.formutils import YesNoField, SeparatorField, InlineRadioSelect from modoboa.lib.sysutils import exec_cmd from modoboa.lib import parameters +from modoboa.auth.lib import random_key def enabled_applications(): @@ -51,7 +52,7 @@ class GeneralParametersForm(parameters.AdminParametersForm): secret_key = forms.CharField( label=ugettext_lazy("Secret key"), - initial="abcdefghijklmnop", + initial=random_key(), help_text=ugettext_lazy("Key used to encrypt/decrypt passwords") ) diff --git a/modoboa/auth/lib.py b/modoboa/auth/lib.py index d256e5294..38e95382d 100644 --- a/modoboa/auth/lib.py +++ b/modoboa/auth/lib.py @@ -1,8 +1,21 @@ # coding: utf-8 from Crypto.Cipher import AES import base64 +import random +import string from modoboa.lib import parameters + +def random_key(l=16): + """Generate a random key + + :param integer l: the key's length + :return: a string + """ + char_set = string.printable + return ''.join(random.sample(char_set * l, l)) + + def encrypt(clear): key = parameters.get_admin("SECRET_KEY", app="admin") obj = AES.new(key, AES.MODE_ECB) @@ -14,11 +27,15 @@ def encrypt(clear): ciph = base64.b64encode(ciph) return ciph + def decrypt(ciph): - obj = AES.new(parameters.get_admin("SECRET_KEY", app="admin"), AES.MODE_ECB) + obj = AES.new( + parameters.get_admin("SECRET_KEY", app="admin"), AES.MODE_ECB + ) ciph = base64.b64decode(ciph) clear = obj.decrypt(ciph) return clear.rstrip(' ') + def get_password(request): return decrypt(request.session["password"])