Help
RSS
API
Feed
Maltego
Contact
Domain > control.fs1.ro
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-12-06
89.36.25.41
(
ClassC
)
2026-01-05
172.67.178.240
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Mon, 05 Jan 2026 02:05:43 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveCache-Control: no-storecontent-security-policy: default-src none; font-src self fonts.gstatic.com data:; script-src self unsafe-inline ; connect-src self wss://control.fs1.ro; img-src self blob: data: data:; style-src self unsafe-inline fonts.googleapis.com; frame-src self blob: mcrouter:; media-src self; form-action self ; manifest-src selfReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sWWwrva%2BilDtToMN1Rbla2zSHIQ5Be5Aduhh%2FJ43Y5uOGK8P6Yo%2FOXD7NhKBW7xa%2BRgfJ0vn1rFpBlGXApwyjf55p%2FC7S%2BBpylEeMpQ%3D%3D}}referrer-policy: no-referrerSet-Cookie: xide30; path/; samesitelax; httponlySet-Cookie: xid.sigiKQGGC-5yjydFV0PDlVcBM9OpNfs8byg0UZAvs32FbQsPJLJ1_B_Myfhk1Zq691v; path/; samesitelax; httponlystrict-transport-security: max-age63072000x-content-type-options: nosniffx-frame-options: sameoriginx-xss-protection: 1; modeblockcf-cache-status: DYNAMICNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Server: cloudflareCF-RAY: 9b8f69859edcef0c-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html dirltr xmlnshttp://www.w3.org/1999/xhtml>head langen> meta http-equivX-UA-Compatible contentIEedge /> meta contenttext/html; charsetutf-8 http-equivContent-Type /> meta nameviewport contentuser-scalable1.0,initial-scale1.0,minimum-scale1.0,maximum-scale1.0 /> meta nameapple-mobile-web-app-capable contentyes /> meta nameformat-detection contenttelephoneno /> meta namerobots contentnoindex,nofollow> link relmanifest href/manifest.json> link relshortcut icon typeimage/x-icon href/favicon.ico /> link keeplink1 typetext/css hrefstyles/style.css mediascreen relstylesheet titleCSS /> link keeplink1 typetext/css hrefstyles/custom.css mediascreen relstylesheet titleCSS /> link relapple-touch-icon href/favicon-303x303.png /> script typetext/javascript srcscripts/common-0.0.1.js>/script> script keeplink1 typetext/javascript srcscripts/u2f-api.js>/script> script keeplink1 typetext/javascript srcscripts/custom.js>/script> title>Kiwi Remote - Login/title> style> #body { background-color: cadetblue; background: linear-gradient(to bottom right, #369, #036); } #flink a:link { color: #c8c8c8; } #flink a:visited { color: #c8c8c8; } #flink a:hover { color: #c8c8c8; } #flink a:active { color: #c8c8c8; } #welcomeText a:link { color: #FFF; } #welcomeText a:visited { color: #FFF; } #welcomeText a:hover { color: #FFF; } #welcomeText a:active { color: #FFF; } /style>/head>body idbody onloadif (typeof(startup) ! undefined) startup(); classarg_hide login> div idbackgroundImage styleposition:absolute;left:0;bottom:0;z-index:-1;height:60%;width:100%;opacity:0.1;background-image:url(welcome.png);background-repeat:no-repeat;background-position:left bottom;background-size:contain>/div> table idcentralTable classcontainer styleheight:100%;z-index:1> tr> td idlogincell> img idloginPicture /> div stylefont-size:46px;font-family:Arial,Helvetica,sans-serif;font-weight:bold;padding-bottom:10px;color:#c8c8c8;text-shadow: 2px 2px 2px #000;>Kiwi Remotesup stylefont-size:20px> /sup>/div> div idloginpanel styledisplay:none;box-shadow:1px 1px 4px #000> form idloginpanelform methodpost> input typehidden nameaction valuelogin /> div idmessage1>/div> div idloginuserpassdiv styledisplay:none> table stylewidth:100%> tr> td> input idusername titleUsername stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#FFF8CC autocompleteusername placeholderUsername typetext maxlength64 nameusername required onchangevalidateLogin(1) onkeyupvalidateLogin(1,event) /> /td> /tr> tr> td> input idpassword titlePassword stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#FFF8CC autocompletecurrent-password placeholderPassword typepassword maxlength256 namepassword required onchangevalidateLogin(2) onkeyupvalidateLogin(2,event) /> /td> /tr> tr> td> div idshowPassHintLink titlePassword Hint stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#FFF8CC;display:none>a onclickreturn showPassHint(event); href# stylecursor:pointer>Show Hint/a>/div> /td> /tr> tr> td> input idloginButton stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px onclicksubmitButtonClicked(loginpanelform) typebutton valueLog In /> /td> /tr> tr idtopLanguageSelectRow styledisplay:none>td idtopLanguageSelect>/td>/tr> /table> div idhrAccountDiv styledisplay:none>hr />/div> div idresetAccountDiv styledisplay:none;padding:2px> span idresetAccountSpan>Forgot username/password?/span> a onclickreturn xgo(3,event); href# stylecursor:pointer>Reset account/a>. /div> div idnewAccountDiv styledisplay:none;padding:2px;padding-top:10px> Don't have an account? a onclickreturn xgo(2,event); href# stylecursor:pointer>Create one/a>. /div> /div> input idloginformargs nameurlargs typehidden value /> div idauthStrategies styledisplay:none> hr idloginuserpasshr styledisplay:none /> div stylemargin-bottom:8px>Log in using an existing account/div> a idauth-twitter hrefauth-twitter styledisplay:none>img srcimages/login/twitter32.png srcsetimages/login/twitter64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using Twitter />/a> a idauth-google hrefauth-google styledisplay:none>img srcimages/login/google32.png srcsetimages/login/google64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using Google />/a> a idauth-github hrefauth-github styledisplay:none>img srcimages/login/github32.png srcsetimages/login/github64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using GitHub />/a> a idauth-azure hrefauth-azure styledisplay:none>img srcimages/login/azure32.png srcsetimages/login/azure64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using Azure />/a> a idauth-oidc hrefauth-oidc styledisplay:none>img srcimages/login/oidc32.png srcsetimages/login/oidc64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using OpenID Connect />/a> a idauth-oidc-azure hrefauth-oidc styledisplay:none>img srcimages/login/azure32.png srcsetimages/login/azure64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in with Azure using OpenID Connect />/a> a idauth-oidc-google hrefauth-oidc styledisplay:none>img srcimages/login/google32.png srcsetimages/login/google64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in with Google using OpenID Connect />/a> a idauth-jumpcloud hrefauth-jumpcloud styledisplay:none>img srcimages/login/jumpcloud32.png srcsetimages/login/jumpcloud64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using JumpCloud />/a> a idauth-intel hrefauth-intel styledisplay:none>img srcimages/login/intel32.png srcsetimages/login/intel64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSign-in using Intel />/a> a idauth-saml hrefauth-saml styledisplay:none>img srcimages/login/generic32.png srcsetimages/login/generic64.png 2x loadinglazy width32 height32 stylemargin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer titleSingle Sign-in />/a> /div> /form> /div> div idcreatepanel styledisplay:none;position:relative> form idcreatepanelform methodpost> input typehidden nameaction valuecreateaccount /> div idmessage2>/div> div> b>Account Creation/b> /div> div idpasswordPolicyCallout styledisplay:none>/div> table> tr idnuUserRow> td idnuUser alignright width100>Username:/td> td>input idausername typetext autocompleteusername nameusername onchangevalidateCreate(1) maxlength64 onkeydownhaltReturn(event) onkeyupvalidateCreate(1,event) />/td> /tr> tr> td idnuEmail alignright width100>Email:/td> td>input idaemail typetext autocompleteemail inputmodeemail nameemail onchangevalidateCreate(2) maxlength256 onkeydownhaltReturn(event) onkeyupvalidateCreate(2,event) />/td> /tr> tr> td idnuPass1 alignright>Password:/td> td>input idapassword1 typepassword namepassword1 autocompletenew-password maxlength256 onkeydownhaltReturn(event) onchangevalidateCreate(3,event) onkeyupvalidateCreate(3,event) />/td> /tr> tr> td idnuPass2 alignright>Password:/td> td>input idapassword2 typepassword namepassword2 autocompletenew-password maxlength256 onkeydownhaltReturn(event) onchangevalidateCreate(4,event) onkeyupvalidateCreate(4,event) />/td> /tr> tr idcreatePanelHint styledisplay:none> td idnuHint alignright>Password Hint:/td> td>input idapasswordhint typetext nameapasswordhint autocompleteoff maxlength256 onkeydownhaltReturn(event) onchangevalidateCreate(5,event) onkeyupvalidateCreate(5,event) />/td> /tr> tr idnewAccountPass titleEnter the account creation token> td idnuToken alignright>Creation Token:/td> td>input idanewaccountpass typepassword nameanewaccountpass autocompleteoff maxlength256 onkeydownhaltReturn(event) onchangevalidateCreate(6,event) onkeyupvalidateCreate(6,event) />/td> /tr> tr idnewAccountCaptchaImg titleCAPTCHA image> td>/td> td colspan2>img src loadinglazy />/td> /tr> tr idnewAccountCaptcha titleSecurity check> td idnuCaptcha alignright>Security Check:/td> td>input idanewaccountcaptcha typetext nameanewaccountcaptcha autocompleteoff maxlength256 onkeydownhaltReturn(event) onchangevalidateCreate(7,event) onkeyupvalidateCreate(7,event) />/td> /tr> tr> td colspan2> div stylefloat:right>input idcreateButton typebutton onclicksubmitButtonClicked(createpanelform) valueCreate Account disableddisabled />/div> div idpassWarning stylepadding-top:6px>/div> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idcreateformargs nameurlargs typehidden value /> input idcreateformcaptcha namecaptchaargs typehidden value /> /form> /div> div idresetpanel styledisplay:none> form idresetpanelform methodpost> input typehidden nameaction valueresetaccount /> div idmessage3>/div> div> b>Account Reset/b> /div> table stylewidth:100%;margin-top:4px;margin-bottom:4px> tr> td> input idremail titleEmail stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#FFF8CC autocompleteusername placeholderEmail typetext maxlength256 nameemail onchangevalidateReset() onkeyupvalidateReset(event) /> /td> /tr> tr> td> input ideresetButton stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px typebutton onclicksubmitButtonClicked(resetpanelform) valueReset Account disableddisabled /> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idresetformargs nameurlargs typehidden value /> /form> /div> div idtokenpanel styledisplay:none> form idtokenpanelform methodpost autocompleteoff> input typehidden nameaction valuetokenlogin /> input typehidden namehwstate value /> div idmessage4>/div> table stylewidth:100%> tr> td> input idtokenInput autocompleteone-time-code titleToken stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#FFF8CC placeholderToken typetext maxlength50 nametoken onchangecheckToken(event) onpastecheckToken(event) onkeyupcheckToken(event) onkeydowncheckToken(event) />br /> input idhwtokenInput typetext namehwtoken styledisplay:none /> /td> /tr> tr> td> div> input idtokenOkButton stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px typebutton onclicksubmitButtonClicked(tokenpanelform) valueLog In disableddisabled /> /div> /td> /tr> tr> td stylealign-content:center;padding-top:10px> label idtokenInputRememberLabel>input idtokenInputRemember nameremembertoken typecheckbox />span idtokenInputRememberSpan>/span>/label> /td> /tr> tr id2farow> td> hr /> div> img idsecurityKeyButton srcimages/login/2fa-key-48.png srcsetimages/login/2fa-key-96.png 2x titleUse Security Key loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseSecurityKey(1) /> img idsmsKeyButton srcimages/login/2fa-sms-48.png srcsetimages/login/2fa-sms-96.png 2x titleSMS loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseSMSToken(1) /> img idmsgKeyButton srcimages/login/2fa-messaging-48.png srcsetimages/login/2fa-messaging-96.png 2x titleMessaging loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseMsgToken(1) /> img idemailKeyButton srcimages/login/2fa-mail-48.png srcsetimages/login/2fa-mail-96.png 2x titleEmail loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseEmailToken(1) /> img idpushKeyButton srcimages/login/2fa-push-48.png srcsetimages/login/2fa-push-96.png 2x titleDevice Authentication loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickusePushToken(1) /> img idduoKeyButton srcimages/login/2fa-duo-48.png srcsetimages/login/2fa-duo-96.png 2x titleDuo Authentication loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseDuoToken(1) /> /div> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idtokenformargs nameurlargs typehidden value /> /form> /div> div idresettokenpanel styledisplay:none> form idresettokenpanelform methodpost> input typehidden nameaction valueresetaccount /> div idmessage5>/div> table stylewidth:100%> tr> td> input idresetTokenInput autocompleteone-time-code titleToken stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#FFF8CC placeholderToken typetext maxlength50 nametoken onchangeresetCheckToken(event) onpasteresetCheckToken(event) onkeyupresetCheckToken(event) onkeydownresetCheckToken(event) />br /> input idresetHwtokenInput typetext namehwtoken styledisplay:none /> /td> /tr> tr> td> div> input idresetTokenOkButton stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px typebutton onclicksubmitButtonClicked(resettokenpanelform) valueLog In disableddisabled /> /div> /td> /tr> tr id2farow2> td colspan2> hr /> div> img idsecurityKeyButton2 srcimages/login/2fa-key-48.png srcsetimages/login/2fa-key-96.png 2x titleUse Security Key loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseSecurityKey(2) /> img idsmsKeyButton2 srcimages/login/2fa-sms-48.png srcsetimages/login/2fa-sms-96.png 2x titleSMS loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseSMSToken(2) /> img idmsgKeyButton2 srcimages/login/2fa-msg-48.png srcsetimages/login/2fa-msg-96.png 2x titleSMS loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseMsgToken(2) /> img idemailKeyButton2 srcimages/login/2fa-mail-48.png srcsetimages/login/2fa-mail-96.png 2x titleEmail loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseEmailToken(2) /> img idpushKeyButton2 srcimages/login/2fa-push-48.png srcsetimages/login/2fa-push-96.png 2x titleDevice Authentication loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickusePushToken(2) /> img idduoKeyButton2 srcimages/login/2fa-duo-48.png srcsetimages/login/2fa-duo-96.png 2x titleDuo Authentication loadinglazy width48 height48 styledisplay:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px black;cursor:pointer;background-color:#FFF onclickuseDuoToken(2) /> /div> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idresettokenformargs nameurlargs typehidden value /> /form> /div> div idresetpasswordpanel styledisplay:none;position:relative> form idresetpasswordpanelform methodpost> input typehidden nameaction valueresetpassword /> div idmessage6>/div> div idrpasswordPolicyCallout styledisplay:none>/div> table> tr> td idrnuPass1 width100 alignright>Password:/td> td>input idrapassword1 typepassword namerpassword1 autocompleteoff maxlength256 onkeydownhaltReturn(event) onchangevalidatePassReset(3,event) onkeyupvalidatePassReset(3,event) />/td> /tr> tr> td idrnuPass2 alignright>Password:/td> td>input idrapassword2 typepassword namerpassword2 autocompleteoff maxlength256 onkeydownhaltReturn(event) onchangevalidatePassReset(4,event) onkeyupvalidatePassReset(4,event) />/td> /tr> tr idresetpasswordpanelHint styledisplay:none> td idrnuHint alignright>Password Hint:/td> td>input idrapasswordhint typetext namerpasswordhint autocompleteoff maxlength256 onkeydownhaltReturn(event) onchangevalidatePassReset(5,event) onkeyupvalidatePassReset(5,event) />/td> /tr> tr> td colspan2> div stylefloat:right>input idresetPassButton typebutton onclicksubmitButtonClicked(resetpasswordpanelform) valueReset Password disableddisabled />/div> div idrpassWarning stylepadding-top:6px>/div> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idresetpasswordformargs nameurlargs typehidden value /> /form> /div> div idcheckemailpanel styledisplay:none;position:relative> form idcheckemailpanelform methodpost> input typehidden nameaction valuecheckemail /> div idmessage7>/div> table idcheckCheckOperations stylewidth:100%;display:none> tr> td> div idunconfirmedEmail>/div>br /> /td> /tr> tr> td> div> input idchangeEmailButton typebutton valueChange Email Address onclickchangeEmailAddress() /> input idcheckEmailButton2 typebutton valueResend Confirmation Email onclickresentEmailConfirmation() /> input idcheckEmailButton typebutton onclicksubmitButtonClicked(checkemailpanelform) styledisplay:none /> input idcheckEmailVal nameemail typehidden value /> /div> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idcheckemailformargs nameurlargs typehidden value /> /form> /div> div idwaitpushpanel styledisplay:none> form idwaitpushpanelform methodpost> input typehidden nameaction valuepushlogin /> div idmessage8>/div> table stylewidth:100%> tr> td stylealign-content:center;padding-top:10px> img idwaitpushpanelimage srcimages/login/push-150.png srcsetimages/login/push-300.png 2x styleopacity:0.3 loadinglazy width265 height150 /> /td> /tr> tr> td stylealign-content:center;padding-top:10px> label idtokenInputRememberLabel2>input idtokenInputRemember2 nameremembertoken typecheckbox />span idtokenInputRememberSpan2>/span>/label> /td> /tr> /table> hr />a onclickreturn xgo(1,event); href# stylecursor:pointer>Back to login/a> input idpushtokenformargs nameurlargs typehidden value /> input idpushtokenInput namehwstate typehidden value /> input idpushOkButton onclicksubmitButtonClicked(waitpushpanelform) styledisplay:none /> /form> /div> /td> /tr> tr idwelcomeTextRow>td>div idwelcomeText stylecolor:white;text-align:center;margin-left:20px;margin-right:20px>/div>/td>/tr> tr idbottomLanguageSelectRow styledisplay:none;text-align:center>td idbottomLanguageSelect>/td>/tr> tr styleheight:20px> td> div> div idflink stylefloat:right;margin-right:4px;color:#c8c8c8> a hrefterms>Terms & Privacy/a>/div> div idflink stylemargin-left:4px;color:#c8c8c8>/div> /div> /td> /tr> /table> div iddialog styledisplay:none> div iddialogHeader> div idid_dialogclose stylefloat:right;padding:5px;cursor:pointer onclicksetDialogMode()>b>X/b>/div> div idid_dialogtitle stylepadding:5px>/div> div stylewidth:100%;margin:6px>/div> /div> div iddialogBody> div iddialog1> div idid_dialogMessage style>/div> /div> div iddialog2 style> div idid_dialogOptions>/div> /div> /div> div ididx_dlgButtonBar style> input ididx_dlgCancelButton typebutton valueCancel style onclickdialogclose(0)> input ididx_dlgOkButton typebutton valueOK style onclickdialogclose(1)> /div> /div> script> use strict; var random 48+fXTQA/6l5zy/el2rrmgLhTMwKed6mS5PP8/h4w/sRKtlwdZWZQ00A39MvOtre5jkcVA6OHESXtgX6lU4r7lhvkb2AHxm1BsYiXyiaP09dWUcOTxRJ+xe7uTP1l1eMvi1RMiwoIbONV6FS9+d3tXRAzC45tbhl+LUM9DbhG/J37ouTXklpdGSoKkLWztl9I2RSjl3eBJRbLh5f1+r7vm88nDLCc1jX5EuIBv2BRM0XwI3cq/bUPkAkPQKbHtQt52Vp0p3Oan0hmn9Bs/VqFojuOoELTx1q+l6QQvZC5+agR/YObTYtNU5EQFxw // Random length string for BREACH mitigation var welcomePictureFullScreen (decodeURIComponent(false) true); var passlogin true; var passhint ; var loginMode ; var newAccount false; var newAccountPass parseInt(0); var newAccountCaptcha ; var emailCheck false; var passRequirements ; var hardwareKeyChallenge decodeURIComponent(); if (passRequirements ! ) { passRequirements JSON.parse(decodeURIComponent(passRequirements)); } else { passRequirements {}; } var passRequirementsEx ((passRequirements.min ! null) || (passRequirements.max ! null) || (passRequirements.upper ! null) || (passRequirements.lower ! null) || (passRequirements.numeric ! null) || (passRequirements.nonalpha ! null)); var features parseInt(0); var welcomeText decodeURIComponent(); var currentpanel 0; var publicKeyCredentialRequestOptions null; var otpduo (decodeURIComponent(false) true); var otpemail (decodeURIComponent(false) true); var otpsms (decodeURIComponent(false) true); var otpmsg (decodeURIComponent(false) true); var otppush (decodeURIComponent(false) true); var autofido (decodeURIComponent(false) true); var twoFactorCookieDays parseInt(30); var authStrategies .split(,); var tokenTimeout parseInt(300000); var websocket null; var formSubmitted false; var serverLangs en,ar,bs,ca,cs,da,de,el,es,fi,fr,he,hi,hr,hu,it,ja-jp,ja,ko,nl,pl,pt-br,pt,ro,ru,sr,sv,tr,uk,zh-chs,zh-cht.split(,); var loclist { af: Afrikaans, sq: Albanian, ar: Arabic (Standard), ar-dz: Arabic (Algeria), ar-bh: Arabic (Bahrain), ar-eg: Arabic (Egypt), ar-iq: Arabic (Iraq), ar-jo: Arabic (Jordan), ar-kw: Arabic (Kuwait), ar-lb: Arabic (Lebanon), ar-ly: Arabic (Libya), ar-ma: Arabic (Morocco), ar-om: Arabic (Oman), ar-qa: Arabic (Qatar), ar-sa: Arabic (Saudi Arabia), ar-sy: Arabic (Syria), ar-tn: Arabic (Tunisia), ar-ae: Arabic (U.A.E.), ar-ye: Arabic (Yemen), an: Aragonese, hy: Armenian, as: Assamese, ast: Asturian, az: Azerbaijani, eu: Basque, bg: Bulgarian, be: Belarusian, bn: Bengali, bs: Bosnian, br: Breton, my: Burmese, ca: Catalan, ch: Chamorro, ce: Chechen, zh: Chinese, zh-hk: Chinese (Hong Kong), zh-cn: Chinese (PRC), zh-sg: Chinese (Singapore), zh-tw: Chinese (Taiwan), cv: Chuvash, co: Corsican, cr: Cree, hr: Croatian, cs: Czech, da: Danish, nl: Dutch (Standard), nl-be: Dutch (Belgian), en: English, en-au: English (Australia), en-bz: English (Belize), en-ca: English (Canada), en-ie: English (Ireland), en-jm: English (Jamaica), en-nz: English (New Zealand), en-ph: English (Philippines), en-za: English (South Africa), en-tt: English (Trinidad & Tobago), en-gb: English (United Kingdom), en-us: English (United States), en-zw: English (Zimbabwe), eo: Esperanto, et: Estonian, fo: Faeroese, fa: Farsi (Persian), fj: Fijian, fi: Finnish, fr: French (Standard), fr-be: French (Belgium), fr-ca: French (Canada), fr-fr: French (France), fr-lu: French (Luxembourg), fr-mc: French (Monaco), fr-ch: French (Switzerland), fy: Frisian, fur: Friulian, gd: Gaelic (Scots), gd-ie: Gaelic (Irish), gl: Galacian, ka: Georgian, de: German (Standard), de-at: German (Austria), de-de: German (Germany), de-li: German (Liechtenstein), de-lu: German (Luxembourg), de-ch: German (Switzerland), el: Greek, gu: Gujurati, ht: Haitian, he: Hebrew, hi: Hindi, hu: Hungarian, is: Icelandic, id: Indonesian, iu: Inuktitut, ga: Irish, it: Italian (Standard), it-ch: Italian (Switzerland), ja: Japanese, kn: Kannada, ks: Kashmiri, kk: Kazakh, km: Khmer, ky: Kirghiz, tlh: Klingon, ko: Korean, ko-kp: Korean (North Korea), ko-kr: Korean (South Korea), la: Latin, lv: Latvian, lt: Lithuanian, lb: Luxembourgish, mk: FYRO Macedonian, ms: Malay, ml: Malayalam, mt: Maltese, mi: Maori, mr: Marathi, mo: Moldavian, nv: Navajo, ng: Ndonga, ne: Nepali, no: Norwegian, nb: Norwegian (Bokmal), nn: Norwegian (Nynorsk), oc: Occitan, or: Oriya, om: Oromo, fa-ir: Persian/Iran, pl: Polish, pt: Portuguese, pt-br: Portuguese (Brazil), pa: Punjabi, pa-in: Punjabi (India), pa-pk: Punjabi (Pakistan), qu: Quechua, rm: Rhaeto-Romanic, ro: Romanian, ro-mo: Romanian (Moldavia), ru: Russian, ru-mo: Russian (Moldavia), sz: Sami (Lappish), sg: Sango, sa: Sanskrit, sc: Sardinian, sd: Sindhi, si: Singhalese, sr: Serbian, sk: Slovak, sl: Slovenian, so: Somani, sb: Sorbian, es: Spanish, es-ar: Spanish (Argentina), es-bo: Spanish (Bolivia), es-cl: Spanish (Chile), es-co: Spanish (Colombia), es-cr: Spanish (Costa Rica), es-do: Spanish (Dominican Republic), es-ec: Spanish (Ecuador), es-sv: Spanish (El Salvador), es-gt: Spanish (Guatemala), es-hn: Spanish (Honduras), es-mx: Spanish (Mexico), es-ni: Spanish (Nicaragua), es-pa: Spanish (Panama), es-py: Spanish (Paraguay), es-pe: Spanish (Peru), es-pr: Spanish (Puerto Rico), es-es: Spanish (Spain), es-uy: Spanish (Uruguay), es-ve: Spanish (Venezuela), sx: Sutu, sw: Swahili, sv: Swedish, sv-fi: Swedish (Finland), sv-sv: Swedish (Sweden), ta: Tamil, tt: Tatar, te: Teluga, th: Thai, tig: Tigre, ts: Tsonga, tn: Tswana, tr: Turkish, tk: Turkmen, uk: Ukrainian, hsb: Upper Sorbian, ur: Urdu, ve: Venda, vi: Vietnamese, vo: Volapuk, wa: Walloon, cy: Welsh, xh: Xhosa, ji: Yiddish, zu: Zulu }; var loclistex { zh-chs: Chinese (Simplified), zh-cht: Chinese (Traditional) }; var showLanguageSelect false; function startup() { if (decodeURIComponent(false) true) { Q(loginPicture).src loginlogo.png; } QV(welcomeTextRow, welcomeText ! ); QH(welcomeText, welcomeText); // Change the background image to full screen if (welcomePictureFullScreen) { QS(backgroundImage).height 100%; QS(backgroundImage).opacity 1; QS(backgroundImage)background-position center center; QS(backgroundImage)background-size cover; } // Display the right server message var i; var messageid parseInt(); var okmessages , If valid, reset mail sent., Email sent., Email verification required, check your mailbox and click the confirmation link., SMS sent., Sending notification..., Message sent.; var failmessages Unable to create account., Account limit reached., Existing account with this email address., Invalid account creation token., Username already exists., Password rejected, use a different one., Invalid email., Account not found., Invalid token, try again., Unable to sent email., Account locked., Access denied., Login failed, check username and password., Password change requested., IP address blocked, try again later., Server under maintenance., Unable to send device notification., Invalid security check.; if (messageid > 0) { var msg ; if ((messageid 100) && (messageid okmessages.length)) { msg okmessagesmessageid; } else if ((messageid > 100) && ((messageid - 100) failmessages.length)) { msg failmessagesmessageid - 100; } if (msg ! ) { if (messageid > 100) { msg (span classmsg error>b stylecolor:#8C001A> + msg + b>/span>br />br />); } else { msg (span classmsg success>b> + msg + /b>/span>br />br />); } for (i 1; i 9; i++) { QH(message + i, msg); } } } // Display flash error Messages var flashErrors JSON.parse(); if (flashErrors && (flashErrors.length > 0)) { var msg ; for (i 0; i flashErrors.length; i++) { if (flashErrorsi) { msg + span classmsg error>b stylecolor:#8C001A> + flashErrorsi + b>/span>br />br />; } } QH(message1, msg); QV(message1, true); } // Fix links if a loginKey if used var urlargs parseUriArgs(); //if (urlargs.key) { Q(termsLinkFooter).href + ?key + urlargs.key; } // Show Language Select Box if needed if (showLanguageSelect top || showLanguageSelect bottom) { var x select idd2langselect stylebox-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px onChangechangeLanguage()>; x + option value*> + Use Browser Language + /option>; for (var i in serverLangs) { var lang serverLangsi; x + option value + lang + + ((urlargs.lang lang)? selected:) + > + lang + - + (loclistlang?loclistlang:loclistexlang) + /option>; } QH(showLanguageSelect+LanguageSelect, x); if (showLanguageSelect top) QS(showLanguageSelect+LanguageSelect)padding-top 5px; QV(showLanguageSelect+LanguageSelectRow, true); } // Show user/pass login passlogin (passlogin true); if (urlargs.passlogin 1) { passlogin true; } if (urlargs.passlogin 0) { passlogin false; } QV(loginuserpassdiv, passlogin) QV(loginuserpasshr, passlogin) // Setup two factor cookie time if (twoFactorCookieDays > 0) { QV(tokenInputRememberLabel, true); QH(tokenInputRememberSpan, format(Remember this device for {0} days., twoFactorCookieDays)); QV(tokenInputRememberLabel2, true); QH(tokenInputRememberSpan2, format(Remember this device for {0} days., twoFactorCookieDays)); } else { QV(tokenInputRememberLabel, false); QV(tokenInputRememberLabel2, false); } // If URL arguments are provided, add them to form posts if (window.location.href.indexOf(?) > 0) { var xurlargs window.location.href.substring(window.location.href.indexOf(?)); Q(loginformargs).value xurlargs; Q(createformargs).value xurlargs; Q(resetformargs).value xurlargs; Q(tokenformargs).value xurlargs; Q(pushtokenformargs).value xurlargs; Q(resettokenformargs).value xurlargs; Q(resetpasswordformargs).value xurlargs; Q(checkemailformargs).value xurlargs; } if ((features & 32) 0) { // Guard against other sites top frames (web bugs). var loc null; try { loc top.location.toString().toLowerCase(); } catch (e) { } if (top ! self && (loc null || top.active false)) { top.location self.location; return; } } if (features & 0x200000) { // Email is username Q(username).placeholder Email; QH(resetAccountSpan, Forgot password?); QV(nuUserRow, false); } QV(createPanelHint, passRequirements.hint true); QV(resetpasswordpanelHint, passRequirements.hint true); // Setup authentication strategies if (authStrategies ! ) { QV(authStrategies, true); if (authStrategies.indexOf(twitter) > 0) { QV(auth-twitter, true); } if (authStrategies.indexOf(google) > 0) { QV(auth-google, true); } if (authStrategies.indexOf(github) > 0) { QV(auth-github, true); } if (authStrategies.indexOf(azure) > 0) { QV(auth-azure, true); } if (authStrategies.indexOf(oidc) > 0) { QV(auth-oidc, true); } if (authStrategies.indexOf(oidc-azure) > 0) { QV(auth-oidc-azure, true); } if (authStrategies.indexOf(oidc-google) > 0) { QV(auth-oidc-google, true); } if (authStrategies.indexOf(jumpcloud) > 0) { QV(auth-jumpcloud, true); } if (authStrategies.indexOf(intel) > 0) { QV(auth-intel, true); } if (authStrategies.indexOf(saml) > 0) { QV(auth-saml, true); } } validateCreate(); if (loginMode.length ! 0) { go(parseInt(loginMode)); } else { go(1); } QV(newAccountDiv, (newAccount 1) || (newAccount true)); // If new accounts are not allowed, dont display the new account link. if ((passhint ! null) && (passhint.length > 0)) { QV(showPassHintLink, true); } QV(newAccountPass, (newAccountPass 1)); QV(newAccountCaptcha, (newAccountCaptcha ! )); QV(newAccountCaptchaImg, (newAccountCaptcha ! )); QV(resetAccountDiv, (emailCheck true)); QV(hrAccountDiv, (emailCheck true) || (newAccountPass 1)); if (loginMode 4) { if (tokenTimeout > 0) { setTimeout(function () { Q(hwtokenInput).value **timeout**; QE(tokenOkButton, true); Q(tokenOkButton).click(); }, tokenTimeout); } try { if (hardwareKeyChallenge.length > 0) { hardwareKeyChallenge JSON.parse(hardwareKeyChallenge); } else { hardwareKeyChallenge null; } } catch (ex) { hardwareKeyChallenge null } var twofakey (hardwareKeyChallenge ! null) && (hardwareKeyChallenge.type webAuthn); var emailkey otpemail && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var smskey otpsms && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var msgkey otpmsg && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var pushkey otppush && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var duokey otpduo && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); QV(securityKeyButton, twofakey); QV(emailKeyButton, emailkey); QV(smsKeyButton, smskey); QV(msgKeyButton, msgkey); QV(pushKeyButton, pushkey); QV(duoKeyButton, duokey); QV(2farow, twofakey || emailkey || smskey || msgkey || pushkey || duokey); // If hardware key is an option, trigger it now if (autofido && twofakey) { setTimeout(function () { useSecurityKey(1); }, 300); } } if (loginMode 5) { if (tokenTimeout > 0) { setTimeout(function () { Q(hwtokenInput).value **timeout**; QE(tokenOkButton, true); Q(tokenOkButton).click(); }, tokenTimeout); } try { if (hardwareKeyChallenge.length > 0) { hardwareKeyChallenge JSON.parse(hardwareKeyChallenge); } else { hardwareKeyChallenge null; } } catch (ex) { hardwareKeyChallenge null } var twofakey (hardwareKeyChallenge ! null) && (hardwareKeyChallenge.type webAuthn); var emailkey otpemail && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var smskey otpsms && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var msgkey otpmsg && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var pushkey otppush && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); var duokey otpduo && (messageid ! 2) && (messageid ! 4) && (messageid ! 6); QV(securityKeyButton2, twofakey); QV(emailKeyButton2, emailkey); QV(smsKeyButton2, smskey); QV(msgKeyButton2, msgkey); QV(pushKeyButton2, pushkey); QV(duoKeyButton2, duokey); QV(2farow2, twofakey || emailkey || smskey || msgkey || pushkey || duokey); // If hardware key is an option, trigger it now if (autofido && twofakey) { setTimeout(function () { useSecurityKey(2); }, 300); } } if (loginMode 8) { // Perform websocket connection to server to wait for device authentication websocket new WebSocket(passhint); websocket.onopen function (e) { QS(waitpushpanelimage)opacity 1; } websocket.onmessage function (e) { if (typeof e.data ! string) { this.close(); } var r null; try { r JSON.parse(e.data); } catch (ex) { } if (r.sent true) { // Request was sent QH(message8, span classmsg success>b> + format(Request sent, {0}., r.code) + /b>/span>br />br />); } else if (r.sent false) { // Request failed to send QH(message8, span classmsg error>b stylecolor:#8C001A> + Failed to send request. + b>/span>br />br />); QV(tokenInputRememberLabel2, false); this.close(); } else if (r.approved true) { // Request approved this.close(); QV(tokenInputRememberLabel2, false); QH(message8, span classmsg success>b> + Request Accepted. + /b>/span>br />br />); Q(pushtokenInput).value r.token; Q(pushOkButton).click(); } else { // Request rejected QH(message8, span classmsg error>b stylecolor:#8C001A> + Access Rejected. + b>/span>br />br />); QV(tokenInputRememberLabel2, false); this.close(); } } websocket.onclose function (e) { QS(waitpushpanelimage)opacity 0.3; } websocket.onerror function (e) { QH(message8, span classmsg error>b stylecolor:#8C001A> + Connection Error + b>/span>br />br />); QS(waitpushpanelimage)opacity 0.5; } } } function changeLanguage() { var lang Q(d2langselect).value; var urlParams new URLSearchParams(window.location.search); if(lang*){ urlParams.delete(lang) } else { urlParams.set(lang, lang); } var newURL window.location.pathname + ? + urlParams.toString(); window.location.href newURL; } // Use a hardware security key function useSecurityKey(panelAction) { if ((hardwareKeyChallenge ! null) && (hardwareKeyChallenge.type webAuthn)) { if (typeof hardwareKeyChallenge.challenge string) { hardwareKeyChallenge.challenge Uint8Array.from(atob(hardwareKeyChallenge.challenge), function (c) { return c.charCodeAt(0) }).buffer; } publicKeyCredentialRequestOptions { challenge: hardwareKeyChallenge.challenge, allowCredentials: , timeout: hardwareKeyChallenge.timeout, userVerification: hardwareKeyChallenge.userVerification ? hardwareKeyChallenge.userVerification : preferred } for (var i 0; i hardwareKeyChallenge.keyIds.length; i++) { publicKeyCredentialRequestOptions.allowCredentials.push( { id: Uint8Array.from(atob(hardwareKeyChallenge.keyIdsi), function (c) { return c.charCodeAt(0) }), type: public-key, transports: usb, ble, nfc, internal } ); } // New WebAuthn hardware keys navigator.credentials.get({ publicKey: publicKeyCredentialRequestOptions }).then( function (rawAssertion) { var assertion { id: btoa(String.fromCharCode.apply(null, new Uint8Array(rawAssertion.rawId))), clientDataJSON: btoa(String.fromCharCode.apply(null, new Uint8Array(rawAssertion.response.clientDataJSON))), userHandle: btoa(String.fromCharCode.apply(null, new Uint8Array(rawAssertion.response.userHandle))), signature: btoa(String.fromCharCode.apply(null, new Uint8Array(rawAssertion.response.signature))), authenticatorData: btoa(String.fromCharCode.apply(null, new Uint8Array(rawAssertion.response.authenticatorData))), }; if (panelAction 1) { Q(hwtokenInput).value JSON.stringify(assertion); QE(tokenOkButton, true); Q(tokenOkButton).click(); } else if (panelAction 2) { Q(resetHwtokenInput).value JSON.stringify(assertion); QE(resetTokenOkButton, true); Q(resetTokenOkButton).click(); } }, function (error) { console.log(credentials-get error, error); } ); } } function useEmailToken(panelAction) { if (otpemail ! true) return; setDialogMode(1, Secure Login, 3, useEmailKeyEx, Send token to registered email address?, panelAction); } function useEmailKeyEx(b, panelAction) { if (panelAction 1) { Q(hwtokenInput).value **email**; QE(tokenOkButton, true); Q(tokenOkButton).click(); } else if (panelAction 2) { Q(resetHwtokenInput).value **email**; QE(resetTokenOkButton, true); Q(resetTokenOkButton).click(); } } function useSMSToken(panelAction) { if (otpsms ! true) return; setDialogMode(1, Secure Login, 3, useSMSTokenEx, Send token to registered phone number?, panelAction); } function useSMSTokenEx(b, panelAction) { if (panelAction 1) { Q(hwtokenInput).value **sms**; QE(tokenOkButton, true); Q(tokenOkButton).click(); } else if (panelAction 2) { Q(resetHwtokenInput).value **sms**; QE(resetTokenOkButton, true); Q(resetTokenOkButton).click(); } } function useMsgToken(panelAction) { if (otpmsg ! true) return; setDialogMode(1, Secure Login, 3, useMsgTokenEx, Send token to messaging application?, panelAction); } function useMsgTokenEx(b, panelAction) { if (panelAction 1) { Q(hwtokenInput).value **msg**; QE(tokenOkButton, true); Q(tokenOkButton).click(); } else if (panelAction 2) { Q(resetHwtokenInput).value **msg**; QE(resetTokenOkButton, true); Q(resetTokenOkButton).click(); } } function usePushToken(panelAction) { if (panelAction 1) { Q(hwtokenInput).value **push**; QE(tokenOkButton, true); Q(tokenOkButton).click(); } else if (panelAction 2) { Q(resetHwtokenInput).value **push**; QE(resetTokenOkButton, true); Q(resetTokenOkButton).click(); } } function useDuoToken(panelAction) { if (panelAction 1) { Q(hwtokenInput).value **duo**; QE(tokenOkButton, true); Q(tokenOkButton).click(); } else if (panelAction 2) { Q(resetHwtokenInput).value **duo**; QE(resetTokenOkButton, true); Q(resetTokenOkButton).click(); } } function showPassHint(e) { messagebox(Password Hint, passhint); haltEvent(e); return false; } function xgo(x, e) { QV(message1, false); QV(message2, false); QV(message3, false); QV(message4, false); QV(message5, false); QV(message6, false); QV(message7, false); go(x); haltEvent(e); return false; } function go(x) { currentpanel x; setDialogMode(0); QV(showPassHintLink, false); QV(loginpanel, x 1); QV(createpanel, x 2); QV(resetpanel, x 3); QV(tokenpanel, x 4); QV(resettokenpanel, x 5); QV(resetpasswordpanel, x 6); QV(checkemailpanel, x 7); QV(waitpushpanel, x 8); if (x 1) { Q(username).focus(); } if (x 2) { if (features & 0x200000) { Q(aemail).focus(); } else { Q(ausername).focus(); } } // Email is username if (x 3) { Q(remail).focus(); } if (x 4) { Q(tokenInput).focus(); } if (x 5) { Q(resetTokenInput).focus(); } if (x 6) { Q(rapassword1).focus(); } if (x 7) { QH(unconfirmedEmail, passhint); QV(checkCheckOperations, Q(unconfirmedEmail).innerHTML ! ); QH(checkEmailVal, passhint); } } function submitButtonClicked(v) { if (!formSubmitted) { formSubmitted true; document.getElementById(v).submit(); } } function validateLogin(box, e) { setTimeout(function(){ setDialogMode(0); if ((e ! null) && (e.keyCode 13)) { if ((box 1) && (Q(username).value ! )) { Q(password).focus(); } else if ((box 2) && (Q(password).value ! )) { Q(loginButton).click(); } } if (e ! null) { haltEvent(e); } }, 100); } function validateCreate(box, e) { setDialogMode(0); var userok false; if (features & 0x200000) { userok true; } else { userok (Q(ausername).value.length > 0) && (Q(ausername).value.indexOf( ) -1) && (Q(ausername).value.indexOf() -1) && (Q(ausername).value.indexOf(,) -1); } var emailok (validateEmail(Q(aemail).value) true); var pass1ok (Q(apassword1).value.length > 0); var pass2ok (Q(apassword2).value.length > 0) && (Q(apassword2).value Q(apassword1).value); var newAccOk (newAccountPass 0) || (Q(anewaccountpass).value.length > 0); var newCaptchaOk (newAccountCaptcha ) || (Q(anewaccountcaptcha).value.length > 0); var ok (userok && emailok && pass1ok && pass2ok && newAccOk); // Color the fields QS(nuUser).color userok ? black : #7b241c; QS(nuEmail).color emailok ? black : #7b241c; QS(nuPass1).color pass1ok ? black : #7b241c; QS(nuPass2).color pass2ok ? black : #7b241c; QS(nuToken).color newAccOk ? black : #7b241c; QS(nuCaptcha).color newCaptchaOk ? black : #7b241c; if (Q(apassword1).value ) { QH(passWarning, ); QV(passwordPolicyCallout, false); } else { if (!passRequirementsEx) { // No password requirements, display password strength var passStrength checkPasswordStrength(Q(apassword1).value); if (passStrength > 80) { QH(passWarning, span stylecolor:green>b> + Strong Password + /b>span>); } else if (passStrength > 60) { QH(passWarning, span stylecolor:blue>b> + Good Password + /b>span>); } else { QH(passWarning, span stylecolor:red>b> + Weak Password + /b>span>); } } else { // Password requirements provided, use that var passReq checkPasswordRequirements(Q(apassword1).value, passRequirements); if (passReq false) { ok false; QS(nuPass1).color #7b241c; QS(nuPass2).color #7b241c; QH(passWarning, div stylecolor:red;cursor:pointer onclickshowPasswordPolicy()>b> + Password Policy + /b>div>); // This is also a link to the password policy QV(passwordPolicyCallout, true); QH(passwordPolicyCallout, passwordPolicyText(Q(apassword1).value)); } else { QH(passWarning, ); QV(passwordPolicyCallout, false); } } } if ((e ! null) && (e.keyCode 13)) { if ((box 1) && userok) { Q(aemail).focus(); } if ((box 2) && emailok) { Q(apassword1).focus(); } if ((box 3) && pass1ok) { Q(apassword2).focus(); } if ((box 4) && pass2ok) { if (passRequirements.hint true) { Q(apasswordhint).focus(); } else { box 5; } } if (box 5) { if (newAccountPass 1) { Q(anewaccountpass).focus(); } else { box 6; } } if (box 6) { if (newAccountCaptcha ! ) { Q(anewaccountcaptcha).focus(); } else { box 7; } } if (box 7) { Q(createButton).click(); } } if (e ! null) { haltEvent(e); } QE(createButton, ok); } function validatePassReset(box, e) { setDialogMode(0); var pass1ok (Q(rapassword1).value.length > 0); var pass2ok (Q(rapassword2).value.length > 0) && (Q(rapassword2).value Q(rapassword1).value); var ok (pass1ok && pass2ok); // Color the fields QS(rnuPass1).color pass1ok ? black : #7b241c; QS(rnuPass2).color pass2ok ? black : #7b241c; if (Q(rapassword1).value ) { QH(rpassWarning, ); QV(rpasswordPolicyCallout, false); } else { if (!passRequirementsEx) { // No password requirements, display password strength var passStrength checkPasswordStrength(Q(rapassword1).value); if (passStrength > 80) { QH(rpassWarning, span stylecolor:green>b> + Strong Password + /b>span>); } else if (passStrength > 60) { QH(rpassWarning, span stylecolor:blue>b> + Good Password + /b>span>); } else { QH(rpassWarning, span stylecolor:red>b> + Weak Password + /b>span>); } } else { // Password requirements provided, use that var passReq checkPasswordRequirements(Q(rapassword1).value, passRequirements); if (passReq false) { ok false; QS(rnuPass1).color #7b241c; QS(rnuPass2).color #7b241c; QH(rpassWarning, div stylecolor:red;cursor:pointer onclickshowPasswordPolicy()>b> + Password Policy + /b>div>); // This is also a link to the password policy QV(rpasswordPolicyCallout, true); QH(rpasswordPolicyCallout, passwordPolicyText(Q(rapassword1).value)); } else { QH(rpassWarning, ); QV(rpasswordPolicyCallout, false); } } } if ((e ! null) && (e.keyCode 13)) { if (box 2) { Q(rapassword1).focus(); } if (box 3) { Q(rapassword2).focus(); } if (box 4) { Q(rapasswordhint).focus(); } if (box 6) { Q(resetPassButton).click(); } } if (e ! null) { haltEvent(e); } QE(resetPassButton, ok); } function passwordPolicyText(pass) { var policy div styletext-align:left>; var counts strCount(pass); if (passRequirements.min && ((pass null) || (pass.length passRequirements.min))) { policy + format(Minimum length of {0}, passRequirements.min) + br />; } if (passRequirements.max && ((pass null) || (pass.length > passRequirements.max))) { policy + format(Maximum length of {0}, passRequirements.max) + br />; } if (passRequirements.upper && ((pass null) || (counts.upper passRequirements.upper))) { policy + format({0} upper case, passRequirements.upper) + br />; } if (passRequirements.lower && ((pass null) || (counts.lower passRequirements.lower))) { policy + format({0} lower case, passRequirements.lower) + br />; } if (passRequirements.numeric && ((pass null) || (counts.numeric passRequirements.numeric))) { policy + format({0} numeric, passRequirements.numeric) + br />; } if (passRequirements.nonalpha && ((pass null) || (counts.nonalpha passRequirements.nonalpha))) { policy + format({0} non-alphanumeric, passRequirements.nonalpha) + br />; } policy + /div>; return policy; } function showPasswordPolicy() { messagebox(Password Policy, passwordPolicyText()); } function validateReset(e) { setDialogMode(0); var x validateEmail(Q(remail).value); QE(eresetButton, x); if ((e ! null) && (e.keyCode 13) && (x true)) { Q(eresetButton).click(); } if (e ! null) { haltEvent(e); } } // Return a password strength score function checkPasswordStrength(password) { var r 0, letters {}, varCount 0, variations { digits: /\d/.test(password), lower: /a-z/.test(password), upper: /A-Z/.test(password), nonWords: /\W/.test(password) } if (!password) return 0; for (var i 0; i password.length; i++) { letterspasswordi (letterspasswordi || 0) + 1; r + 5.0 / letterspasswordi; } for (var c in variations) { varCount + (variationsc true) ? 1 : 0; } return parseInt(r + (varCount - 1) * 10); } // Check password requirements function checkPasswordRequirements(password, requirements) { if ((requirements null) || (requirements ) || (typeof requirements ! object)) return true; if (requirements.min) { if (password.length requirements.min) return false; } if (requirements.max) { if (password.length > requirements.max) return false; } var counts strCount(password); if (requirements.numeric && (counts.numeric requirements.numeric)) return false; if (requirements.lower && (counts.lower requirements.lower)) return false; if (requirements.upper && (counts.upper requirements.upper)) return false; if (requirements.nonalpha && (counts.nonalpha requirements.nonalpha)) return false; return true; } function strCount(password) { var counts { numeric: 0, lower: 0, upper: 0, nonalpha: 0 }; if (typeof password ! string) return counts; for (var i 0; i password.length; i++) { if (/\d/.test(passwordi)) { counts.numeric++; } if (/a-z/.test(passwordi)) { counts.lower++; } if (/A-Z/.test(passwordi)) { counts.upper++; } if (/\W/.test(passwordi)) { counts.nonalpha++; } } return counts; } function checkToken(e) { var t1 Q(tokenInput).value; var t2 t1.split( ).join(); if (t1 ! t2) { Q(tokenInput).value t2; } var enabled (Q(tokenInput).value.length 6) || (Q(tokenInput).value.length 8) || (Q(tokenInput).value.length 44); QE(tokenOkButton, enabled); if (enabled && (e ! null) && (e.keyCode 13)) { submitButtonClicked(tokenpanelform); } } function resetCheckToken(e) { var t1 Q(resetTokenInput).value; var t2 t1.split( ).join(); if (t1 ! t2) { Q(resetTokenInput).value t2; } var enabled (Q(resetTokenInput).value.length 6) || (Q(resetTokenInput).value.length 8) || (Q(resetTokenInput).value.length 44); QE(resetTokenOkButton, enabled); if (enabled && (e ! null) && (e.keyCode 13)) { submitButtonClicked(resettokenpanelform); } } function changeEmailAddress() { var email Q(unconfirmedEmail).innerHTML; var x addHtmlValue(Email, input iddp1email stylewidth:230px maxlength256 value + email + autocompleteoff onchangevalidateEmailAddress() onkeyupvalidateEmailAddress() />); setDialogMode(1, Email Confirmation, 3, changeEmailAddressEx, x); validateEmailAddress(); } function validateEmailAddress() { QE(idx_dlgOkButton, (validateEmail(Q(dp1email).value) true)); } function changeEmailAddressEx() { Q(checkEmailVal).value Q(dp1email).value; QH(unconfirmedEmail, Q(dp1email).value); Q(checkEmailButton).click(); } function resentEmailConfirmation() { Q(checkEmailVal).value Q(unconfirmedEmail).innerHTML; Q(checkEmailButton).click(); } // // POPUP DIALOG // // undefined Hidden, 1 Generic Message var xxdialogMode; var xxdialogFunc; var xxdialogButtons; var xxdialogTag; var xxcurrentView 0; // Display a dialog box // Parameters: Dialog Mode (0 none), Dialog Title, Buttons (1 OK, 2 Cancel, 3 OK & Cancel), Call back function(0 Cancel, 1 OK), Dialog Content (Mode 2 only) function setDialogMode(x, y, b, f, c, tag) { xxdialogMode x; xxdialogFunc f; xxdialogButtons b; xxdialogTag tag; QE(idx_dlgOkButton, true); QV(idx_dlgOkButton, b & 1); QV(idx_dlgCancelButton, b & 2); QV(id_dialogclose, (b & 2) || (b & 8)); QV(idx_dlgButtonBar, b & 7); if (y) QH(id_dialogtitle, y); for (var i 1; i 24; i++) { QV(dialog + i, i x); } // Edit this line when more dialogs are added QV(dialog, x); if (c) { if (x 2) { QH(id_dialogOptions, c); } else { QH(id_dialogMessage, c); } } } function dialogclose(x) { var f xxdialogFunc; var b xxdialogButtons; var t xxdialogTag; setDialogMode(); if (((b & 8) || x) && f) f(x, t); } function messagebox(t, m) { QH(id_dialogMessage, m); setDialogMode(1, t, 1); } function statusbox(t, m) { QH(id_dialogMessage, m); setDialogMode(1, t); } function getDocWidth() { if (window.innerWidth) return window.innerWidth; if (document.documentElement && document.documentElement.clientWidth && document.documentElement.clientWidth ! 0) return document.documentElement.clientWidth; return document.getElementsByTagName(body)0.clientWidth; } function haltEvent(e) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); return false; } function haltReturn(e) { if (e.keyCode 13) { haltEvent(e); } } function validateEmail(v) { var emailReg /^((^>()\\\\.,;:\s@+(\.^>()\\\\.,;:\s@+)*)|(.+))@((\0-9{1,3}\.0-9{1,3}\.0-9{1,3}\.0-9{1,3})|((a-zA-Z\-0-9+\.)+a-zA-Z{2,}))$/; return emailReg.test(v); } // New version function putstore(name, val) { try { if (typeof (localStorage) undefined) return; localStorage.setItem(name, val); } catch (e) { } } function getstore(name, val) { try { if (typeof (localStorage) undefined) return val; var v localStorage.getItem(name); if ((v null) || (v null)) return val; return v; } catch (e) { return val; } } function format(format) { var args Array.prototype.slice.call(arguments, 1); return format.replace(/{(\d+)}/g, function (match, number) { return typeof argsnumber ! undefined ? argsnumber : match; }); }; function addTextLink(subtext, text, link) { var i text.toLowerCase().indexOf(subtext.toLowerCase()); if (i -1) { return text; } return text.substring(0, i) + a href + link + > + subtext + /a> + text.substring(i + subtext.length); } function addHtmlValue(t, v) { return table>td stylewidth:120px;text-align:left> + t + td>b> + v + /b>/table>; } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]