You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

841 lines
36 KiB

<html lang="zh_CN.utf8" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>XTXAppCOM异步调用方式</title>
<style type="text/css">
.TopDIV {
position: absolute;
left: 10px;
top: 10px;
height: 70px;
background-color: #BCCE98;
text-align: center;
}
.MenuDIV {
position: absolute;
left: 10px;
top: 85px;
background-color: #DAE9BC;
width: 250px;
float: left;
overflow: auto;
}
.MainTopDIV {
position: absolute;
left: 265px;
top: 85px;
background-color: #EEEEEE;
height: 130px;
float: left;
overflow: auto;
}
.MainContentDIV {
position: absolute;
bottom: 30px;
left: 265px;
top: 240px;
background-color: #EEEEEE;
float: left;
overflow: auto;
}
.BottomDIV {
position: fixed;
bottom: 0px;
left: 10px;
height: 30px;
background-color: #BCCE98;
clear: both;
text-align: center;
overflow: auto;
}
h2 {
margin-bottom: 2;
font-size: 18px;
}
li {
font-size: 15px;
}
.customers {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
width: 100%;
border-collapse: collapse;
}
.customers td, .customers th {
font-size: 1em;
border: 1px solid #98bf21;
padding: 3px 7px 2px 7px;
text-align: center;
}
.customers th {
font-size: 1em;
border: 1px solid #98bf21;
padding: 3px 7px 2px 7px;
text-align: center;
background-color: #98bf21;
color: #ffffff;
}
.customers td.right {
text-align: right;
width: 20%
}
.customers td.left {
text-align: left;
width: 80%
}
.StandardWidth {
width: 500px;
box-sizing: border-box;
}
</style>
<link rel="stylesheet" href="/lib/layui/css/layui.css">
<script src="/lib/layui/layui.js"></script>
<script src="/js/CA/xtxasyn.js"></script>
"
</head>
<script>
////////////////////////////////////// 页面布局本身的JS脚本开始 ///////////////////////////////////
// 存放所有测试的DIV ID
// 每个DIV对应一个左侧菜单
var kDivArray = new Array();
var divArrayIndex = 0;
// 应用接口测试菜单对应的div名称列表
kDivArray[divArrayIndex++] = "div_app_setuserconfig";
kDivArray[divArrayIndex++] = "div_app_export_cert";
kDivArray[divArrayIndex++] = "div_app_login_out";
kDivArray[divArrayIndex++] = "div_app_change_pin";
kDivArray[divArrayIndex++] = "div_app_pv_cert"; // Parse and Validate
kDivArray[divArrayIndex++] = "div_app_plain_sign_vfy";
kDivArray[divArrayIndex++] = "div_app_hash_sign_vfy";
kDivArray[divArrayIndex++] = "div_app_pkcs7_sign_vfy";
kDivArray[divArrayIndex++] = "div_app_pkcs7_sign_hash_vfy";
kDivArray[divArrayIndex++] = "div_app_xml_sign_vfy";
kDivArray[divArrayIndex++] = "div_app_asym_enc_dec";
kDivArray[divArrayIndex++] = "div_app_symm_enc_dec";
kDivArray[divArrayIndex++] = "div_app_pkcs7_envlope";
kDivArray[divArrayIndex++] = "div_app_pkcs7_sign_envlope";
kDivArray[divArrayIndex++] = "div_app_crypto";
kDivArray[divArrayIndex++] = "div_app_base64";
kDivArray[divArrayIndex++] = "div_app_secret_seg";
kDivArray[divArrayIndex++] = "div_app_file_enc_dec";
// 其他接口
function showSelectDiv(id) {
for (var i = 0; i < kDivArray.length; i++) {
var objDiv = document.getElementById(kDivArray[i]);
if (objDiv == undefined) {
continue;
}
var objHref = document.getElementById("id_" + kDivArray[i]);
var pos = -1;
if (objHref) {
pos = objHref.innerText.indexOf('-->');
}
if (pos != -1) {
objHref.innerText = objHref.innerText.substring(0, pos);
}
objHref.style.backgroundColor = '#DAE9BC';
if (id == kDivArray[i]) {
objDiv.style.display = 'block';
objHref.innerText = objHref.innerText + "-->";
objHref.style.backgroundColor = 'yellow'
} else {
objDiv.style.display = 'none';
}
}
return;
}
function SetDIVPostion() {
//Top的宽度是整个页面的宽度
var objTopDiv = document.getElementById("Top");
if (objTopDiv != undefined) {
objTopDiv.style.width = document.body.clientWidth - 10;
}
//Menu的宽度是固定宽度 250 + 15(滚动条的宽度)
var objMenu = document.getElementById("Menu");
if (objMenu != undefined) {
objMenu.style.height = document.body.clientHeight - 100;
}
//Content DIV的宽度
var objContentTopDiv = document.getElementById("MainTop");
if (objContentTopDiv != undefined) {
objContentTopDiv.style.width = document.body.clientWidth - 265;
objContentTopDiv.style.height = document.body.clientHeight - 100;
}
var i;
for (i = 0; i < kDivArray.length; i++) {
var objDiv = document.getElementById(kDivArray[i]);
if (objDiv != undefined) {
objDiv.style.width = document.body.clientWidth - 265;
}
}
//Bottom DIV的宽度
var objBottomDiv = document.getElementById("Bottom");
if (objBottomDiv != undefined) {
objBottomDiv.style.width = document.body.clientWidth - 10;
}
}
function select_cert(value) {
form_xtx.id_selected_cert_id.value = value;
}
function select_device(value) {
form_xtx.id_selected_device_sn.value = value;
}
</script>
<body onresize="SetDIVPostion();" onLoad="SetDIVPostion(); showSelectDiv('div_app_setuserconfig');">
<form id="form_xtx" name="form_xtx">
<!-- 页头部 -->
<div id="Top" class="TopDIV">
<br/>
<b><font size="6" color="#0000FF">ukey登录</font></b>
<br/> <br/>
</div>
<!-- 菜单 -->
<div id="Menu" class="MenuDIV">
<!-- <h4>应用接口测试</h4>-->
<ul>
<li><A href="javascript:onClick=showSelectDiv('div_app_setuserconfig')"
id='id_div_app_setuserconfig'>证书参数</A></li>
<li><A href="javascript:onClick=showSelectDiv('div_app_export_cert')" id='id_div_app_export_cert'>导出证书</A>
</li>
<li><A href="javascript:onClick=showSelectDiv('div_app_login_out')" id='id_div_app_login_out'>登录登出</A></li>
<li><A href="javascript:onClick=showSelectDiv('div_app_change_pin')" id='id_div_app_change_pin'>修改密码</A>
</li>
<li><A href="/login.jsp" id='id_div_app_change_pin2'>返回登录</A></li>
</ul>
</div>
<!-- 测试内容头部 显示证书列表 设备列表 -->
<div id="MainTop" class="MainTopDIV">
<table class="customers">
<tr>
<td class="right"> 组件版本号:</td>
<td class="left">
<input type="text" class="StandardWidth" id="id_xtx_version" readonly="readonly">
</td>
</tr>
<tr>
<td class="right"> 请选择证书:</td>
<td class="left">
<select class="StandardWidth" id="id_cert_list" method="post" onchange="select_cert(this.value)"
enctype="multipart/form-data" action="submit">
</select>
</td>
</tr>
<tr>
<td class="right"> 选择的证书ID:</td>
<td class="left">
<input type="text" class="StandardWidth layui-input" method="post" id="id_selected_cert_id"
name="certid" enctype="multipart/form-data">
</td>
</tr>
<tr>
<td class="right"> 选择设备序列号:</td>
<td class="left">
<select class="StandardWidth" id="id_device_list" onchange="select_device(this.value)">
</select>
</td>
</tr>
<tr>
<td class="right"> 设备序列号:</td>
<td class="left">
<input type="text" class="StandardWidth" id="id_selected_device_sn">
</td>
</tr>
<button type="button" id="key_login">选择完毕</button>
<script>
document.addEventListener("DOMContentLoaded", function () {
// 获取按钮元素
const button = document.getElementById("key_login"); // 替换成你实际的按钮ID
// 监听按钮的点击事件
button.addEventListener("click", function () {
// 获取两个input框的值
//var certListValue = document.getElementById("id_cert_list").value;
var selectedCertIdValue = document.getElementById("id_selected_cert_id").value;
alert("选择成功,点击返回登陆");
// 创建一个新的XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 设置POST请求的目标路径为login
const url = "/keylogin"; // 替换成实际的路径
// 设置POST请求
xhr.open("POST", url, true);
// 设置POST请求的Content-Type头部
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(JSON.stringify(selectedCertIdValue))
// xhr.send(selectedCertIdValue(value))
});
});
</script>
</table>
</div>
<!-- //////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<div id="div_app_setuserconfig" class="MainContentDIV" style="display:none">
<script>
function clear_div_app_setuserconfig_res() {
form_xtx.id_get_sign_method_res.value = '';
form_xtx.id_get_encrypt_method_res.value = '';
form_xtx.id_set_userconfig_param.value = '';
return;
}
function test_SOF_GetSignMethod() {
SOF_GetSignMethod(function (retObj) {
var algor = Number(retObj.retVal);
form_xtx.id_get_sign_method_res.value = "0x" + algor.toString(16);
});
}
function test_SOF_SetSignMethod() {
var algor = parseInt(form_xtx.id_set_sign_method_algor.value);
SOF_SetSignMethod(algor, function (retObj) {
if (retObj.retVal == 0) {
alert("设置签名算法成功");
} else {
alert("设置签名算法失败,返回值[" + retObj.retVal + "]!!!");
}
});
}
function test_SOF_GetEncryptMethod() {
SOF_GetEncryptMethod(function (retObj) {
var algor = Number(retObj.retVal);
form_xtx.id_get_encrypt_method_res.value = "0x" + algor.toString(16);
//form_xtx.id_get_encrypt_method_res.value = retObj.retVal;
});
}
function test_SOF_SetEncryptMethod() {
var algor = parseInt(form_xtx.id_set_encrypt_method_algor.value);
SOF_SetEncryptMethod(algor, function (retObj) {
if (retObj.retVal == 0) {
alert("设置加密算法成功");
} else {
alert("设置加密算法失败,返回值[" + retObj.retVal + "]!!!");
}
});
}
function test_SetUserConfig() {
var type = parseInt(form_xtx.id_set_userconfig_type.value);
var value = form_xtx.id_set_userconfig_param.value;
SetUserConfig(type, value, function (retObj) {
if (retObj.retVal) {
alert("SetUserConfig成功");
} else {
alert("SetUserConfig失败返回值[" + retObj.retVal + "]!!!");
}
});
}
</script>
<table class="customers">
</table>
</div>
<!-- //////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<div id="div_app_export_cert" class="MainContentDIV" style="display:none">
<script>
function clear_div_app_export_cert_res() {
form_xtx.id_get_user_list_res.value = '';
form_xtx.id_export_user_cert_res.value = '';
form_xtx.id_export_exchange_user_cert_res.value = '';
return;
}
function test_SOF_GetUserList() {
SOF_GetUserList(function (retObj) {
form_xtx.id_get_user_list_res.value = retObj.retVal;
});
}
function getSelectCertID() {
if (form_xtx.id_selected_cert_id.value == "") {
alert("请选择证书");
form_xtx.id_selected_cert_id.focus();
return "";
}
return form_xtx.id_selected_cert_id.value;
}
function test_SOF_ExportUserCert() {
var certId = getSelectCertID();
if (certId == "") {
return;
}
SOF_ExportUserCert(certId, function (retObj) {
form_xtx.id_export_user_cert_res.value = retObj.retVal;
});
}
function test_SOF_ExportExChangeUserCert() {
var certId = getSelectCertID();
if (certId == "") {
return;
}
SOF_ExportExChangeUserCert(certId, function (retObj) {
form_xtx.id_export_exchange_user_cert_res.value = retObj.retVal;
});
}
</script>
<table class="customers">
<tr>
<th colspan="2">导出证书&nbsp;&nbsp;
<input type="button" value="清空数据" onclick="return clear_div_app_export_cert_res()">
</th>
</tr>
<tr>
<td class="right"> 证书ID列表:</td>
<td class="left">
<textarea class="StandardWidth" id="id_get_user_list_res" rows="3"></textarea>&nbsp;&nbsp;
<input type="button" value="获取证书列表" onclick="return test_SOF_GetUserList()">
</td>
</tr>
<tr>
<td class="right"> 签名证书:</td>
<td class="left">
<textarea class="StandardWidth" id="id_export_user_cert_res" rows="5"></textarea>&nbsp;&nbsp;
<input type="button" value="导出签名证书" onclick="return test_SOF_ExportUserCert()">
</td>
</tr>
<tr>
<td class="right"> 加密证书:</td>
<td class="left">
<textarea class="StandardWidth" id="id_export_exchange_user_cert_res" rows="5"></textarea>&nbsp;&nbsp;
<input type="button" value="导出加密证书" onclick="return test_SOF_ExportExChangeUserCert()">
</td>
</tr>
</table>
</div>
<!-- //////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<div id="div_app_login_out" class="MainContentDIV" style="display:none">
<script type="text/javascript">
function clear_div_app_login_out_res() {
form_xtx.id_login_passwd.value = '';
form_xtx.id_login_out_res.value = '';
form_xtx.id_islogin_res.value = '';
form_xtx.id_login_out_retry.value = '';
form_xtx.id_form_login_passwd.value = '';
form_xtx.id_form_login_res.value = '';
}
//异步调用sof_login回调函数
function test_login_callback(retObj) {
var certId = retObj.ctx.certId;
if (retObj.retVal) { //retObj.retVal表示sof_login结果true或false
//form_xtx.id_login_out_res.value = "证书登录成功";
form_xtx.id_login_out_res.value = "证书[" + certId + "]登录成功";
// window.location.href = "/index.jsp";
// let value = document.getElementById("id_login_out_res").value;
// // 将值传到后端(这里假设使用Ajax发送请求)
// let xhr = new XMLHttpRequest();
// xhr.open("POST", "/login", true);
// xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// xhr.send("value=" + encodeURIComponent(value));
// 获取按钮元素
} else {
form_xtx.id_login_out_res.value = "证书[" + certId + "]登录失败";
//当登录失败时调用SOF_GetLastError取错误码errcode为79时表示pin码复杂度不符合
SOF_GetLastError(function (retObj) {
var err = retObj.retVal;
if (err == 79) {
alert("请核对pin码复杂度是否符合要求!");
}
}, retObj.ctx);
}
var str_waring = "消耗时间" + (new Date() - retObj.ctx.begin) / 1000 + "秒";
alert(str_waring);
// 此处无论登录成功失败都调用了获取重试次数
// 实际情况可能仅在登录失败时获取一下重试次数做个提醒
SOF_GetPinRetryCount(certId, function (retObj) {
var certId = retObj.ctx.certId;
form_xtx.id_login_out_retry.value = "证书[" + certId + "]重试次数剩余:" + retObj.retVal + "次...";
}, retObj.ctx);
}
// xhr模拟请求工具
function makePostRequest(url, data, callback) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
callback(null, xhr.responseText);
} else {
callback(new Error('Post request failed'));
}
}
};
xhr.send(data);
}
function test_SOF_IsLogin() {
const certId = getSelectCertID();
if (certId == "") {
return;
}
SOF_IsLogin(certId, function (retObj) {
const certId = retObj.ctx.certId;
if (retObj.retVal) {
form_xtx.id_islogin_res.value = "证书[" + certId + "]已登录...";
} else {
form_xtx.id_islogin_res.value = "证书[" + certId + "]未登录!!!";
}
}, {certId: certId});
}
// 登录
function test_SOF_Login() {
const certId = getSelectCertID();
if (certId == "") {
return;
}
var passwd = form_xtx.id_login_passwd.value;
if (passwd == "") {
alert("请输入用户密码");
form_xtx.id_login_passwd.focus();
return;
}
var time_begin = new Date();
if (form_xtx.id_login_with_cssupdate.checked) { //当勾选时进行证书更新
SOF_Login(certId, passwd, test_login_callback, {begin: time_begin, certId: certId});
alert("证书正在更新");
//默认进行证书更新
} else {
const platform = navigator.platform.toLowerCase();
if (platform.indexOf("win") != -1) {
//SOF_LoginEx第3个参数:登录成功后是否通过CSS控件进行证书更新操作1表示进行证书更新0表示不进行证书更新。
SOF_LoginEx(certId, passwd, 0, test_login_callback, {begin: time_begin, certId: certId});
} else {
SOF_Login(certId, passwd, test_login_callback, {begin: time_begin, certId: certId});
}
}
}
function testAndMakePostRequest() {
const certId = getSelectCertID();
if (certId == "") {
return;
}
// SOF_IsLogin(certId, function(retObj) {
// if (retObj.retVal) {
// makePostRequest('/keylogin', certId, function(err, response) {
// if (err) {
// console.error('Error:', err);
// } else {
// console.log('Response:', response);
// // 处理响应数据
// }
// });
// } else {
// // 进行其他处理,如重新登录等
// alert('User is not logged in');
// }
// }, {certId: certId});
}
document.addEventListener("DOMContentLoaded", function() {
const loginButton = document.getElementById('loginButton');
if (loginButton) {
loginButton.addEventListener('click', testAndMakePostRequest);
}
});
// 注销登录
function test_SOF_Logout() {
var certId = form_xtx.id_selected_cert_id.value;
if (form_xtx.id_logout_certid_all.checked) {
certId = "";
}
var strMsg;
if (certId != "") {
strMsg = certId;
} else {
strMsg = "全部";
}
SOF_Logout(certId, function (retObj) {
if (retObj.retVal) {
form_xtx.id_login_out_res.value = "证书[" + retObj.ctx.msgCertId + "]登出成功...";
} else {
form_xtx.id_login_out_res.value = "证书[" + retObj.ctx.msgCertId + "]登出失败!!!";
}
}, {msgCertId: strMsg});
}
function logout_all_click(id) {
if (id == 'id_logout_certid_cur') {
form_xtx.id_logout_certid_cur.checked = true;
form_xtx.id_logout_certid_all.checked = false;
} else if (id == 'id_logout_certid_all') {
form_xtx.id_logout_certid_cur.checked = false;
form_xtx.id_logout_certid_all.checked = true;
}
}
function test_SOF_GetPinRetryCount() {
var certId = getSelectCertID();
if (certId == "") {
return;
}
SOF_GetPinRetryCount(certId, function (retObj) {
form_xtx.id_login_out_retry.value = "证书[" + certId + "]重试次数剩余:" + retObj.retVal + "次...";
});
}
var strServerSignedData = "FUy74vw8FOnzJl4MEKheNqPrOv2U/8/Wgrs2hxsV8AawIu7eKEboBNhLY+uzuYPKRhItrY+UkbRaUB2CVoi87owFn3FhitlTp4YbpBpqxdeddtvC/pMGVND4NQcbEw+qqIRq6L3kI5/ZGicz+DhehQC1oWNMWMe/h1hAPjzZXDE=";
var strServerRan = "CV3w40tGbz/E6xdEy4h2+gjcLXONfBWM";
var strServerCert = "MIIE+DCCA+CgAwIBAgIKGzAAAAAAAFlKWzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJDTjENMAsGA1UECgwEQkpDQTEYMBYGA1UECwwPUHVibGljIFRydXN0IENBMRowGAYDVQQDDBFQdWJsaWMgVHJ1c3QgQ0EtMTAeFw0yMDA1MjUxNjAwMDBaFw0yMTA2MjUxNTU5NTlaMEsxCzAJBgNVBAYTAkNOMRIwEAYDVQQDDAnotbXmsLjnnIExKDAmBgkqhkiG9w0BCQEWGXpoYW95b25nc2hlbmdAYmpjYS5vcmcuY24wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALgaT9lsB6duKSsmVbhotgAB2nsTZMKPLPBdLO+Nchvcj7C0ZrePd/m0KzbXWpwk0ZOTa6XsUmGZhHo4FUZr5i9a1GblX3UAY/cu1cIk02IvvoCL/Dh7GAH9eCZAlyXLKhUB1wspBpPkGwIiB5l0f2/ds6C8sR3NOojG3Sx2i9xrAgMBAAGjggJZMIICVTAfBgNVHSMEGDAWgBSsO+yvDKNQDu+vr7RPbDvb0VfSiTAdBgNVHQ4EFgQUWsU79eTB2d2qdLouBzQn7WbBNdowCwYDVR0PBAQDAgbAMIGvBgNVHR8EgacwgaQwbaBroGmkZzBlMQswCQYDVQQGEwJDTjENMAsGA1UECgwEQkpDQTEYMBYGA1UECwwPUHVibGljIFRydXN0IENBMRowGAYDVQQDDBFQdWJsaWMgVHJ1c3QgQ0EtMTERMA8GA1UEAxMIY2EzY3JsMzAwM6AxoC+GLWh0dHA6Ly9sZGFwLmJqY2Eub3JnLmNuL2NybC9wdGNhL2NhM2NybDMwLmNybDAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIA/zAdBgUqVgsHAQQUU0YzNzI1MjYxOTgyMTIwMjY2NzkwHQYFKlYLBwgEFFNGMzcyNTI2MTk4MjEyMDI2Njc5MCAGCGCGSAGG+EQCBBRTRjM3MjUyNjE5ODIxMjAyNjY3OTAbBggqVoZIAYEwAQQPMTAyMDgwMDA2OTAzMzAwMCUGCiqBHIbvMgIBBAEEFzhDQFNGMzcyNTI2MTk4MjEyMDI2Njc5MCoGC2CGSAFlAwIBMAkKBBtodHRwOi8vYmpjYS5vcmcuY24vYmpjYS5jcnQwDwYFKlYVAQEEBjEwMDA4MDBABgNVHSAEOTA3MDUGCSqBHIbvMgICATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmJqY2Eub3JnLmNuL2NwczATBgoqgRyG7zICAQEeBAUMAzUyMDANBgkqhkiG9w0BAQUFAAOCAQEAaFIE1vKWRqZudqnTPuY/QRYo8R1itRg5OIDcQ51AKBtaxqcMCzXqZwP/zMU36fOT96tCbeIte6jFeJaM3J3Zp5gFZcP4TKxLnQ/FGRMQaKyrJ0Lvi7zNfk48iQzKjKmRAn8XOajA195kX5tJ2YMNamAYVmMgtRrK5YcHg7P9SZC9bqT3IYxAoebQcv666l8nyNQyWnP8pvbPNOvs6xZZzyXMPaHvQK8vV1kSm1VIqazQNvPWRNoE0CETS3g2jwmW4O34/jzrMbG0sXQToDEOkYZVSLCT70RnGrKzJ/F3hsy4G2yPY7B0jRkCzVO1+tSzN7iMDUC/SM7B9Jhl9jCzVQ==";
function test_FormLogin() {
var certId = getSelectCertID();
if (certId == "") {
return;
}
var passwd = form_xtx.id_form_login_passwd.value;
Login("form_xtx", certId, passwd, "", function (ret) {
if (ret) {
form_xtx.id_form_login_res.value = "表单登录成功...";
} else {
form_xtx.id_form_login_res.value = "表单登录失败!";
}
});
}
</script>
<table class="customers">
<tr>
<th colspan="2">登录登出&nbsp;&nbsp;
<input type="button" value="清空数据" onclick="return clear_div_app_login_out_res()">
</th>
</tr>
<tr>
<td class="right"> 密码:</td>
<td class="left">
<input type="password" class="StandardWidth" id="id_login_passwd">&nbsp;&nbsp;
<!-- <input type="button" value="登录" onclick="sendResultToBackend()">-->
<input type="button" value="登录" onclick="return test_SOF_Login()">
<button id="loginButton">登录并发送请求</button>
<input type="checkbox" id="id_login_with_cssupdate">是否通过CSS更新证书
</td>
</tr>
<tr>
<td class="right"> 登录结果:</td>
<td class="left">
<input type="text" class="StandardWidth" name="id_login_out_res">
<input type="button" value="登出" onclick="return test_SOF_Logout()">
<input type="checkbox" name="name_logout_all" id="id_logout_certid_cur"
onclick="logout_all_click('id_logout_certid_cur');" checked=true/>登出当前证书
<input type="checkbox" name="name_logout_all" id="id_logout_certid_all"
onclick="logout_all_click('id_logout_certid_all');"/>登出全部证书
</td>
</tr>
<tr>
<td class="right"> 检查是否登录的结果:</td>
<td class="left">
<input type="text" class="StandardWidth" name="id_islogin_res">&nbsp;&nbsp;
<input type="button" value="检查是否登录" onclick="return test_SOF_IsLogin()">
</td>
</tr>
<tr>
<td class="right"> 密码重试次数:</td>
<td class="left">
<input type="text" class="StandardWidth" name="id_login_out_retry">&nbsp;&nbsp;
<input type="button" value="获取密码重试次数" onclick="return test_SOF_GetPinRetryCount()">
</td>
</tr>
</table>
</div>
<!-- //////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<div id="div_app_change_pin" class="MainContentDIV" style="display:none">
<script>
function clear_div_app_change_pin_res() {
form_xtx.id_change_user_passwd_old.value = '';
form_xtx.id_change_user_passwd_new_1.value = '';
form_xtx.id_change_user_passwd_new_2.value = '';
form_xtx.id_change_user_passwd_res.value = '';
form_xtx.id_change_user_passwd_retry.value = '';
}
function test_SOF_ChangePassWd() {
var certId = getSelectCertID();
if (certId == "") {
return;
}
var oldpin = form_xtx.id_change_user_passwd_old.value;
var newpin1 = form_xtx.id_change_user_passwd_new_1.value;
var newpin2 = form_xtx.id_change_user_passwd_new_2.value;
if (oldpin == "") {
alert("请输入原密码");
form_xtx.id_change_user_passwd_old.focus();
return;
}
if (newpin1 == "") {
alert("请输入新密码");
form_xtx.id_change_user_passwd_new_1.focus();
return;
}
if (newpin2 == "") {
alert("请输入新密码");
form_xtx.id_change_user_passwd_new_2.focus();
return;
}
if (newpin1 != newpin2) {
alert("两次输入的新密码不一致");
form_xtx.id_change_user_passwd_new_2.focus();
return;
}
SOF_ChangePassWd(certId, oldpin, newpin1, function (retObj) {
if (retObj.retVal) {
form_xtx.id_change_user_passwd_res.value = "修改证书密码成功";
} else {
form_xtx.id_change_user_passwd_res.value = "修改证书密码失败";
}
});
// 此处无论修改密码成功失败都调用了获取重试次数
// 实际情况可能仅在修改失败时获取一下重试次数做个提醒
SOF_GetPinRetryCount(certId, function (retObj) {
form_xtx.id_change_user_passwd_retry.value = "证书[" + certId + "]重试次数剩余:" + retObj.retVal + "次...";
});
}
function test_SOF_GetRetryCount() {
var certId = getSelectCertID();
if (certId == "") {
return;
}
SOF_GetPinRetryCount(certId, function (retObj) {
form_xtx.id_change_user_passwd_retry.value = "证书[" + certId + "]重试次数剩余:" + retObj.retVal + "次...";
});
}
</script>
<table class="customers">
<tr>
<th colspan="2">修改密码&nbsp;&nbsp;
<input type="button" value="清空数据" onclick="return clear_div_app_change_pin_res()">
</th>
</tr>
<tr>
<td class="right"> 原密码:</td>
<td class="left">
<input type="password" class="StandardWidth" id="id_change_user_passwd_old">
</td>
</tr>
<tr>
<td class="right"> 新密码:</td>
<td class="left">
<input type="password" class="StandardWidth" id="id_change_user_passwd_new_1">
</td>
</tr>
<tr>
<td class="right"> 新密码确认:</td>
<td class="left">
<input type="password" class="StandardWidth" id="id_change_user_passwd_new_2">&nbsp;&nbsp;
<input type="button" value="修改密码" onclick="return test_SOF_ChangePassWd()">
</td>
</tr>
<tr>
<td class="right"> 修改结果:</td>
<td class="left">
<input type="text" class="StandardWidth" id="id_change_user_passwd_res">
</td>
</tr>
<tr>
<td class="right"> 密码重试次数:</td>
<td class="left">
<input type="text" class="StandardWidth" id="id_change_user_passwd_retry">&nbsp;&nbsp;
<input type="button" value="获取密码重试次数" onclick="return test_SOF_GetRetryCount()">
</td>
</tr>
</table>
</div>
</form>
</body>
<script>
function customFireEvent(objId, eventName) {
var obj = document.getElementById(objId);
if (obj == undefined) {
return;
}
if (obj.fireEvent) {
obj.fireEvent("on" + eventName);
} else if (obj.dispatchEvent) {
var e = document.createEvent('HTMLEvents');
e.initEvent(eventName, false, false);
obj.dispatchEvent(e);
}
}
function FillDeviceList() {
GetAllDeviceSN(function (retObj) {
var obj = document.getElementById("id_device_list");
if (obj == undefined) {
return;
}
var i, n = obj.length;
for (i = 0; i < n; i++) {
obj.remove(0);
}
var strDeviceList = retObj.retVal;
while (true) {
var pos = strDeviceList.indexOf(";");
if (pos <= 0) {
break;
}
var strOneDevice = strDeviceList.substring(0, pos);
var objItem = new Option(strOneDevice, strOneDevice);
obj.options.add(objItem);
var len = strDeviceList.length;
strDeviceList = strDeviceList.substring(pos + 1, len);
}
customFireEvent('id_cert_list', 'change');
customFireEvent('id_device_list', 'change');
});
}
function test_SOF_GetVersion() {
SOF_GetVersion(function (retObj) {
form_xtx.id_xtx_version.value = retObj.retVal;
});
}
test_SOF_GetVersion();
SetUserCertList("id_cert_list");
FillDeviceList();
SetOnUsbKeyChangeCallBack(FillDeviceList);
</script>
</html>