Pular para o conteúdo principal

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

Protheus :: Autenticação nos WebServices Protheus. Usando MD5 (Message Digest Algorithm 5)

Carlinha Soneta está fazendo com que eu seja produtivo na postagem de dicas para vocês. Dessa vez ela solicitou que, para a autenticação do usuário do WS, além de informar Usuário e Senha, fosse informado o "Hash" de uma mensagem. Essa solicitação baseou-se na necessidade de um cliente com .net e em função do seguinte artigo: "WebService utilizando soapHeader e token". Pensei um pouco e bolei o seguinte esquema para autenticação:

1 ) Criar um método para obtenção de Mensagens: O usuário do WS iria chamar esse método e obter uma mensagem aleatória. Retornaria o "Hash" dessa mensagem calculado via MD5;
2 ) Criar um método para validação do Usuário considerando, além do Usuário e Senha, o "Hash" da mensagem.

Eu poderia ter criado uma tabela de mensagens a serem geradas, mas optei em trabalhar com a tabela SX5 (Tabelas Genéricas) com a opção de retornar as mensagens em Português, Inglês ou Espanhol de forma aleatória e/ou embaralhada. Na realidade, o esperado do WS de mensagem é uma mensagem qualquer, que deverá ser codificada e retornada para autenticação do usuário do WS.

Sendo assim, criei os seguintes WS:

/*/
WSSERVICE: u_wsGetMessages
Autor: Marinaldo de Jesus & Carla (amor) Soneta
Data: 29/07/2010
Descrição: Serviço Mensagens Para Token de Autenticação de Usuário
Uso: WS
/*/

Esse WS será usado para a obtenção de Mensagens que serão utilizadas, em conjunto com Usuário e Senha, para a autenticação do usuário. Esse WS possui os seguintes métodos:

GetMessage: usado para a obtenção de Mensagem Aleatória ; e
ClearStackMD5Hash: usado para limpar a Pilha de Mensagens.

GetMessage receberá, como parâmetros: Language e Embaralha. Language será utilizado para identficar em que idioma a mensagem será enviada: PT (Português), ENG (Inglês), SPA (Spanish) ou Brancos (para não considerar a Descrição do SX5, retornando uma mensagem composta por constantes, e informações variáveis do sistema como Date() e Time()). Já Embaralha, do tipo lógico (boolean) quando "setado", fará com que as mensagens sejam "embaralhadas" antes de serem enviadas. Ele retornará conforme parâmetros de entrada, a mensagem ao "client" solicitante. O "Hash" dessa mensagem deverá ser retornado quando da validação do usuário do WS.

ClearStackMD5Hash receberá, como parâmetros de entrada: ClearAllMD5Hash, MD5HashClear e de saída Message. Se ClearAllMD5Hash for "setado" como "true" a pilha de mensagens armazenadas em GetMessage será esvaziada, caso contrário, apenas o "hash" passado em MD5HashClear será eliminado da pilha de mensagens. Message retornará uma mensagem informativa de acordo com o conteúdo de ClearAllMD5Hash.

/*/
WebService: u_wsUserValid
Autor: Marinaldo de Jesus & Carla Soneta
Data: 29/07/2010
Descrição: Web Service para Validação de Usuário do WS usando MD5
Uso: WebServices
/*/

Esse WS será utilizado para validar o Usuário e Senha e o "Hash" conforme mensagem obtida através do método GetMessage. Ele possui o seguinte método ValidUserWs.

O método ValidUserWs, receberá, como parâmetros de entrada: UserWs, UserWsPasswd, Token e HASHMD5UserAndPsw

UserWs : Nome e/ou Código do Usuário do WS
UserWsPasswd: Senha do Usuário do WS
Token: "MD5 Hash" da mensagem obtida através do WS u_wsGetMessages
HASHMD5UserAndPsw: Se, ao invés de Considerar o Usuário e Senha informados nos parâmetros, deverá considerar o "MD5 Hash" do valor digitado.

Esse método irá retornar lValidUserWs, com o valor "true", se o usuário for validado, ou "false" caso contrário. Um "Soap Fault" poderá ser gerado de acordo com o parâmetro invalidado.

