Projet

Général

Profil

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

Paul Marillonnet, 11 mars 2019 18:10

Télécharger (5,81 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           | 116 ++++++++++++++++++++++++++++++++++++
 2 files changed, 121 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 and \
433
                not validated_data.get('email_verified'):
434
            instance.email_verified = False
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_update_with_email_verified(settings, app, admin, simple_user):
145
    from django.contrib.auth import get_user_model
146
    simple_user.email_verified = True
147
    simple_user.save()
148

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

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

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

  
175

  
176
def test_api_users_update_without_email_verified(settings, app, admin, simple_user):
177
    from django.contrib.auth import get_user_model
178
    simple_user.email_verified = True
179
    simple_user.save()
180

  
181
    User = get_user_model()
182
    payload = {
183
        'username': simple_user.username,
184
        'id': simple_user.id,
185
        'email': 'john.doe@nowhere.null',
186
        'first_name': 'Johnny',
187
        'last_name': 'Doeny',
188
    }
189
    headers = basic_authorization_header(admin)
190
    resp = app.put_json('/api/users/{}/'.format(simple_user.uuid),
191
            params=payload, headers=headers, status=200)
192
    user = User.objects.get(id=simple_user.id)
193
    assert not user.email_verified
194
    assert not resp.json['email_verified']
195

  
196
    user.email_verified = True
197
    user.email = 'johnny.doeny@foo.bar'
198
    user.save()
199

  
200
    resp = app.patch_json('/api/users/{}/'.format(simple_user.uuid),
201
            params=payload, headers=headers, status=200)
202
    user = User.objects.get(id=simple_user.id)
203
    assert not user.email_verified
204
    assert not resp.json['email_verified']
205

  
206

  
207
def test_api_users_create_with_email_verified(settings, app, admin):
208
    from django.contrib.auth import get_user_model
209

  
210
    payload = {
211
        'username': 'janedoe',
212
        'email': 'jane.doe@nowhere.null',
213
        'first_name': 'Jane',
214
        'last_name': 'Doe',
215
        'email_verified': True,
216
    }
217
    headers = basic_authorization_header(admin)
218
    resp = app.post_json('/api/users/', headers=headers, params=payload,
219
            status=201)
220
    assert resp.json['email_verified']
221
    User = get_user_model()
222
    user = User.objects.get(uuid=resp.json['uuid'])
223
    assert user.email_verified
224

  
225

  
226
def test_api_users_create_without_email_verified(settings, app, admin):
227
    from django.contrib.auth import get_user_model
228

  
229
    payload = {
230
        'username': 'janedoe',
231
        'email': 'jane.doe@nowhere.null',
232
        'first_name': 'Jane',
233
        'last_name': 'Doe',
234
    }
235
    headers = basic_authorization_header(admin)
236
    resp = app.post_json('/api/users/', headers=headers, params=payload,
237
            status=201)
238
    assert not resp.json['email_verified']
239
    User = get_user_model()
240
    user = User.objects.get(uuid=resp.json['uuid'])
241
    assert not user.email_verified
242

  
243

  
244
def test_api_email_unset_verification(settings, app, admin, simple_user):
245
    from django.contrib.auth import get_user_model
246
    simple_user.email_verified = True
247
    simple_user.save()
248

  
249
    User = get_user_model()
250
    payload = {
251
        'email': 'john.doe@nowhere.null',
252
    }
253
    headers = basic_authorization_header(admin)
254
    resp = app.post_json('/api/users/{}/email/'.format(simple_user.uuid),
255
            params=payload, headers=headers, status=200)
256
    user = User.objects.get(id=simple_user.id)
257
    assert not user.email_verified
258

  
259

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