]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Allow create / update password via UI
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Wed, 23 Nov 2022 08:35:17 +0000 (00:35 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Wed, 23 Nov 2022 08:35:17 +0000 (00:35 -0800)
src/paperless/serialisers.py

index dc3fe47fdb7f7742caee5c0a5d524efa5d75949a..25415bf0137f7baee440a45ef191843d33b90ed9 100644 (file)
@@ -4,8 +4,21 @@ from django.contrib.auth.models import User
 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):
 
+    password = ObfuscatedUserPasswordField()
     user_permissions = serializers.SlugRelatedField(
         many=True,
         queryset=Permission.objects.all(),
@@ -18,6 +31,7 @@ class UserSerializer(serializers.ModelSerializer):
         fields = (
             "id",
             "username",
+            "password",
             "first_name",
             "last_name",
             "date_joined",
@@ -32,6 +46,40 @@ class UserSerializer(serializers.ModelSerializer):
     def get_inherited_permissions(self, obj):
         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):