コード例 #1
0
 def update(self, instance, validated_data):
     try:
         SmeIntegracaoService.redefine_email(instance.username, validated_data['email'])
         instance.email = validated_data.get('email')
         instance.save()
     except SmeIntegracaoException as e:
         return Response({'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST)
     except ReadTimeout:
         return Response({'detail': 'EOL Timeout'}, status=status.HTTP_400_BAD_REQUEST)
     except ConnectTimeout:
         return Response({'detail': 'EOL Timeout'}, status=status.HTTP_400_BAD_REQUEST)
     return instance
コード例 #2
0
    def update(self, instance, validated_data):
        try:
            checa_senha(instance, validated_data['password_atual'])
            SmeIntegracaoService.redefine_senha(instance.username, validated_data['password'])
            instance.set_password(validated_data.get('password'))
            instance.hash_redefinicao = ''
            instance.save()
        except SmeIntegracaoException as e:
            return Response({'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST)
        except ReadTimeout:
            return Response({'detail': 'EOL Timeout'}, status=status.HTTP_400_BAD_REQUEST)
        except ConnectTimeout:
            return Response({'detail': 'EOL Timeout'}, status=status.HTTP_400_BAD_REQUEST)
        except Exception as err:
            return Response({'detail': str(err)}, status=status.HTTP_400_BAD_REQUEST)

        return instance

        class Meta:
            model = User
            fields = ['password_atual', 'password', 'password2']
コード例 #3
0
 def update(self, instance, validated_data):
     try:
         result = SmeIntegracaoService.redefine_senha(instance.username, validated_data['password'])
         instance.set_password(validated_data.get('password'))
         instance.hash_redefinicao = ''
         instance.save()
         return Response(result)
     except SmeIntegracaoException as e:
         return Response({'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST)
     except ReadTimeout:
         return Response({'detail': 'EOL Timeout'}, status=status.HTTP_400_BAD_REQUEST)
     except ConnectTimeout:
         return Response({'detail': 'EOL Timeout'}, status=status.HTTP_400_BAD_REQUEST)
     return instance
コード例 #4
0
    def consulta_servidor_sgp(self, request):
        username = self.request.query_params.get('username')

        if not username:
            return Response("Parâmetro username obrigatório.",
                            status=status.HTTP_400_BAD_REQUEST)

        try:
            result = SmeIntegracaoService.informacao_usuario_sgp(username)
            return Response(result, status=status.HTTP_200_OK)
        except SmeIntegracaoException as e:
            return Response({'detail': str(e)},
                            status=status.HTTP_400_BAD_REQUEST)
        except ReadTimeout:
            return Response({'detail': 'EOL Timeout'},
                            status=status.HTTP_400_BAD_REQUEST)
        except ConnectTimeout:
            return Response({'detail': 'EOL Timeout'},
                            status=status.HTTP_400_BAD_REQUEST)
コード例 #5
0
    def update(self, instance, validated_data):
        logging.info("Esqueci minha senha")
        instance.hash_redefinicao = instance.create_hash
        instance.save()

        result = SmeIntegracaoService.informacao_usuario_sgp(instance.username)
        if not result['email']:
            raise EmailNaoCadastrado(
                "Você não tem e-mail cadastrado e por isso a redefinição não é possível. Você deve procurar apoio na sua Diretoria Regional de Educação.")

        try:
            enviar_email_redifinicao_senha(email=result['email'].strip(), username=instance.username,
                                           nome=instance.name, hash_definicao=instance.hash_redefinicao)
        except Exception as err:
            logger.info("Erro ao enviar email: %s", str(err))
            raise ProblemaEnvioEmail("Problema ao enviar email.")
        
        instance.email = result['email'].strip()
        instance.save()
        return instance
コード例 #6
0
def cria_ou_atualiza_usuario_core_sso(dados_usuario):
    """ Verifica se usuário já existe no CoreSSO e cria se não existir

    :param dados_usuario: {
            "login": "******",
            "visao": "UE",  ou "visoes": [{visao_obj},]
            "eol_unidade": "1234",
            "email": "*****@*****.**",
            "nome": "Jose Testando",
            "servidor_s_n": "S",

        }
    """
    from requests import ConnectTimeout, ReadTimeout

    try:
        info_user_core = SmeIntegracaoService.usuario_core_sso_or_none(
            login=dados_usuario['login'])

        if not info_user_core:
            # Valida o nome
            if not dados_usuario['nome']:
                raise CargaUsuarioException(
                    f"Nome é necessário para criação do usuário ({dados_usuario['login']})."
                )

            # Valida login no caso de não servidor
            if dados_usuario['servidor_s_n'] == "N" and not validate_cpf(
                    dados_usuario['login']):
                raise CargaUsuarioException(
                    f"Login de não servidor ({dados_usuario['login']}) não é um CPF válido."
                )

            SmeIntegracaoService.cria_usuario_core_sso(
                login=dados_usuario['login'],
                nome=dados_usuario['nome'],
                email=dados_usuario["email"] if dados_usuario["email"] else "",
                e_servidor=dados_usuario['servidor_s_n'] == "S")
            logger.info(f"Criado usuário no CoreSSO {dados_usuario['login']}.")

        if info_user_core and dados_usuario[
                "email"] and info_user_core["email"] != dados_usuario["email"]:
            SmeIntegracaoService.redefine_email(dados_usuario['login'],
                                                dados_usuario["email"])
            logger.info(
                f"Atualizado e-mail do usuário no CoreSSO {dados_usuario['login']}, {dados_usuario['email']}."
            )

        if 'visao' in dados_usuario and dados_usuario["visao"]:
            SmeIntegracaoService.atribuir_perfil_coresso(
                login=dados_usuario['login'], visao=dados_usuario['visao'])
            logger.info(
                f"Visão {dados_usuario['visao']} vinculada ao usuário {dados_usuario['login']} no CoreSSO."
            )

        elif 'visoes' in dados_usuario and dados_usuario["visoes"]:
            for visao in dados_usuario["visoes"]:
                SmeIntegracaoService.atribuir_perfil_coresso(
                    login=dados_usuario['login'], visao=visao.nome)
                logger.info(
                    f"Visão {visao.nome} vinculada ao usuário {dados_usuario['login']} no CoreSSO."
                )

    except SmeIntegracaoException as e:
        raise CargaUsuarioException(
            f'Erro {str(e)} ao criar/atualizar usuário {dados_usuario["login"]} no CoreSSO.'
        )

    except ReadTimeout:
        raise CargaUsuarioException(
            f'Erro de ReadTimeout ao tentar criar/atualizar usuário {dados_usuario["login"]} no CoreSSO.'
        )

    except ConnectTimeout:
        raise CargaUsuarioException(
            f'Erro de ConnectTimeout ao tentar criar/atualizar usuário {dados_usuario["login"]} no CoreSSO.'
        )
コード例 #7
0
    def usuario_status(self, request):
        from ....core.models import MembroAssociacao, Unidade

        username = request.query_params.get('username')

        if not username:
            return Response("Parâmetro username obrigatório.",
                            status=status.HTTP_400_BAD_REQUEST)

        e_servidor = request.query_params.get('servidor', 'True') == 'True'

        unidade_uuid = request.query_params.get('unidade')
        unidade = None
        if unidade_uuid:
            try:
                unidade = Unidade.objects.get(uuid=unidade_uuid)
            except Unidade.DoesNotExist:
                erro = {
                    'erro':
                    'Objeto não encontrado.',
                    'mensagem':
                    f"O objeto unidade para o uuid {unidade_uuid} não foi encontrado na base."
                }
                logger.info('Erro: %r', erro)
                return Response(erro, status=status.HTTP_400_BAD_REQUEST)

        e_servidor_na_unidade = False
        if e_servidor and unidade:
            e_servidor_na_unidade = SmeIntegracaoService.get_cargos_do_rf_na_escola(
                rf=username, codigo_eol=unidade.codigo_eol) != []

        try:
            user_core_sso = SmeIntegracaoService.usuario_core_sso_or_none(
                username)
            info_core_sso = {
                'info_core_sso':
                user_core_sso,
                'mensagem':
                'Usuário encontrado no CoreSSO.'
                if user_core_sso else 'Usuário não encontrado no CoreSSO.'
            }
        except SmeIntegracaoException as e:
            info_core_sso = {
                'info_core_sso': None,
                'mensagem': 'Erro ao buscar usuário no CoreSSO!'
            }

        onde_e_membro = MembroAssociacao.associacoes_onde_cpf_e_membro(
            cpf=username) if not e_servidor else []
        try:
            user_sig_escola = User.objects.get(username=username)
            info_sig_escola = {
                'info_sig_escola': {
                    'visoes':
                    user_sig_escola.visoes.values_list('nome', flat=True),
                    'unidades':
                    user_sig_escola.unidades.values_list('codigo_eol',
                                                         flat=True),
                    'user_id':
                    user_sig_escola.id
                },
                'mensagem': 'Usuário encontrado no Sig.Escola.',
                'associacoes_que_e_membro': onde_e_membro,
            }
        except User.DoesNotExist as e:
            info_sig_escola = {
                'info_sig_escola': None,
                'mensagem': 'Usuário não encontrado no Sig.Escola.',
                'associacoes_que_e_membro': onde_e_membro,
            }

        result = {
            'usuario_core_sso':
            info_core_sso,
            'usuario_sig_escola':
            info_sig_escola,
            'validacao_username':
            validar_username(username=username, e_servidor=e_servidor),
            'e_servidor_na_unidade':
            e_servidor_na_unidade,
        }

        return Response(result, status=status.HTTP_200_OK)