/*-------------------------------------------------------------------------- * * BJCA Adaptive Javascript, Version SAB(Support All Browsers :)) * This script support bjca client version 2.0 and later * Author:BJCA-zys *--------------------------------------------------------------------------*/ /* globals var */ var $_$softCertListID_BJCAWebSign = ""; // Soft CertListID, Set by SetUserCertList var $_$hardCertListID_BJCAWebSign = ""; // USBKeyCertListID, Set by SetUserCertList var $_$allCertListID_BJCAWebSign = ""; // All CertListID, Set by SetUserCertList var $_$loginCertID_BJCAWebSign = ""; // logined CertID, Set by SetAutoLogoutParameter var $_$logoutFunc_BJCAWebSign = null; // logout Function, Set by SetAutoLogoutParameter var $_$onUsbKeyChangeCallBackFunc_BJCAWebSign = null; //custom onUsbkeyChange callback function var $_$XTXAlert_BJCAWebSign = null; // alert custom function var $_$WebSocketObj_BJCAWebSign = null; // WebSocket class Object var $_$CurrentObj_BJCAWebSign = null; // Current use class Object // const var var CERT_TYPE_HARD = 1; var CERT_TYPE_SOFT = 2; var CERT_TYPE_ALL = 3; // set auto logout parameters function SetAutoLogoutParameter_BJCAWebSign(strCertID, logoutFunc) { $_$loginCertID_BJCAWebSign = strCertID; $_$logoutFunc_BJCAWebSign = logoutFunc; return; } function SetLogoutFunction_BJCAWebSign(logoutFunc) { $_$logoutFunc_BJCAWebSign = logoutFunc; } /* *删除数组指定下标或指定对象 */ Array.prototype.remove = function(obj) { for ( var i = 0; i < this.length; i++) { var temp = this[i]; if (!isNaN(obj)) { temp = i; } if (temp == obj) { for ( var j = i; j < this.length; j++) { this[j] = this[j + 1]; } this.length = this.length - 1; } } } function $popDropListBoxAll_BJCAWebSign(strListID) { var objListID = eval(strListID); if (objListID == undefined) { return; } var i, n = objListID.length; for(i = 0; i < n; i++) { objListID.remove(0); } objListID = null; } function $pushOneDropListBox_BJCAWebSign(userListArray, strListID) { var objListID = eval(strListID); if (objListID == undefined) { return; } var i; for (i = 0; i < userListArray.length; i++) { var certObj = userListArray[i]; var objItem = new Option(certObj.certName, certObj.certID); objListID.options.add(objItem); } objListID = null; return; } function $pushAllDropListBox_BJCAWebSign(certUserListObj_BJCAWebSign) { if ($_$hardCertListID_BJCAWebSign != "") { $popDropListBoxAll_BJCAWebSign($_$hardCertListID_BJCAWebSign); } if ($_$softCertListID_BJCAWebSign != "") { $popDropListBoxAll_BJCAWebSign($_$softCertListID_BJCAWebSign); } if ($_$allCertListID_BJCAWebSign != "") { $popDropListBoxAll_BJCAWebSign($_$allCertListID_BJCAWebSign); } var strUserList = certUserListObj_BJCAWebSign.retVal; var allListArray = [] while (true) { var i = strUserList.indexOf("&&&"); if (i <= 0 ) { break; } var strOneUser = strUserList.substring(0, i); var strName = strOneUser.substring(0, strOneUser.indexOf("||")); var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length); allListArray.push({certName:strName, certID:strCertID}); if ($_$hardCertListID_BJCAWebSign != "") { GetDeviceType_BJCAWebSign(strCertID, function(retObj) { if (retObj.retVal == "HARD") { $pushOneDropListBox_BJCAWebSign([retObj.ctx], $_$hardCertListID_BJCAWebSign); } }, {certName:strName, certID:strCertID}); } if ($_$softCertListID_BJCAWebSign != "") { GetDeviceType_BJCAWebSign(strCertID, function(retObj) { if (retObj.retVal == "SOFT") { $pushOneDropListBox_BJCAWebSign([retObj.ctx], $_$softCertListID_BJCAWebSign); } }, {certName:strName, certID:strCertID}); } var len = strUserList.length; strUserList = strUserList.substring(i + 3,len); } if ($_$allCertListID_BJCAWebSign != "") { $pushOneDropListBox_BJCAWebSign(allListArray, $_$allCertListID_BJCAWebSign); } } function $myAutoLogoutCallBack_BJCAWebSign(retObj) { if (retObj.retVal.indexOf($_$loginCertID) <= 0) { $_$logoutFunc_BJCAWebSign(); } } //usbkey change default callback function function $OnUsbKeyChange_BJCAWebSign() { GetUserList_BJCAWebSign($pushAllDropListBox_BJCAWebSign); if (typeof $_$onUsbKeyChangeCallBackFunc_BJCAWebSign == 'function') { $_$onUsbKeyChangeCallBackFunc_BJCAWebSign(); } if ($_$loginCertID_BJCAWebSign != "" && typeof $_$logoutFunc_BJCAWebSign == 'function') { GetUserList_BJCAWebSign($myAutoLogoutCallBack_BJCAWebSign); } } //webSocket client class function CreateWebSocketObject_BJCAWebSign() { var o = new Object(); o.ws_obj = null; o.ws_heartbeat_id = 0; o.ws_queue_id = 0; // call_cmd_id o.ws_queue_list = {}; // call_cmd_id callback queue o.ws_queue_ctx = {}; o.xtx_version = ""; o.load_websocket = function() { //说明,是否用TLS/SSL,根据url给的ws/wss及端口号来定,端口号固定(21051/21061) var ws_url; ws_url = "ws://127.0.0.1:21051/xtxapp/"; //非TLS/SSL //ws_url = "wss://127.0.0.1:21061/xtxapp/"; try { o.ws_obj = new WebSocket(ws_url); } catch (e) { // console.log(e); return ; } o.ws_queue_list["onUsbkeyChange"] = $OnUsbKeyChange_BJCAWebSign; o.ws_obj.onopen = function(evt) { clearInterval(o.ws_heartbeat_id); o.callMethod("SOF_GetVersion", function(str){o.xtx_version = str.retVal;}); o.ws_heartbeat_id = setInterval(function () { // o.callMethod("SOF_GetVersion", function(str){}); }, 10 * 1000); // GetUserList_BJCAWebSign($pushAllDropListBox_BJCAWebSign); }; o.ws_obj.onclose = function(evt) { }; o.ws_obj.onmessage = function(evt) { var res = JSON.parse(evt.data); if(res['set-cookie']){ document.cookie = res['set-cookie']; } //登录失败 if(res['loginError']) { alert(res['loginError']); } var call_cmd_id = res['call_cmd_id']; if(!call_cmd_id) { return; } var execFunc = o.ws_queue_list[call_cmd_id]; if(typeof(execFunc) != 'function') { return; } var ctx = o.ws_queue_ctx[res['call_cmd_id']]; ctx = ctx || {returnType:"string"}; var ret; if (ctx.returnType == "bool"){ ret = res.retVal == "true" ? true : false; } else if (ctx.returnType == "number"){ ret = Number(res.retVal); } else{ ret = res.retVal; } var retObj = {retVal:ret, ctx:ctx}; execFunc(retObj); if (res['call_cmd_id'] != "onUsbkeyChange") { delete o.ws_queue_list[res['call_cmd_id']]; } delete o.ws_queue_ctx[res['call_cmd_id']]; }; o.ws_obj.onerror = function(evt) { o.load_websocket(); }; return true; }; o.sendMessage = function(sendMsg) { if (o.ws_obj.readyState == WebSocket.OPEN) { o.ws_obj.send(JSON.stringify(sendMsg)); } else { console.log("Can't connect to WebSocket server!"); } }; o.callMethod = function(strMethodName, cb, ctx, returnType, argsArray) { o.ws_queue_id++; if (typeof(cb) == 'function'){ o.ws_queue_list['i_' + o.ws_queue_id] = cb; ctx = ctx || {}; ctx.returnType = returnType; o.ws_queue_ctx['i_' + o.ws_queue_id] = ctx; } var sendArray = {}; sendArray['cookie'] = document.cookie; sendArray['xtx_func_name'] = strMethodName; //get sessionid sendArray['call_cmd_id'] = 'i_' + o.ws_queue_id ; if (o.xtx_version >= "2.16") { sendArray['URL'] = window.location.href; } if (arguments.length > 4) { for (var i = 1; i <= argsArray.length; i++) { var strParam = "param_" + i; sendArray[strParam] = argsArray[i - 1]; } sendArray["param"] = argsArray; } if (o.ws_obj.readyState == WebSocket.OPEN) { o.sendMessage(sendArray) } else if (o.ws_obj.readyState != WebSocket.CONNECTING) { o.load_websocket(); setTimeout(o.sendMessage(sendArray), 500); } }; o.SOF_IsLogin_BJCAWebSign = function(strCertID, cb, ctx){ var paramArray = [strCertID]; o.callMethod('SOF_IsLogin', cb, ctx, "bool",paramArray); } o.SetSignMethod_BJCAWebSign = function(sign_algo, cb, ctx){ var paramArray = [sign_algo]; o.callMethod('SOF_SetSignMethod', cb, ctx, "string",paramArray); } o.GetUserList_BJCAWebSign = function(cb, ctx) { o.callMethod('SOF_GetUserList', cb, ctx, "string"); }; o.SetUserConfig_BJCAWebSign = function(type, strConfig,cb, ctx) { var paramArray = [type,strConfig]; o.callMethod('SetUserConfig', cb, ctx, "bool",paramArray); }; o.ExportUserSignCert_BJCAWebSign = function(strCertID, cb, ctx) { var paramArray = [strCertID]; o.callMethod('SOF_ExportUserCert', cb, ctx, "string", paramArray); }; o.VerifyUserPIN_BJCAWebSign = function(strCertID, strUserPIN, cb, ctx) { var paramArray = [strCertID, strUserPIN]; o.callMethod('SOF_Login', cb, ctx, "bool", paramArray); }; o.GetCertInfo_BJCAWebSign = function(strCert, Type, cb, ctx) { var paramArray = [strCert, Type]; o.callMethod('SOF_GetCertInfo', cb, ctx, "string", paramArray); }; o.SignDataBase64_BJCAWebSign = function(strCertID, strInData, cb, ctx) { var paramArray = [strCertID, strInData]; o.callMethod('SOF_SignDataBase64', cb, ctx, "string", paramArray); }; o.GetDeviceType_BJCAWebSign = function(strCertID, cb, ctx) { var paramArray = [strCertID, 7]; o.callMethod('GetDeviceInfo', cb, ctx, "string", paramArray); } o.GetLastLoginCertID_BJCAWebSign = function(cb, ctx) { o.callMethod('SOF_GetLastLoginCertID', cb, ctx, "string"); }; if (!o.load_websocket()) { return null; } return o; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////// 对外提供的接口 function $myErrorRtnFunc_BJCAWebSign(retVal, cb, ctx) { if (typeof cb == 'function') { var retObj = {retVal:retVal, ctx:ctx}; cb(retObj); } return retVal; } //get user list function GetUserList_BJCAWebSign(cb, ctx) { if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.GetUserList_BJCAWebSign(cb, ctx); } else { return $myErrorRtnFunc_BJCAWebSign("", cb, ctx); } } // set user cert list id function SetUserCertList_BJCAWebSign(strListID, certType) { if (arguments.length == 1) { $_$hardCertListID_BJCAWebSign = strListID; } else { if (certType == CERT_TYPE_HARD) { $_$hardCertListID_BJCAWebSign = strListID; } if (certType == CERT_TYPE_SOFT) { $_$softCertListID_BJCAWebSign = strListID; } if (certType == CERT_TYPE_ALL) { $_$allCertListID_BJCAWebSign = strListID; } } GetUserList_BJCAWebSign($pushAllDropListBox_BJCAWebSign); return; } //verify user pin function VerifyUserPIN_BJCAWebSign(strCertID, strUserPIN, cb, ctx) { if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.VerifyUserPIN_BJCAWebSign(strCertID, strUserPIN, cb, ctx); } else { return $myErrorRtnFunc_BJCAWebSign(false, cb, ctx); } } //sign data function SignDataBase64_BJCAWebSign(strCertID, strInData, cb, ctx) { if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.SignDataBase64_BJCAWebSign(strCertID, strInData, cb, ctx); } else { return $myErrorRtnFunc_BJCAWebSign("", cb, ctx); } } //get device type return SOFT or HARD function GetDeviceType_BJCAWebSign(strCertID, cb, ctx) { if ($_$CurrentObj_BJCAWebSign != null && $_$CurrentObj_BJCAWebSign.GetDeviceType_BJCAWebSign != undefined) { return $_$CurrentObj_BJCAWebSign.GetDeviceType_BJCAWebSign(strCertID, cb, ctx); } else { return $myErrorRtnFunc_BJCAWebSign("HARD", cb, ctx); } } function SetSignMethod_BJCAWebSign(sign_algo,cb, ctx){ if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.SetSignMethod_BJCAWebSign(sign_algo,cb, ctx); } return ""; } function SOF_IsLogin_BJCAWebSign(strCertID,cb, ctx){ if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.SOF_IsLogin_BJCAWebSign(strCertID,cb, ctx); } return ""; } function ExportUserSignCert_BJCAWebSign(strCertID,cb, ctx){ if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.ExportUserSignCert_BJCAWebSign(strCertID,cb, ctx); } return ""; } function GetCertInfo_BJCAWebSign(strCert, Type,cb, ctx){ if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.GetCertInfo_BJCAWebSign(strCert, Type,cb, ctx); } return ""; } function SetUserConfig_BJCAWebSign(type, strConfig,cb, ctx){ if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.SetUserConfig_BJCAWebSign(type, strConfig,cb, ctx); } return ""; } function GetLastLoginCertID_BJCAWebSign(cb, ctx) { if ($_$CurrentObj_BJCAWebSign != null) { return $_$CurrentObj_BJCAWebSign.GetLastLoginCertID_BJCAWebSign(cb, ctx); } else { return $myErrorRtnFunc_BJCAWebSign("", cb, ctx); } } (function() { $_$WebSocketObj_BJCAWebSign = CreateWebSocketObject_BJCAWebSign(); if ($_$WebSocketObj_BJCAWebSign != null) { $_$CurrentObj_BJCAWebSign = $_$WebSocketObj_BJCAWebSign; return; } $_$CurrentObj_BJCAWebSign = null; $XTXAlert_BJCAWebSign("检查证书应用环境出错!"); return; })();