From 2ba0295c7ad65d2abf871516d4cdc409db154db6 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 16 Feb 2018 15:08:41 -0200 Subject: [PATCH] =?UTF-8?q?Adapta=20migra=C3=A7=C3=A3o=20de=20usu=C3=A1rio?= =?UTF-8?q?s=20=C3=A0=20nova=20exporta=C3=A7=C3=A3o=20do=20zope?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #1585 --- sapl/legacy/migracao_usuarios.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/sapl/legacy/migracao_usuarios.py b/sapl/legacy/migracao_usuarios.py index 2bbee7423..bd7d413e5 100644 --- a/sapl/legacy/migracao_usuarios.py +++ b/sapl/legacy/migracao_usuarios.py @@ -1,4 +1,6 @@ +import yaml from django.contrib.auth.models import Group, User + from sapl.settings import MEDIA_ROOT PERFIL_LEGADO_PARA_NOVO = {legado: Group.objects.get(name=novo) @@ -30,9 +32,20 @@ IGNORADOS = { } +def decode_nome(nome): + if isinstance(nome, bytes): + try: + return nome.decode('utf-8') + except UnicodeDecodeError: + return nome.decode('iso8859-1') + else: + assert isinstance(nome, str) + return nome + + def migra_usuarios(): """ - Lê o arquivo media/USERS e importa os usuários nele listados, + Lê o arquivo media/usuarios.yaml e importa os usuários nele listados, com senhas e perfis. Os usuários são criados se necessário e seus perfis ajustados. @@ -54,16 +67,19 @@ def migra_usuarios(): Também podemos assumir que essa é uma tarefa de um administrador """ - ARQUIVO_USUARIOS = MEDIA_ROOT.child('USERS') + ARQUIVO_USUARIOS = MEDIA_ROOT.child('usuarios.yaml') with open(ARQUIVO_USUARIOS, 'r') as f: - usuarios = eval(f.read()) + usuarios = yaml.load(f) + # conferimos de que só há um nome de usuário + assert all(nome == dados['name'] for nome, dados in usuarios.items()) usuarios = [ - (nome, - # troca senha "inicial" por uma inutilizável - senha if senha != 'inicial' else None, + (decode_nome(nome), + # troca senha "inicial" (que existe em alguns zopes) + # por uma inutilizável + dados['__'] if dados['__'] != 'inicial' else None, # filtra perfis ignorados - {p for p in perfis if p not in IGNORADOS}) - for nome, senha, perfis in usuarios] + set(dados['roles']) - IGNORADOS) + for nome, dados in usuarios.items()] for nome, senha, perfis in usuarios: usuario = User.objects.get_or_create(username=nome)[0]