Além do métodos acima, o programa que contém o WS de Validação de Usuário e obtenção das Mensagens, possui também a função Random( nRange , nMin , nMax ). Random retornará um numero aleatório para um determinado intervalo.

Considerando que o programa possui 2 WS, para cada um deverá ser gerado um "Client".

Além dos WS acima citados, foi criado o WS u_wsTstUserValid. Esse WS será utilizado para demonstrar o uso dos demais.

/*/
WebService: u_wsTstUserValid
Autor: Marinaldo de Jesus & Carla Soneta
Data: 29/07/2010
Descrição: Web Service para Teste Validação de Usuário do WS usando MD5
Uso: WebServices
/*/

O WS u_wsTstUserValid possui os seguintes métodos:

SampleVld01: "Exemplo 01 - Usando Language igual a PT, Usuário e Senhas originais e Não Embaralha"
SampleVld02: "Exemplo 02 - Usando Language igual a ENG, Usuário e Senhas originais e Não Embaralha"
SampleVld03: "Exemplo 03 - Usando Language igual a SPA, Usuário e Senhas originais e Não Embaralha"
SampleVld04: "Exemplo 04 - Usando Language em Branco, Usuário e Senhas originais e Não Embaralha"

SampleVld05: "Exemplo 05 - Usando Language igual a PT, Usuário e Senhas originais e Embaralha"
SampleVld06: "Exemplo 06 - Usando Language igual a ENG, Usuário e Senhas originais e Embaralha"
SampleVld07: "Exemplo 07 - Usando Language igual a SPA, Usuário e Senhas originais e Embaralha"
SampleVld08: "Exemplo 08 - Usando Language em Branco, Usuário e Senhas originais e Embaralha"

SampleVld09: "Exemplo 09 - Usando Language igual a PT, Hash de Usuário e Senha e Não Embaralha"
SampleVld10: "Exemplo 10 - Usando Language igual a ENG, Hash de Usuário e Senha e Não Embaralha"
SampleVld11: "Exemplo 11 - Usando Language igual a SPA,, Hash de Usuário e Senha e Não Embaralha"
SampleVld12: "Exemplo 12 - Usando Language em Branco, Hash de Usuário e Senha e Não Embaralha"

SampleVld13: "Exemplo 13 - Usando Language igual a PT, Hash de Usuário e Senha e Embaralha"
SampleVld14: "Exemplo 14 - Usando Language igual a ENG, Hash de Usuário e Senha e Embaralha"
SampleVld15: "Exemplo 15 - Usando Language igual a SPA,, Hash de Usuário e Senha e Embaralha"
SampleVld16: "Exemplo 16 - Usando Language em Branco, Hash de Usuário e Senha e Embaralha"

E todos eles receberão, como parâmetro de entrada: Usr e Pwd, retornando: lUserOk. Cada um explorará as características de validação de maneira diferente (no exemplo, 16). Considerando que no WS de validação defini as seguintes constantes como Usuário e Senha:

#DEFINE USERWS_NAME, com o seguinte valor: 'naldodj'

e ;

#DEFINE USERWS_PASSWORD, com o seguinte valor:

'@#Essa[!$]Eh[!$]A[!$]Minha[!$]Senha[!$]Para[!$]Acesso[!$]Ao[!$]Ws#@'

São essa informações que deverão ser passadas para validação. Altere-as conforme o seu gosto e necessidade.

Dessa vez não vou reproduzir o código aqui no "post". Disponibilizarei apenas o link para os arquivos ( num total de 5 ).

Esses arquivos são:

1 ) u_WsUserValid.prw: contém os WS para obtenção das mensagens e para Validação;
2 ) client_u_wsGetMessages.prw: Client do WS u_wsGetMessages;
3 ) client_u_wsUserValid.prw: Client do WS u_wsUserValid;
4 ) u_WsTstUserVld.prx: contém o WS com exemplos de uso; e
5 ) client_U_WSTSTUSERVALID.prw: Client do WS u_wsTstUserValid.

Para usá-los:

1 ) Compile o programa u_WsUserValid.prw;
2 ) Compile o programa u_WsTstUserVld.prx; e
3 ) Gere os clientes para cada serviço.

Bom divertimento. E, como sempre, clique aqui para "baixar" os fontes.

[]s
иαldσ dj


...

Comentários

Postagens mais visitadas deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA