"""Generate PDF documents containg account credentials."""

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.parameters import tools as param_tools

from . import __version__
from . import forms


class PdfCredentials(ModoExtension):
    """Extension declaration."""

    name = "modoboa_pdfcredentials"
    label = ugettext_lazy("PDF credentials")
    version = __version__
    description = ugettext_lazy(
        "Generate PDF documents containing users' credentials")

    def load(self):
        param_tools.registry.add("global", forms.ParametersForm,
                                 ugettext_lazy("PDF credentials"))


exts_pool.register_extension(PdfCredentials)
Beispiel #2
0
        for user in User.objects.filter(groups__name='DomainAdmins'):
            try:
                controls.create_pool(user)
            except IntegrityError:
                pass

    def load(self):
        from modoboa.extensions.limits.app_settings import ParametersForm
        parameters.register(ParametersForm, ugettext_lazy("Limits"))

    def destroy(self):
        parameters.unregister()
        Group.objects.get(name="Resellers").delete()

exts_pool.register_extension(Limits)


@events.observe("GetExtraRoles")
def get_extra_roles(user):
    if user.is_superuser:
        return [("Resellers", _("Reseller")), ]
    return []


@events.observe("ExtraAdminContent")
def display_pool_usage(user, target, currentpage):
    from django.template.loader import render_to_string

    if target != "leftcol" or user.is_superuser:
        return []
# -*- coding: utf-8 -*-
"""Rspamd plugin for Modoboa."""

from __future__ import unicode_literals

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.parameters import tools as param_tools

from . import __version__, forms


class Rspamd(ModoExtension):
    """Rspamd extension class."""

    name = "modoboa_rspamd"
    label = ugettext_lazy("Rspamd frontend")
    description = ugettext_lazy("Rspamd management frontend")
    version = __version__

    def load(self):
        param_tools.registry.add("global", forms.ParametersForm, "Rspamd")


exts_pool.register_extension(Rspamd)
"""Generate PDF documents containg account credentials."""

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.parameters import tools as param_tools

from . import __version__
from . import forms


class PdfCredentials(ModoExtension):
    """Extension declaration."""

    name = "modoboa_pdfcredentials"
    label = ugettext_lazy("PDF credentials")
    version = __version__
    description = ugettext_lazy(
        "Generate PDF documents containing users' credentials"
    )

    def load(self):
        param_tools.registry.add(
            "global", forms.ParametersForm, ugettext_lazy("PDF credentials"))


