Example #1
0
    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()
Example #2
0
    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()
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
 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)
Example #6
0
 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()
Example #7
0
 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()
Example #8
0
 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
Example #9
0
 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
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
    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()
Example #13
0
    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()
Example #14
0
    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)
Example #15
0
    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)
Example #16
0
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])
Example #17
0
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])
Example #18
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)