git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@50874 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
538
Data/BulkLoad/EFT/Nominations/plsql/saco_licensing.bdy
Normal file
538
Data/BulkLoad/EFT/Nominations/plsql/saco_licensing.bdy
Normal file
@@ -0,0 +1,538 @@
|
||||
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('<h1>' || v_screen_name || '</h1>');
|
||||
--
|
||||
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('<SCRIPT><!--');
|
||||
htp.p('frmLogon = open("saco_licensing.show_license_form","winLogon","scrollbars=no,resizable=yes,width=400,height=300");');
|
||||
htp.p('if (frmLogon.opener == null) {');
|
||||
htp.p('frmLogon.opener = self;');
|
||||
htp.p('};');
|
||||
htp.p('//-->');
|
||||
htp.p('</SCRIPT>');
|
||||
htp.p('<NOSCRIPT>');
|
||||
display_header('Enter License Key');
|
||||
htp.bodyopen(cattributes => 'onLoad="return License_OnLoad()"');
|
||||
show_license_form(TRUE);
|
||||
display_footer;
|
||||
htp.p('</NOSCRIPT>');
|
||||
--
|
||||
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('<SCRIPT><!--');
|
||||
htp.p('function License_OnLoad (ctl, index) {');
|
||||
htp.p('document.LicenseForm.p_license_key.focus();');
|
||||
htp.p('}');
|
||||
htp.p('//-->');
|
||||
htp.p('</SCRIPT>');
|
||||
--
|
||||
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('<I>' || 'License Key:' || ' </I>');
|
||||
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('<!--
|
||||
//opener.location.reload(true);
|
||||
opener.location = "caco_home";
|
||||
//-->');
|
||||
htp.script('<!--
|
||||
self.close();
|
||||
//-->');
|
||||
--
|
||||
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;
|
||||
/
|
||||
|
||||
Reference in New Issue
Block a user