exts_pool.register_extension(PdfCredentials)
"""

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.lib import parameters


class Radicale(ModoExtension):

    """Radicale extension declaration."""

    name = "modoboa_radicale"
    label = ugettext_lazy("Radicale management")
    version = "1.0.1"
    url = "calendars"
    description = ugettext_lazy(
        "Management frontend for Radicale, a simple calendar and contact "
        "server."
    )

    def load(self):
        """Plugin loading."""
        from .app_settings import ParametersForm

        parameters.register(ParametersForm, "Radicale")
        from . import general_callbacks

exts_pool.register_extension(Radicale)
"""Declare and register the contacts extension."""

from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool

from . import __version__


class Contacts(ModoExtension):
    """Plugin declaration."""

    name = "modoboa_contacts"
    label = ugettext_lazy("Contacts")
    version = __version__
    description = ugettext_lazy("Address book")
    url = "contacts"
    topredirection_url = reverse_lazy("modoboa_contacts:index")

    def load(self):
        pass


exts_pool.register_extension(Contacts)
Beispiel #7
0
    def load_initial_data(self):
        """Create records for existing domains."""
        for dom in Domain.objects.all():
            try:
                Transport.objects.get(domain="autoreply.%s" % dom.name)
            except Transport.DoesNotExist:
                general_callbacks.onDomainCreated(None, dom)
            else:
                continue

            for mb in dom.mailbox_set.all():
                try:
                    Alias.objects.get(full_address=mb.full_address)
                except Alias.DoesNotExist:
                    general_callbacks.onMailboxCreated(None, mb)


exts_pool.register_extension(PostfixAutoreply)


@events.observe("ExtraUprefsRoutes")
def extra_routes():
    from django.conf.urls import url

    return [
        url(r'^user/autoreply/$',
            'modoboa_postfix_autoreply.views.autoreply',
            name="autoreply")
    ]
Beispiel #8
0
    version = "1.0"
    description = ugettext_lazy(
        "Web based console to manage domains, accounts and aliases")
    always_active = True

    def load(self):
        from modoboa.extensions.admin.app_settings import AdminParametersForm
        parameters.register(AdminParametersForm,
                            ugettext_lazy("Administration"))
        events.declare(admin_events)

    def destroy(self):
        parameters.unregister()


exts_pool.register_extension(AdminConsole, show=False)


@events.observe("ExtraUprefsRoutes")
def extra_routes():
    from django.conf.urls import url
    return [
        url(r'^user/forward/',
            'modoboa.extensions.admin.views.user.forward',
            name="user_forward"),
    ]


@events.observe("AdminMenuDisplay")
def admin_menu(target, user):
    if target != "top_menu":
Beispiel #9
0
class AdminConsole(ModoExtension):
    name = "admin"
    label = ugettext_lazy("Administration console")
    version = "1.0"
    description = ugettext_lazy(
        "Web based console to manage domains, accounts and aliases")
    always_active = True

    def load(self):
        from modoboa.extensions.admin.app_settings import AdminParametersForm
        parameters.register(AdminParametersForm,
                            ugettext_lazy("Administration"))
        events.declare(ADMIN_EVENTS)


exts_pool.register_extension(AdminConsole)


@events.observe("GetExtraRolePermissions")
def extra_permissions(rolename):
    """Return extra permissions for :kw:`rolename`."""
    return PERMISSIONS.get(rolename, [])


@events.observe("ExtraUprefsRoutes")
def extra_routes():
    from django.conf.urls import url
    return [
        url(r'^user/forward/',
            'modoboa.extensions.admin.views.user.forward',
            name="user_forward"),
    label = ugettext_lazy("Administration console")
    version = "1.1.1"
    description = ugettext_lazy(
        "Web based console to manage domains, accounts and aliases"
    )
    always_active = True
    url = "admin"

    def load(self):
        from .app_settings import AdminParametersForm

        parameters.register(
            AdminParametersForm, ugettext_lazy("Administration"))
        events.declare(ADMIN_EVENTS)

exts_pool.register_extension(AdminConsole)


@events.observe("GetExtraRoles")
def extra_roles(user, account):
    """Return new roles."""
    filters = events.raiseQueryEvent(
        "UserCanSetRole", user, "DomainAdmins", account
    )
    if user.has_perm("modoboa_admin.add_domain") and \
            (not filters or True in filters):
        return [("DomainAdmins", _("Domain administrator"))]
    return []


@events.observe("GetExtraRolePermissions")
# coding: utf-8
"""Declare and register the webmail extension."""

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.lib import parameters


class Webmail(ModoExtension):
    name = "modoboa_webmail"
    label = "Webmail"
    version = "1.0.2"
    description = ugettext_lazy("Simple IMAP webmail")
    needs_media = True
    available_for_topredirection = True
    url = "webmail"

    def load(self):
        from .app_settings import ParametersForm, UserSettings

        parameters.register(ParametersForm, "Webmail")
        parameters.register(UserSettings, "Webmail")
        from . import general_callbacks

exts_pool.register_extension(Webmail)
Beispiel #12
0
        """
        for service_name in ['relay', 'smtp']:
            Service.objects.get_or_create(name=service_name)
        if exts_pool.is_extension_enabled('limits'):
            init_limits_dependant_features()

    def load(self):
        from .app_settings import AdminParametersForm

        parameters.register(
            AdminParametersForm, ugettext_lazy("Relay domains")
        )
        events.declare(extension_events)
        from modoboa.extensions.postfix_relay_domains import general_callbacks
        if 'modoboa.extensions.postfix_relay_domains.general_callbacks' in sys.modules:
            reload(general_callbacks)
        if exts_pool.is_extension_enabled('limits'):
            import limits_callbacks
            if 'modoboa.extensions.postfix_relay_domains.limits_callbacks' in sys.modules:
                reload(limits_callbacks)
        if exts_pool.is_extension_enabled('amavis'):
            import amavis_callbacks
            if 'modoboa.extensions.postfix_relay_domains.amavis_callbacks' in sys.modules:
                reload(amavis_callbacks)

    def destroy(self):
        events.unregister_extension()
        parameters.unregister()

exts_pool.register_extension(PostfixRelayDomains)
Beispiel #13
0
    """Extension registration."""

    name = "modoboa_dmarc"
    label = ugettext_lazy("DMARC tools")
    version = __version__
    description = ugettext_lazy(
        "A set of tools to ease DMARC integration"
    )
    url = "dmarc"

    def load(self):
        """Extension loading."""
        from .app_settings import ParametersForm

        parameters.register(ParametersForm, "DMARC")


