Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Autenticação 2FA para Usuário Root no WSL

--- # naldodj-wsl-2FA ## Autenticação 2FA para Usuário Root no WSL ### Introdução O Windows Subsystem for Linux (WSL) é uma ferramenta poderosa que permite aos desenvolvedores executar um ambiente Linux diretamente no Windows. No entanto, a segurança é uma preocupação importante, especialmente quando se trata de acessar o usuário root. Neste post, vamos mostrar como configurar a autenticação de dois fatores (2FA) para o usuário root ao acessar o WSL, garantindo uma camada adicional de segurança. ### Objetivo Vamos configurar um script de login que valida a senha do root e usa autenticação 2FA baseada em Time-based One-Time Password (TOTP), usando ferramentas comuns como `openssl`, `oathtool`, e `perl`. ### Passo 1: Instalar as Ferramentas Necessárias Primeiro, precisamos garantir que temos todas as ferramentas necessárias instaladas. Isso inclui `openssl`, `oathtool`, e `perl`. ```bash sudo apt-get update sudo apt-get install openssl oathtool perl ``` Para os scripts em Lua.

BlackTDN :: Implementando a Função u_getSM0EmpFilByCNPJ para uso no TOTVS Microsiga Protheus


#Implementando a Função u_getSM0EmpFilByCNPJ em TOTVS Protheus

Hoje vamos explorar uma função bastante útil desenvolvida em TLPP Protheus, chamada-se u_getSM0EmpFilByCNPJ. 

Essa função é responsável por buscar o código da Empresa/Filial utilizando o CNPJ da empresa como parâmetro. 

Vamos entender como ela funciona.

```tlpp

#include "totvs.ch"

function u_getSM0EmpFilByCNPJ(cCNPJ as character) as json

    static oHashMapSM0EmpFilByCNPJ:=tHashMap():New() as object
    
    local aFiliais as array
    local aEmpresas as array
    local aFWArrFilAtu as array

    local cCodEmp as character
    local cCodFil as character
    local cEmpFil as character

    local jEmpFil as json
    local jGetEmpFil as json

    local nFilAtu as numeric
    local nFilial as numeric
    local nFiliais as numeric

    local nEmpresa as numeric
    local nEmpresas as numeric


    jEmpFil:=JSONObject():New()
    jEmpFil["cEmpAnt"]:=cEmpAnt
    jEmpFil["cFilAnt"]:=cFilAnt

    begin sequence

        cCNPJ:=allTrim(cCNPJ)
        cCNPJ:=strTran(cCNPJ,"/","")
        cCNPJ:=strTran(cCNPJ,".","")
        cCNPJ:=strTran(cCNPJ,"-","")

        if (empty(cCNPJ))
            break
        endif

        if (oHashMapSM0EmpFilByCNPJ:Get(cCNPJ,@jGetEmpFil))
            if (;
                (valType(jGetEmpFil)=="J");
                .and.;
                (jEmpFil:HasProperty("cEmpAnt"));
                .and.;
                (jEmpFil:HasProperty("cFilAnt"));
            )
                jEmpFil["cEmpAnt"]:=jGetEmpFil["cEmpAnt"]
                jEmpFil["cFilAnt"]:=jGetEmpFil["cFilAnt"]
                break
            endif
        endif

        aEmpresas:=aClone(FWAllCompany())
        nEmpresas:=Len(aEmpresas)

        for nEmpresa:=1 to nEmpresas
            
            cCodEmp:=aEmpresas[nEmpresa]
            
            aFiliais:=aClone(FWAllFilial(cCodEmp))
            
            nFiliais:=Len(aFiliais)
            for nFilial:=1 To nFiliais
                
                cCodFil:=aFiliais[nFilial]
                
                for nFilAtu:=1 to nFiliais

                    cEmpFil:=(cCodEmp+aFiliais[nFilAtu])

                    aFWArrFilAtu:=aClone(FWArrFilAtu(cCodFil,cEmpFil))

                    if (Empty(aFWArrFilAtu).or.Len(aFWArrFilAtu)<18)
                        //Não encontrou Empresa/Filial?
                        FWFreeArray(@aFWArrFilAtu)
                        loop
                    endif

                    if (cCNPJ==aFWArrFilAtu[18])
                        //Armazena em Cache
                        jGetEmpFil:=JSONObject():New()
                        jGetEmpFil["cEmpAnt"]:=aFWArrFilAtu[1]
                        jGetEmpFil["cFilAnt"]:=aFWArrFilAtu[2]
                        oHashMapSM0EmpFilByCNPJ:Set(cCNPJ,jGetEmpFil)
                        //Define o Retorno
                        jEmpFil["cEmpAnt"]:=jGetEmpFil["cEmpAnt"]
                        jEmpFil["cFilAnt"]:=jGetEmpFil["cFilAnt"]
                        break
                    endif

                    FWFreeArray(@aFWArrFilAtu)
                
                next nFilAtu

            next nFilial

            FWFreeArray(@aFiliais)

        next nEmpresa

    end sequence
    
    FWFreeArray(@aFiliais)
    FWFreeArray(@aEmpresas)
    FWFreeArray(@aFWArrFilAtu)

return(jEmpFil)


```

*Entendendo a Função

Entrada de Parâmetro:

A função recebe como parâmetro o CNPJ da empresa que você deseja obter o código da Empresa/Filial.
Tratamento do CNPJ:

O CNPJ passa por um processo de limpeza, removendo caracteres como "/", ".", e "-".
Cache de Resultados:

Utiliza um objeto tHashMap (oHashMapSM0EmpFilByCNPJ) para armazenar resultados previamente obtidos, evitando consultas repetidas.
Consulta e Armazenamento em Cache:

A função faz consultas utilizando a biblioteca FW (Framework) do TOTVS Protheus para obter informações sobre empresas e filiais.
Caso encontre o CNPJ desejado, os resultados são armazenados em cache para consultas futuras.
Retorno:

Retorna um objeto JSON contendo os códigos da Empresa e Filial correspondentes ao CNPJ informado.

*Utilização:
```tlpp
// Exemplo de Uso
local jResult as json
jResult := u_getSM0EmpFilByCNPJ("12345678901234")
```

*(sys.partitions)*

----

*O ChatGPT colaborou com esta publicação*

Comentários

Postagens mais visitadas