From 17f167cb098add335b7f0450eb29e904ff3e1077 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Mon, 11 Jan 2016 18:47:48 +0100 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(-) diff --git a/mandayejs/mandaye/management/commands/migrate-ldap-users.py b/mandayejs/mandaye/management/commands/migrate-ldap-users.py index ea9f4e8..afbd057 100644 --- a/mandayejs/mandaye/management/commands/migrate-ldap-users.py +++ b/mandayejs/mandaye/management/commands/migrate-ldap-users.py @@ -2,6 +2,7 @@ from __future__ import absolute_import import json import ldif +import logging from django.core.management.base import BaseCommand, CommandError from django.db import IntegrityError @@ -9,6 +10,7 @@ from django.contrib.auth import get_user_model from mandayejs.mandaye.models import UserCredentials +logger = logging.getLogger(__name__) class Command(BaseCommand): args = '' @@ -33,11 +35,15 @@ class Command(BaseCommand): for data in parsed_data: data = { k : ''.join(v) for k,v in data.items()} try: - user = User(username=data.get('idpUniqueID'), last_name=data.get('spLogin')) + user, created = User.objects.get_or_create(username=data.get('idpUniqueID'), + last_name=data.get('spLogin')) user.save() uc = UserCredentials(user=user, locators=json.loads(data.get('spPostValues'))) + uc.decrypt() uc.save() self.stdout.write('{idpUniqueID} imported'.format(**data)) + logger.debug('{idpUniqueID} imported'.format(**data)) except (IntegrityError,) as e: + logger.debug(e) continue diff --git a/tests/tests.py b/tests/tests.py index ede3740..d025da3 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -2,11 +2,14 @@ import pytest from django.conf import settings from django.contrib.auth.models import User +from django.core.management import call_command from mandayejs.mandaye.models import UserCredentials pytestmark = pytest.mark.django_db +# Encryption/Decryption + def create_user(**kwargs): password = kwargs.pop('password', None) or kwargs.get('username') user, created = User.objects.get_or_create(**kwargs) @@ -41,5 +44,24 @@ def test_encryption(credentials): assert decrypted.get('password') == 'john password' +# Migration + + + def test_migrate_users_command(): - pass + + args = ['tests/ldap_users.txt',] + opts = {} + call_command('migrate-ldap-users', *args, **opts) + + credentials = UserCredentials.objects.filter(user__last_name__in=[ + 'ldap_user1', + 'ldap_user2', + 'ldap_user3' + ]) + + assert len(credentials) == 3 + + for cred in credentials: + assert cred.to_login_info(decrypt=True)['#txtCode'] == 'password_{}'.format(cred.user.last_name) + -- 2.6.4