Primer Commit
This commit is contained in:
72
DB/FUNCTIONS/FNC_AD_AUTH.sql
Normal file
72
DB/FUNCTIONS/FNC_AD_AUTH.sql
Normal 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;
|
||||
|
||||
/
|
||||
31
DB/FUNCTIONS/FNC_AD_USERNAME.sql
Normal file
31
DB/FUNCTIONS/FNC_AD_USERNAME.sql
Normal 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;
|
||||
|
||||
|
||||
/
|
||||
20
DB/FUNCTIONS/FNC_BRANCHES_QUERY.sql
Normal file
20
DB/FUNCTIONS/FNC_BRANCHES_QUERY.sql
Normal 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;
|
||||
|
||||
/
|
||||
31
DB/FUNCTIONS/FNC_GET_JENKINS_LOG_URL.sql
Normal file
31
DB/FUNCTIONS/FNC_GET_JENKINS_LOG_URL.sql
Normal 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;
|
||||
|
||||
|
||||
/
|
||||
12
DB/FUNCTIONS/FNC_HEALTHCHECK.sql
Normal file
12
DB/FUNCTIONS/FNC_HEALTHCHECK.sql
Normal 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;
|
||||
|
||||
/
|
||||
94
DB/FUNCTIONS/FNC_IDM_GROUPS.sql
Normal file
94
DB/FUNCTIONS/FNC_IDM_GROUPS.sql
Normal 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;
|
||||
|
||||
/
|
||||
136
DB/FUNCTIONS/FNC_INTERNAL_PROFILE.sql
Normal file
136
DB/FUNCTIONS/FNC_INTERNAL_PROFILE.sql
Normal 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;
|
||||
|
||||
/
|
||||
40
DB/FUNCTIONS/FNC_ROLE_VALIDATION.sql
Normal file
40
DB/FUNCTIONS/FNC_ROLE_VALIDATION.sql
Normal 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;
|
||||
|
||||
/
|
||||
66
DB/FUNCTIONS/PARAM_VALIDATOR.sql
Normal file
66
DB/FUNCTIONS/PARAM_VALIDATOR.sql
Normal 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;
|
||||
|
||||
/
|
||||
30
DB/FUNCTIONS/SCHEDULE_NEXT_DATE.sql
Normal file
30
DB/FUNCTIONS/SCHEDULE_NEXT_DATE.sql
Normal 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;
|
||||
|
||||
|
||||
/
|
||||
Reference in New Issue
Block a user