CREATE OR REPLACE PACKAGE BODY EFT_NOM.saco_licensing IS -- -- Private Declaration -- FUNCTION get_license RETURN VARCHAR2 IS -- CURSOR cur_lsng IS SELECT lsng.license_key FROM licensing lsng; -- v_return licensing.license_key%TYPE; -- BEGIN -- OPEN cur_lsng; FETCH cur_lsng INTO v_return; -- IF cur_lsng%NOTFOUND THEN -- v_return := NULL; -- END IF; -- CLOSE cur_lsng; -- RETURN v_return; -- END get_license; -- FUNCTION return_key RETURN VARCHAR2 IS -- v_return VARCHAR2(2000); v_key VARCHAR2(2000); -- BEGIN -- v_return := 'ENCKEY1234567890'; -- v_return := NULL; v_return := v_return || CHR(87); v_key := v_key || CHR(83); v_key := v_key || CHR(97); v_return := v_return || CHR(115); v_return := v_return || CHR(73); v_return := v_return || CHR(99); v_key := v_key || CHR(112); v_return := v_return || CHR(97); v_return := v_return || CHR(97); v_return := v_return || CHR(107); v_key := v_key || CHR(255); v_return := v_return || CHR(63); -- RETURN v_return; -- END return_key; -- FUNCTION decrypt (p_license_key IN licensing.license_key%TYPE) RETURN VARCHAR2 IS -- v_return LONG := NULL; -- BEGIN -- IF p_license_key IS NOT NULL THEN -- -- Within it's own program unit to ignore bad conversion and decryption -- BEGIN -- dbms_obfuscation_toolkit.desdecrypt(input_string => utl_raw.cast_to_varchar2(hextoraw(p_license_key)) ,key_string => return_key ,decrypted_string => v_return); -- IF INSTR(v_return, CHR(0)) > 0 THEN -- v_return := SUBSTR(v_return, 1, INSTR(v_return, CHR(0))-1); -- END IF; -- EXCEPTION WHEN OTHERS THEN NULL; END; -- END IF; -- RETURN v_return; -- END decrypt; -- FUNCTION get_item (p_license_key IN VARCHAR2 ,p_item IN VARCHAR2) RETURN VARCHAR2 IS -- v_return VARCHAR2(1000) := NULL; v_delimiter VARCHAR2(1) := '!'; -- BEGIN -- IF INSTR(UPPER(p_license_key),UPPER(p_item),1) > 0 THEN -- v_return := SUBSTR(p_license_key ,INSTR(UPPER(p_license_key),UPPER(p_item))+LENGTH(p_item)+1 ,INSTR(p_license_key,v_delimiter,INSTR(UPPER(p_license_key),UPPER(p_item))+LENGTH(p_item)+1)-(INSTR(UPPER(p_license_key),UPPER(p_item))+LENGTH(p_item)+1)); -- END IF; -- RETURN v_return; -- END get_item; -- PROCEDURE display_header(v_screen_name IN VARCHAR2, v_body_atts IN VARCHAR2 DEFAULT NULL) IS BEGIN -- htp.htmlopen; htp.headopen; -- htp.meta('Content-Type', 'SACO_LICENSING', 'text/html'); htp.meta('Expires', '', '0'); htp.meta('Pragma', '', 'no-cache'); -- htp.linkrel('stylesheet', 'caco_system.css?p_type=logon'); -- htp.headclose; -- htp.bodyopen(cattributes => v_body_atts); -- htp.title(v_screen_name); -- htp.p('

' || v_screen_name || '