exts_pool.register_extension(DmarcExtension)


@events.observe("GetDomainActions")
def extra_domain_actions(user, domain):
    """Return a menu to show the DMARC report."""
    return [{
        "name": "dmarc_report",
        "url": reverse("modoboa_dmarc:domain_report", args=[domain.pk]),
        "title": _("Show DMARC report for {}").format(domain.name),
        "img": "fa fa-pie-chart"
    }]
Beispiel #14
0
"""DMARC tools for Modoboa."""

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.parameters import tools as param_tools

from . import __version__
from . import forms


class DmarcExtension(ModoExtension):
    """Extension registration."""

    name = "modoboa_dmarc"
    label = ugettext_lazy("DMARC tools")
    version = __version__
    description = ugettext_lazy("A set of tools to ease DMARC integration")
    url = "dmarc"

    def load(self):
        """Extension loading."""
        param_tools.registry.add("global", forms.ParametersForm, "DMARC")


exts_pool.register_extension(DmarcExtension)
Beispiel #15
0
    label = ugettext_lazy("Administration console")
    version = "1.0"
    description = ugettext_lazy(
        "Web based console to manage domains, accounts and aliases"
    )
    always_active = True

    def load(self):
        from modoboa.extensions.admin.app_settings import AdminParametersForm
        parameters.register(AdminParametersForm, ugettext_lazy("Administration"))
        events.declare(admin_events)

    def destroy(self):
        parameters.unregister()

exts_pool.register_extension(AdminConsole, show=False)


@events.observe("ExtraUprefsRoutes")
def extra_routes():
    from django.conf.urls import url
    return [
        url(r'^user/forward/',
            'modoboa.extensions.admin.views.user.forward',
            name="user_forward"),
    ]


@events.observe("AdminMenuDisplay")
def admin_menu(target, user):
    if target != "top_menu":
Beispiel #16
0
        """Load demo data."""
        domain = DomainFactory.create(name="demo.local")
        dadmin = MailboxFactory.create(address="admin",
                                       domain=domain,
                                       user__username="******",
                                       user__groups=["DomainAdmins"])
        dadmin.user.set_password("admin")
        dadmin.user.save()
        domain.add_admin(dadmin.user)
        user = MailboxFactory.create(address="user",
                                     domain=domain,
                                     user__username="******",
                                     user__groups=["SimpleUsers"])
        user.user.set_password("user")
        user.user.save()

        # Configure parameters
        lc = core_models.LocalConfig.objects.first()
        lc.parameters.set_value("handle_mailboxes", True, app="admin")
        lc.parameters.set_value("am_pdp_mode", "inet", app="modoboa_amavis")
        lc.parameters.set_value("rrd_rootdir",
                                "/srv/modoboa/rrdfiles",
                                app="modoboa_stats")
        lc.parameters.set_value("storage_dir",
                                "/srv/modoboa/pdfcredentials",
                                app="modoboa_pdfcredentials")
        lc.save()


exts_pool.register_extension(Demo)
Beispiel #17
0
        for service_name in ['relay', 'smtp']:
            Service.objects.get_or_create(name=service_name)
        if exts_pool.is_extension_enabled('limits'):
            init_limits_dependant_features()

    def load(self):
        from .app_settings import AdminParametersForm

        parameters.register(
            AdminParametersForm, ugettext_lazy("Relay domains")
        )
        events.declare(EXTENSION_EVENTS)
        from modoboa.extensions.postfix_relay_domains import general_callbacks
        prefix = "modoboa.extensions.postfix_relay_domains."
        if prefix + "general_callbacks" in sys.modules:
            reload(general_callbacks)
        if exts_pool.is_extension_enabled('limits'):
            import limits_callbacks
            if prefix + "limits_callbacks" in sys.modules:
                reload(limits_callbacks)
        if exts_pool.is_extension_enabled('amavis'):
            import amavis_callbacks
            if prefix + "amavis_callbacks" in sys.modules:
                reload(amavis_callbacks)

    def destroy(self):
        events.unregister_extension()
        parameters.unregister()

exts_pool.register_extension(PostfixRelayDomains)
Beispiel #18
0
"""Radicale management frontend."""

from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.parameters import tools as param_tools

from . import __version__
from . import forms


class Radicale(ModoExtension):
    """Radicale extension declaration."""

    name = "modoboa_radicale"
    label = ugettext_lazy("Radicale management")
    topredirection_url = reverse_lazy("modoboa_radicale:index")
    version = __version__
    url = "calendars"
    description = ugettext_lazy(
        "Management frontend for Radicale, a simple calendar and contact "
        "server.")

    def load(self):
        """Plugin loading."""
        param_tools.registry.add("global", forms.ParametersForm, "Radicale")


