$(document).ready(function() { var thirdusbStatus = C.jsonDecode($('#thirdusb_status').val()); if (thirdusbStatus) { for (i in thirdusbStatus) { if (login.thirdusbStatus[i] !== undefined){ login.thirdusbStatus[i] = thirdusbStatus[i]; } } } $('a[data-tab-toggle]').click(login.resetForm); $('a[data-tab-toggle]').eq(0).click(); $('div.capimg').click(login.reloadCaptcha); $('#send-sms').click(login.sendSms); $('.login-msg').children('.close').click(login.clearMsg); $(document).on('focus', '.login-content :text', login.clearMsg); // set login page vertical middle login.setSignBoxMiddle(); $(window).resize(function(event) { login.setSignBoxMiddle(); }); var smsLockTs = C.getValue($('#sms_lockts')); if (Number(smsLockTs) > 0) { login.smsLockTs = smsLockTs; login.smsStartInterval(); } }); var login = { usbtype: '', tabtype: '', XTXAPP: '', //北京CA thirdusbStatus: { jit: '0', bjca: '0', }, resetForm: function(e) { var tab = $(this).attr('data-tab-toggle'); var form = $('form[data-tab="' + tab + '"]'); form.find('input').val(''); login.clearMsg(); login.tabtype = tab; if (tab === 'usbkey') { login.readUsbkey(); } else if (tab === 'thirdusb') { login.readThirdUsbkey(); } }, reloadCaptcha: function() { AC.ajax({ cache: false, url: '/index.php/login/get_captcha?' + Math.random(), success: function(msg){ $('div.capimg').html(C.trim(msg)); } }); }, showMsg: function(msg) { var elem = $('.login-msg'), elemText = elem.children('.login-msg-text'); if (msg) { elemText.html(C.htmlEncode(msg)); elem.show(); } }, clearMsg: function() { $('.login-msg').hide(); }, getUsbControl: function() { if ($('#usmkeycontrol').length == 0) { var html = ''; $('body').append($(html)); } var usbControl = document.getElementById('usmkeycontrol'); return usbControl; }, readUsbkey: function() { login.showMsg('正在读取USBKEY...'); var usbControl = login.getUsbControl(); if (typeof usbControl.GetTokenList == 'undefined') { login.showMsg('请使用IE浏览器并确保已安装USBKEY控件'); return; } var certList = []; if (typeof usbControl.GetTokenList != 'undefined') { var res = C.jsonDecode(usbControl.GetTokenList()); if (res.result) { certList = res.result; } } login.clearMsg(); if (!certList.length) { return; } $('#usbkey_username').empty(); for (var i in certList) { if (certList[i].cert_list) { var option = $(''); option.attr('data-slot', certList[i].slot_id); option.attr('data-sn', certList[i].hw_serial); option.attr('cert_serial', certList[i].cert_list[0].cert_serial); $('#usbkey_username').append(option); } } if (!$('#usbkey_username option').length) { $('#usbkey_username').html(''); } }, smsLockTs: 0, smsTid: null, smsStartInterval: function() { login.smsTid = setInterval(function() { if (login.smsLockTs <= 0 && login.smsTid) { clearInterval(login.smsTid); } login.smsLockTs = login.smsLockTs - 1; if (login.smsLockTs > 0) { $('#send-sms').text('发送短信口令' + '(' + login.smsLockTs + ')'); } else { $('#send-sms').text('发送短信口令'); } }, 1000); }, sendSms: function(e) { if (login.smsLockTs > 0) { return false; } var username = C.getValue($('#sms_username')); var pwd = C.getValue($('#sms_pwd')); if (username === '') { login.showMsg('请输入用户名'); return false; } if (pwd === '') { login.showMsg('请输入密码'); return false; } AC.ajax({ url: '/index.php/login/send_sms', data: {uname: username, pwd: pwd}, success: function(msg) { msg = C.jsonDecode(msg); login.showMsg(msg[1]); if (msg[0] == '0') { login.smsLockTs = 60; login.smsStartInterval(); } } }); return false; }, pwd: function(e, params) { var params = { username: params.pwd_username, pwd: params.pwd_pwd, captcha: params.pwd_captcha, method: 'pwd' }; login.auth(params); }, otp: function(e, params) { var params = { username: params.otp_username, pwd: params.otp_pwd, captcha: params.otp_captcha, otp: params.otp_otp, method: 'otp' }; login.auth(params); }, sms: function(e, params) { var params = { username: params.sms_username, pwd: params.sms_pwd, captcha: params.sms_captcha, sms: params.sms_sms, method: 'sms' }; login.auth(params); }, usbkey: function(e, params) { var params = { username: params.usbkey_username, pwd: params.usbkey_pwd, captcha: params.usbkey_captcha, cert: '', signature: '', hw_serial: '', cert_serial: '', method: 'usb' }; login.auth(params); }, ga: function(e, params) { var params = { username: params.ga_username, pwd: params.ga_pwd, captcha: params.ga_captcha, ga: params.ga_totp, method: 'ga' } login.auth(params) }, ne: function(e, params) { var params = { username: params.ne_username, pwd: params.ne_pwd, captcha: params.ne_captcha, otp: params.ne_otp, method: 'neteaseotp' } login.auth(params) }, thirdusb: function(e, params) { var params = { username: params.thirdusb_username, pwd: params.thirdusb_pwd, captcha: params.thirdusb_captcha, cert: '', signature: '', method: 'thirdusb', thirdinfo: {} } if (login.usbtype == 'jit') { params.thirdinfo.usbtype = 'jit' } else if (login.usbtype == 'bjca') { params.thirdinfo.origin = ''; params.thirdinfo.usbtype = 'bjca'; params.thirdinfo.usbserial = ''; } else { login.showMsg('请使用IE浏览器并确保已安装USBKEY控件'); return false; } login.auth(params); }, usbGenSignature: function(params) { var usbControl = login.getUsbControl(); var option = $('#usbkey_username option:selected'); var slotId = option.attr('data-slot'); var offset = option.attr('data-offset'); var hw_serial = option.attr('data-sn'); var cert_serial = option.attr('cert_serial'); var resRandom = AC.getObjectFromUrl('/index.php/login/gen_random_data', {method: params.method}); var randomStr = resRandom.randomstr; var res = C.jsonDecode(usbControl.Sign(Number(slotId), '', 0, randomStr, randomStr.length)); if (res.code != 0) { login.showMsg('生成签名失败'); return false; } params.signature = res.result; var cert = C.jsonDecode(usbControl.GetCertificateContent(Number(slotId), 0)); if (cert.code != 0) { login.showMsg('读取证书失败'); return false; } params.cert = cert.result; params.hw_serial = hw_serial; params.cert_serial = cert_serial; return true; }, bjcaSignature: function(params) { var certId = $('#third_usbkey').val(); params.cert = login.XTXAPP.SOF_ExportUserCert(certId); var validate = login.XTXAPP.SOF_ValidateCert(params.cert); //证书有效性 params.thirdinfo.origin = login.XTXAPP.SOF_GenRandom(32); params.signature = login.XTXAPP.SOF_SignData(certId, params.thirdinfo.origin); var usbserial = certId.split('/'); params.thirdinfo.usbserial = usbserial[1]; // var verify = login.XTXAPP.SOF_VerifySignedData(cert, randomStr, sign); login.authSend(params); return false; }, readThirdUsbkey: function() { var usbtype = login.checkThirdUsbControl(); if (usbtype) { login.usbtype = usbtype; login.clearMsg(); } else { login.showMsg('请使用IE浏览器并插入USBKEY'); } }, checkThirdUsbControl: function() { if (login.thirdusbStatus.bjca == '1' && login.checkBjcaUsbControl()) { return 'bjca'; } else if (login.thirdusbStatus.jit == '1' && login.checkJitUsbControl()) { //jit最后检测 $('#third_usbkey').html(''); $('#third_usbkey_row').hide(); return 'jit'; } else { $('#third_usbkey').html(''); $('#third_usbkey_row').hide(); return false; } }, checkJitUsbControl: function() { try { // 执行USB控件的函数检查其是否可用 if ($("#JITComVCTK_S").length == 0) { $('body').append(''); } JITComVCTK_S.GetErrorCode(); return true; } catch (e) { return false; } }, checkBjcaUsbControl: function() { try { if (C.isIE()) { if ($("#XTXAPP").length == 0) { $('body').append('
'); login.XTXAPP = XTXAPP; } } else { if ($("#XTXAPP0").length == 0) { $('body').append("
"); login.XTXAPP = document.getElementById("XTXAPP0"); } } var userList = login.XTXAPP.SOF_GetUserList(); userList = C.trim(userList); if (userList == '') { return false; } else { userList = userList.split('&&&'); var option = ''; for (var i in userList) { if (userList[i] != '') { var userinfo = userList[i].split('||'); option += ''; // option.attr('data-slot', certList[i].slot_id); } } if (option != '') { $('#third_usbkey').html(option); $('#third_usbkey_row').show(); } } return true; } catch (e) { return false; } }, validateJitCert: function() { try { // 每次登录都需要选择证书 // JITDSignOcx.SetCertChooseType(1); JITComVCTK_S.SetCert("SC", "", "", "", "", ""); if (JITComVCTK_S.GetErrorCode() != 0) { var errmsg = '错误码:' + JITComVCTK_S.GetErrorCode() + ' 错误信息:' + JITComVCTK_S.GetErrorMessage(JITComVCTK_S.GetErrorCode()); login.showMsg(errmsg); return 1; } else { result = JITComVCTK_S.GetCertInfo("SC", 0, ""); return 0; } } catch (e) { login.showMsg('请使用IE浏览器并插入USBKEY'); return 1; } }, // thirdusbGenSignature: function(params) { // if (login.validateJitCert() !== 0) { // return false; // } // login.showMsg('正在登录...'); // var res = AC.getFromUrl('/index.php/login/gen_random_data', {method: params.method}); // if (!res) { // login.showMsg('请求认证原文失败'); // return false; // } // res = C.jsonDecode(res); // if (!res.randomstr) { // login.showMsg(res.errmsg); // return false; // } // var temp_DSign_Result = JITDSignOcx.AttachSignStr("", res.randomstr); // params.signature = temp_DSign_Result; // params.signed_original = res.randomstr; // return true; // }, auth: function(params) { var error = 0; var captcha_status = $('#captcha-status').val(); if (params.username === '') { error = 1; if (params.method == 'usb' || params.method == 'bjca') { login.showMsg('请插入USBKEY'); } else { login.showMsg('请输入用户名'); } } else if (params.pwd === '') { error = 1; login.showMsg('请输入密码'); } else if (captcha_status === '1' && params.captcha === '') { error = 1; login.showMsg('请输入验证码'); } else if (params.method === 'otp' && params.otp === '') { error = 1; login.showMsg('请输入动态口令'); } else if (params.method === 'sms' && params.sms === '') { error = 1; login.showMsg('请输入短信口令'); } if (error !== 0) { return false; } if (params.method == 'usb') { if (login.usbGenSignature(params) === false) { return false; } } else if (params.method == 'thirdusb') { if (login.usbtype == 'jit') { // 第三方USBKEY认证用异步方式获取认证原文,页面上显示提示信息。用同步方式获取时无法显示提示信息。 login.thirdusbAuthSend(params); } else if (login.usbtype == 'bjca') { login.bjcaSignature(params); } return false; } login.authSend(params); }, thirdusbAuthSend: function(params) { if (login.validateJitCert() !== 0) { return false; } login.showMsg('正在登录...'); AC.ajax({ url: '/index.php/login/gen_random_data', data: {method: params.method}, success: function(res){ if (!res) { login.showMsg('请求认证原文失败'); return false; } res = C.jsonDecode(res); if (!res.randomstr) { login.showMsg(res.errmsg); return false; } var temp_DSign_Result = JITComVCTK_S.AttachSignStr("", res.randomstr); params.signature = temp_DSign_Result; params.signed_original = res.randomstr; login.authSend(params); return false; } }); }, authSend: function(params) { params.thirdinfo = C.jsonEncode(params.thirdinfo); login.showMsg('正在登录...'); AC.ajax({ url: '/index.php/login/auth3', data: params, success: function(msg){ msg = C.jsonDecode(msg); if (msg['type'] == 0) { login.redirect(); } else { login.resetLogin(params); } if (msg.type != 0) { if (msg.errcode === 'ga-2') { var gainfo = msg.ret; if (gainfo[0] === '' || gainfo[1] === '') { login.showMsg(msg.errmsg); } else { login.showSetGA(gainfo); } } else { login.showMsg(msg.errmsg); } } } }); }, showSetGA: function(gainfo) { var qr_options = { render: "div", ecLevel: "H", minVersion: 3, fill: "#333333", background: "#fff", text: "", size: 150, radius: 0, quiet: 0, image: null }; qr_options.text = gainfo[1]; $("#qr-container").empty().qrcode(qr_options); var html = $('#dialog-generate-gainfo').html(); UI.dialog.show(html, login.saveGoogleAuthinfo); $('#secretkey').html(C.htmlEncode(gainfo[0])).attr('value', gainfo[0]); }, saveGoogleAuthinfo: function(e, params) { params.secretkey = $('#secretkey').html(); var error = 0; if (params.passwd === '') { error = 1; UI.itError($("#passwd"), '请输入移动设备显示的验证码'); } else if (!V.checkNum(params.passwd) || params.passwd.length != 6) { error = 1; UI.itError($("#passwd"),'验证码由6位数字组成'); } if (error == 0) { AC.ajax({ url: '/index.php/login/saveGAInfo', data: params, success: function(msg) { if (msg == 0) { login.redirect(); } else if (msg == 'session_timeout') { UI.dialog.close(); login.reloadCaptcha(); login.showMsg('登录状态已失效,请重新登录'); } else if (msg == -1) { UI.itError($("#passwd"), '验证码错误,请确保移动设备与本系统的时间一致'); } else { UI.itError($("#passwd"), '验证失败'); } }, error: function() { UI.dialog.close(); UI.msg.error('验证失败'); } }); } }, resetLogin: function(params) { $('form input').val(''); if (params.method === 'pwd') { $('#pwd_username').val(params.username); $('#pwd_pwd').focus(); } else if (params.method === 'otp') { $('#otp_username').val(params.username); $('#otp_pwd').focus(); } else if (params.method === 'sms') { $('#sms_username').val(params.username); $('#sms_pwd').focus(); } else if (params.method === 'ga') { $('#ga_username').val(params.username); $('#ga_pwd').focus(); } else if (params.method === 'neteaseotp') { $('#ne_username').val(params.username); $('#ne_pwd').focus(); } else if (params.method === 'thirdusb') { $('#thirdusb_username').val(params.username); $('#thirdusb_pwd').focus(); } login.reloadCaptcha(); }, redirect: function() { document.location.href = '/index.php/login/login_redirect'; }, setSignBoxMiddle: function () { var theme = $('.theme-heo'); if (theme.length == 1) { theme.find('.login-logo').remove(); var offset = ($('#sign-page').outerHeight() - $('#sign-box').outerHeight() - $('#sign-footer').outerHeight() - 100) / 2; $('#sign-box').css('top', offset); } } } //BJCA,非IE浏览器,UsbKey change事件 function OnUsbKeyChange() { if (login.tabtype == 'thirdusb') { $('a[data-tab-toggle="thirdusb"]').click(); } }