Primer Commit

This commit is contained in:
2023-06-08 11:55:59 -03:00
commit a269361962
432 changed files with 203156 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
--------------------------------------------------------
-- DDL for Function FNC_AD_AUTH
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_AD_AUTH" (
p_username IN VARCHAR2,
p_password IN VARCHAR2
) RETURN BOOLEAN IS
l_ldap_host VARCHAR2(500) := 'ldaplc.lc.gc.local';
l_ldap_port VARCHAR2(500) := '389';
l_ldap_base VARCHAR2(500) := 'DC=lc,DC=gc,DC=local';
l_dn_user VARCHAR2(500);
l_retval PLS_INTEGER;
l_session dbms_ldap.session;
v_boolean BOOLEAN;
log_program_name VARCHAR2(50) := 'pkg_sicd_commons.fnc_ad_auth';
BEGIN
IF p_username IS NULL OR p_password IS NULL THEN
raise_application_error(-20000, 'Debe especificar sus credenciales.');
END IF;
dbms_ldap.use_exception := true;
SELECT
dn
INTO l_dn_user
FROM
TABLE ( apex_ldap.search(
p_username => 'CN=LCU SICD LDAP,OU=Usuarios de Servicios,DC=lc,DC=gc,DC=local',
p_pass => 'martesSICDsegura10',
p_host => 'ldaplc.lc.gc.local',
p_search_base => 'DC=lc,DC=gc,DC=local',
p_search_filter => '&(objectClass=person)(userPrincipalName='||p_username||'@lc.gc.local)(memberOf=CN=LCGU_SICD_Users,OU=Grupos,DC=lc,DC=gc,DC=local)',
p_attribute_names => 'CN') );
IF length(l_dn_user) > 1 THEN
l_session := DBMS_LDAP.init(l_ldap_host,l_ldap_port);
l_retval := dbms_ldap.simple_bind_s(ld => l_session, dn => l_dn_user, passwd => p_password);
l_retval := dbms_ldap.unbind_s(ld => l_session);
v_boolean := true;
RETURN v_boolean;
END IF;
v_boolean := false;
RETURN v_boolean;
EXCEPTION
WHEN OTHERS THEN
apex_util.set_custom_auth_status(p_status => 'Usuario o Contraseña incorrectos');
IF length(l_session) > 1 THEN
l_retval := dbms_ldap.unbind_s(ld => l_session);
END IF;
------------------------------------------------------------------
log_collector(
pi_program_name => log_program_name,
pi_log_level => 2, --- WARNING
pi_log_message => 'ERROR: ' || sqlerrm
);
------------------------------------------------------------------
v_boolean := false;
RETURN v_boolean;
END;
/

View File

@@ -0,0 +1,31 @@
--------------------------------------------------------
-- DDL for Function FNC_AD_USERNAME
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_AD_USERNAME" (
p_username IN VARCHAR2
) RETURN VARCHAR2 AS
v_username VARCHAR2(2000);
BEGIN
SELECT val usuario
INTO v_username
FROM TABLE ( apex_ldap.search(
p_username => 'CN=LCU SICD LDAP,OU=Usuarios de Servicios,DC=lc,DC=gc,DC=local',
p_pass => 'martesSICDsegura10',
p_host => 'ldaplc.lc.gc.local',
p_search_base => 'DC=lc,DC=gc,DC=local',
p_search_filter => '&(objectClass=person)(cn='||p_username||')(memberOf=CN=LCGU_SICD_Users,OU=Grupos,DC=lc,DC=gc,DC=local)',
p_attribute_names => 'sAMAccountName'
) );
RETURN v_username;
EXCEPTION
WHEN OTHERS THEN
v_username := NULL;
RETURN v_username;
END;
/

View File

@@ -0,0 +1,20 @@
--------------------------------------------------------
-- DDL for Function FNC_BRANCHES_QUERY
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_BRANCHES_QUERY" (
pi_branches_jsonc IN VARCHAR2
) RETURN CLOB AS
v_query CLOB;
v_select VARCHAR2(4000);
BEGIN
v_query := q'~SELECT branch_name, branch_name as id_branch FROM JSON_TABLE(JSON(:~'|| pi_branches_jsonc || q'~), '$.branch[*]'
COLUMNS (
branch_name VARCHAR2(4000) PATH '$.name'
));~';
RETURN v_query;
END;
/

View File

