users.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. from django.contrib.auth import get_user_model
  2. from django.core.exceptions import ValidationError
  3. from django.utils.crypto import get_random_string
  4. from misago.users.signatures import make_signature_checksum
  5. from . import defstdout, fetch_assoc, movedids, localise_datetime
  6. UserModel = get_user_model()
  7. PRIVATE_THREAD_INVITES = {
  8. 0: 0,
  9. 1: 0,
  10. 2: 1,
  11. 3: 2
  12. }
  13. def move_users(stdout=None, style=None):
  14. stdout = stdout or defstdout
  15. from .models import MovedId
  16. MovedId.objects.all().delete()
  17. [u.delete() for u in UserModel.objects.filter(pk__gt=1).iterator()]
  18. existing_users = get_existing_users()
  19. for user in fetch_assoc('SELECT * FROM misago_user ORDER BY id'):
  20. if user['email'].lower() in existing_users:
  21. user_new_pk = existing_users[user['email'].lower()]
  22. new_user = UserModel.objects.get(pk=user_new_pk)
  23. else:
  24. try:
  25. new_user = UserModel.objects.create_user(
  26. user['username'], user['email'], 'Pass.123')
  27. except ValidationError:
  28. new_name = ''.join([user['username'], get_random_string(4)])
  29. new_user = UserModel.objects.create_user(
  30. new_name, user['email'], 'Pass.123')
  31. if style:
  32. formats = (user['username'], new_name)
  33. stdout.write(style.ERROR(
  34. '"%s" has been registered as "%s"' % formats))
  35. else:
  36. stdout.write(
  37. '"%s" has been registered as "%s"' % formats)
  38. new_user.password = user['password']
  39. new_user.joined_on = localise_datetime(user['join_date'])
  40. new_user.joined_from_ip = user['join_ip']
  41. new_user.last_login = localise_datetime(user['last_date'])
  42. new_user.last_ip = user['last_ip']
  43. new_user.is_hiding_presence = bool(user['hide_activity'])
  44. new_user.title = user['title'] or None
  45. new_user.requires_activation = user['activation']
  46. if new_user.requires_activation > 2:
  47. new_user.requires_activation = 1
  48. new_user.is_avatar_locked = user['avatar_ban']
  49. new_user.avatar_lock_user_message = user['avatar_ban_reason_user'] or None
  50. new_user.avatar_lock_staff_message = user['avatar_ban_reason_admin'] or None
  51. if user['signature'] and user['signature_preparsed']:
  52. new_user.signature = user['signature']
  53. new_user.signature_parsed = user['signature_preparsed']
  54. new_user.signature_checksum = make_signature_checksum(
  55. user['signature_preparsed'], new_user)
  56. new_user.is_signature_locked = user['signature_ban']
  57. new_user.signature_lock_user_message = user['signature_ban_reason_user'] or None
  58. new_user.signature_lock_staff_message = user['signature_ban_reason_admin'] or None
  59. new_user.limits_private_thread_invites_to = PRIVATE_THREAD_INVITES[user['allow_pds']]
  60. new_user.subscribe_to_started_threads = int(user['subscribe_start'])
  61. new_user.subscribe_to_replied_threads = int(user['subscribe_reply'])
  62. new_user.save()
  63. movedids.set('user', user['id'], new_user.pk)
  64. def get_existing_users():
  65. existing_users = {}
  66. queryset = UserModel.objects.values_list('id', 'email')
  67. for pk, email in queryset.iterator():
  68. existing_users[email.lower()] = pk
  69. return existing_users
  70. def move_followers(stdout=None):
  71. for follow in fetch_assoc('SELECT * FROM misago_user_follows ORDER BY id'):
  72. from_user_id = movedids.get('user', follow['from_user_id'])
  73. to_user_id = movedids.get('user', follow['to_user_id'])
  74. from_user = UserModel.objects.get(pk=from_user_id)
  75. to_user = UserModel.objects.get(pk=to_user_id)
  76. from_user.follows.add(to_user)
  77. def move_blocks(stdout=None):
  78. for follow in fetch_assoc('SELECT * FROM misago_user_ignores ORDER BY id'):
  79. from_user_id = movedids.get('user', follow['from_user_id'])
  80. to_user_id = movedids.get('user', follow['to_user_id'])
  81. from_user = UserModel.objects.get(pk=from_user_id)
  82. to_user = UserModel.objects.get(pk=to_user_id)
  83. from_user.blocks.add(to_user)
  84. def move_namehistory(stdout):
  85. pass