mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 20:40:17 +02:00
Remove services migrations
This commit is contained in:
parent
76ab835347
commit
954f36dae6
@ -3,268 +3,19 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
from django.conf import settings
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def optional_dependencies():
|
|
||||||
"""
|
|
||||||
Only require these migrations if the given app
|
|
||||||
is installed. If the app isn't installed then
|
|
||||||
the relevant AuthServicesInfo field will be LOST
|
|
||||||
when the data migration is run.
|
|
||||||
"""
|
|
||||||
installed_apps = settings.INSTALLED_APPS
|
|
||||||
|
|
||||||
dependencies = []
|
|
||||||
|
|
||||||
# Skip adding module dependencies if the settings specifies that services have been migrated
|
|
||||||
if not getattr(settings, 'SERVICES_MIGRATED', False):
|
|
||||||
if 'services.modules.xenforo' in installed_apps:
|
|
||||||
dependencies.append(('xenforo', '0001_initial'))
|
|
||||||
if 'services.modules.discord' in installed_apps:
|
|
||||||
dependencies.append(('discord', '0001_initial'))
|
|
||||||
if 'services.modules.discourse' in installed_apps:
|
|
||||||
dependencies.append(('discourse', '0001_initial'))
|
|
||||||
if 'services.modules.ipboard' in installed_apps:
|
|
||||||
dependencies.append(('ipboard', '0001_initial'))
|
|
||||||
if 'services.modules.ips4' in installed_apps:
|
|
||||||
dependencies.append(('ips4', '0001_initial'))
|
|
||||||
if 'services.modules.market' in installed_apps:
|
|
||||||
dependencies.append(('market', '0001_initial'))
|
|
||||||
if 'services.modules.openfire' in installed_apps:
|
|
||||||
dependencies.append(('openfire', '0001_initial'))
|
|
||||||
if 'services.modules.smf' in installed_apps:
|
|
||||||
dependencies.append(('smf', '0001_initial'))
|
|
||||||
if 'services.modules.teamspeak3' in installed_apps:
|
|
||||||
dependencies.append(('teamspeak3', '0003_teamspeak3user'))
|
|
||||||
if 'services.modules.mumble' in installed_apps:
|
|
||||||
dependencies.append(('mumble', '0003_mumbleuser_user'))
|
|
||||||
if 'services.modules.phpbb3' in installed_apps:
|
|
||||||
dependencies.append(('phpbb3', '0001_initial'))
|
|
||||||
|
|
||||||
return dependencies
|
|
||||||
|
|
||||||
|
|
||||||
class DatalossException(Exception):
|
|
||||||
def __init__(self, field, app):
|
|
||||||
message = "This migration would cause a loss of data for the %s field, ensure the %s app is installed and" \
|
|
||||||
" run the migration again" % (field, app)
|
|
||||||
super(Exception, self).__init__(message)
|
|
||||||
|
|
||||||
|
|
||||||
def check_for_dataloss(authservicesinfo):
|
|
||||||
"""
|
|
||||||
Check if any of the authservicesinfo contain a field which contains data
|
|
||||||
that would be lost because the target module for migration is not installed.
|
|
||||||
If a record is found with no matching target installed an exception is raised.
|
|
||||||
:param authservicesinfo: AuthServicesInfo records to check
|
|
||||||
"""
|
|
||||||
installed_apps = settings.INSTALLED_APPS
|
|
||||||
|
|
||||||
for authinfo in authservicesinfo:
|
|
||||||
if authinfo.xenforo_username and 'services.modules.xenforo' not in installed_apps:
|
|
||||||
raise DatalossException('xenforo_username', 'services.modules.xenforo')
|
|
||||||
if authinfo.discord_uid and 'services.modules.discord' not in installed_apps:
|
|
||||||
raise DatalossException('discord_uid', 'services.modules.discord')
|
|
||||||
if authinfo.discourse_enabled and 'services.modules.discourse' not in installed_apps:
|
|
||||||
raise DatalossException('discourse_enabled', 'services.modules.discourse')
|
|
||||||
if authinfo.ipboard_username and 'services.modules.ipboard' not in installed_apps:
|
|
||||||
raise DatalossException('ipboard_username', 'services.modules.ipboard')
|
|
||||||
if authinfo.ips4_id and 'services.modules.ips4' not in installed_apps:
|
|
||||||
raise DatalossException('ips4_id', 'services.modules.ips4')
|
|
||||||
if authinfo.market_username and 'services.modules.market' not in installed_apps:
|
|
||||||
raise DatalossException('market_username', 'services.modules.market')
|
|
||||||
if authinfo.jabber_username and 'services.modules.openfire' not in installed_apps:
|
|
||||||
raise DatalossException('jabber_username', 'services.modules.openfire')
|
|
||||||
if authinfo.smf_username and 'services.modules.smf' not in installed_apps:
|
|
||||||
raise DatalossException('smf_username', 'services.modules.smf')
|
|
||||||
if authinfo.teamspeak3_uid and 'services.modules.teamspeak3' not in installed_apps:
|
|
||||||
raise DatalossException('teamspeak3_uid', 'services.modules.teamspeak3')
|
|
||||||
if authinfo.mumble_username and 'services.modules.mumble' not in installed_apps:
|
|
||||||
raise DatalossException('mumble_username', 'services.modules.mumble')
|
|
||||||
if authinfo.forum_username and 'services.modules.phpbb3' not in installed_apps:
|
|
||||||
raise DatalossException('forum_username', 'services.modules.phpbb3')
|
|
||||||
|
|
||||||
|
|
||||||
def forward(apps, schema_editor):
|
|
||||||
installed_apps = settings.INSTALLED_APPS
|
|
||||||
AuthServicesInfo = apps.get_model("authentication", "AuthServicesInfo")
|
|
||||||
|
|
||||||
# Check if any records would result in dataloss
|
|
||||||
check_for_dataloss(AuthServicesInfo.objects.all())
|
|
||||||
|
|
||||||
XenforoUser = apps.get_model('xenforo', 'XenforoUser') if 'services.modules.xenforo' in installed_apps else None
|
|
||||||
DiscordUser = apps.get_model('discord', 'DiscordUser') if 'services.modules.discord' in installed_apps else None
|
|
||||||
DiscourseUser = apps.get_model('discourse', 'DiscourseUser') if 'services.modules.discourse' in installed_apps else None
|
|
||||||
IpboardUser = apps.get_model('ipboard', 'IpboardUser') if 'services.modules.ipboard' in installed_apps else None
|
|
||||||
Ips4User = apps.get_model('ips4', 'Ips4User') if 'services.modules.ips4' in installed_apps else None
|
|
||||||
MarketUser = apps.get_model('market', 'MarketUser') if 'services.modules.market' in installed_apps else None
|
|
||||||
OpenfireUser = apps.get_model('openfire', 'OpenfireUser') if 'services.modules.openfire' in installed_apps else None
|
|
||||||
SmfUser = apps.get_model('smf', 'SmfUser') if 'services.modules.smf' in installed_apps else None
|
|
||||||
Teamspeak3User = apps.get_model('teamspeak3', 'Teamspeak3User') if 'services.modules.teamspeak3' in installed_apps else None
|
|
||||||
MumbleUser = apps.get_model('mumble', 'MumbleUser') if 'services.modules.mumble' in installed_apps else None
|
|
||||||
Phpbb3User = apps.get_model('phpbb3', 'Phpbb3User') if 'services.modules.phpbb3' in installed_apps else None
|
|
||||||
|
|
||||||
for authinfo in AuthServicesInfo.objects.all():
|
|
||||||
user = authinfo.user
|
|
||||||
|
|
||||||
if XenforoUser is not None and authinfo.xenforo_username:
|
|
||||||
logging.debug('Updating Xenforo info for %s' % user.username)
|
|
||||||
xfu = XenforoUser()
|
|
||||||
xfu.user = user
|
|
||||||
xfu.username = authinfo.xenforo_username
|
|
||||||
xfu.save()
|
|
||||||
|
|
||||||
if DiscordUser is not None and authinfo.discord_uid:
|
|
||||||
logging.debug('Updating Discord info for %s' % user.username)
|
|
||||||
du = DiscordUser()
|
|
||||||
du.user = user
|
|
||||||
du.uid = authinfo.discord_uid
|
|
||||||
du.save()
|
|
||||||
|
|
||||||
if DiscourseUser is not None and authinfo.discourse_enabled:
|
|
||||||
logging.debug('Updating Discourse info for %s' % user.username)
|
|
||||||
du = DiscourseUser()
|
|
||||||
du.user = user
|
|
||||||
du.enabled = authinfo.discourse_enabled
|
|
||||||
du.save()
|
|
||||||
|
|
||||||
if IpboardUser is not None and authinfo.ipboard_username:
|
|
||||||
logging.debug('Updating IPBoard info for %s' % user.username)
|
|
||||||
ipb = IpboardUser()
|
|
||||||
ipb.user = user
|
|
||||||
ipb.username = authinfo.ipboard_username
|
|
||||||
ipb.save()
|
|
||||||
|
|
||||||
if Ips4User is not None and authinfo.ips4_id:
|
|
||||||
logging.debug('Updating Ips4 info for %s' % user.username)
|
|
||||||
ips = Ips4User()
|
|
||||||
ips.user = user
|
|
||||||
ips.id = authinfo.ips4_id
|
|
||||||
ips.username = authinfo.ips4_username
|
|
||||||
ips.save()
|
|
||||||
|
|
||||||
if MarketUser is not None and authinfo.market_username:
|
|
||||||
logging.debug('Updating Market info for %s' % user.username)
|
|
||||||
mkt = MarketUser()
|
|
||||||
mkt.user = user
|
|
||||||
mkt.username = authinfo.market_username
|
|
||||||
mkt.save()
|
|
||||||
|
|
||||||
if OpenfireUser is not None and authinfo.jabber_username:
|
|
||||||
logging.debug('Updating Openfire (jabber) info for %s' % user.username)
|
|
||||||
ofu = OpenfireUser()
|
|
||||||
ofu.user = user
|
|
||||||
ofu.username = authinfo.jabber_username
|
|
||||||
ofu.save()
|
|
||||||
|
|
||||||
if SmfUser is not None and authinfo.smf_username:
|
|
||||||
logging.debug('Updating SMF info for %s' % user.username)
|
|
||||||
smf = SmfUser()
|
|
||||||
smf.user = user
|
|
||||||
smf.username = authinfo.smf_username
|
|
||||||
smf.save()
|
|
||||||
|
|
||||||
if Teamspeak3User is not None and authinfo.teamspeak3_uid:
|
|
||||||
logging.debug('Updating Teamspeak3 info for %s' % user.username)
|
|
||||||
ts3 = Teamspeak3User()
|
|
||||||
ts3.user = user
|
|
||||||
ts3.uid = authinfo.teamspeak3_uid
|
|
||||||
ts3.perm_key = authinfo.teamspeak3_perm_key
|
|
||||||
ts3.save()
|
|
||||||
|
|
||||||
if MumbleUser is not None and authinfo.mumble_username:
|
|
||||||
logging.debug('Updating mumble info for %s' % user.username)
|
|
||||||
try:
|
|
||||||
mbl = MumbleUser.objects.get(username=authinfo.mumble_username)
|
|
||||||
mbl.user = user
|
|
||||||
mbl.save()
|
|
||||||
except ObjectDoesNotExist:
|
|
||||||
logger.warn('AuthServiceInfo mumble_username for {} but no '
|
|
||||||
'corresponding record in MumbleUser, dropping'.format(user.username))
|
|
||||||
|
|
||||||
if Phpbb3User is not None and authinfo.forum_username:
|
|
||||||
logging.debug('Updating phpbb3 info for %s' % user.username)
|
|
||||||
phb = Phpbb3User()
|
|
||||||
phb.user = user
|
|
||||||
phb.username = authinfo.forum_username
|
|
||||||
phb.save()
|
|
||||||
|
|
||||||
|
|
||||||
def reverse(apps, schema_editor):
|
|
||||||
User = apps.get_model('auth', 'User')
|
|
||||||
AuthServicesInfo = apps.get_model("authentication", "AuthServicesInfo")
|
|
||||||
|
|
||||||
for user in User.objects.all():
|
|
||||||
authinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
|
|
||||||
|
|
||||||
if hasattr(user, 'xenforo'):
|
|
||||||
logging.debug('Reversing xenforo for %s' % user.username)
|
|
||||||
authinfo.xenforo_username = user.xenforo.username
|
|
||||||
|
|
||||||
if hasattr(user, 'discord'):
|
|
||||||
logging.debug('Reversing discord for %s' % user.username)
|
|
||||||
authinfo.discord_uid = user.discord.uid
|
|
||||||
|
|
||||||
if hasattr(user, 'discourse'):
|
|
||||||
logging.debug('Reversing discourse for %s' % user.username)
|
|
||||||
authinfo.discourse_enabled = user.discourse.enabled
|
|
||||||
|
|
||||||
if hasattr(user, 'ipboard'):
|
|
||||||
logging.debug('Reversing ipboard for %s' % user.username)
|
|
||||||
authinfo.ipboard_username = user.ipboard.username
|
|
||||||
|
|
||||||
if hasattr(user, 'ips4'):
|
|
||||||
logging.debug('Reversing ips4 for %s' % user.username)
|
|
||||||
authinfo.ips4_id = user.ips4.id
|
|
||||||
authinfo.ips4_username = user.ips4.username
|
|
||||||
|
|
||||||
if hasattr(user, 'market'):
|
|
||||||
logging.debug('Reversing market for %s' % user.username)
|
|
||||||
authinfo.market_username = user.market.username
|
|
||||||
|
|
||||||
if hasattr(user, 'openfire'):
|
|
||||||
logging.debug('Reversing openfire (jabber) for %s' % user.username)
|
|
||||||
authinfo.jabber_username = user.openfire.username
|
|
||||||
|
|
||||||
if hasattr(user, 'smf'):
|
|
||||||
logging.debug('Reversing smf for %s' % user.username)
|
|
||||||
authinfo.smf_username = user.smf.username
|
|
||||||
|
|
||||||
if hasattr(user, 'teamspeak3'):
|
|
||||||
logging.debug('Reversing teamspeak3 for %s' % user.username)
|
|
||||||
authinfo.teamspeak3_uid = user.teamspeak3.uid
|
|
||||||
authinfo.teamspeak3_perm_key = user.teamspeak3.perm_key
|
|
||||||
|
|
||||||
if hasattr(user, 'mumble'):
|
|
||||||
logging.debug('Reversing mumble for %s' % user.username)
|
|
||||||
try:
|
|
||||||
authinfo.mumble_username = user.mumble.all()[:1].get().username
|
|
||||||
except ObjectDoesNotExist:
|
|
||||||
logging.debug('Failed to reverse mumble for %s' % user.username)
|
|
||||||
|
|
||||||
if hasattr(user, 'phpbb3'):
|
|
||||||
logging.debug('Reversing phpbb3 for %s' % user.username)
|
|
||||||
authinfo.forum_username = user.phpbb3.username
|
|
||||||
|
|
||||||
logging.debug('Saving AuthServicesInfo for %s ' % user.username)
|
|
||||||
authinfo.save()
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = optional_dependencies() + [
|
dependencies = [
|
||||||
('authentication', '0012_remove_add_delete_authservicesinfo_permissions'),
|
('authentication', '0012_remove_add_delete_authservicesinfo_permissions'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
# Migrate data
|
|
||||||
migrations.RunPython(forward, reverse),
|
|
||||||
# Remove fields
|
# Remove fields
|
||||||
migrations.RemoveField(
|
migrations.RemoveField(
|
||||||
model_name='authservicesinfo',
|
model_name='authservicesinfo',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user