@@ -0,0 +1,31 @@
--------------------------------------------------------
-- DDL for Function FNC_GET_JENKINS_LOG_URL
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_GET_JENKINS_LOG_URL" (
--pi_id_request IN NUMBER,
pi_id_prc_exec_deploy IN VARCHAR2
) RETURN VARCHAR2 AS
url VARCHAR2(4000);
BEGIN
--IF pi_id_request JENKINS_PRIMARY_URL
url := pkg_sicd_commons.get_parameter_value('JENKINS_PRIMARY_PUBLIC_URL')
|| pkg_sicd_commons.get_parameter_value('JENKINS_LOG_JOB')
|| replace(substr(pi_id_prc_exec_deploy, 9), '-', '/')
|| pkg_sicd_commons.get_parameter_value('JENKINS_LOG_CONSOLE');
--ELSE
/* url := pkg_sicd_commons.get_parameter_value('JENKINS_SECONDARY_URL')
|| pkg_sicd_commons.get_parameter_value('JENKINS_LOG_JOB')
|| replace(substr(ed.id_dep_proc, 9), '-', '/')
|| pkg_sicd_commons.get_parameter_value('JENKINS_LOG_CONSOLE')
;
*/
RETURN url;
END fnc_get_jenkins_log_url;
/

View File

@@ -0,0 +1,12 @@
--------------------------------------------------------
-- DDL for Function FNC_HEALTHCHECK
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_HEALTHCHECK" RETURN VARCHAR2 IS
v_boolean VARCHAR2(10);
BEGIN
v_boolean := 'ok';
RETURN v_boolean;
END;
/

View File

@@ -0,0 +1,94 @@
--------------------------------------------------------
-- DDL for Function FNC_IDM_GROUPS
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_IDM_GROUPS" (
pi_group_list IN CLOB
) RETURN CLOB AS
v_input_string VARCHAR2(4000) := pi_group_list;
v_output_json CLOB := '';
v_domain_table sys.odcivarchar2list;
v_json_obj json;
v_domain_name VARCHAR2(100) := '';
v_domain_aux VARCHAR2(100) := '';
v_group_name VARCHAR2(100) := '';
v_element NUMBER := 1;
BEGIN
IF pi_group_list IS NULL THEN
RETURN NULL;
ELSE
-- Parse comma-separated string into a table
v_domain_table := sys.odcivarchar2list();
v_domain_table.extend(regexp_count(
v_input_string,
','
) + 1);
v_output_json := '{';
FOR i IN 1..v_domain_table.count LOOP
v_domain_table(i) := regexp_substr(
v_input_string,
'[^,]+',
1,
i
);
v_domain_name := replace(
nvl(
regexp_substr(
v_domain_table(i),
'(.+)(\/)',
1,
1
),
'others'
),
'/',
''
);
v_group_name := regexp_substr(
v_domain_table(i),
'(.+\/)?(.+)',
1,
1,
NULL,
2
);
IF v_domain_aux IS NULL THEN
v_output_json := v_output_json
|| '"'
|| v_domain_name
|| '":[';
v_domain_aux := v_domain_name;
ELSIF v_domain_aux != v_domain_name THEN
v_output_json := v_output_json
|| '],"'
|| v_domain_name
|| '":[';
v_domain_aux := v_domain_name;
v_element := 1;
END IF;
v_output_json := v_output_json
|| (
CASE
WHEN v_element != 1 THEN
','
ELSE ''
END
)
|| '"'
|| v_group_name
|| '"';
v_element := v_element + 1;
END LOOP;
v_output_json := v_output_json || ']}';
RETURN v_output_json;
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
/

View File

@@ -0,0 +1,136 @@
--------------------------------------------------------
-- DDL for Function FNC_INTERNAL_PROFILE
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_INTERNAL_PROFILE" (
pi_username IN VARCHAR2,
pi_email IN VARCHAR2,
pi_group_list IN CLOB
) RETURN CLOB AS
v_input_string VARCHAR2(4000) := pi_group_list;
v_output_json CLOB := '';
v_json_aux json;
v_domain_table sys.odcivarchar2list;
v_domain_name VARCHAR2(100) := '';
v_group_name VARCHAR2(100) := '';
v_hash_aux VARCHAR2(100);
v_user_id NUMBER := 0;
v_user VARCHAR2(500) := '';
v_context VARCHAR2(500) := '';
BEGIN
-- Documento JSON Principal de Usuario --
v_hash_aux := rawtohex(dbms_crypto.hash(
utl_raw.cast_to_raw(pi_username),
2
));
v_user_id := abs(TO_NUMBER(substr(
rawtohex(v_hash_aux),
1,
12
),
'XXXXXXXXXXXX'));
--v_user_id := v_user_id MOD 100000000;
v_user := regexp_substr(
pi_username,
'(.+)\s+(.+)?',
1,
1,
NULL,
1
);
v_context := regexp_substr(
pi_username,
'(.+)\s+(.+)?',
1,
1,
NULL,
2
);
v_output_json := '{"user":"'
|| v_user
|| '","userId":'
|| to_char(v_user_id)
|| ',"context":"'
|| v_context
|| '","email":"'
|| pi_email
|| '","idm":[';
-- Documento JSON Principal de Usuario --
-- Evalua que existan los grupos de LDAP --
IF pi_group_list IS NULL THEN
v_output_json := v_output_json || ']';
ELSE
v_domain_table := sys.odcivarchar2list();
v_domain_table.extend(regexp_count(
v_input_string,
','
) + 1);
-- Iteracion por los grupos del IDM --
FOR i IN 1..v_domain_table.count LOOP
v_domain_table(i) := regexp_substr(
v_input_string,
'[^,]+',
1,
i
);
v_domain_name := replace(
nvl(
regexp_substr(
v_domain_table(i),
'(.+)(\/)',
1,
1
),
'others'
),
'/',
''
);
v_group_name := regexp_substr(
v_domain_table(i),
'(.+\/)?(.+)',
1,
1,
NULL,
2
);
v_output_json := v_output_json
|| (
CASE
WHEN i != 1 THEN
','
ELSE ''
END
)
|| '{"domain":"'
|| v_domain_name
|| '","group":"'
|| v_group_name
|| '"}';
END LOOP;
v_output_json := v_output_json || ']';
-- Iteracion por los grupos del IDM --
END IF;
v_output_json := v_output_json || '}';
-- Evalua que existan los grupos de LDAP --
P_MANAGE_USERS(v_output_json);
RETURN v_output_json;
EXCEPTION
WHEN OTHERS THEN
RETURN 'ERR - '
|| sqlerrm
|| v_output_json;
END;
/

