| Autor | Manuel Baez |
| Fecha |
|
| Estado |
|
| Ambiente |
|
[Listado de correcciones, mejoras a ser implementadas]
[Listado de objetos, modulos, o aplicaciones afectadas]
BBDD BAPY@CREDITOPY (10.5.2.30:1521)
[Pre-requisitos para la implementacion]
[Pasos a paso para la correcta implementacion del release]
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES (ID_API_SP, CATEGORIA, DESCRIPCION, API_PATH_GROUP, API_PATH_VERSION, API_PATH_NAME, PROCEDURE_DATABASE, PROCEDURE_SCHEMA, PROCEDURE_NAME, SIMPLIFICAR_RESPONSE_S_N, FECHA_HORA_INS, USUARIO_INS, FECHA_HORA_UPD, USUARIO_UPD) VALUES(105, 'DIMO SECURITY', 'Verificar que el usuario tenga permisos para modificar los datos', 'security', 'v1', 'validarPermiso', 'BAPY', 'creditopy', 'PKG_DIMO_SECURITY.PR_VALIDAR_PERMISO_DATOS', 'S', sysdate, 'asosa', sysdate, 'asosa'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE) VALUES(105, 1, 'documento', 'TEXTO', 'S', 'N', NULL); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE) VALUES(105, 2, 'codigo', 'TEXTO', 'S', 'N', NULL); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N) VALUES(105, 1, 'validado', 'NUMERO', 'S'); INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT (ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N) VALUES(105, 2, 'descripcion', 'TEXTO', 'S'); INSERT INTO DIMO_SICOOP.T_WEBSERVICE (WEBSERVICE_ID, CODE, REFERENCE, URL, NAMESPACE, SERVICENAME, CONNECT_TIMEOUT, CALL_TIMEOUT, MAX_RETRY, ENABLED, LAST_USER, LAST_TIME, URL_ALT) VALUES(112, 'WS_VALID_CAMBIO_DATO', 'Web service para validar permisos', 'http://10.5.1.30:8083/ws-tarjetahabiente/prmservices/v2/sprunner/security/v1/validarPermiso', 'espacio', 'service', 60000, 60000, NULL, 1, 'asosa', sysdate, NULL); |
/* MODIFICACION DE LA CABECERA (ESPECIFICACION DEL PACKAGE) */
CREATE OR REPLACE PACKAGE CREDITOPY.PKG_DIMO_SECURITY IS
-- AUTOR: MANU BAEZ
-- Fecha Creación: 07/10/2024
PROCEDURE PR_VALIDAR_TOKEN_TARJ (
P_NUM_TARJ IN NUMBER,
P_AFINIDAD OUT NUMBER,
P_EMISOR OUT NUMBER,
P_VINCULADO OUT NUMBER,
P_DOCUMENTO OUT VARCHAR2,
P_VINC_DESC OUT VARCHAR2
);
-- AUTOR: ARTURO SOSA
-- Fecha Creación: 08/10/2024
PROCEDURE PR_VALIDAR_PERMISO_DATOS (
documento IN VARCHAR2,
codigo IN VARCHAR2,
validado OUT NUMBER,
descripcion OUT VARCHAR2
);
END PKG_DIMO_SECURITY;
/* MODIFICACION DEL BODY (PACKAGE BODY) */
CREATE OR REPLACE PACKAGE BODY CREDITOPY.PKG_DIMO_SECURITY IS
/* VALIDAR PERMISOS DEL USUARIO PARA CAMBIAR LOS DATOS DE SU CUENTA */
/*
AUTOR: MANUEL BAEZ
FECHA CREACION: 07/10/2024
DESCRIPCION:
FECHA MODIFICACION:
DESCRIPCION DE CAMBIOS:
*/
PROCEDURE PR_VALIDAR_TOKEN_TARJ (
P_NUM_TARJ IN NUMBER,
P_AFINIDAD OUT NUMBER,
P_EMISOR OUT NUMBER,
P_VINCULADO OUT NUMBER,
P_DOCUMENTO OUT VARCHAR2,
P_VINC_DESC OUT VARCHAR2
) IS
V_VALIDAR NUMBER;
P_TARJ_ENCRI VARCHAR2(100); -- Declarar la variable que faltaba
BEGIN
SELECT CREDITOPY.FC_PAN2CRIPTO(P_NUM_TARJ)
INTO P_TARJ_ENCRI
FROM DUAL;
-- Primera consulta corregida (remover la coma antes de INTO)
SELECT T.EMISOR,
T.DOCUMENTO,
T.GRUPO_AFINIDAD
INTO P_EMISOR, P_DOCUMENTO, P_AFINIDAD
FROM CREDITOPY.TARJETAS T
WHERE T.TARJETA = P_TARJ_ENCRI;
P_DOCUMENTO := TO_CHAR(TO_NUMBER(SUBSTR(P_DOCUMENTO, 4)));
BEGIN
-- Tercera consulta
SELECT ESTADO
INTO V_VALIDAR
FROM CREDITOPY.DIMO_TC_VINC_PROCESO dtvp
WHERE dtvp.DOCUMENTO = P_DOCUMENTO
AND dtvp.TARJETA = P_TARJ_ENCRI
AND ROWNUM = 1
ORDER BY dtvp.fecha_hora_ins DESC;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_VALIDAR := 3; -- Si no se encuentra ninguna fila, asigna el valor 3
END;
-- Estructura condicional IF en lugar de CASE
CASE V_VALIDAR
WHEN 0 THEN
P_VINCULADO := 0;
P_VINC_DESC := 'EL USUARIO NO COMPLETO EL INTENTO';
WHEN 1 THEN
P_VINCULADO := 1;
P_VINC_DESC := 'EL USUARIO VINCULO CORRECTAMENTE';
WHEN 2 THEN
P_VINCULADO := 0;
P_VINC_DESC := 'EL USUARIO FALLO EN RESPONDER LAS PREGUNTAS DE SEGURIDAD';
ELSE
P_VINCULADO := 0;
P_VINC_DESC := 'EL USUARIO AUN NO INTENTO VINCULAR';
END CASE;
END PR_VALIDAR_TOKEN_TARJ;
/* VALIDAR PERMISOS DEL USUARIO PARA CAMBIAR LOS DATOS DE SU CUENTA */
/*
AUTOR: ARTURO SOSA
FECHA CREACION: 08/10/2024
DESCRIPCION: Este procedimiento recibe el documento del usuario y debe controlar:
1. Que el documento pertenezca a un usario.
2. Si el usuario está validado por ATC (FLAG DIMO_SICOOP.D_CLIENTE@SICOOP => FLAG_VALIDADO_ATC).
3. Si tiene abierto la incidencia para cambio de ese dato ().
4. Si el usuario tiene permiso para cambiar ese dato (DIMO_SICOOP.D_FUNCIONALIDAD => ).
Solo si cumple esos requisitos, debe devolver validado = true
DEUDA TECNICA:El MACHEO DE CODIGO BACKEND e ID_TIPO_INCIDENCIA "está en duro" (no es critico, por que coinciden en ambos ambientes)
FECHA MODIFICACION:
DESCRIPCION DE CAMBIOS:
*/
PROCEDURE PR_VALIDAR_PERMISO_DATOS (
documento IN VARCHAR2,
codigo IN VARCHAR2,
validado OUT NUMBER,
descripcion OUT VARCHAR2
) IS
V_CLIENTE_ID NUMBER;
V_FLAG_VALIDADO_ATC NUMBER;
V_TIPO_INCIDENCIA_ID NUMBER;
V_CLIENTE_INCIDENCIA_ID NUMBER;
V_VALIDADO NUMBER;
BEGIN
--VALIDAR QUE EL DOCUMENTO SEA USUARIO Y ESTÉ VALIDADO POR ATC
BEGIN
SELECT dc.CLIENTE_ID, dc.FLAG_VALIDADO_ATC
INTO V_CLIENTE_ID, V_FLAG_VALIDADO_ATC
FROM DIMO_SICOOP.D_CLIENTE@SICOOP dc
WHERE dc.CI = documento;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_CLIENTE_ID := 0;
END;
--SI ES USUARIO DIMO
IF V_CLIENTE_ID <> 0 THEN
--SI ES USUARIO DIMO y SI ESTÄ HABILITADO POR ATC
IF V_FLAG_VALIDADO_ATC = 1 THEN
--VERIFICACION PARA OBTENER EL TIPO_INCIDENCIA_ID.
CASE codigo
WHEN 'PERFILMOD_CELLPHONE' THEN
V_TIPO_INCIDENCIA_ID := 20;
WHEN 'PERFILMOD_EMAIL' THEN
V_TIPO_INCIDENCIA_ID := 19;
WHEN 'PERFILMOD_DATA' THEN
V_TIPO_INCIDENCIA_ID := 18;
ELSE
V_TIPO_INCIDENCIA_ID := 0;
END CASE;
--SI ES UN TIPO DE INCIDENCIA VALIDO
IF V_TIPO_INCIDENCIA_ID <> 0 THEN
--OBTENER EL ID DE LA INCIDENICA Y EL ESTADO
BEGIN
SELECT dci.CLIENTE_INCIDENCIA_ID
INTO V_CLIENTE_INCIDENCIA_ID
FROM DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
WHERE dci.CLIENTE_ID = V_CLIENTE_ID AND dci.TIPO_INCIDENCIA_ID = V_TIPO_INCIDENCIA_ID AND dci.ESTADO = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_CLIENTE_INCIDENCIA_ID := 0;
END;
--SI TIENE LA INCIDENCIA
IF V_CLIENTE_INCIDENCIA_ID <> 0 THEN
--VERIFICAR SI TIENE EL PERMISO HABILITADO
BEGIN
SELECT dfd.ACTIVO INTO V_VALIDADO
FROM DIMO_SICOOP.D_FUNCIONALIDAD_DOC@SICOOP dfd
WHERE dfd.DOCUMENTO = documento AND dfd.ACTIVO = 1
AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = codigo);
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_VALIDADO := 0;
END;
IF V_VALIDADO = 1 THEN
validado := 1;
descripcion := 'El usuario tiene los permisos para cambiar el dato';
ELSE
validado := 0;
descripcion := 'El usuario no tiene permiso de ATC para cambiar el dato';
END IF;
--EL DOCUMENTO NO TIENE LA INCIDENCIA
ELSE
validado := 0;
descripcion := 'No existe la incidencia valida para ese documento';
END IF;
ELSE
validado := 0;
descripcion := 'No corresponde el tipo de incidencia';
END IF;
--NO ESTÁ HABILITADO POR ATC
ELSE
validado := 0;
descripcion := 'El usuario no está habilitado por ATC';
END IF;
--NO ES USUARIO DIMO
ELSE
validado := 0;
descripcion := 'El documento ingresado no pertenece a ningún usuario';
END IF;
END PR_VALIDAR_PERMISO_DATOS;
END PKG_DIMO_SECURITY; |
[Pasos a paso para la vuelta atras]