mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Merge pull request #3697 from modoboa/fix/simpleuser_update_profile
Added new route dedicated to user profile update.
This commit is contained in:
@@ -6,6 +6,9 @@ export default {
|
||||
getMe() {
|
||||
return repository.get(`/${resource}/me/`)
|
||||
},
|
||||
updateMe(data) {
|
||||
return repository.put(`/${resource}/me/`, data)
|
||||
},
|
||||
checkPassword(value) {
|
||||
return repository.post(`/${resource}/me/password/`, { password: value })
|
||||
},
|
||||
|
||||
@@ -163,7 +163,7 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
}
|
||||
|
||||
async function updateAccount(data) {
|
||||
return accountsApi.patch(authUser.value.pk, data).then((response) => {
|
||||
return accountApi.updateMe(data).then((response) => {
|
||||
const newAuthUser = { ...authUser.value, ...response.data }
|
||||
delete newAuthUser.password
|
||||
authUser.value = { ...newAuthUser }
|
||||
|
||||
@@ -398,6 +398,20 @@ class AccountMeSerializer(v1_serializers.AccountSerializer):
|
||||
return [f"{p.content_type.app_label}.{p.codename}" for p in permissions]
|
||||
|
||||
|
||||
class AccountMeUpdateSerializer(serializers.ModelSerializer):
|
||||
"""Update serializer for connected user."""
|
||||
|
||||
class Meta:
|
||||
model = core_models.User
|
||||
fields = (
|
||||
"first_name",
|
||||
"last_name",
|
||||
"language",
|
||||
"phone_number",
|
||||
"secondary_email",
|
||||
)
|
||||
|
||||
|
||||
class AccountSerializer(v1_serializers.AccountSerializer):
|
||||
"""Add support for user resources."""
|
||||
|
||||
|
||||
@@ -196,6 +196,18 @@ class AccountViewSetTestCase(ModoAPITestCase):
|
||||
me = resp.json()
|
||||
self.assertEqual(me["username"], "admin")
|
||||
|
||||
def test_update_me(self):
|
||||
url = reverse("v2:account-me")
|
||||
data = {
|
||||
"first_name": "First name",
|
||||
"secondary_email": "toto@iti.com",
|
||||
"language": "fr",
|
||||
}
|
||||
resp = self.client.put(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
me = resp.json()
|
||||
self.assertEqual(me["secondary_email"], data["secondary_email"])
|
||||
|
||||
def test_me_password(self, password_ko="Toto1234", password_ok="password"):
|
||||
url = reverse("v2:account-check-me-password")
|
||||
resp = self.client.post(url, {"password": password_ko}, format="json")
|
||||
|
||||
@@ -48,11 +48,22 @@ def create_static_tokens(request):
|
||||
class AccountViewSet(core_v1_viewsets.AccountViewSet):
|
||||
"""Account viewset."""
|
||||
|
||||
@extend_schema(responses=admin_v2_serializers.AccountMeSerializer)
|
||||
@action(methods=["get"], detail=False)
|
||||
@extend_schema(
|
||||
responses=admin_v2_serializers.AccountMeSerializer,
|
||||
request=admin_v2_serializers.AccountMeUpdateSerializer,
|
||||
)
|
||||
@action(methods=["get", "put"], detail=False)
|
||||
def me(self, request):
|
||||
"""Return information about connected user."""
|
||||
serializer = admin_v1_serializers.AccountSerializer(request.user)
|
||||
if request.method == "PUT":
|
||||
serializer = admin_v2_serializers.AccountMeUpdateSerializer(
|
||||
data=request.data, instance=request.user
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
instance = serializer.save()
|
||||
serializer = admin_v1_serializers.AccountSerializer(instance)
|
||||
else:
|
||||
serializer = admin_v1_serializers.AccountSerializer(request.user)
|
||||
return response.Response(serializer.data)
|
||||
|
||||
@action(
|
||||
|
||||
Reference in New Issue
Block a user