From 0503c684eadc52f6eef33eae254cb0f2197756df Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 20 Jun 2012 09:21:10 +0200 Subject: [PATCH] Making Modoboa a standard django application. see #245 --- .hgignore | 8 +- .tx/config | 8 +- MANIFEST.in | 3 + settings_sample.py => doc/settings_sample.py | 0 __init__.py => example/__init__.py | 0 example/manage.py | 14 ++ example/settings.py | 154 ++++++++++++++++++ example/urls.py | 5 + {admin/migrations => modoboa}/__init__.py | 0 {admin => modoboa/admin}/__init__.py | 0 {admin => modoboa/admin}/exceptions.py | 0 {admin => modoboa/admin}/fixtures/demo.json | 0 .../admin}/fixtures/initial_data.json | 0 .../admin}/fixtures/test_content.json | 0 {admin => modoboa/admin}/forms.py | 0 {admin => modoboa/admin}/lib.py | 0 .../admin}/migrations/0001_initial.py | 0 .../0002_auto__del_field_alias_mbox.py | 0 .../migrations/0003_auto__add_extension.py | 0 .../admin}/migrations/0004_add_permissions.py | 0 .../0005_increase_columns_length.py | 0 .../migrations/0006_auto__add_domainalias.py | 0 ...ess__chg_field_alias_address__del_field.py | 0 .../migrations/0008_update_mailbox_path.py | 0 .../0009_auto__add_field_alias_extmboxes.py | 0 .../migrations/0010_fill_alias_domain.py | 0 ...d_domain_dates__add_field_domainalias_d.py | 0 .../migrations/0012_fill_object_dates.py | 0 .../migrations/0013_update_mailbox_path.py | 0 .../0014_auto__add_unique_domain_name.py | 0 .../admin}/migrations/0015_move_passwords.py | 0 ...que_objectaccess_user_content_type_obje.py | 0 .../admin}/migrations/0017_set_permissions.py | 0 ...8_auto__add_unique_alias_domain_address.py | 0 .../migrations/0019_set_default_group.py | 0 .../admin/migrations}/__init__.py | 0 {admin => modoboa/admin}/models.py | 0 {admin => modoboa/admin}/scripts/dbcleanup.py | 0 {admin => modoboa/admin}/tables.py | 0 .../admin}/templates/admin/dlistform.html | 0 .../templates/admin/domain_general_form.html | 0 .../admin}/templates/admin/domains.html | 0 .../templates/admin/editdomainform.html | 0 .../admin}/templates/admin/extensions.html | 0 .../admin}/templates/admin/header.html | 0 .../admin}/templates/admin/identities.html | 0 .../admin}/templates/admin/import_done.html | 0 .../admin}/templates/admin/importform.html | 0 .../admin}/templates/admin/listing.html | 0 .../admin}/templates/admin/mailboxes_raw.html | 0 .../admin}/templates/admin/mailform.html | 0 .../admin}/templates/admin/newaccount.html | 0 .../admin}/templates/admin/newdomainform.html | 0 .../admin}/templates/admin/parameters.html | 0 .../admin}/templates/admin/permsform.html | 0 .../admin}/templates/admin/searchform.html | 0 .../templates/admin/settings_header.html | 0 .../admin}/templatetags/__init__.py | 0 .../admin}/templatetags/admin_extras.py | 0 {admin => modoboa/admin}/tests.py | 0 {admin => modoboa/admin}/urls.py | 0 {admin => modoboa/admin}/views.py | 0 {auth => modoboa/auth}/__init__.py | 0 {auth => modoboa/auth}/forms.py | 0 {auth => modoboa/auth}/lib.py | 0 {auth => modoboa/auth}/models.py | 0 {auth => modoboa/auth}/tests.py | 0 {auth => modoboa/auth}/views.py | 0 {demo => modoboa/demo}/__init__.py | 0 .../templates/demo/login_announcement.html | 0 {demo => modoboa/demo}/urls.py | 0 {demo => modoboa/demo}/views.py | 0 .../extensions}/__init__.py | 0 .../extensions}/amavis_quarantine/__init__.py | 0 .../extensions}/amavis_quarantine/cleanup.py | 0 .../extensions}/amavis_quarantine/dbrouter.py | 0 .../extensions}/amavis_quarantine/forms.py | 0 .../extensions}/amavis_quarantine/lib.py | 0 .../extensions}/amavis_quarantine/models.py | 0 .../amavis_quarantine/sql_listing.py | 0 .../amavis_quarantine/css/quarantine.css | 0 .../amavis_quarantine/css/selfservice.css | 0 .../static/amavis_quarantine/js/quarantine.js | 0 .../amavis_quarantine/js/selfservice.js | 0 .../amavis_quarantine/getmailcontent.html | 0 .../templates/amavis_quarantine/index.html | 0 .../amavis_quarantine/mailheaders.html | 0 .../amavis_quarantine/viewheader.html | 0 .../viewmail_selfservice.html | 0 .../templatetags}/__init__.py | 0 .../templatetags/amextras.py | 0 .../extensions}/amavis_quarantine/urls.py | 0 .../extensions}/amavis_quarantine/views.py | 0 .../extensions}/limits/__init__.py | 0 .../extensions}/limits/controls.py | 0 .../extensions}/limits/fixtures/demo.json | 0 .../extensions}/limits/forms.py | 0 .../extensions}/limits/lib.py | 0 .../limits/migrations/0001_initial.py | 0 .../extensions/limits}/migrations/__init__.py | 0 .../extensions}/limits/models.py | 0 .../limits/templates/limits/poolusage.html | 0 .../extensions}/limits/urls.py | 0 .../extensions}/limits/views.py | 0 .../extensions}/postfix_autoreply/__init__.py | 0 .../extensions}/postfix_autoreply/forms.py | 0 .../migrations/0001_initial.py | 0 ...002_auto__add_armessage__add_arhistoric.py | 0 .../postfix_autoreply/migrations}/__init__.py | 0 .../extensions}/postfix_autoreply/models.py | 0 .../postfix_autoreply/scripts/autoreply | 0 .../postfix_autoreply/scripts/autoreply.py | 0 .../postfix_autoreply/autoreply.html | 0 .../extensions}/postfix_autoreply/urls.py | 0 .../extensions}/postfix_autoreply/views.py | 0 .../extensions}/sievefilters/__init__.py | 0 .../extensions}/sievefilters/forms.py | 0 .../extensions}/sievefilters/lib.py | 0 .../static/sievefilters/css/style.css | 0 .../sievefilters/js/jquery.dynfields.js | 0 .../static/sievefilters/js/lib.js | 0 .../templates/sievefilters/filter.html | 0 .../templates/sievefilters/guieditor.html | 0 .../templates/sievefilters/index.html | 0 .../templates/sievefilters/rawfilter.html | 0 .../sievefilters}/templatetags/__init__.py | 0 .../templatetags/sfilters_tags.py | 0 .../extensions}/sievefilters/test.py | 0 .../extensions}/sievefilters/urls.py | 0 .../extensions}/sievefilters/views.py | 0 .../extensions}/stats/__init__.py | 0 .../extensions}/stats/grapher.py | 0 .../extensions}/stats/scripts/logparser.py | 0 .../stats/static/stats/css/stats.css | 0 .../stats/static/stats/js/stats.js | 0 .../stats/templates/stats/graphs.html | 0 .../stats/templates/stats/index.html | 0 .../extensions}/stats/urls.py | 0 .../extensions}/stats/views.py | 0 .../extensions}/webmail/__init__.py | 0 .../extensions}/webmail/exceptions.py | 0 .../extensions}/webmail/fetch_parser.py | 0 .../extensions}/webmail/forms.py | 0 .../extensions}/webmail/imaputils.py | 0 .../extensions}/webmail/lib.py | 0 .../extensions}/webmail/middleware.py | 0 .../static/webmail/css/attachments.css | 0 .../webmail/static/webmail/css/folders.css | 0 .../webmail/static/webmail/css/webmail.css | 0 .../webmail/static/webmail/js/webmail.js | 0 .../templates/webmail/attachments.html | 0 .../webmail/templates/webmail/compose.html | 0 .../webmail/templates/webmail/folder.html | 0 .../webmail/templates/webmail/folders.html | 0 .../webmail/templates/webmail/headers.html | 0 .../webmail/templates/webmail/index.html | 0 .../templates/webmail/upload_done.html | 0 .../webmail/templatetags}/__init__.py | 0 .../webmail/templatetags/webextras.py | 0 .../extensions}/webmail/urls.py | 0 .../extensions}/webmail/views.py | 0 {lib/migrations => modoboa/lib}/__init__.py | 0 {lib => modoboa/lib}/authbackends.py | 0 {lib => modoboa/lib}/connections.py | 0 {lib => modoboa/lib}/dbutils.py | 0 {lib => modoboa/lib}/decorators.py | 0 {lib => modoboa/lib}/email_listing.py | 0 {lib => modoboa/lib}/emailutils.py | 0 {lib => modoboa/lib}/events.py | 0 {lib => modoboa/lib}/exceptions.py | 0 {lib => modoboa/lib}/fixtures/demo.json | 0 {lib => modoboa/lib}/formutils.py | 0 {lib => modoboa/lib}/imap_utf7.py | 0 {lib => modoboa/lib}/ldaputils.py | 0 {lib => modoboa/lib}/middleware.py | 0 .../lib}/migrations/0001_initial.py | 0 .../lib}/migrations/0002_move_secret_key.py | 0 .../lib/migrations}/__init__.py | 0 {lib => modoboa/lib}/models.py | 0 {lib => modoboa/lib}/parameters.py | 0 {lib => modoboa/lib}/permissions.py | 0 {lib => modoboa/lib}/sysutils.py | 0 {lib => modoboa/lib}/tables.py | 0 .../lib/templatetags}/__init__.py | 0 .../lib}/templatetags/libextras.py | 0 {lib => modoboa/lib}/tests.py | 0 {lib => modoboa/lib}/u2u_decode.py | 0 {lib => modoboa/lib}/webutils.py | 0 .../locale}/de/LC_MESSAGES/django.po | 0 .../locale}/de/LC_MESSAGES/djangojs.po | 0 .../locale}/en/LC_MESSAGES/django.po | 0 .../locale}/en/LC_MESSAGES/djangojs.po | 0 .../locale}/es/LC_MESSAGES/django.po | 0 .../locale}/es/LC_MESSAGES/djangojs.po | 0 .../locale}/fr/LC_MESSAGES/django.po | 0 .../locale}/fr/LC_MESSAGES/djangojs.po | 0 {static => modoboa/static}/css/admin.css | 0 .../static}/css/bootstrap-responsive.css | 0 {static => modoboa/static}/css/bootstrap.css | 0 {static => modoboa/static}/css/custom.css | 0 {static => modoboa/static}/css/datepicker.css | 0 {static => modoboa/static}/css/default.css | 0 {static => modoboa/static}/css/login.css | 0 {static => modoboa/static}/css/logo-icon.png | Bin {static => modoboa/static}/css/logo.png | Bin {static => modoboa/static}/css/modoboa.png | Bin {static => modoboa/static}/css/searchbar.css | 0 {static => modoboa/static}/css/spinner.gif | Bin {static => modoboa/static}/css/viewmail.css | 0 .../img/glyphicons-halflings-white.png | Bin .../static}/img/glyphicons-halflings.png | Bin {static => modoboa/static}/js/admin.js | 0 .../static}/js/autocompleter.js | 0 .../static}/js/bootstrap-datepicker.js | 0 {static => modoboa/static}/js/bootstrap.js | 0 {static => modoboa/static}/js/confirmation.js | 0 .../static}/js/creation_wizard.js | 0 .../static}/js/dynamic_input.js | 0 .../static}/js/editor_config.js | 0 {static => modoboa/static}/js/global.js | 0 {static => modoboa/static}/js/history.js | 0 {static => modoboa/static}/js/jquery-ui.js | 0 .../static}/js/jquery.htmltable.js | 0 {static => modoboa/static}/js/jquery.js | 0 .../js/locales/bootstrap-datepicker.br.js | 0 .../js/locales/bootstrap-datepicker.de.js | 0 .../js/locales/bootstrap-datepicker.es.js | 0 .../js/locales/bootstrap-datepicker.fr.js | 0 .../js/locales/bootstrap-datepicker.is.js | 0 .../js/locales/bootstrap-datepicker.sv.js | 0 .../js/locales/bootstrap-datepicker.tr.js | 0 {static => modoboa/static}/js/notify.js | 0 {static => modoboa/static}/js/poller.js | 0 {static => modoboa/static}/js/searchbar.js | 0 {static => modoboa/static}/pics/answered.png | Bin .../static}/pics/attachment.png | Bin {static => modoboa/static}/pics/collapsed.png | Bin {static => modoboa/static}/pics/expanded.png | Bin {static => modoboa/static}/pics/forwarded.png | Bin {static => modoboa/static}/pics/grippy.png | Bin {static => modoboa/static}/pics/release.png | Bin .../static}/pics/transparent.png | Bin .../templates}/common/buttons_list.html | 0 .../templates}/common/email_searchbar.html | 0 .../templates}/common/error.html | 0 .../templates}/common/generic_field.html | 0 .../common/generic_fields_group.html | 0 .../templates}/common/generic_modal.html | 0 .../templates}/common/generic_modal_form.html | 0 .../templates}/common/mailheaders.html | 0 .../templates}/common/menu.html | 0 .../templates}/common/menulist.html | 0 .../templates}/common/pagination_bar.html | 0 .../templates}/common/parameters.html | 0 .../templates}/common/tabforms.html | 0 .../templates}/common/table_body.html | 0 .../templates}/common/table_head.html | 0 .../templates}/common/tables.html | 0 .../templates}/common/viewmail.html | 0 {templates => modoboa/templates}/fixed.html | 0 {templates => modoboa/templates}/fluid.html | 0 {templates => modoboa/templates}/nlayout.html | 0 .../templates}/registration/login.html | 0 {templates => modoboa/templates}/twocols.html | 0 .../tools}/__init__.py | 0 .../tools/pfxadmin_migrate}/__init__.py | 0 .../tools}/pfxadmin_migrate/migrate.py | 0 .../tools}/pfxadmin_migrate/models.py | 0 urls.py => modoboa/urls.py | 1 - {userprefs => modoboa/userprefs}/__init__.py | 0 {userprefs => modoboa/userprefs}/forms.py | 0 .../userprefs}/templates/userprefs/form.html | 0 .../templates/userprefs/preferences.html | 0 .../templates/userprefs/section.html | 0 modoboa/userprefs/templatetags/__init__.py | 0 .../userprefs}/templatetags/uprefs_extras.py | 0 {userprefs => modoboa/userprefs}/urls.py | 0 {userprefs => modoboa/userprefs}/views.py | 0 requirements.txt | 5 + setup.py | 72 ++++++++ 280 files changed, 260 insertions(+), 10 deletions(-) create mode 100644 MANIFEST.in rename settings_sample.py => doc/settings_sample.py (100%) rename __init__.py => example/__init__.py (100%) create mode 100755 example/manage.py create mode 100644 example/settings.py create mode 100644 example/urls.py rename {admin/migrations => modoboa}/__init__.py (100%) rename {admin => modoboa/admin}/__init__.py (100%) rename {admin => modoboa/admin}/exceptions.py (100%) rename {admin => modoboa/admin}/fixtures/demo.json (100%) rename {admin => modoboa/admin}/fixtures/initial_data.json (100%) rename {admin => modoboa/admin}/fixtures/test_content.json (100%) rename {admin => modoboa/admin}/forms.py (100%) rename {admin => modoboa/admin}/lib.py (100%) rename {admin => modoboa/admin}/migrations/0001_initial.py (100%) rename {admin => modoboa/admin}/migrations/0002_auto__del_field_alias_mbox.py (100%) rename {admin => modoboa/admin}/migrations/0003_auto__add_extension.py (100%) rename {admin => modoboa/admin}/migrations/0004_add_permissions.py (100%) rename {admin => modoboa/admin}/migrations/0005_increase_columns_length.py (100%) rename {admin => modoboa/admin}/migrations/0006_auto__add_domainalias.py (100%) rename {admin => modoboa/admin}/migrations/0007_auto__del_field_alias_full_address__chg_field_alias_address__del_field.py (100%) rename {admin => modoboa/admin}/migrations/0008_update_mailbox_path.py (100%) rename {admin => modoboa/admin}/migrations/0009_auto__add_field_alias_extmboxes.py (100%) rename {admin => modoboa/admin}/migrations/0010_fill_alias_domain.py (100%) rename {admin => modoboa/admin}/migrations/0011_auto__add_objectdates__add_field_domain_dates__add_field_domainalias_d.py (100%) rename {admin => modoboa/admin}/migrations/0012_fill_object_dates.py (100%) rename {admin => modoboa/admin}/migrations/0013_update_mailbox_path.py (100%) rename {admin => modoboa/admin}/migrations/0014_auto__add_unique_domain_name.py (100%) rename {admin => modoboa/admin}/migrations/0015_move_passwords.py (100%) rename {admin => modoboa/admin}/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py (100%) rename {admin => modoboa/admin}/migrations/0017_set_permissions.py (100%) rename {admin => modoboa/admin}/migrations/0018_auto__add_unique_alias_domain_address.py (100%) rename {admin => modoboa/admin}/migrations/0019_set_default_group.py (100%) rename {admin/templatetags => modoboa/admin/migrations}/__init__.py (100%) rename {admin => modoboa/admin}/models.py (100%) rename {admin => modoboa/admin}/scripts/dbcleanup.py (100%) rename {admin => modoboa/admin}/tables.py (100%) rename {admin => modoboa/admin}/templates/admin/dlistform.html (100%) rename {admin => modoboa/admin}/templates/admin/domain_general_form.html (100%) rename {admin => modoboa/admin}/templates/admin/domains.html (100%) rename {admin => modoboa/admin}/templates/admin/editdomainform.html (100%) rename {admin => modoboa/admin}/templates/admin/extensions.html (100%) rename {admin => modoboa/admin}/templates/admin/header.html (100%) rename {admin => modoboa/admin}/templates/admin/identities.html (100%) rename {admin => modoboa/admin}/templates/admin/import_done.html (100%) rename {admin => modoboa/admin}/templates/admin/importform.html (100%) rename {admin => modoboa/admin}/templates/admin/listing.html (100%) rename {admin => modoboa/admin}/templates/admin/mailboxes_raw.html (100%) rename {admin => modoboa/admin}/templates/admin/mailform.html (100%) rename {admin => modoboa/admin}/templates/admin/newaccount.html (100%) rename {admin => modoboa/admin}/templates/admin/newdomainform.html (100%) rename {admin => modoboa/admin}/templates/admin/parameters.html (100%) rename {admin => modoboa/admin}/templates/admin/permsform.html (100%) rename {admin => modoboa/admin}/templates/admin/searchform.html (100%) rename {admin => modoboa/admin}/templates/admin/settings_header.html (100%) rename {extensions/amavis_quarantine => modoboa/admin}/templatetags/__init__.py (100%) rename {admin => modoboa/admin}/templatetags/admin_extras.py (100%) rename {admin => modoboa/admin}/tests.py (100%) rename {admin => modoboa/admin}/urls.py (100%) rename {admin => modoboa/admin}/views.py (100%) rename {auth => modoboa/auth}/__init__.py (100%) rename {auth => modoboa/auth}/forms.py (100%) rename {auth => modoboa/auth}/lib.py (100%) rename {auth => modoboa/auth}/models.py (100%) rename {auth => modoboa/auth}/tests.py (100%) rename {auth => modoboa/auth}/views.py (100%) rename {demo => modoboa/demo}/__init__.py (100%) rename {demo => modoboa/demo}/templates/demo/login_announcement.html (100%) rename {demo => modoboa/demo}/urls.py (100%) rename {demo => modoboa/demo}/views.py (100%) rename {extensions => modoboa/extensions}/__init__.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/__init__.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/cleanup.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/dbrouter.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/forms.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/lib.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/models.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/sql_listing.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/static/amavis_quarantine/css/quarantine.css (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/static/amavis_quarantine/css/selfservice.css (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/static/amavis_quarantine/js/quarantine.js (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/static/amavis_quarantine/js/selfservice.js (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/templates/amavis_quarantine/index.html (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/templates/amavis_quarantine/mailheaders.html (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/templates/amavis_quarantine/viewheader.html (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/templates/amavis_quarantine/viewmail_selfservice.html (100%) rename {extensions/limits/migrations => modoboa/extensions/amavis_quarantine/templatetags}/__init__.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/templatetags/amextras.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/urls.py (100%) rename {extensions => modoboa/extensions}/amavis_quarantine/views.py (100%) rename {extensions => modoboa/extensions}/limits/__init__.py (100%) rename {extensions => modoboa/extensions}/limits/controls.py (100%) rename {extensions => modoboa/extensions}/limits/fixtures/demo.json (100%) rename {extensions => modoboa/extensions}/limits/forms.py (100%) rename {extensions => modoboa/extensions}/limits/lib.py (100%) rename {extensions => modoboa/extensions}/limits/migrations/0001_initial.py (100%) rename {extensions/postfix_autoreply => modoboa/extensions/limits}/migrations/__init__.py (100%) rename {extensions => modoboa/extensions}/limits/models.py (100%) rename {extensions => modoboa/extensions}/limits/templates/limits/poolusage.html (100%) rename {extensions => modoboa/extensions}/limits/urls.py (100%) rename {extensions => modoboa/extensions}/limits/views.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/__init__.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/forms.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/migrations/0001_initial.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/migrations/0002_auto__add_armessage__add_arhistoric.py (100%) rename {extensions/sievefilters/templatetags => modoboa/extensions/postfix_autoreply/migrations}/__init__.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/models.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/scripts/autoreply (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/scripts/autoreply.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/templates/postfix_autoreply/autoreply.html (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/urls.py (100%) rename {extensions => modoboa/extensions}/postfix_autoreply/views.py (100%) rename {extensions => modoboa/extensions}/sievefilters/__init__.py (100%) rename {extensions => modoboa/extensions}/sievefilters/forms.py (100%) rename {extensions => modoboa/extensions}/sievefilters/lib.py (100%) rename {extensions => modoboa/extensions}/sievefilters/static/sievefilters/css/style.css (100%) rename {extensions => modoboa/extensions}/sievefilters/static/sievefilters/js/jquery.dynfields.js (100%) rename {extensions => modoboa/extensions}/sievefilters/static/sievefilters/js/lib.js (100%) rename {extensions => modoboa/extensions}/sievefilters/templates/sievefilters/filter.html (100%) rename {extensions => modoboa/extensions}/sievefilters/templates/sievefilters/guieditor.html (100%) rename {extensions => modoboa/extensions}/sievefilters/templates/sievefilters/index.html (100%) rename {extensions => modoboa/extensions}/sievefilters/templates/sievefilters/rawfilter.html (100%) rename {extensions/webmail => modoboa/extensions/sievefilters}/templatetags/__init__.py (100%) rename {extensions => modoboa/extensions}/sievefilters/templatetags/sfilters_tags.py (100%) rename {extensions => modoboa/extensions}/sievefilters/test.py (100%) rename {extensions => modoboa/extensions}/sievefilters/urls.py (100%) rename {extensions => modoboa/extensions}/sievefilters/views.py (100%) rename {extensions => modoboa/extensions}/stats/__init__.py (100%) rename {extensions => modoboa/extensions}/stats/grapher.py (100%) rename {extensions => modoboa/extensions}/stats/scripts/logparser.py (100%) rename {extensions => modoboa/extensions}/stats/static/stats/css/stats.css (100%) rename {extensions => modoboa/extensions}/stats/static/stats/js/stats.js (100%) rename {extensions => modoboa/extensions}/stats/templates/stats/graphs.html (100%) rename {extensions => modoboa/extensions}/stats/templates/stats/index.html (100%) rename {extensions => modoboa/extensions}/stats/urls.py (100%) rename {extensions => modoboa/extensions}/stats/views.py (100%) rename {extensions => modoboa/extensions}/webmail/__init__.py (100%) rename {extensions => modoboa/extensions}/webmail/exceptions.py (100%) rename {extensions => modoboa/extensions}/webmail/fetch_parser.py (100%) rename {extensions => modoboa/extensions}/webmail/forms.py (100%) rename {extensions => modoboa/extensions}/webmail/imaputils.py (100%) rename {extensions => modoboa/extensions}/webmail/lib.py (100%) rename {extensions => modoboa/extensions}/webmail/middleware.py (100%) rename {extensions => modoboa/extensions}/webmail/static/webmail/css/attachments.css (100%) rename {extensions => modoboa/extensions}/webmail/static/webmail/css/folders.css (100%) rename {extensions => modoboa/extensions}/webmail/static/webmail/css/webmail.css (100%) rename {extensions => modoboa/extensions}/webmail/static/webmail/js/webmail.js (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/attachments.html (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/compose.html (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/folder.html (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/folders.html (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/headers.html (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/index.html (100%) rename {extensions => modoboa/extensions}/webmail/templates/webmail/upload_done.html (100%) rename {lib => modoboa/extensions/webmail/templatetags}/__init__.py (100%) rename {extensions => modoboa/extensions}/webmail/templatetags/webextras.py (100%) rename {extensions => modoboa/extensions}/webmail/urls.py (100%) rename {extensions => modoboa/extensions}/webmail/views.py (100%) rename {lib/migrations => modoboa/lib}/__init__.py (100%) rename {lib => modoboa/lib}/authbackends.py (100%) rename {lib => modoboa/lib}/connections.py (100%) rename {lib => modoboa/lib}/dbutils.py (100%) rename {lib => modoboa/lib}/decorators.py (100%) rename {lib => modoboa/lib}/email_listing.py (100%) rename {lib => modoboa/lib}/emailutils.py (100%) rename {lib => modoboa/lib}/events.py (100%) rename {lib => modoboa/lib}/exceptions.py (100%) rename {lib => modoboa/lib}/fixtures/demo.json (100%) rename {lib => modoboa/lib}/formutils.py (100%) rename {lib => modoboa/lib}/imap_utf7.py (100%) rename {lib => modoboa/lib}/ldaputils.py (100%) rename {lib => modoboa/lib}/middleware.py (100%) rename {lib => modoboa/lib}/migrations/0001_initial.py (100%) rename {lib => modoboa/lib}/migrations/0002_move_secret_key.py (100%) rename {lib/templatetags => modoboa/lib/migrations}/__init__.py (100%) rename {lib => modoboa/lib}/models.py (100%) rename {lib => modoboa/lib}/parameters.py (100%) rename {lib => modoboa/lib}/permissions.py (100%) rename {lib => modoboa/lib}/sysutils.py (100%) rename {lib => modoboa/lib}/tables.py (100%) rename {tools => modoboa/lib/templatetags}/__init__.py (100%) rename {lib => modoboa/lib}/templatetags/libextras.py (100%) rename {lib => modoboa/lib}/tests.py (100%) rename {lib => modoboa/lib}/u2u_decode.py (100%) rename {lib => modoboa/lib}/webutils.py (100%) rename {locale => modoboa/locale}/de/LC_MESSAGES/django.po (100%) rename {locale => modoboa/locale}/de/LC_MESSAGES/djangojs.po (100%) rename {locale => modoboa/locale}/en/LC_MESSAGES/django.po (100%) rename {locale => modoboa/locale}/en/LC_MESSAGES/djangojs.po (100%) rename {locale => modoboa/locale}/es/LC_MESSAGES/django.po (100%) rename {locale => modoboa/locale}/es/LC_MESSAGES/djangojs.po (100%) rename {locale => modoboa/locale}/fr/LC_MESSAGES/django.po (100%) rename {locale => modoboa/locale}/fr/LC_MESSAGES/djangojs.po (100%) rename {static => modoboa/static}/css/admin.css (100%) rename {static => modoboa/static}/css/bootstrap-responsive.css (100%) rename {static => modoboa/static}/css/bootstrap.css (100%) rename {static => modoboa/static}/css/custom.css (100%) rename {static => modoboa/static}/css/datepicker.css (100%) rename {static => modoboa/static}/css/default.css (100%) rename {static => modoboa/static}/css/login.css (100%) rename {static => modoboa/static}/css/logo-icon.png (100%) rename {static => modoboa/static}/css/logo.png (100%) rename {static => modoboa/static}/css/modoboa.png (100%) rename {static => modoboa/static}/css/searchbar.css (100%) rename {static => modoboa/static}/css/spinner.gif (100%) rename {static => modoboa/static}/css/viewmail.css (100%) rename {static => modoboa/static}/img/glyphicons-halflings-white.png (100%) rename {static => modoboa/static}/img/glyphicons-halflings.png (100%) rename {static => modoboa/static}/js/admin.js (100%) rename {static => modoboa/static}/js/autocompleter.js (100%) rename {static => modoboa/static}/js/bootstrap-datepicker.js (100%) rename {static => modoboa/static}/js/bootstrap.js (100%) rename {static => modoboa/static}/js/confirmation.js (100%) rename {static => modoboa/static}/js/creation_wizard.js (100%) rename {static => modoboa/static}/js/dynamic_input.js (100%) rename {static => modoboa/static}/js/editor_config.js (100%) rename {static => modoboa/static}/js/global.js (100%) rename {static => modoboa/static}/js/history.js (100%) rename {static => modoboa/static}/js/jquery-ui.js (100%) rename {static => modoboa/static}/js/jquery.htmltable.js (100%) rename {static => modoboa/static}/js/jquery.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.br.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.de.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.es.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.fr.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.is.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.sv.js (100%) rename {static => modoboa/static}/js/locales/bootstrap-datepicker.tr.js (100%) rename {static => modoboa/static}/js/notify.js (100%) rename {static => modoboa/static}/js/poller.js (100%) rename {static => modoboa/static}/js/searchbar.js (100%) rename {static => modoboa/static}/pics/answered.png (100%) rename {static => modoboa/static}/pics/attachment.png (100%) rename {static => modoboa/static}/pics/collapsed.png (100%) rename {static => modoboa/static}/pics/expanded.png (100%) rename {static => modoboa/static}/pics/forwarded.png (100%) rename {static => modoboa/static}/pics/grippy.png (100%) rename {static => modoboa/static}/pics/release.png (100%) rename {static => modoboa/static}/pics/transparent.png (100%) rename {templates => modoboa/templates}/common/buttons_list.html (100%) rename {templates => modoboa/templates}/common/email_searchbar.html (100%) rename {templates => modoboa/templates}/common/error.html (100%) rename {templates => modoboa/templates}/common/generic_field.html (100%) rename {templates => modoboa/templates}/common/generic_fields_group.html (100%) rename {templates => modoboa/templates}/common/generic_modal.html (100%) rename {templates => modoboa/templates}/common/generic_modal_form.html (100%) rename {templates => modoboa/templates}/common/mailheaders.html (100%) rename {templates => modoboa/templates}/common/menu.html (100%) rename {templates => modoboa/templates}/common/menulist.html (100%) rename {templates => modoboa/templates}/common/pagination_bar.html (100%) rename {templates => modoboa/templates}/common/parameters.html (100%) rename {templates => modoboa/templates}/common/tabforms.html (100%) rename {templates => modoboa/templates}/common/table_body.html (100%) rename {templates => modoboa/templates}/common/table_head.html (100%) rename {templates => modoboa/templates}/common/tables.html (100%) rename {templates => modoboa/templates}/common/viewmail.html (100%) rename {templates => modoboa/templates}/fixed.html (100%) rename {templates => modoboa/templates}/fluid.html (100%) rename {templates => modoboa/templates}/nlayout.html (100%) rename {templates => modoboa/templates}/registration/login.html (100%) rename {templates => modoboa/templates}/twocols.html (100%) rename {tools/pfxadmin_migrate => modoboa/tools}/__init__.py (100%) mode change 100755 => 100644 rename {userprefs/templatetags => modoboa/tools/pfxadmin_migrate}/__init__.py (100%) mode change 100644 => 100755 rename {tools => modoboa/tools}/pfxadmin_migrate/migrate.py (100%) rename {tools => modoboa/tools}/pfxadmin_migrate/models.py (100%) rename urls.py => modoboa/urls.py (94%) rename {userprefs => modoboa/userprefs}/__init__.py (100%) rename {userprefs => modoboa/userprefs}/forms.py (100%) rename {userprefs => modoboa/userprefs}/templates/userprefs/form.html (100%) rename {userprefs => modoboa/userprefs}/templates/userprefs/preferences.html (100%) rename {userprefs => modoboa/userprefs}/templates/userprefs/section.html (100%) create mode 100644 modoboa/userprefs/templatetags/__init__.py rename {userprefs => modoboa/userprefs}/templatetags/uprefs_extras.py (100%) rename {userprefs => modoboa/userprefs}/urls.py (100%) rename {userprefs => modoboa/userprefs}/views.py (100%) create mode 100644 requirements.txt create mode 100644 setup.py diff --git a/.hgignore b/.hgignore index edc3f22d9..262954167 100644 --- a/.hgignore +++ b/.hgignore @@ -1,11 +1,9 @@ .*~$ ^[^\.]+\.pyc ^[^\.]+\.mo -sitestatic -scripts -static/tmp -static/js/ckeditor -settings.py +dist +build +modoboa.egg-info doc/.build doc/.static doc/.templates diff --git a/.tx/config b/.tx/config index 0c434dddb..1120a3f85 100644 --- a/.tx/config +++ b/.tx/config @@ -1,6 +1,6 @@ [modoboa.djangojspo] -file_filter = locale//LC_MESSAGES/djangojs.po -source_file = locale/en/LC_MESSAGES/djangojs.po +file_filter = modoboa/locale//LC_MESSAGES/djangojs.po +source_file = modoboa/locale/en/LC_MESSAGES/djangojs.po source_lang = en type = PO @@ -8,7 +8,7 @@ type = PO host = https://www.transifex.net [modoboa.djangopo] -file_filter = locale//LC_MESSAGES/django.po -source_file = locale/en/LC_MESSAGES/django.po +file_filter = modoboa/locale//LC_MESSAGES/django.po +source_file = modoboa/locale/en/LC_MESSAGES/django.po source_lang = en type = PO diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..6eb4f194b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +include INSTALL COPYING requirements.txt +recursive-include modoboa *.html *.js *.css *.png *.po +recursive-include doc * \ No newline at end of file diff --git a/settings_sample.py b/doc/settings_sample.py similarity index 100% rename from settings_sample.py rename to doc/settings_sample.py diff --git a/__init__.py b/example/__init__.py similarity index 100% rename from __init__.py rename to example/__init__.py diff --git a/example/manage.py b/example/manage.py new file mode 100755 index 000000000..3e4eedc9f --- /dev/null +++ b/example/manage.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +from django.core.management import execute_manager +import imp +try: + imp.find_module('settings') # Assumed to be in the same directory. +except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) + sys.exit(1) + +import settings + +if __name__ == "__main__": + execute_manager(settings) diff --git a/example/settings.py b/example/settings.py new file mode 100644 index 000000000..99d31dc92 --- /dev/null +++ b/example/settings.py @@ -0,0 +1,154 @@ +# Django settings for modoboa project. +import os.path + +DEBUG = False +TEMPLATE_DEBUG = DEBUG + +MODOBOA_DIR = os.path.dirname(__file__) +MODOBOA_WEBPATH = "modoboa/" + +ADMINS = ( + # ('Your Name', 'your_email@domain.com'), +) + +MANAGERS = ADMINS + +DATABASES = { + "default" : { + "ENGINE" : "django.db.backends.", + "NAME" : "modoboa", + "USER" : "", + "PASSWORD" : "", + "HOST" : "", + "PORT" : "", + # MySQL users only + # "OPTIONS" : { + # "init_command" : "SET foreign_key_checks = 0;", + # }, + }, + # "pfxadmin" : { + # "ENGINE" : "django.db.backends.", + # "NAME" : "", + # "USER" : "", + # "PASSWORD" : "" + # }, + # "amavis": { + # "ENGINE" : "django.db.backends.", + # "HOST" : "", + # "NAME" : "", + # "USER" : "", + # "PASSWORD" : "" + # } +} + +DATABASE_ROUTERS = ["modoboa.extensions.amavis_quarantine.dbrouter.AmavisRouter"] + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'America/Chicago' + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'en-us' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +LOGIN_REDIRECT_URL = '/modoboa/admin/' + +# Absolute path to the directory that holds media. +# Example: "/home/media/media.lawrence.com/" +MEDIA_ROOT = os.path.join(MODOBOA_DIR, 'media') + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash if there is a path component (optional in other cases). +# Examples: "http://media.lawrence.com", "http://example.com/media/" +MEDIA_URL = '/media/' + +STATIC_ROOT = os.path.join(MODOBOA_DIR, 'sitestatic') +STATIC_URL = '/sitestatic/' + +# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a +# trailing slash. +# Examples: "http://foo.com/media/", "/media/". +ADMIN_MEDIA_PREFIX = '/media/' + +# Make this unique, and don't share it with anybody. +SECRET_KEY = '2)e+la#y$1b&v!p)s^&4lwpc92o59fye)mj^3^7$jytmvx379d' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.load_template_source', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.locale.LocaleMiddleware', + 'modoboa.lib.middleware.AjaxLoginRedirect', + 'modoboa.lib.middleware.CommonExceptionCatcher', + 'modoboa.lib.middleware.ExtControlMiddleware', +) + +ROOT_URLCONF = 'modoboa.urls' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. + os.path.join(os.path.dirname(__file__), 'templates'), +) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'south', + 'modoboa', + 'modoboa.auth', + 'modoboa.lib', + 'modoboa.admin', + 'modoboa.userprefs', + + # Modoboa extensions here. + 'modoboa.extensions.limits', + 'modoboa.extensions.postfix_autoreply', + 'modoboa.extensions.webmail', + 'modoboa.extensions.stats', + 'modoboa.extensions.amavis_quarantine', + 'modoboa.extensions.sievefilters', + + # Extra tools + # 'modoboa.tools.pfxadmin_migrate', +) + +AUTHENTICATION_BACKENDS = ( + 'modoboa.lib.authbackends.SimpleBackend', + 'django.contrib.auth.backends.ModelBackend', +) + +#SESSION_COOKIE_AGE = 300 + +# +# External LDAP authentication (optional) +# +# import ldap +# from django_auth_ldap.config import LDAPSearch + +# AUTH_LDAP_BIND_DN = "" +# AUTH_LDAP_BIND_PASSWORD = "" +# AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=example,dc=com", +# ldap.SCOPE_SUBTREE, "(uid=%(user)s)") diff --git a/example/urls.py b/example/urls.py new file mode 100644 index 000000000..1a5509985 --- /dev/null +++ b/example/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls.defaults import patterns, include, url + +urlpatterns = patterns('', + url(r'^$', include('modoboa.urls')), +) diff --git a/admin/migrations/__init__.py b/modoboa/__init__.py similarity index 100% rename from admin/migrations/__init__.py rename to modoboa/__init__.py diff --git a/admin/__init__.py b/modoboa/admin/__init__.py similarity index 100% rename from admin/__init__.py rename to modoboa/admin/__init__.py diff --git a/admin/exceptions.py b/modoboa/admin/exceptions.py similarity index 100% rename from admin/exceptions.py rename to modoboa/admin/exceptions.py diff --git a/admin/fixtures/demo.json b/modoboa/admin/fixtures/demo.json similarity index 100% rename from admin/fixtures/demo.json rename to modoboa/admin/fixtures/demo.json diff --git a/admin/fixtures/initial_data.json b/modoboa/admin/fixtures/initial_data.json similarity index 100% rename from admin/fixtures/initial_data.json rename to modoboa/admin/fixtures/initial_data.json diff --git a/admin/fixtures/test_content.json b/modoboa/admin/fixtures/test_content.json similarity index 100% rename from admin/fixtures/test_content.json rename to modoboa/admin/fixtures/test_content.json diff --git a/admin/forms.py b/modoboa/admin/forms.py similarity index 100% rename from admin/forms.py rename to modoboa/admin/forms.py diff --git a/admin/lib.py b/modoboa/admin/lib.py similarity index 100% rename from admin/lib.py rename to modoboa/admin/lib.py diff --git a/admin/migrations/0001_initial.py b/modoboa/admin/migrations/0001_initial.py similarity index 100% rename from admin/migrations/0001_initial.py rename to modoboa/admin/migrations/0001_initial.py diff --git a/admin/migrations/0002_auto__del_field_alias_mbox.py b/modoboa/admin/migrations/0002_auto__del_field_alias_mbox.py similarity index 100% rename from admin/migrations/0002_auto__del_field_alias_mbox.py rename to modoboa/admin/migrations/0002_auto__del_field_alias_mbox.py diff --git a/admin/migrations/0003_auto__add_extension.py b/modoboa/admin/migrations/0003_auto__add_extension.py similarity index 100% rename from admin/migrations/0003_auto__add_extension.py rename to modoboa/admin/migrations/0003_auto__add_extension.py diff --git a/admin/migrations/0004_add_permissions.py b/modoboa/admin/migrations/0004_add_permissions.py similarity index 100% rename from admin/migrations/0004_add_permissions.py rename to modoboa/admin/migrations/0004_add_permissions.py diff --git a/admin/migrations/0005_increase_columns_length.py b/modoboa/admin/migrations/0005_increase_columns_length.py similarity index 100% rename from admin/migrations/0005_increase_columns_length.py rename to modoboa/admin/migrations/0005_increase_columns_length.py diff --git a/admin/migrations/0006_auto__add_domainalias.py b/modoboa/admin/migrations/0006_auto__add_domainalias.py similarity index 100% rename from admin/migrations/0006_auto__add_domainalias.py rename to modoboa/admin/migrations/0006_auto__add_domainalias.py diff --git a/admin/migrations/0007_auto__del_field_alias_full_address__chg_field_alias_address__del_field.py b/modoboa/admin/migrations/0007_auto__del_field_alias_full_address__chg_field_alias_address__del_field.py similarity index 100% rename from admin/migrations/0007_auto__del_field_alias_full_address__chg_field_alias_address__del_field.py rename to modoboa/admin/migrations/0007_auto__del_field_alias_full_address__chg_field_alias_address__del_field.py diff --git a/admin/migrations/0008_update_mailbox_path.py b/modoboa/admin/migrations/0008_update_mailbox_path.py similarity index 100% rename from admin/migrations/0008_update_mailbox_path.py rename to modoboa/admin/migrations/0008_update_mailbox_path.py diff --git a/admin/migrations/0009_auto__add_field_alias_extmboxes.py b/modoboa/admin/migrations/0009_auto__add_field_alias_extmboxes.py similarity index 100% rename from admin/migrations/0009_auto__add_field_alias_extmboxes.py rename to modoboa/admin/migrations/0009_auto__add_field_alias_extmboxes.py diff --git a/admin/migrations/0010_fill_alias_domain.py b/modoboa/admin/migrations/0010_fill_alias_domain.py similarity index 100% rename from admin/migrations/0010_fill_alias_domain.py rename to modoboa/admin/migrations/0010_fill_alias_domain.py diff --git a/admin/migrations/0011_auto__add_objectdates__add_field_domain_dates__add_field_domainalias_d.py b/modoboa/admin/migrations/0011_auto__add_objectdates__add_field_domain_dates__add_field_domainalias_d.py similarity index 100% rename from admin/migrations/0011_auto__add_objectdates__add_field_domain_dates__add_field_domainalias_d.py rename to modoboa/admin/migrations/0011_auto__add_objectdates__add_field_domain_dates__add_field_domainalias_d.py diff --git a/admin/migrations/0012_fill_object_dates.py b/modoboa/admin/migrations/0012_fill_object_dates.py similarity index 100% rename from admin/migrations/0012_fill_object_dates.py rename to modoboa/admin/migrations/0012_fill_object_dates.py diff --git a/admin/migrations/0013_update_mailbox_path.py b/modoboa/admin/migrations/0013_update_mailbox_path.py similarity index 100% rename from admin/migrations/0013_update_mailbox_path.py rename to modoboa/admin/migrations/0013_update_mailbox_path.py diff --git a/admin/migrations/0014_auto__add_unique_domain_name.py b/modoboa/admin/migrations/0014_auto__add_unique_domain_name.py similarity index 100% rename from admin/migrations/0014_auto__add_unique_domain_name.py rename to modoboa/admin/migrations/0014_auto__add_unique_domain_name.py diff --git a/admin/migrations/0015_move_passwords.py b/modoboa/admin/migrations/0015_move_passwords.py similarity index 100% rename from admin/migrations/0015_move_passwords.py rename to modoboa/admin/migrations/0015_move_passwords.py diff --git a/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py b/modoboa/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py similarity index 100% rename from admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py rename to modoboa/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py diff --git a/admin/migrations/0017_set_permissions.py b/modoboa/admin/migrations/0017_set_permissions.py similarity index 100% rename from admin/migrations/0017_set_permissions.py rename to modoboa/admin/migrations/0017_set_permissions.py diff --git a/admin/migrations/0018_auto__add_unique_alias_domain_address.py b/modoboa/admin/migrations/0018_auto__add_unique_alias_domain_address.py similarity index 100% rename from admin/migrations/0018_auto__add_unique_alias_domain_address.py rename to modoboa/admin/migrations/0018_auto__add_unique_alias_domain_address.py diff --git a/admin/migrations/0019_set_default_group.py b/modoboa/admin/migrations/0019_set_default_group.py similarity index 100% rename from admin/migrations/0019_set_default_group.py rename to modoboa/admin/migrations/0019_set_default_group.py diff --git a/admin/templatetags/__init__.py b/modoboa/admin/migrations/__init__.py similarity index 100% rename from admin/templatetags/__init__.py rename to modoboa/admin/migrations/__init__.py diff --git a/admin/models.py b/modoboa/admin/models.py similarity index 100% rename from admin/models.py rename to modoboa/admin/models.py diff --git a/admin/scripts/dbcleanup.py b/modoboa/admin/scripts/dbcleanup.py similarity index 100% rename from admin/scripts/dbcleanup.py rename to modoboa/admin/scripts/dbcleanup.py diff --git a/admin/tables.py b/modoboa/admin/tables.py similarity index 100% rename from admin/tables.py rename to modoboa/admin/tables.py diff --git a/admin/templates/admin/dlistform.html b/modoboa/admin/templates/admin/dlistform.html similarity index 100% rename from admin/templates/admin/dlistform.html rename to modoboa/admin/templates/admin/dlistform.html diff --git a/admin/templates/admin/domain_general_form.html b/modoboa/admin/templates/admin/domain_general_form.html similarity index 100% rename from admin/templates/admin/domain_general_form.html rename to modoboa/admin/templates/admin/domain_general_form.html diff --git a/admin/templates/admin/domains.html b/modoboa/admin/templates/admin/domains.html similarity index 100% rename from admin/templates/admin/domains.html rename to modoboa/admin/templates/admin/domains.html diff --git a/admin/templates/admin/editdomainform.html b/modoboa/admin/templates/admin/editdomainform.html similarity index 100% rename from admin/templates/admin/editdomainform.html rename to modoboa/admin/templates/admin/editdomainform.html diff --git a/admin/templates/admin/extensions.html b/modoboa/admin/templates/admin/extensions.html similarity index 100% rename from admin/templates/admin/extensions.html rename to modoboa/admin/templates/admin/extensions.html diff --git a/admin/templates/admin/header.html b/modoboa/admin/templates/admin/header.html similarity index 100% rename from admin/templates/admin/header.html rename to modoboa/admin/templates/admin/header.html diff --git a/admin/templates/admin/identities.html b/modoboa/admin/templates/admin/identities.html similarity index 100% rename from admin/templates/admin/identities.html rename to modoboa/admin/templates/admin/identities.html diff --git a/admin/templates/admin/import_done.html b/modoboa/admin/templates/admin/import_done.html similarity index 100% rename from admin/templates/admin/import_done.html rename to modoboa/admin/templates/admin/import_done.html diff --git a/admin/templates/admin/importform.html b/modoboa/admin/templates/admin/importform.html similarity index 100% rename from admin/templates/admin/importform.html rename to modoboa/admin/templates/admin/importform.html diff --git a/admin/templates/admin/listing.html b/modoboa/admin/templates/admin/listing.html similarity index 100% rename from admin/templates/admin/listing.html rename to modoboa/admin/templates/admin/listing.html diff --git a/admin/templates/admin/mailboxes_raw.html b/modoboa/admin/templates/admin/mailboxes_raw.html similarity index 100% rename from admin/templates/admin/mailboxes_raw.html rename to modoboa/admin/templates/admin/mailboxes_raw.html diff --git a/admin/templates/admin/mailform.html b/modoboa/admin/templates/admin/mailform.html similarity index 100% rename from admin/templates/admin/mailform.html rename to modoboa/admin/templates/admin/mailform.html diff --git a/admin/templates/admin/newaccount.html b/modoboa/admin/templates/admin/newaccount.html similarity index 100% rename from admin/templates/admin/newaccount.html rename to modoboa/admin/templates/admin/newaccount.html diff --git a/admin/templates/admin/newdomainform.html b/modoboa/admin/templates/admin/newdomainform.html similarity index 100% rename from admin/templates/admin/newdomainform.html rename to modoboa/admin/templates/admin/newdomainform.html diff --git a/admin/templates/admin/parameters.html b/modoboa/admin/templates/admin/parameters.html similarity index 100% rename from admin/templates/admin/parameters.html rename to modoboa/admin/templates/admin/parameters.html diff --git a/admin/templates/admin/permsform.html b/modoboa/admin/templates/admin/permsform.html similarity index 100% rename from admin/templates/admin/permsform.html rename to modoboa/admin/templates/admin/permsform.html diff --git a/admin/templates/admin/searchform.html b/modoboa/admin/templates/admin/searchform.html similarity index 100% rename from admin/templates/admin/searchform.html rename to modoboa/admin/templates/admin/searchform.html diff --git a/admin/templates/admin/settings_header.html b/modoboa/admin/templates/admin/settings_header.html similarity index 100% rename from admin/templates/admin/settings_header.html rename to modoboa/admin/templates/admin/settings_header.html diff --git a/extensions/amavis_quarantine/templatetags/__init__.py b/modoboa/admin/templatetags/__init__.py similarity index 100% rename from extensions/amavis_quarantine/templatetags/__init__.py rename to modoboa/admin/templatetags/__init__.py diff --git a/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py similarity index 100% rename from admin/templatetags/admin_extras.py rename to modoboa/admin/templatetags/admin_extras.py diff --git a/admin/tests.py b/modoboa/admin/tests.py similarity index 100% rename from admin/tests.py rename to modoboa/admin/tests.py diff --git a/admin/urls.py b/modoboa/admin/urls.py similarity index 100% rename from admin/urls.py rename to modoboa/admin/urls.py diff --git a/admin/views.py b/modoboa/admin/views.py similarity index 100% rename from admin/views.py rename to modoboa/admin/views.py diff --git a/auth/__init__.py b/modoboa/auth/__init__.py similarity index 100% rename from auth/__init__.py rename to modoboa/auth/__init__.py diff --git a/auth/forms.py b/modoboa/auth/forms.py similarity index 100% rename from auth/forms.py rename to modoboa/auth/forms.py diff --git a/auth/lib.py b/modoboa/auth/lib.py similarity index 100% rename from auth/lib.py rename to modoboa/auth/lib.py diff --git a/auth/models.py b/modoboa/auth/models.py similarity index 100% rename from auth/models.py rename to modoboa/auth/models.py diff --git a/auth/tests.py b/modoboa/auth/tests.py similarity index 100% rename from auth/tests.py rename to modoboa/auth/tests.py diff --git a/auth/views.py b/modoboa/auth/views.py similarity index 100% rename from auth/views.py rename to modoboa/auth/views.py diff --git a/demo/__init__.py b/modoboa/demo/__init__.py similarity index 100% rename from demo/__init__.py rename to modoboa/demo/__init__.py diff --git a/demo/templates/demo/login_announcement.html b/modoboa/demo/templates/demo/login_announcement.html similarity index 100% rename from demo/templates/demo/login_announcement.html rename to modoboa/demo/templates/demo/login_announcement.html diff --git a/demo/urls.py b/modoboa/demo/urls.py similarity index 100% rename from demo/urls.py rename to modoboa/demo/urls.py diff --git a/demo/views.py b/modoboa/demo/views.py similarity index 100% rename from demo/views.py rename to modoboa/demo/views.py diff --git a/extensions/__init__.py b/modoboa/extensions/__init__.py similarity index 100% rename from extensions/__init__.py rename to modoboa/extensions/__init__.py diff --git a/extensions/amavis_quarantine/__init__.py b/modoboa/extensions/amavis_quarantine/__init__.py similarity index 100% rename from extensions/amavis_quarantine/__init__.py rename to modoboa/extensions/amavis_quarantine/__init__.py diff --git a/extensions/amavis_quarantine/cleanup.py b/modoboa/extensions/amavis_quarantine/cleanup.py similarity index 100% rename from extensions/amavis_quarantine/cleanup.py rename to modoboa/extensions/amavis_quarantine/cleanup.py diff --git a/extensions/amavis_quarantine/dbrouter.py b/modoboa/extensions/amavis_quarantine/dbrouter.py similarity index 100% rename from extensions/amavis_quarantine/dbrouter.py rename to modoboa/extensions/amavis_quarantine/dbrouter.py diff --git a/extensions/amavis_quarantine/forms.py b/modoboa/extensions/amavis_quarantine/forms.py similarity index 100% rename from extensions/amavis_quarantine/forms.py rename to modoboa/extensions/amavis_quarantine/forms.py diff --git a/extensions/amavis_quarantine/lib.py b/modoboa/extensions/amavis_quarantine/lib.py similarity index 100% rename from extensions/amavis_quarantine/lib.py rename to modoboa/extensions/amavis_quarantine/lib.py diff --git a/extensions/amavis_quarantine/models.py b/modoboa/extensions/amavis_quarantine/models.py similarity index 100% rename from extensions/amavis_quarantine/models.py rename to modoboa/extensions/amavis_quarantine/models.py diff --git a/extensions/amavis_quarantine/sql_listing.py b/modoboa/extensions/amavis_quarantine/sql_listing.py similarity index 100% rename from extensions/amavis_quarantine/sql_listing.py rename to modoboa/extensions/amavis_quarantine/sql_listing.py diff --git a/extensions/amavis_quarantine/static/amavis_quarantine/css/quarantine.css b/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/quarantine.css similarity index 100% rename from extensions/amavis_quarantine/static/amavis_quarantine/css/quarantine.css rename to modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/quarantine.css diff --git a/extensions/amavis_quarantine/static/amavis_quarantine/css/selfservice.css b/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/selfservice.css similarity index 100% rename from extensions/amavis_quarantine/static/amavis_quarantine/css/selfservice.css rename to modoboa/extensions/amavis_quarantine/static/amavis_quarantine/css/selfservice.css diff --git a/extensions/amavis_quarantine/static/amavis_quarantine/js/quarantine.js b/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/quarantine.js similarity index 100% rename from extensions/amavis_quarantine/static/amavis_quarantine/js/quarantine.js rename to modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/quarantine.js diff --git a/extensions/amavis_quarantine/static/amavis_quarantine/js/selfservice.js b/modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/selfservice.js similarity index 100% rename from extensions/amavis_quarantine/static/amavis_quarantine/js/selfservice.js rename to modoboa/extensions/amavis_quarantine/static/amavis_quarantine/js/selfservice.js diff --git a/extensions/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html b/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html similarity index 100% rename from extensions/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html rename to modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/getmailcontent.html diff --git a/extensions/amavis_quarantine/templates/amavis_quarantine/index.html b/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/index.html similarity index 100% rename from extensions/amavis_quarantine/templates/amavis_quarantine/index.html rename to modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/index.html diff --git a/extensions/amavis_quarantine/templates/amavis_quarantine/mailheaders.html b/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/mailheaders.html similarity index 100% rename from extensions/amavis_quarantine/templates/amavis_quarantine/mailheaders.html rename to modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/mailheaders.html diff --git a/extensions/amavis_quarantine/templates/amavis_quarantine/viewheader.html b/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/viewheader.html similarity index 100% rename from extensions/amavis_quarantine/templates/amavis_quarantine/viewheader.html rename to modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/viewheader.html diff --git a/extensions/amavis_quarantine/templates/amavis_quarantine/viewmail_selfservice.html b/modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/viewmail_selfservice.html similarity index 100% rename from extensions/amavis_quarantine/templates/amavis_quarantine/viewmail_selfservice.html rename to modoboa/extensions/amavis_quarantine/templates/amavis_quarantine/viewmail_selfservice.html diff --git a/extensions/limits/migrations/__init__.py b/modoboa/extensions/amavis_quarantine/templatetags/__init__.py similarity index 100% rename from extensions/limits/migrations/__init__.py rename to modoboa/extensions/amavis_quarantine/templatetags/__init__.py diff --git a/extensions/amavis_quarantine/templatetags/amextras.py b/modoboa/extensions/amavis_quarantine/templatetags/amextras.py similarity index 100% rename from extensions/amavis_quarantine/templatetags/amextras.py rename to modoboa/extensions/amavis_quarantine/templatetags/amextras.py diff --git a/extensions/amavis_quarantine/urls.py b/modoboa/extensions/amavis_quarantine/urls.py similarity index 100% rename from extensions/amavis_quarantine/urls.py rename to modoboa/extensions/amavis_quarantine/urls.py diff --git a/extensions/amavis_quarantine/views.py b/modoboa/extensions/amavis_quarantine/views.py similarity index 100% rename from extensions/amavis_quarantine/views.py rename to modoboa/extensions/amavis_quarantine/views.py diff --git a/extensions/limits/__init__.py b/modoboa/extensions/limits/__init__.py similarity index 100% rename from extensions/limits/__init__.py rename to modoboa/extensions/limits/__init__.py diff --git a/extensions/limits/controls.py b/modoboa/extensions/limits/controls.py similarity index 100% rename from extensions/limits/controls.py rename to modoboa/extensions/limits/controls.py diff --git a/extensions/limits/fixtures/demo.json b/modoboa/extensions/limits/fixtures/demo.json similarity index 100% rename from extensions/limits/fixtures/demo.json rename to modoboa/extensions/limits/fixtures/demo.json diff --git a/extensions/limits/forms.py b/modoboa/extensions/limits/forms.py similarity index 100% rename from extensions/limits/forms.py rename to modoboa/extensions/limits/forms.py diff --git a/extensions/limits/lib.py b/modoboa/extensions/limits/lib.py similarity index 100% rename from extensions/limits/lib.py rename to modoboa/extensions/limits/lib.py diff --git a/extensions/limits/migrations/0001_initial.py b/modoboa/extensions/limits/migrations/0001_initial.py similarity index 100% rename from extensions/limits/migrations/0001_initial.py rename to modoboa/extensions/limits/migrations/0001_initial.py diff --git a/extensions/postfix_autoreply/migrations/__init__.py b/modoboa/extensions/limits/migrations/__init__.py similarity index 100% rename from extensions/postfix_autoreply/migrations/__init__.py rename to modoboa/extensions/limits/migrations/__init__.py diff --git a/extensions/limits/models.py b/modoboa/extensions/limits/models.py similarity index 100% rename from extensions/limits/models.py rename to modoboa/extensions/limits/models.py diff --git a/extensions/limits/templates/limits/poolusage.html b/modoboa/extensions/limits/templates/limits/poolusage.html similarity index 100% rename from extensions/limits/templates/limits/poolusage.html rename to modoboa/extensions/limits/templates/limits/poolusage.html diff --git a/extensions/limits/urls.py b/modoboa/extensions/limits/urls.py similarity index 100% rename from extensions/limits/urls.py rename to modoboa/extensions/limits/urls.py diff --git a/extensions/limits/views.py b/modoboa/extensions/limits/views.py similarity index 100% rename from extensions/limits/views.py rename to modoboa/extensions/limits/views.py diff --git a/extensions/postfix_autoreply/__init__.py b/modoboa/extensions/postfix_autoreply/__init__.py similarity index 100% rename from extensions/postfix_autoreply/__init__.py rename to modoboa/extensions/postfix_autoreply/__init__.py diff --git a/extensions/postfix_autoreply/forms.py b/modoboa/extensions/postfix_autoreply/forms.py similarity index 100% rename from extensions/postfix_autoreply/forms.py rename to modoboa/extensions/postfix_autoreply/forms.py diff --git a/extensions/postfix_autoreply/migrations/0001_initial.py b/modoboa/extensions/postfix_autoreply/migrations/0001_initial.py similarity index 100% rename from extensions/postfix_autoreply/migrations/0001_initial.py rename to modoboa/extensions/postfix_autoreply/migrations/0001_initial.py diff --git a/extensions/postfix_autoreply/migrations/0002_auto__add_armessage__add_arhistoric.py b/modoboa/extensions/postfix_autoreply/migrations/0002_auto__add_armessage__add_arhistoric.py similarity index 100% rename from extensions/postfix_autoreply/migrations/0002_auto__add_armessage__add_arhistoric.py rename to modoboa/extensions/postfix_autoreply/migrations/0002_auto__add_armessage__add_arhistoric.py diff --git a/extensions/sievefilters/templatetags/__init__.py b/modoboa/extensions/postfix_autoreply/migrations/__init__.py similarity index 100% rename from extensions/sievefilters/templatetags/__init__.py rename to modoboa/extensions/postfix_autoreply/migrations/__init__.py diff --git a/extensions/postfix_autoreply/models.py b/modoboa/extensions/postfix_autoreply/models.py similarity index 100% rename from extensions/postfix_autoreply/models.py rename to modoboa/extensions/postfix_autoreply/models.py diff --git a/extensions/postfix_autoreply/scripts/autoreply b/modoboa/extensions/postfix_autoreply/scripts/autoreply similarity index 100% rename from extensions/postfix_autoreply/scripts/autoreply rename to modoboa/extensions/postfix_autoreply/scripts/autoreply diff --git a/extensions/postfix_autoreply/scripts/autoreply.py b/modoboa/extensions/postfix_autoreply/scripts/autoreply.py similarity index 100% rename from extensions/postfix_autoreply/scripts/autoreply.py rename to modoboa/extensions/postfix_autoreply/scripts/autoreply.py diff --git a/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html b/modoboa/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html similarity index 100% rename from extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html rename to modoboa/extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html diff --git a/extensions/postfix_autoreply/urls.py b/modoboa/extensions/postfix_autoreply/urls.py similarity index 100% rename from extensions/postfix_autoreply/urls.py rename to modoboa/extensions/postfix_autoreply/urls.py diff --git a/extensions/postfix_autoreply/views.py b/modoboa/extensions/postfix_autoreply/views.py similarity index 100% rename from extensions/postfix_autoreply/views.py rename to modoboa/extensions/postfix_autoreply/views.py diff --git a/extensions/sievefilters/__init__.py b/modoboa/extensions/sievefilters/__init__.py similarity index 100% rename from extensions/sievefilters/__init__.py rename to modoboa/extensions/sievefilters/__init__.py diff --git a/extensions/sievefilters/forms.py b/modoboa/extensions/sievefilters/forms.py similarity index 100% rename from extensions/sievefilters/forms.py rename to modoboa/extensions/sievefilters/forms.py diff --git a/extensions/sievefilters/lib.py b/modoboa/extensions/sievefilters/lib.py similarity index 100% rename from extensions/sievefilters/lib.py rename to modoboa/extensions/sievefilters/lib.py diff --git a/extensions/sievefilters/static/sievefilters/css/style.css b/modoboa/extensions/sievefilters/static/sievefilters/css/style.css similarity index 100% rename from extensions/sievefilters/static/sievefilters/css/style.css rename to modoboa/extensions/sievefilters/static/sievefilters/css/style.css diff --git a/extensions/sievefilters/static/sievefilters/js/jquery.dynfields.js b/modoboa/extensions/sievefilters/static/sievefilters/js/jquery.dynfields.js similarity index 100% rename from extensions/sievefilters/static/sievefilters/js/jquery.dynfields.js rename to modoboa/extensions/sievefilters/static/sievefilters/js/jquery.dynfields.js diff --git a/extensions/sievefilters/static/sievefilters/js/lib.js b/modoboa/extensions/sievefilters/static/sievefilters/js/lib.js similarity index 100% rename from extensions/sievefilters/static/sievefilters/js/lib.js rename to modoboa/extensions/sievefilters/static/sievefilters/js/lib.js diff --git a/extensions/sievefilters/templates/sievefilters/filter.html b/modoboa/extensions/sievefilters/templates/sievefilters/filter.html similarity index 100% rename from extensions/sievefilters/templates/sievefilters/filter.html rename to modoboa/extensions/sievefilters/templates/sievefilters/filter.html diff --git a/extensions/sievefilters/templates/sievefilters/guieditor.html b/modoboa/extensions/sievefilters/templates/sievefilters/guieditor.html similarity index 100% rename from extensions/sievefilters/templates/sievefilters/guieditor.html rename to modoboa/extensions/sievefilters/templates/sievefilters/guieditor.html diff --git a/extensions/sievefilters/templates/sievefilters/index.html b/modoboa/extensions/sievefilters/templates/sievefilters/index.html similarity index 100% rename from extensions/sievefilters/templates/sievefilters/index.html rename to modoboa/extensions/sievefilters/templates/sievefilters/index.html diff --git a/extensions/sievefilters/templates/sievefilters/rawfilter.html b/modoboa/extensions/sievefilters/templates/sievefilters/rawfilter.html similarity index 100% rename from extensions/sievefilters/templates/sievefilters/rawfilter.html rename to modoboa/extensions/sievefilters/templates/sievefilters/rawfilter.html diff --git a/extensions/webmail/templatetags/__init__.py b/modoboa/extensions/sievefilters/templatetags/__init__.py similarity index 100% rename from extensions/webmail/templatetags/__init__.py rename to modoboa/extensions/sievefilters/templatetags/__init__.py diff --git a/extensions/sievefilters/templatetags/sfilters_tags.py b/modoboa/extensions/sievefilters/templatetags/sfilters_tags.py similarity index 100% rename from extensions/sievefilters/templatetags/sfilters_tags.py rename to modoboa/extensions/sievefilters/templatetags/sfilters_tags.py diff --git a/extensions/sievefilters/test.py b/modoboa/extensions/sievefilters/test.py similarity index 100% rename from extensions/sievefilters/test.py rename to modoboa/extensions/sievefilters/test.py diff --git a/extensions/sievefilters/urls.py b/modoboa/extensions/sievefilters/urls.py similarity index 100% rename from extensions/sievefilters/urls.py rename to modoboa/extensions/sievefilters/urls.py diff --git a/extensions/sievefilters/views.py b/modoboa/extensions/sievefilters/views.py similarity index 100% rename from extensions/sievefilters/views.py rename to modoboa/extensions/sievefilters/views.py diff --git a/extensions/stats/__init__.py b/modoboa/extensions/stats/__init__.py similarity index 100% rename from extensions/stats/__init__.py rename to modoboa/extensions/stats/__init__.py diff --git a/extensions/stats/grapher.py b/modoboa/extensions/stats/grapher.py similarity index 100% rename from extensions/stats/grapher.py rename to modoboa/extensions/stats/grapher.py diff --git a/extensions/stats/scripts/logparser.py b/modoboa/extensions/stats/scripts/logparser.py similarity index 100% rename from extensions/stats/scripts/logparser.py rename to modoboa/extensions/stats/scripts/logparser.py diff --git a/extensions/stats/static/stats/css/stats.css b/modoboa/extensions/stats/static/stats/css/stats.css similarity index 100% rename from extensions/stats/static/stats/css/stats.css rename to modoboa/extensions/stats/static/stats/css/stats.css diff --git a/extensions/stats/static/stats/js/stats.js b/modoboa/extensions/stats/static/stats/js/stats.js similarity index 100% rename from extensions/stats/static/stats/js/stats.js rename to modoboa/extensions/stats/static/stats/js/stats.js diff --git a/extensions/stats/templates/stats/graphs.html b/modoboa/extensions/stats/templates/stats/graphs.html similarity index 100% rename from extensions/stats/templates/stats/graphs.html rename to modoboa/extensions/stats/templates/stats/graphs.html diff --git a/extensions/stats/templates/stats/index.html b/modoboa/extensions/stats/templates/stats/index.html similarity index 100% rename from extensions/stats/templates/stats/index.html rename to modoboa/extensions/stats/templates/stats/index.html diff --git a/extensions/stats/urls.py b/modoboa/extensions/stats/urls.py similarity index 100% rename from extensions/stats/urls.py rename to modoboa/extensions/stats/urls.py diff --git a/extensions/stats/views.py b/modoboa/extensions/stats/views.py similarity index 100% rename from extensions/stats/views.py rename to modoboa/extensions/stats/views.py diff --git a/extensions/webmail/__init__.py b/modoboa/extensions/webmail/__init__.py similarity index 100% rename from extensions/webmail/__init__.py rename to modoboa/extensions/webmail/__init__.py diff --git a/extensions/webmail/exceptions.py b/modoboa/extensions/webmail/exceptions.py similarity index 100% rename from extensions/webmail/exceptions.py rename to modoboa/extensions/webmail/exceptions.py diff --git a/extensions/webmail/fetch_parser.py b/modoboa/extensions/webmail/fetch_parser.py similarity index 100% rename from extensions/webmail/fetch_parser.py rename to modoboa/extensions/webmail/fetch_parser.py diff --git a/extensions/webmail/forms.py b/modoboa/extensions/webmail/forms.py similarity index 100% rename from extensions/webmail/forms.py rename to modoboa/extensions/webmail/forms.py diff --git a/extensions/webmail/imaputils.py b/modoboa/extensions/webmail/imaputils.py similarity index 100% rename from extensions/webmail/imaputils.py rename to modoboa/extensions/webmail/imaputils.py diff --git a/extensions/webmail/lib.py b/modoboa/extensions/webmail/lib.py similarity index 100% rename from extensions/webmail/lib.py rename to modoboa/extensions/webmail/lib.py diff --git a/extensions/webmail/middleware.py b/modoboa/extensions/webmail/middleware.py similarity index 100% rename from extensions/webmail/middleware.py rename to modoboa/extensions/webmail/middleware.py diff --git a/extensions/webmail/static/webmail/css/attachments.css b/modoboa/extensions/webmail/static/webmail/css/attachments.css similarity index 100% rename from extensions/webmail/static/webmail/css/attachments.css rename to modoboa/extensions/webmail/static/webmail/css/attachments.css diff --git a/extensions/webmail/static/webmail/css/folders.css b/modoboa/extensions/webmail/static/webmail/css/folders.css similarity index 100% rename from extensions/webmail/static/webmail/css/folders.css rename to modoboa/extensions/webmail/static/webmail/css/folders.css diff --git a/extensions/webmail/static/webmail/css/webmail.css b/modoboa/extensions/webmail/static/webmail/css/webmail.css similarity index 100% rename from extensions/webmail/static/webmail/css/webmail.css rename to modoboa/extensions/webmail/static/webmail/css/webmail.css diff --git a/extensions/webmail/static/webmail/js/webmail.js b/modoboa/extensions/webmail/static/webmail/js/webmail.js similarity index 100% rename from extensions/webmail/static/webmail/js/webmail.js rename to modoboa/extensions/webmail/static/webmail/js/webmail.js diff --git a/extensions/webmail/templates/webmail/attachments.html b/modoboa/extensions/webmail/templates/webmail/attachments.html similarity index 100% rename from extensions/webmail/templates/webmail/attachments.html rename to modoboa/extensions/webmail/templates/webmail/attachments.html diff --git a/extensions/webmail/templates/webmail/compose.html b/modoboa/extensions/webmail/templates/webmail/compose.html similarity index 100% rename from extensions/webmail/templates/webmail/compose.html rename to modoboa/extensions/webmail/templates/webmail/compose.html diff --git a/extensions/webmail/templates/webmail/folder.html b/modoboa/extensions/webmail/templates/webmail/folder.html similarity index 100% rename from extensions/webmail/templates/webmail/folder.html rename to modoboa/extensions/webmail/templates/webmail/folder.html diff --git a/extensions/webmail/templates/webmail/folders.html b/modoboa/extensions/webmail/templates/webmail/folders.html similarity index 100% rename from extensions/webmail/templates/webmail/folders.html rename to modoboa/extensions/webmail/templates/webmail/folders.html diff --git a/extensions/webmail/templates/webmail/headers.html b/modoboa/extensions/webmail/templates/webmail/headers.html similarity index 100% rename from extensions/webmail/templates/webmail/headers.html rename to modoboa/extensions/webmail/templates/webmail/headers.html diff --git a/extensions/webmail/templates/webmail/index.html b/modoboa/extensions/webmail/templates/webmail/index.html similarity index 100% rename from extensions/webmail/templates/webmail/index.html rename to modoboa/extensions/webmail/templates/webmail/index.html diff --git a/extensions/webmail/templates/webmail/upload_done.html b/modoboa/extensions/webmail/templates/webmail/upload_done.html similarity index 100% rename from extensions/webmail/templates/webmail/upload_done.html rename to modoboa/extensions/webmail/templates/webmail/upload_done.html diff --git a/lib/__init__.py b/modoboa/extensions/webmail/templatetags/__init__.py similarity index 100% rename from lib/__init__.py rename to modoboa/extensions/webmail/templatetags/__init__.py diff --git a/extensions/webmail/templatetags/webextras.py b/modoboa/extensions/webmail/templatetags/webextras.py similarity index 100% rename from extensions/webmail/templatetags/webextras.py rename to modoboa/extensions/webmail/templatetags/webextras.py diff --git a/extensions/webmail/urls.py b/modoboa/extensions/webmail/urls.py similarity index 100% rename from extensions/webmail/urls.py rename to modoboa/extensions/webmail/urls.py diff --git a/extensions/webmail/views.py b/modoboa/extensions/webmail/views.py similarity index 100% rename from extensions/webmail/views.py rename to modoboa/extensions/webmail/views.py diff --git a/lib/migrations/__init__.py b/modoboa/lib/__init__.py similarity index 100% rename from lib/migrations/__init__.py rename to modoboa/lib/__init__.py diff --git a/lib/authbackends.py b/modoboa/lib/authbackends.py similarity index 100% rename from lib/authbackends.py rename to modoboa/lib/authbackends.py diff --git a/lib/connections.py b/modoboa/lib/connections.py similarity index 100% rename from lib/connections.py rename to modoboa/lib/connections.py diff --git a/lib/dbutils.py b/modoboa/lib/dbutils.py similarity index 100% rename from lib/dbutils.py rename to modoboa/lib/dbutils.py diff --git a/lib/decorators.py b/modoboa/lib/decorators.py similarity index 100% rename from lib/decorators.py rename to modoboa/lib/decorators.py diff --git a/lib/email_listing.py b/modoboa/lib/email_listing.py similarity index 100% rename from lib/email_listing.py rename to modoboa/lib/email_listing.py diff --git a/lib/emailutils.py b/modoboa/lib/emailutils.py similarity index 100% rename from lib/emailutils.py rename to modoboa/lib/emailutils.py diff --git a/lib/events.py b/modoboa/lib/events.py similarity index 100% rename from lib/events.py rename to modoboa/lib/events.py diff --git a/lib/exceptions.py b/modoboa/lib/exceptions.py similarity index 100% rename from lib/exceptions.py rename to modoboa/lib/exceptions.py diff --git a/lib/fixtures/demo.json b/modoboa/lib/fixtures/demo.json similarity index 100% rename from lib/fixtures/demo.json rename to modoboa/lib/fixtures/demo.json diff --git a/lib/formutils.py b/modoboa/lib/formutils.py similarity index 100% rename from lib/formutils.py rename to modoboa/lib/formutils.py diff --git a/lib/imap_utf7.py b/modoboa/lib/imap_utf7.py similarity index 100% rename from lib/imap_utf7.py rename to modoboa/lib/imap_utf7.py diff --git a/lib/ldaputils.py b/modoboa/lib/ldaputils.py similarity index 100% rename from lib/ldaputils.py rename to modoboa/lib/ldaputils.py diff --git a/lib/middleware.py b/modoboa/lib/middleware.py similarity index 100% rename from lib/middleware.py rename to modoboa/lib/middleware.py diff --git a/lib/migrations/0001_initial.py b/modoboa/lib/migrations/0001_initial.py similarity index 100% rename from lib/migrations/0001_initial.py rename to modoboa/lib/migrations/0001_initial.py diff --git a/lib/migrations/0002_move_secret_key.py b/modoboa/lib/migrations/0002_move_secret_key.py similarity index 100% rename from lib/migrations/0002_move_secret_key.py rename to modoboa/lib/migrations/0002_move_secret_key.py diff --git a/lib/templatetags/__init__.py b/modoboa/lib/migrations/__init__.py similarity index 100% rename from lib/templatetags/__init__.py rename to modoboa/lib/migrations/__init__.py diff --git a/lib/models.py b/modoboa/lib/models.py similarity index 100% rename from lib/models.py rename to modoboa/lib/models.py diff --git a/lib/parameters.py b/modoboa/lib/parameters.py similarity index 100% rename from lib/parameters.py rename to modoboa/lib/parameters.py diff --git a/lib/permissions.py b/modoboa/lib/permissions.py similarity index 100% rename from lib/permissions.py rename to modoboa/lib/permissions.py diff --git a/lib/sysutils.py b/modoboa/lib/sysutils.py similarity index 100% rename from lib/sysutils.py rename to modoboa/lib/sysutils.py diff --git a/lib/tables.py b/modoboa/lib/tables.py similarity index 100% rename from lib/tables.py rename to modoboa/lib/tables.py diff --git a/tools/__init__.py b/modoboa/lib/templatetags/__init__.py similarity index 100% rename from tools/__init__.py rename to modoboa/lib/templatetags/__init__.py diff --git a/lib/templatetags/libextras.py b/modoboa/lib/templatetags/libextras.py similarity index 100% rename from lib/templatetags/libextras.py rename to modoboa/lib/templatetags/libextras.py diff --git a/lib/tests.py b/modoboa/lib/tests.py similarity index 100% rename from lib/tests.py rename to modoboa/lib/tests.py diff --git a/lib/u2u_decode.py b/modoboa/lib/u2u_decode.py similarity index 100% rename from lib/u2u_decode.py rename to modoboa/lib/u2u_decode.py diff --git a/lib/webutils.py b/modoboa/lib/webutils.py similarity index 100% rename from lib/webutils.py rename to modoboa/lib/webutils.py diff --git a/locale/de/LC_MESSAGES/django.po b/modoboa/locale/de/LC_MESSAGES/django.po similarity index 100% rename from locale/de/LC_MESSAGES/django.po rename to modoboa/locale/de/LC_MESSAGES/django.po diff --git a/locale/de/LC_MESSAGES/djangojs.po b/modoboa/locale/de/LC_MESSAGES/djangojs.po similarity index 100% rename from locale/de/LC_MESSAGES/djangojs.po rename to modoboa/locale/de/LC_MESSAGES/djangojs.po diff --git a/locale/en/LC_MESSAGES/django.po b/modoboa/locale/en/LC_MESSAGES/django.po similarity index 100% rename from locale/en/LC_MESSAGES/django.po rename to modoboa/locale/en/LC_MESSAGES/django.po diff --git a/locale/en/LC_MESSAGES/djangojs.po b/modoboa/locale/en/LC_MESSAGES/djangojs.po similarity index 100% rename from locale/en/LC_MESSAGES/djangojs.po rename to modoboa/locale/en/LC_MESSAGES/djangojs.po diff --git a/locale/es/LC_MESSAGES/django.po b/modoboa/locale/es/LC_MESSAGES/django.po similarity index 100% rename from locale/es/LC_MESSAGES/django.po rename to modoboa/locale/es/LC_MESSAGES/django.po diff --git a/locale/es/LC_MESSAGES/djangojs.po b/modoboa/locale/es/LC_MESSAGES/djangojs.po similarity index 100% rename from locale/es/LC_MESSAGES/djangojs.po rename to modoboa/locale/es/LC_MESSAGES/djangojs.po diff --git a/locale/fr/LC_MESSAGES/django.po b/modoboa/locale/fr/LC_MESSAGES/django.po similarity index 100% rename from locale/fr/LC_MESSAGES/django.po rename to modoboa/locale/fr/LC_MESSAGES/django.po diff --git a/locale/fr/LC_MESSAGES/djangojs.po b/modoboa/locale/fr/LC_MESSAGES/djangojs.po similarity index 100% rename from locale/fr/LC_MESSAGES/djangojs.po rename to modoboa/locale/fr/LC_MESSAGES/djangojs.po diff --git a/static/css/admin.css b/modoboa/static/css/admin.css similarity index 100% rename from static/css/admin.css rename to modoboa/static/css/admin.css diff --git a/static/css/bootstrap-responsive.css b/modoboa/static/css/bootstrap-responsive.css similarity index 100% rename from static/css/bootstrap-responsive.css rename to modoboa/static/css/bootstrap-responsive.css diff --git a/static/css/bootstrap.css b/modoboa/static/css/bootstrap.css similarity index 100% rename from static/css/bootstrap.css rename to modoboa/static/css/bootstrap.css diff --git a/static/css/custom.css b/modoboa/static/css/custom.css similarity index 100% rename from static/css/custom.css rename to modoboa/static/css/custom.css diff --git a/static/css/datepicker.css b/modoboa/static/css/datepicker.css similarity index 100% rename from static/css/datepicker.css rename to modoboa/static/css/datepicker.css diff --git a/static/css/default.css b/modoboa/static/css/default.css similarity index 100% rename from static/css/default.css rename to modoboa/static/css/default.css diff --git a/static/css/login.css b/modoboa/static/css/login.css similarity index 100% rename from static/css/login.css rename to modoboa/static/css/login.css diff --git a/static/css/logo-icon.png b/modoboa/static/css/logo-icon.png similarity index 100% rename from static/css/logo-icon.png rename to modoboa/static/css/logo-icon.png diff --git a/static/css/logo.png b/modoboa/static/css/logo.png similarity index 100% rename from static/css/logo.png rename to modoboa/static/css/logo.png diff --git a/static/css/modoboa.png b/modoboa/static/css/modoboa.png similarity index 100% rename from static/css/modoboa.png rename to modoboa/static/css/modoboa.png diff --git a/static/css/searchbar.css b/modoboa/static/css/searchbar.css similarity index 100% rename from static/css/searchbar.css rename to modoboa/static/css/searchbar.css diff --git a/static/css/spinner.gif b/modoboa/static/css/spinner.gif similarity index 100% rename from static/css/spinner.gif rename to modoboa/static/css/spinner.gif diff --git a/static/css/viewmail.css b/modoboa/static/css/viewmail.css similarity index 100% rename from static/css/viewmail.css rename to modoboa/static/css/viewmail.css diff --git a/static/img/glyphicons-halflings-white.png b/modoboa/static/img/glyphicons-halflings-white.png similarity index 100% rename from static/img/glyphicons-halflings-white.png rename to modoboa/static/img/glyphicons-halflings-white.png diff --git a/static/img/glyphicons-halflings.png b/modoboa/static/img/glyphicons-halflings.png similarity index 100% rename from static/img/glyphicons-halflings.png rename to modoboa/static/img/glyphicons-halflings.png diff --git a/static/js/admin.js b/modoboa/static/js/admin.js similarity index 100% rename from static/js/admin.js rename to modoboa/static/js/admin.js diff --git a/static/js/autocompleter.js b/modoboa/static/js/autocompleter.js similarity index 100% rename from static/js/autocompleter.js rename to modoboa/static/js/autocompleter.js diff --git a/static/js/bootstrap-datepicker.js b/modoboa/static/js/bootstrap-datepicker.js similarity index 100% rename from static/js/bootstrap-datepicker.js rename to modoboa/static/js/bootstrap-datepicker.js diff --git a/static/js/bootstrap.js b/modoboa/static/js/bootstrap.js similarity index 100% rename from static/js/bootstrap.js rename to modoboa/static/js/bootstrap.js diff --git a/static/js/confirmation.js b/modoboa/static/js/confirmation.js similarity index 100% rename from static/js/confirmation.js rename to modoboa/static/js/confirmation.js diff --git a/static/js/creation_wizard.js b/modoboa/static/js/creation_wizard.js similarity index 100% rename from static/js/creation_wizard.js rename to modoboa/static/js/creation_wizard.js diff --git a/static/js/dynamic_input.js b/modoboa/static/js/dynamic_input.js similarity index 100% rename from static/js/dynamic_input.js rename to modoboa/static/js/dynamic_input.js diff --git a/static/js/editor_config.js b/modoboa/static/js/editor_config.js similarity index 100% rename from static/js/editor_config.js rename to modoboa/static/js/editor_config.js diff --git a/static/js/global.js b/modoboa/static/js/global.js similarity index 100% rename from static/js/global.js rename to modoboa/static/js/global.js diff --git a/static/js/history.js b/modoboa/static/js/history.js similarity index 100% rename from static/js/history.js rename to modoboa/static/js/history.js diff --git a/static/js/jquery-ui.js b/modoboa/static/js/jquery-ui.js similarity index 100% rename from static/js/jquery-ui.js rename to modoboa/static/js/jquery-ui.js diff --git a/static/js/jquery.htmltable.js b/modoboa/static/js/jquery.htmltable.js similarity index 100% rename from static/js/jquery.htmltable.js rename to modoboa/static/js/jquery.htmltable.js diff --git a/static/js/jquery.js b/modoboa/static/js/jquery.js similarity index 100% rename from static/js/jquery.js rename to modoboa/static/js/jquery.js diff --git a/static/js/locales/bootstrap-datepicker.br.js b/modoboa/static/js/locales/bootstrap-datepicker.br.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.br.js rename to modoboa/static/js/locales/bootstrap-datepicker.br.js diff --git a/static/js/locales/bootstrap-datepicker.de.js b/modoboa/static/js/locales/bootstrap-datepicker.de.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.de.js rename to modoboa/static/js/locales/bootstrap-datepicker.de.js diff --git a/static/js/locales/bootstrap-datepicker.es.js b/modoboa/static/js/locales/bootstrap-datepicker.es.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.es.js rename to modoboa/static/js/locales/bootstrap-datepicker.es.js diff --git a/static/js/locales/bootstrap-datepicker.fr.js b/modoboa/static/js/locales/bootstrap-datepicker.fr.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.fr.js rename to modoboa/static/js/locales/bootstrap-datepicker.fr.js diff --git a/static/js/locales/bootstrap-datepicker.is.js b/modoboa/static/js/locales/bootstrap-datepicker.is.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.is.js rename to modoboa/static/js/locales/bootstrap-datepicker.is.js diff --git a/static/js/locales/bootstrap-datepicker.sv.js b/modoboa/static/js/locales/bootstrap-datepicker.sv.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.sv.js rename to modoboa/static/js/locales/bootstrap-datepicker.sv.js diff --git a/static/js/locales/bootstrap-datepicker.tr.js b/modoboa/static/js/locales/bootstrap-datepicker.tr.js similarity index 100% rename from static/js/locales/bootstrap-datepicker.tr.js rename to modoboa/static/js/locales/bootstrap-datepicker.tr.js diff --git a/static/js/notify.js b/modoboa/static/js/notify.js similarity index 100% rename from static/js/notify.js rename to modoboa/static/js/notify.js diff --git a/static/js/poller.js b/modoboa/static/js/poller.js similarity index 100% rename from static/js/poller.js rename to modoboa/static/js/poller.js diff --git a/static/js/searchbar.js b/modoboa/static/js/searchbar.js similarity index 100% rename from static/js/searchbar.js rename to modoboa/static/js/searchbar.js diff --git a/static/pics/answered.png b/modoboa/static/pics/answered.png similarity index 100% rename from static/pics/answered.png rename to modoboa/static/pics/answered.png diff --git a/static/pics/attachment.png b/modoboa/static/pics/attachment.png similarity index 100% rename from static/pics/attachment.png rename to modoboa/static/pics/attachment.png diff --git a/static/pics/collapsed.png b/modoboa/static/pics/collapsed.png similarity index 100% rename from static/pics/collapsed.png rename to modoboa/static/pics/collapsed.png diff --git a/static/pics/expanded.png b/modoboa/static/pics/expanded.png similarity index 100% rename from static/pics/expanded.png rename to modoboa/static/pics/expanded.png diff --git a/static/pics/forwarded.png b/modoboa/static/pics/forwarded.png similarity index 100% rename from static/pics/forwarded.png rename to modoboa/static/pics/forwarded.png diff --git a/static/pics/grippy.png b/modoboa/static/pics/grippy.png similarity index 100% rename from static/pics/grippy.png rename to modoboa/static/pics/grippy.png diff --git a/static/pics/release.png b/modoboa/static/pics/release.png similarity index 100% rename from static/pics/release.png rename to modoboa/static/pics/release.png diff --git a/static/pics/transparent.png b/modoboa/static/pics/transparent.png similarity index 100% rename from static/pics/transparent.png rename to modoboa/static/pics/transparent.png diff --git a/templates/common/buttons_list.html b/modoboa/templates/common/buttons_list.html similarity index 100% rename from templates/common/buttons_list.html rename to modoboa/templates/common/buttons_list.html diff --git a/templates/common/email_searchbar.html b/modoboa/templates/common/email_searchbar.html similarity index 100% rename from templates/common/email_searchbar.html rename to modoboa/templates/common/email_searchbar.html diff --git a/templates/common/error.html b/modoboa/templates/common/error.html similarity index 100% rename from templates/common/error.html rename to modoboa/templates/common/error.html diff --git a/templates/common/generic_field.html b/modoboa/templates/common/generic_field.html similarity index 100% rename from templates/common/generic_field.html rename to modoboa/templates/common/generic_field.html diff --git a/templates/common/generic_fields_group.html b/modoboa/templates/common/generic_fields_group.html similarity index 100% rename from templates/common/generic_fields_group.html rename to modoboa/templates/common/generic_fields_group.html diff --git a/templates/common/generic_modal.html b/modoboa/templates/common/generic_modal.html similarity index 100% rename from templates/common/generic_modal.html rename to modoboa/templates/common/generic_modal.html diff --git a/templates/common/generic_modal_form.html b/modoboa/templates/common/generic_modal_form.html similarity index 100% rename from templates/common/generic_modal_form.html rename to modoboa/templates/common/generic_modal_form.html diff --git a/templates/common/mailheaders.html b/modoboa/templates/common/mailheaders.html similarity index 100% rename from templates/common/mailheaders.html rename to modoboa/templates/common/mailheaders.html diff --git a/templates/common/menu.html b/modoboa/templates/common/menu.html similarity index 100% rename from templates/common/menu.html rename to modoboa/templates/common/menu.html diff --git a/templates/common/menulist.html b/modoboa/templates/common/menulist.html similarity index 100% rename from templates/common/menulist.html rename to modoboa/templates/common/menulist.html diff --git a/templates/common/pagination_bar.html b/modoboa/templates/common/pagination_bar.html similarity index 100% rename from templates/common/pagination_bar.html rename to modoboa/templates/common/pagination_bar.html diff --git a/templates/common/parameters.html b/modoboa/templates/common/parameters.html similarity index 100% rename from templates/common/parameters.html rename to modoboa/templates/common/parameters.html diff --git a/templates/common/tabforms.html b/modoboa/templates/common/tabforms.html similarity index 100% rename from templates/common/tabforms.html rename to modoboa/templates/common/tabforms.html diff --git a/templates/common/table_body.html b/modoboa/templates/common/table_body.html similarity index 100% rename from templates/common/table_body.html rename to modoboa/templates/common/table_body.html diff --git a/templates/common/table_head.html b/modoboa/templates/common/table_head.html similarity index 100% rename from templates/common/table_head.html rename to modoboa/templates/common/table_head.html diff --git a/templates/common/tables.html b/modoboa/templates/common/tables.html similarity index 100% rename from templates/common/tables.html rename to modoboa/templates/common/tables.html diff --git a/templates/common/viewmail.html b/modoboa/templates/common/viewmail.html similarity index 100% rename from templates/common/viewmail.html rename to modoboa/templates/common/viewmail.html diff --git a/templates/fixed.html b/modoboa/templates/fixed.html similarity index 100% rename from templates/fixed.html rename to modoboa/templates/fixed.html diff --git a/templates/fluid.html b/modoboa/templates/fluid.html similarity index 100% rename from templates/fluid.html rename to modoboa/templates/fluid.html diff --git a/templates/nlayout.html b/modoboa/templates/nlayout.html similarity index 100% rename from templates/nlayout.html rename to modoboa/templates/nlayout.html diff --git a/templates/registration/login.html b/modoboa/templates/registration/login.html similarity index 100% rename from templates/registration/login.html rename to modoboa/templates/registration/login.html diff --git a/templates/twocols.html b/modoboa/templates/twocols.html similarity index 100% rename from templates/twocols.html rename to modoboa/templates/twocols.html diff --git a/tools/pfxadmin_migrate/__init__.py b/modoboa/tools/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from tools/pfxadmin_migrate/__init__.py rename to modoboa/tools/__init__.py diff --git a/userprefs/templatetags/__init__.py b/modoboa/tools/pfxadmin_migrate/__init__.py old mode 100644 new mode 100755 similarity index 100% rename from userprefs/templatetags/__init__.py rename to modoboa/tools/pfxadmin_migrate/__init__.py diff --git a/tools/pfxadmin_migrate/migrate.py b/modoboa/tools/pfxadmin_migrate/migrate.py similarity index 100% rename from tools/pfxadmin_migrate/migrate.py rename to modoboa/tools/pfxadmin_migrate/migrate.py diff --git a/tools/pfxadmin_migrate/models.py b/modoboa/tools/pfxadmin_migrate/models.py similarity index 100% rename from tools/pfxadmin_migrate/models.py rename to modoboa/tools/pfxadmin_migrate/models.py diff --git a/urls.py b/modoboa/urls.py similarity index 94% rename from urls.py rename to modoboa/urls.py index 5dcd5b85a..89084efff 100644 --- a/urls.py +++ b/modoboa/urls.py @@ -14,7 +14,6 @@ urlpatterns = patterns('', (r'^%s$' % prefix, 'modoboa.lib.webutils.topredirection'), (r'^%sadmin/' % prefix, include('modoboa.admin.urls')), (r'^%suserprefs/' % prefix, include('modoboa.userprefs.urls')), - (r'^%sdemo/' % prefix, include('modoboa.demo.urls')), (r'^accounts/login/$', 'modoboa.auth.views.dologin'), (r'^accounts/logout/$', 'modoboa.auth.views.dologout'), (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', diff --git a/userprefs/__init__.py b/modoboa/userprefs/__init__.py similarity index 100% rename from userprefs/__init__.py rename to modoboa/userprefs/__init__.py diff --git a/userprefs/forms.py b/modoboa/userprefs/forms.py similarity index 100% rename from userprefs/forms.py rename to modoboa/userprefs/forms.py diff --git a/userprefs/templates/userprefs/form.html b/modoboa/userprefs/templates/userprefs/form.html similarity index 100% rename from userprefs/templates/userprefs/form.html rename to modoboa/userprefs/templates/userprefs/form.html diff --git a/userprefs/templates/userprefs/preferences.html b/modoboa/userprefs/templates/userprefs/preferences.html similarity index 100% rename from userprefs/templates/userprefs/preferences.html rename to modoboa/userprefs/templates/userprefs/preferences.html diff --git a/userprefs/templates/userprefs/section.html b/modoboa/userprefs/templates/userprefs/section.html similarity index 100% rename from userprefs/templates/userprefs/section.html rename to modoboa/userprefs/templates/userprefs/section.html diff --git a/modoboa/userprefs/templatetags/__init__.py b/modoboa/userprefs/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/userprefs/templatetags/uprefs_extras.py b/modoboa/userprefs/templatetags/uprefs_extras.py similarity index 100% rename from userprefs/templatetags/uprefs_extras.py rename to modoboa/userprefs/templatetags/uprefs_extras.py diff --git a/userprefs/urls.py b/modoboa/userprefs/urls.py similarity index 100% rename from userprefs/urls.py rename to modoboa/userprefs/urls.py diff --git a/userprefs/views.py b/modoboa/userprefs/views.py similarity index 100% rename from userprefs/views.py rename to modoboa/userprefs/views.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..99e4359c7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +django==1.3.1 +south +lxml +pycrypto +sievelib diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..7d49787c3 --- /dev/null +++ b/setup.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import os +import re +from setuptools import setup, find_packages + +ROOT = os.path.dirname(__file__) +PIP_REQUIRES = os.path.join(ROOT, "requirements.txt") + +def parse_requirements(*filenames): + """ + We generate our install_requires from the pip-requires and test-requires + files so that we don't have to maintain the dependency definitions in + two places. + """ + requirements = [] + for f in filenames: + for line in open(f, 'r').read().split('\n'): + # Comment lines. Skip. + if re.match(r'(\s*#)|(\s*$)', line): + continue + # Editable matches. Put the egg name into our reqs list. + if re.match(r'\s*-e\s+', line): + pkg = re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1', line) + requirements.append("%s" % pkg) + # File-based installs not supported/needed. Skip. + elif re.match(r'\s*-f\s+', line): + pass + else: + requirements.append(line) + return requirements + +def parse_dependency_links(*filenames): + """ + We generate our dependency_links from the pip-requires and test-requires + files for the dependencies pulled from github (prepended with -e). + """ + dependency_links = [] + for f in filenames: + for line in open(f, 'r').read().split('\n'): + if re.match(r'\s*-[ef]\s+', line): + line = re.sub(r'\s*-[ef]\s+', '', line) + line = re.sub(r'\s*git\+https', 'http', line) + line = re.sub(r'\.git#', '/tarball/master#', line) + dependency_links.append(line) + return dependency_links + +def read(fname): + return open(os.path.join(ROOT, fname)).read() + +setup(name="modoboa", + version='0.9', + url='http://modoboa.org/', + license='MIT', + description="Modular domains & mailboxes hosting", + long_description=read('README'), + author='Antoine Nguyen', + author_email='tonio@ngyn.org', + packages=find_packages(), + include_package_data=True, + zip_safe=False, + install_requires=parse_requirements(PIP_REQUIRES), + dependency_links=parse_dependency_links(PIP_REQUIRES), + classifiers=['Development Status :: 4 - Beta', + 'Framework :: Django', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Topic :: Internet :: WWW/HTTP'] +)