ExecAuto para resetar senha de Usuário

No artigo de hoje, vamos ver uma tela que criamos, onde é possível resetar a senha de outros usuários, ideal para quem perdeu a senha do Administrador.

No artigo de ontem, citamos 2 situações envolvendo as senhas do Protheus, e demonstramos até em como resetar uma senha.

 

Mas pensando em facilitar ainda mais, criamos uma tela, onde é possível resetar senhas de usuários.

 

Então para rodar essa tela é bem simples, faça o seguinte procedimento:

  1. Baixe o fonte zAtuSenha, disponível no link citado alguns parágrafos acima (no artigo de ontem)
  2. Baixe o fonte abaixo (zNovSenha)
  3. Revise a linha do RPCSetEnv, coloque a empresa, filial, um usuário com privilégio de administrador e a senha desse usuário
  4. Compile os fontes, e no programa inicial executa u_zNovSenha, sem parênteses nem nada
  5. Será aberto uma tela, onde você pode digitar o login do usuário e a nova senha (se atente, que para o usuário Administrador, não irá funcionar se você colocar apenas admin ou Admin, tem que ser por extenso)

 

Abaixo um gif demonstrando como que ficou o funcionamento da tela (uma demonstrando falha e uma demonstrando sucesso):

Exemplo de reset de senha

 

E abaixo o código fonte da tela de redefinição de senhas (zNovSenha):

//Bibliotecas
#Include "TOTVS.ch"
  
/*/{Protheus.doc} zNovSenha
Função para reset de senhas
@type function
@author Atilio
@since 04/11/2023
@version 1.0
@obs 
    O design dela foi baseada na clássica zLogin, disponível para download em https://terminaldeinformacao.com/2016/03/15/tela-de-autenticacao-customizada-protheus/
    
    Verifique a empresa, a filial, o usuário e senha informados no RPCSetEnv
/*/
  
User Function zNovSenha()
    //Se o ambiente não estiver preparado ainda
    If Select("SX2") <= 0
        //Faz o login
        RPCSetEnv("99", "01", "daniel", "tst123", "", "")

        //Aciona a tela do reset de senhas
        fMontaTela()

    //Senão, mostra mensagem de falha
    Else
        FWAlertError("Abra a função u_zNovSenha no programa inicial do sistema!", "Falha")
    EndIf
Return

Static Function fMontaTela()
    Local aArea := GetArea()
    Local oGrpLog
    Local oBtnConf
    Private oDlgPvt
    //Says e Gets
    Private oSayUsr
    Private oGetUsr, cGetUsr := Space(25)
    Private oSayPsw
    Private oGetPsw, cGetPsw := Space(20)
    Private oGetObs, cGetObs := ""
    //Dimensões da janela
    Private nJanLarg := 200
    Private nJanAltu := 200

    //Criando a janela
    DEFINE MSDIALOG oDlgPvt TITLE "Redinir Senha" FROM 000, 000  TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL
        //Grupo de Login
        @ 003, 001     GROUP oGrpLog TO (nJanAltu/2)-1, (nJanLarg/2)-3         PROMPT "Informações: "     OF oDlgPvt COLOR 0, 16777215 PIXEL
            //Label e Get de Usuário
            @ 013, 006   SAY   oSayUsr PROMPT "Usuário:"        SIZE 030, 007 OF oDlgPvt                    PIXEL
            @ 020, 006   MSGET oGetUsr VAR    cGetUsr           SIZE (nJanLarg/2)-12, 007 OF oDlgPvt COLORS 0, 16777215 PIXEL
          
            //Label e Get da Senha
            @ 033, 006   SAY   oSayPsw PROMPT "Senha:"          SIZE 030, 007 OF oDlgPvt                    PIXEL
            @ 040, 006   MSGET oGetPsw VAR    cGetPsw           SIZE (nJanLarg/2)-12, 007 OF oDlgPvt COLORS 0, 16777215 PIXEL PASSWORD
          
            //Get de Log, pois se for Say, não da para definir a cor
            @ 060, 006   MSGET oGetObs VAR    cGetObs        SIZE (nJanLarg/2)-12, 007 OF oDlgPvt COLORS 0, 16777215 NO BORDER PIXEL
            oGetObs:lActive := .F.
          
            //Botões
            @ (nJanAltu/2)-18, 006 BUTTON oBtnConf PROMPT "Confirmar"             SIZE (nJanLarg/2)-12, 015 OF oDlgPvt ACTION (fVldUsr()) PIXEL
            oBtnConf:SetCss("QPushButton:pressed { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dadbde, stop: 1 #f6f7fa); }")
    ACTIVATE MSDIALOG oDlgPvt CENTERED
      
    RestArea(aArea)
Return
  
Static Function fVldUsr()
    Local lDeuCerto := .F.
    Local cUsrAux   := Alltrim(cGetUsr)
    Local cPswAux   := Alltrim(cGetPsw)

    //Aciona a redefinição de senha
    lDeuCerto := u_zAtuSenha(cUsrAux, cPswAux)

    //Se deu tudo certo, o texto ficará em azul, senão ficará em vermelho
    If lDeuCerto
        cGetObs := "Senha redefinida com sucesso!"
        oGetObs:setCSS("QLineEdit{color:#0000FF; background-color:#FEFEFE;}")
    Else
        cGetObs := "Falha ao definir a senha!"
        oGetObs:setCSS("QLineEdit{color:#FF0000; background-color:#FEFEFE;}")
    EndIf
    oGetObs:Refresh()

Return

Pessoal, apenas uma observação importante, tentem utilizar o Configurador para redefinir senhas, pois lá estará toda a integridade dos dados. Esse procedimento citado no artigo, é apenas para simulações, por exemplo, em uma base de testes. Inclusive se você precisar redefinir a senha do Admin, a TOTVS recomenda seguir o procedimento nesse link – https://centraldeatendimento.totvs.com/hc/pt-br/articles/360031739273-MP-FRAME-Reset-de-Senha-do-Admin-com-Dicion%C3%A1rio-no-Banco

 

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação