def avatar_post(options, user, data): try: type_options = options[data.get('avatar', 'nope')] if not type_options: return Response({'detail': _("This avatar type is not allowed.")}, status=status.HTTP_400_BAD_REQUEST) rpc_handler = AVATAR_TYPES[data.get('avatar', 'nope')] except KeyError: return Response({'detail': _("Unknown avatar type.")}, status=status.HTTP_400_BAD_REQUEST) try: response_dict = {'detail': rpc_handler(user, data)} except AvatarError as e: return Response({'detail': e.args[0]}, status=status.HTTP_400_BAD_REQUEST) user.avatar_hash = avatars.get_avatar_hash(user) user.save(update_fields=['avatar_hash', 'avatar_crop']) response_dict['avatar_hash'] = user.avatar_hash response_dict['options'] = get_avatar_options(user) return Response(response_dict)
def moderate_avatar_endpoint(request, profile): if request.method == "POST": is_avatar_locked = profile.is_avatar_locked form = ModerateAvatarForm(request.data, instance=profile) if form.is_valid(): if form.cleaned_data['is_avatar_locked'] and not is_avatar_locked: avatars.dynamic.set_avatar(profile) profile.avatar_hash = avatars.get_avatar_hash(profile) form.save() return Response({ 'avatar_hash': profile.avatar_hash, 'is_avatar_locked': int(profile.is_avatar_locked), 'avatar_lock_user_message': profile.avatar_lock_user_message, 'avatar_lock_staff_message': profile.avatar_lock_staff_message, }) else: return Response(form.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response({ 'is_avatar_locked': int(profile.is_avatar_locked), 'avatar_lock_user_message': profile.avatar_lock_user_message, 'avatar_lock_staff_message': profile.avatar_lock_staff_message, })
def create_user(self, username, email, password=None, set_default_avatar=False, **extra_fields): from misago.users.validators import (validate_email, validate_password, validate_username) with transaction.atomic(): if not email: raise ValueError(_("User must have an email address.")) if not password: raise ValueError(_("User must have a password.")) validate_username(username) validate_email(email) validate_password(password) if not 'joined_from_ip' in extra_fields: extra_fields['joined_from_ip'] = '127.0.0.1' WATCH_DICT = { 'no': AUTO_SUBSCRIBE_NONE, 'watch': AUTO_SUBSCRIBE_WATCH, 'watch_email': AUTO_SUBSCRIBE_WATCH_AND_EMAIL, } if not 'subscribe_to_started_threads' in extra_fields: new_value = WATCH_DICT[settings.subscribe_start] extra_fields['subscribe_to_started_threads'] = new_value if not 'subscribe_to_replied_threads' in extra_fields: new_value = WATCH_DICT[settings.subscribe_reply] extra_fields['subscribe_to_replied_threads'] = new_value now = timezone.now() user = self.model(is_staff=False, is_superuser=False, last_login=now, joined_on=now, **extra_fields) user.set_username(username) user.set_email(email) user.set_password(password) if not 'rank' in extra_fields: user.rank = Rank.objects.get_default() user.save(using=self._db) if set_default_avatar: avatars.set_default_avatar(user) user.avatar_hash = avatars.get_avatar_hash(user) else: user.avatar_hash = 'abcdef01' authenticated_role = Role.objects.get(special_role='authenticated') if authenticated_role not in user.roles.all(): user.roles.add(authenticated_role) user.update_acl_key() user.save(update_fields=['avatar_hash', 'acl_key']) return user
def avatar_upload(user, data): new_avatar = data.get('image') if not new_avatar: raise AvatarError(_("No file was sent.")) try: avatars.uploaded.handle_uploaded_file(user, new_avatar) except ValidationError as e: raise AvatarError(e.args[0]) # send back token for temp image return avatars.get_avatar_hash(user, 'tmp')
def handle(self, *args, **options): try: fake_users_to_create = int(args[0]) except IndexError: fake_users_to_create = 5 except ValueError: self.stderr.write("\nOptional argument should be integer.") sys.exit(1) fake = Factory.create() User = get_user_model() ranks = [r for r in Rank.objects.all()] message = 'Creating %s fake user accounts...\n' self.stdout.write(message % fake_users_to_create) message = '\n\nSuccessfully created %s fake user accounts in %s' created_count = 0 start_time = time.time() show_progress(self, created_count, fake_users_to_create) for i in range(fake_users_to_create): try: kwargs = { 'rank': random.choice(ranks), } user = User.objects.create_user(fake.first_name(), fake.email(), 'pass123', set_default_avatar=False, **kwargs) if random.randint(0, 100) > 90: dynamic.set_avatar(user) else: gallery.set_random_avatar(user) user.avatar_hash = get_avatar_hash(user) user.save(update_fields=['avatar_hash']) except (ValidationError, IntegrityError): pass else: created_count += 1 show_progress(self, created_count, fake_users_to_create, start_time) total_time = time.time() - start_time total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time)) self.stdout.write(message % (created_count, total_humanized))
def handle(self, *args, **options): try: fake_users_to_create = int(args[0]) except IndexError: fake_users_to_create = 5 except ValueError: self.stderr.write("\nOptional argument should be integer.") sys.exit(1) fake = Factory.create() User = get_user_model() ranks = [r for r in Rank.objects.all()] message = 'Creating %s fake user accounts...\n' self.stdout.write(message % fake_users_to_create) message = '\n\nSuccessfully created %s fake user accounts in %s' created_count = 0 start_time = time.time() show_progress(self, created_count, fake_users_to_create) for i in range(fake_users_to_create): try: kwargs = { 'rank': random.choice(ranks), } user = User.objects.create_user( fake.first_name(), fake.email(), 'pass123', set_default_avatar=False, **kwargs) if random.randint(0, 100) > 90: dynamic.set_avatar(user) else: gallery.set_random_avatar(user) user.avatar_hash = get_avatar_hash(user) user.save(update_fields=['avatar_hash']) except (ValidationError, IntegrityError): pass else: created_count += 1 show_progress( self, created_count, fake_users_to_create, start_time) total_time = time.time() - start_time total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time)) self.stdout.write(message % (created_count, total_humanized))
def get_avatar_options(user): options = { 'generated': True, 'gravatar': False, 'crop_org': False, 'crop_tmp': False, 'upload': False, 'galleries': False } # Allow existing galleries if avatars.gallery.galleries_exist(): options['galleries'] = avatars.gallery.get_available_galleries() # Can't have custom avatar? if not settings.allow_custom_avatars: return options # Allow Gravatar download options['gravatar'] = True # Allow crop with token if we have uploaded avatar if avatars.uploaded.has_original_avatar(user): try: options['crop_org'] = { 'token': avatars.get_avatar_hash(user, 'org'), 'crop': json.loads(user.avatar_crop), 'size': max(settings.MISAGO_AVATARS_SIZES) } except (TypeError, ValueError): pass # Allow crop of uploaded avatar if avatars.uploaded.has_temporary_avatar(user): options['crop_tmp'] = { 'size': max(settings.MISAGO_AVATARS_SIZES) } # Allow upload conditions options['upload'] = { 'limit': settings.avatar_upload_limit * 1000, 'allowed_extensions': avatars.uploaded.ALLOWED_EXTENSIONS, 'allowed_mime_types': avatars.uploaded.ALLOWED_MIME_TYPES, } return options