exts_pool.register_extension(Radicale)
        domain.save()

    instances['domain_limits'] = domain.domainlimit


class DomainLimits(ModoExtension):
    name = "modoboa_domain_limits"
    label = "Domain Limits"
    version = "1.0.0"
    description = ugettext_lazy(
        "Limit the number of mail and alias by domain"
    )
    url = "domain_limits"


exts_pool.register_extension(DomainLimits)


@events.observe('MailboxCreated')
def mailbox_created(user, mailbox):
    if (
        (hasattr(mailbox.domain, 'domainlimit')) and
        (mailbox.domain.domainlimit.mail_limit != -1) and
        (mailbox.domain.mailbox_count > mailbox.domain.domainlimit.mail_limit)
    ):
        raise MailboxLimitReached(mailbox.domain.domainlimit.mail_limit)


@events.observe('MailboxAliasCreated')
def mailbox_alias_created(user, mailboxalias):
    if (
"""Extension definition."""

from django.utils.translation import ugettext as _, ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.parameters import tools as param_tools

from . import __version__
from . import forms


class ImapMigration(ModoExtension):
    """The ImapMigration extension class."""

    name = "modoboa_imap_migration"
    label = ugettext_lazy("IMAP migration using OfflineIMAP")
    version = __version__
    description = ugettext_lazy(
        "Migrate existing mailboxes using IMAP and OfflineIMAP"
    )

    def load(self):
        """Load extension."""
        param_tools.registry.add(
            "global", forms.ParametersForm, _("IMAP migration"))

exts_pool.register_extension(ImapMigration)
This module provides support to retrieve statistics from postfix log :
sent, received, bounced, rejected

"""
from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.lib import events, parameters


class Stats(ModoExtension):
    name = "modoboa_stats"
    label = "Statistics"
    version = "1.0.4"
    description = ugettext_lazy(
        "Graphical statistics about emails traffic using RRDtool"
    )
    needs_media = True
    url = "stats"

    def load(self):
        from .app_settings import ParametersForm

        events.declare(["GetGraphSets"])
        parameters.register(
            ParametersForm, ugettext_lazy("Graphical statistics")
        )
        from . import general_callbacks

exts_pool.register_extension(Stats)
Beispiel #22
0
from . import __version__
from .lib import create_user_and_policy, create_user_and_use_policy
from . import forms


class Amavis(ModoExtension):
    """The Amavis extension."""

    name = "modoboa_amavis"
    label = ugettext_lazy("Amavis frontend")
    version = __version__
    description = ugettext_lazy("Simple amavis management frontend")
    url = "quarantine"
    available_for_topredirection = True

    def load(self):
        param_tools.registry.add("global", forms.ParametersForm, "Amavis")
        param_tools.registry.add("user", forms.UserSettings,
                                 ugettext_lazy("Quarantine"))

    def load_initial_data(self):
        """Create records for existing domains and co."""
        for dom in Domain.objects.all():
            policy = create_user_and_policy("@{0}".format(dom.name))
            for domalias in dom.domainalias_set.all():
                domalias_pattern = "@{0}".format(domalias.name)
                create_user_and_use_policy(domalias_pattern, policy)


exts_pool.register_extension(Amavis)
Beispiel #23
0
sent, received, bounced, rejected

"""
from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.lib import events, parameters

from . import __version__


class Stats(ModoExtension):
    name = "modoboa_stats"
    label = "Statistics"
    version = __version__
    description = ugettext_lazy(
        "Graphical statistics about emails traffic using RRDtool")
    needs_media = True
    url = "stats"

    def load(self):
        from .app_settings import ParametersForm

        events.declare(["GetGraphSets"])
        parameters.register(ParametersForm,
                            ugettext_lazy("Graphical statistics"))
        from . import general_callbacks


exts_pool.register_extension(Stats)
Beispiel #24
0
    """The Amavis extension."""

    name = "modoboa_amavis"
    label = ugettext_lazy("Amavis frontend")
    version = "1.0.1"
    description = ugettext_lazy("Simple amavis management frontend")
    url = "quarantine"
    available_for_topredirection = True

    def load(self):
        from .app_settings import ParametersForm, UserSettings

        parameters.register(ParametersForm, "Amavis")
        parameters.register(UserSettings, ugettext_lazy("Quarantine"))

    def load_initial_data(self):
        """Create records for existing domains and co."""
        for dom in Domain.objects.all():
            policy = create_user_and_policy("@{0}".format(dom.name))
            for domalias in dom.domainalias_set.all():
                domalias_pattern = "@{0}".format(domalias.name)
                create_user_and_use_policy(domalias_pattern, policy)

        if not exts_pool.is_extension_installed(
                "modoboa.extensions.postfix_relay_domains"):
            return
        general_callbacks.create_relay_domains_records()

exts_pool.register_extension(Amavis)
Beispiel #25
0
                Transport.objects.get(domain="autoreply.%s" % dom.name)
            except Transport.DoesNotExist:
                onDomainCreated(None, dom)
            else:
                continue

            for mb in dom.mailbox_set.all():
                try:
                    Alias.objects.get(full_address=mb.full_address)
                except Alias.DoesNotExist:
                    onMailboxCreated(None, mb)

    def load(self):
        from modoboa.extensions.postfix_autoreply.app_settings import ParametersForm
        parameters.register(ParametersForm, ugettext_lazy("Automatic replies"))
        from modoboa.extensions.postfix_autoreply import general_callbacks
        if 'modoboa.extensions.postfix_autoreply.general_callbacks' in sys.modules:
            reload(general_callbacks)

    def destroy(self):
        events.unregister_extension()
        parameters.unregister()

exts_pool.register_extension(PostfixAutoreply)


@events.observe("ExtraUprefsRoutes")
def extra_routes():
    return [(r'^user/autoreply/$',
             'modoboa.extensions.postfix_autoreply.views.autoreply'), ]
Beispiel #26
0
    def load_initial_data(self):
        """Load demo data."""
        domain = DomainFactory.create(name="demo.local")
        dadmin = MailboxFactory.create(
            address="admin", domain=domain, user__username="******",
            user__groups=["DomainAdmins"]
        )
        dadmin.user.set_password("admin")
        dadmin.user.save()
        domain.add_admin(dadmin.user)
        user = MailboxFactory.create(
            address="user", domain=domain, user__username="******",
            user__groups=["SimpleUsers"]
        )
        user.user.set_password("user")
        user.user.save()

        # Configure parameters
        lc = core_models.LocalConfig.objects.first()
        lc.parameters.set_value("handle_mailboxes", True, app="admin")
        lc.parameters.set_value("am_pdp_mode", "inet", app="modoboa_amavis")
        lc.parameters.set_value(
            "rrd_rootdir", "/srv/modoboa/rrdfiles", app="modoboa_stats")
        lc.parameters.set_value(
            "storage_dir", "/srv/modoboa/pdfcredentials",
            app="modoboa_pdfcredentials")
        lc.save()

exts_pool.register_extension(Demo)
Beispiel #27
0
# coding: utf-8
"""Declare and register the sievefilters extension."""

from django.utils.translation import ugettext_lazy

from modoboa.core.extensions import ModoExtension, exts_pool
from modoboa.lib import parameters


class SieveFilters(ModoExtension):
    name = "sievefilters"
    label = "Sieve filters"
    version = "1.0"
    description = ugettext_lazy("Plugin to easily create server-side filters")
    url = "sfilters"
    available_for_topredirection = True

    def load(self):
        from .app_settings import ParametersForm, UserSettings
        parameters.register(ParametersForm, ugettext_lazy("Sieve filters"))
        parameters.register(UserSettings, ugettext_lazy("Message filters"))
        from modoboa.extensions.sievefilters import general_callbacks

exts_pool.register_extension(SieveFilters)
    label = "Relay domains"
    version = "1.0.1"
    description = ugettext_lazy("Relay domains support for Postfix")
    url = "postfix_relay_domains"

    def load(self):
        from .app_settings import AdminParametersForm

        parameters.register(
            AdminParametersForm, ugettext_lazy("Relay domains")
        )
        events.declare(EXTENSION_EVENTS)
        from . import general_callbacks
        if exts_pool.is_extension_installed("modoboa_admin_limits"):
            from . import limits_callbacks
        if exts_pool.is_extension_installed("modoboa_amavis"):
            from . import amavis_callbacks

    def load_initial_data(self):
        """Create extension data."""
        from .models import Service
        for service_name in ['relay', 'smtp']:
            Service.objects.get_or_create(name=service_name)

        if not exts_pool.is_extension_installed("modoboa_admin_limits"):
            return
        from .limits_callbacks import create_new_limits
        create_new_limits()

exts_pool.register_extension(AdminRelayDomains)