"""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)
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)
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") ]
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":
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)
""" 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)
"""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" }]
"""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)
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":
"""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)
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)
"""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)
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)
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)
"""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)
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'), ]
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)
# 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)