Projet

Général

Profil

0002-users-api-unset-verified-flag-on-a-modified-email-ad.patch

Paul Marillonnet, 19 février 2019 10:15

Télécharger (3,62 ko)

Voir les différences:

Subject: [PATCH 2/2] users api: unset verified flag on a modified email
 address (#30740)

 src/authentic2/api_views.py |  5 ++++
 tests/test_api.py           | 47 +++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)
src/authentic2/api_views.py
429 429
        self.check_perm('custom_user.change_user', instance.ou)
430 430
        if 'ou' in validated_data:
431 431
            self.check_perm('custom_user.change_user', validated_data.get('ou'))
432
        if validated_data.get('email') != instance.email:
433
            instance.email_verified = False
434
            instance.save()
432 435
        super(BaseUserSerializer, self).update(instance, validated_data)
433 436
        for key, value in attributes.iteritems():
434 437
            if is_verified.get(key):
......
681 684
                'errors': serializer.errors
682 685
            }
683 686
            return Response(response, status.HTTP_400_BAD_REQUEST)
687
        user.email_verified = False
688
        user.save()
684 689
        utils.send_email_change_email(user, serializer.validated_data['email'], request=request)
685 690
        return Response({'result': 1})
686 691

  
tests/test_api.py
141 141
    assert resp.json['next'] is None
142 142

  
143 143

  
144
def test_api_users_email_verified(settings, app, admin, email_verified_user):
145
    from django.contrib.auth import get_user_model
146
    User = get_user_model()
147
    user = User.objects.get(id=email_verified_user.id)
148
    assert user.email_verified
149

  
150
    payload = {
151
        'username': email_verified_user.username,
152
        'id': email_verified_user.id,
153
        'email': 'john.doe@nowhere.null',
154
        'first_name': 'Johnny',
155
        'last_name': 'Doeny',
156
    }
157
    headers = basic_authorization_header(admin)
158
    resp = app.put_json('/api/users/{}/'.format(email_verified_user.uuid),
159
            params=payload, headers=headers, status=200)
160
    user = User.objects.get(id=email_verified_user.id)
161
    assert not user.email_verified
162
    assert not resp.json['email_verified']
163

  
164
    user.email_verified = True
165
    user.email = 'johnny.doeny@foo.bar'
166
    user.save()
167

  
168
    resp = app.patch_json('/api/users/{}/'.format(email_verified_user.uuid),
169
            params=payload, headers=headers, status=200)
170
    user = User.objects.get(id=email_verified_user.id)
171
    assert not user.email_verified
172
    assert not resp.json['email_verified']
173

  
174

  
175
def test_api_email_users_email_verified(settings, app, admin, email_verified_user):
176
    from django.contrib.auth import get_user_model
177
    User = get_user_model()
178
    user = User.objects.get(id=email_verified_user.id)
179
    assert user.email_verified
180

  
181
    payload = {
182
        'email': 'john.doe@nowhere.null',
183
    }
184
    headers = basic_authorization_header(admin)
185
    resp = app.post_json('/api/users/{}/email/'.format(email_verified_user.uuid),
186
            params=payload, headers=headers, status=200)
187
    user = User.objects.get(id=email_verified_user.id)
188
    assert not user.email_verified
189

  
190

  
144 191
def test_api_users_boolean_attribute(app, superuser):
145 192
    from authentic2.models import Attribute, AttributeValue
146 193
    at = Attribute.objects.create(
147
-