From 68bad4945e376216aac3a0da7e3c4d210d487cd9 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 3 May 2013 17:16:06 +0200 Subject: [PATCH] Custom User model support. see #393 --- modoboa/admin/fixtures/demo.json | 2 +- modoboa/admin/fixtures/initial_data.json | 2 +- modoboa/admin/fixtures/initial_users.json | 2 +- modoboa/admin/forms.py | 2 +- modoboa/admin/migrations/0001_initial.py | 48 ++++++- .../0002_auto__del_field_alias_mbox.py | 6 +- .../migrations/0003_auto__add_extension.py | 6 +- .../admin/migrations/0004_add_permissions.py | 7 +- .../0005_increase_columns_length.py | 10 +- .../migrations/0006_auto__add_domainalias.py | 6 +- ...ess__chg_field_alias_address__del_field.py | 6 +- .../migrations/0008_update_mailbox_path.py | 6 +- .../0009_auto__add_field_alias_extmboxes.py | 6 +- .../migrations/0010_fill_alias_domain.py | 6 +- ...d_domain_dates__add_field_domainalias_d.py | 6 +- .../migrations/0012_fill_object_dates.py | 6 +- .../migrations/0013_update_mailbox_path.py | 6 +- .../0014_auto__add_unique_domain_name.py | 6 +- .../admin/migrations/0015_move_passwords.py | 6 +- ...que_objectaccess_user_content_type_obje.py | 13 +- .../admin/migrations/0017_set_permissions.py | 19 ++- ...8_auto__add_unique_alias_domain_address.py | 11 +- .../migrations/0019_set_default_group.py | 10 +- .../migrations/0020_rename_amavis_ext.py | 8 +- .../0021_default_superadmin_ownership.py | 10 +- ...l_field_mailbox_gid__del_field_mailbox_.py | 9 +- .../admin/migrations/0023_auto__add_quota.py | 9 +- .../admin/migrations/0024_create_quotas.py | 8 +- .../0025_auto__add_field_quota_mbox.py | 9 +- .../admin/migrations/0026_set_quota_mbox.py | 8 +- ...uto__add_field_mailbox_use_domain_quota.py | 9 +- .../0028_auto__chg_field_mailbox_quota.py | 9 +- ...ilbox_user__chg_field_objectaccess_user.py | 129 ++++++++++++++++++ .../migrations/0030_update_permissions.py | 126 +++++++++++++++++ modoboa/admin/models.py | 33 +++-- modoboa/admin/templatetags/admin_extras.py | 2 +- modoboa/admin/views.py | 18 +-- modoboa/core/templates/settings.py | 2 + .../0002_update_user_foreign_key.py | 68 +++++++++ modoboa/extensions/limits/models.py | 3 +- modoboa/lib/compat.py | 4 + modoboa/lib/models.py | 4 +- 42 files changed, 541 insertions(+), 125 deletions(-) create mode 100644 modoboa/admin/migrations/0029_auto__add_user__chg_field_mailbox_user__chg_field_objectaccess_user.py create mode 100644 modoboa/admin/migrations/0030_update_permissions.py create mode 100644 modoboa/extensions/limits/migrations/0002_update_user_foreign_key.py create mode 100644 modoboa/lib/compat.py diff --git a/modoboa/admin/fixtures/demo.json b/modoboa/admin/fixtures/demo.json index f0149209c..ab9fb3ec9 100644 --- a/modoboa/admin/fixtures/demo.json +++ b/modoboa/admin/fixtures/demo.json @@ -1 +1 @@ -[{"pk": 1, "model": "auth.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": false, "last_login": "2012-05-03 16:58:51", "groups": [], "user_permissions": [], "password": "{CRYPT}dTTsGDkA5ZHKg", "email": "", "date_joined": "2012-01-26 15:19:25"}}, {"pk": 2, "model": "auth.user", "fields": {"username": "admin@demo.local", "first_name": "Demo", "last_name": "Administrator", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2012-05-24 05:00:12", "groups": [1], "user_permissions": [], "password": "{CRYPT}SJ2bQWwabfH/6", "email": "admin@demo.local", "date_joined": "2012-05-03 16:50:15"}}, {"pk": 4, "model": "auth.user", "fields": {"username": "user@demo.local", "first_name": "Demo", "last_name": "User", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2012-05-03 16:56:50", "groups": [2], "user_permissions": [], "password": "{CRYPT}2iAFXtxUA6.7Y", "email": "user@demo.local", "date_joined": "2012-05-03 16:56:50"}}, {"pk": 1, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 1, "content_type": ["admin", "user"], "object_id": 1}}, {"pk": 2, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "domain"], "object_id": 1}}, {"pk": 3, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "user"], "object_id": 2}}, {"pk": 4, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "mailbox"], "object_id": 1}}, {"pk": 5, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "alias"], "object_id": 1}}, {"pk": 6, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "domain"], "object_id": 1}}, {"pk": 7, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "mailbox"], "object_id": 1}}, {"pk": 8, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "user"], "object_id": 2}}, {"pk": 9, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "alias"], "object_id": 1}}, {"pk": 13, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "user"], "object_id": 4}}, {"pk": 14, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "mailbox"], "object_id": 3}}, {"pk": 15, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "mailbox"], "object_id": 3}}, {"pk": 16, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "user"], "object_id": 4}}, {"pk": 1, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:49:40", "last_modification": "2012-05-03 16:49:40"}}, {"pk": 2, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:50:15", "last_modification": "2012-05-03 16:50:36"}}, {"pk": 3, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:50:15", "last_modification": "2012-05-03 16:50:15"}}, {"pk": 4, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:51:04", "last_modification": "2012-05-03 16:51:04"}}, {"pk": 5, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:56:50", "last_modification": "2012-05-03 16:56:50"}}, {"pk": 1, "model": "admin.domain", "fields": {"dates": 1, "enabled": true, "name": "demo.local", "quota": 10}}, {"pk": 1, "model": "admin.mailbox", "fields": {"dates": 2, "uid": 500, "quota": 10, "gid": 500, "user": 2, "domain": 1, "address": "admin", "path": "admin/"}}, {"pk": 3, "model": "admin.mailbox", "fields": {"dates": 5, "uid": 500, "quota": 10, "gid": 500, "user": 4, "domain": 1, "address": "user", "path": "user/"}}, {"pk": 1, "model": "admin.alias", "fields": {"dates": 3, "enabled": true, "domain": 1, "mboxes": [1], "address": "postmaster", "extmboxes": ""}}, {"pk": 1, "model": "admin.extension", "fields": {"enabled": true, "name": "limits"}}, {"pk": 2, "model": "admin.extension", "fields": {"enabled": true, "name": "postfix_autoreply"}}, {"pk": 3, "model": "admin.extension", "fields": {"enabled": true, "name": "stats"}}, {"pk": 4, "model": "admin.extension", "fields": {"enabled": true, "name": "amavis"}}, {"pk": 5, "model": "admin.extension", "fields": {"enabled": true, "name": "webmail"}}, {"pk": 6, "model": "admin.extension", "fields": {"enabled": true, "name": "sievefilters"}}] \ No newline at end of file +[{"pk": 1, "model": "admin.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": false, "last_login": "2012-05-03 16:58:51", "groups": [], "user_permissions": [], "password": "{CRYPT}dTTsGDkA5ZHKg", "email": "", "date_joined": "2012-01-26 15:19:25"}}, {"pk": 2, "model": "admin.user", "fields": {"username": "admin@demo.local", "first_name": "Demo", "last_name": "Administrator", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2012-05-24 05:00:12", "groups": [1], "user_permissions": [], "password": "{CRYPT}SJ2bQWwabfH/6", "email": "admin@demo.local", "date_joined": "2012-05-03 16:50:15"}}, {"pk": 4, "model": "admin.user", "fields": {"username": "user@demo.local", "first_name": "Demo", "last_name": "User", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2012-05-03 16:56:50", "groups": [2], "user_permissions": [], "password": "{CRYPT}2iAFXtxUA6.7Y", "email": "user@demo.local", "date_joined": "2012-05-03 16:56:50"}}, {"pk": 1, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 1, "content_type": ["admin", "user"], "object_id": 1}}, {"pk": 2, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "domain"], "object_id": 1}}, {"pk": 3, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "user"], "object_id": 2}}, {"pk": 4, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "mailbox"], "object_id": 1}}, {"pk": 5, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "alias"], "object_id": 1}}, {"pk": 6, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "domain"], "object_id": 1}}, {"pk": 7, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "mailbox"], "object_id": 1}}, {"pk": 8, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "user"], "object_id": 2}}, {"pk": 9, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "alias"], "object_id": 1}}, {"pk": 13, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "user"], "object_id": 4}}, {"pk": 14, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "mailbox"], "object_id": 3}}, {"pk": 15, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "mailbox"], "object_id": 3}}, {"pk": 16, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 2, "content_type": ["admin", "user"], "object_id": 4}}, {"pk": 1, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:49:40", "last_modification": "2012-05-03 16:49:40"}}, {"pk": 2, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:50:15", "last_modification": "2012-05-03 16:50:36"}}, {"pk": 3, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:50:15", "last_modification": "2012-05-03 16:50:15"}}, {"pk": 4, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:51:04", "last_modification": "2012-05-03 16:51:04"}}, {"pk": 5, "model": "admin.objectdates", "fields": {"creation": "2012-05-03 16:56:50", "last_modification": "2012-05-03 16:56:50"}}, {"pk": 1, "model": "admin.domain", "fields": {"dates": 1, "enabled": true, "name": "demo.local", "quota": 10}}, {"pk": 1, "model": "admin.mailbox", "fields": {"dates": 2, "uid": 500, "quota": 10, "gid": 500, "user": 2, "domain": 1, "address": "admin", "path": "admin/"}}, {"pk": 3, "model": "admin.mailbox", "fields": {"dates": 5, "uid": 500, "quota": 10, "gid": 500, "user": 4, "domain": 1, "address": "user", "path": "user/"}}, {"pk": 1, "model": "admin.alias", "fields": {"dates": 3, "enabled": true, "domain": 1, "mboxes": [1], "address": "postmaster", "extmboxes": ""}}, {"pk": 1, "model": "admin.extension", "fields": {"enabled": true, "name": "limits"}}, {"pk": 2, "model": "admin.extension", "fields": {"enabled": true, "name": "postfix_autoreply"}}, {"pk": 3, "model": "admin.extension", "fields": {"enabled": true, "name": "stats"}}, {"pk": 4, "model": "admin.extension", "fields": {"enabled": true, "name": "amavis"}}, {"pk": 5, "model": "admin.extension", "fields": {"enabled": true, "name": "webmail"}}, {"pk": 6, "model": "admin.extension", "fields": {"enabled": true, "name": "sievefilters"}}] diff --git a/modoboa/admin/fixtures/initial_data.json b/modoboa/admin/fixtures/initial_data.json index 343acc024..cb8d94e14 100644 --- a/modoboa/admin/fixtures/initial_data.json +++ b/modoboa/admin/fixtures/initial_data.json @@ -1 +1 @@ -[{"pk": 1, "model": "auth.group", "fields": {"name": "DomainAdmins", "permissions": [["add_user", "auth", "user"], ["change_user", "auth", "user"], ["delete_user", "auth", "user"], ["view_domains", "admin", "domain"], ["add_mailbox", "admin", "mailbox"], ["change_mailbox", "admin", "mailbox"], ["delete_mailbox", "admin", "mailbox"], ["add_alias", "admin", "alias"], ["change_alias", "admin", "alias"], ["delete_alias", "admin", "alias"], ["view_mailboxes", "admin", "mailbox"], ["view_aliases", "admin", "alias"], ["view_domaliases", "admin", "domainalias"], ["add_domainalias", "admin", "domainalias"], ["change_domainalias", "admin", "domainalias"], ["delete_domainalias", "admin", "domainalias"]]}},{"pk": 2, "model": "auth.group", "fields": {"name": "SimpleUsers", "permissions": []}}] +[{"pk": 1, "model": "auth.group", "fields": {"name": "DomainAdmins", "permissions": [["add_user", "admin", "user"], ["change_user", "admin", "user"], ["delete_user", "admin", "user"], ["view_domains", "admin", "domain"], ["add_mailbox", "admin", "mailbox"], ["change_mailbox", "admin", "mailbox"], ["delete_mailbox", "admin", "mailbox"], ["add_alias", "admin", "alias"], ["change_alias", "admin", "alias"], ["delete_alias", "admin", "alias"], ["view_mailboxes", "admin", "mailbox"], ["view_aliases", "admin", "alias"], ["view_domaliases", "admin", "domainalias"], ["add_domainalias", "admin", "domainalias"], ["change_domainalias", "admin", "domainalias"], ["delete_domainalias", "admin", "domainalias"]]}},{"pk": 2, "model": "auth.group", "fields": {"name": "SimpleUsers", "permissions": []}}] diff --git a/modoboa/admin/fixtures/initial_users.json b/modoboa/admin/fixtures/initial_users.json index a897dcaa8..3c8921f65 100644 --- a/modoboa/admin/fixtures/initial_users.json +++ b/modoboa/admin/fixtures/initial_users.json @@ -1 +1 @@ -[{"pk": 1, "model": "auth.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": false, "last_login": "2012-01-26 15:19:25", "groups": [], "user_permissions": [], "password": "{CRYPT}dTTsGDkA5ZHKg", "email": "", "date_joined": "2012-01-26 15:19:25"}},{"pk": 1, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "user"], "object_id": 1}}] \ No newline at end of file +[{"pk": 1, "model": "admin.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": false, "last_login": "2012-01-26 15:19:25", "groups": [], "user_permissions": [], "password": "{CRYPT}dTTsGDkA5ZHKg", "email": "", "date_joined": "2012-01-26 15:19:25"}},{"pk": 1, "model": "admin.objectaccess", "fields": {"is_owner": true, "user": 1, "content_type": ["admin", "user"], "object_id": 1}}] \ No newline at end of file diff --git a/modoboa/admin/forms.py b/modoboa/admin/forms.py index b49d3de6c..0c114ec47 100644 --- a/modoboa/admin/forms.py +++ b/modoboa/admin/forms.py @@ -722,7 +722,7 @@ class AccountForm(TabForms): if account.is_superuser: return False return self.user.has_perm("admin.add_domain") \ - and account.has_perm("auth.add_user") + and account.has_perm("admin.add_user") def _before_is_valid(self, form): if form["id"] == "general": diff --git a/modoboa/admin/migrations/0001_initial.py b/modoboa/admin/migrations/0001_initial.py index 728f74380..2f9302e02 100644 --- a/modoboa/admin/migrations/0001_initial.py +++ b/modoboa/admin/migrations/0001_initial.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -24,7 +26,7 @@ class Migration(SchemaMigration): ('quota', self.gf('django.db.models.fields.IntegerField')()), ('full_address', self.gf('django.db.models.fields.CharField')(max_length=150)), ('gid', self.gf('django.db.models.fields.IntegerField')()), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[user_model_name])), ('address', self.gf('django.db.models.fields.CharField')(max_length=100)), ('path', self.gf('django.db.models.fields.CharField')(max_length=255)), ('password', self.gf('django.db.models.fields.CharField')(max_length=100)), @@ -42,6 +44,40 @@ class Migration(SchemaMigration): ('address', self.gf('django.db.models.fields.CharField')(max_length=100)), )) db.send_create_signal('admin', ['Alias']) + + if user_model_name != 'admin.User': + return + # Adding model 'User' + db.create_table(u'admin_user', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('password', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=254)), + ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)), + ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)), + ('email', self.gf('django.db.models.fields.EmailField')(max_length=254, blank=True)), + ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + )) + db.send_create_signal(u'admin', ['User']) + + # Adding M2M table for field groups on 'User' + db.create_table(u'admin_user_groups', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('user', models.ForeignKey(orm[u'admin.user'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(u'admin_user_groups', ['user_id', 'group_id']) + + # Adding M2M table for field user_permissions on 'User' + db.create_table(u'admin_user_user_permissions', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('user', models.ForeignKey(orm[u'admin.user'], null=False)), + ('permission', models.ForeignKey(orm[u'auth.permission'], null=False)) + )) + db.create_unique(u'admin_user_user_permissions', ['user_id', 'permission_id']) def backwards(self, orm): @@ -54,6 +90,12 @@ class Migration(SchemaMigration): # Deleting model 'Alias' db.delete_table('admin_alias') + + if user_model_name != 'admin.User': + return + db.delete_table('admin_user') + db.delete_table('admin_user_groups') + db.delete_table('admin_user_user_permissions') models = { @@ -84,7 +126,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -99,7 +141,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0002_auto__del_field_alias_mbox.py b/modoboa/admin/migrations/0002_auto__del_field_alias_mbox.py index cf093d77c..ae9f4d7c7 100644 --- a/modoboa/admin/migrations/0002_auto__del_field_alias_mbox.py +++ b/modoboa/admin/migrations/0002_auto__del_field_alias_mbox.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): no_dry_run = True @@ -61,7 +63,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -76,7 +78,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0003_auto__add_extension.py b/modoboa/admin/migrations/0003_auto__add_extension.py index d47308463..d33e44526 100644 --- a/modoboa/admin/migrations/0003_auto__add_extension.py +++ b/modoboa/admin/migrations/0003_auto__add_extension.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -57,7 +59,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -72,7 +74,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0004_add_permissions.py b/modoboa/admin/migrations/0004_add_permissions.py index 8b3416ce7..962d1eed6 100644 --- a/modoboa/admin/migrations/0004_add_permissions.py +++ b/modoboa/admin/migrations/0004_add_permissions.py @@ -5,11 +5,14 @@ from south.v2 import DataMigration from django.db import models from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): def forwards(self, orm): perm_ct = ContentType.objects.get(app_label="auth", model="permission") + #perm_ct = orm["contenttypes.ContentType"].objects.get(app_label="auth", model="permission") view_perms = Permission(name="View permissions", codename="view_permissions", content_type=perm_ct) view_perms.save() @@ -53,7 +56,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -68,7 +71,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0005_increase_columns_length.py b/modoboa/admin/migrations/0005_increase_columns_length.py index 4c0b08463..8dd764764 100644 --- a/modoboa/admin/migrations/0005_increase_columns_length.py +++ b/modoboa/admin/migrations/0005_increase_columns_length.py @@ -3,12 +3,14 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name, user_table_name + class Migration(SchemaMigration): def forwards(self, orm): - db.alter_column("auth_user", "username", models.CharField(unique=True, max_length=254)) - db.alter_column("auth_user", "email", models.CharField(max_length=254)) + db.alter_column(user_table_name, "username", models.CharField(unique=True, max_length=254)) + db.alter_column(user_table_name, "email", models.CharField(max_length=254)) def backwards(self, orm): raise RuntimeError("Cannot revert this migration") @@ -47,7 +49,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -62,7 +64,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0006_auto__add_domainalias.py b/modoboa/admin/migrations/0006_auto__add_domainalias.py index b7e17568f..283b9c4dd 100644 --- a/modoboa/admin/migrations/0006_auto__add_domainalias.py +++ b/modoboa/admin/migrations/0006_auto__add_domainalias.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -69,7 +71,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -84,7 +86,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/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 index 670e220cb..08870cbfc 100644 --- a/modoboa/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 @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -69,7 +71,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -84,7 +86,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0008_update_mailbox_path.py b/modoboa/admin/migrations/0008_update_mailbox_path.py index 6caa2096d..e69e3c455 100644 --- a/modoboa/admin/migrations/0008_update_mailbox_path.py +++ b/modoboa/admin/migrations/0008_update_mailbox_path.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -54,7 +56,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -69,7 +71,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0009_auto__add_field_alias_extmboxes.py b/modoboa/admin/migrations/0009_auto__add_field_alias_extmboxes.py index 9f10660a7..c9dec14c6 100644 --- a/modoboa/admin/migrations/0009_auto__add_field_alias_extmboxes.py +++ b/modoboa/admin/migrations/0009_auto__add_field_alias_extmboxes.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -60,7 +62,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -75,7 +77,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0010_fill_alias_domain.py b/modoboa/admin/migrations/0010_fill_alias_domain.py index 24fe2505f..a1c800c2f 100644 --- a/modoboa/admin/migrations/0010_fill_alias_domain.py +++ b/modoboa/admin/migrations/0010_fill_alias_domain.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -57,7 +59,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'auth.group': { 'Meta': {'object_name': 'Group'}, @@ -72,7 +74,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/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 index 3c03c24ad..0362c44aa 100644 --- a/modoboa/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 @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -92,7 +94,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -113,7 +115,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0012_fill_object_dates.py b/modoboa/admin/migrations/0012_fill_object_dates.py index e86049e31..face3337e 100644 --- a/modoboa/admin/migrations/0012_fill_object_dates.py +++ b/modoboa/admin/migrations/0012_fill_object_dates.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name + def create_od(orm, obj): od = orm.ObjectDates() @@ -72,7 +74,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -93,7 +95,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0013_update_mailbox_path.py b/modoboa/admin/migrations/0013_update_mailbox_path.py index f4c8bd41f..f0e85b688 100644 --- a/modoboa/admin/migrations/0013_update_mailbox_path.py +++ b/modoboa/admin/migrations/0013_update_mailbox_path.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -61,7 +63,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -82,7 +84,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0014_auto__add_unique_domain_name.py b/modoboa/admin/migrations/0014_auto__add_unique_domain_name.py index ad29ad746..7ba0b9249 100644 --- a/modoboa/admin/migrations/0014_auto__add_unique_domain_name.py +++ b/modoboa/admin/migrations/0014_auto__add_unique_domain_name.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -63,7 +65,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -84,7 +86,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0015_move_passwords.py b/modoboa/admin/migrations/0015_move_passwords.py index 6a61dc9a4..06d138233 100644 --- a/modoboa/admin/migrations/0015_move_passwords.py +++ b/modoboa/admin/migrations/0015_move_passwords.py @@ -4,6 +4,8 @@ from south.db import db from south.v2 import DataMigration from django.db import models from modoboa.lib.models import Parameter +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -67,7 +69,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -88,7 +90,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/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 index e39120b91..2ad47dea5 100644 --- a/modoboa/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 @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -11,7 +13,7 @@ class Migration(SchemaMigration): # Adding model 'ObjectAccess' db.create_table('admin_objectaccess', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[user_model_name])), ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), ('is_owner', self.gf('django.db.models.fields.BooleanField')(default=False)), @@ -73,7 +75,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -81,7 +83,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -89,9 +91,6 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'last_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) }, - 'admin.user': { - 'Meta': {'object_name': 'User', 'db_table': "'auth_user'", '_ormbases': ['auth.User'], 'proxy': 'True'} - }, 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -105,7 +104,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0017_set_permissions.py b/modoboa/admin/migrations/0017_set_permissions.py index 8ffd98cf7..ef067116c 100644 --- a/modoboa/admin/migrations/0017_set_permissions.py +++ b/modoboa/admin/migrations/0017_set_permissions.py @@ -4,18 +4,20 @@ from south.db import db from south.v2 import DataMigration from django.db import models from django.core.exceptions import ObjectDoesNotExist +from modoboa.lib.compat import user_model_name, user_table_name + class Migration(DataMigration): def grant_access(self, orm, user, ct, obj, is_owner=False): objaccess = orm["admin.ObjectAccess"]( user=user, content_type=ct, object_id=obj.id - ) + ) objaccess.is_owner = is_owner objaccess.save() def forwards(self, orm): - superusers = orm["auth.User"].objects.filter(is_superuser=True) + superusers = orm[user_model_name].objects.filter(is_superuser=True) if not len(superusers): # Empty db, nothing to do return @@ -31,7 +33,7 @@ class Migration(DataMigration): name='user', app_label='admin', model='user' ) uct.save() - for account in orm["admin.User"].objects.all(): + for account in orm[user_model_name].objects.all(): for i, su in enumerate(superusers): self.grant_access(orm, su, uct, account, i == 0) domct = orm['contenttypes.ContentType'].objects.get( @@ -60,7 +62,7 @@ class Migration(DataMigration): self.grant_access(orm, su, alct, alias, i == 0) # 2: domain admins must have access to their domain's content - for da in orm["admin.User"].objects.filter(groups__name='DomainAdmins'): + for da in orm[user_model_name].objects.filter(groups__name='DomainAdmins'): dom = da.mailbox_set.all()[0].domain self.grant_access(orm, da, domct, dom) @@ -117,7 +119,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -125,7 +127,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -133,9 +135,6 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'last_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) }, - 'admin.user': { - 'Meta': {'object_name': 'User', 'db_table': "'auth_user'", '_ormbases': ['auth.User'], 'proxy': 'True'} - }, 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -149,7 +148,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0018_auto__add_unique_alias_domain_address.py b/modoboa/admin/migrations/0018_auto__add_unique_alias_domain_address.py index 41af5c4b1..90f3d1b42 100644 --- a/modoboa/admin/migrations/0018_auto__add_unique_alias_domain_address.py +++ b/modoboa/admin/migrations/0018_auto__add_unique_alias_domain_address.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(SchemaMigration): @@ -61,7 +63,7 @@ class Migration(SchemaMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -69,7 +71,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -77,9 +79,6 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'last_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) }, - 'admin.user': { - 'Meta': {'object_name': 'User', 'db_table': "'auth_user'", '_ormbases': ['auth.User'], 'proxy': 'True'} - }, 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -93,7 +92,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0019_set_default_group.py b/modoboa/admin/migrations/0019_set_default_group.py index 323f7ce3a..e80ada36b 100644 --- a/modoboa/admin/migrations/0019_set_default_group.py +++ b/modoboa/admin/migrations/0019_set_default_group.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name, user_table_name + class Migration(DataMigration): @@ -13,7 +15,7 @@ class Migration(DataMigration): except orm["auth.Group"].DoesNotExist: sugroup = orm["auth.Group"](name="SimpleUsers") sugroup.save() - for account in orm["auth.User"].objects.all(): + for account in orm[user_model_name].objects.all(): if not len(account.groups.all()): account.groups.add(sugroup) account.save() @@ -66,7 +68,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -74,7 +76,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -95,7 +97,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0020_rename_amavis_ext.py b/modoboa/admin/migrations/0020_rename_amavis_ext.py index f808ed77a..60fe83450 100644 --- a/modoboa/admin/migrations/0020_rename_amavis_ext.py +++ b/modoboa/admin/migrations/0020_rename_amavis_ext.py @@ -4,6 +4,8 @@ from south.db import db from south.v2 import DataMigration from django.db import models from django.core.exceptions import ObjectDoesNotExist +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -68,7 +70,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -76,7 +78,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -97,7 +99,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0021_default_superadmin_ownership.py b/modoboa/admin/migrations/0021_default_superadmin_ownership.py index e93bf36d9..fe26ce3a2 100644 --- a/modoboa/admin/migrations/0021_default_superadmin_ownership.py +++ b/modoboa/admin/migrations/0021_default_superadmin_ownership.py @@ -4,13 +4,15 @@ from south.db import db from south.v2 import DataMigration from django.db import models from django.core.exceptions import ObjectDoesNotExist +from modoboa.lib.compat import user_model_name, user_table_name + class Migration(DataMigration): def forwards(self, orm): "Write your forwards methods here." try: - su = orm['auth.User'].objects.get(pk=1) + su = orm[user_model_name].objects.get(pk=1) except ObjectDoesNotExist: return uct = orm['contenttypes.ContentType'].objects.get( @@ -65,7 +67,7 @@ class Migration(DataMigration): 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -73,7 +75,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -94,7 +96,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0022_auto__del_field_mailbox_uid__del_field_mailbox_gid__del_field_mailbox_.py b/modoboa/admin/migrations/0022_auto__del_field_mailbox_uid__del_field_mailbox_gid__del_field_mailbox_.py index 13dc4fcd0..c80960775 100644 --- a/modoboa/admin/migrations/0022_auto__del_field_mailbox_uid__del_field_mailbox_gid__del_field_mailbox_.py +++ b/modoboa/admin/migrations/0022_auto__del_field_mailbox_uid__del_field_mailbox_gid__del_field_mailbox_.py @@ -3,6 +3,7 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name class Migration(SchemaMigration): @@ -69,7 +70,7 @@ class Migration(SchemaMigration): 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.Domain']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -77,7 +78,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -98,7 +99,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), @@ -123,4 +124,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['admin'] \ No newline at end of file + complete_apps = ['admin'] diff --git a/modoboa/admin/migrations/0023_auto__add_quota.py b/modoboa/admin/migrations/0023_auto__add_quota.py index 51de52372..b6f95b699 100644 --- a/modoboa/admin/migrations/0023_auto__add_quota.py +++ b/modoboa/admin/migrations/0023_auto__add_quota.py @@ -3,6 +3,7 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name class Migration(SchemaMigration): @@ -62,7 +63,7 @@ class Migration(SchemaMigration): 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.Domain']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -70,7 +71,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -97,7 +98,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), @@ -122,4 +123,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['admin'] \ No newline at end of file + complete_apps = ['admin'] diff --git a/modoboa/admin/migrations/0024_create_quotas.py b/modoboa/admin/migrations/0024_create_quotas.py index 874b776f4..06480b9f4 100644 --- a/modoboa/admin/migrations/0024_create_quotas.py +++ b/modoboa/admin/migrations/0024_create_quotas.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -55,7 +57,7 @@ class Migration(DataMigration): 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.Domain']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -63,7 +65,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['%s']" % user_model_name}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -90,7 +92,7 @@ class Migration(DataMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0025_auto__add_field_quota_mbox.py b/modoboa/admin/migrations/0025_auto__add_field_quota_mbox.py index 4242aafca..a97c68b81 100644 --- a/modoboa/admin/migrations/0025_auto__add_field_quota_mbox.py +++ b/modoboa/admin/migrations/0025_auto__add_field_quota_mbox.py @@ -3,6 +3,7 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name class Migration(SchemaMigration): @@ -59,7 +60,7 @@ class Migration(SchemaMigration): 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -67,7 +68,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -95,7 +96,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - u'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), @@ -120,4 +121,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['admin'] \ No newline at end of file + complete_apps = ['admin'] diff --git a/modoboa/admin/migrations/0026_set_quota_mbox.py b/modoboa/admin/migrations/0026_set_quota_mbox.py index e60b4441a..351c35223 100644 --- a/modoboa/admin/migrations/0026_set_quota_mbox.py +++ b/modoboa/admin/migrations/0026_set_quota_mbox.py @@ -3,6 +3,8 @@ import datetime from south.db import db from south.v2 import DataMigration from django.db import models +from modoboa.lib.compat import user_model_name + class Migration(DataMigration): @@ -56,7 +58,7 @@ class Migration(DataMigration): 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -64,7 +66,7 @@ class Migration(DataMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -92,7 +94,7 @@ class Migration(DataMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - u'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), diff --git a/modoboa/admin/migrations/0027_auto__add_field_mailbox_use_domain_quota.py b/modoboa/admin/migrations/0027_auto__add_field_mailbox_use_domain_quota.py index 15b70f89a..03ffaabe7 100644 --- a/modoboa/admin/migrations/0027_auto__add_field_mailbox_use_domain_quota.py +++ b/modoboa/admin/migrations/0027_auto__add_field_mailbox_use_domain_quota.py @@ -3,6 +3,7 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name class Migration(SchemaMigration): @@ -60,7 +61,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'use_domain_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -68,7 +69,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -96,7 +97,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - u'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), @@ -121,4 +122,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['admin'] \ No newline at end of file + complete_apps = ['admin'] diff --git a/modoboa/admin/migrations/0028_auto__chg_field_mailbox_quota.py b/modoboa/admin/migrations/0028_auto__chg_field_mailbox_quota.py index 4c6fc3f97..90e924029 100644 --- a/modoboa/admin/migrations/0028_auto__chg_field_mailbox_quota.py +++ b/modoboa/admin/migrations/0028_auto__chg_field_mailbox_quota.py @@ -3,6 +3,7 @@ import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models +from modoboa.lib.compat import user_model_name class Migration(SchemaMigration): @@ -58,7 +59,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'quota': ('django.db.models.fields.PositiveIntegerField', [], {}), 'use_domain_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, @@ -66,7 +67,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['%s']" % user_model_name}) }, u'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, @@ -94,7 +95,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - u'auth.user': { + user_model_name: { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), @@ -119,4 +120,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['admin'] \ No newline at end of file + complete_apps = ['admin'] diff --git a/modoboa/admin/migrations/0029_auto__add_user__chg_field_mailbox_user__chg_field_objectaccess_user.py b/modoboa/admin/migrations/0029_auto__add_user__chg_field_mailbox_user__chg_field_objectaccess_user.py new file mode 100644 index 000000000..3adc88fee --- /dev/null +++ b/modoboa/admin/migrations/0029_auto__add_user__chg_field_mailbox_user__chg_field_objectaccess_user.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models +from modoboa.lib.dbutils import db_table_exists +from modoboa.lib.compat import user_model_name + + +class Migration(SchemaMigration): + + def forwards(self, orm): + if db_table_exists('admin_user'): + return + db.rename_table('auth_user', 'admin_user') + db.rename_table('auth_user_groups', 'admin_user_groups') + db.rename_table('auth_user_user_permissions', 'admin_user_user_permissions') + + # Changing field 'Mailbox.user' + db.alter_column(u'admin_mailbox', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[user_model_name])) + # Changing field 'ObjectAccess.user' + db.alter_column(u'admin_objectaccess', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[user_model_name])) + + def backwards(self, orm): + raise RuntimeError("Cannot revert this migration") + + models = { + u'admin.alias': { + 'Meta': {'ordering': "['domain__name', 'address']", 'unique_together': "(('address', 'domain'),)", 'object_name': 'Alias'}, + 'address': ('django.db.models.fields.CharField', [], {'max_length': '254'}), + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'extmboxes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mboxes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['admin.Mailbox']", 'symmetrical': 'False'}) + }, + u'admin.domain': { + 'Meta': {'ordering': "['name']", 'object_name': 'Domain'}, + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), + 'quota': ('django.db.models.fields.IntegerField', [], {}) + }, + u'admin.domainalias': { + 'Meta': {'object_name': 'DomainAlias'}, + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), + 'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}) + }, + u'admin.extension': { + 'Meta': {'object_name': 'Extension'}, + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + u'admin.mailbox': { + 'Meta': {'object_name': 'Mailbox'}, + 'address': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'quota': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'use_domain_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.User']"}) + }, + u'admin.objectaccess': { + 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.User']"}) + }, + u'admin.objectdates': { + 'Meta': {'object_name': 'ObjectDates'}, + 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'admin.quota': { + 'Meta': {'object_name': 'Quota'}, + 'bytes': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'mbox': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'quota_value'", 'unique': 'True', 'null': 'True', 'to': u"orm['admin.Mailbox']"}), + 'messages': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'username': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'primary_key': 'True'}) + }, + u'admin.user': { + 'Meta': {'ordering': "['username']", 'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '254', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '254'}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + } + } + + complete_apps = ['admin'] diff --git a/modoboa/admin/migrations/0030_update_permissions.py b/modoboa/admin/migrations/0030_update_permissions.py new file mode 100644 index 000000000..2d1a52b09 --- /dev/null +++ b/modoboa/admin/migrations/0030_update_permissions.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + try: + orig_ct = orm["contenttypes.ContentType"].objects.get(app_label="auth", name="user") + except orm["contenttypes.ContentType"].DoesNotExist: + return + new_ct = orm["contenttypes.ContentType"].objects.get(app_label="admin", name="user") + orm["auth.Permission"].objects.filter(content_type=orig_ct).update(content_type=new_ct) + orig_ct.delete() + + def backwards(self, orm): + "Write your backwards methods here." + raise RuntimeError("Cannot revert this migration") + + models = { + u'admin.alias': { + 'Meta': {'ordering': "['domain__name', 'address']", 'unique_together': "(('address', 'domain'),)", 'object_name': 'Alias'}, + 'address': ('django.db.models.fields.CharField', [], {'max_length': '254'}), + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'extmboxes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mboxes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['admin.Mailbox']", 'symmetrical': 'False'}) + }, + u'admin.domain': { + 'Meta': {'ordering': "['name']", 'object_name': 'Domain'}, + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), + 'quota': ('django.db.models.fields.IntegerField', [], {}) + }, + u'admin.domainalias': { + 'Meta': {'object_name': 'DomainAlias'}, + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), + 'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}) + }, + u'admin.extension': { + 'Meta': {'object_name': 'Extension'}, + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + u'admin.mailbox': { + 'Meta': {'object_name': 'Mailbox'}, + 'address': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.ObjectDates']"}), + 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.Domain']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'quota': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'use_domain_quota': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.User']"}) + }, + u'admin.objectaccess': { + 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['admin.User']"}) + }, + u'admin.objectdates': { + 'Meta': {'object_name': 'ObjectDates'}, + 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'admin.quota': { + 'Meta': {'object_name': 'Quota'}, + 'bytes': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'mbox': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'quota_value'", 'unique': 'True', 'null': 'True', 'to': u"orm['admin.Mailbox']"}), + 'messages': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'username': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'primary_key': 'True'}) + }, + u'admin.user': { + 'Meta': {'ordering': "['username']", 'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '254', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '254'}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + } + } + + complete_apps = ['admin', 'auth', 'contenttypes'] + symmetrical = True diff --git a/modoboa/admin/models.py b/modoboa/admin/models.py index 137880d8e..e95786733 100644 --- a/modoboa/admin/models.py +++ b/modoboa/admin/models.py @@ -1,13 +1,15 @@ # coding: utf-8 +from django.core import validators from django.db import models, IntegrityError from django.db.models import Q from django.db.models.signals import pre_delete from django.dispatch import receiver from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic -from django.contrib.auth.models import User as DUser, UserManager, Group +from django.contrib.auth.models import UserManager, Group, AbstractBaseUser, PermissionsMixin from django.utils.translation import ugettext as _, ugettext_lazy from django.utils.crypto import constant_time_compare +from django.utils import timezone from django.conf import settings from modoboa.lib import md5crypt, parameters, events from modoboa.lib.exceptions import PermDeniedException @@ -29,8 +31,8 @@ except ImportError: ldap_available = False -class User(DUser): - """Proxy for the ``User`` model. +class User(AbstractBaseUser, PermissionsMixin): + """Custom User model. It overloads the way passwords are stored into the database. The main reason to change this mechanism is to ensure the @@ -38,23 +40,24 @@ class User(DUser): It also adds new attributes and methods. """ + username = models.CharField(max_length=254, unique=True) + first_name = models.CharField(max_length=30, blank=True) + last_name = models.CharField(max_length=30, blank=True) + email = models.EmailField(max_length=254, blank=True) + is_staff = models.BooleanField(default=False) + is_active = models.BooleanField(default=True) + date_joined = models.DateTimeField(default=timezone.now) + + objects = UserManager() + + USERNAME_FIELD = 'username' + REQUIRED_FIELDS = ['email'] + class Meta: - proxy = True ordering = ["username"] password_expr = re.compile(r'(\{(\w+)\}|(\$1\$))(.+)') - def __init__(self, *args, **kwargs): - """Constructor - - A little hack to increase the maximum length for the username - field. - """ - max_length = 254 - DUser._meta.get_field('username').max_length = max_length - DUser._meta.get_field('username').validators[0].limit_value = 254 - super(User, self).__init__(*args, **kwargs) - def __unicode__(self): return self.fullname diff --git a/modoboa/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py index 8ae188ad2..3474f5e20 100644 --- a/modoboa/admin/templatetags/admin_extras.py +++ b/modoboa/admin/templatetags/admin_extras.py @@ -23,7 +23,7 @@ def admin_menu(selection, user): ] entries += \ events.raiseQueryEvent("AdminMenuDisplay", "top_menu", user) - if user.has_perm("auth.add_user") or user.has_perm("admin.add_alias"): + if user.has_perm("admin.add_user") or user.has_perm("admin.add_alias"): entries += [ {"name" : "identities", "url" : reverse("modoboa.admin.views.identities"), diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index cd1aafd60..1aa30489c 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -51,7 +51,7 @@ def domains(request, tplname="admin/domains.html"): }) @login_required -@permission_required("auth.add_user") +@permission_required("admin.add_user") def domains_list(request): doms = map(lambda dom: dom.name, request.user.get_domains()) return ajax_simple_response(doms) @@ -318,7 +318,7 @@ def delforward(request): return _del_alias(request, "Forward deleted", "Forwards deleted") @login_required -@user_passes_test(lambda u: u.has_perm("auth.add_user") or u.has_perm("admin.add_alias")) +@user_passes_test(lambda u: u.has_perm("admin.add_user") or u.has_perm("admin.add_alias")) def _identities(request): idents_list = request.user.get_identities(request.GET) objects = sorted(idents_list, key=lambda o: o.identity) @@ -341,7 +341,7 @@ def _identities(request): }) @login_required -@user_passes_test(lambda u: u.has_perm("auth.add_user") or u.has_perm("admin.add_alias")) +@user_passes_test(lambda u: u.has_perm("admin.add_user") or u.has_perm("admin.add_alias")) def identities(request, tplname="admin/identities.html"): return render(request, tplname, { "selection" : "identities", @@ -349,7 +349,7 @@ def identities(request, tplname="admin/identities.html"): }) @login_required -@permission_required("auth.add_user") +@permission_required("admin.add_user") def accounts_list(request): accs = User.objects.filter(is_superuser=False).exclude(groups__name='SimpleUsers') res = map(lambda a: a.username, accs.all()) @@ -401,7 +401,7 @@ def list_quotas(request, tplname="admin/quotas.html"): @login_required -@permission_required("auth.add_user") +@permission_required("admin.add_user") @transaction.commit_on_success def newaccount(request, tplname='common/wizard_forms.html'): def create_account(steps): @@ -456,7 +456,7 @@ def newaccount(request, tplname='common/wizard_forms.html'): return render(request, tplname, ctx) @login_required -@permission_required("auth.change_user") +@permission_required("admin.change_user") @transaction.commit_on_success def editaccount(request, accountid, tplname="common/tabforms.html"): account = User.objects.get(pk=accountid) @@ -500,7 +500,7 @@ def editaccount(request, accountid, tplname="common/tabforms.html"): return render(request, tplname, ctx) @login_required -@permission_required("auth.delete_user") +@permission_required("admin.delete_user") @transaction.commit_on_success def delaccount(request): selection = request.GET["selection"].split(",") @@ -692,7 +692,7 @@ def importdata(request, formclass=ImportDataForm): }) @login_required -@user_passes_test(lambda u: u.has_perm("auth.add_user") or u.has_perm("auth.add_alias")) +@user_passes_test(lambda u: u.has_perm("admin.add_user") or u.has_perm("admin.add_alias")) def import_identities(request): if request.method == "POST": return importdata(request, ImportIdentitiesForm) @@ -735,7 +735,7 @@ def _export(content, filename): return resp @login_required -@permission_required(lambda u: u.has_perm("auth.add_user") or u.has_perm("auth.add_alias")) +@permission_required(lambda u: u.has_perm("admin.add_user") or u.has_perm("admin.add_alias")) def export_identities(request): ctx = { "title" : _("Export identities"), diff --git a/modoboa/core/templates/settings.py b/modoboa/core/templates/settings.py index ca045444e..7adf2fdb8 100644 --- a/modoboa/core/templates/settings.py +++ b/modoboa/core/templates/settings.py @@ -155,6 +155,8 @@ INSTALLED_APPS = ( # 'modoboa.tools.pfxadmin_migrate', ) +AUTH_USER_MODEL = 'admin.User' + AUTHENTICATION_BACKENDS = ( 'modoboa.lib.authbackends.SimpleBackend', ) diff --git a/modoboa/extensions/limits/migrations/0002_update_user_foreign_key.py b/modoboa/extensions/limits/migrations/0002_update_user_foreign_key.py new file mode 100644 index 000000000..1c4b007ac --- /dev/null +++ b/modoboa/extensions/limits/migrations/0002_update_user_foreign_key.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + db.alter_column(u'limits_limitspool', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['admin.User'])) + + def backwards(self, orm): + pass + + models = { + u'admin.user': { + 'Meta': {'ordering': "['username']", 'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '254'}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'limits.limit': { + 'Meta': {'unique_together': "(('name', 'pool'),)", 'object_name': 'Limit'}, + 'curvalue': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'maxvalue': ('django.db.models.fields.IntegerField', [], {'default': '-2'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['limits.LimitsPool']"}) + }, + u'limits.limitspool': { + 'Meta': {'object_name': 'LimitsPool'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['admin.User']", 'unique': 'True'}) + } + } + + complete_apps = ['limits'] diff --git a/modoboa/extensions/limits/models.py b/modoboa/extensions/limits/models.py index bd7b505cc..6bb33a46b 100644 --- a/modoboa/extensions/limits/models.py +++ b/modoboa/extensions/limits/models.py @@ -4,6 +4,7 @@ from django.db import models from django.contrib.contenttypes import generic from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.admin.models import User +from django.conf import settings limits_tpl = [ ("domain_admins_limit", ugettext_lazy("Domain admins")), @@ -14,7 +15,7 @@ limits_tpl = [ ] class LimitsPool(models.Model): - user = models.OneToOneField(User) + user = models.OneToOneField(settings.AUTH_USER_MODEL) def create_limits(self): for ltpl in limits_tpl: diff --git a/modoboa/lib/compat.py b/modoboa/lib/compat.py new file mode 100644 index 000000000..ed54ea216 --- /dev/null +++ b/modoboa/lib/compat.py @@ -0,0 +1,4 @@ +from django.conf import settings + +user_model_name = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') +user_table_name = "auth_user" if user_model_name == "auth.User" else "admin_user" diff --git a/modoboa/lib/models.py b/modoboa/lib/models.py index 02ac15b23..a1edffc97 100644 --- a/modoboa/lib/models.py +++ b/modoboa/lib/models.py @@ -1,5 +1,5 @@ from django.db import models -from django.contrib.auth.models import User +from django.conf import settings class Parameter(models.Model): @@ -12,7 +12,7 @@ class Parameter(models.Model): class UserParameter(models.Model): - user = models.ForeignKey("auth.User") + user = models.ForeignKey(settings.AUTH_USER_MODEL) name = models.CharField(max_length=255) value = models.CharField(max_length=255)