def activate_extensions(self, *names): from modoboa.core.extensions import exts_pool self.ajax_post(reverse("core:extension_save"), dict(("select_%s" % name, "1") for name in names)) for name in names: exts_pool.get_extension(name).load()
def activate_extensions(self, *names): from modoboa.core.extensions import exts_pool self.ajax_post( reverse("modoboa.core.views.admin.saveextensions"), dict(("select_%s" % name, "1") for name in names) ) for name in names: exts_pool.get_extension(name).load()
def handle(self, *args, **options): """Command entry point.""" load_core_settings() if not User.objects.filter(is_superuser=True).count(): admin = User(username="******", is_superuser=True) admin.set_password("password") admin.save() ObjectAccess.objects.create( user=admin, content_object=admin, is_owner=True) exts_pool.load_all() superadmin = User.objects.filter(is_superuser=True).first() groups = PERMISSIONS.keys() + [ role[0] for role in events.raiseQueryEvent("GetExtraRoles", superadmin, None) ] for groupname in groups: group, created = Group.objects.get_or_create(name=groupname) permissions = ( PERMISSIONS.get(groupname, []) + events.raiseQueryEvent("GetExtraRolePermissions", groupname) ) if not permissions: continue add_permissions_to_group(group, permissions) for extname in exts_pool.extensions.keys(): extension = exts_pool.get_extension(extname) extension.load_initial_data() events.raiseEvent("InitialDataLoaded", extname)
def handle(self, *args, **options): """Command entry point.""" load_core_settings() if not User.objects.filter(is_superuser=True).count(): admin = User(username="******", is_superuser=True) admin.set_password("password") admin.save() ObjectAccess.objects.create(user=admin, content_object=admin, is_owner=True) exts_pool.load_all() superadmin = User.objects.filter(is_superuser=True).first() groups = PERMISSIONS.keys() + [ role[0] for role in events.raiseQueryEvent("GetExtraRoles", superadmin, None) ] for groupname in groups: group, created = Group.objects.get_or_create(name=groupname) permissions = ( PERMISSIONS.get(groupname, []) + events.raiseQueryEvent("GetExtraRolePermissions", groupname)) if not permissions: continue add_permissions_to_group(group, permissions) for extname in exts_pool.extensions.keys(): extension = exts_pool.get_extension(extname) extension.load_initial_data() events.raiseEvent("InitialDataLoaded", extname)
def fetch_headers(self, raw_addresses=False): """Fetch message headers from server.""" msg = self.imapc.fetchmail( self.mbox, self.mailid, readonly=False, headers=self.headers_as_list ) headers = msg["BODY[HEADER.FIELDS ({})]".format(self.headers_as_text)] self.fetch_body_structure(msg) msg = email.message_from_string(headers) contacts_plugin_installed = exts_pool.get_extension("modoboa_contacts") headers_with_address = ("From", "To", "Cc", "Reply-To") for hdr in self.headernames: label = hdr[0] hdrvalue = self.get_header(msg, label, raw=raw_addresses) if not hdrvalue: continue safe = False if hdr[1]: if label in headers_with_address: if contacts_plugin_installed and not raw_addresses: hdrvalue = self._insert_contact_links(hdrvalue) hdrvalue = ", ".join(hdrvalue) safe = True self.headers += [ {"name": label, "value": hdrvalue, "safe": safe}] label = re.sub("-", "_", label) setattr(self, label, hdrvalue)
def __get_ext_instance(self): if not self.name: return None if hasattr(self, "instance") and self.instance: return self.instance = exts_pool.get_extension(self.name) if self.instance: self.__get_ext_dir()
def process_view(self, request, view, args, kwargs): m = re.match("modoboa\.extensions\.(\w+)", view.__module__) if m is None: return None try: ext = Extension.objects.get(name=m.group(1)) except Extension.DoesNotExist: extdef = exts_pool.get_extension(m.group(1)) if extdef.always_active: return None raise Http404 if ext.enabled: return None raise Http404
def wrapped_f(*args, **kwargs): if extname: from modoboa.core.models import Extension from modoboa.core.extensions import exts_pool try: ext = Extension.objects.get(name=extname) except Extension.DoesNotExist: extdef = exts_pool.get_extension(extname) if not extdef.always_active: return [] else: if not ext.enabled: return [] elif not modname in settings.MODOBOA_APPS: return [] return f(*args, **kwargs)
def handle(self, *args, **options): """Command entry point.""" if not models.User.objects.filter(is_superuser=True).count(): admin = models.User( username=options["admin_username"], is_superuser=True) admin.set_password("password") admin.save() models.ObjectAccess.objects.create( user=admin, content_object=admin, is_owner=True) lc = models.LocalConfig.objects.first() secret_key = lc.parameters.get_value("secret_key") if not secret_key: lc.parameters.set_value("secret_key", random_key()) lc.save() for service_name in ["relay", "smtp"]: relay_models.Service.objects.get_or_create(name=service_name) exts_pool.load_all() superadmin = models.User.objects.filter(is_superuser=True).first() groups = PERMISSIONS.keys() + [ role[0] for role in events.raiseQueryEvent("GetExtraRoles", superadmin, None) ] for groupname in groups: group, created = Group.objects.get_or_create(name=groupname) permissions = ( PERMISSIONS.get(groupname, []) + events.raiseQueryEvent("GetExtraRolePermissions", groupname) ) if not permissions: continue add_permissions_to_group(group, permissions) for extname in exts_pool.extensions.keys(): extension = exts_pool.get_extension(extname) extension.load_initial_data() events.raiseEvent("InitialDataLoaded", extname) if options["extra_fixtures"]: from modoboa.admin import factories factories.populate_database()
def handle(self, *args, **options): """Command entry point.""" if not models.User.objects.filter(is_superuser=True).count(): admin = models.User(username=options["admin_username"], is_superuser=True) admin.set_password("password") admin.save() models.ObjectAccess.objects.create(user=admin, content_object=admin, is_owner=True) lc = models.LocalConfig.objects.first() secret_key = lc.parameters.get_value("secret_key") if not secret_key: lc.parameters.set_value("secret_key", random_key()) lc.save() for service_name in ["relay", "smtp"]: relay_models.Service.objects.get_or_create(name=service_name) exts_pool.load_all() superadmin = models.User.objects.filter(is_superuser=True).first() groups = PERMISSIONS.keys() + [ role[0] for role in events.raiseQueryEvent("GetExtraRoles", superadmin, None) ] for groupname in groups: group, created = Group.objects.get_or_create(name=groupname) permissions = ( PERMISSIONS.get(groupname, []) + events.raiseQueryEvent("GetExtraRolePermissions", groupname)) if not permissions: continue add_permissions_to_group(group, permissions) for extname in exts_pool.extensions.keys(): extension = exts_pool.get_extension(extname) extension.load_initial_data() events.raiseEvent("InitialDataLoaded", extname) if options["extra_fixtures"]: from modoboa.admin import factories factories.populate_database()
def handle(self, *args, **options): """Command entry point.""" load_core_settings() load_admin_settings() load_limits_settings() if not User.objects.filter(is_superuser=True).count(): admin = User(username="******", is_superuser=True) admin.set_password("password") admin.save() ObjectAccess.objects.create( user=admin, content_object=admin, is_owner=True) param_name = "core.SECRET_KEY" qset = lib_models.Parameter.objects.filter(name=param_name) if not qset.exists(): lib_models.Parameter.objects.create( name=param_name, value=random_key()) for service_name in ['relay', 'smtp']: relay_models.Service.objects.get_or_create(name=service_name) exts_pool.load_all() superadmin = User.objects.filter(is_superuser=True).first() groups = PERMISSIONS.keys() + [ role[0] for role in events.raiseQueryEvent("GetExtraRoles", superadmin, None) ] for groupname in groups: group, created = Group.objects.get_or_create(name=groupname) permissions = ( PERMISSIONS.get(groupname, []) + events.raiseQueryEvent("GetExtraRolePermissions", groupname) ) if not permissions: continue add_permissions_to_group(group, permissions) for extname in exts_pool.extensions.keys(): extension = exts_pool.get_extension(extname) extension.load_initial_data() events.raiseEvent("InitialDataLoaded", extname)
def handle(self, *args, **options): """Command entry point.""" load_core_settings() load_admin_settings() load_limits_settings() if not User.objects.filter(is_superuser=True).count(): admin = User(username="******", is_superuser=True) admin.set_password("password") admin.save() ObjectAccess.objects.create(user=admin, content_object=admin, is_owner=True) param_name = "core.SECRET_KEY" qset = lib_models.Parameter.objects.filter(name=param_name) if not qset.exists(): lib_models.Parameter.objects.create(name=param_name, value=random_key()) for service_name in ['relay', 'smtp']: relay_models.Service.objects.get_or_create(name=service_name) exts_pool.load_all() superadmin = User.objects.filter(is_superuser=True).first() groups = PERMISSIONS.keys() + [ role[0] for role in events.raiseQueryEvent("GetExtraRoles", superadmin, None) ] for groupname in groups: group, created = Group.objects.get_or_create(name=groupname) permissions = ( PERMISSIONS.get(groupname, []) + events.raiseQueryEvent("GetExtraRolePermissions", groupname)) if not permissions: continue add_permissions_to_group(group, permissions) for extname in exts_pool.extensions.keys(): extension = exts_pool.get_extension(extname) extension.load_initial_data() events.raiseEvent("InitialDataLoaded", extname)
def enabled_applications(): """Return the list of currently enabled extensions We check if the table exists before trying to fetch activated extensions because the admin module is always imported by Django, even before the database exists (example: the first ``syncdb``). :return: a list """ from modoboa.core.models import Extension from modoboa.core.extensions import exts_pool from modoboa.lib.dbutils import db_table_exists result = [("user", "user")] if db_table_exists("core_extension"): exts = Extension.objects.filter(enabled=True) for ext in exts: extclass = exts_pool.get_extension(ext.name) if extclass.available_for_topredirection: result.append((ext.name, ext.name)) return sorted(result, key=lambda e: e[0])
def index(request): """Webmail actions handler Problèmes liés à la navigation 'anchor based' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Lors d'un rafraichissemt complet, une première requête est envoyée vers /modoboa_webmail/. On ne connait pas encore l'action qui va être demandée mais on peut déjà envoyer des informations indépendantes (comme les dossiers, le quota). Si on se contente de cela, l'affichage donnera un aspect décomposé qui n'est pas très séduisant (à cause de la latence notamment). Il faudrait pouvoir envoyer le menu par la même occasion, le souci étant de savoir lequel... Une solution possible : il suffirait de déplacer le menu vers la droite pour l'aligner avec le contenu, remonter la liste des dossiers (même hauteur que le menu) et renvoyer le menu en même temps que le contenu. Le rendu sera plus uniforme je pense. """ action = request.GET.get("action", None) if action is not None: if action not in globals(): raise UnknownAction response = globals()[action](request) else: if request.is_ajax(): raise BadRequest(_("Invalid request")) response = {"selection": "webmail"} curmbox = WebmailNavigationParameters(request).get("mbox", "INBOX") if not request.is_ajax(): request.session["lastaction"] = None imapc = get_imapconnector(request) imapc.getquota(curmbox) trash = request.user.parameters.get_value("trash_folder") response.update({ "hdelimiter": imapc.hdelimiter, "mboxes": render_mboxes_list(request, imapc), "refreshrate": request.user.parameters.get_value("refresh_interval"), "quota": imapc.quota_usage, "trash": trash, "ro_mboxes": [ "INBOX", "Junk", request.user.parameters.get_value("sent_folder"), trash, request.user.parameters.get_value("drafts_folder") ], "mboxes_col_width": request.user.parameters.get_value("mboxes_col_width"), "contacts_plugin_enabled": exts_pool.get_extension("modoboa_contacts") }) return render(request, "modoboa_webmail/index.html", response) if action in ["reply", "forward"]: action = "compose" if request.session["lastaction"] != action: extra_args = {} if "menuargs" in response: extra_args = response["menuargs"] del response["menuargs"] try: menu = getattr(webmail_tags, "%s_menu" % action) response["menu"] = menu("", curmbox, request.user, **extra_args) except KeyError: pass response.update(callback=action) http_status = 200 if "status" in response: del response['status'] http_status = 400 return render_to_json_response(response, status=http_status)