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
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']
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
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)
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
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.' )
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)