(self, request)
| 243 | ) |
| 244 | @action(detail=False, methods=["get", "patch"], url_path="me") |
| 245 | def me(self, request): |
| 246 | user = request.user |
| 247 | if request.method == "PATCH": |
| 248 | ALLOWED_FIELDS = {"custom_properties", "first_name", "last_name", "email", "password"} |
| 249 | disallowed = set(request.data.keys()) - ALLOWED_FIELDS |
| 250 | |
| 251 | for key in disallowed: |
| 252 | request.data.pop(key, None) |
| 253 | |
| 254 | # Strip admin-managed keys from custom_properties so users cannot |
| 255 | # set their own XC credentials or network rules via this endpoint. |
| 256 | ADMIN_ONLY_PROPS = {"xc_password", "allowed_networks"} |
| 257 | cp = request.data.get("custom_properties") |
| 258 | if isinstance(cp, dict): |
| 259 | for key in ADMIN_ONLY_PROPS: |
| 260 | cp.pop(key, None) |
| 261 | |
| 262 | serializer = UserSerializer(user, data=request.data, partial=True) |
| 263 | serializer.is_valid(raise_exception=True) |
| 264 | serializer.save() |
| 265 | return Response(serializer.data) |
| 266 | serializer = UserSerializer(user) |
| 267 | return Response(serializer.data) |
| 268 | |
| 269 | |
| 270 | # 🔹 3) Group Management APIs |
nothing calls this directly
no test coverage detected