diff --git a/social_auth/migrations/0001_initial.py b/social_auth/migrations/0001_initial.py index 6f026b429..0a61a54a7 100644 --- a/social_auth/migrations/0001_initial.py +++ b/social_auth/migrations/0001_initial.py @@ -1,34 +1,138 @@ # -*- coding: utf-8 -*- +import datetime from south.db import db from south.v2 import SchemaMigration -from social_auth.models import UserSocialAuth, Nonce, Association +from django.db import models +from django.conf import settings +from social_auth.utils import custom_user_frozen_models -def fields(model): - return [(f.name, f) for f in model._meta.local_fields] + +USER_MODEL = getattr(settings, 'SOCIAL_AUTH_USER_MODEL', None) or \ + getattr(settings, 'AUTH_USER_MODEL', None) or \ + 'auth.User' +UID_LENGTH = getattr(settings, 'SOCIAL_AUTH_UID_LENGTH', 255) +NONCE_SERVER_URL_LENGTH = getattr(settings, 'SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH', 255) +ASSOCIATION_SERVER_URL_LENGTH = getattr(settings, 'SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH', 255) +ASSOCIATION_HANDLE_LENGTH = getattr(settings, 'SOCIAL_AUTH_ASSOCIATION_HANDLE_LENGTH', 255) class Migration(SchemaMigration): + def forwards(self, orm): - table = UserSocialAuth._meta.db_table - db.create_table(table, fields(UserSocialAuth)) + # Adding model 'UserSocialAuth' + db.create_table('social_auth_usersocialauth', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='social_auth', to=orm[USER_MODEL])), + ('provider', self.gf('django.db.models.fields.CharField')(max_length=32)), + ('uid', self.gf('django.db.models.fields.CharField')(max_length=UID_LENGTH)), + ('extra_data', self.gf('social_auth.fields.JSONField')(default='{}')), + )) db.send_create_signal('social_auth', ['UserSocialAuth']) - db.create_unique(table, ['provider', 'uid']) - table = Nonce._meta.db_table - db.create_table(table, fields(Nonce)) + # Adding unique constraint on 'UserSocialAuth', fields ['provider', 'uid'] + db.create_unique('social_auth_usersocialauth', ['provider', 'uid']) + + # Adding model 'Nonce' + db.create_table('social_auth_nonce', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('server_url', self.gf('django.db.models.fields.CharField')(max_length=NONCE_SERVER_URL_LENGTH)), + ('timestamp', self.gf('django.db.models.fields.IntegerField')()), + ('salt', self.gf('django.db.models.fields.CharField')(max_length=40)), + )) db.send_create_signal('social_auth', ['Nonce']) - table = Association._meta.db_table - db.create_table(table, fields(Association)) + # Adding model 'Association' + db.create_table('social_auth_association', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('server_url', self.gf('django.db.models.fields.CharField')(max_length=ASSOCIATION_SERVER_URL_LENGTH)), + ('handle', self.gf('django.db.models.fields.CharField')(max_length=ASSOCIATION_HANDLE_LENGTH)), + ('secret', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('issued', self.gf('django.db.models.fields.IntegerField')()), + ('lifetime', self.gf('django.db.models.fields.IntegerField')()), + ('assoc_type', self.gf('django.db.models.fields.CharField')(max_length=64)), + )) db.send_create_signal('social_auth', ['Association']) + def backwards(self, orm): - table = UserSocialAuth._meta.db_table - db.delete_unique(table, ['provider', 'uid']) - db.delete_table(table) - db.delete_table(Nonce._meta.db_table) - db.delete_table(Association._meta.db_table) + # Removing unique constraint on 'UserSocialAuth', fields ['provider', 'uid'] + db.delete_unique('social_auth_usersocialauth', ['provider', 'uid']) + + # Deleting model 'UserSocialAuth' + db.delete_table('social_auth_usersocialauth') + + # Deleting model 'Nonce' + db.delete_table('social_auth_nonce') + + # Deleting model 'Association' + db.delete_table('social_auth_association') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + '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'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'social_auth.association': { + 'Meta': {'object_name': 'Association'}, + 'assoc_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'handle': ('django.db.models.fields.CharField', [], {'max_length': str(ASSOCIATION_HANDLE_LENGTH)}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'issued': ('django.db.models.fields.IntegerField', [], {}), + 'lifetime': ('django.db.models.fields.IntegerField', [], {}), + 'secret': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'server_url': ('django.db.models.fields.CharField', [], {'max_length': str(ASSOCIATION_SERVER_URL_LENGTH)}) + }, + 'social_auth.nonce': { + 'Meta': {'object_name': 'Nonce'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'salt': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'server_url': ('django.db.models.fields.CharField', [], {'max_length': str(NONCE_SERVER_URL_LENGTH)}), + 'timestamp': ('django.db.models.fields.IntegerField', [], {}) + }, + 'social_auth.usersocialauth': { + 'Meta': {'unique_together': "(('provider', 'uid'),)", 'object_name': 'UserSocialAuth'}, + 'extra_data': ('social_auth.fields.JSONField', [], {'default': "'{}'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'uid': ('django.db.models.fields.CharField', [], {'max_length': str(UID_LENGTH)}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'social_auth'", 'to': "orm['" + USER_MODEL + "']"}) + } + } + models.update(custom_user_frozen_models()) complete_apps = ['social_auth'] diff --git a/social_auth/migrations/0002_auto__add_unique_nonce_timestamp_salt_server_url__add_unique_associati.py b/social_auth/migrations/0002_auto__add_unique_nonce_timestamp_salt_server_url__add_unique_associati.py index 5a6b36b53..cbf2b56c3 100644 --- a/social_auth/migrations/0002_auto__add_unique_nonce_timestamp_salt_server_url__add_unique_associati.py +++ b/social_auth/migrations/0002_auto__add_unique_nonce_timestamp_salt_server_url__add_unique_associati.py @@ -1,23 +1,114 @@ # -*- coding: utf-8 -*- +import datetime from south.db import db from south.v2 import SchemaMigration +from django.db import models -from social_auth.models import Nonce, Association +from django.conf import settings +from social_auth.utils import custom_user_frozen_models + + +USER_MODEL = getattr(settings, 'SOCIAL_AUTH_USER_MODEL', None) or \ + getattr(settings, 'AUTH_USER_MODEL', None) or \ + 'auth.User' +UID_LENGTH = getattr(settings, 'SOCIAL_AUTH_UID_LENGTH', 255) +NONCE_SERVER_URL_LENGTH = getattr(settings, 'SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH', 255) +ASSOCIATION_SERVER_URL_LENGTH = getattr(settings, 'SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH', 255) +ASSOCIATION_HANDLE_LENGTH = getattr(settings, 'SOCIAL_AUTH_ASSOCIATION_HANDLE_LENGTH', 255) class Migration(SchemaMigration): + def forwards(self, orm): - db.create_index(Nonce._meta.db_table, ['timestamp']) - db.create_unique(Nonce._meta.db_table, ['timestamp', 'salt', - 'server_url']) - db.create_index(Association._meta.db_table, ['issued']) - db.create_unique(Association._meta.db_table, ['handle', 'server_url']) + # Adding index on 'Nonce', fields ['timestamp'] + db.create_index('social_auth_nonce', ['timestamp']) + + # Adding unique constraint on 'Nonce', fields ['timestamp', 'salt', 'server_url'] + db.create_unique('social_auth_nonce', ['timestamp', 'salt', 'server_url']) + + # Adding index on 'Association', fields ['issued'] + db.create_index('social_auth_association', ['issued']) + + # Adding unique constraint on 'Association', fields ['handle', 'server_url'] + db.create_unique('social_auth_association', ['handle', 'server_url']) + def backwards(self, orm): - db.delete_unique(Association._meta.db_table, ['handle', 'server_url']) - db.delete_index(Association._meta.db_table, ['issued']) - db.delete_unique(Nonce._meta.db_table, ['timestamp', 'salt', - 'server_url']) - db.delete_index(Nonce._meta.db_table, ['timestamp']) + # Removing unique constraint on 'Association', fields ['handle', 'server_url'] + db.delete_unique('social_auth_association', ['handle', 'server_url']) + + # Removing index on 'Association', fields ['issued'] + db.delete_index('social_auth_association', ['issued']) + + # Removing unique constraint on 'Nonce', fields ['timestamp', 'salt', 'server_url'] + db.delete_unique('social_auth_nonce', ['timestamp', 'salt', 'server_url']) + + # Removing index on 'Nonce', fields ['timestamp'] + db.delete_index('social_auth_nonce', ['timestamp']) + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + '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'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'social_auth.association': { + 'Meta': {'unique_together': "(('server_url', 'handle'),)", 'object_name': 'Association'}, + 'assoc_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'handle': ('django.db.models.fields.CharField', [], {'max_length': str(ASSOCIATION_HANDLE_LENGTH)}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'issued': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'lifetime': ('django.db.models.fields.IntegerField', [], {}), + 'secret': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'server_url': ('django.db.models.fields.CharField', [], {'max_length': str(ASSOCIATION_SERVER_URL_LENGTH)}) + }, + 'social_auth.nonce': { + 'Meta': {'unique_together': "(('server_url', 'timestamp', 'salt'),)", 'object_name': 'Nonce'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'salt': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'server_url': ('django.db.models.fields.CharField', [], {'max_length': str(NONCE_SERVER_URL_LENGTH)}), + 'timestamp': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}) + }, + 'social_auth.usersocialauth': { + 'Meta': {'unique_together': "(('provider', 'uid'),)", 'object_name': 'UserSocialAuth'}, + 'extra_data': ('social_auth.fields.JSONField', [], {'default': "'{}'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'provider': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'uid': ('django.db.models.fields.CharField', [], {'max_length': str(UID_LENGTH)}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'social_auth'", 'to': "orm['" + USER_MODEL + "']"}) + } + } + models.update(custom_user_frozen_models()) complete_apps = ['social_auth'] diff --git a/social_auth/utils.py b/social_auth/utils.py index b1f572cf0..d116578df 100644 --- a/social_auth/utils.py +++ b/social_auth/utils.py @@ -258,6 +258,23 @@ def get_backend_name(backend): return getattr(getattr(backend, 'AUTH_BACKEND', backend), 'name', None) +def custom_user_frozen_models(): + user_model = getattr(settings, 'SOCIAL_AUTH_USER_MODEL', None) or \ + getattr(settings, 'AUTH_USER_MODEL', None) or \ + 'auth.User' + migration_name = getattr(settings, 'INITIAL_CUSTOM_USER_MIGRATION', + '0001_initial.py') + user_app, user_model = user_model.split('.') + if user_model != 'auth.User': + from south.migration.base import Migrations + user_migrations = Migrations(user_app) + initial_user_migration = user_migrations.migration(migration_name) + extra_model = initial_user_migration.migration_class().models + else: + extra_model = {} + return extra_model + + if __name__ == '__main__': import doctest doctest.testmod()