mais, não tô conseguindo entender o seu funcionamento. Se alguem poder me ajudar agradeço:
Código: Selecionar todos
#Include "msgbox.ch"
#Include "box.ch"
#Include "inkey.ch"
#Include "sistema.ch"
#IfNDef SERVICO
FUNCTION LibSistema
Local cTabFil, cArqTmp, cTexto, cSep, cLinha,;
cCNPJ, cInsc, cMac,;
I, X,;
lOk
Parameters lTesta
Private cGetMac, dLimite, nCodErro
lTesta := If( lTesta==Nil , .T. , lTesta )
lOk := .F.
nCodErro := 0
Pilha_Tela(.T.,24,00,24,79)
SetCursor( 0 )
Begin Sequence
Mensagem("Inicializando o sistema ... Aguarde ...")
#IfDef SQL
Use &("a_empres") Alias EMPRESAS VIa _sqlrdd New Shared
If NetErr()
Alerta("NÆo foi poss¡vel abrir o arquivo A_EMPRES !",.T.,10)
Break
Endif
Use &("a_estaca") Alias ESTACOES Via _sqlrdd New Shared
If NetErr()
Alerta("NÆo foi poss¡vel abrir o arquivo A_ESTACA !",.T.,10)
Break
Endif
DbGoTop()
If EOF()
Alerta("NÆo h esta‡äes cadastradas no sistema!",.T.,10)
Break
Endif
#Else
Use &(cDirSisData+"a_empres") Alias EMPRESAS New Shared
If NetErr()
Alerta("NÆo foi poss¡vel abrir o arquivo A_EMPRES.DBF !",.T.,10)
Break
Endif
Use &(cDirSisData+"a_estaca") Alias ESTACOES New Shared
If NetErr()
Alerta("NÆo foi poss¡vel abrir o arquivo A_ESTACA.DBF !",.T.,10)
Break
Endif
DbGoTop()
If EOF()
Alerta("NÆo h esta‡äes cadastradas no sistema!",.T.,10)
Break
Endif
#EndIf
Locate for c_num=="001"
If EOF()
Alerta("Esta‡Æo de trabalho 001 nÆo encontrada!",.T.,10)
Break
Else
cTexto := If( Empty(c_impref) , c_impref , Cript(c_impref,.F.) )
cCNPJ := cInsc := cMAC := dLimite := ""
For I := 1 to 15
cCNPJ += SubStr( cTexto , I*4-3 , 1 )
cInsc += SubStr( cTexto , I*4-2 , 1 )
cMAC += SubStr( cTexto , I*4-1 , 1 )
dLimite += SubStr( cTexto , I*4 , 1 )
Next I
cCNPJ := Trim( cCNPJ )
cInsc := Trim( cInsc )
cMAC := Trim( cMAC )
dLimite := CtoD( SubStr(dLimite,7,2)+"/"+;
SubStr(dLimite,5,2)+"/"+;
SubStr(dLimite,1,4) )
Select EMPRESAS
DbGoTo( 1 )
#IfDef SQL
cTabFil := "a_filial"
#Else
cTabFil := cDirSis+AllTrim(c_apelido)+"\data\a_filial.dbf"
#EndIf
cArqTmp := cDirSis+AllTrim(c_apelido)+"\tmp\printer.tmp"
#IfDef LINUX
cTabFil := StrTran( Lower( cTabFil ) , "\" , "/" )
cArqTmp := StrTran( Lower( cArqTmp ) , "\" , "/" )
cSep := ":"
#Else
cSep := "-"
#Endif
cGetMac := AllTrim( GetEnv( "MACSERVER" ) )
If Empty( cGetMac )
FErase( cArqTmp )
#IfDef LINUX
Run ( "/sbin/ifconfig eth0 > "+cArqTmp )
#Else
Run ( "ipconfig /all > "+cArqTmp )
#Endif
cTexto := MemoRead( cArqTmp )
cGetMac := Nil
FErase( cArqTmp )
For I := 1 to MLCount( cTexto , 100 )
cLinha := MemoLine( cTexto , 100 , I )
For X := 1 to Len( cLinha ) - 16
cGetMac := SubStr( cLinha , X , 17 )
If ! " " $ cGetMac .and. StrOcorr( cSep , cGetMac )==5
Exit
Endif
cGetMac := Nil
Next X
If cGetMac != Nil
Exit
Endif
Next I
If cGetMac==Nil
Alerta( "Erro na inicializa‡Æo do sistema (43) !",.T.,10)
Break
Endif
Endif
cGetMac := StrTran( cGetMac , cSep , "" )
#IfDef SQL
Use ( cTabFil ) Alias FILIAIS Via _RDD Connection Getconn( u_apelido ) New Shared
#Else
Use ( cTabFil ) Alias FILIAIS New Shared
#EndIf
If NetErr()
Alerta("Erro ao abrir o arquivo "+cTabFil+" !" , .T. , 10 )
Break
Endif
Locate for c_codigo=="00"
If EOF()
Alerta("A loja 00 da empresa "+Alltrim(EMPRESAS->c_apelido)+" nÆo foi encontrada!",.T.,10)
Break
Endif
If lTesta
If cCNPJ != ExtraiNumero( Cript(c_cgc ,.F.) ) .or. ;
cInsc != ExtraiNumero( Cript(c_insc,.F.) )
nCodErro := 1
Elseif cMAC != cGetMac
nCodErro := 2
Elseif u_Data > dLimite
nCodErro := 3
Endif
lOk := ( nCodErro==0 )
Endif
Endif
lOk := ( lOk .or. SisAutentica() )
End Sequence
If Select("FILIAIS") > 0
FILIAIS->( DbCloseArea() )
Endif
If Select("ESTACOES") > 0
ESTACOES->( DbCloseArea() )
Endif
If Select("EMPRESAS") > 0
EMPRESAS->( DbCloseArea() )
Endif
Pilha_Tela(.F.)
Return ( lOk )
*********
* f i m *
*********
FUNCTION SisAutentica
Local cLetras, cTexto, cVar, cDig, cChave,;
cCNPJ, cInsc,;
dData,;
nSData, nSoma, nVal, I,;
lOk
cLetras := "U7IAW1KET6BXQL5FP0GSH4D9ZCJV3N8RYM2"
nSData := If( Empty(dLimite) , 0 , Day(dLImite)+;
Month(dLimite)+;
Year(dLimite)+;
Dow(dLimite) )
cTexto := ""
nSoma := 0
cCNPJ := ExtraiNumero( Cript( FILIAIS->c_cgc , .F. ) )
cInsc := ExtraiNumero( Cript( FILIAIS->c_insc, .F. ) )
cVar := cCNPJ+cInsc+cGetMac
For I := 1 to Len( cVar )
cDig := SubStr( cVar , I , 1 )
nVal := If( cDig $ "0123456789" , Val(cDig) , Asc(cDig) )
nSoma += nSData * ( I+nVal )
Next I
For I := 1 to 12
nVal := Max( 1 , nSoma % Len(cLetras) )
cTexto += SubStr( cLetras , nVal , 1 )
cLetras := Left(cLetras,nVal-1) + SubStr(cLetras,nVal+1)
Next I
cChave := Space(16)
Pilha_Tela(.T.,02,00,24,79)
CriaJanela(08,20,16,60,"AUTENTICAۂO DO SISTEMA")
SetColor( cor_linjan )
@ 14,21 to 14,59
SetColor( cor_say+","+cor_get )
If lTesta
@ 10,21 Say "C¢d.Erro :"
@ 10,31 Say StrZero(nCodErro,2) Color cor_get2
Endif
@ 10,42 Say "Validade :"
@ 10,52 Get dLimite When .F.
@ 12,21 Say "Chave de libera‡Æo :"
lOk := .F.
Do While ! lOk
_aBotoes := {}
BT_Iniciar(15,37," ^OK ")
BT_Iniciar(15,49,"^Cancelar")
Teclas_Fun("Informe a chave de libera‡Æo do sistema. ESC-Sair",{"ESC"})
@ 12,41 Get cChave Picture "@KR !!!!-!!!!-!!!!-!!!!" Valid ! Empty( cChave )
DefTecla( K_ALT_F2 , .T. , { || GeraChaveLib( cTexto , cLetras ) } )
Ler_Get()
DefTecla( K_ALT_F2 , .F. )
If LastKey()==K_ESC .or. BT_Executa()!=1
Exit
Elseif Left( cChave , 12 )==cTexto
nSoma := 0
For I := 1 to Len( cChave )-1
cDig := SubStr( cChave , I , 1 )
nSoma += If( cDig $ "0123456789" , Val(cDig) , Asc(cDig) )
Next I
lOk := ( nSoma%10 == Val(Right(cChave,1)) )
Endif
If ! lOk
Alerta("A chave informada ‚ inv lida!",.T.,10)
Endif
Enddo
Pilha_Tela( .F. )
If lOk
cLetras := cTexto + cLetras
cDig := ""
For I := 1 to 3
cDig += StrZero( At( SubStr(cChave,12+I,1) , cLetras ) , 2 )
cLetras := Right( cLetras , Len(cLetras)-2 ) + Left(cLetras , 2 )
Next I
dData := CtoD( SubStr(cDig,1,2)+"/"+;
SubStr(cDig,3,2)+"/"+;
SubStr(cDig,5,2) )
Select FILIAIS
cCNPJ := PadR( cCNPJ , 15 )
cInsc := PadR( cInsc , 15 )
cGetMac := PadR( cGetMac , 15 )
dData := PadR( DtoS(dData) , 15 )
cTexto := ""
For I := 1 to 15
cTexto += SubStr( cCNPJ , I , 1 )+;
SubStr( cInsc , I , 1 )+;
SubStr( cGetMac, I , 1 )+;
SubStr( dData , I , 1 )
Next I
Select ESTACOES
Locate for c_num=="001"
Bloq_Reg(.T.)
Replace c_impref With Cript( cTexto , .T. )
DbCommit()
DbUnlock()
Mensagem("Autentica‡Æo conclu¡da.")
Alerta( "O Sistema foi autenticado com sucesso!" , .T. , 10 )
Endif
Return ( lOk )
*********
* f i m *
*********
FUNCTION GeraChaveLib( cTexto , cLetras )
Local cChave, cDig, cSenha,;
nPos, I, nSoma,;
dData,;
lCent
If "SUPORTE" != Trim(u_User)
Return ( Nil )
Endif
Private GetList := {}
lCent := __SetCentury(.T.)
Begin Sequence
Pilha_Tela(.T.,18,00,24,79)
CriaJanela(18,00,22,28,"LIBERACAO")
SetColor(cor_linjan)
@ 22,01 to 22,27
SetColor(cor_say+","+cor_get)
@ 20,01 Say "Chave ......... :"
@ 21,01 Say "Informe a senha :"
cChave := StrZero( HB_RandomInt(1000000,9999999) , 7 )
@ 20,18 Say cChave Color cor_get2
cSenha := Senha(21,18)
Pilha_Tela(.F.)
If cSenha==Nil
Break
Elseif cSenha != PadR( SenhaSuporte(cChave)+StrZero(SomaDigitos(DtoS(Date())),2) , 10 )
Alerta("A senha informada ‚ inv lida!",.T.,10)
Break
Endif
__SetCentury( lCent )
dData := u_Data
Pilha_Tela(.T.,20,00,24,79)
Janela(20,00,22,27,cor_janela,B_SINGLE,.F.,.T.)
SetColor(cor_say+","+cor_get)
@ 21,02 Say "Informe a data :"
@ 21,18 Get dData
Ler_Get()
If LastKey()!=K_ESC
cChave := cTexto
cLetras := cTexto + cLetras
For I := 1 to 3
nPos := Val( SubStr( DtoC(dData) , I*3-2 , 2 ) )
cChave += SubStr( cLetras , nPos , 1 )
cLetras := Right( cLetras , Len(cLetras)-2 ) + Left( cLetras , 2 )
Next I
nSoma := 0
For I := 1 to Len( cChave )
cDig := SubStr( cChave , I , 1 )
nSoma += If( cDig $ "0123456789" , Val(cDig) , Asc(cDig) )
Next I
cChave += Str( nSoma % 10 , 1 )
Keyboard cChave
Endif
Pilha_Tela(.F.)
End Sequence
__SetCentury( lCent )
Return
#Endif
*********
* f i m *
*********
FUNCTION SenhaSuporte( cChave ) // chave = numero com 7 digitos
Local cTexto, cSenha, nPos, I
cChave := cChave + StrZero( SomaDigitos( DtoS(Date()) ) , 2 ) + Str( Dow(Date()) , 1 )
cTexto := "p2o4i7u8y9t03r2e1wq4a5s6d3f9gh76j2k5zlm0n9b8v3c2x3"
cSenha := ""
For I := 1 to 7
nPos := SomaDigitos( cChave ) % Len( cTexto )
cSenha += SubStr( cTexto , If(nPos=0,Len(cTexto),nPos) , 1 )
cChave += SubStr( cChave , I , 1 )
cTexto := Right( cTexto , Len(cTexto)-nPos ) + Left( cTexto , nPos )
Next I
Return ( cSenha )
*********
* f i m *
*********por Maligno: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f2r1



