mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-04 03:27:12 -05:00 
			
		
		
		
	Allow create / update password via UI
This commit is contained in:
		
							parent
							
								
									3f19c0ed03
								
							
						
					
					
						commit
						cf53d0866a
					
				@ -4,8 +4,21 @@ from django.contrib.auth.models import User
 | 
				
			|||||||
from rest_framework import serializers
 | 
					from rest_framework import serializers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ObfuscatedUserPasswordField(serializers.Field):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Sends *** string instead of password in the clear
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def to_representation(self, value):
 | 
				
			||||||
 | 
					        return "**********" if len(value) > 0 else ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def to_internal_value(self, data):
 | 
				
			||||||
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UserSerializer(serializers.ModelSerializer):
 | 
					class UserSerializer(serializers.ModelSerializer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    password = ObfuscatedUserPasswordField()
 | 
				
			||||||
    user_permissions = serializers.SlugRelatedField(
 | 
					    user_permissions = serializers.SlugRelatedField(
 | 
				
			||||||
        many=True,
 | 
					        many=True,
 | 
				
			||||||
        queryset=Permission.objects.all(),
 | 
					        queryset=Permission.objects.all(),
 | 
				
			||||||
@ -18,6 +31,7 @@ class UserSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
        fields = (
 | 
					        fields = (
 | 
				
			||||||
            "id",
 | 
					            "id",
 | 
				
			||||||
            "username",
 | 
					            "username",
 | 
				
			||||||
 | 
					            "password",
 | 
				
			||||||
            "first_name",
 | 
					            "first_name",
 | 
				
			||||||
            "last_name",
 | 
					            "last_name",
 | 
				
			||||||
            "date_joined",
 | 
					            "date_joined",
 | 
				
			||||||
@ -32,6 +46,40 @@ class UserSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
    def get_inherited_permissions(self, obj):
 | 
					    def get_inherited_permissions(self, obj):
 | 
				
			||||||
        return obj.get_group_permissions()
 | 
					        return obj.get_group_permissions()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def update(self, instance, validated_data):
 | 
				
			||||||
 | 
					        if "password" in validated_data:
 | 
				
			||||||
 | 
					            if len(validated_data.get("password").replace("*", "")) > 0:
 | 
				
			||||||
 | 
					                print("set", validated_data.get("password"))
 | 
				
			||||||
 | 
					                instance.set_password(validated_data.get("password"))
 | 
				
			||||||
 | 
					                instance.save()
 | 
				
			||||||
 | 
					            validated_data.pop("password")
 | 
				
			||||||
 | 
					        super().update(instance, validated_data)
 | 
				
			||||||
 | 
					        return instance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def create(self, validated_data):
 | 
				
			||||||
 | 
					        groups = None
 | 
				
			||||||
 | 
					        if "groups" in validated_data:
 | 
				
			||||||
 | 
					            groups = validated_data.pop("groups")
 | 
				
			||||||
 | 
					        user_permissions = None
 | 
				
			||||||
 | 
					        if "user_permissions" in validated_data:
 | 
				
			||||||
 | 
					            user_permissions = validated_data.pop("user_permissions")
 | 
				
			||||||
 | 
					        password = None
 | 
				
			||||||
 | 
					        if "password" in validated_data:
 | 
				
			||||||
 | 
					            if len(validated_data.get("password").replace("*", "")) > 0:
 | 
				
			||||||
 | 
					                password = validated_data.pop("password")
 | 
				
			||||||
 | 
					        user = User.objects.create(**validated_data)
 | 
				
			||||||
 | 
					        # set groups
 | 
				
			||||||
 | 
					        if groups:
 | 
				
			||||||
 | 
					            user.groups.set(groups)
 | 
				
			||||||
 | 
					        # set permissions
 | 
				
			||||||
 | 
					        if user_permissions:
 | 
				
			||||||
 | 
					            user.user_permissions.set(user_permissions)
 | 
				
			||||||
 | 
					        # set password
 | 
				
			||||||
 | 
					        if password:
 | 
				
			||||||
 | 
					            user.set_password(password)
 | 
				
			||||||
 | 
					        user.save()
 | 
				
			||||||
 | 
					        return user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GroupSerializer(serializers.ModelSerializer):
 | 
					class GroupSerializer(serializers.ModelSerializer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user