Files
vfp_roaauto/COMUN/programe/osecurity.prg

269 lines
7.3 KiB
Plaintext

*!* 19.05.2009
*!* marius.mutu
*!* gnewcryptxml = .T. nu mai exista fisiere roa_security.xml cu criptarea veche (windows api)
*!* 21.06.2012
*!* marius.mutu
*!* VERIFICA_UTILIZATOR
*!* tratare utilizatori ADMIN -1, SUPER -2
#DEFINE CRLF CHR(13) + CHR(10)
*** osecurity
********************* INCEPUT Getcrssecurity **********************
* PROCEDURE Getcrssecurity( )
* Date : 04/05/05, 11:25:56
* author : marius.mutu
* description:
PROCEDURE GetcrsSecurity
LPARAMETERS tcSecurityFile
*!* SECURITY.TXT - NECRIPTAT
*!* SECURITY.XML - CRIPTAT
*!* DACA EXISTA SECURITY.XML - PARSEZ XML, ALTFEL PARSEZ TXT
*!* gnewcryptxml - daca roa_security.xml are criptare noua(blowfish)
*!* gnewcryptfll - daca exista vfpencryption.fll
IF TYPE("gnewcryptxml")="U"
PUBLIC gnewcryptxml
ENDIF
*!* 19.05.2009
*!* nu mai exista fisiere roa_security.xml cu criptarea veche (windows api)
*!* gnewcryptxml=.F.
gnewcryptxml = .T.
IF TYPE("gnewcryptfll")="U"
PUBLIC gnewcryptfll
ENDIF
gnewcryptfll=.T.
LOCAL lnAt,lcDirMare
IF TYPE("gcComunPath")="U"
PUBLIC gcComunPath
lnAt=RAT("\",gcAppPath,2)
lcDirMare=LEFT(gcAppPath,lnAt)
gcComunPath=ADDBS(lcDirMare)+"COMUNROA\"
ENDIF
LOCAL loex AS EXCEPTION
TRY
lcEncryptionFile = gcComunPath+"vfpencryption.fll"
IF !"vfpencryption"$LOWER(SET("Library"))
SET LIBRARY TO (lcEncryptionFile) ADDITIVE
ENDIF
CATCH TO loex
gnewcryptfll=.F.
ENDTRY
LOCAL lcSecurityFile,lcSecurityPath, lcCursor, lcLinie, lcMode
LOCAL lcSecurityFileXML
lcSecurityFileXML = FORCEEXT(tcSecurityFile,'xml')
lcCursor = "crsHost"
lcSecurityFile = tcSecurityFile
lcSecurityPath = ADDBS(JUSTPATH(lcSecurityFile))
lnValid = 0
llSucces = .T.
IF !DIRECTORY(lcSecurityPath)
TRY
MD (lcSecurityPath)
CATCH
aMESSAGEBOX('Nu se poate crea directorul ' + lcSecurityPath + '!',0+16,'Atentie')
ENDTRY
ENDIF
IF !(FILE(lcSecurityFile) OR FILE(lcSecurityFileXML))
CD (lcSecurityPath)
IF !FILE(lcSecurityFileXML)
lcSecurityText = 'ROA;CONTAFIN_ORACLE;123;'
lcSecurityText = INPUTBOX('Host(DSN);SCHEMA;SCHEMA_PASSWORD;1;','Server',lcSecurityText)
lcSecurityText = ALLTRIM(lcSecurityText)
IF !EMPTY(lcSecurityText)
IF RIGHT(lcSecurityText,1) # ';'
lcSecurityText = lcSecurityText + ';'
ENDIF
ELSE
llSucces = .F.
ENDIF
ENDIF
IF llSucces
TRY
IF !(FILE(lcSecurityFileXML) OR FILE(lcSecurityFile))
*!* SECURITY.TXT
STRTOFILE(lcSecurityText, lcSecurityFile)
*!* SECURITY.TXT ^
ENDIF
*!* SECURITY.XML
IF !FILE(lcSecurityFileXML)
CREATE CURSOR cXML (HOST c(50), schema c(50), pwd c(50))
INSERT INTO cXML (HOST, schema, pwd) VALUES("ROA","CONTAFIN_ORACLE","ENCRYPTED PWD")
CURSORTOXML("cXML",lcSecurityFileXML, 1, 512, 0, "1")
USE IN cXML
ENDIF
*!* SECURITY.XML ^
CATCH
aMESSAGEBOX('Nu s-a putut crea fisierul ' + lcSecurityFile,0+16,'Atentie')
llSucces = .F.
ENDTRY
ENDIF
ENDIF
IF llSucces
IF !FILE(lcSecurityFile) AND !FILE(lcSecurityFileXML)
aMESSAGEBOX('Nu exista fisierul ' + lcSecurityFile,0+16,'Atentie')
llSucces = .F.
ENDIF
ENDIF
IF llSucces
IF USED(lcCursor)
USE IN (lcCursor)
ENDIF
&& daca exista security.xml - il transform in cursorul cXML si completez crsHost
CREATE CURSOR (lcCursor)(HOST c(100), schema c(100), pwd v(100), IsEncrypted c(1))
IF FILE(lcSecurityFileXML)
TRY
lcSecurityText = FILETOSTR(lcSecurityFileXML)
XMLTOCURSOR(lcSecurityFileXML, "cXML", 512)
SELECT cXML
GO TOP
SCATTER NAME lofirstrecord
IF lofirstrecord.HOST="ENCRYPTION"
gnewcryptxml=.T.
DELETE
ENDIF
INSERT INTO (lcCursor) (HOST, schema, pwd, IsEncrypted) ;
SELECT HOST, schema, pwd, "1" AS IsEncrypted ;
FROM cXML
lnValid = RECCOUNT('cXML')
USE IN cXML
CATCH TO loex
*!* Local loEx As Exception
aMESSAGEBOX('Mesaj: ' + loex.MESSAGE + CRLF + ;
'Eroare nr: ' + ALLTRIM(TRANSFORM(loex.ERRORNO)) + CRLF + ;
'Cod: ' + loex.LINECONTENTS + CRLF + 'Procedura: ' + loex.PROCEDURE + CRLF + ;
'Linia nr: ' + ALLTRIM(TRANSFORM(loex.LINENO)),0+16,'Eroare')
FINALLY
USE IN (SELECT('cXML'))
ENDTRY
ELSE
* CREATE CURSOR (lcCursor)(HOST c(100), Schema c(100), Pwd v(100), IsEncrypted c(1))
lcSecurityText = FILETOSTR(lcSecurityFile)
LOCAL laHost
DIMENSION laHost[1]
lnLen = ALINES(laHost, lcSecurityText)
IF lnLen > 0
FOR i = 1 TO lnLen
lcLinie = laHost[i]
lcHost = GETWORDNUM(lcLinie, 1, ';')
lcSchema = GETWORDNUM(lcLinie, 2, ';')
lcPassword = GETWORDNUM(lcLinie, 3, ';')
lcMode = "0" && necriptat - security.txt
IF EMPTY(lcHost) OR EMPTY(lcSchema) OR EMPTY(lcPassword)
LOOP
ENDIF
lnValid = lnValid + 1
INSERT INTO &lcCursor (HOST, schema, pwd, IsEncrypted) VALUES (lcHost, lcSchema, lcPassword, IIF(EMPTY(lcMode), '0', lcMode))
ENDFOR
ENDIF
ENDIF
ENDIF
RETURN lnValid
ENDPROC
********************* SFARSIT Getcrssecurity **********************
*************************************************************************************************************
FUNCTION verifica_utilizator
LPARAMETERS tcNumeUtilizator,tcParola
LOCAL lnVerificare,lnRezultat,lnSuma,lnCkSum
glAdministrator = .F.
glSupervizor = .F.
lnRezultat = -1
TRY
lcSql = [SELECT pack_drepturi.verificautilizator(']+ALLTRIM(tcNumeUtilizator)+[',']+;
ALLTRIM(tcParola)+[') as id_util from dual]
lcCursor = [v_verificare]
lnSucces = goExecutor.oExecute(lcSql,lcCursor)
goExecutor.oReset()
IF USED('v_verificare') AND RECCOUNT('v_verificare')>0
SELECT v_verificare
lnVerificare = id_util
USE IN v_verificare
ENDIF
IF m.lnVerificare = -1
glAdministrator = .F.
glSupervizor = .F.
RETURN m.lnRezultat
ENDIF
IF lnVerificare < -1000000 && ADMIN, SUPER, SERVER
lnRezultat = lnVerificare + 1000000
DO case
CASE lnRezultat = -1 && ADMIN
glAdministrator = .T.
CASE lnRezultat = -2 && SUPER
glSupervizor = .T.
ENDCASE
ELSE
lnSuma = 0
lnRezultat = INT(lnVerificare/100) && id_util
lnVerificare = ABS(m.lnVerificare) && pentru cazul in care am id_util (-1,-2,-3)
i = lnRezultat
lnCkSum = MOD(lnVerificare,100)
DO WHILE i > 0
lnSuma = lnSuma+MOD(i,10)
i = INT(i/10)
ENDDO
IF MOD(lnSuma+lnCkSum, 13) = 0
glAdministrator = .T. && GRUP ADMINISTRARE ID = 0
ELSE
IF MOD(lnSuma+lnCkSum, 11) = 0
glSupervizor = .T. && GRUP SUPERVIZARE ID = -1
ENDIF
ENDIF
ENDIF
CATCH
lnRezultat = -1
ENDTRY
RETURN lnRezultat
ENDFUNC
*************************************************************************************************************
FUNCTION verifica_id_util
LPARAMETERS tnIdUtil
LOCAL lcRezultat
lcRezultat=[]
lcSql = [SELECT pack_drepturi.verificaidutil(]+;
ALLTRIM(STR(tnIdUtil))+[) as utilizator from dual]
lcCursor = [v_cursor_verif]
lnSucces = goExecutor.oExecute(lcSql,lcCursor)
goExecutor.oReset()
IF USED('v_cursor_verif') AND RECCOUNT('v_cursor_verif')>0
SELECT v_cursor_verif
lcRezultat=utilizator
USE IN v_cursor_verif
ENDIF
RETURN lcRezultat
ENDFUNC
*************************************************************************************************************