Projet

Général

Profil

0001-fix-crypted-password-importion-9588.patch

Josué Kouka, 11 janvier 2016 19:21

Télécharger (3,1 ko)

Voir les différences:

Subject: [PATCH] fix crypted password importion (#9588)

 .../management/commands/migrate-ldap-users.py      |  8 +++++++-
 tests/tests.py                                     | 24 +++++++++++++++++++++-
 2 files changed, 30 insertions(+), 2 deletions(-)
mandayejs/mandaye/management/commands/migrate-ldap-users.py
2 2

  
3 3
import json
4 4
import ldif
5
import logging
5 6

  
6 7
from django.core.management.base import BaseCommand, CommandError
7 8
from django.db import IntegrityError
......
9 10

  
10 11
from mandayejs.mandaye.models import UserCredentials  
11 12

  
13
logger = logging.getLogger(__name__)
12 14

  
13 15
class Command(BaseCommand):
14 16
    args = '<ldif_file>'
......
33 35
        for data in parsed_data:
34 36
            data = { k : ''.join(v) for k,v in data.items()}
35 37
            try:
36
                user = User(username=data.get('idpUniqueID'), last_name=data.get('spLogin'))
38
                user, created = User.objects.get_or_create(username=data.get('idpUniqueID'), 
39
                        last_name=data.get('spLogin'))
37 40
                user.save()
38 41
                uc = UserCredentials(user=user, locators=json.loads(data.get('spPostValues')))
42
                uc.decrypt()
39 43
                uc.save()
40 44
                self.stdout.write('{idpUniqueID} imported'.format(**data))
45
                logger.debug('{idpUniqueID} imported'.format(**data))
41 46
            except (IntegrityError,) as e:
47
                logger.debug(e)
42 48
                continue
43 49

  
tests/tests.py
2 2

  
3 3
from django.conf import settings
4 4
from django.contrib.auth.models import User
5
from django.core.management import call_command
5 6

  
6 7
from mandayejs.mandaye.models import UserCredentials
7 8

  
8 9
pytestmark = pytest.mark.django_db
9 10

  
11
# Encryption/Decryption
12

  
10 13
def create_user(**kwargs):
11 14
    password = kwargs.pop('password', None) or kwargs.get('username')
12 15
    user, created = User.objects.get_or_create(**kwargs)
......
41 44
    assert decrypted.get('password') == 'john password'
42 45
    
43 46

  
47
# Migration
48

  
49

  
50

  
44 51
def test_migrate_users_command():
45
    pass
52

  
53
    args = ['tests/ldap_users.txt',]
54
    opts = {}
55
    call_command('migrate-ldap-users', *args, **opts)
56

  
57
    credentials = UserCredentials.objects.filter(user__last_name__in=[
58
            'ldap_user1',
59
            'ldap_user2',
60
            'ldap_user3'
61
        ])
62

  
63
    assert len(credentials) == 3
64

  
65
    for cred in credentials:
66
        assert cred.to_login_info(decrypt=True)['#txtCode'] == 'password_{}'.format(cred.user.last_name)
67

  
46
-