View File

@@ -0,0 +1,40 @@
--------------------------------------------------------
-- DDL for Function FNC_ROLE_VALIDATION
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_ROLE_VALIDATION" (
pi_js_internal_profile IN CLOB,
pi_role_validation IN VARCHAR2
) RETURN BOOLEAN AS
v_role VARCHAR2(100);
BEGIN
SELECT roleName
INTO v_role
FROM
JSON_TABLE (
JSON(
pi_js_internal_profile
), '$.roles[*]'
COLUMNS (
roleId VARCHAR2 ( 100 ) PATH '$.roleId',
roleName VARCHAR2 ( 100 ) PATH '$.roleName'
)
)
j
WHERE upper(
j.roleName
) = upper(
pi_role_validation
);
RETURN true;
EXCEPTION
WHEN no_data_found THEN
RETURN false;
WHEN OTHERS THEN
RETURN true;
END;
/

View File

@@ -0,0 +1,66 @@
--------------------------------------------------------
-- DDL for Function PARAM_VALIDATOR
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."PARAM_VALIDATOR" (pi_value IN CLOB, pi_type IN NUMBER)
RETURN BOOLEAN
IS
v_num NUMBER;
v_date DATE;
v_json json_object_t;
v_format VARCHAR2(100);
BEGIN
SELECT parameter_type_format
INTO v_format
FROM system_parameter_type spt
WHERE id_parameter_type = pi_type;
-- Intenta convertir el valor a un número
CASE pi_type
WHEN 1 THEN
--- NUMERO ---
BEGIN
v_num := TO_NUMBER(pi_value);
RETURN true;
EXCEPTION
WHEN OTHERS THEN
RETURN false;
END;
WHEN 2 THEN
--- FECHA Y HORA ---
BEGIN
v_date := TO_DATE(pi_value, 'YYYY-MM-DD');
RETURN true;
EXCEPTION
WHEN OTHERS THEN
RETURN false;
END;
WHEN 3 THEN
--- JSON ---
BEGIN
v_json := json_object_t.parse(pi_value);
RETURN true;
EXCEPTION
WHEN OTHERS THEN
RETURN false;
END;
WHEN 4 THEN
--- LISTA DE VALORES ---
IF regexp_like(pi_value, '^''[[:alnum:]]+''(,''[[:alnum:]]+'')*$') THEN
RETURN true;
ELSE
RETURN false;
END IF;
WHEN 0 THEN
--- TEXTO SIN FORMATO ---
RETURN true;
END CASE;
EXCEPTION
WHEN OTHERS THEN
RETURN false;
END;
/

View File

@@ -0,0 +1,30 @@
--------------------------------------------------------
-- DDL for Function SCHEDULE_NEXT_DATE
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."SCHEDULE_NEXT_DATE" (
pi_job_name IN VARCHAR2
) RETURN TIMESTAMP AS
v_next_run_date TIMESTAMP;
v_intervalo_repeticion VARCHAR2(1000);
BEGIN
SELECT next_run_date
INTO v_next_run_date
FROM user_scheduler_jobs aj
WHERE aj.job_name = pi_job_name;
RETURN v_next_run_date;
EXCEPTION
WHEN OTHERS THEN
v_next_run_date := null;
RETURN v_next_run_date;
END;
/