DimoSecurity BBDD- v1.0.1.0
Autor | Arturo Sosa |
Fecha |
|
Estado |
|
Ambiente |
|
REGISTRO DE CAMBIOS
- Agregar el servicio de validar permiso para cambio de datos.
- Agregar el servicio para cerrar el permiso cuando el usuario cambia sus datos y cerrar la incidencia.
OBJETOS AFECTADOS
BBDD BAPY@CREDITOPY (10.5.3.5:1521)
PRE-REQUISITOS
IMPLEMENTACION
- EJECUTAR EN LA BBDD DE BAPY@CREDITOPY (10.5.3.5:1521) EL SGTE QUERY:
INSERT PARA LAS VALIDACIONES
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 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(106, 'DIMO SECURITY', 'Sacar el permiso al usuario', 'security', 'v1', 'sacarPermiso', 'BAPY', 'creditopy', 'PKG_DIMO_SECURITY.PR_CERRAR_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(106, 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(106, 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(106, 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(106, 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); 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(113, 'WS_CERRAR_CAMBIO_DATO', 'Web service para validar permisos', 'http://10.5.1.30:8083/ws-tarjetahabiente/prmservices/v2/sprunner/security/v1/sacarPermiso', 'espacio', 'service', 60000, 60000, NULL, 1, 'asosa', sysdate, NULL);
CREAR EL PAQUETE
/* 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 ( CP_documento IN VARCHAR2, CP_codigo IN VARCHAR2, NP_validado OUT NUMBER, CP_descripcion OUT VARCHAR2 ); -- AUTOR: ARTURO SOSA -- Fecha Creación: 08/10/2024 PROCEDURE PR_CERRAR_PERMISO_DATOS ( CP_documento IN VARCHAR2, CP_codigo IN VARCHAR2, NP_validado OUT NUMBER, CP_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 ( CP_documento IN VARCHAR2, CP_codigo IN VARCHAR2, NP_validado OUT NUMBER, CP_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 = CP_documento; EXCEPTION WHEN OTHERS THEN V_CLIENTE_ID := 0; CP_descripcion := 'Error inesperado: ' || SQLERRM; 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 CP_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 AND ROWNUM = 1; EXCEPTION WHEN OTHERS 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 = CP_documento AND dfd.ACTIVO = 1 AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = CP_codigo); EXCEPTION WHEN OTHERS THEN V_VALIDADO := 0; /*BEGIN dbms_output.put_line('documento:'||CP_documento); dbms_output.put_line('codigo:'||CP_codigo); dbms_output.put_line(sqlerrm); END;*/ END; IF V_VALIDADO = 1 THEN NP_validado := 1; CP_descripcion := 'El usuario tiene los permisos para cambiar el dato'; ELSE NP_validado := 0; CP_descripcion := 'El usuario no tiene permiso de ATC para cambiar el dato'; END IF; --EL DOCUMENTO NO TIENE LA INCIDENCIA ELSE NP_validado := 0; CP_descripcion := 'No existe la incidencia valida para ese documento'; END IF; ELSE NP_validado := 0; CP_descripcion := 'No corresponde el tipo de incidencia'; END IF; --NO ESTÁ HABILITADO POR ATC ELSE NP_validado := 0; CP_descripcion := 'El usuario no está habilitado por ATC'; END IF; --NO ES USUARIO DIMO ELSE NP_validado := 0; CP_descripcion := 'El documento ingresado no pertenece a ningún usuario'; END IF; END PR_VALIDAR_PERMISO_DATOS; /* CERRAR LOS PERMISOS DEL USUARIO AL CAMBIAR LOS DATOS DE SU CUENTA */ /* AUTOR: ARTURO SOSA FECHA CREACION: 08/10/2024 DESCRIPCION: Este procedimiento debe: 1. Debe verificar que el usuario tenga habilitado ese permiso. 2. Sacarle el permiso al usuario de modificar sus datos. 3. Cerrar la incidencia. 4. Dejar el registro del detalle de la incidencia. 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_CERRAR_PERMISO_DATOS ( CP_documento IN VARCHAR2, CP_codigo IN VARCHAR2, NP_validado OUT NUMBER, CP_descripcion OUT VARCHAR2 ) IS V_VALIDADO NUMBER; V_VALIDADO_DESC VARCHAR2(100); V_TIPO_INCIDENCIA_ID NUMBER; V_CLIENTE_INCIDENCIA_ID NUMBER; V_ID_DETALLE NUMBER; BEGIN --VERIFICAR QUE EL USUARIO TENGA EL PERMISO PARA CAMBIAR EL DATO BEGIN V_VALIDADO_DESC := 'Sin validar'; CREDITOPY.PKG_DIMO_SECURITY.PR_VALIDAR_PERMISO_DATOS(CP_documento, CP_codigo, V_VALIDADO, V_VALIDADO_DESC); END; --USUARIO VALIDADO PARA CAMBIAR EL DATO IF V_VALIDADO = 1 THEN --SACARLE EL PERMISO AL USUARIO UPDATE DIMO_SICOOP.D_FUNCIONALIDAD_DOC@SICOOP dfd SET dfd.ACTIVO = 0 WHERE dfd.DOCUMENTO = CP_documento AND dfd.ACTIVO = 1 AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = CP_codigo); --CERRAR LA INCIDENCIA CASE CP_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; --RECUPERAR ID DE LA INCIDENCIA BEGIN SELECT dci.CLIENTE_INCIDENCIA_ID INTO V_CLIENTE_INCIDENCIA_ID FROM DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci WHERE dci.TIPO_INCIDENCIA_ID = V_TIPO_INCIDENCIA_ID AND dci.ESTADO = 1 AND dci.CLIENTE_ID = (SELECT dc.CLIENTE_ID FROM DIMO_SICOOP.D_CLIENTE@SICOOP dc WHERE dc.CI = CP_documento); EXCEPTION WHEN NO_DATA_FOUND THEN V_CLIENTE_INCIDENCIA_ID := 0; END; IF V_CLIENTE_INCIDENCIA_ID != 0 THEN --ACTUALIZAR CABECERA UPDATE DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci SET dci.ESTADO = 2 WHERE dci.CLIENTE_INCIDENCIA_ID = V_CLIENTE_INCIDENCIA_ID; SELECT DIMO_SICOOP.S_D_CLIENTE_INCIDENCIA_DETALLE.nextval@SICOOP INTO V_ID_DETALLE FROM dual; --INSERTAR DETALLE INSERT INTO DIMO_SICOOP.D_CLIENTE_INCIDENCIA_DETALLE@SICOOP (CLIENTE_INCIDENCIA_DETALLE_ID, CLIENTE_INCIDENCIA_ID, USUARIO_CRM, FECHA, CAMBIO_ESTADO, DESCRIPCION) VALUES(V_ID_DETALLE, V_CLIENTE_INCIDENCIA_ID, 'BACKEND', sysdate, '2', 'SE SACA EL PERMISO'); NP_validado := 1; CP_descripcion := 'Se Cerraron las incidencias y se saco el permiso al usuario'; ELSE NP_validado := 0; CP_descripcion := 'No se encontró una incidencia válida para el usuario'; END IF; --EL USUARIO NO PUEDE CAMBIAR EL DATO ELSE NP_validado := 0; CP_descripcion := V_VALIDADO_DESC; END IF; END PR_CERRAR_PERMISO_DATOS; END PKG_DIMO_SECURITY;
ROLLBACK
- NO POSEE ROLLBACK