'); -- htp.br; htp.br; -- END display_header; -- PROCEDURE display_footer IS BEGIN -- htp.bodyclose; htp.htmlclose; -- END display_footer; -- FUNCTION check_valid RETURN BOOLEAN IS -- v_return BOOLEAN := FALSE; -- BEGIN -- IF get_item(decrypt(get_license),'COMPANY NAME') IS NOT NULL THEN -- v_return := TRUE; -- END IF; -- RETURN v_return; -- END check_valid; -- FUNCTION check_expired RETURN BOOLEAN IS -- v_return BOOLEAN := FALSE; -- BEGIN -- -- Used NVL as the license key may NOT expire -- IF NVL(get_item(decrypt(get_license),'EXPIRY DATE'),TRUNC(SYSDATE)) >= TRUNC(SYSDATE) THEN -- v_return := TRUE; -- END IF; -- RETURN v_return; -- END check_expired; -- FUNCTION check_machine RETURN BOOLEAN IS -- v_return BOOLEAN := FALSE; -- BEGIN -- IF get_item(decrypt(get_license),'SERVER NAME') IS NOT NULL THEN -- IF INSTR(UPPER(get_item(decrypt(get_license),'SERVER NAME'))||',' ,UPPER(owa_util.get_cgi_env('SERVER_NAME'))||',') > 0 THEN -- v_return := TRUE; -- END IF; -- ELSE -- v_return := TRUE; -- END IF; -- RETURN v_return; -- END check_machine; -- FUNCTION get_sessions RETURN NUMBER IS -- v_return NUMBER; -- BEGIN -- -- Remove any expired sessions -- caco_security.remove_expired_sessions; -- -- Looping but only once! -- FOR cur_sess_rec IN ( SELECT COUNT(sess.client_id) AS sessions FROM sessions sess ) LOOP -- v_return := cur_sess_rec.sessions; -- END LOOP; -- RETURN v_return; -- END get_sessions; -- FUNCTION get_syus_count RETURN NUMBER IS -- v_return NUMBER; -- BEGIN -- -- Looping but only once! -- FOR cur_syus_rec IN ( SELECT COUNT(syus.syus_id) AS syus FROM system_users syus WHERE syus.syus_id <> caco_utilities.get_system_user ) LOOP -- v_return := cur_syus_rec.syus; -- END LOOP; -- RETURN v_return; -- END get_syus_count; -- -- Public Declaration -- PROCEDURE call_license_form IS -- -- BEGIN -- htp.p(''); htp.p(''); -- END call_license_form; -- PROCEDURE show_license_form(p_embedded IN BOOLEAN ,p_license_key IN VARCHAR2 DEFAULT NULL) IS -- CURSOR cur_lsng IS SELECT NULL FROM licensing lsng FOR UPDATE OF lsng.license_key NOWAIT; -- v_dummy VARCHAR2(10); -- BEGIN -- IF p_license_key IS NULL THEN -- IF NOT p_embedded THEN -- display_header('Enter License Key'); htp.bodyopen(cattributes => 'onLoad="return License_OnLoad()"'); -- END IF; -- -- Output JavaScript for handling onLoad event for setting -- the focus to the license key field upon invocation. -- htp.p(''); -- htp.header(4 ,'Please enter your license key.'); -- htp.formopen(curl => 'saco_licensing.show_license_form' ,ctarget => '' ,cattributes => 'NAME="LicenseForm"'); -- htp.tableopen; htp.tablerowopen; htp.tabledata('' || 'License Key:' || ' '); htp.tabledata(htf.formtext(cname => 'p_license_key',csize => 40)); htp.tablerowclose; htp.tabledata(NULL); htp.tabledata(htf.paragraph(calign => 'Right')||htf.formsubmit(cvalue => 'Validate')); htp.tablerowclose; htp.tableclose; htp.formclose; -- IF NOT p_embedded THEN -- display_footer; -- END IF; -- ELSE -- IF NOT p_embedded THEN -- display_header('Process License Key'); htp.bodyopen(cattributes => 'onLoad="return License_OnLoad()"'); -- END IF; -- OPEN cur_lsng; FETCH cur_lsng INTO v_dummy; -- IF cur_lsng%NOTFOUND THEN -- INSERT INTO licensing (license_key) VALUES (p_license_key); -- ELSE -- UPDATE licensing lsng SET lsng.license_key = p_license_key WHERE CURRENT OF cur_lsng; -- END IF; -- CLOSE cur_lsng; -- IF NOT check_license THEN -- -- License key is invalid, requires reentry -- htp.bodyopen(cattributes => 'onLoad="return License_OnLoad()"'); htp.header(2 ,'License key is invalid'); htp.hr; -- show_license_form(TRUE); -- ELSE -- -- License key is valid, close pop-up -- htp.bodyopen; htp.header(2 ,wsgl.msggettext(606 ,wsglm.sec606_logon_success)); htp.header(4 ,wsgl.msggettext(607 ,wsglm.sec607_navigate_back)); htp.script(''); htp.script(''); -- END IF; -- IF NOT p_embedded THEN -- display_footer; -- END IF; -- END IF; -- END show_license_form; -- FUNCTION status_line (p_css_class IN VARCHAR2 DEFAULT 'splashtagline') RETURN VARCHAR2 IS -- v_return VARCHAR2(1000); -- BEGIN -- v_return := v_return || htf.tableopen(cattributes => 'WIDTH=100% class="'||p_css_class||'" cellspacing="1" cellpadding="0"'); v_return := v_return || htf.tablerowopen; -- IF NOT check_valid THEN -- -- Key entered is not valid -- v_return := v_return || htf.tabledata('Invalid License Key'); -- ELSE -- IF NOT check_expired THEN -- v_return := v_return || htf.tabledata('License key has expired'); -- ELSE -- IF NOT check_machine THEN -- v_return := v_return || htf.tabledata('Machine name is invalid'); -- ELSE -- IF get_item(decrypt(get_license),'Company Name') IS NOT NULL THEN -- v_return := v_return || htf.tabledata('Licensed to: ' || get_item(decrypt(get_license),'Company Name')); -- END IF; -- IF get_item(decrypt(get_license),'Serial Number') IS NOT NULL THEN -- v_return := v_return || htf.tabledata('Serial Number: '|| get_item(decrypt(get_license),'Serial Number')); -- END IF; -- IF get_item(decrypt(get_license),'Expiry Date') IS NOT NULL THEN -- v_return := v_return || htf.tabledata('License Expires: '|| get_item(decrypt(get_license),'Expiry Date')); -- END IF; -- IF get_item(decrypt(get_license),'Concurrent Users') IS NOT NULL THEN -- v_return := v_return || htf.tabledata('Concurrent Users: '||get_sessions||' of '|| get_item(decrypt(get_license),'Concurrent Users')); -- END IF; -- IF get_item(decrypt(get_license),'Licensed Users') IS NOT NULL THEN -- v_return := v_return || htf.tabledata('Licensed Users: '||get_syus_count||' of '|| get_item(decrypt(get_license),'Licensed Users')); -- END IF; -- END IF; -- END IF; -- END IF; -- v_return := v_return || htf.tablerowclose; v_return := v_return || htf.tableclose; -- RETURN v_return; -- END status_line; -- FUNCTION check_license RETURN BOOLEAN IS -- v_return BOOLEAN := FALSE; -- BEGIN -- IF check_valid AND check_expired AND check_machine THEN -- v_return := TRUE; -- END IF; -- RETURN v_return; -- END check_license; -- FUNCTION check_users RETURN BOOLEAN IS -- v_return BOOLEAN := FALSE; -- BEGIN -- IF get_item(decrypt(get_license),'Concurrent Users') IS NOT NULL THEN -- IF get_sessions < get_item(decrypt(get_license),'Concurrent Users') THEN -- v_return := TRUE; -- END IF; -- ELSE -- v_return := TRUE; -- END IF; -- RETURN v_return; -- END check_users; -- FUNCTION create_syus_check RETURN BOOLEAN IS -- v_return BOOLEAN := FALSE; -- BEGIN -- IF get_item(decrypt(get_license),'Licensed Users') IS NOT NULL THEN -- IF get_syus_count < get_item(decrypt(get_license),'Licensed Users') THEN -- v_return := TRUE; -- END IF; -- ELSE -- v_return := TRUE; -- END IF; -- RETURN v_return; -- END create_syus_check; -- BEGIN -- -- Initialization -- NULL; -- END saco_licensing; /