Files
MBS/PROYECTO/otrodir/autentificacion.4gl
T

134 lines
4.7 KiB
Plaintext

{================================================
FUNCION : AUTENTIFICACION
OBJETIVO : VALIDAR FUNCION DEL USUARIO
FECHA : 30/6/2009
PROGRAMADOR: JUAN SOTO
==================================================
}
FUNCTION autentificacion()
DEFINE usuario,clave STRING,
cambia_c CHAR(2),
pperfil,ckprinter,pprinter1,pprinter2 SMALLINT
WHENEVER ERROR CONTINUE
CALL startlog("errores.log")
OPEN WINDOW inicio AT 1,1 WITH FORM "inicial"
INPUT BY NAME usuario,clave ATTRIBUTES (UNBUFFERED, WITHOUT DEFAULTS)
ON ACTION show_password
CALL toggle_password("formonly.clave")
# BEFORE INPUT
# DISPLAY "..\\IMAGENES\\logo.png" TO logo
AFTER INPUT
IF INT_FLAG THEN
ERROR "OPERACION CANCELADA"
EXIT INPUT
END IF
IF LENGTH(clave) > 12 THEN
CALL mbox_msg("INFO","LONGITUD DE LA CLAVE NO PUEDE EXCEDER 12 CARACTERES","information")
NEXT FIELD usuario
END IF
CONNECT TO "smarmotech" USER usuario USING clave
IF STATUS < 0 THEN
ERROR "USUARIO NO ES VALIDO"
CONTINUE INPUT
END IF
SELECT a.cod_perfil,a.printerdefecto,a.otro_printer ,a.printer_cheque,a.cambia_clave
INTO pperfil,pprinter1,pprinter2,ckprinter,cambia_c
FROM seg0001 a
WHERE a.usuario = usuario
IF STATUS != 0 THEN
ERROR "APLICACION ESTA REPORTANDO UN ERROR, COMUNIQUESE CON SU ADMINISTRADOR"
END IF
UPDATE seg0001 SET seg0001.fecha_ultimo_login = getdate(),
seg0001.clave = clave WHERE seg0001.usuario = usuario
LET cambia_c = UPSHIFT(cambia_c)
IF cambia_c = "SI" THEN
CALL mbox_msg("INFO","DEBE CAMBIAR LA CLAVE","information")
CALL cambia_clave(usuario,clave)
END IF
EXIT INPUT
END INPUT
CLOSE WINDOW inicio
RETURN pperfil,pprinter1,pprinter2,ckprinter,usuario,clave
END FUNCTION
FUNCTION cambia_clave(usuario,clave)
DEFINE usuario,clave,nclave,cclave,altera STRING
OPEN WINDOW cambia AT 1,1 WITH FORM "cambia"
DISPLAY usuario TO usuario
DISPLAY clave TO clave
INPUT BY NAME nclave,cclave
AFTER INPUT
IF INT_FLAG THEN
CALL mbox_msg( "ATENCION", "OPERACION CANCELADA", "stop")
EXIT INPUT
END IF
IF nclave IS NULL OR nclave = " " THEN
CALL mbox_msg( "ATENCION", "CLAVE NUEVA NO PUEDE ESTAR EN BLANCO", "stop")
NEXT FIELD nclave
END IF
IF cclave IS NULL OR cclave = " " THEN
CALL mbox_msg( "ATENCION", "CLAVE NUEVA NO PUEDE ESTAR EN BLANCO", "stop")
NEXT FIELD cclave
END IF
IF LENGTH(cclave) > 12 THEN
CALL mbox_msg("INFO","LA CLAVE NO PUEDE SER MAYOR DE 12 CARACTERES","information")
NEXT FIELD cclave
END IF
IF nclave <> cclave THEN
CALL mbox_msg( "ATENCION", "CLAVE NUEVA NO COINCIDE CON LA CONFIRMACION DE LA CLAVE", "stop")
NEXT FIELD nclave
ELSE
LET altera = "sp_password @old = '", clave CLIPPED,"', ",
"@new = '",nclave CLIPPED,"' ,",
"@loginame = '",usuario CLIPPED, "'"
PREPARE caltera FROM altera
EXECUTE caltera
IF STATUS = 0 THEN
UPDATE seg0001 SET cambia_clave = "NO" WHERE seg0001.usuario = usuario
CALL mbox_msg( "ATENCION", "CLAVE CAMBIADA SATISFACTORIAMENTE", "stop")
LET clave = nclave
ELSE
CALL mbox_msg( "ATENCION", "NO FUE POSIBLE EL CAMBIO DE LA CLAVE, TRATE NUEVA VEZ", "stop")
NEXT FIELD nclave
END IF
END IF
EXIT INPUT
END INPUT
CLOSE WINDOW cambia
IF INT_FLAG THEN
LET INT_FLAG = FALSE
RETURN
END IF
END FUNCTION
FUNCTION toggle_password(f)
DEFINE f STRING -- field name
DEFINE n om.domnode
DEFINE w ui.window
LET w = ui.window.getCurrent()
LET n = w.findNode ("FormField", f)
LET n = n.getFirstChild ()
CASE n.getAttribute("isPassword")
WHEN "0"
CALL n.setAttribute ("isPassword", "1")
WHEN "1"
CALL n.setAttribute ("isPassword", "0")
END CASE
END FUNCTION