Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Password Safe</title>
- <meta charset="UTF-8" />
- <meta name="copyright" content="Copyright © 2016 BeyondTrust Corporation" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <link rel="shortcut icon" href="../favicon.ico?h" />
- <style type="text/css">
- /* These styles are kept in the main document so the initial splash screenobdy
- displays immediately while the JavaScript application is being
- initialized. */
- body { /* fixes the splash page jump on load of the page */
- padding-top: 40px;
- }
- .main-splash-container {
- width: 450px;
- margin-left: auto;
- margin-right: auto;
- text-align: center;
- position: relative;
- }
- .main-splash-container .sub-container {
- position: relative;
- top: 112px;
- width: 450px;
- text-align: left;
- }
- .main-splash-container .status-container {
- margin-top: 4em;
- text-align: center;
- }
- .main-splash-container .initialization-messages {
- margin-top: 3em;
- }
- .main-splash-container .initialization-step {
- width: 175px;
- padding-bottom: 0.5em;
- margin-left: auto;
- margin-right: auto;
- text-align: left;
- }
- .main-splash-container .step-message {
- display: inline-block;
- width: 150px;
- }
- .main-splash-container .initialization-error {
- display: none;
- }
- .visuallyhidden {
- display: none !important;
- visibility: hidden !important;
- }
- </style>
- <!-- Load the Bootstrap style sheet immediately since it will affect
- the appearance of the splash screen. -->
- <link href="../libs/bootstrap/css/bootstrap.2.3.1.min.css" rel="Stylesheet" />
- </head>
- <body>
- <script type="text/javascript">
- document.msCapsLockWarningOff = true;
- </script>
- <!-- The application splash screen. -->
- <div class="main-splash-container">
- <div class="sub-container">
- <img src="../images/beyondtrust_logo_129x22.png?h" width="129" height="22" />
- <h1>Password Safe</h1>
- <div class="status-container">
- <img class="progress-bar" src="../images/progress-indeterminate-metro.gif" />
- <div class="initialization-messages">
- <div class="initialization-step step-client">
- <span class="step-message">Initializing client ..........</span> <span class="step-result" style="display:none;"><img src="../images/check_green_16x16.png" /></span>
- </div>
- <div class="initialization-step step-server" style="display:none;">
- <span class="step-message">Contacting server ......</span> <span class="step-result" style="display:none;"><img src="../images/check_green_16x16.png" /></span>
- </div>
- </div>
- <div class="alert alert-error initialization-error">
- </div>
- </div>
- </div>
- </div>
- <!-- The application root node. -->
- <div class="application-root">
- <!-- *********************************************** -->
- <!-- ********** BEGIN: Framework Elements ********** -->
- <!-- *********************************************** -->
- <!-- The top navigation bar. -->
- <div class="navbar navbar-fixed-top" style="display: none;">
- <div class="navbar-inner">
- <a class="brand" href="#/home">Password Safe</a>
- <ul class="nav">
- <li data-bind="visible: IsRequestor" data-page="accounts"><a id="nav-btn-accounts" href="#/accounts">Accounts</a></li>
- <li data-bind="visible: IsRequestor" data-page="request"><a id="nav-btn-request-password" href="#/request">Requests</a></li>
- <li data-bind="visible: IsApprover" data-page="approve"><a id="nav-btn-approve-password" href="#/approve">Approve Requests<span class="badge badge-important badge-pending-requests"></span></a></li>
- <li data-bind="visible: (IsIsa()==true || IsAuditor()==true || IsRecordedSessionReviewer()==true)" data-page="replay"><a id="nav-btn-replay-sessions" href="#/replay">Replay Sessions</a></li>
- <li data-bind="visible: (IsIsa()==true || IsActiveSessionReviewer()==true)" data-page="active"><a id="nav-btn-active-sessions" href="#/active">Active Sessions</a></li>
- <li data-bind="visible: AllowAdminSession" data-page="adminsession"><a id="nav-btn-admin-session" href="#/adminsession">Admin Session</a></li>
- </ul>
- <ul class="nav pull-right">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span data-bind="text: Name"></span> <b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li><a href="#/changepassword" data-bind="visible: IsDirectoryUser() == false">Change Password</a></li>
- <li><a href="#/signout">Logout</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- <!-- The login form. -->
- <div class="retinaCS-login-container" style="display: none;">
- <script type="text/javascript">
- var hash="";if(window.location.hash.substring(1)!=undefined){hash=window.location.hash.substring(1);}
- var eUPN=getUrlParameter("UPN");var eGroups=getUrlParameter("Groups");var eSID=getUrlParameter("SID");var eGivenName=getUrlParameter("GivenName");var eSurName=getUrlParameter("SurName");var eEmail=getUrlParameter("Email");var eToken=getUrlParameter("Token");var eThumbPrint=getUrlParameter("ThumbPrint");var eSubmitType=getUrlParameter("submitType");var vPVM;localStorage["isLDAP"] = true;function getUrlParameter(sParam){var sPageURL=decodeURIComponent(window.location.search.substring(1));var sURLVariables=sPageURL.split('&');for(var i=0;i<sURLVariables.length;i++){var sParameterName=sURLVariables[i].split('=');if(sParameterName[0]==sParam){return sParameterName[1];}}
- return"";};var component_login_form=function(){var signInAlternateMethod=function(){clearMessage();var username="";var eResponse="";var eUserName="";var newDomain="";username=vPVM().viewModel_1().username();var foundDomain1=username.indexOf("\\");var foundDomain2=username.indexOf("\@");if(foundDomain2!=-1||foundDomain1!=-1){if(foundDomain1!=-1){var domainArray=username.split('\\');newDomain=domainArray[0];}
- if(foundDomain2!=-1){var domainArray=username.split('\@');newDomain=domainArray[1];}
- var domainExists=false;$componentRoot.find('.domains>option').each(function(){if($(this).text()==newDomain){domainExists=true;}});if(domainExists){localStorage["selectedDomain"]=newDomain;}else{}}else{if($componentRoot.find(".domains>option:selected").val()!=""){localStorage["selectedDomain"]=$componentRoot.find(".domains>option:selected").val();username=$componentRoot.find(".domains").val()+"\\"+vPVM().viewModel_1().username();}else{username=vPVM().viewModel_1().username();localStorage["selectedDomain"]="";}}
- var LoginViewModel=function(){var self=this;self.UPN=ko.observable("");self.Groups=ko.observable("");self.SID=ko.observable("");self.GivenName=ko.observable("");self.SurName=ko.observable("");self.Email=ko.observable("");self.Token=ko.observable("");self.ThumbPrint=ko.observable("");self.response=ko.observable("");self.submitType=ko.observable("");}
- var vmTransportLogin=ko.validatedObservable(new LoginViewModel());vmTransportLogin().UPN(eUPN);vmTransportLogin().Groups(eGroups);vmTransportLogin().SID(eSID);vmTransportLogin().GivenName(eGivenName);vmTransportLogin().SurName(eSurName);vmTransportLogin().Email(eEmail);vmTransportLogin().Token(eToken);vmTransportLogin().ThumbPrint(eThumbPrint);vmTransportLogin().response(eResponse);vmTransportLogin().submitType(eSubmitType);var viewModelJson=ko.toJSON(vmTransportLogin);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/AuthenticateAlternateMethod",dataType:"json",type:"POST",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result.Type=="TwoFactorLogin"){if(result.Code=="Challenge"){$componentRoot.find(".input-response").val("");$componentRoot.find(".input-response").focus();$componentRoot.find(".2factorChallenge").html(result.ResponseObject);}else{$componentRoot.find(".form-login").toggleClass("flip");$componentRoot.find(".twoFactorAuth-form").toggleClass("flip");$componentRoot.find(".input-response").focus();$componentRoot.find(".2factorChallenge").html(result.ResponseObject);}
- cancelBusy(true);return false;}else if(result.Type=="smartCardLogin"||result.Type=="WebgateLogin"||result.Type=="ClaimsAwareLogin"||result.Type=="SAMLLogin"||result.Type=="SSOLogin"){cancelBusy(true);postal.publish({channel:CHANNEL_FRAMEWORK,topic:events.LOGIN_SUCCESSFUL,data:result.ResponseObject});}else{cancelBusy(true);postal.publish({channel:CHANNEL_FRAMEWORK,topic:events.LOGIN_SUCCESSFUL,data:result.ResponseObject});}},error:function(jqXhr,textStatus,errorThrown){cancelBusy(false);vPVM().viewModel_1().password("");eUPN="";eSID="";eToken="";eThumbPrint="";var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"responsemanditory":displayMessage="A token is required.";break;case"responsetoolong":displayMessage="A token must be less than 128 characters.";break;case"couldnotcontactdomain":case"unknown error (0x80005000)":displayMessage="Username must not start with \\ or \@.";break;case"unknown user name or bad password":case"the server is not operational.\u000d\u000a":displayMessage="The server is not operational. Please contact your Password Safe administrator.";break;case"radius authentication failed":displayMessage="Radius Authentication Failed. Please contact your Password Safe administrator.";break;case"SSO authentication failed":displayMessage="SSO Authentication Failed. Please contact your Password Safe administrator.";break;case"usernameorpasswordareincorrect":case"the user name or password is incorrect.\u000d\u000a":vPVM().viewModel_1().password("");vPVM().viewModel_1().password.isModified(false);displayMessage="The username or password is incorrect. Please try again.";break;case"identitynotnull":displayMessage="Please select cancel and log in again.";break;case"userislocked":displayMessage="This account is locked. Please contact your Password Safe administrator.";break;case"userisnotactive":displayMessage="This account is not active. Please contact your Password Safe administrator.";break;case"assertion failed. identity user should not be null":displayMessage="assertion failed. identity user should not be null";break;case"useractivationisinvalid":case"userexpirationisinvalid":displayMessage="This account is not active. Please contact your Password Safe administrator.";break;case"userhasnosmartrules":displayMessage="You have successfully authenticated, but your user account has not been granted access to any BeyondInsight Smart Rules. Please contact your BeyondInsight or Password Safe administrator.";break;case"licenseinvalid":displayMessage="Unable to authenticate. Password Safe license is invalid. Please contact your BeyondInsight or Password Safe administrator.";break;case"invalidsubmittypevalue":default:displayMessage="An unexpected error occurred: {0}".format(ex.Message);}
- $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/LogOut",contentType:"application/json; charset=utf-8",success:function(){_login_form.hideSigningOut();},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});$componentRoot.find(".login-message").removeClass("alert-success").addClass("alert-error").text(displayMessage).fadeIn(200);$componentRoot.find(".input-response").val("");}
- else showApplicationError(jqXhr);}});};var events={LOGIN_SUCCESSFUL:"login.login_successful"};var $componentRoot=$(".retinaCS-login-container");$componentRoot.on("submit",".form-login",function(e){e.preventDefault();if(vPVM().viewModel_1.errors().length>0){vPVM().viewModel_1.errors.showAllMessages();return false;}
- $componentRoot.find(".btn-signIn").focus();$componentRoot.find(".form-login :input").attr("disabled",true);vPVM().viewModel_1().submitType("standardLogin");$componentRoot.find(".btn-signIn").busy(true);if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){vPVM().viewModel_1().submitType(eSubmitType);signInAlternateMethod();}else{signIn('.form-login');}
- return false;});$componentRoot.find(".twoFactorAuth-form").submit(function(e){e.preventDefault();if(vPVM().viewModel_1.errors().length>0){vPVM().viewModel_1.errors.showAllMessages();return false;}
- $componentRoot.find(".input-response").focus();vPVM().viewModel_1().submitType("twoFactorlogin");$componentRoot.find(".btn-signIn").busy(true);if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){}
- else
- {signIn('.twoFactorAuth-form');}
- return false;});$componentRoot.on("click",".action-flip-cancel",function(e){e.preventDefault();clearMessage();$componentRoot.find(".form-login").toggleClass("flip");$componentRoot.find(".form-login :input").attr("disabled",false);$componentRoot.find(".btn-signIn").attr("disabled",false).busy(false);$componentRoot.find(".twoFactorAuth-form").toggleClass("flip");$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/LogOut",contentType:"application/json; charset=utf-8",success:function(){_login_form.hideSigningOut();},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});$componentRoot.find(".input-password").val("");vPVM().viewModel_1().password("");vPVM().viewModel_1().errors.showAllMessages(false);return false;});$componentRoot.on("submit",".reset-password-form",function(e){e.preventDefault();if(vPVM().viewModel_1().username().length==0){vPVM().viewModel_1.errors.showAllMessages();return false;}
- $componentRoot.find(".input-username-forgot").attr("disabled",true);$componentRoot.find(".btn-send-password").attr("disabled",true).busy();regeneratePassword();});$componentRoot.on("click",".action-flip",function(e){e.preventDefault();clearMessage();$componentRoot.find(".form-login").toggleClass("flip");$componentRoot.find(".reset-password-form").toggleClass("flip");if($componentRoot.find(".form-login").hasClass("flip")){$componentRoot.find(".input-username-forgot").focus();}
- else{$componentRoot.find(".input-username").focus();}
- vPVM().viewModel_1().errors.showAllMessages(false);return false;});$componentRoot.on("click",".ldap-action-flip",function(e){e.preventDefault();clearMessage();vPVM().viewModel_1.errors.showAllMessages(false);vPVM().viewModel_1().username('');vPVM().viewModel_1().password('');$componentRoot.find(".form-login").toggleClass("flip");$componentRoot.find(".ldapAuth-form").toggleClass("flip");localStorage["isLDAP"]=true;$(".input-ldapUsername").focus();vPVM().viewModel_1().errors.showAllMessages(false);return false;});$componentRoot.on("click",".action-flip-ldap-cancel",function(e){e.preventDefault();clearMessage();vPVM().viewModel_2.errors.showAllMessages(false);$componentRoot.find(".form-login :input").attr("disabled",false);$componentRoot.find(".btn-signIn").attr("disabled",false).busy(false);$componentRoot.find(".input-domain").val("");$componentRoot.find(".input-port").val("");$componentRoot.find(".input-ldapUsername").val("");$componentRoot.find(".input-ldapPassword").val("");$componentRoot.find(".ldapAuth-form").toggleClass("flip");$componentRoot.find(".form-login").toggleClass("flip");$componentRoot.find(".input-username").focus();localStorage["isLDAP"]=false;localStorage["LDAPServer"]="";localStorage["LDAPPort"]="";return false;});$componentRoot.on("submit",".ldapAuth-form",function(e){e.preventDefault();if(vPVM().viewModel_2.errors().length>0){vPVM().viewModel_2.errors.showAllMessages();return false;}
- $componentRoot.find(".btn-ldap-signIn").busy(true);if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){}else{signIn('.ldapAuth-form');}
- return false;});var initializeCapsLockCheck=function(){var $passwordField=$componentRoot.find(".input-password");var $capsLockMessage=$componentRoot.find(".caps-lock-warning");$componentRoot.on("keypress",".input-password",function(e){var s=String.fromCharCode(e.which);if((s.toUpperCase()===s&&s.toLowerCase()!==s&&!e.shiftKey)||(s.toUpperCase()!==s&&s.toLowerCase()===s&&e.shiftKey)){$capsLockMessage.fadeIn();$componentRoot.on("blur",".input-password",function(){$capsLockMessage.hide();});}else{$capsLockMessage.hide();}});};initializeCapsLockCheck();var populateDomain=function(){var selectedDomain=localStorage["selectedDomain"];$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetDistinctDomains",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){var domains=result.domains;$componentRoot.find(".div-domain").attr("data-optional","true");$componentRoot.find(".domains option").remove();var options="<option value=''>(None)</option>";$.each(domains,function(index,value){if(value.DomainName==selectedDomain){options+='<option value="'+value.DomainName+'" selected="selected">'+value.DomainName.replace("<","<").replace(">",">")+'</option>';}else{options+='<option value="'+value.DomainName+'">'+value.DomainName.replace("<","<").replace(">",">")+'</option>';}});$componentRoot.find(".domains").append(options);$componentRoot.find(".domains").attr("disabled",false);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});};populateDomain();var cancelBusy=function(keepDisabled){if(!keepDisabled)$componentRoot.find(".form-login :input").attr("disabled",false);$componentRoot.find(".btn-signIn").busy(false);};var clearMessage=function(){$componentRoot.find(".login-message").html(null).hide();}
- var standardLoginViewModel=function(){var self=this;self.username=ko.observable("").extend({required:true});self.password=ko.observable("").extend({required:true});self.domain=ko.observableArray([]);self.submitType=ko.observable("standardLogin");}
- var ldapLoginViewModel=function(){var self=this;self.ldapUsername=ko.observable("").extend({required:true,pattern:{message:'Invalid username.',params:/^[^*()\\|<>&!~=]+$/g}});self.ldapPassword=ko.observable("").extend({required:true});self.ldapServer=ko.observable("").extend({required:true});self.port=ko.observable("").extend({required:true});self.submitType=ko.observable("ldaplogin");}
- var parentModel=function(){var self=this;self.showPreLoginBanner=ko.observable(false);self.preLoginBannerTitle=ko.observable(null);self.preLoginBannerMessage=ko.observable(null);self.viewModel_1=ko.validatedObservable(new standardLoginViewModel());self.viewModel_2=ko.validatedObservable(new ldapLoginViewModel());};vPVM=ko.validatedObservable(new parentModel());ko.applyBindings(vPVM,$componentRoot.find(".login-root").get()[0]);var getPreLoginBanner=function(){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetLoginBannerDetails",dataType:"json",contentType:"application/json; charset=utf-8"})}
- var setModel=function(data){vPVM().showPreLoginBanner(data.showPreLoginBanner);vPVM().preLoginBannerMessage(data.preLoginBannerMessage);vPVM().preLoginBannerTitle(data.preLoginBannerTitle);}
- $.when(getPreLoginBanner()).then(setModel).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$componentRoot.find(".login-message").removeClass("alert-success").addClass("alert-error").text(ex.message).show();}
- else showApplicationError(jqXhr);});var showSigningOut=function(){$componentRoot.find(".flip-container").hide();$componentRoot.find(".panel-signing-out").show();$componentRoot.find(".panel-signing-out").focus();};var hideSigningOut=function(){$componentRoot.find(".panel-signing-out").fadeOut();$componentRoot.find(".flip-container").fadeIn();$componentRoot.find(".input-username").focus();};var beforeShow=function(message){cancelBusy(false);clearMessage();if(message!=null&message!=undefined)
- $componentRoot.find(".login-message").removeClass("alert-success").addClass("alert-error").text(message).show();};$componentRoot.on("click","#accept",function(e){e.preventDefault();$componentRoot.find(".form-container.accept").hide()
- $componentRoot.find(".form-container.main").offset({left:30}).animate({left:'-=30',opacity:"toggle"},{duration:300,complete:function(){vPVM().showPreLoginBanner(false);if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){$componentRoot.find(".btn-signIn").click();if(hash==""||hash=="signout"||hash=="home"){eUPN="";eSID="";eToken="";eThumbPrint="";}}
- $componentRoot.find(".input-username").focus();}});});var show=function(){var isLDAP=localStorage["isLDAP"];var LDAPServer=localStorage["LDAPServer"];var LDAPPort=localStorage["LDAPPort"];if(isLDAP=="true"){$componentRoot.find(".ldapAuth-form").toggleClass("flip");$componentRoot.find(".form-login").toggleClass("flip");$(".ldapAuth-form").find(".input-domain").val(LDAPServer);vPVM().viewModel_2().ldapServer(LDAPServer);$(".ldapAuth-form").find(".input-port").val(LDAPPort);vPVM().viewModel_2().port(LDAPPort);$componentRoot.find(".btn-ldap-signIn").busy(false);vPVM().viewModel_2().port(LDAPPort);}
- $componentRoot.offset({left:30}).animate({left:'-=30',opacity:"toggle"},{duration:300,complete:function(){if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){if(vPVM().viewModel_1().username(eUPN)!=eUPN){var userNameParts=eUPN.split("\\");if(userNameParts.length>1){vPVM().viewModel_1().username(userNameParts[1]);}else{vPVM().viewModel_1().username(userNameParts[0]);}
- vPVM().viewModel_1().password("**************");if(vPVM().showPreLoginBanner()==false){$componentRoot.find(".btn-signIn").click();if(hash==""||hash=="signout"||hash=="home"){eUPN="";eSID="";eToken="";eThumbPrint="";}}}}
- if(isLDAP=="true"){$componentRoot.find(".input-ldapUsername").focus();}else{$componentRoot.find(".input-username").focus();}}});};var hide=function(){$componentRoot.animate({left:"+=60",opacity:"toggle"},{duration:300,complete:function(){$(this).offset({left:-60});vPVM().viewModel_1().username("");vPVM().viewModel_1().password("");vPVM().showPreLoginBanner(false);vPVM().preLoginBannerTitle(null);vPVM().preLoginBannerMessage(null);vPVM().viewModel_1().username.isModified(false);vPVM().viewModel_1().password.isModified(false);vPVM().viewModel_2().ldapUsername("");vPVM().viewModel_2().ldapPassword("");vPVM().viewModel_2().ldapUsername.isModified(false);vPVM().viewModel_2().ldapPassword.isModified(false);}});};var afterHide=function(){};var signIn=function(formSelector){clearMessage();var username="";var password="";var newDomain="";var foundDomain1="";var foundDomain2="";if(localStorage["isLDAP"]=="true"){username=vPVM().viewModel_2().ldapUsername();password=vPVM().viewModel_2().ldapPassword();localStorage["LDAPServer"]=vPVM().viewModel_2().ldapServer();localStorage["LDAPPort"]=vPVM().viewModel_2().port();}else{username=vPVM().viewModel_1().username();password=vPVM().viewModel_1().password();foundDomain1=username.indexOf("\\");foundDomain2=username.indexOf("\@");if(foundDomain2!=-1||foundDomain1!=-1){if(foundDomain1!=-1){var domainArray=username.split('\\');newDomain=domainArray[0];}
- if(foundDomain2!=-1){var domainArray=username.split('\@');newDomain=domainArray[1];}
- var domainExists=false;$componentRoot.find('.domains>option').each(function(){if($(this).text()==newDomain){domainExists=true;}});if(domainExists){localStorage["selectedDomain"]=newDomain;}else{}}else{if($componentRoot.find(".domains>option:selected").val()!=""){localStorage["selectedDomain"]=$componentRoot.find(".domains>option:selected").val();username=$componentRoot.find(".domains").val()+"\\"+vPVM().viewModel_1().username();}else{username=vPVM().viewModel_1().username();localStorage["selectedDomain"]="";}}}
- var eSubmitType="";if(localStorage["isLDAP"]=="true"){eSubmitType=vPVM().viewModel_2().submitType();}else{eSubmitType=vPVM().viewModel_1().submitType();}
- var eLdapServer="";var eLdapPort="";eLdapServer=vPVM().viewModel_2().ldapServer();eLdapPort=vPVM().viewModel_2().port();var tokenResponse=$componentRoot.find(".input-response").val();var LoginViewModel=function(){var self=this;self.userName=ko.observable("");self.password=ko.observable("");self.response=ko.observable("");self.submitType=ko.observable("");self.ldapServer=ko.observable("");self.ldapPort=ko.observable("");}
- var vmTransportLogin=ko.validatedObservable(new LoginViewModel());vmTransportLogin().userName(username);vmTransportLogin().password(password);vmTransportLogin().response(tokenResponse);vmTransportLogin().submitType(eSubmitType);vmTransportLogin().ldapServer(eLdapServer);vmTransportLogin().ldapPort(eLdapPort);var viewModelJson=ko.toJSON(vmTransportLogin);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/Authenticate",dataType:"json",type:"POST",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result.Type=="TwoFactorLogin"){clearMessage();if(result.Code=="Challenge"){$componentRoot.find(".input-response").val("");$componentRoot.find(".input-response").focus();$componentRoot.find(".2factorChallenge").html(result.ResponseObject);}else{$componentRoot.find(".form-login").toggleClass("flip");$componentRoot.find(".twoFactorAuth-form").toggleClass("flip");$componentRoot.find(".input-response").focus();$componentRoot.find(".2factorChallenge").html(result.ResponseObject);}
- cancelBusy(true);return false;}else if(result.Type=="StandardLogin"){cancelBusy(true);postal.publish({channel:CHANNEL_FRAMEWORK,topic:events.LOGIN_SUCCESSFUL,data:result.ResponseObject});}else{cancelBusy(true);postal.publish({channel:CHANNEL_FRAMEWORK,topic:events.LOGIN_SUCCESSFUL,data:result.ResponseObject});}},error:function(jqXhr,textStatus,errorThrown){cancelBusy(false);var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"responsemanditory":displayMessage="A token is required.";break;case"responsetoolong":displayMessage="A token must be less than 128 characters.";break;case"couldnotcontactdomain":case"unknown error (0x80005000)":displayMessage="Username must not start with \\ or \@.";break;case"unknown user name or bad password":case"the server is not operational.\u000d\u000a":displayMessage="The server is not operational. Please contact your Password Safe administrator.";break;case"radius authentication failed":displayMessage="Radius Authentication Failed. Please contact your Password Safe administrator.";break;case"SSO authentication failed":displayMessage="SSO Authentication Failed. Please contact your Password Safe administrator.";break;case"usernameorpasswordareincorrect":case"the user name or password is incorrect.\u000d\u000a":if(vPVM().viewModel_2().submitType()=='ldaplogin'){vPVM().viewModel_2().ldapPassword("");vPVM().viewModel_2().ldapPassword.isModified(false);}else{vPVM().viewModel_1().password("");vPVM().viewModel_1().password.isModified(false);}
- displayMessage="The username or password is incorrect. Please try again.";break;case"identitynotnull":displayMessage="Please select cancel and log in again.";break;case"userislocked":displayMessage="This account is locked. Please contact your Password Safe administrator.";break;case"userisnotactive":displayMessage="This account is not active. Please contact your Password Safe administrator.";break;case"assertion failed. identity user should not be null":displayMessage="assertion failed. identity user should not be null";break;case"useractivationisinvalid":case"userexpirationisinvalid":displayMessage="This account is not active. Please contact your Password Safe administrator.";break;case"userhasnosmartrules":displayMessage="You have successfully authenticated, but your user account has not been granted access to any BeyondInsight Smart Rules. Please contact your BeyondInsight or Password Safe administrator.";break;case"licenseinvalid":displayMessage="Unable to authenticate. Password Safe license is invalid. Please contact your BeyondInsight or Password Safe administrator.";break;case"invalidsubmittypevalue":default:displayMessage="An unexpected error occurred: {0}".format(ex.Message);}
- $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/LogOut",contentType:"application/json; charset=utf-8",success:function(){_login_form.hideSigningOut();},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});$componentRoot.find(formSelector+" .login-message").removeClass("alert-success").addClass("alert-error").text(displayMessage).fadeIn(200);$componentRoot.find(".btn-ldap-signIn").busy(false);$componentRoot.find(".input-response").val("");}
- else showApplicationError(jqXhr);}});};var regeneratePassword=function(){clearMessage();var username=vPVM().viewModel_1().username();if(username.indexOf("\\")>-1||username.indexOf("@")>-1){var displayMessage="Password Safe cannot perform password resets for Active Directory accounts. Please see your system administrator or Help Desk for more information.";$componentRoot.find(".login-message").removeClass("alert-success").addClass("alert-error").text(displayMessage).fadeIn(200);$componentRoot.find(".input-username-forgot").attr("disabled",false);$componentRoot.find(".btn-send-password").attr("disabled",false).busy(false);return;}
- $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/RegeneratePassword",data:{username:vPVM().viewModel_1().username(),serverUrl:window.location.href.toString()},contentType:"application/json; charset=utf-8",success:function(result){vPVM().viewModel_1().username("");vPVM().viewModel_1().username.isModified(false);var displayMessage="A message has been sent to your registered email address with password reset instructions.";$componentRoot.find(".login-message").removeClass("alert-error").addClass("alert-success").text(displayMessage).fadeIn(200);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);},complete:function(){$componentRoot.find(".input-username-forgot").attr("disabled",false);$componentRoot.find(".btn-send-password").attr("disabled",false).busy(false);}});};isInitialized=true;return{events:events,showSigningOut:showSigningOut,hideSigningOut:hideSigningOut,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,}}</script>
- <!--[if lte IE 9]>
- <style type="text/css">
- .login-root .form-login,
- .login-root .reset-password-form {
- /*display:block;*/
- height: 160% !important;
- }
- </style>
- <![endif]-->
- <div class="login-root">
- <div class="login-header">
- <div class="retinaCS-title">
- <img src="../images/beyondtrust_logo_129x22.png?h" width="129" height="22" />
- <h1>Password Safe</h1>
- </div>
- </div>
- <div class="form-container accept" data-bind="visible: showPreLoginBanner() == true">
- <div>
- <h3><!-- ko 'text': preLoginBannerTitle() --><!-- /ko --></h3>
- <textarea data-bind="value: preLoginBannerMessage" readonly="readonly"></textarea>
- <button id="accept" class="btn btn-primary pull-right" value="1">ACCEPT</button>
- </div>
- </div>
- <div class="form-container main" data-bind="visible: showPreLoginBanner() == false">
- <div class="panel-signing-out" style="display:none;">
- <p>Signing out....</p>
- <p><img class="progress-bar" src="../images/progress-indeterminate-metro.gif" /></p>
- </div>
- <div class="form-rotator flip-container">
- <!-- Login form -->
- <form class="form-horizontal form-login" data-bind="with: viewModel_1" autocomplete="off">
- <div class="control-group">
- <div class="control-group">
- <label class="control-label" for="username">Username:</label>
- <div class="controls">
- <input type="text" class="input-xlarge input-username" autocomplete="off" tabindex="1" data-bind="value: username" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="password">Password:</label>
- <div class="controls password-container">
- <input type="password" class="input-xlarge input-password" tabindex="2" data-bind="value: password" autocomplete="off" />
- <div class="caps-lock-warning" style="display: none;">
- <img src="../images/sign_warning_16x16.png" />Caps lock is on
- </div>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="Domain">Domain:</label>
- <div class="controls div-domain">
- <select class="input-xlarge domains" data-bind="value: domain" tabindex="3"></select>
- </div>
- </div>
- <div class="pull-left action-link" style="margin-left: 0 !important;"><small><a class="ldap-action-flip" href="#" tabindex="10">LDAP</a></small></div>
- <div class="pull-left action-link"><small><a class="action-flip" href="#" tabindex="4">Forgot your password?</a></small></div>
- <button class="btn btn-primary btn-signIn pull-right" tabindex="5">Login</button>
- <br style="clear:both;" />
- <div class="alert alert-error login-message" style="margin-top:20px;"></div>
- <div class="copyright">
- Copyright ©
- <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
- </div>
- </div>
- </form>
- <!-- LDAP form -->
- <form class="form-horizontal ldapAuth-form" data-bind="with: viewModel_2" autocomplete="off">
- <div class="ldapAuth-form-container">
- <div style="text-align:left;">
- <div>
- <div class="control-group">
- <div class="control-group">
- <label class="visuallyhidden" for="ldapServer">LDAP Server:</label>
- <div class="controls div-ldap-domain">
- <input type="hidden" class="input-xlarge input-domain" autocomplete="off" tabindex="6" data-bind="value: ldapServer" />
- </div>
- </div>
- <div class="control-group">
- <label class="visuallyhidden" for="port">Port:</label>
- <div class="controls div-port">
- <input type="hidden" class="input-xlarge input-port" autocomplete="off" tabindex="7" data-bind="value: port" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="username">Bind DN or User:</label>
- <div class="controls">
- <input type="text" class="input-xlarge input-ldapUsername" autocomplete="off" tabindex="8" data-bind="value: ldapUsername" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="password">Bind Password:</label>
- <div class="controls password-container">
- <input type="password" class="input-xlarge input-ldapPassword" tabindex="9" data-bind="value: ldapPassword" autocomplete="off" />
- <div class="caps-lock-warning" style="display: none;">
- <img src="../images/sign_warning_16x16.png" />Caps lock is on
- </div>
- </div>
- </div>
- </div>
- <div class="pull-left action-link" style="margin-left: 0 !important;"><small><a class="action-flip-ldap-cancel" href="#" tabindex="10">Active Directory</a></small></div>
- <button class="btn btn-primary btn-ldap-signIn pull-right" tabindex="11">Login</button>
- </div>
- </div>
- </div>
- <br style="clear:both;" />
- <div class="alert alert-error login-message" style="margin-top:20px;"></div>
- <div class="copyright">
- Copyright ©
- <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
- </div>
- </form>
- <!-- Forgot password form -->
- <form class="form-horizontal reset-password-form" data-bind="with: viewModel_1">
- <div class="reset-password-form-container">
- <div style="text-align:left;">
- If you have forgotten your Password Safe credentials, please enter your
- username below. Password reset instructions will be sent to your registered
- email address.
- </div>
- <div style="text-align:left; margin-top:2em;">
- <div>
- <div class="control-group">
- <label class="control-label" for="username">Username:</label>
- <div class="controls">
- <input type="text" class="input-xlarge input-username-forgot" autocomplete="off" tabindex="12" data-bind="value: username" />
- </div>
- </div>
- <div class="pull-left action-link"><small><a class="action-flip" href="#" tabindex="13">Back to Login</a></small></div>
- <button class="pull-right btn btn-primary btn-send-password" tabindex="14">Reset Password</button>
- </div>
- </div>
- </div>
- <br style="clear:both;" />
- <div class="alert alert-error login-message" style="margin-top:20px;"></div>
- <div class="copyright">
- Copyright ©
- <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
- </div>
- </form>
- <!-- TwoFactor Auth form-->
- <form class="form-horizontal twoFactorAuth-form">
- <div class="twoFactorAuth-form-container" style="width:400px; margin:auto;">
- <div style="text-align:left; margin-top:2em;">
- <div>
- <div class="control-group">
- <div class="2factorChallenge">re</div>
- <br />
- <div class="controls" style="margin-left: 0 !important;">
- <input type="password" class="input-xlarge input-response" autocomplete="off" tabindex="15" />
- </div>
- </div>
- <div class="pull-left action-link" style="margin-left: 0px !important;"><small><a class="action-flip-cancel" href="#" tabindex="16">Cancel</a></small></div>
- <button class="btn btn-primary btn-signIn pull-right" tabindex="17">Login</button>
- </div>
- </div>
- </div>
- <br style="clear:both;" />
- <div class="alert alert-error login-message" style="margin-top:20px;"></div>
- <div class="copyright">
- Copyright ©
- <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
- <!-- The "404" display for an invalid path/route -->
- <div class="page-framework retinaCS-path-not-found" style="display:none;">
- <h2><img src="../images/sad_36x36.png" /> 404 Page Not Found</h2>
- <div class="alert alert-warning">
- The requested page does not exist in the Password Safe application. Please check the URL path
- and try again, or <a href="#/home">return to the home page</a>.
- </div>
- </div>
- <!-- The "Not Authorized" display for a page the user doesn't have permission to access. -->
- <div class="page-framework retinaCS-not-authorized" style="display:none;">
- <h2><img src="../images/lock_36x36.png" /> Not Authorized</h2>
- <div class="alert alert-warning" data-bind="visible: !(IsRequestor() || IsApprover() || IsActiveSessionReviewer)">
- <p>
- You have successfully signed in, but you do not have any of the required Roles to use this
- application.
- </p>
- <p>Please see your Password Safe administrator for more information.</p>
- </div>
- <div data-bind="visible: !(IsRecordedSessionReviewer() || IsActiveSessionReviewer() || IsAuditor() || IsIsa())">
- <div class="alert alert-warning">
- <p>You have successfully signed in, but you do not have any of the required Roles to access the requested page.</p>
- <p>Please see your Password Safe administrator for more information, or select an action below.</p>
- </div>
- <div>
- <a href="#/request/list" class="btn btn-primary" data-bind="visible: IsRequestor">Submit Request</a>
- <a href="#/approve/list" class="btn btn-primary" data-bind="visible: IsApprover">Approve Requests</a>
- </div>
- </div>
- </div>
- <!-- The "Application Error" display for a fatal, unhandled error. -->
- <div class="page-framework retinaCS-application-error" style="display:none;">
- <h2><img src="../images/error_36x36.png" /> Application Error</h2>
- <div class="alert alert-warning">
- <p>Sorry, but Password Safe has encountered an unexpected error condition and cannot continue.</p>
- <p>
- Try closing your web browser completely and then re-load Password Safe. If the problem continues,
- please contact your Password Safe administrator.
- </p>
- <div class="error-details"></div>
- </div>
- </div>
- <!-- *********************************************** -->
- <!-- *********** END: Framework Elements *********** -->
- <!-- *********************************************** -->
- <div class="application-pages" style="display:none;">
- <!-- Page: Request Password -->
- <div class="page page-request-password" data-route="request" data-default-view-route="list">
- <script type="text/javascript">var page_request_password=function(){var CHANNEL_PAGE="Channel.Page.Request";var PAGE_ROOT_CLASS="page-request-password";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_REQUESTOR,ROLE_REQUESTOR_APPROVER,ROLE_ISA];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;switch(view.name){case"view-current-requests":break;}};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles};};</script>
- <div class="views">
- <!-- View: Grid of user's current requests. -->
- <div class="view view-current-requests" data-route="list">
- <script type="text/javascript">
- var view_request_list=function(){var viewName="view-current-requests";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={NEW_REQUEST:"request_list.new_request",REQUEST_SELECTED:"request_list.request_selected"};var _params=null;var $viewRoot=$(".view.view-current-requests");var $grid=null;var filterModel;var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializeCurrentRequestsGrid();filterModel=ko.validatedObservable(new filterViewModel());filterModel().selectButton(filterModel().buttons()[1]);ko.applyBindings(filterModel,$viewRoot[0]);$viewRoot.find(".filter-request-status .btn").click(function(e){$(this).parents('form:first.form-filter').submit();e.preventDefault();return false;});$viewRoot.find(".form-filter").submit(function(e){e.preventDefault();if(filterModel.errors().length>0){filterModel.errors.showAllMessages();return false;}
- var status=filterModel().selectedButton().name;var system=filterModel().system();var start=filterModel().start();var end=filterModel().end();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="));newUrl+="/status="+status;if(system!="")newUrl+="&system="+encodeURIComponent(system);if(start!=null&&start!="")newUrl+="&start="+encodeURIComponent(moment(start).format());if(end!=null&&end!="")newUrl+="&end="+encodeURIComponent(moment(end).format());if(window.location.href==newUrl)$grid.data("kendoGrid").dataSource.read();else window.location.href=newUrl;return false;});$viewRoot.find(".form-filter .btn-clear-filter").click(function(e){e.preventDefault();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="));newUrl+="/status=Active&reset=true";window.location.href=newUrl;return false;});_isInitialized=true;};function applyAccessPolicyStyling(){var grid=$viewRoot.find(".current-requests-grid");var gridData=grid.data("kendoGrid");if(gridData._data[0]!=undefined){for(var x=0;x<gridData.table[0].rows.length;x++){var current=gridData.table[0].rows[x];if(current.dataset!=undefined&¤t.dataset.uid!=undefined){var theUID=current.dataset.uid;if(current.cells[15]!=undefined){if(current.cells[15].innerHTML=="false"){$(".current-requests-grid tbody").find("tr[data-uid="+theUID+"]").css('background-color','rgb(255, 220, 220)');}}}}}}
- var initializeCurrentRequestsGrid=function(){$grid=$viewRoot.find(".current-requests-grid");$grid.kendoGrid({sortable:{mode:"multiple",allowUnsort:true},resizable:true,selectable:"row",change:currentRequestsGrid_onSelectionChange,dataBound:function(e){addExtraStylingToGrid("current-requests-grid");gridNoDataMsgDisplay(e);applyAccessPolicyStyling();},pageable:true,height:550,groupable:false,reorderable:true,columnMenu:false,filterable:{extra:false,operators:{string:{contains:"Contains",startswith:"Starts with",eq:"Is equal to",neq:"Is not equal to"}}},columns:[{field:"RequestId",width:75,title:"Req. ID",filterable:{cell:{showOperators:true}},hidden:true},{field:"RequestorDomainName",width:220,title:"Requestor Domain Name",filterable:{cell:{showOperators:true}},hidden:true},{field:"RequestorName",width:220,title:"Requestor Name",filterable:{cell:{showOperators:true}},hidden:true},{field:"AccessType",width:"100px",title:"Type",hidden:false},{field:"SystemName",title:"System",filterable:{cell:{showOperators:true}}},{field:"DomainName",title:"Directory",filterable:{cell:{showOperators:true}}},{field:"AccountName",title:"Account",filterable:{cell:{showOperators:true}}},{field:"Alias",title:"Application",hidden:false},{field:"Description",title:"Description",filterable:{cell:{showOperators:true}}},{field:"Location",title:"Location",hidden:false},{field:"Ticket",title:"Ticket",filterable:{cell:{showOperators:true}}},{field:"RequestReleaseDate",format:"{0:g}",title:"Request Release",filterable:{ui:"datetimepicker",extra:true}},{field:"ApprovedDate",format:"{0:g}",title:"Approved",filterable:{ui:"datetimepicker",extra:true}},{field:"CanceledDate",format:"{0:g}",title:"Canceled",filterable:{ui:"datetimepicker",extra:true}},{field:"ExpiresDate",format:"{0:g}",title:"Expires",filterable:{ui:"datetimepicker",extra:true}},{field:"IsClientLocationValid",width:150,title:"IsClientLocationValid",hidden:true}]});};var currentRequestsGrid_onSelectionChange=function(){var selectedRow=$grid.data("kendoGrid").select();var dataItem=$grid.data("kendoGrid").dataItem(selectedRow);window.location.href="#/request/details/id="+dataItem.RequestId;};var onRequestStart=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",true);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(false);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(false);};var onRequestEnd=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",false);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(true);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(true);};var resizeCurrentRequestsGrid=function(){};var beforeShow=function(params){_params=params;};var show=function(){if(_params==null){window.location.href+="/status=Active";return;}
- if(_params["status"]){for(var i=0;i<filterModel().buttons().length;i++){if(filterModel().buttons()[i].name.toLowerCase()==_params["status"].toLowerCase()){filterModel().selectButton(filterModel().buttons()[i]);break;}}}
- if(_params["system"]){filterModel().system(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{filterModel().system("");}
- if(_params["start"]){filterModel().start(parseDatesForIE8(_params["start"]));}else{filterModel().start("");}
- if(_params["end"]){filterModel().end(parseDatesForIE8(_params["end"]));}else{filterModel().end("");}
- var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
- var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
- resizeCurrentRequestsGrid();if(gridDataSource==null){var gridDataSource=new kendo.data.DataSource({requestStart:onRequestStart,requestEnd:onRequestEnd,serverPaging:true,serverSorting:true,serverFiltering:true,pageSize:12,sort:{field:"RequestReleaseDate",dir:"desc"},transport:{read:{url:"/eEye.RetinaCS.Server/api/PMM/GetRequestsForRequestor",cache:false,dataType:"json",type:"POST",contentType:"application/json; charset=utf-8",data:{requestStatus:filterModel().selectedButton().name,systemName:filterModel().system(),startDate:startDate,endDate:endDate}},parameterMap:function(data){var newdata=$.extend({},data,{filter:data.filter,sort:data.sort});return JSON.stringify(newdata);}},schema:{total:function(response){return response[0].TotalRecords;},model:{fields:{RequestId:{type:"number"},RequestorName:{type:"string"},SystemName:{type:"string"},AccountName:{type:"string"},RequestReleaseDate:{type:"date"},ApprovedDate:{type:"date"},CanceledDate:{type:"date"},ExpiresDate:{type:"date"},Description:{type:"string"},Ticket:{type:"string"}}},data:"data",total:"total"},error:function(e){showApplicationError(e.xhr);}});if(_params["reset"]){gridDataSource._filter=null;}
- $grid.data("kendoGrid").setDataSource(gridDataSource);}
- else{$grid.data("kendoGrid").dataSource.read();}
- kendo.ui.Tooltip.fn._show=function(show){return function(target){var e={sender:this,target:target,preventDefault:function(){this.isDefaultPrevented=true;}};if(typeof this.options.beforeShow==="function"){this.options.beforeShow.call(this,e);}
- if(!e.isDefaultPrevented){show.call(this,target);}};}(kendo.ui.Tooltip.fn._show);$grid.kendoTooltip({filter:"td:nth-child(3)",position:"top",beforeShow:function(e){if($(e.target).prev("td").html()==""){e.preventDefault();}},content:function(e){var targetUID=$(e.target).closest("tr").data("uid");var text=$(e.target).prev("td").html();var template=kendo.template($("#TempateUsingRemoteData1").html());return"<div id='"+targetUID+"'>"+text+"</div>";}});};var hide=function(){};var afterHide=function(){gridDataSource=null;$grid.data("kendoGrid").setDataSource(new kendo.data.DataSource());};var resize=function(){resizeCurrentRequestsGrid();};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};</script>
- <script type="text/x-kendo-template" id="TempateUsingRemoteData1">
- #=Text#
- </script>
- <div class="header-container">
- <h4>Requests</h4> <!--XY ~ Request Grid Block ~ XY -->
- <div class="filter-bar pull-left">
- <!--<a href="#/request/accounts" class="btn btn-primary btn-new-request" style="float: left; margin-right: 20px;">New Request</a>-->
- <form class="form-inline form-filter">
- <div class="pull-left filter-request-status">
- <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: buttons">
- <button class="btn" data-bind="text: name, css: {active: selected}, click: $parent.selectButton"></button>
- </div>
- </div>
- </form>
- </div>
- <div class="filter-bar pull-right">
- <form class="form-inline form-filter">
- <div class="pull-right">
- <input class="filter-system" type="text" data-bind="value: system" placeholder="Global Search" />
- <button class="btn btn-mini btn-primary btn-filter" type="submit">Search</button>
- <!--
- <span class="filter-label">Search:</span>
- <span class="filter-label">Date Range:</span>
- <input class="filter-date-from" style="width:110px;" data-bind="kendoDatePicker: { value: start }" />
- <div class="retinaCS-validation-message" style="display:none;">
- <em></em>
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: start"></div>
- </div>
- </div>
- to
- <input class="filter-date-to" style="width:110px;" data-bind="kendoDatePicker: { value: end }" />
- <div class="retinaCS-validation-message" style="display:none;">
- <em></em>
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: end"></div>
- </div>
- </div>
- <button class="btn btn-mini btn-primary btn-filter" type="submit">Filter</button>-->
- <button class="btn btn-mini btn-clear-filter" type="button">Reset</button>
- </div>
- </form>
- </div>
- </div>
- <div class="current-requests-grid"></div>
- <!-- *** New request button was here
- <div class="button-bar"></div>
- -->
- </div>
- <!-- View: Details for a request. -->
- <div class="view view-request-details" data-route="details">
- <script type="text/javascript">
- var view_request_details=function(){var viewName="view-request-details";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-request-details");var _params=null;var viewModel=null;var approversList=null;var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializeForm();initializePopOvers();viewModel=ko.validatedObservable(new requestViewModel());ko.applyBindings(viewModel,$viewRoot.find(".request-details")[0]);ko.applyBindings(viewModel,$viewRoot.find(".action-buttons")[0]);ko.applyBindings(viewModel,$viewRoot.find(".approvals-required")[0]);ko.applyBindings(viewModel,$viewRoot.find(".panel-request-expired")[0]);$viewRoot.find(".btn-start-ra-sessionRDP").click(function(e){clearInlineError();sessionStartClickFunc(startRemoteAppSession,e);return false;});$viewRoot.find(".btn-start-ra-sessionSSH").click(function(e){clearInlineError();sessionStartClickFunc(startRemoteAppSessionSSH,e);return false;});$viewRoot.find(".btn-start-rdp-session").click(function(e){clearInlineError();sessionStartClickFunc(startRDPSession,e);return false;});$viewRoot.find(".btn-start-ssh-session").click(function(e){clearInlineError();sessionStartClickFunc(startSSHSession,e);return false;});$viewRoot.find(".btn-retrieve-password").click(function(e){clearInlineError();retrievePassword();return false;});$viewRoot.find(".btn-back-to-list").click(function(e){window.location="/eEye.RetinaCS.Server/PasswordSafe/#/request/list/status=Active";});$viewRoot.find(".form-show-password").submit(function(e){e.preventDefault();return false;});$viewRoot.find(".form-show-sshSession").submit(function(e){e.preventDefault();return false;});$viewRoot.find(".btn-back-to-list").click(function(e){if(navigateToPreviousRoute("/request/list")){e.preventDefault();viewModel().reset();return false;}});_isInitialized=true;};var sessionStartClickFunc=function onSessionStartClick(func,sender){var viewModelJson=ko.toJSON(viewModel);var cn=sender.target;enableDisableRequestActionButtons(true,cn);$.when(validateRequestFunc(viewModelJson)).then(function(){$.when(validateRequestSuccessFunc(func)).then(function(){enableDisableRequestActionButtons(false,cn);}).fail(function(jqXhr,textStatus,errorThrown){validateRequestFailFunc(jqXhr,textStatus,errorThrown,$viewRoot);enableDisableRequestActionButtons(false,cn);})}).fail(function(jqXhr,textStatus,errorThrown){validateRequestFailFunc(jqXhr,textStatus,errorThrown,$viewRoot);enableDisableRequestActionButtons(false,cn);})};var enableDisableRequestActionButtons=function(disable,selector){$viewRoot.find(selector).attr("disabled",disable);$viewRoot.find(selector).busy(disable);$viewRoot.find(".btn-expire-now").attr("disabled",disable)}
- var startRemoteAppSession=function startRARDPSessionFunc(){window.location="/eEye.RetinaCS.Server/api/PMM/StartRemoteAppSession?isa=false&protocol=rdp&accountid="+viewModel().accountId()+"&requestid="+viewModel().requestId()+"&resolution="+viewModel().resolution()+"&smartsize="+viewModel().smartSize()+"&record="+viewModel().recordSessionForRemoteAppConnectionFlag()+"&remotedesktopappid="+viewModel().remoteDesktopAppID()+"&anticsrftoken="+_antiCSRFToken;};var startRDPSession=function startRDPSessionFunc(){window.location="/eEye.RetinaCS.Server/api/PMM/StartRemoteSession?isa=false&protocol=rdp&accountid="+viewModel().accountId()+"&requestid="+viewModel().requestId()+"&resolution="+viewModel().resolution()+"&smartsize="+viewModel().smartSize()+"&anticsrftoken="+_antiCSRFToken;};var startRemoteAppSessionSSH=function(){var viewModelJson=ko.toJSON(viewModel);return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteAppSessionSSH",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result.byPassLandingPage){window.location.href=result.sshLink;}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}}});};var startSSHSession=function(){var viewModelJson=ko.toJSON(viewModel);return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteSessionSSH",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result.byPassLandingPage){window.location.href=result.sshLink;}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}}});};var retrievePassword=function(){$viewRoot.find(".btn-retrieve-password").attr("disabled",true);$viewRoot.find(".btn-retrieve-password").busy();$viewRoot.find(".btn-expire-now").attr("disabled",true);var viewModelJson=ko.toJSON(viewModel);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/RetrievePassword",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){_passwordDisplayPanel.showPasswordPanel(result,$viewRoot);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.Message).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".btn-retrieve-password").attr("disabled",false);$viewRoot.find(".btn-retrieve-password").busy(false);$viewRoot.find(".btn-expire-now").attr("disabled",false);}});};var expireNow=function(){$viewRoot.find(".btn-success:visible:enabled").attr("disabled",true);$viewRoot.find(".btn-expire-now").attr("disabled",true);$viewRoot.find(".btn-expire-now").busy();$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/CancelRequest",data:{requestId:viewModel().requestId(),comment:""},contentType:"application/json; charset=utf-8",dataType:"json",success:function(result){$viewRoot.find(".form-request-details").fadeOut();$viewRoot.find(".panel-request-expired").offset({left:60}).animate({left:'-=60',opacity:"toggle"});},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);},complete:function(){if(viewModel().IsClientLocationValid()!=null&&viewModel().IsClientLocationValid()){$viewRoot.find(".btn-success:visible:disabled").attr("disabled",false);}
- $viewRoot.find(".btn-expire-now").attr("disabled",false);$viewRoot.find(".btn-expire-now").busy(false);}});};var initializeForm=function(){$viewRoot.find(".form-request-details").submit(function(e){e.preventDefault();return false;});$viewRoot.find(".approver-response-history-grid").kendoGrid({resizable:true,columns:[{field:"responseDate",width:150,format:"{0:g}",title:"Date"},{field:"approverName",width:150,title:"Submitted By",template:"<div title='#= approverName #'>#= approverName # </div>"},{field:"response",width:150,title:"Response"},{field:"comment",width:150,title:"Comment",template:"<div title='#= comment #'>#= comment # </div>"}]});}
- var initializePopOvers=function(){$viewRoot.find(".popover-user-details").data('popover',null).popover({trigger:"manual",title:"Loading...",html:true,content:""}).click(function(e){e.stopPropagation();var html="<div class='user-details-popup'>"+"<div><div class='popup-label'>Name:</div><div class='popup-value'>{0}</div></div>".format(viewModel().requestor.fullName())+"<div><div class='popup-label'>Email:</div><div class='popup-value'><a href='mailto:{0}'>{0}</a></div></div>".format(viewModel().requestor.emailAddress())+"<div><div class='popup-label'>Phone:</div><div class='popup-value'>{0}</div></div>".format(viewModel().requestor.phoneNumber())+"<div><div class='popup-label'>Groups:</div><div class='popup-value'>{0}</div></div>".format(getUsersGroups())+"</div>";$(this).data("popover").options.title=viewModel().requestor.username();$(this).data("popover").options.content=html;$(this).popover("show");return false;});$viewRoot.find(".popover-approvers-list").data('popover',null).popover({trigger:"manual",title:"Approvers List",html:true,content:""}).click(function(e){e.stopPropagation();var $node=$(this);if(approversList==null){$node.busy();$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetApproversForRequest",data:{requestId:viewModel().requestId()},contentType:"application/json; charset=utf-8",dataType:"json",success:function(result){approversList=result;showApproversPopUp($node);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}
- else showApproversPopUp($node);return false;});$viewRoot.find(".popover-asset-details").data('popover',null).popover({trigger:"manual",title:"Asset Details",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner asset-details-popover"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',html:true,content:""}).click(function(e){e.stopPropagation();if(viewModel().system.assetId()>0){var html="<div class='asset-details-popup'>"+"<div><div class='popup-label'>Name:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.name())+"<div><div class='popup-label'>IP:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.ipAddress())+"<div><div class='popup-label'>OS:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.os())+"<div><div class='popup-label'>Risk:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.riskScore().toFixed(2))+"<div><div class='popup-label'>Updated:</div><div class='popup-value'>{0}</div></div>".format(moment(viewModel().system.lastUpdatedDate()).format("l"))+"</div>";}else{var html="<div class='asset-details-popup'>"+"<div>This account does not have an asset. It is a cloud account.</div>"+"</div>";}
- $(this).data("popover").options.content=html;$(this).popover("show");return false;});$("html").click(function(){$viewRoot.find(".popover-user-details").popover("hide");$viewRoot.find(".popover-approvers-list").popover("hide");$viewRoot.find(".popover-asset-details").popover("hide");$viewRoot.find(".btn-expire-now").popover("hide");});};var getUsersGroups=function(){var groups="";for(var i=0;i<viewModel().requestor.userGroups().length;i++){groups+=viewModel().requestor.userGroups()[i]+"<br/>";}
- return groups;};var customUserNameSplit=function(theElement){arrayOfChars=theElement.split("");concatedElements="";stringlenthCount=0;for(var i=0;i<arrayOfChars.length;i++){if(stringlenthCount<14){concatedElements+=arrayOfChars[i];stringlenthCount=stringlenthCount+1;}else{concatedElements+=arrayOfChars[i]+'<br/>';stringlenthCount=0;}}
- return concatedElements;};$(function(){$('body').tooltip({selector:'[data-toggle=tooltip]'});});var showApproversPopUp=function($node){var html="<table class='table' style='table-layout:fixed;'>"+"<thead><th>User ID</th><th>Last Name</th><th>First Name</th><th>Email</th><th>Phone</th></thead>"+"<tbody>";for(var i=0;i<approversList.length;i++){if(approversList[i].WorkPhone==null){approversList[i].WorkPhone="";}
- if(approversList[i].FirstName==null){approversList[i].FirstName="";}
- if(approversList[i].LastName==null){approversList[i].LastName="";}
- if(approversList[i].Email==null){approversList[i].Email="";}
- var userName=approversList[i].UserName;html+="<tr><td style='display:inline-block; max-width:125px; overflow:hidden; text-overflow:ellipsis;'><a href='mailto:{3}' data-placement='bottom' data-toggle='tooltip' data-original-title='{0}'>{0}</td><td style='width:125px; overflow:hidden; text-overflow:ellipsis;'>{1}</td><td style='width:120px; overflow:hidden; text-overflow:ellipsis;'><span data-placement='bottom' data-toggle='tooltip' data-original-title='{2}'>{2}</span></td><td style='width:125px; overflow:hidden; text-overflow:ellipsis;'><a href='mailto:{3}' data-placement='bottom' data-toggle='tooltip' data-original-title='{3}'>{3}</a></td><td style='width:125px;'>{4}</td></tr>".format(userName.replace("'","\'"),approversList[i].LastName.replace("'","\'"),approversList[i].FirstName.replace("'","\'"),approversList[i].Email.replace("'","\'"),approversList[i].WorkPhone.replace("'","\'"));}
- html+="</tbody></table>";$node.data("popover").options.content=html;$node.busy(false);$node.popover("show");}
- var showInvalidRequestPanel=function(){$viewRoot.find(".form-request-details").fadeOut();$viewRoot.find(".panel-invalid-parameter").offset({left:60}).animate({left:'-=60',opacity:"toggle"});};var beforeShow=function(params){_params=params;approversList=null;if($viewRoot.find(".approver-response-history-grid").data("kendoGrid")!=undefined){$viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource());}
- $viewRoot.find(".panel-invalid-parameter").hide();$viewRoot.find(".panel-request-expired").hide();$viewRoot.find(".form-request-details").show();};var show=function(){if(_params==null||_params["id"]==undefined||isNaN(_params["id"])){showInvalidRequestPanel();return;}
- $viewRoot.find(".container-form-content").css("opacity",0.3)
- $viewRoot.find(".form-request-details").activity({segments:12,width:5.5,space:6,length:13,color:'#252525',speed:1.5});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetRequestDetails",data:{requestId:_params["id"],forApprover:false},contentType:"application/json; charset=utf-8",dataType:"json",success:function(requestDetails){if(requestDetails!=null&&requestDetails!=""&&requestDetails!=undefined){ko.mapping.fromJS(requestDetails,{},viewModel);$viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource({data:ko.toJS(viewModel().responses()),schema:{model:{id:"responseId",fields:{responseId:{type:"number"},approverId:{type:"number"},approverName:{type:"string"},responseDate:{type:"date"},response:{type:"string"},comment:{type:"string"}}}}}));}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){switch(ex.Message.toLowerCase()){case"request id not found or permission denied":showInvalidRequestPanel();break;default:showApplicationError(jqXhr);}}
- else showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".container-form-content").css("opacity",1)
- $viewRoot.find(".form-request-details").activity(false);}});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetScreenResolution",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){viewModel().resolution(result);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:308},success:function(result){if(result.optionValue=="1")
- viewModel().smartSize(true);else
- viewModel().smartSize(false);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});};var hide=function(){$viewRoot.find(".password").val("");_passwordDisplayPanel.hide();_sshDisplayPanel.hide();};var afterHide=function(){if(viewModel!=null)viewModel().reset();$viewRoot.find(".request-result").removeClass("alert-error").hide();if($viewRoot.find(".approver-response-history-grid").data("kendoGrid")!=undefined)
- $viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource());};var resize=function(){};var showInlineError=function showInlineError(message){$viewRoot.find(".request-result").addClass("alert-error").text(message).fadeIn(200);}
- var clearInlineError=function clearInlineError(){$viewRoot.find(".request-result").removeClass("alert-error").hide();}
- return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize,expireNow:expireNow,showError:showInlineError,clearError:clearInlineError};};</script>
- <div class="panels">
- <form class="panel form form-horizontal form-request-details">
- <div class="container-form-content">
- <div class="request-details">
- <h4>Request ID: <span class="form-value-label" data-bind="visible: requestId() > 0, text: requestId"></span></h4>
- <div class="section-content">
- <div class="control-group">
- <span class="control-label">Requested By:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <strong><span class="form-value-label" data-bind="text: requestedByName"></span></strong> <a class="popover-trigger popover-user-details" href="#"><i class="icon-info-sign"></i></a>
- <span class="form-value-splitter">on</span> <span class="form-value-label" data-bind="dateString: submittedDate"></span>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Account:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <strong><span class="form-value-label" data-bind="text: accountNameFull"></span></strong> on
- <strong><span class="form-value-label" data-bind="text: systemName"></span></strong> <a class="popover-trigger popover-asset-details" href="#"><i class="icon-info-sign"></i></a>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label" data-bind="visible: remoteDesktopAppID() > 0">Application:</span>
- <div class="controls read-only-label" data-bind="visible: remoteDesktopAppID() > 0" style="display: none;">
- <strong><span class="form-value-label" data-bind="text: remoteDesktopAppAlias"></span></strong>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Requested Date:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: requestedDateRange"></span><br />
- (<span class="form-value-label" data-bind="text: requestedDateHumanized"></span>)
- </div>
- </div>
- <div class="control-group access-type">
- <span class="control-label">Requested Access Type:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: AccessTypeName"></span>
- </div>
- </div>
- <style type="text/css">
- .isSevere {
- color: rgb(255, 100, 100) !important;
- }
- </style>
- <div class="control-group access-type">
- <span class="control-label">Restricted to Location:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: LocationName, css: {'isSevere': IsClientLocationValid() == false}, attr:{'title': IsClientLocationValid() == false ? 'Not allowed to access from this location.' : ''}"></span>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Reason:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: reason"></span>
- </div>
- </div>
- <div class="control-group" data-bind="visible: ticketNumber() != null && ticketNumber() != ''" style="display: none;">
- <span class="control-label">Ticket Number:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: ticketNumber"></span> on <span class="form-value-label" data-bind="text: ticketSystem"></span>
- </div>
- </div>
- <div class="control-group" data-bind="visible:((allowRDPConnectionFlag() || allowRemoteAppRDPConnectionFlag()) && ((approvedDate() != null)))">
- <span class="control-label">Screen Resolution:</span>
- <div class="controls" data-optional="false">
- <select class="input-xlarge rdp-screen-resolution" data-bind="value: resolution">
- <option value="640x480">640x480</option>
- <option value="800x600">800x600</option>
- <option value="1024x768">1024x768</option>
- <option value="1280x800">1280x800</option>
- <option value="1280x1024">1280x1024</option>
- <option value="1366x768">1366x768</option>
- <option value="1440x900">1440x900</option>
- <option value="1440x1050">1440x1050</option>
- <option value="1680x1050">1680x1050</option>
- <option value="1920x1080">1920x1080</option>
- <option value="1920x1200">1920x1200</option>
- <option value="1920x2058">1920x2058</option>
- <option value="Maximized">Maximized</option>
- </select>
- </div>
- </div>
- <div class="control-group" data-bind="visible:((allowRDPConnectionFlag() || allowRemoteAppRDPConnectionFlag()) && ((approvedDate() != null)))">
- <span class="control-label">Smart Sizing:</span>
- <div class="controls">
- <label class="checkbox">
- <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize" />
- </label>
- </div>
- </div>
- </div>
- </div>
- <h4 class="section-header">Approval History</h4>
- <div class="section-content">
- <div class="control-group approvals-required">
- <span class="control-label">Approvals Required:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: minimumApprovers"></span> <a class="popover-trigger popover-approvers-list" href="#"><i class="icon-info-sign"></i></a>
- </div>
- </div>
- <div class="approval-history-container">
- <div class="approver-response-history-grid"></div>
- </div>
- </div>
- <div class="action-buttons">
- <!--
- , enable: IsClientLocationValid()
- -->
- <div data-bind="visible: (requestId() > 0 && !isExpired() && approvedDate() != null && approvedDate() != '' && (cancelledDate() == null || cancelledDate() == ''))" style="display:none;">
- <button class="btn btn-danger btn-expire-now" data-bind="enable: (cancelledDate() == null || cancelledDate() == '')" onclick="_pages['request'].views['details'].expireNow();"><i class="icon-upload icon-white"></i> Check-in Request </button>
- <span class="spacer-small"></span>
- <button class="btn btn-success btn-retrieve-password" data-bind="visible:allowPasswordRetrievalFlag(), enable: IsClientLocationValid(), attr: { title: IsClientLocationValid() ? 'Click to retrieve the password' : 'Location is restricted' }"><i class="icon-eye-open icon-white"></i> Retrieve Password</button>
- <span class="spacer-small"></span>
- <button class="btn btn-success btn-start-ra-sessionRDP" data-bind="visible:allowRemoteAppRDPConnectionFlag(), enable: IsClientLocationValid(), attr: { title: IsClientLocationValid() ? 'Click to open the session' : 'Location is restricted' }"><i class="icon-off icon-white"></i>Application Session</button>
- <button class="btn btn-success btn-start-ra-sessionSSH" data-bind="visible:allowRemoteAppSSHConnectionFlag(), enable: IsClientLocationValid(), attr: { title: IsClientLocationValid() ? 'Click to open the session' : 'Location is restricted' }"><i class="icon-off icon-white"></i>Application Session</button>
- <span class="spacer-small"></span>
- <button class="btn btn-success btn-start-rdp-session" data-bind="visible:allowRDPConnectionFlag(), enable: IsClientLocationValid(), attr: { title: IsClientLocationValid() ? 'Click to open the session' : 'Location is restricted' }"><i class="icon-off icon-white"></i> Open RDP Session</button>
- <span class="spacer-small"></span>
- <button class="btn btn-success btn-start-ssh-session" data-bind="visible:allowSSHConnectionFlag(), enable: IsClientLocationValid(), attr: { title: IsClientLocationValid() ? 'Click to open the session' : 'Location is restricted' }"><i class="icon-off icon-white"></i> Open SSH Session</button>
- </div>
- <div class="action-buttons-sm-warning" data-bind="visible: (requestId() > 0 && !isExpired() && approvedDate() != null && approvedDate() != '' && (cancelledDate() == null || cancelledDate() == '') && (allowRDPConnectionFlag() || allowSSHConnectionFlag()))" style="display:none;">This session may be recorded </div>
- <div class="alert alert-warning" data-bind="visible: (requestId() > 0 && !isExpired() && (approvedDate() == null || approvedDate() == '') && (cancelledDate() == null || cancelledDate() == ''))" style="display:none;">
- This request has not yet been approved.
- </div>
- <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && !isExpired() && cancelledDate() != null && cancelledDate() != '')" style="display:none;">
- This request was cancelled or denied.
- </div>
- <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && isExpired())" style="display:none;">
- This request has expired.
- </div>
- <div class="alert request-result" style="display:none;"></div>
- </div>
- <div class="action-links">
- <a href="#/request/list" class="btn btn-mini btn-back-to-list">Back to Requests List</a>
- </div>
- </div>
- </form>
- <div class="panel panel-invalid-parameter" style="display:none;">
- <h3>Invalid Request ID</h3>
- <div class="alert alert-error">
- <p>An invalid Request ID was specified, or you do not have the required permission to view it.</p>
- <p>
- Please view the <a href="#/request/list">current requests list</a>
- and select a request to view.
- </p>
- </div>
- </div>
- <div class="panel panel-request-expired" style="display:none;">
- <div class="alert alert-success">
- <div><b>Password Checked In</b></div>
- <p>
- The password for the account <strong data-bind="text: accountName"></strong>
- on system <strong data-bind="text: systemName"></strong> has been checked in.
- </p>
- </div>
- <div class="section-header">
- <a href="#/accounts" class="btn btn-primary">New Request</a><!--#/request/accounts-->
- <span class="spacer-small"></span>
- <a href="#/request/list" class="btn btn-view-requests">View Your Requests</a>
- </div>
- </div>
- </div>
- </div>
- <!-- View: Password request form. -->
- <div class="view view-password-request" data-route="newrequest">
- <script type="text/javascript">
- var view_new_request=function(){var viewName="view-password-request";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-password-request");var _params=null;var viewModel=null;var isIsa=false;var showAccessPolicy=false;var remoteAppID="";var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;var clearError=function(){$viewRoot.find(".request-result").removeClass("alert-error").hide();}
- $viewRoot.find("#requestPassword-cancelButton").on("click",function(e){if(navigateToPreviousRoute("/accounts/accounts/status")){e.preventDefault();return false;}});$viewRoot.find(".btn-start-raRDP-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- sessionStartClickFunc(startRemoteAppSession);});$viewRoot.find(".btn-start-raSSH-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- sessionStartClickFunc(startRemoteAppSessionSSH);});$viewRoot.find(".btn-start-rdp-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- startRDPSession();});$viewRoot.find(".btn-start-ssh-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- startSSHSession();});$viewRoot.find(".btn-retrieve-password").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- setFormBusy(true);$('#requestPassword-cancelButton').attr("disabled",false);retrievePassword();});$viewRoot.find(".btn-submit-request").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- setFormBusy(true);submitNewRequest();});$viewRoot.find(".form-request-password").submit(function(e){e.preventDefault();return false;});var startSSHSession=function(){var viewModelJson=ko.toJSON(viewModel);$viewRoot.find(".btn-start-ssh-sessionisa").attr("disabled",true);$viewRoot.find(".btn-start-ssh-sessionisa").busy();$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteSessionSSH",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result.byPassLandingPage){window.location.href=result.sshLink;}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.Message).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".btn-start-ssh-sessionisa").attr("disabled",false);$viewRoot.find(".btn-start-ssh-sessionisa").busy(false);}});};viewModel=ko.validatedObservable(new requestViewModel());var requestedDate=new Date();requestedDate.setDate(requestedDate.getDate());requestedDate.setHours(9,0,0,0);viewModel().requestedDate(requestedDate);ko.applyBindings(viewModel,$viewRoot[0]);$viewRoot.find(".btn-view-requests").click(function(e){if(navigateToPreviousRoute("/request/list")){e.preventDefault();return false;}});_isInitialized=true;};var setFormBusy=function(isBusy){if(isBusy!=false)isBusy=true;if(isBusy){$('body').addClass('wait').bind('click',function(){return false;});}else{$('body').removeClass('wait').unbind('click');}
- if(isIsa){$viewRoot.find(".btn-retrieve-password").busy(isBusy);}else{$viewRoot.find(".btn-request-password").busy(isBusy);$viewRoot.find(".btn-request-rdpsession").busy(isBusy);$viewRoot.find(".btn-request-sshsession").busy(isBusy);$viewRoot.find(".btn-submit-request").busy(isBusy);}};var beforeShow=function(params){_params=params;if(viewModel!=null){var requestedDate=new Date();requestedDate.setDate(requestedDate.getDate());requestedDate.setHours(9,0,0,0);viewModel().requestedDate(requestedDate);viewModel().isNewRequest(true);}
- setFormBusy(false);$viewRoot.find(".date-required").show();$viewRoot.find(".requested-duration").show();$viewRoot.find(".btn-request-rdpsession").hide();$viewRoot.find(".btn-request-sshsession").hide();$viewRoot.find(".btn-request-password").hide();$viewRoot.find(".btn-retrieve-password").hide();$viewRoot.find(".panel-request-successful").hide();$viewRoot.find(".form-request-password").show();$viewRoot.find(".btn-submit-request").hide();$viewRoot.find(".toad-configurations").hide();$viewRoot.find(".lbl-toad-configurations").hide();$viewRoot.find(".btn-start-ra-sessionRDP").hide();$viewRoot.find(".btn-start-ra-sessionSSH").hide();$viewRoot.find(".btn-start-raRDP-sessionisa").hide();$viewRoot.find(".btn-start-raSSH-sessionisa").hide();$viewRoot.find(".btn-request-rasession").hide();$viewRoot.find(".ap-schedule").hide();isIsa=false;var isAccessView="";var isAccessRDP="";var isAccessSSH="";var isAccessRA="";var isUnix="";var isWindows="";var isDatabase="";var IsRemoteApp="";remoteAppID="";var systemID=0;if(params!=null){isIsa=(_params["isIsa"]!=undefined&&_params["isIsa"]==='true');var isAccessView=(_params["isV"]==='true');var isAccessRDP=(_params["isR"]==='true');var isAccessSSH=(_params["isS"]==='true');var isAccessRA=(_params["isAR"]==='true');var isUnix=(_params["isU"]==='true');var isWindows=(_params["isW"]==='true');var isDatabase=(_params["isD"]==='true');var IsRemoteApp=(_params["isRA"]==='true');remoteAppID=_params["raID"];if(remoteAppID=='null'){remoteAppID=0;}
- systemID=_params["sId"];}else{isInitialized=false;}
- if(isIsa===true){showAccessPolicy=false;var showRDP=false;var showSSH=false;if(isWindows===true){showRDP=true;}
- else if(isUnix===true){showSSH=true;}
- $viewRoot.find(".date-required").hide();$viewRoot.find(".requested-duration").hide();$viewRoot.find(".btn-retrieve-password").show();$viewRoot.find(".access-type").hide();$viewRoot.find(".ap-schedule").hide();viewModel().requestAcessTypeIsRequired(false);if(showRDP===true){$viewRoot.find(".btn-start-rdp-sessionisa").show();}else{$viewRoot.find(".btn-start-rdp-sessionisa").hide();}
- if(showRDP===true||IsRemoteApp===true){$viewRoot.find(".rdp-screen-resolutionisa").show();$viewRoot.find(".lbl-screen-resolutionisa").show();$viewRoot.find(".smart-size-isa").show();}else{$viewRoot.find(".rdp-screen-resolutionisa").hide();$viewRoot.find(".lbl-screen-resolutionisa").hide();$viewRoot.find(".smart-size-isa").hide();}
- if(showSSH===true){$viewRoot.find(".btn-start-ssh-sessionisa").show();$viewRoot.find(".rdp-screen-resolutionisa").hide();$viewRoot.find(".lbl-screen-resolutionisa").hide();$viewRoot.find(".smart-size-isa").hide();}else{$viewRoot.find(".btn-start-ssh-sessionisa").hide();}
- if(showRDP==true||showSSH==true||remoteAppID>0){$viewRoot.find(".chk-record-sessionisa").show();$viewRoot.find(".lbl-record-session").show();}else{$viewRoot.find(".chk-record-sessionisa").hide();$viewRoot.find(".lbl-record-session").hide();}
- if(remoteAppID>0){$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/CheckApplicationIsSSH",data:{managedSystemId:systemID,remoteDesktopAppId:remoteAppID},contentType:"application/json; charset=utf-8",dataType:"json",success:function(result){if(result){$viewRoot.find(".btn-start-raRDP-sessionisa").hide();$viewRoot.find(".btn-start-raSSH-sessionisa").show();}else{$viewRoot.find(".btn-start-raRDP-sessionisa").show();$viewRoot.find(".btn-start-raSSH-sessionisa").hide();$viewRoot.find(".rdp-screen-resolutionisa").show();$viewRoot.find(".lbl-screen-resolutionisa").show();$viewRoot.find(".smart-size-isa").show();}},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);},complete:function(){}});}
- $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:295},success:function(result){if(result.optionValue=="True"){$viewRoot.find(".button-bar").hide();}else{$viewRoot.find(".button-bar").show();}},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}
- else{showAccessPolicy=true;$viewRoot.find(".btn-start-rdp-sessionisa").hide();$viewRoot.find(".btn-start-ssh-sessionisa").hide();$viewRoot.find(".chk-record-sessionisa").hide();$viewRoot.find(".lbl-record-session").hide();$viewRoot.find(".rdp-screen-resolutionisa").hide();$viewRoot.find(".lbl-screen-resolutionisa").hide();$viewRoot.find(".smart-size-isa").hide();$viewRoot.find(".toad-configurations").hide();$viewRoot.find(".lbl-toad-configurations").hide();$viewRoot.find(".btn-start-raRDP-sessionisa").hide();$viewRoot.find(".btn-start-raSSH-sessionisa").hide();$viewRoot.find(".btn-request-rdpsession").hide();$viewRoot.find(".btn-request-sshsession").hide();$viewRoot.find(".btn-request-password").hide();$viewRoot.find(".btn-request-rasession").hide();$viewRoot.find(".access-type").show();viewModel().requestAcessTypeIsRequired(true);$viewRoot.find(".btn-submit-request").show();viewModel().accessTypes([]);var isAccessibleRemoteApp=((remoteAppID>0)&&(isAccessRA===true));if(isAccessView===true){viewModel().addAccessType(new AccessTypeViewModel("viewpwd",1,"Password",true));}
- if(isAccessRDP===true&&isWindows===true&&remoteAppID==0){viewModel().addAccessType(new AccessTypeViewModel("rdpaccess",2,"RDP Session",true,false));}
- if(isAccessSSH===true&&isUnix===true&&remoteAppID==0){viewModel().addAccessType(new AccessTypeViewModel("sshaccess",4,"SSH Session",true,false));}
- if(isAccessibleRemoteApp){viewModel().addAccessType(new AccessTypeViewModel("rasaccess",8,"Application Session",true,false));}
- viewModel().SelectedStartTime.extend({required:{message:"A start time is required."}});}};var show=function(){if(_params==null||_params["sId"]==undefined||_params["sName"]==undefined||_params["aId"]==undefined||_params["aName"]==undefined){return;}
- viewModel().systemId(_params["sId"]);viewModel().systemName(_params["sName"]);viewModel().accountId(_params["aId"]);viewModel().accountName(_params["aName"]);if(_params["dName"]!=undefined&&_params["dName"]!="null"){viewModel().domainName(_params["dName"]);}
- viewModel().recordSessionForConnectionFlag(false);viewModel().showrdp(false);viewModel().showssh(false);isIsa=(_params["isIsa"]!=undefined&&_params["isIsa"]==='true');var isUnix=(_params["isU"]==='true');var isWindows=(_params["isW"]==='true');var isDatabase=(_params["isD"]==='true');if(isIsa===true){viewModel().recordSessionForConnectionFlag(true);if(isWindows===true){viewModel().showrdp(true);viewModel().recordSessionForConnectionFlag(true);}else if(isUnix===true){viewModel().showssh(true);viewModel().recordSessionForConnectionFlag(true);}}else{if(_params["isLA"]=='true'){viewModel().IsDomainLinkedAccount(true);}}
- viewModel().durationDays(null);viewModel().durationHours(null);viewModel().durationMinutes(null);viewModel().maxDurationDays(null);viewModel().maxDurationHours(null);viewModel().maxDurationMinutes(null);viewModel().isMultiSystemCheckout(false);viewModel().durationDays(_params["defDD"]);viewModel().durationHours(_params["defDH"]);viewModel().durationMinutes(_params["defDM"]);viewModel().maxDurationDays(_params["maxDD"]);viewModel().maxDurationHours(_params["maxDH"]);viewModel().maxDurationMinutes(_params["maxDM"]);viewModel().platformId(_params["isP"]);viewModel().CalculateTotalMaxDurationInMinutes();if(_params["raID"]=='null'){viewModel().remoteDesktopAppID(0);}else{viewModel().remoteDesktopAppID(_params["raID"]);}
- viewModel().remoteDesktopAppAlias(_params["raAlias"]);$viewRoot.find(".ticket-systems option").remove();$viewRoot.find(".ticket-systems").append("<option>Loading...</option>");$viewRoot.find(".ticket-systems").attr("disabled",true);function setDatePickerState(enabled){if(enabled){$viewRoot.find("#calPicker.k-datepicker .k-select").addClass("active");$viewRoot.find("#calPicker.k-datepicker .k-picker-wrap").removeClass("k-state-disabled");$viewRoot.find("#calPicker.k-datepicker .k-picker-wrap").addClass("k-state-default");}else{$viewRoot.find("#calPicker.k-datepicker .k-select.active").removeClass("active");$viewRoot.find("#calPicker.k-datepicker .k-picker-wrap").removeClass("k-state-default");$viewRoot.find("#calPicker.k-datepicker .k-picker-wrap").addClass("k-state-disabled");}}
- if(showAccessPolicy){function setTimePickerState(isImmediate){var sp=$("#stPicker").data("kendoTimePicker");if(sp!=null){if(!isImmediate){sp.enable();}else{sp.enable(false);}}}
- $(document).on('change','input[name=rbtnIsImmediate]',function(){setTimePickerState(this.value=="1");})
- setDatePickerState(true);var dates=[];var acntId=viewModel().accountId();var sysId=viewModel().systemId();var m=moment(viewModel().requestedDate()).format();var disableDateTimePickerDates=function(accountId,forMonthOf){return getDisabledDatesForMonth(accountId,forMonthOf).done(handleDatesData).fail(handleError);}
- function getDisabledDatesForMonth(accountId,forMonthOf){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetValidMonthDatesForAccountCheckOut",dataType:"json",contentType:"application/json; charset=utf-8",data:{managedAccountId:accountId,managedSystemId:sysId,ForMonthOf:forMonthOf,clientTZOffsetMinutes:(new Date()).getTimezoneOffset()},})}
- function getAvailableTimeFrames(accountId,selectedDate,systemId){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetValidTimesForAccountCheckOut",dataType:"json",contentType:"application/json; charset=utf-8",data:{managedAccountId:accountId,ForDayOf:selectedDate,systemId:systemId,clientTZOffsetMinutes:(new Date()).getTimezoneOffset(),remoteAppId:viewModel().remoteDesktopAppID()},});}
- var renderAccessPolicyUI=function(dateTime,accountId){var m=moment(dateTime).format();$viewRoot.find(".ap-schedule").show();resetAccessPolicyData();getAvailableTimeFrames(accountId,m,sysId).done(renderAPScheduleElememnts).fail(handleError);}
- function handleError(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find("#requestPassword-cancelButton").attr("disabled",false);setDatePickerState(false);var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;case"sequence contains no elements":displayMessage="No access policies could be found. Please contact your Password Safe administrator.";break;}
- $viewRoot.find(".request-result").addClass("alert-error").text(displayMessage).fadeIn(200);}
- else showApplicationError(jqXhr);}
- function renderDefaultAPUI(data){handleDatesData(data);renderAccessPolicyUI(viewModel().requestedDate(),acntId);}
- function handleDatesData(data){dates=[];viewModel().DisabledDates(data.disabledDates);viewModel().MaxAvailableDate(data.maxAvailableDate);var minDateUtc=moment.utc(data.minAvailableDate);viewModel().requestedDate(new Date(minDateUtc.year(),minDateUtc.month(),minDateUtc.date(),0,0,0,0));dates=data.disabledDates;initPicker(viewModel().requestedDate(),viewModel().MaxAvailableDate(),viewModel().DisabledDates(),true);}
- function enableDisableDatePicker(isEnabled){var iVal=+isEnabled;switch(iVal){case 1:$viewRoot.find("#jqPicker").removeAttr("readonly");$viewRoot.find("#jqPicker").prop('disabled',false);break;case 0:$viewRoot.find("#jqPicker").datetimepicker("hide");$viewRoot.find("#jqPicker").prop('disabled',true);$viewRoot.find("#jqPicker").attr("readonly","readonly");break;}}
- var changeMonthLogic=function(date,$el){var newDate=moment(date).format();if(moment(date).diff(moment(),'months')<0){return false;}else{disableDateTimePickerDates(acntId,newDate).done(handleDatesData).fail(handleError);}}
- var onSelectDate=function(current_time,$input){viewModel().requestedDate(new Date(current_time));renderAccessPolicyUI(current_time,viewModel().accountId());}
- var resetAccessPolicyData=function(){viewModel().ResetAccessTypes();viewModel().APScheduleElements([]);viewModel().requestedAPScheduleId(0);}
- function renderAPScheduleElememnts(data){if(!$.isEmptyObject(data)){var iCounter=0;$.each(data,function(){viewModel().addAPScheduleElement(new ScheduleElementViewModel(viewModel().requestedDate(),this['schElementId']+iCounter,this['APName'],this['startTime'],this['endTime'],this['IsAccessView'],this['IsAccessRDP'],this['IsAccessSSH'],this['IsAccessRA'],this['Location'],this['AccessTypesBit']));iCounter=iCounter+.1;});viewModel().SetDefaultAPScheduleElement();$viewRoot.find("#apSched").show();$viewRoot.find("#timePickers").show();setTimePickerState(viewModel().isImmediate()==1);}}
- $viewRoot.find('.k-select.active').click(function(){$viewRoot.find('#jqPicker').datetimepicker('show');});$viewRoot.find('#calPicker').hover(function(){$(this).children('.k-picker-wrap').addClass('k-state-hover')},function(){$(this).children('.k-picker-wrap').removeClass('k-state-hover')});function initPicker(selectedDate,maximumDate,disabledDates,isEnabled){var minDate=moment(selectedDate).toDate();$viewRoot.find("#jqPicker").datetimepicker({value:selectedDate,format:'ddd, MMM DD, YYYY',formatDate:'ddd, MMM DD, YYYY',onChangeMonth:changeMonthLogic,onSelectDate:onSelectDate,closeOnDateSelect:true,minTime:0,step:30,maxDate:maximumDate,minDate:minDate,disabledDates:dates,datepicker:true,timepicker:false,allowEmpty:false,todayButton:false});enableDisableDatePicker(isEnabled);}
- getDisabledDatesForMonth(acntId,m).done(renderDefaultAPUI).fail(handleError);}
- if(viewModel.errors().length>0){viewModel().ticketSystemId.isModified(false);viewModel().ticketSystem.isModified(false);viewModel().ticketNumber.isModified(false);}
- var defaultSystemId=0;$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetTicketSystems",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){$viewRoot.find(".ticket-systems option").remove();var options='';var ticketSystems=result.ticketSystems;if(result.mandatory=="True"){viewModel().ticketNumber.extend({required:{message:"A ticket number is required."}});$viewRoot.find(".ticket-systems").attr("disabled",false);$viewRoot.find(".ticket-number").attr("disabled",false);$viewRoot.find("label[for='ticketSystem']").attr("data-optional","false");$viewRoot.find("label[for='ticketNumber']").attr("data-optional","false");}else{options="<option value='0'>(None)</option>";viewModel().ticketSystemId(0);if(ticketSystems.length<=0){$viewRoot.find(".ticket-systems").attr("disabled",true);$viewRoot.find(".ticket-number").attr("disabled",true);$viewRoot.find("label[for='ticketSystem']").attr("data-optional","true");$viewRoot.find("label[for='ticketNumber']").attr("data-optional","true");}else{$viewRoot.find(".ticket-systems").attr("disabled",false);$viewRoot.find(".ticket-number").attr("disabled",false);$viewRoot.find("label[for='ticketSystem']").attr("data-optional","true");$viewRoot.find("label[for='ticketNumber']").attr("data-optional","true");}}
- $.each(ticketSystems,function(){viewModel().emergencyApproval[this.Id]=this.EnableEmergancyApproval;if(this.IsDefaultSystem==true){defaultSystemId=this.Id;options+='<option value="'+this.Id+'" selected="selected">'+this.Name.replace("<","<").replace(">",">")+'</option>';}else{options+='<option value="'+this.Id+'">'+this.Name.replace("<","<").replace(">",">")+'</option>';}});$viewRoot.find(".ticket-systems").append(options);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}}).done(function(){if(defaultSystemId>=0){viewModel().ticketSystemId(defaultSystemId);}});if(isIsa===true){$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetScreenResolution",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){viewModel().resolution(result);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:308},success:function(result){if(result.optionValue=="1")
- viewModel().smartSize(true);else
- viewModel().smartSize(false);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}
- $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:283},success:function(result){viewModel().reason.rules.remove(function(item){return item.rule=="required";});var isRequired=false;if($.isEmptyObject(result)||result.optionValue==null||$.isEmptyObject(result.optionValue)||(result.optionValue.length==0)){isRequired=true;$viewRoot.find("label[for='reason']").attr("data-optional","false");}
- if(result.optionValue=="True"){isRequired=true;$viewRoot.find("label[for='reason']").attr("data-optional","false");}else{isRequired=false;$viewRoot.find("label[for='reason']").attr("data-optional","true");}
- if(isRequired){viewModel().reason.extend({required:{message:"Reason is required."}});}else{viewModel().reason.extend({required:false});}},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});};var hide=function(){_passwordDisplayPanel.hide();_sshDisplayPanel.hide();};var afterHide=function(){viewModel().reset();$viewRoot.find(".request-result").removeClass("alert-error").hide();$viewRoot.find(".booked-request-table").html("");};var resize=function(){};var submitNewRequest=function(accessType){viewModel().getSelectedDurationInMinutes();var viewModelJson=ko.toJSON(viewModel);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/NewRequest",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){viewModel().requestId(result);showSuccessMessage(result);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;}
- if(displayMessage.indexOf("This account is not available during the requested time because there")>-1){showBooked();}
- $viewRoot.find(".request-result").addClass("alert-error").text(displayMessage).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){setFormBusy(false);}});};var sessionStartClickFunc=function onSessionStartClick(func){var viewModelJson=ko.toJSON(viewModel);$.when(validateRequestFunc(viewModelJson)).then(function(){validateRequestSuccessFunc(func)}).fail(function(jqXhr,textStatus,errorThrown){validateRequestFailFunc(jqXhr,textStatus,errorThrown,$viewRoot);})};var startRemoteAppSession=function(){window.open("/eEye.RetinaCS.Server/api/PMM/StartRemoteAppSession?isa=true&protocol=rdp&systemid="+viewModel().systemId()+"&accountid="+viewModel().accountId()+"&record="+viewModel().recordSessionForConnectionFlag()+"&resolution="+viewModel().resolution()+"&smartsize="+viewModel().smartSize()+"&ticketsystemid="+viewModel().ticketSystemId()+"&ticketnumber="+viewModel().ticketNumber()+"&reason="+viewModel().reason()+"&platform="+viewModel().platformId()+"&remotedesktopappid="+viewModel().remoteDesktopAppID()+"&anticsrftoken="+_antiCSRFToken);};var startRemoteAppSessionSSH=function(){var viewModelJson=ko.toJSON(viewModel);$viewRoot.find(".btn-start-raSSH-sessionisa").attr("disabled",true);$viewRoot.find(".btn-start-raSSH-sessionisa").busy();$viewRoot.find(".btn-retrieve-password").attr("disabled",true);$viewRoot.find(".btn-start-ssh-sessionisa").attr("disabled",true);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteAppSessionSSH",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result.byPassLandingPage){window.location.href=result.sshLink;}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.Message).fadeIn(200);}
- else showApplicationError(jqXhr);$viewRoot.find(".btn-start-raSSH-sessionisa").attr("disabled",false);$viewRoot.find(".btn-start-raSSH-sessionisa").busy(false);$viewRoot.find(".btn-retrieve-password").attr("disabled",false);$viewRoot.find(".btn-start-ssh-sessionisa").attr("disabled",false);},complete:function(){$viewRoot.find(".btn-start-raSSH-sessionisa").attr("disabled",false);$viewRoot.find(".btn-start-raSSH-sessionisa").busy(false);$viewRoot.find(".btn-retrieve-password").attr("disabled",false);$viewRoot.find(".btn-start-ssh-sessionisa").attr("disabled",false);}});};$viewRoot.find(".btn-start-rdp-session").click(function(){startRDPSession();});var startRDPSession=function(){window.open("/eEye.RetinaCS.Server/api/PMM/StartRemoteSession?isa=true&protocol=rdp&systemid="+viewModel().systemId()+"&accountid="+viewModel().accountId()+"&record="+viewModel().recordSessionForConnectionFlag()+"&resolution="+viewModel().resolution()+"&smartsize="+viewModel().smartSize()+"&ticketsystemid="+viewModel().ticketSystemId()+"&ticketnumber="+viewModel().ticketNumber()+"&reason="+viewModel().reason()+"&anticsrftoken="+_antiCSRFToken);};$viewRoot.find(".chk-record-sessionisa").click(function(){if($(this).is(':checked')){viewModel().recordSessionForConnectionFlag(true);}else{viewModel().recordSessionForConnectionFlag(false);}});var retrievePassword=function(){var viewModelJson=ko.toJSON(viewModel);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/RetrievePasswordIsa",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){_passwordDisplayPanel.showPasswordPanel(result,$viewRoot);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.Message).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){setFormBusy(false);}});}
- var showBooked=function(){var viewModelJson=ko.toJSON(viewModel);var approvedList=null;$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetApprovedUsersForRequest",data:viewModelJson,contentType:"application/json; charset=utf-8",dataType:"json",type:"POST",success:function(result){approvedList=result;if(approvedList.length>0){var html="<table class='table' style='table-layout:auto;'>"+"<thead><th>User ID</th><th>Last Name</th><th>First Name</th><th>Email</th><th>Phone</th></thead>"+"<tbody>";for(var i=0;i<approvedList.length;i++){if(approvedList[i].WorkPhone==null){approvedList[i].WorkPhone="";}
- if(approvedList[i].FirstName==null){approvedList[i].FirstName="";}
- if(approvedList[i].LastName==null){approvedList[i].LastName="";}
- if(approvedList[i].Email==null){approvedList[i].Email="";}
- var userName=approvedList[i].UserName;html+="<tr><td style='display:width:130px;'>{0}</td><td style='display:width:130px;'>{1}</td><td style='display:width:130px;'>{2}</td><td style='display:width:130px;'><a href='mailto:{3}'>{3}</a></td><td style='display:width:130px;'>{4}</td></tr>".format(userName.replace("'","\'"),approvedList[i].LastName.replace("'","\'"),approvedList[i].FirstName.replace("'","\'"),approvedList[i].Email.replace("'","\'"),approvedList[i].WorkPhone.replace("'","\'"));}
- html+="</tbody></table>";$viewRoot.find(".booked-request-table").html(html);}},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".container-form-content").css("opacity",1)
- $viewRoot.find(".form-approve-request").activity(false);}});};var showSuccessMessage=function(data){var newUrl='#/request/list/status=Active';window.location.href=newUrl;return false;};var showInlineError=function showInlineError(message){$viewRoot.find(".request-result").addClass("alert-error").text(message).fadeIn(200);}
- return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize,showError:showInlineError};};</script>
- <div class="panels">
- <form class="form-horizontal form-request-password">
- <div class="control-group">
- <label class="control-label">Account:</label>
- <div class="controls read-only-label font-larger" style="font-size:larger;">
- <strong><span data-bind="text: accountNameFull"></span></strong>
- <span class="form-value-splitter">on</span>
- <strong><span data-bind="text: systemName"></span></strong>
- <span class="form-value-splitter" data-bind="visible: remoteDesktopAppID()>0">for Application</span>
- <strong><span data-bind="visible: remoteDesktopAppID()>0 ,text: remoteDesktopAppAlias"></span></strong>
- </div>
- </div>
- <div class="control-group date-required">
- <label class="control-label" for="rbtnIsImmediate">Start Date:</label>
- <div class="controls">
- <span id="calPicker" class="k-widget k-datepicker k-header"><span class="k-picker-wrap k-state-default"><input id="jqPicker" onkeydown="return false;" type="text" data-role="datepicker" class="k-input" role="combobox" aria-expanded="false" aria-disabled="false" aria-readonly="false" style="width: 100%;" /><span unselectable="on" class="k-select active" role="button"><span unselectable="on" class="k-icon k-i-calendar">select</span></span></span></span>
- to
- <span data-bind="text: requestedEndDate"></span>
- </div>
- </div>
- <div class="control-group ap-schedule">
- <label class="control-label">Access Policy Windows:</label>
- <div class="controls" data-bind="visible: $root.APScheduleElements().length > 0">
- <div id="apSched">
- <!-- ko foreach: $root.APScheduleElements -->
- <label class="radio"><input name="rbtnAPWindow" type="radio" data-bind="value: schElementId(), checked: $root.requestedAPScheduleId, enable: Enabled()" /><!-- ko text: FormattedStartEndTime() + ' ' + DisplayedAccessText() + ' ' + ReadableLocation() + ' <' + APName() + '>' --><!-- /ko --></label><br />
- <!-- /ko -->
- </div>
- </div>
- <div class="controls read-only-label" data-bind="visible: $root.APScheduleElements().length == 0">
- <span class="form-value-label">No available windows. Contact your administrator.</span>
- </div>
- </div>
- <div id="timePickers" data-bind="with: currentAPScheduleElement()" class="control-group times">
- <label class="control-label">Start Time:</label>
- <div class="controls">
- <label class="radio"><input id="inpImmediate" name="rbtnIsImmediate" type="radio" data-bind="value: 1, checked: $root.isImmediate, enable: $root.ImmediateAvailable" />Immediately<!-- ko if: $root.isImmediate --> to <span data-bind="text: $root.EndTimeOnly"></span><!-- /ko --></label><br />
- <label class="radio inline"><input name="rbtnIsImmediate" type="radio" data-bind="value: 0, checked: $root.isImmediate, enable: $root.TimeSelectionAvailable" /></label>
- <input id="stPicker" data-bind="kendoTimePicker: { value: $root.SelectedStartTime, min: PickerStartTime(), max: PickerEndTime() , interval: stepInterval }" /><!-- ko if: $root.isImmediate() !== 1 --> to <span data-bind="text: $root.EndTimeOnly"></span><!-- /ko -->
- </div>
- </div>
- <div class="control-group requested-duration">
- <label class="control-label">Requested Duration:</label>
- <div class="controls">
- <input id="daySpinner" type="number" class="control-duration duration-days" min="0" max="6" step="1" data-bind="kendoNumericTextBox: {value: durationDays, format: 'n0'}" /> days
- <span class="spacer-mini"></span>
- <input id="hourSpinner" type="number" class="control-duration duration-hours" min="0" max="23" step="1" data-bind="kendoNumericTextBox: {value: durationHours, format: 'n0'}" /> hours
- <span class="spacer-mini"></span>
- <input id="minSpinner" type="number" class="control-duration duration-minutes" min="0" max="59" step="5" data-bind="kendoNumericTextBox: {value: durationMinutes, format: 'n0'}" /> minutes
- <div class="retinaCS-validation-message" style="display:none;">
- <em></em>
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: maxDurationDays"></div>
- </div>
- </div>
- </div>
- </div>
- <div class="control-group access-type">
- <label class="control-label">Access Request:</label>
- <div class="controls div-access-type" data-bind="visible: accessTypes().length > 0">
- <input type="hidden" id="hiRequestAccessType" data-bind="value: requestAccessTypeStr" />
- <!-- ko foreach: $root.accessTypes -->
- <label data-bind="css: 'checkbox' + ' ' + cssClassName()"><input name="rbtnAccessType" type="checkbox" data-bind="value: bitValue(), enable: enabled(), checked: $root.requestAccessTypeStr" /><!-- ko text: title() --><!-- /ko --></label><br />
- <!-- /ko -->
- </div>
- <div class="controls read-only-label" data-bind="visible: accessTypes().length == 0">
- <span class="form-value-label">No access request types available. Contact your administrator.</span>
- </div>
- </div>
- <div class="control-group" data-bind="visible:_sessionUserViewModel.AllowAdminSession() == true && IsDomainLinkedAccount">
- <label class="control-label" for="multi-system-checkout">Multi-System Checkout:</label>
- <div class="controls multi-system-checkout">
- <label class="checkbox">
- <input type="checkbox" class="chk chk_multi-system-checkout" data-bind="checked: isMultiSystemCheckout" />
- Allow this account and request to be used for Admin Sessions
- </label>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="reason">Reason:</label>
- <div class="controls div-reason">
- <textarea id="reason" rows="4" class="input-xlarge" data-bind="value: reason"></textarea>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="ticketSystem">Ticket System:</label>
- <div class="controls div-ticket-systems">
- <select class="input-xlarge ticket-systems" data-bind="value: ticketSystemId"></select>
- </div>
- <div class="retinaCS-validation-message" style="display:none;">
- <em></em>
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: ticketSystemDisplay"></div>
- </div>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="ticketNumber" data-bind="attr: { 'data-optional': ticketSystemId() > 0 ? 'false' : 'true' }">Ticket Number:</label>
- <div class="controls div-ticket-number">
- <input type="text" class="input-xlarge ticket-number" data-bind="value: ticketNumber" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label lbl-screen-resolutionisa">Screen Resolution:</label>
- <div class="controls" data-optional="false">
- <select class="input-xlarge rdp-screen-resolutionisa" data-bind="value: resolution">
- <option value="640x480">640x480</option>
- <option value="800x600">800x600</option>
- <option value="1024x768">1024x768</option>
- <option value="1280x800">1280x800</option>
- <option value="1280x1024">1280x1024</option>
- <option value="1366x768">1366x768</option>
- <option value="1440x900">1440x900</option>
- <option value="1440x1050">1440x1050</option>
- <option value="1680x1050">1680x1050</option>
- <option value="1920x1080">1920x1080</option>
- <option value="1920x1200">1920x1200</option>
- <option value="1920x2058">1920x2058</option>
- <option value="Maximized">Maximized</option>
- </select>
- </div>
- </div>
- <div class="control-group smart-size-isa">
- <span class="control-label">Smart Sizing:</span>
- <div class="controls">
- <label class="checkbox">
- <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize" />
- </label>
- </div>
- </div>
- <div class="control-group button-bar2">
- <div class="controls">
- <div>
- <button class="btn btn-primary btn-request-rdpsession">Request RDP Session</button>
- <button class="btn btn-primary btn-request-sshsession">Request SSH Session</button>
- <button class="btn btn-primary btn-request-password">Request Password</button>
- <button class="btn btn-primary btn-request-rasession">Request Application Session</button>
- <button class="btn btn-primary btn-submit-request" data-bind="enable: IsValidRequest">Submit Request</button>
- <button class="btn btn-success btn-retrieve-password"><i class="icon-eye-open icon-white"></i> Retrieve Password</button>
- <button class="btn btn-success btn-start-rdp-sessionisa"><i class="icon-off icon-white"></i> Open RDP Session</button>
- <button class="btn btn-success btn-start-ssh-sessionisa"><i class="icon-off icon-white"></i> Open SSH Session</button>
- <button class="btn btn-success btn-start-raRDP-sessionisa"><i class="icon-off icon-white"></i> Application Session</button>
- <button class="btn btn-success btn-start-raSSH-sessionisa"><i class="icon-off icon-white"></i> Application Session</button>
- <a href="#/accounts" id="requestPassword-cancelButton" class="btn">Cancel</a>
- </div>
- </div>
- </div>
- <div class="control-group button-bar">
- <div class="controls">
- <div>
- <input type="checkbox" class="chk chk_success chk-record-sessionisa" data-bind="checked: recordSessionForConnectionFlag()" />
- <span class="spacer-small"></span>
- <label class="control-label lbl-record-session">Record Session:</label>
- </div>
- </div>
- </div>
- <div class="alert request-result" style="display:none;"></div>
- <div class="blocked-request-container">
- <div class="booked-request-table"></div>
- </div>
- </form>
- <div class="panel panel-request-successful" style="display:none;">
- <div class="alert alert-success">
- <div><b>Request Received</b></div>
- <p>
- Request number <strong data-bind="text: requestId">2</strong> for the release of the password for the account <strong data-bind=" text: accountName"></strong>
- on system <strong data-bind="text: systemName"></strong> has been submitted.
- </p>
- <p>
- You should receive email confirmation of the request.
- </p>
- <a data-bind="attr: { href: '#/request/details/id=' + requestId() }" class="btn btn-success">View Request Details</a>
- </div>
- <div class="section-header">
- <a href="#/accounts" class="btn btn-primary">New Request</a> <!--#/request/accounts-->
- <span class="spacer-small"></span>
- <a href="#/request/list" class="btn btn-view-requests">View Your Requests</a>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- Page: ACCOUNTS -->
- <div class="page page-accounts-list" data-route="accounts" data-default-view-route="accounts">
- <script type="text/javascript">var page_accounts_list=function(){var CHANNEL_PAGE="Channel.Page.Accounts";var PAGE_ROOT_CLASS="page-accounts-list";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_REQUESTOR,ROLE_REQUESTOR_APPROVER,ROLE_ISA];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;switch(view.name){case"view-accounts-list":break;}};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles};};</script>
- <div class="views">
- <!-- View: List of accounts the user can check-out. -->
- <div class="view view-accounts-list" data-route="accounts">
- <script type="text/javascript">
- var view_accounts_list=function(){var viewName="view-accounts-list";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={NEW_REQUEST:"accounts_list.new_request",ACCOUNT_SELECTED:"accounts_list.account_selected"};var $viewRoot=$(".view.view-accounts-list");var _params=null;var gridDataSource=null;var accountsGridSourceModel=null;var $grid=null;var filterModel;var sshApplication=false;var isApplication=false;var quickLaunchViewModel;var qlWindow=$('#qlWindow').data("kendoWindow");var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializeManagedAccountsGrid();filterModel=ko.validatedObservable(new accountFilterViewModel());filterModel().selectButton(filterModel().buttons()[0]);ko.applyBindings(filterModel,$viewRoot[0]);$viewRoot.find(".filter-request-status .btn").click(function(e){$(this).parents('form:first.form-filter').submit();e.preventDefault();return false;});$viewRoot.find(".form-filter").submit(function(e){e.preventDefault();removeGridOverlay($viewRoot,'.overlay');if(filterModel.errors().length>0){filterModel.errors.showAllMessages();return false;}
- var status=filterModel().selectedButton().name;var system=filterModel().SystemName();var accountName=filterModel().AccountName();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="))
- newUrl+="/status="+status;if(system!="")newUrl+="&system="+encodeURIComponent(system);if(accountName!="")newUrl+="&accountName="+encodeURIComponent(accountName);if(window.location.href==newUrl)$grid.data("kendoGrid").dataSource.read();else window.location.href=newUrl;return false;});$viewRoot.on("click",":submit",function(e){e.preventDefault();e.stopPropagation();var system=filterModel().SystemName();if(!system){filterModel().SystemName('*');}
- $(this).parents('form:first.form-filter').submit();return false;});$viewRoot.on("click",".submit",function(e){e.preventDefault();e.stopPropagation();filterModel().SystemName('*');$viewRoot.find('form:first.form-filter').submit();return false;});$viewRoot.find(".form-filter .btn-clear-filter").click(function(e){e.preventDefault();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="))
- newUrl+="/status=Favorites&reset=true";window.location.href=newUrl;return false;});$viewRoot.on("click",".overlay .close-link a, .overlay button",function(e){e.preventDefault();hideGridOverlay($viewRoot,'.overlay');enableGridPaging($grid);$grid.find("#favMaster").removeClass("disabled");$grid.removeClass("no-scroll");});$viewRoot.on("click","td.directconnect a",function(e){e.preventDefault();startRDPDirectConnectSession(e);});$viewRoot.on("click","td.favorite-action a",function(e){e.preventDefault();onFavLinkClick(e,this);});$viewRoot.on('click',"#favMaster",function(e){e.preventDefault();if($(this).hasClass('disabled')){return false;}
- var isOn=$(this).hasClass('filled');onFavMasterLinkClick(this,!isOn);});var startRDPDirectConnectSession=function(event){var grid=$viewRoot.find(".managed-accounts-grid").data("kendoGrid");var selectedDataItem=grid.dataItem(event.currentTarget.parentElement.parentElement);$.when(hasDCPermission(selectedDataItem.AccountID)).then(function(){window.location="/eEye.RetinaCS.Server/api/PMM/DownloadDirectConnectRDPFile?accountId="+selectedDataItem.AccountID+"&systemId="+selectedDataItem.SystemID+"&anticsrftoken="+_antiCSRFToken;}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);});};var hasDCPermission=function(managedAccountId){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/DirectConnectPermissionCheck?managedAccountId="+managedAccountId+"&anticsrftoken="+_antiCSRFToken,type:"POST",dataType:"json",contentType:"application/json; charset=utf-8",});}
- var onFavMasterLinkClick=function favMasterLinkClick(elem,add){var grid=$viewRoot.find(".managed-accounts-grid").data("kendoGrid");var gridSource=grid.dataSource;var all=gridSource.data();if(add){addAllAccountsToBoard(all,grid);setMasterFavoriteState(elem,false);}else{removeAllAccountsFromBoard(all,gridSource)}}
- var addAllAccountsToBoard=function(dataRows,grid){var arrFavs=[];for(var i=0;i<dataRows.length;i++){var dataitem=dataRows[i];arrFavs.push(getBoardItemFromDataItem(dataitem));}
- $.when(addAllToBoard(arrFavs)).then(function(response){updateDataRows(grid.dataSource,response.accounts);refreshGrid();}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(e.xhr);});}
- var getFavoriteIdsFromRows=function(dataRows){return $(dataRows).map(function(){return this.FavoriteID;}).get();}
- var removeAllAccountsFromBoard=function(dataRows,gridSource){var fRows=[];fRows=getFavoritesFromDataRows(dataRows);var result=confirm("Remove "+fRows.length+" items from your Favorites?");if(result){if(fRows.length){var fids=getFavoriteIdsFromRows(fRows);$.when(removeFromBoard(fids)).then(function(response){for(var i=0;i<fRows.length;i++){updateDataRow(fRows[i],null);}
- refreshGrid();}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(e.xhr);});}
- return true;}}
- var refreshGrid=function(){$viewRoot.find(".managed-accounts-grid").data("kendoGrid").refresh();}
- var getBoardItemFromDataItem=function(dataitem){return new favouriteAccountModel(uid=dataitem.uid,managedAccountDTO=dataitem);}
- var onFavLinkClick=function favLinkClick(event,button){var grid=$viewRoot.find(".managed-accounts-grid").data("kendoGrid");var selectedDataItem=grid.dataItem(event.currentTarget.parentElement.parentElement);if(selectedDataItem.IsFav==false){$.when(addToBoard(selectedDataItem)).then(function(response){updateDataRow(selectedDataItem,response.FavAccountID);grid.refresh();}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(e.xhr);});}else{$.when(removeFromBoard(selectedDataItem.FavoriteID)).then(function(response){updateDataRow(selectedDataItem,null);grid.refresh();}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(e.xhr);});}
- if($(button).hasClass('filled')){$(button).prop('title','add to favorites');$grid.find("#favMaster").removeClass('filled').prop('title','add all to Favorites')}else{$(button).prop('title','remove from favorites');}}
- var updateDataRows=function updateDataRowsFunc(dataSource,accounts){for(var f=0;f<accounts.length;f++){var fav=accounts[f];var row=dataSource.getByUid(fav.uid);updateDataRow(row,fav.managedAccountDTO.FavoriteID);}}
- var updateDataRow=function updateDataRowFunc(dateItem,favoriteId){dateItem.FavoriteID=favoriteId;dateItem.IsFav=favoriteId!=null&&favoriteId>0;}
- var addToBoard=function(favorite){var toAdd=ko.toJSON(favorite);return $.ajax({cache:false,type:"POST",url:"/eEye.RetinaCS.Server/api/PMM/AddAccountToBoard?anticsrftoken="+_antiCSRFToken,dataType:"json",contentType:"application/json; charset=utf-8",data:toAdd});}
- var addAllToBoard=function(accounts){var toAdd=ko.toJSON(accounts);return $.ajax({method:"POST",cache:false,url:"/eEye.RetinaCS.Server/api/PMM/AddAllToBoard?anticsrftoken="+_antiCSRFToken,dataType:"json",contentType:"application/json; charset=utf-8",data:toAdd});}
- var removeFromBoard=function(favAccountIds){var toRemove=ko.toJSON(favAccountIds);return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/RemoveAccountsFromBoard?anticsrftoken="+_antiCSRFToken,dataType:"json",contentType:"application/json; charset=utf-8",data:{favoriteIds:toRemove,boardId:null},});}
- var defaultSystemId=0;var getTicketSystems=function(){$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetTicketSystems",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){$(qlWindow.element).find(".ticket-systems option").remove();var options='';var ticketSystems=result.ticketSystems;if(result.mandatory=="True"){filterModel().selectedAccountRow().ticketNumber.extend({required:{message:"A ticket number is required."}});$(qlWindow.element).find(".ticket-systems").attr("disabled",false);$(qlWindow.element).find(".ticket-number").attr("disabled",false);$(qlWindow.element).find("label[for='ticketSystem']").attr("data-optional",false);$(qlWindow.element).find("label[for='ticketNumber']").attr("data-optional",false);}else{options="<option value='0'>(None)</option>";filterModel().selectedAccountRow().ticketSystemId(0);if(ticketSystems.length<=0){$(qlWindow.element).find(".ticket-systems").attr("disabled",true);$(qlWindow.element).find(".ticket-number").attr("disabled",true);$(qlWindow.element).find("label[for='ticketSystem']").attr("data-optional",true);$(qlWindow.element).find("label[for='ticketNumber']").attr("data-optional",true);}else{$(qlWindow.element).find(".ticket-systems").attr("disabled",false);$(qlWindow.element).find(".ticket-number").attr("disabled",false);$(qlWindow.element).find("label[for='ticketSystem']").attr("data-optional",true);$(qlWindow.element).find("label[for='ticketNumber']").attr("data-optional",true);}}
- $.each(ticketSystems,function(){filterModel().selectedAccountRow().emergencyApproval[this.Id]=this.EnableEmergancyApproval;if(this.IsDefaultSystem==true){defaultSystemId=this.Id;options+='<option value="'+this.Id+'" selected="selected">'+this.Name.replace("<","<").replace(">",">")+'</option>';}else{options+='<option value="'+this.Id+'">'+this.Name.replace("<","<").replace(">",">")+'</option>';}});$(qlWindow.element).find(".ticket-systems").append(options);},error:function(jqXhr,textStatus,errorThrown){qlWindow.close();showApplicationError(jqXhr);}}).done(function(){if(defaultSystemId>0){filterModel().selectedAccountRow().ticketSystemId(defaultSystemId);}});}
- var getScreenResolution=function(){if(filterModel().selectedAccountRow().IsDatabase()&&!isApplication){$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",true);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",true);}else{$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetScreenResolution",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){filterModel().selectedAccountRow().resolution(result);},error:function(jqXhr,textStatus,errorThrown){qlWindow.close();showApplicationError(jqXhr);}});}}
- var getSmartSize=function(){if(filterModel().selectedAccountRow().IsDatabase()&&!isApplication){$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",true);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",true);}else{$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:308},success:function(result){if(result.optionValue=="1")
- filterModel().selectedAccountRow().smartSize(true);else
- filterModel().selectedAccountRow().smartSize(false);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}}
- var checkReasonIsRequired=function(){$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:283},success:function(result){filterModel().selectedAccountRow().reason.rules.remove(function(item){return item.rule=="required";});var isRequired=false;if($.isEmptyObject(result)||result.optionValue==null||$.isEmptyObject(result.optionValue)||(result.optionValue.length==0)){isRequired=true;$(qlWindow.element).find("label[for='reason']").attr("data-optional","false");}
- if(result.optionValue=="True"){isRequired=true;$(qlWindow.element).find("label[for='reason']").attr("data-optional","false");}else{isRequired=false;$(qlWindow.element).find("label[for='reason']").attr("data-optional","true");}
- if(isRequired){filterModel().selectedAccountRow().reason.extend({required:{message:"Reason is required."}});}else{filterModel().selectedAccountRow().reason.extend({required:false});}},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}
- var qLWindowDisableControls=function(value){$(qlWindow.element).find(".ticket-systems").attr("disabled",value);$(qlWindow.element).find(".ticket-number").attr("disabled",value);$(qlWindow.element).find("#qlReason").attr("disabled",value);if(isApplication){if(sshApplication==true){$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",true);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",true);}else{$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",false);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",false);}}else if(value==false&&filterModel().selectedAccountRow().IsWindows()){$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",false);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",false);}else{$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",true);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",true);}}
- var disableResolutionForSSHApplication=function(value){sshApplication=value;$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",value);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",value);}
- var OnKendowWndowOpenQL=function(){var _applicationName="";var _applicationNameNoHTML="";if(filterModel().selectedAccountRow().remoteDesktopAppID()>0){_applicationName=" for Application<b> "+filterModel().selectedAccountRow().remoteDesktopAppAlias()+"</b>";_applicationNameNoHTML=" for Application "+filterModel().selectedAccountRow().remoteDesktopAppAlias();}
- var qlTitleToolTip="Account: "+filterModel().selectedAccountRow().accountNameFull()+" on "+filterModel().selectedAccountRow().systemName()+" "+_applicationNameNoHTML;qlWindow.title("<span title='"+qlTitleToolTip+"'>Account: <b>"+filterModel().selectedAccountRow().accountNameFull()+"</b> on <b>"+filterModel().selectedAccountRow().systemName()+"</b> "+_applicationName);var k=$(qlWindow.element).find("#daySpinner").data('kendoNumericTextBox');k.bind('change',function(){removeAccessPolicies();});k.bind('spin',function(){removeAccessPolicies();});var k=$(qlWindow.element).find("#hourSpinner").data('kendoNumericTextBox');k.bind('change',function(){removeAccessPolicies();});k.bind('spin',function(){removeAccessPolicies();});var k=$(qlWindow.element).find("#minSpinner").data('kendoNumericTextBox');k.bind('change',function(){removeAccessPolicies();});k.bind('spin',function(){removeAccessPolicies();});function removeAccessPolicies(){$(qlWindow.element).find(".access-policies-grid").data('kendoGrid').dataSource.data([]);var grid=$(qlWindow.element).find(".access-policies-grid").data("kendoGrid");var columnCount=$(grid.thead.get(0)).children("tr").first().children("th").length;$(grid.tbody.get(0)).append(kendo.format("<tr class='custom-no-data-row'><td colspan='{0}'><em>Select a duration, and click ReCheck.</em></td></tr>",columnCount));}
- $(qlWindow.element).find(".access-policies-grid").kendoGrid({height:104,resizable:false,sortable:false,groupable:false,reorderable:false,columnMenu:false,columns:[{field:"APName",title:"<b>Access Policy Schedule</b>",width:170},{template:"#=moment(endTime).format('D MMM h:mma')#",field:"endTime",width:106,title:"<b>Available Until</b>"},{template:function(dataItem){var html="";if(dataItem.IsClientLocationValid){html='<span class="qlGridButtons">';if(dataItem.IsAccessView){html=html+'<button class="btn btn-success btn-retrieve-password-ql"><i class="icon-eye-open icon-white"></i> Retrieve Password</button> ';}else{html=html+'<button class="btn qlGridButtonSpacer"></button> '}
- if(dataItem.IsAccessRDP){html=html+' <button class="btn btn-success btn-start-rdp-session-ql"><i class="icon-off icon-white"></i> Open RDP Session</button> ';}else if(dataItem.IsAccessSSH){html=html+' <button class="btn btn-success btn-start-ssh-session-ql"><i class="icon-off icon-white"></i> Open SSH Session</button> ';}else{html=html+' <button class="btn qlGridButtonSpacer"></button> '}
- if(dataItem.IsApplication){if(dataItem.IsAccessRArdp){html=html+' <button class="btn btn-success btn-start-ra-sessionRDP-ql"><i class="icon-off icon-white"></i> Application Session</button>';disableResolutionForSSHApplication(false);}else if(dataItem.IsAccessRAssh){html=html+' <button class="btn btn-success btn-start-ra-sessionSSH-ql"><i class="icon-off icon-white"></i> Application Session</button>';disableResolutionForSSHApplication(true);}
- isApplication=true;}else{isApplication=false;}
- html=html+'</span>'}else{html=html+'<span><i class="icon-info-sign icon-black" title="'+dataItem.Location+'"></i> Location Restricted</span>';}
- return html;},width:405},]});$(qlWindow.element).find(".access-policies-booked-grid").kendoGrid({height:100,resizable:false,sortable:false,groupable:false,reorderable:false,columnMenu:false,columns:[{template:function(dataItem){var html="";if(dataItem.UserId){html=html+'<span class="access-policies-booked-titles">'+dataItem.FirstName+" "+dataItem.LastName+'</span>';if(dataItem.WorkPhone){html=html+'<span> - </span><span>'+dataItem.WorkPhone+'</span>';}
- html=html+'<span> - </span>';html=html+'<span><a href="mailto:'+dataItem.EmailAddress+'">'+dataItem.EmailAddress+'</a></span>';}
- html=html+'<div><span class="access-policies-booked-titles"> Available after: </span> '
- html=html+'<span>'+moment(dataItem.ExpiresDt).format('D MMM h:mma')+'</span></div>';return html;},title:"<span class='access-policies-booked-header'>This account is currently checked out until the times below:</span>"},]});$(qlWindow.element).find(".access-policies-grid").on("click",".btn-retrieve-password-ql",function(e){e.preventDefault();qLWindowSaveSession(1,e,1);})
- $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-rdp-session-ql",function(e){e.preventDefault();qLWindowSaveSession(2,e,2);})
- $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-ssh-session-ql",function(e){e.preventDefault();qLWindowSaveSession(4,e,3);})
- $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-ra-sessionRDP-ql",function(e){e.preventDefault();qLWindowSaveSession(8,e,4);})
- $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-ra-sessionSSH-ql",function(e){e.preventDefault();qLWindowSaveSession(8,e,5);})
- var qlGridNoDataMsgDisplay=function(){var grid=$(qlWindow.element).find(".access-policies-grid").data("kendoGrid");var gridHasData=grid.dataSource.data().length>0;if(!gridHasData){var columnCount=$(grid.thead.get(0)).children("tr").first().children("th").length;if(filterModel().selectedAccountRow().RequestDuration()==5){$(grid.tbody.get(0)).append(kendo.format("<tr class='custom-no-data-row'><td colspan='{0}'><em>There are no available access policy schedules with auto-approved actions.</em></td></tr>",columnCount));}else{$(grid.tbody.get(0)).append(kendo.format("<tr class='custom-no-data-row'><td colspan='{0}'><em>There are no available access policy schedules with auto-approved actions. TIP: Try reducing the requested duration.</em></td></tr>",columnCount));}
- qLWindowDisableControls(true);}else{qLWindowDisableControls(false);checkReasonIsRequired();getTicketSystems();getScreenResolution();getSmartSize();}};var qLWindowSaveSession=function(accessType,e,actionType){$(qlWindow.element).find(".request-result").removeClass("alert-error").hide();if(filterModel().selectedAccountRow().errors().length>0){filterModel().selectedAccountRow().errors.showAllMessages();return false;}else{setQLFormBusy(true,e);var grid=$(qlWindow.element).find(".access-policies-grid").data("kendoGrid");var selectedDataItem=grid.dataItem(e.currentTarget.parentElement.parentElement.parentElement);filterModel().selectedAccountRow().requestAccessType(accessType);filterModel().selectedAccountRow().requestedAPScheduleId(selectedDataItem.schElementId);filterModel().selectedAccountRow().isImmediate(1);var viewModelJson=ko.toJSON(filterModel().selectedAccountRow);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetRequestForQuickLaunch",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){filterModel().selectedAccountRow().requestId(result);if(actionType==1){qLRetrievePassword(e);}else if(actionType==2){qLstartRDPSession();}else if(actionType==3){qLstartSSHSession();}else if(actionType==4){qLstartRDPSessionRA();}else if(actionType==5){qLstartSSHSessionRA();}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;}
- $(qlWindow.element).find(".request-result").addClass("alert-error").text(displayMessage).fadeIn(200);}
- else{qlWindow.close();showApplicationError(jqXhr);}},complete:function(){setQLFormBusy(false,e);}});}}
- $(qlWindow.element).find(".btn-submit-recheck").click(function(e){e.preventDefault();var durValSecs=parseInt(filterModel().selectedAccountRow().durationMinutes())*60+parseInt(filterModel().selectedAccountRow().durationHours())*60*60+parseInt(filterModel().selectedAccountRow().durationDays())*24*60*60;filterModel().selectedAccountRow().RequestDuration(Math.round(durValSecs/60));var btn=this;$(btn).attr("disabled",true);$(btn).busy();var clientDateOffset=new Date().getTimezoneOffset();var viewModelJson=ko.toJSON(filterModel().selectedAccountRow);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetQuickLaunchAccessPolicies?t="+clientDateOffset,type:"POST",data:viewModelJson,dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){if(result!=null&&result!=""&&result!=undefined){ko.mapping.fromJS(result,{},filterModel().selectedAccountRow().QLAPScheduleElements);if(result.PsReleaseRequestDetails.length>0){qLWindowDisableControls(true);$(qlWindow.element).find(".access-policies-grid").hide();$(qlWindow.element).find(".access-policies-booked-grid").show();$(qlWindow.element).find(".access-policies-booked-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource({data:ko.toJS(filterModel().selectedAccountRow().QLAPScheduleElements().PsReleaseRequestDetails),schema:{model:{id:"UserId",fields:{UserId:{type:"number"},FirstName:{type:"string"},LastName:{type:"string"}}}}}));}else{$(qlWindow.element).find(".access-policies-booked-grid").hide();$(qlWindow.element).find(".access-policies-grid").show();$(qlWindow.element).find(".access-policies-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource({data:ko.toJS(filterModel().selectedAccountRow().QLAPScheduleElements().PsQuickLaunchAccessPolicies),schema:{model:{id:"schElementId",fields:{schElementId:{type:"number"},APName:{type:"string"},endTime:{type:"string"}}}}}));qlGridNoDataMsgDisplay();}}},error:function(jqXhr,textStatus,errorThrown){qlWindow.close();showApplicationError(jqXhr);},complete:function(){$(qlWindow.element).find(".btn-submit-recheck").attr("disabled",false);$(qlWindow.element).find(".btn-submit-recheck").busy(false);}});});$(qlWindow.element).find(".btn-submit-recheck").click();}
- qlWindow=$("#qlWindow").kendoWindow({modal:true,visible:false,resizable:false,width:"810px",height:"508px",activate:OnKendowWndowOpenQL}).data("kendoWindow");$viewRoot.on('click',function(e){if($(e.target).data('toggle')!=='popover'&&$(e.target).parents('.popover.in').length===0||$(e.target).is('.close')){hideGridPopovers($viewRoot);}});_isInitialized=true;};var setQLFormBusy=function(isBusy,e){if(isBusy!=false)isBusy=true;if(isBusy){$('body').addClass('wait').bind('click',function(){return false;});}else{$('body').removeClass('wait').unbind('click');}
- if(isBusy!=false)isBusy=true;if(isBusy){$(e.currentTarget).attr("disabled",false).busy(false);}else{$(e.currentTarget).attr("disabled",true).busy();}};var qLstartSSHSessionRA=function(){var viewModelJson=ko.toJSON(filterModel().selectedAccountRow());$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteAppSessionSSH?ql=true",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){qlWindow.close();if(result.byPassLandingPage){window.location.href=result.sshLink;}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$(qlWindow.element).find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else{showApplicationError(jqXhr);}},complete:function(){}});};var qLstartRDPSessionRA=function(){var viewModelJson=ko.toJSON(filterModel().selectedAccountRow());$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/ValidateRequest",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){qLstartRemoteAppSession();},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$(qlWindow.element).find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else{showApplicationError(jqXhr);}},complete:function(){}});};var qLstartSSHSession=function(){var viewModelJson=ko.toJSON(filterModel().selectedAccountRow());$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteSessionSSH?ql=true",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){qlWindow.close();if(result.byPassLandingPage){window.location.href=result.sshLink;}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$(qlWindow.element).find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else{showApplicationError(jqXhr);}},complete:function(){}});};var qLstartRDPSession=function(){window.location="/eEye.RetinaCS.Server/api/PMM/StartRemoteSession?isa=false&protocol=rdp&accountid="+filterModel().selectedAccountRow().accountId()+"&requestid="+filterModel().selectedAccountRow().requestId()+"&resolution="+filterModel().selectedAccountRow().resolution()+"&smartsize="+filterModel().selectedAccountRow().smartSize()+"&anticsrftoken="+_antiCSRFToken;qlWindow.close();};var qLstartRemoteAppSession=function(){window.location="/eEye.RetinaCS.Server/api/PMM/StartRemoteAppSession?isa=false&protocol=rdp&accountid="+filterModel().selectedAccountRow().accountId()+"&requestid="+filterModel().selectedAccountRow().requestId()+"&resolution="+filterModel().selectedAccountRow().resolution()+"&smartsize="+filterModel().selectedAccountRow().smartSize()+"&record="+filterModel().selectedAccountRow().recordSessionForRemoteAppConnectionFlag()+"&remotedesktopappid="+filterModel().selectedAccountRow().remoteDesktopAppID()+"&anticsrftoken="+_antiCSRFToken;qlWindow.close();};var qLRetrievePassword=function(e){var viewModelJson=ko.toJSON(filterModel().selectedAccountRow);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/RetrievePassword",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){qlWindow.close();_passwordDisplayPanel.showPasswordPanel(result,$viewRoot);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$(qlWindow.element).find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);setQLFormBusy(false,e);},complete:function(){}});};var initializeManagedAccountsGrid=function(){$grid=$viewRoot.find(".managed-accounts-grid");$grid.kendoGrid({resizable:true,selectable:"row",change:managedAccountsGrid_onSelectionChange,pageable:true,height:550,groupable:false,sortable:{mode:"multiple",allowUnsort:true},reorderable:true,columnMenu:false,filterable:{extra:false,operators:{string:{contains:"Contains",startswith:"Starts with",eq:"Is equal to",neq:"Is not equal to"}}},columns:[{field:"FavoriteID",width:0,title:"FavoriteID",hidden:true},{template:$("#tmpl-Favorite-template").html(),width:60,headerTemplate:"<a title='add all to Favorites' id=\'favMaster\' class=\'favlink all\' href=\'\\#\'></a>",attributes:{"class":"favorite-action"}},{field:"SystemID",width:0,title:"SystemID",hidden:true},{field:"SystemName",title:"System",filterable:{cell:{showOperators:true}}},{field:"IsShowQuickLaunch",title:" ",template:$("#tmpl-oneClick-template").html(),width:60,hidden:!checkIsRequestorOnly(),filterable:false,sortable:false},{field:"AccountID",width:0,title:"AccountID",hidden:true},{field:"DomainName",title:"Directory",hidden:false,filterable:{cell:{showOperators:true}}},{field:"AccountName",title:"Account",template:$("#tmpl-AccountName-template").html(),filterable:{cell:{showOperators:true}}},{headerTemplate:"<span id='statusTip' data-selector='true' data-container='body' data-toggle='popover'>Status</span>",template:$("#tmpl-Status-template").html(),attributes:{"class":"status"}},{field:"IsDomainLinkedAccount",width:200,title:"Domain Linked Account",hidden:true},{field:"PlatformID",width:150,title:"Platform ID",hidden:true},{field:"PlatformName",width:150,title:"Platform",hidden:false},{field:"IsAccessViewPassword",width:0,title:"IsAccessViewPassword",hidden:true},{field:"IsAccessRDP",width:0,title:"IsAccessRDP",hidden:true},{field:"IsAccessSSH",width:0,title:"IsAccessSSH",hidden:true},{field:"IsAccessRA",width:0,title:"IsAccessRA",hidden:true},{field:"MaxReleaseDuration_Days",width:0,title:"Duration days",hidden:true},{field:"MaxReleaseDuration_Hours",width:0,title:"Duration hours",hidden:true},{field:"MaxReleaseDuration_Minutes",width:0,title:"Duration minutes",hidden:true},{field:"DefaultReleaseDuration_Days",width:0,title:"Default Duration Days",hidden:true},{field:"DefaultReleaseDuration_Hours",width:0,title:"Default Duration Hours",hidden:true},{field:"DefaultReleaseDuration_Minutes",width:0,title:"Default Duration Minutes",hidden:true},{field:"PlatformType",width:0,title:"Platform Type",hidden:true},{field:"IsUnix",width:0,title:"Unix",hidden:true},{field:"IsWindows",width:0,title:"Windows",hidden:true},{field:"IsDatabase",width:0,title:"Database",hidden:true},{field:"IsRemoteApp",width:150,title:"Application",hidden:true},{field:"RemoteDesktopAppID",width:150,title:"RemoteDesktopAppID",hidden:true},{field:"RemoteDesktopAppAlias",title:"Application",hidden:false},{field:"WorkGroupName",title:"Workgroup",hidden:false},{field:"IsShowDirectConnect",title:" ",template:$("#tmpl-DirectConnect-template").html(),width:60,attributes:{"class":"directconnect"},filterable:false,sortable:false},{field:"IsIsaAccess",title:"ISA",width:50,template:"# if(IsIsaAccess){ # <div class='center'><i class='icon-check'></i></div> #} #",hidden:checkIsRequestorOnly(),filterable:false,sortable:false}]});};var managedAccountsGrid_onSelectionChange=function(e){var selectedRow=$grid.data("kendoGrid").select();var dataItem=$grid.data("kendoGrid").dataItem(selectedRow);postal.publish({channel:CHANNEL_FRAMEWORK,topic:events.ACCOUNT_SELECTED,data:dataItem});};var onRequestStart=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",true);$grid=$viewRoot.find(".managed-accounts-grid");$grid.find("#favMaster").addClass("disabled");};var onRequestEnd=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",false);};var resizeAccountsListGrid=function(){$viewRoot.find(".managed-accounts-grid .k-grid-content").css("max-height",$(window).height()-210);};var beforeShow=function(params){_params=params;};var checkIsRequestor=function(){if(_sessionUserViewModel.IsAdministrator())
- return false;if(_sessionUserViewModel.IsIsa())
- return false;if(_sessionUserViewModel.IsRequestor())
- return true;else
- return false;}
- var checkIsRequestorOnly=function(){if(_sessionUserViewModel.IsAdministrator())
- return false;if(_sessionUserViewModel.IsRequestor())
- return true;else
- return false;}
- var hideDirectConnectColumn=function(){if(_sessionUserViewModel.IsAdministrator()){return true;}else{if(filterModel().PlatformType()==AccountPlatformTypeEnum.SYSTEMS||filterModel().PlatformType()==AccountPlatformTypeEnum.DOMAINLINKEDACCOUNTS||filterModel().PlatformType()==AccountPlatformTypeEnum.FAVORITES||filterModel().PlatformType()==AccountPlatformTypeEnum.RECENTLYUSED){return false;}else{return true;}}}
- var show=function(){if(_params==null){window.location.href+="/status=Favorites";return;}
- if(_params["status"]){filterModel().applySearch(1);for(var i=0;i<filterModel().buttons().length;i++){if(filterModel().buttons()[i].name.toLowerCase()==_params["status"].toLowerCase()){filterModel().selectButton(filterModel().buttons()[i]);if(_params["status"]=="Systems"){filterModel().PlatformType(AccountPlatformTypeEnum.SYSTEMS);}else if(_params["status"]=="Databases"){filterModel().PlatformType(AccountPlatformTypeEnum.DATABASES);}else if(_params["status"]=="Domain Linked Accounts"){filterModel().PlatformType(AccountPlatformTypeEnum.DOMAINLINKEDACCOUNTS);}else if(_params["status"]=="Applications"){filterModel().PlatformType(AccountPlatformTypeEnum.APPLICATIONS);}else if(_params["status"]=="Cloud"){filterModel().PlatformType(AccountPlatformTypeEnum.CLOUD);}else if(_params["status"]=="Favorites"){filterModel().PlatformType(AccountPlatformTypeEnum.FAVORITES);filterModel().applySearch(0);}else if(_params["status"]=="Recently Used"){filterModel().PlatformType(AccountPlatformTypeEnum.RECENTLYUSED);filterModel().applySearch(0);}else{filterModel().PlatformType(AccountPlatformTypeEnum.ALL);}
- break;}}}
- if(_params["system"]){filterModel().SystemName(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{filterModel().SystemName("");}
- if(_params["accountName"]){filterModel().AccountName(_params["accountName"]);}else{filterModel().AccountName("");}
- resizeAccountsListGrid();removeGridOverlay($viewRoot,'.overlay');var clientDateOffset=new Date().getTimezoneOffset();var accGridDataSource=new kendo.data.DataSource({requestStart:onRequestStart,requestEnd:onRequestEnd,serverPaging:true,serverSorting:true,serverFiltering:true,pageSize:12,transport:{read:{url:"/eEye.RetinaCS.Server/api/PMM/GetAccountsForCheckOut_V2?DoExtChecks=1&ExtCheckDur=5&t="+clientDateOffset,cache:false,dataType:"json",type:"POST",contentType:"application/json; charset=utf-8",data:{domainName:filterModel().DomainName(),systemName:filterModel().SystemName(),accountName:filterModel().AccountName(),platformType:filterModel().PlatformType(),applySearch:filterModel().applySearch()}},parameterMap:function(data){var newdata=$.extend({},data,{filter:data.filter,sort:data.sort});return JSON.stringify(newdata);}},schema:{total:function(response){return response[0].TotalRecords;},model:{fields:{AcountID:{type:"integer"},AccountName:{type:"string"},DomainName:{type:"string"},SystemID:{type:"integer"},SystemName:{type:"string"},IsDomainLinkedAccount:{type:"boolean"},IsIsaAccess:{type:"boolean"},IsAccessViewPassword:{type:"boolean"},IsAccessRDP:{type:"boolean"},IsAccessSSH:{type:"boolean"},IsAccessRA:{type:"boolean"},MaxReleaseDuration_Days:{type:"integer"},MaxReleaseDuration_Hours:{type:"integer"},MaxReleaseDuration_Minutes:{type:"integer"},DefaultReleaseDuration_Days:{type:"integer"},DefaultReleaseDuration_Hours:{type:"integer"},DefaultReleaseDuration_Minutes:{type:"integer"},PlatformID:{type:"integer"},PlatformType:{type:"integer"},PlatformName:{type:"string"},IsUnix:{type:"boolean"},IsWindows:{type:"boolean"},IsDatabase:{type:"boolean"},IsRemoteApp:{type:"boolean"},RemoteDesktopAppID:{type:"integer"},RemoteDesktopAppAlias:{type:"string"},WorkgroupName:{type:"string"},AccountDescription:{type:"string"},StatusString:{type:"string"},MaxConcurrentRequests:{type:"integer"},CurrentRequests:{type:"integer"},IsFav:{type:"boolean",editable:true},FavoriteID:{type:"integer",editable:true},IsShowQuickLaunch:{type:"boolean"},WorkGroupID:{type:"integer"},WorkGroupName:{type:"string"},IsShowDirectConnect:{type:"boolean"},FavBoardID:{type:"integer",editable:true},}},data:"data",total:"total"},error:function(e){var ex=parseAjaxError(e.xhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(e.xhr);}});if(_params["reset"]){accGridDataSource._filter=null;}
- $grid.on("click","button.onecl",function(e){var $viewRoot=$(".view.view-accounts-list");var grid=$viewRoot.find(".managed-accounts-grid").data("kendoGrid");var selectedDataItem=grid.dataItem(e.currentTarget.parentElement.parentElement);quickLaunchViewModel=ko.validatedObservable(new requestViewModel());quickLaunchViewModel().build(selectedDataItem);filterModel().selectedAccountRow(quickLaunchViewModel());filterModel().selectedAccountRow().isNewRequest(true);qlWindow.center().open();});accountsGridSourceModel=kendo.observable({accountsSource:accGridDataSource,OnDataBound:function(e){addExtraStylingToGrid("managed-accounts-grid");var msg='';var grid=e.sender;var view=grid.dataSource.view();if(view.length==0){var currentPage=grid.dataSource.page();if(currentPage>1){grid.dataSource.page(currentPage-1);return;}}
- if(hideDirectConnectColumn()){grid.hideColumn("IsShowDirectConnect");}else{grid.showColumn("IsShowDirectConnect");}
- if(checkIsRequestorOnly()){grid.hideColumn("IsIsaAccess");grid.showColumn("IsShowQuickLaunch");}else{grid.showColumn("IsIsaAccess");grid.hideColumn("IsShowQuickLaunch");}
- if(filterModel().applySearch()&&filterModel().SystemName()){if(view.length===0){msg="<p>Your search returned 0 results.</p>";}
- else if(grid.dataSource.total()>=1000){msg="<p>Your search returned more than 1000 results. Try narrowing your search.</p><p class='close-link'><a href='#'>Show first 1000 results</a>.</p>";}}else if(filterModel().PlatformType()==AccountPlatformTypeEnum.FAVORITES){if(view.length===0){msg="<p>There are currently no accounts/systems in your Favorites.</p><p>Please click on a category above, and select the icon in the Favorites column to add to this section.</p>";}}else if(filterModel().PlatformType()==AccountPlatformTypeEnum.RECENTLYUSED){if(view.length===0){msg="<p>Your most recently used accounts will be available here.</p>";}}else if(view.length===0){msg="<p>Search for accounts using the Global Search or grid filters <span class='i-container'><span class='k-icon k-filter'></span></span></p><p><a class='submit' href='#'>Click here to return all accounts</a>.</p>";}
- gridNoDataMsgDisplay(e,msg);if($viewRoot.find('.overlay')&&$viewRoot.find('.overlay').is(":visible")){$grid.find("#favMaster").addClass("disabled");}else{$grid.find("#favMaster").removeClass("disabled");}
- if(grid.dataSource.transport.options!=undefined&&view.length>0){var favs=getFavoritesFromDataRows(grid.dataSource.data()).length;setMasterFavoriteState($grid.find("#favMaster"),!(favs==view.length));}
- initStatusPopover($grid);initAccountDescPopovers($grid);}});var initStatusPopover=function(grid){grid.find("#statusTip").data('popover',null).popover({trigger:"hover",template:'<div class="popover status-column-popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',title:"Status",html:false,container:'body',content:"This column indicates the general availability of an account; your ability to access the account will further depend upon access policy and does not include your approved requests."});}
- var initAccountDescPopovers=function(grid){$('.popover').remove();grid.find("a.infoIcon").data('popover',null).popover({trigger:"manual",title:"Account Description",template:'<div class="popover account-description-popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',html:true,content:function(e){var dataItem=$grid.data("kendoGrid").dataItem($(this).closest("tr"));var ad=dataItem.AccountDescription;var content="<div class='account-description-popup'>"+"<div><div class='popup-label'></div><div class='popup-value'>"+ad+"</div></div>"+"</div>";return content;},animation:false,}).click(function(e){e.preventDefault();if(e.target!==this)
- return;e.stopPropagation();grid.find('a.infoIcon').not(this).popover('hide');var popover=$(this).data('popover');if($('.popover').is(":visible")){closeGridPopover(popover);return false;}
- grid.find('a.infoIcon').not(this).removeClass('active');grid.find('a.infoIcon').not(this).parents('tr').removeClass('k-state-selected');$(this).addClass('active');$(this).parents('tr').addClass('k-state-selected');$(this).popover('toggle');return false;}).on('shown',function(e){e.stopPropagation();var popover=$(this).data('popover'),$tip=popover.tip();var close=$('<button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>').click(function(){closeGridPopover(popover);});$('.popover-title',$tip).append(close);});}
- kendo.bind($viewRoot.find("#AccountsGrid"),accountsGridSourceModel);if(filterModel().PlatformType()==AccountPlatformTypeEnum.FAVORITES){$grid.addClass('favorites');}else{$grid.removeClass('favorites');}};var getFavoritesFromDataRows=function(dataRows){var rows=[];for(var i=0;i<dataRows.length;i++){var dataitem=dataRows[i];var favId=dataitem.FavoriteID;if(favId){rows.push(dataitem);}}
- return rows;}
- var setMasterFavoriteState=function(elem,on){if(on){$(elem).prop('title','add all to Favorites');$(elem).removeClass('filled');}else{$(elem).prop('title','remove all from Favorites');$(elem).addClass('filled');}}
- var hide=function(){hideGridPopovers($viewRoot);$viewRoot.find(".password").val("");_passwordDisplayPanel.hide(false);_sshDisplayPanel.hide();};var afterHide=function(){};var resize=function(){resizeAccountsListGrid();};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};</script>
- <script id="tmpl-DirectConnect-template" type="text/x-kendo-template">
- # if (IsShowDirectConnect) { #
- <a class="gridicon download" title="Download RDP Direct Connect file" href="\#"></a>
- # } else{ #
- <span class="gridicon download disabled" title="RDP Direct Connect is only available for Windows-based systems"></span>
- # } #
- </script>
- <script id="tmpl-oneClick-template" type="text/x-kendo-template">
- # if(!IsIsaAccess){ #
- # if(IsShowQuickLaunch){ #
- <button class="btn onecl qlGridButtonFinger" title="OneClick Launch"></button>
- # } else{ #
- <span class="btn disabled onecl qlGridButtonFinger" title="OneClick Not Available"></span>
- #} #
- #} #
- </script>
- <script id="tmpl-AccountName-template" type="text/x-kendo-template">
- # if (AccountDescription) { #
- <span>#= AccountName #</span>
- <a href="\#" class="gridicon infoIcon" data-selector="true" data-container="body" title="Click for description" data-toggle="popover"></a>
- # } else{ #
- <span>#= AccountName #</span>
- <span class="gridicon infoIcon disabled" title="no description available"></span>
- # } #
- </script>
- <script id="tmpl-Status-template" type="text/x-kendo-template">
- <span class="level #= getStatusClass(AvailableRequests, MaxConcurrentRequests) #"></span>
- <span class="display">#= StatusString #</span>
- </script>
- <script id="tmpl-Favorite-template" type="text/x-kendo-template">
- <a title="#= IsFav ? 'remove from Favorites' : 'add to Favorites'#" class="#= IsFav ? 'favlink filled' : 'favlink' # " href="\#"></a>
- </script>
- <div class="header-container">
- <h4>Accounts</h4>
- <div class="instructions">
- Find an account by using the global search or by using the grid column filters. Click on the star icon to add a system/account to Favorites.
- </div>
- <div class="filter-bar pull-left">
- <form class="form-inline form-filter">
- <div class="pull-left filter-request-status">
- <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: buttons">
- <button class="btn" data-bind="text: name, css: cssClass, click: $parent.selectButton"></button>
- </div>
- </div>
- </form>
- </div>
- <div class="filter-bar pull-right" data-bind="visible: (PlatformType() != AccountPlatformTypeEnum.FAVORITES && PlatformType() != AccountPlatformTypeEnum.RECENTLYUSED)">
- <form class="form-inline form-filter">
- <div class="pull-right">
- <input class="filter-system" type="text" data-bind="value: SystemName" placeholder="Global Search" />
- <button class="btn btn-mini btn-primary btn-filter" type="submit">Search</button>
- <button class="btn btn-mini btn-clear-filter" type="button">Reset</button>
- </div>
- </form>
- </div>
- </div>
- <div class="alert request-result" style="display:none;"></div>
- <div id="AccountsGrid" class="managed-accounts-grid" data-model="accountsGridSourceModel" data-bind="source: accountsSource, events: { dataBound: OnDataBound }"></div>
- <div id="managed-accounts-grid-popup"></div>
- <!--QuickLaunch popup window-->
- <div id="qlWindow" style="display:none;" data-bind="with:selectedAccountRow()">
- <form class="form-horizontal form-request-passwordQL">
- <div class="control-group requested-duration">
- <label class="control-label">Requested Duration:</label>
- <div class="controls">
- <input id="daySpinner" type="number" class="control-duration duration-days" min="0" max="6" step="1" data-bind="kendoNumericTextBox: {value: durationDays, format: 'n0'}" /> days
- <span class="spacer-mini"></span>
- <input id="hourSpinner" type="number" class="control-duration duration-hours" min="0" max="23" step="1" data-bind="kendoNumericTextBox: {value: durationHours, format: 'n0'}" /> hours
- <span class="spacer-mini"></span>
- <input id="minSpinner" type="number" class="control-duration duration-minutes" min="0" max="59" step="5" data-bind="kendoNumericTextBox: {value: durationMinutes, format: 'n0'}" /> minutes
- <div class="retinaCS-validation-message" style="display:none;">
- <em></em>
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: maxDurationDays"></div>
- </div>
- </div>
- <span class="spacer-mini"></span>
- <button class="btn btn-primary btn-submit-recheck">Recheck</button>
- </div>
- </div>
- <div class="control-group access-policies-grid-container">
- <div class="access-policies-grid"></div>
- <div class="access-policies-booked-grid"></div>
- </div>
- <div class="control-group">
- <label class="control-label lbl-screen-resolutionisa">Screen Resolution:</label>
- <div class="controls" data-optional="false">
- <select class="input-xlarge rdp-screen-resolutionisa" data-bind="value: resolution">
- <option value="640x480">640x480</option>
- <option value="800x600">800x600</option>
- <option value="1024x768">1024x768</option>
- <option value="1280x800">1280x800</option>
- <option value="1280x1024">1280x1024</option>
- <option value="1366x768">1366x768</option>
- <option value="1440x900">1440x900</option>
- <option value="1440x1050">1440x1050</option>
- <option value="1680x1050">1680x1050</option>
- <option value="1920x1080">1920x1080</option>
- <option value="1920x1200">1920x1200</option>
- <option value="1920x2058">1920x2058</option>
- <option value="Maximized">Maximized</option>
- </select>
- <span class="spacer-mini"></span>
- <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize" />
- <span>Smart Sizing</span>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="reason">Reason:</label>
- <div class="controls div-reason">
- <textarea id="qlReason" name="reason" rows="2" class="input-xlarge" data-bind="value: reason"></textarea>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="ticketSystem">Ticket System:</label>
- <div class="controls div-ticket-systems">
- <select class="input-xlarge ticket-systems" name="ticketSystem" data-bind="value: ticketSystemId"></select>
- </div>
- <div class="retinaCS-validation-message" style="display:none;">
- <em></em>
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: ticketSystemDisplay"></div>
- </div>
- </div>
- </div>
- <div class="control-group">
- <!-- data-bind="visible: ticketSystemId() != 0" -->
- <label class="control-label" for="ticketNumber" data-bind="attr: { 'data-optional': ticketSystemId() > 0 ? 'false' : 'true' }">Ticket Number:</label>
- <div class="controls div-ticket-number">
- <input type="text" name="ticketNumber" class="input-xlarge ticket-number" data-bind="value: ticketNumber" />
- </div>
- </div>
- <div class="alert request-result" style="display:none;"></div>
- </form>
- </div>
- </div>
- </div>
- </div>
- <!-- Page: Approve Requests -->
- <div class="page page-approve-requests" data-route="approve" data-default-view-route="list">
- <script type="text/javascript">var page_approve_requests=function(){var CHANNEL_PAGE="Channel.Page.Approve";var PAGE_ROOT_CLASS="page-approve-requests";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_APPROVER,ROLE_REQUESTOR_APPROVER,ROLE_ISA];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles};};</script>
- <div class="views">
- <!-- View: Grid of current pending requests. -->
- <div class="view view-pending-requests" data-route="list">
- <script type="text/javascript">
- var view_pending_requests=function(){var viewName="view-pending-requests";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-pending-requests");var viewModel=null;var _params=null;var $grid=null;var filterModel;var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializePasswordReleaseRequestsGrid();filterModel=ko.validatedObservable(new filterViewModel());filterModel().selectButton(filterModel().buttons()[2]);ko.applyBindings(filterModel,$viewRoot[0]);$viewRoot.find(".filter-request-status .btn").click(function(e){$(this).parents('form:first.form-filter').submit();e.preventDefault();return false;});$viewRoot.find(".form-filter").submit(function(e){e.preventDefault();if(filterModel.errors().length>0){filterModel.errors.showAllMessages();return false;}
- var status=filterModel().selectedButton().name;var system=filterModel().system();var start=filterModel().start();var end=filterModel().end();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="));newUrl+="/status="+status;if(system!="")newUrl+="&system="+encodeURIComponent(system);if(start!=null&&start!="")newUrl+="&start="+encodeURIComponent(moment(start).format());if(end!=null&&end!="")newUrl+="&end="+encodeURIComponent(moment(end).format());if(window.location.href==newUrl)$grid.data("kendoGrid").dataSource.read();else window.location.href=newUrl;return false;});$viewRoot.find(".form-filter .btn-clear-filter").click(function(e){e.preventDefault();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="));newUrl+="/status=Pending&reset=true";window.location.href=newUrl;return false;});_isInitialized=true;};var initializePasswordReleaseRequestsGrid=function(){$grid=$viewRoot.find(".password-release-requests-grid");$grid.kendoGrid({resizable:true,selectable:"row",change:passwordReleaseRequestsGrid_onSelectionChange,dataBound:function(e){addExtraStylingToGrid("password-release-requests-grid");gridNoDataMsgDisplay(e);},pageable:true,height:550,groupable:false,sortable:{mode:"multiple",allowUnsort:true},reorderable:true,columnMenu:false,filterable:{extra:false,operators:{string:{contains:"Contains",startswith:"Starts with",eq:"Is equal to",neq:"Is not equal to"}}},columns:[{field:"RequestId",width:80,title:"Req. ID",filterable:{cell:{showOperators:true}},hidden:true},{field:"RequestorDomainName",width:220,title:"Requestor Domain Name",filterable:{cell:{showOperators:true}},hidden:true},{field:"RequestorName",title:"Requestor Name",filterable:{cell:{showOperators:true}}},{field:"SystemName",title:"System",filterable:{cell:{showOperators:true}}},{field:"DomainName",title:"Directory",filterable:{cell:{showOperators:true}}},{field:"AccountName",title:"Account",filterable:{cell:{showOperators:true}}},{field:"RequestReleaseDate",format:"{0:g}",title:"Request Release",filterable:{ui:"datetimepicker",extra:true}},{field:"ApprovedDate",format:"{0:g}",title:"Approved",filterable:{ui:"datetimepicker",extra:true}},{field:"CanceledDate",format:"{0:g}",title:"Canceled",filterable:{ui:"datetimepicker",extra:true}},{field:"ExpiresDate",format:"{0:g}",title:"Expires",filterable:{ui:"datetimepicker",extra:true}},{field:"Description",title:"Description",filterable:{cell:{showOperators:true}}},{field:"Ticket",title:"Ticket",filterable:{cell:{showOperators:true}}},{field:"Alias",title:"Application",hidden:false},{field:"AccessType",width:"100px",title:"Type",hidden:false},{field:"Location",title:"Location",hidden:false}]});};var passwordReleaseRequestsGrid_onSelectionChange=function(){var grid=$viewRoot.find(".password-release-requests-grid").data("kendoGrid");var selectedRow=grid.select();if(selectedRow.length==0)return;var dataItem=grid.dataItem(selectedRow);window.location.href="#/approve/details/id={0}".format(dataItem.RequestId);};var onRequestStart=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",true);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(false);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(false);};var onRequestEnd=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",false);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(true);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(true);};var resizeCurrentRequestsGrid=function(){};var beforeShow=function(params){_params=params;};var show=function(){if(_params==null){window.location.href+="/status=Pending";return;}
- if(_params["status"]){for(var i=0;i<filterModel().buttons().length;i++){if(filterModel().buttons()[i].name.toLowerCase()==_params["status"].toLowerCase()){filterModel().selectButton(filterModel().buttons()[i]);break;}}}
- if(_params["system"]){filterModel().system(_params["system"]);}else{filterModel().system("");}
- if(_params["start"]){filterModel().start(parseDatesForIE8(_params["start"]));}else{filterModel().start("");}
- if(_params["end"]){filterModel().end(parseDatesForIE8(_params["end"]));}else{filterModel().end("");}
- var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
- var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
- resizeCurrentRequestsGrid();if(gridDataSource==null){var gridDataSource=new kendo.data.DataSource({requestStart:onRequestStart,requestEnd:onRequestEnd,serverPaging:true,serverSorting:true,serverFiltering:true,pageSize:12,sort:{field:"RequestReleaseDate",dir:"desc"},transport:{read:{url:"/eEye.RetinaCS.Server/api/PMM/GetRequestsForApprover",cache:false,dataType:"json",type:"POST",contentType:"application/json; charset=utf-8",data:{requestStatus:filterModel().selectedButton().name,systemName:filterModel().system(),startDate:startDate,endDate:endDate}},parameterMap:function(data){var newdata=$.extend({},data,{filter:data.filter,sort:data.sort});return JSON.stringify(newdata);}},schema:{total:function(response){return response[0].TotalRecords;},model:{fields:{RequestId:{type:"number"},RequestorName:{type:"string"},SystemName:{type:"string"},DomainName:{type:"string"},AccountName:{type:"string"},RequestReleaseDate:{type:"date"},ApprovedDate:{type:"date"},CanceledDate:{type:"date"},ExpiresDate:{type:"date"},Description:{type:"string"},Ticket:{type:"string"}}},data:"data",total:"total"},error:function(e){var ex=parseAjaxError(e.xhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(e.xhr);}});if(_params["reset"]){gridDataSource._filter=null;}
- $grid.data("kendoGrid").setDataSource(gridDataSource);}else{$grid.data("kendoGrid").dataSource.read();}};var hide=function(){};var afterHide=function(){gridDataSource=null;$grid.data("kendoGrid").setDataSource(new kendo.data.DataSource());};var resize=function(){resizeCurrentRequestsGrid();};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};</script>
- <!--<script type="text/x-kendo-template" id="TempateUsingRemoteData">
- #=Text#
- </script>-->
- <div class="header-container">
- <h4>Release Requests</h4>
- <div class="filter-bar pull-left">
- <form class="form-inline form-filter">
- <div class="pull-left filter-request-status">
- <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: buttons">
- <button class="btn" data-bind="text: name, css: {active: selected}, click: $parent.selectButton"></button>
- </div>
- </div>
- </form>
- </div>
- <div class="filter-bar pull-right">
- <form class="form-inline form-filter">
- <div class="pull-right">
- <input class="filter-system" type="text" data-bind="value: system" placeholder="Global Search" />
- <button class="btn btn-mini btn-primary btn-filter" type="submit">Search</button>
- <button class="btn btn-mini btn-clear-filter" type="button">Reset</button>
- </div>
- </form>
- </div>
- </div>
- <div class="alert request-result" style="display:none;"></div>
- <div class="password-release-requests-grid"></div>
- </div>
- <!-- View: Request approval form. -->
- <div class="view view-approval-form" data-route="details">
- <script type="text/javascript">
- var view_approval_form=function(){var viewName="view-approval-form";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-approval-form");var viewModel=null;var _params=null;var approversList=null;var approvalModel=null;var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializeForm();initializePopOvers();viewModel=ko.validatedObservable(new requestViewModel());ko.applyBindings(viewModel,$viewRoot.find(".panels")[0]);ko.applyBindings(viewModel,$viewRoot.find(".button-panel")[0]);approvalModel=ko.validatedObservable(new approvalViewModel());ko.applyBindings(approvalModel,$viewRoot.find(".response-comment")[0]);ko.applyBindings(approvalModel,$viewRoot.find(".response-confirm")[0]);$viewRoot.find(".btn-approve").click(function(e){if(approvalModel.errors().length>0){approvalModel.errors.showAllMessages();return false;}
- approvalModel().response(true);onApproveClick(e.currentTarget);});$viewRoot.find(".btn-deny").click(function(){if(approvalModel.errors().length>0){approvalModel.errors.showAllMessages();return false;}
- approvalModel().response(false);$viewRoot.find(".response-panel-slider").animate({left:"-700px"});});$viewRoot.find(".link-change-response").click(function(e){e.preventDefault();$viewRoot.find(".response-panel-slider").animate({left:"0px"});return false;});$viewRoot.find(".btn-confirm-deny").click(function(){var btn=this;$viewRoot.find(".link-change-response").attr("disabled",true);$(btn).attr("disabled",true);$(btn).busy();$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/ExpireRequest",data:{requestId:viewModel().requestId(),comment:approvalModel().comment()},contentType:"application/json; charset=utf-8",dataType:"json",success:function(result){$viewRoot.find(".panel-response-successful .label-success").hide();$viewRoot.find(".panel-response-successful .label-important").show();slideInResponsePanel();},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);$(btn).busy(false);},complete:function(){$viewRoot.find(".link-change-response").attr("disabled",false);$(btn).attr("disabled",false);$(btn).busy(false);}});});$viewRoot.find(".btn-back-to-list").click(function(e){if(_urlHistory.length>1){var previousUrl=_urlHistory[_urlHistory.length-2];if(previousUrl.indexOf("/approve/list")>-1){e.preventDefault();window.location.href=previousUrl;return false;}}});_isInitialized=true;};var onApproveClick=function approveClickFunc(e){var btn=e;$viewRoot.find(".link-change-response").attr("disabled",true);$(btn).attr("disabled",true);$(btn).busy();$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/ApproveRequest",data:{requestId:viewModel().requestId(),comment:approvalModel().comment()},contentType:"application/json; charset=utf-8",dataType:"json",success:function(result){$viewRoot.find(".panel-response-successful .label-important").hide();$viewRoot.find(".panel-response-successful .label-success").show();slideInResponsePanel();},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);$(btn).busy(false);},complete:function(){$viewRoot.find(".link-change-response").attr("disabled",false);$(btn).attr("disabled",false);$(btn).busy(false);}});}
- var slideInResponsePanel=function(){$viewRoot.find(".form-approve-request").hide();$viewRoot.find(".panel-response-successful").offset({left:60}).animate({left:'-=60',opacity:"toggle"});};var initializeForm=function(){$viewRoot.find(".form-approve-request").submit(function(e){e.preventDefault();return false;});$viewRoot.find(".btn-back-to-list").click(function(){window.location.href="#/approve/list";});$viewRoot.find(".approver-response-history-grid").kendoGrid({columns:[{field:"responseDate",width:150,format:"{0:g}",title:"Date"},{field:"approverName",width:150,title:"Submitted By"},{field:"response",width:150,title:"Response"},{field:"comment",width:150,title:"Comment"}]});}
- var initializePopOvers=function(){$viewRoot.find(".popover-user-details").data('popover',null).popover({trigger:"manual",title:"Loading...",html:true,content:""}).click(function(e){e.stopPropagation();var html="<div class='user-details-popup'>"+"<div><div class='popup-label'>Name:</div><div class='popup-value'>{0}</div></div>".format(viewModel().requestor.fullName())+"<div><div class='popup-label'>Email:</div><div class='popup-value'><a href='mailto:{0}'>{0}</a></div></div>".format(viewModel().requestor.emailAddress())+"<div><div class='popup-label'>Phone:</div><div class='popup-value'>{0}</div></div>".format(viewModel().requestor.phoneNumber())+"<div><div class='popup-label'>Groups:</div><div class='popup-value'>{0}</div></div>".format(getUsersGroups())+"</div>";$(this).data("popover").options.title=viewModel().requestor.username();$(this).data("popover").options.content=html;$(this).popover("show");return false;});$viewRoot.find(".popover-approvers-list").data('popover',null).popover({trigger:"manual",title:"Approvers List",html:true,content:""}).click(function(e){e.stopPropagation();var $node=$(this);if(approversList==null){$node.busy();$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetApproversForRequest",data:{requestId:viewModel().requestId()},contentType:"application/json; charset=utf-8",dataType:"json",success:function(result){approversList=result;showApproversPopUp($node);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);$node.busy(false);}});}
- else showApproversPopUp($node);return false;});$viewRoot.find(".popover-asset-details").data('popover',null).popover({trigger:"manual",title:"Asset Details",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner asset-details-popover"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',html:true,content:""}).click(function(e){e.stopPropagation();var html="<div class='asset-details-popup'>"+"<div><div class='popup-label'>Name:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.name())+"<div><div class='popup-label'>IP:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.ipAddress())+"<div><div class='popup-label'>OS:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.os())+"<div><div class='popup-label'>Risk:</div><div class='popup-value'>{0}</div></div>".format(viewModel().system.riskScore().toFixed(2))+"<div><div class='popup-label'>Updated:</div><div class='popup-value'>{0}</div></div>".format(moment(viewModel().system.lastUpdatedDate()).format("l"))+"</div>";$(this).data("popover").options.content=html;$(this).popover("show");return false;});$("html").click(function(){$viewRoot.find(".popover-user-details").popover("hide");$viewRoot.find(".popover-approvers-list").popover("hide");$viewRoot.find(".popover-asset-details").popover("hide");});};var getUsersGroups=function(){var groups="";for(var i=0;i<viewModel().requestor.userGroups().length;i++){groups+=viewModel().requestor.userGroups()[i]+"<br/>";}
- return groups;};var customUserNameSplit=function(theElement){arrayOfChars=theElement.split("");concatedElements="";stringlenthCount=0;for(var i=0;i<arrayOfChars.length;i++){if(stringlenthCount<14){concatedElements+=arrayOfChars[i];stringlenthCount=stringlenthCount+1;}else{concatedElements+=arrayOfChars[i]+'<br/>';stringlenthCount=0;}}
- return concatedElements;};$(function(){$('body').tooltip({selector:'[data-toggle=tooltip]'});});var showApproversPopUp=function($node){var html="<table class='table' style='table-layout:fixed;'>"+"<thead><th>User ID</th><th>Last Name</th><th>First Name</th><th>Email</th><th>Phone</th></thead>"+"<tbody>";for(var i=0;i<approversList.length;i++){if(approversList[i].WorkPhone==null){approversList[i].WorkPhone="";}
- if(approversList[i].FirstName==null){approversList[i].FirstName="";}
- if(approversList[i].LastName==null){approversList[i].LastName="";}
- if(approversList[i].Email==null){approversList[i].Email="";}
- var userName=approversList[i].UserName;html+="<tr><td style='display:inline-block; max-width:125px; overflow:hidden; text-overflow:ellipsis;'><a href='mailto:{3}' data-placement='bottom' data-toggle='tooltip' data-original-title='{0}'>{0}</td><td style='width:125px; overflow:hidden; text-overflow:ellipsis;'>{1}</td><td style='width:120px; overflow:hidden; text-overflow:ellipsis;'><span data-placement='bottom' data-toggle='tooltip' data-original-title='{2}'>{2}</span></td><td style='width:125px; overflow:hidden; text-overflow:ellipsis;'><a href='mailto:{3}' data-placement='bottom' data-toggle='tooltip' data-original-title='{3}'>{3}</a></td><td style='width:125px;'>{4}</td></tr>".format(userName.replace("'","\'"),approversList[i].LastName.replace("'","\'"),approversList[i].FirstName.replace("'","\'"),approversList[i].Email.replace("'","\'"),approversList[i].WorkPhone.replace("'","\'"));}
- html+="</tbody></table>";$node.data("popover").options.content=html;$node.busy(false);$node.popover("show");}
- var approvalViewModel=function(){var self=this;self.comment=ko.observable("").extend({required:true});self.response=ko.observable();};var showInvalidRequestPanel=function(){$viewRoot.find(".form-request-details").fadeOut();$viewRoot.find(".panel-invalid-parameter").offset({left:60}).animate({left:'-=60',opacity:"toggle"});};var beforeShow=function(params){_params=params;if(viewModel!=null)viewModel().reset();approversList=null;if($viewRoot.find(".approver-response-history-grid").data("kendoGrid")!=undefined)
- $viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource());if(approvalModel!=null){approvalModel().comment("");approvalModel().comment.isModified(false);}
- $viewRoot.find(".response-panel-slider").css("left","0");$viewRoot.find(".panel-response-successful").hide();$viewRoot.find(".form-approve-request").show();};var show=function(){if(_params==null||_params["id"]==null||isNaN(_params["id"])){showInvalidRequestPanel();return;}
- $viewRoot.find(".container-form-content").css("opacity",0.3)
- $viewRoot.find(".form-approve-request").activity({segments:12,width:5.5,space:6,length:13,color:'#252525',speed:1.5});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetRequestDetails",data:{requestId:_params["id"],forApprover:true},contentType:"application/json; charset=utf-8",dataType:"json",success:function(requestDetails){if(requestDetails!=null&&requestDetails!=""&&requestDetails!=undefined){ko.mapping.fromJS(requestDetails,{},viewModel);$viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource({data:ko.toJS(viewModel().responses()),schema:{model:{id:"responseId",fields:{responseId:{type:"number"},approverId:{type:"number"},approverName:{type:"string"},responseDate:{type:"date"},response:{type:"string"},comment:{type:"string"}}}}}));}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".container-form-content").css("opacity",1)
- $viewRoot.find(".form-approve-request").activity(false);}});};$viewRoot.find(".btn-session_lock").click(function(){viewModel().lockRequest(true);lockRequest();});$viewRoot.find(".btn-session_unlock").click(function(){viewModel().lockRequest(false);lockRequest();});var lockRequest=function(){var viewModelJson=ko.toJSON(viewModel);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/LockRequest",type:"POST",dataType:"json",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){if(result=="True"){viewModel().isLocked(true);}
- else{viewModel().isLocked(false);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".request-result").addClass("alert-error").text(ex.Message).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){}});};var hide=function(){};var afterHide=function(){if(viewModel!=null)viewModel().reset();$viewRoot.find(".request-result").removeClass("alert-error").hide();if($viewRoot.find(".approver-response-history-grid").data("kendoGrid")!=undefined)
- $viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource());if(approvalModel!=null){approvalModel().comment("");approvalModel().comment.isModified(false);}};var resize=function(){};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};var checkISA=function(){if(_sessionUserViewModel.IsIsa())
- return true;else
- return false;}</script>
- <div class="panels">
- <form class="form form-horizontal form-approve-request">
- <div class="container-form-content">
- <div class="request-details">
- <h4>Request ID: <span class="form-value-label" data-bind="visible: requestId() > 0, text: requestId"></span></h4>
- <div class="section-content">
- <div class="control-group">
- <span class="control-label">Requested By:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <strong><span class="form-value-label" data-bind="text: requestedByName"></span></strong> <a class="popover-trigger popover-user-details" href="#"><i class="icon-info-sign"></i></a>
- <span class="form-value-splitter">on</span> <span class="form-value-label" data-bind="dateString: submittedDate"></span>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Account:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <strong><span class="form-value-label" data-bind="text: accountName"></span></strong> on
- <strong><span class="form-value-label" data-bind="text: systemName"></span></strong> <a class="popover-trigger popover-asset-details" href="#"><i class="icon-info-sign"></i></a>
- <div data-bind="visible: isMultiSystemCheckout"><strong><span class="form-value-label">This is also a multi-system checkout request, allowing the above account to be used in the Admin Session screen.</span></strong></div>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label" data-bind="visible: remoteDesktopAppID() > 0">Application:</span>
- <div class="controls read-only-label" data-bind="visible: remoteDesktopAppID() > 0" style="display: none;">
- <strong><span class="form-value-label" data-bind="text: remoteDesktopAppAlias"></span></strong>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Requested Date:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: requestedDateRange"></span><br />
- (<span class="form-value-label" data-bind="text: requestedDateHumanized"></span>)
- </div>
- </div>
- <div class="control-group access-type">
- <span class="control-label">Requested Access Types:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: AccessTypeName"></span>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Reason:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: reason"></span>
- </div>
- </div>
- <div class="control-group" data-bind="visible: ticketNumber() != null && ticketNumber() != ''">
- <span class="control-label">Ticket Number:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="text: ticketNumber"></span> on <span class="form-value-label" data-bind="text: ticketSystem"></span>
- </div>
- </div>
- </div>
- </div>
- <h4 class="section-header">Approval History</h4>
- <div class="section-content">
- <div class="control-group">
- <span class="control-label approvals-required">Approvals Required:</span>
- <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
- <span class="form-value-label" data-bind="visible: requestId() > 0, text: minimumApprovers"></span> <a class="popover-trigger popover-approvers-list" href="#"><i class="icon-info-sign"></i></a>
- </div>
- </div>
- <div class="approval-history-container">
- <div class="approver-response-history-grid"></div>
- </div>
- </div>
- <h4 class="section-header">Action</h4>
- <div class="section-action">
- <div data-bind="visible: (requestId() > 0 && isApprovable() || isCancellable())" style="display:none;">
- <div class="section-content request-response">
- <div class="response-slider-container" data-bind="stopBindings: true">
- <div class="response-panel-slider">
- <!-- The comment and approve/deny panel -->
- <div class="response-writable pull-left">
- <div class="pull-left response-comment">
- <label class="control-label pull-left label-comment" for="comment">Comment:</label>
- <div class="pull-left" style="margin-left:1em;">
- <textarea name="comment" rows="4" class="input-xlarge" data-bind="value: comment"></textarea>
- </div>
- </div>
- <div class="pull-left button-panel">
- <div class="btn-approve-container" data-bind="visible: isApprovable()">
- <button class="btn btn-success btn-large btn-approve"><i class="icon-ok icon-white"></i> Approve</button>
- </div>
- <div class="btn-deny-container" data-bind="visible: isCancellable()">
- <button class="btn btn-danger btn-deny"><i class="icon-ban-circle icon-white"></i> Deny/Cancel</button>
- </div>
- <div class="btn-session_unlock-container" data-bind="visible: isCancellable() && isLocked() && checkISA() && (AccessTypeName() == 'RDP' || AccessTypeName() == 'SSH' || AccessTypeName() == 'Application Session')">
- <button class="btn btn-danger btn-session_unlock"><i class="icon-play icon-white"></i> Unlock Request</button>
- </div>
- <div class="btn-session_lock-container" data-bind="visible: isCancellable() && !isLocked() && checkISA() && (AccessTypeName() == 'RDP' || AccessTypeName() == 'SSH' || AccessTypeName() == 'Application Session')">
- <button class="btn btn-danger btn-session_lock"><i class="icon-pause icon-white"></i> Lock Request</button>
- </div>
- </div>
- </div>
- <!-- The confirm action panel -->
- <div class="response-confirm pull-left">
- <div style="text-align: center">
- <span data-bind="text: comment"></span>
- </div>
- <div class="confirm-button-container">
- <button class="btn btn-danger btn-large btn-confirm-deny" data-bind="visible: response() == false">Confirm<br />Deny/Cancel</button>
- </div>
- <!--<div class="cancel-confirm-link">
- <a class="link-change-response" href="#"><i class="icon-arrow-left"></i> Change your response</a>
- </div>-->
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && !isExpired() && !isApprovable() && !isCancellable())" style="display:none;">
- This request cannot be approved or denied.
- </div>
- <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && isExpired())" style="display:none;">
- This request has expired.
- </div>
- </div>
- <div class="section-header">
- <button class="btn btn-mini btn-back-to-list">Back to Requests List</button>
- </div>
- </div>
- <div class="alert request-result" style="display:none;"></div>
- </form>
- <div class="panel panel-response-successful" style="display:none; ">
- <div class="alert alert-success">
- <div><b>Response Recorded</b></div>
- <p>
- You have
- <span class="label label-success" style="display:none;">Approved</span>
- <span class="label label-important" style="display:none;">Denied/Canceled</span>
- the following request:<br /><br />
- <span class="field-label">Request Id:</span> <strong data-bind="text: requestId"></strong><br />
- <span class="field-label">User:</span> <strong data-bind="text: requestedByName"></strong><br />
- <span class="field-label">Account:</span> <strong data-bind="text: accountName"></strong><br />
- <span class="field-label">System:</span> <strong data-bind="text: systemName"></strong>
- </p>
- </div>
- <div class="section-header">
- <a href="#/approve/list" class="btn">View Pending Requests</a>
- </div>
- </div>
- <div class="panel panel-invalid-parameter" style="display:none;">
- <h3>Invalid Request ID</h3>
- <div class="alert alert-error">
- <p>An invalid Request ID was specified, or you do not have the required permission to view it.</p>
- <p>
- Please view the <a href="#/approve/list">pending requests list</a>
- and select a request to view.
- </p>
- </div>
- </div>
- </div>
- </div>
- </div> <!-- Views -->
- </div> <!-- Page -->
- <!-- Page: Replay Sessions -->
- <div class="page page-replay-sessions" data-route="replay" data-default-view-route="list">
- <script type="text/javascript">var page_replay_sessions=function(){var CHANNEL_PAGE="Channel.Page.Replay";var PAGE_ROOT_CLASS="page-replay-sessions";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_APPROVER,ROLE_REQUESTOR_APPROVER,ROLE_ISA,ROLE_AUDITOR,ROLE_RECORDED_SESSION_REVIEWER];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles};};</script>
- <div class="views">
- <!-- View: Grid of session recordings. RDP SSH -->
- <div class="view view-session-monitoring" data-route="list">
- <script type="text/javascript">
- var isGridRefresh=false;var selectedRow=[[,]];var view_session_monitoring=function(){var viewName="view-session-monitoring";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-session-monitoring");var viewModel;var _params=null;var replayGridSourceModel=null;var gridDataSource=null;var $RSgrid=null;function getKendoGrid(){return $(".view.view-session-monitoring").find(".session-monitoring-grid").data("kendoGrid");}
- var rWindow=$viewRoot.find(".sessionWindow");var rWindowData;var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializeSessionMonitoringGrid();viewModel=new SessionMonitoringViewModel(RemoteSessionTypeENUM.REPLAY);viewModel.filterModel().selectButton(viewModel.filterModel().buttons()[1]);ko.applyBindings(viewModel,$viewRoot[0]);$viewRoot.find(".form-filter .btn-clear-filter").click(function(e){e.preventDefault();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="));newUrl+="/status=All&reset=true";window.location.href=newUrl;return false;});var OnKendoWindowClose=function(e){var gData=getKendoGrid();var sRow=gData.dataItem(gData.select());var ogTkn=viewModel.selectedSession().token();var rtkn=viewModel.selectedSession().replayToken();if(viewModel.selectedSession().protocol().name=='RDP'){$('#PBbigOne_'+rtkn).attr("src",'../images/rdp-placeholder-lg.jpg');}else{$('#PBbigSshDiv_'+rtkn).text('...');}
- clearDurationIntervals(replayDurationIntervals,false);if(e.userTriggered&&(viewModel.selectedSession().inEditMode()==true)){refreshPlaybackGrid();}
- viewModel.selectedSession().inEditMode(false);viewModel.selectedSession().showOutputKeystrokes(false);}
- var OnKendoWindowOpen=function(){viewModel.selectedSession().reviewNotes("");viewModel.selectedSession().errors.showAllMessages(false);if(viewModel.selectedSession().protocol().name=='SSH'){viewModel.frameExportSupported(!!window.HTMLCanvasElement);}else{viewModel.frameExportSupported(true);}}
- rWindow.kendoWindow({width:"55%",minWidth:818,minHeight:680,title:"Session Replay View Placeholder text",content:"",close:OnKendoWindowClose,open:OnKendoWindowOpen,actions:["Maximize","Close"],visible:false,modal:true});rWindowData=rWindow.data("kendoWindow");$viewRoot.on('click',function(e){if($(e.target).data('toggle')!=='popover'&&$(e.target).parents('.popover.in').length===0||$(e.target).is('.close')){hideGridPopovers($viewRoot);}});PlaybackController={ApplyBindings:function(){bindPlaybackControls();initProgressUI();},Initialize:function(replayModel){viewModel.selectedSession(replayModel);},Open:function(){return viewModel.selectedSession().open();},Play:function(offset){if(offset!=null&&offset!=undefined&&offset>=0){offsetPlayback(offset);}else{onBtnPlaySessionClick();}},Pause:function(){viewModel.selectedSession().pause();},Restart:function(){this.Play(0);},Save:function(){onBtnSaveReplayStateClick();},Archive:function(){onArchiveSessionClick();},Unarchive:function(){onUnarchiveSessionClick();},EstablishHeartbeat:function(token){initializePlaybackHeartbeat(token)},UpdateState:function(replayStateENUM){return viewModel.selectedSession().UpdateState(replayStateENUM);},ExportFrame:function(){exportFrame(viewModel.selectedSession().protocol().name);},}
- PlaybackController.ApplyBindings();function bindPlaybackControls(){$(document).on('click','.btn-archive-session',function(){PlaybackController.Archive();});$(document).on('click','.btn-play-session',function(){PlaybackController.Play();});$(document).on('click','.btn-pause-session',function(){PlaybackController.Pause();viewModel.selectedSession().ShowInfoMessage("Paused.");});$(document).on('click','.btn-unarchive-session',function(){PlaybackController.Unarchive();});$(document).on('click','.btn-restart-session',function(){KeystrokesController.ClearSelection();PlaybackController.Restart();});$(document).on('click','.btn-save-review-state',function(){PlaybackController.Save();});$(document).on('click','#keystrokes tr td a',function(e){e.preventDefault();});$(document).on('click','.btn-export-frame',function(){PlaybackController.ExportFrame();});}
- function exportSSHFrame(){var et=viewModel.selectedSession().elapsedTime();var sshElem=rWindowData.element.find('#PBbigSshDiv_'+viewModel.selectedSession().replayToken())[0];var s=$(sshElem);var canvas=document.createElement("canvas");var ctx=canvas.getContext("2d");canvas.width=1024;canvas.height=768;ctx.fillStyle='#000';ctx.fillRect(0,0,canvas.width,canvas.height);ctx.fillStyle='#fff';ctx.font=s.css('font-size')+" "+s.css('font-family');var lineHeight=s.css('line-height');lineHeight=parseInt(lineHeight.replace(/(\px+$)/g,''),10);var x=20;var y=lineHeight;writeTextToCanvas(ctx,sshElem.value,x,y,canvas.width,lineHeight);buildMetaStrip(ctx,viewModel.selectedSession().managedAccountName(),viewModel.selectedSession().assetName(),viewModel.selectedSession().userName(),getHumanReadableTime(Math.round(et/1000)),_sessionUserViewModel.UserName(),0,canvas.height-x,canvas.width,20);var filename=viewModel.selectedSession().assetName()+'-s'+viewModel.selectedSession().sessionId()+'-'+et+'.jpeg';_downloadSSHFrame(canvas,filename);saveFrameExportAudit();};function _downloadSSHFrame(canvas,filename){if(canvas.msToBlob){var blob=canvas.msToBlob();window.navigator.msSaveBlob(blob,filename);}else{var a=document.createElement('a');var dataURL=canvas.toDataURL('image/jpeg');if(typeof a.download==='undefined'){var w=window.open('about:blank','imagefromcanvas');w.document.write("<img src='"+dataURL+"' alt='from canvas'/>");}else{a.href=dataURL;a.download=filename;document.body.appendChild(a);a.addEventListener("click",function(e){a.parentNode.removeChild(a);});a.click();setTimeout(function(){if(typeof URL!='undefined'&&typeof URL.revokeObjectURL!='undefined'){URL.revokeObjectURL(dataURL);}},100);}}}
- function buildMetaStrip(context,accountName,assetName,userName,offset,loggedInUser,x,y,w,h){var metaString=assetName+" | "+accountName+" | "+userName+" | "+offset;context.fillStyle="#fff";context.fillRect(x,y,w,h);context.strokeRect(x,y,w,h);context.fillStyle="#000";context.font="13px Arial";context.textBaseline="middle";context.fillText(metaString,x+5,(y+10));var rt="Exported by "+loggedInUser+" at "+moment.utc().format("MM/DD/YYYY hh:mm A")+" UTC.";context.fillText(rt,(w-context.measureText(rt).width)-5,(y+10));}
- function writeTextToCanvas(context,text,x,y,maxWidth,lineHeight){var cars=text.split("\n");for(var ii=0;ii<cars.length;ii++){var line="";var words=cars[ii].split(" ");for(var n=0;n<words.length;n++){var testLine=line+words[n]+" ";var metrics=context.measureText(testLine);var testWidth=metrics.width;if(testWidth>maxWidth){context.fillText(line,x,y);line=words[n]+" ";y+=lineHeight;}
- else{line=testLine;}}
- context.fillText(line,x,y);y+=lineHeight;}}
- function initProgressUI(){$(document).on('click','#progressWrap',function(e){onBarClick(e,$(this));});$.widget.bridge('uitooltip',$.ui.tooltip);var timemarker;$(document).uitooltip({show:{delay:450},items:'div#progressWrap',track:true,create:function(){$(document).on('mousemove','#progressWrap',function(e){onProgressMouseMove(e);});},content:function(e){return"<span id='progTM'>"+timemarker+"</span>";}});var onProgressMouseMove=function(e){var element=rWindowData.element.find("#progressWrap");var offset=element.offset();var dur=viewModel.selectedSession().duration();timemarker=calculateProgressClickOffset(e.clientX,offset.left,element.width(),dur);timemarker=getHumanReadableTime(Math.round(timemarker/1000));$(document).find('#progTM').html(timemarker);}
- var onBarClick=function barClickFunc(e,progressDiv){var offset=progressDiv.offset();var dur=viewModel.selectedSession().duration();var xCoord=e.clientX;if(xCoord<offset.left){xCoord=offset.left;}
- var timemarker=calculateProgressClickOffset(xCoord,offset.left,progressDiv.width(),dur);PlaybackController.Play(timemarker);updateProgressBar(false,progressDiv.children(0)[0],dur*1000,timemarker);if(!viewModel.selectedSession().playAuditCommitted()){savePlaybackAudit();viewModel.selectedSession().playAuditCommitted(true);}}
- function calculateProgressClickOffset(clickXCoord,leftOffset,barTWidth,duration){var x=clickXCoord-leftOffset;if(x<0){x=0;}
- var percentWidth=convertPositionToPercentOfWidth(x,barTWidth);return convertPercentToOffset(percentWidth,duration);}
- function convertPercentToOffset(widthPercent,duration){return((widthPercent/100)*duration)*1000;}
- function convertPositionToPercentOfWidth(xCoord,totalWidth){return((xCoord/totalWidth)*100);}}
- var onUnarchiveSessionClick=function(){$.when(viewModel.selectedSession().unarchiveSession()).then(function(response){var r=response;}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;}}
- else showApplicationError(jqXhr);}).done(function(){refreshPlaybackGrid();});}
- var onArchiveSessionClick=function(){$.when(viewModel.selectedSession().archiveSession()).then(function(response){var r=response;}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;}}
- else showApplicationError(jqXhr);}).done(function(){rWindowData.close();refreshPlaybackGrid();});}
- function onBtnPlaySessionClick(){var offset=0;$.when(viewModel.selectedSession().play(null)).then(function(){setFormBusy(false);if(!viewModel.selectedSession().playAuditCommitted()){savePlaybackAudit();viewModel.selectedSession().playAuditCommitted(true);}})}
- function exportFrame(protocol){if(protocol=='RDP'){var m=ko.toJSON(viewModel.selectedSession());$.when(viewModel.selectedSession().FetchFrame(m)).then(function(){setFormBusy(false);viewModel.selectedSession().ShowInfoMessage("Frame export complete.");})}else{exportSSHFrame();viewModel.selectedSession().ShowInfoMessage("Frame export complete.");}}
- function onBtnSaveReplayStateClick(){if(viewModel.selectedSession().errors().length>0){viewModel.selectedSession().errors.showAllMessages();return false;}
- if(viewModel.selectedSession().hasEdits()){var replayViewModelJson=ko.toJSON(viewModel.selectedSession());$.when(saveReplayState(replayViewModelJson)).then(function(){}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;}}
- else showApplicationError(jqXhr);}).done(function(){refreshPlaybackGrid();});}else{refreshPlaybackGrid();}}
- _isInitialized=true;};var initializeSessionMonitoringGrid=function(){$RSgrid=$viewRoot.find(".session-monitoring-grid");$RSgrid.kendoGrid({resizable:true,selectable:"row",height:550,pageable:true,groupable:false,sortable:{mode:"multiple",allowUnsort:true},reorderable:true,columnMenu:false,detailTemplate:kendo.template($("#replay-detail-template").html()),detailInit:function(e){kendo.bind(e.detailRow,e.data);},filterable:{extra:false,operators:{string:{contains:"Contains",startswith:"Starts with",eq:"Is equal to",neq:"Is not equal to"}}},columns:[{field:"StartDate",format:"{0:g}",title:"Created Date",filterable:{ui:"datetimepicker",extra:true}},{field:"AssetName",title:"System",filterable:{cell:{showOperators:true}}},{field:"AgentName",title:"Node",template:$("#tmpl-Node").html(),filterable:{cell:{showOperators:true}},hidden:!_sessionUserViewModel.IsActiveActive()},{field:"Alias",title:"Application",filterable:{cell:{showOperators:true}}},{field:"DomainName",title:"Directory",filterable:{cell:{showOperators:true}}},{field:"ManagedAccountName",title:"Account",filterable:{cell:{showOperators:true}}},{field:"ReleaseRequestComment",title:"Reason",filterable:{cell:{showOperators:true}}},{field:"UserName",title:"Requestor",filterable:{cell:{showOperators:true}}},{field:"Protocol",title:"Protocol",filterable:{cell:{showOperators:true}}},{field:"SessionStartTime",format:"{0:g}",title:"Session Started",filterable:{ui:"datetimepicker",extra:true}},{field:"SessionEndTime",format:"{0:g}",title:"Session Ended",filterable:{ui:"datetimepicker",extra:true}},{field:"Duration",title:"Duration (sec.)",filterable:{cell:{showOperators:true}}},{field:"Filesize",template:"#= Math.round((Filesize/1024)*100)/100 #",title:"Size (KB)",filterable:{cell:{showOperators:true}}},{field:"Reviewed",template:"#= Reviewed ? 'Yes' : 'No' #",width:"110px",title:"Reviewed",filterable:{cell:{showOperators:true},messages:{isTrue:"Yes",isFalse:"No"}}},{field:"ArchiveStatus",width:120,title:"Archive Status",filterable:{cell:{showOperators:true}},hidden:true},{field:"Token",width:120,title:"Token",filterable:{cell:{showOperators:true}},hidden:true},{field:"ReleaseRequestID",width:120,title:"ReleaseRequestID",filterable:{cell:{showOperators:true}},hidden:true},{field:"Resolution",width:120,title:"Resolution",filterable:{cell:{showOperators:true}},hidden:true}]});};var onRequestStart=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",true);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(false);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(false);};var onRequestEnd=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",false);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(true);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(true);};var resizeSessionMonitoringGrid=function(){};var beforeShow=function(params){_params=params;};var preprocessSeconds=function(data){$.each(data.data,function(index,item){item.Duration=moment.duration(item.Duration,"seconds").humanize();});return data;};var show=function(){viewModel.resetSelectedSession();if(_params==null){window.location.href+="/status=All";return;}
- if(_params["status"]){for(var i=0;i<viewModel.filterModel().buttons().length;i++){if(viewModel.filterModel().buttons()[i].name.toLowerCase()==_params["status"].toLowerCase()){viewModel.filterModel().selectButton(viewModel.filterModel().buttons()[i]);break;}}}
- if(_params["system"]){viewModel.filterModel().system(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{viewModel.filterModel().system("");}
- if(_params["keystrokeCommand"]){viewModel.filterModel().keystrokeCommand(_params["keystrokeCommand"]);$viewRoot.find(".filter-keystroke").val(_params["keystrokeCommand"]);}else{viewModel.filterModel().keystrokeCommand("");viewModel.filterModel().isKeystrokeSearch(false);}
- if(_params["start"]){viewModel.filterModel().start(parseDatesForIE8(_params["start"]));}else{viewModel.filterModel().start("");}
- if(_params["end"]){viewModel.filterModel().end(parseDatesForIE8(_params["end"]));}else{viewModel.filterModel().end("");}
- var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
- var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
- resizeSessionMonitoringGrid();var gridDataSource=new kendo.data.DataSource({requestStart:onRequestStart,requestEnd:onRequestEnd,serverPaging:true,serverSorting:true,serverFiltering:true,pageSize:12,transport:{read:{url:"/eEye.RetinaCS.Server/api/PMM/GetMonitoredSessions",cache:false,dataType:"json",type:"POST",contentType:"application/json; charset=utf-8",data:{sessionType:viewModel.filterModel().selectedButton().name,systemName:viewModel.filterModel().system(),isKeystrokeSearch:viewModel.filterModel().isKeystrokeSearch(),keystrokeCommand:viewModel.filterModel().keystrokeCommand(),keystrokeType:1,gridType:'Completed',startDate:startDate,endDate:endDate,clientTZOffsetMinutes:(new Date()).getTimezoneOffset()}},parameterMap:function(data){var newdata=$.extend({},data,{filter:data.filter,sort:data.sort});return JSON.stringify(newdata);}},schema:{model:{id:"RequestId",fields:{StartDate:{type:"date"},RequestId:{type:"number"},RequestorName:{type:"string"},SystemName:{type:"string"},AccountName:{type:"string"},RequestReleaseDate:{type:"date"},ApprovedDate:{type:"date"},CanceledDate:{type:"date"},ExpiresDate:{type:"date"},Duration:{type:"string"},Filesize:{type:"string"},SessionStartTime:{type:"date"},SessionEndTime:{type:"date"},ArchiveStatus:{type:"string"},Token:{type:"string"},ReleaseRequestID:{type:"string"},Resolution:{type:"string"},RecordKey:{type:"string"},ReplayToken:{type:"string"},ReviewHistoryComments:{type:"string"},ReviewedDateTime:{type:"date"},Reviewed:{type:"boolean"},ReviewedBy:{type:"string"},AgentName:{type:"string"}},},data:"data",total:"total",},error:function(e){showApplicationError(e.xhr);}});$RSgrid.data("kendoGrid").bind("filterMenuInit",function(e){if(e.field=="Filesize"){e.container.find("div.k-filter-help-text").text("Select a file size range from the list:");e.container.find("span.k-dropdown:first").css("display","none");e.container.find(".k-textbox:first").removeClass("k-textbox").kendoDropDownList({dataSource:new kendo.data.DataSource({data:[{name:"Select an option below",id:0},{name:"Extra Small (0 - 10 KB)",id:2},{name:"Small (10 - 100 KB)",id:3},{name:"Medium (100 KB - 1 MB)",id:4},{name:"Large (1 - 6 MB)",id:5},{name:"Extra Large (6 - 128 MB)",id:6},{name:"Gigantic (> 128 MB)",id:7}]}),dataTextField:"name",dataValueField:"id"});}
- if(e.field=="Duration"){e.container.find("div.k-filter-help-text").text("Select a duration from the list:");e.container.find("span.k-dropdown:first").css("display","none");e.container.find(".k-textbox:first").removeClass("k-textbox").kendoDropDownList({dataSource:new kendo.data.DataSource({data:[{name:"Select an option below",id:0},{name:"Less than a minute (0 - 59 sec)",id:1},{name:"1 - 10 minutes (60 - 599 sec)",id:2},{name:"10 - 30 minutes (600 - 1799 sec)",id:3},{name:"30 minutes to an hour (1800 - 3599 sec)",id:4},{name:"1 hour to 2 hours (3600 - 7199 sec)",id:5},{name:"More than 2 hours (> 7200 sec)",id:6}]}),dataTextField:"name",dataValueField:"id"});}});if(_params["reset"]){gridDataSource._filter=null;}
- replayGridSourceModel=kendo.observable({sessionsSource:gridDataSource,OnDataBound:function(e){var headerObj=$RSgrid.find(".k-grid-header-wrap table");var gridObj=$RSgrid.find(".k-grid-content table");var gridObjStyle=gridObj.attr('style');if(gridObjStyle){headerObj.attr('style',gridObjStyle);}
- addExtraStylingToGrid("session-monitoring-grid");gridNoDataMsgDisplay(e);initNodePopovers($RSgrid);},OnExpand:expandReplayThumbnail,changeEvent:OnGridRowChange,dtExpand:onDetailExpand,dtCollapse:onDetailCollapse});var initNodePopovers=function(grid){$('.popover').remove();grid.find("a.infoIcon").data('popover',null).popover({trigger:"manual",title:"Session Not Available",template:'<div class="popover node"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',html:true,content:function(e){var content="<div class='node'>"+"<div><div class='popup-label'></div><div class='popup-value'>This session was created on a remote node, and can only be viewed from that node.</div></div>"+"</div>";return content;},animation:false,}).click(function(e){e.preventDefault();if(e.target!==this)
- return;e.stopPropagation();grid.find('a.infoIcon').not(this).popover('hide');var popover=$(this).data('popover');if($('.popover').is(":visible")){closeGridPopover(popover);return false;}
- grid.find('a.infoIcon').not(this).removeClass('active');grid.find('a.infoIcon').not(this).parents('tr').removeClass('k-state-selected');$(this).addClass('active');$(this).parents('tr').addClass('k-state-selected');$(this).popover('toggle');return false;}).on('shown',function(e){e.stopPropagation();var popover=$(this).data('popover'),$tip=popover.tip();var close=$('<button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>').click(function(){closeGridPopover(popover);});$('.popover-title',$tip).append(close);});}
- kendo.bind($viewRoot.find("#replayContent"),replayGridSourceModel);function OnGridRowChange(eventArgs){var gridData=eventArgs.sender;var curRow=gridData.select();var curDI=gridData.dataItem(curRow);var uid=curDI.uid;if(uid!=viewModel.selectedUid()){rowChange(gridData,null,null);}else{toggleRow(gridData);}
- viewModel.selectedUid(curDI.uid);}
- function onDetailExpand(e){var curDI=e.sender.dataItem(e.masterRow);var m=generateSessionModel(curDI);viewModel.selectedSession(m);removeSelectedState(e.sender);applySelectedState(e.masterRow[0]);PlaybackController.Initialize(m);};function applySelectedState(masterRow){$(masterRow).addClass("k-state-selected");}
- function removeSelectedState(grid){$(grid)[0].table.find(".k-state-selected").removeClass("k-state-selected");}
- function onDetailCollapse(e){e.masterRow.removeClass("k-state-selected");};function expandCollapseRow(curRow,gridData){var expanded=curRow.next().hasClass('k-detail-row');if(!isGridRefresh){if(!expanded||curRow.next().css('display')=="none"){gridData.expandRow(curRow);}}else{if(selectedRow[0][0].length>0){if(selectedRow[0][1]){gridData.expandRow(curRow);}else{gridData.collapseRow(curRow);curRow.removeClass("k-state-selected");}}}}
- function rowChange(gridData,row){if(!row){row=gridData.select();}else{gridData.select(row);}
- var isOpen=rWindowData.options.visible;if(rWindowData!=undefined&&isOpen){rWindowData.close();}
- expandCollapseRow(row,gridData);}
- function toggleRow(gridData){var curRow=gridData.select();var expanded=curRow.next().hasClass('k-detail-row');if(!expanded||curRow.next().css('display')=="none"){gridData.expandRow(curRow);}else{gridData.collapseRow(curRow);curRow.removeClass("k-state-selected");var expandedRows=$('.k-detail-row:visible');if(!expandedRows.length){clearDurationIntervals(activeDurationIntervals,false);}}}
- function getCurrentDataItem(gridDataRow){return gridDataRow.sender.dataItem(gridDataRow.sender.select());}
- function generateSessionModel(gridDataRow){return ko.validatedObservable(new MonitoredSessionViewModel(gridDataRow))();}
- function setSelectedSessionModel(monitoredSessionModel){viewModel.selectedSession(monitoredSessionModel);}
- function expandReplayThumbnail(e){var newAssetName=this.AssetName;var ogTkn=this.Token;newAssetName=newAssetName.replace(/'/g,"&\#39;");newAssetName=newAssetName.replace(/"/g,"&\#34;");var duration=this.Duration;if(ogTkn!=viewModel.selectedSession().token()){PlaybackController.Initialize(generateSessionModel(this));var g=getKendoGrid();g.table.find(".k-state-selected").removeClass("k-state-selected");var r=g.tbody.find("tr[data-uid='"+this.uid+"']");r.addClass("k-state-selected");}else if((ogTkn==viewModel.selectedSession().token())&&(!rWindowData.element.is(":hidden"))){return;}
- initializePlayback(duration,newAssetName,ogTkn,viewModel.selectedSession().protocol().name);}};var saveReplayState=function(JSONReplayVideModel){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/SaveReplayReviewState",type:"POST",dataType:"json",data:JSONReplayVideModel,contentType:"application/json; charset=utf-8",});}
- var sendFrameExportAuditRequest=function(replayModel){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/SaveReplayExportAction",type:"POST",dataType:"json",data:replayModel,contentType:"application/json; charset=utf-8",});}
- var saveFrameExportAudit=function(){var m=ko.toJSON(viewModel.selectedSession());$.when(sendFrameExportAuditRequest(m)).then(function(){}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){viewModel.selectedSession().replayStatus("alert-warning");viewModel.selectedSession().replayStatusMessage("An unexpected problem occurred while exporting the frame.");viewModel.selectedSession().showReplayStatus(true);}
- else showApplicationError(jqXhr);})}
- var savePlaybackAudit=function(){if(viewModel.selectedSession().errors().length>0){viewModel.selectedSession().errors.showAllMessages();return false;}
- var replayViewModelJson=ko.toJSON(viewModel.selectedSession());$.when(saveReplayState(replayViewModelJson)).then(function(){}).fail(function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){var displayMessage=ex.Message;switch(displayMessage.toLowerCase()){case"object reference not set to an instance of an object.":displayMessage="An unexpected error occurred. Please contact your Password Safe administrator.";break;}}
- else showApplicationError(jqXhr);})}
- var setFormBusy=function(isBusy){if(isBusy!=false)isBusy=true;if(isBusy){rWindowData.element.find(".rightpane input").attr("disabled","disabled");rWindowData.element.find(".rightpane table tr td a").attr("disabled","disabled");rWindowData.element.find(".rightpane").addClass("disabled");}else{rWindowData.element.find(".rightpane input").removeAttr("disabled");rWindowData.element.find(".rightpane table tr td a").removeAttr("disabled");rWindowData.element.find(".rightpane").removeClass("disabled");}};var offsetPlayback=function(offsetInMs){$.when(viewModel.selectedSession().play(offsetInMs)).then(function(){})}
- function initializePlaybackHeartbeat(token){setTimeout(function(){pushPlaybackInterval(500,playbackHeartbeatFunc,token+'_HB');},2000);}
- function playbackHeartbeatFunc(){var timerElement=rWindowData.element.find("#elapsed")[0];var progressBarElement=rWindowData.element.find("#progress")[0];$.when(PlaybackController.UpdateState(null)).done(function(){if(viewModel.selectedSession().remoteSessionState()!=RemoteSessionStateENUM.CLOSED){updatePlaybackProgressUI(true,timerElement,progressBarElement,viewModel.selectedSession().replayToken(),viewModel.selectedSession().duration()*1000,viewModel.selectedSession().elapsedTime(),viewModel.selectedSession().remoteSessionState());if(viewModel.selectedSession().remoteSessionState()==RemoteSessionStateENUM.CLOSING){updatePlaybackProgressUI(true,timerElement,progressBarElement,viewModel.selectedSession().replayToken(),viewModel.selectedSession().duration()*1000,(viewModel.selectedSession().duration()*1000),viewModel.selectedSession().remoteSessionState());}}}).fail(function(jqXhr,textStatus,errorThrown){clearDurationIntervals(replayDurationIntervals,false);})}
- var handle;function updatePlaybackProgressUI(animate,timerElement,progressBarElement,replayToken,durationInMs,elapsedTime,replayStateEnum){var et=getHumanReadableTime(Math.floor(elapsedTime/1000));timerElement.innerHTML=et;updateProgressBar(animate,progressBarElement,durationInMs,elapsedTime,replayStateEnum)}
- function updateProgressBar(animate,progressBarElement,durationInMs,elapsedTime,replayStateEnum){clearInterval(handle);var curWidth=progressBarElement.style.width;if(curWidth==''){curWidth=0;}else{curWidth=parseFloat(curWidth);}
- if(replayStateEnum==RemoteSessionStateENUM.PAUSED){return false;}
- else if(replayStateEnum==RemoteSessionStateENUM.CLOSING){if(curWidth<100){animateWidth(progressBarElement,curWidth,100,100);return false;}}
- var isPlaying=(replayStateEnum==RemoteSessionStateENUM.PLAYING||replayStateEnum==RemoteSessionStateENUM.PLAYING_DOUBLE||replayStateEnum==RemoteSessionStateENUM.PLAYING_HALF);var _percentComplete=((elapsedTime)/durationInMs)*100;if(_percentComplete>0&&_percentComplete<100){_percentComplete=(parseFloat(_percentComplete)).toFixed(4);if(_percentComplete<100&&curWidth>_percentComplete&&isPlaying){curWidth=_percentComplete;}
- if(animate==true){animateWidth(progressBarElement,curWidth,_percentComplete,700);}else{progressBarElement.style['width']=_percentComplete+"%";}}}
- function animateWidth(object,start_value,end_value,time){var frame_rate=0.06;var frame=0;var delta=(end_value-start_value)/time/frame_rate;delta=delta.toFixed(4);handle=setInterval(function(){frame++;var value=start_value+delta*frame;if(value>end_value){value=end_value;}
- object.style['width']=value+"%";if(value>=end_value){clearInterval(handle);}},1/frame_rate);}
- var initializePlayback=function(duration,assetName,originalToken,protocol){clearDurationIntervals(replayDurationIntervals,false);viewModel.selectedSession().showReplayStatus(true);viewModel.selectedSession().replayStatus("alert-info");viewModel.selectedSession().replayStatusMessage("Initializing playback...");$.when(PlaybackController.Open()).then(function(){viewModel.selectedSession().playAuditCommitted(false);var thetoken=viewModel.selectedSession().replayToken();PlaybackController.EstablishHeartbeat(viewModel.selectedSession().token());KeystrokesController.Initialize();rWindowData.title(assetName+' | '+moment(viewModel.selectedSession().startDate(),"MM-DD-YYYY h:mm A").format("MM/DD/YYYY h:mm A"));if(protocol=='RDP'){setPlaybackRDPImage(rWindowData,thetoken,originalToken);}else{setPlaybackSSHCommandText(rWindowData,thetoken,originalToken);}
- rWindowData.element.find('#progress_'+thetoken+' .plTotalDuration').html(getHumanReadableTime(duration));rWindowData.center().open();})}
- function getKeystrokeDisplayText(data,type,dataToSet){var offset=(data.TimeMarker-viewModel.selectedSession().sessionStartTimeInMS());var m=moment(data.TimeMarker);var s=m.format("M/D/YYYY H:mm:ss");var title=getHumanReadableTime(Math.round(offset/1000));return'<a id='+offset+' class="offset" href="#"><span class="kstime inactive">'+s+' - </span>'+data.Data+'</a>';}
- KeystrokesController={Initialize:function(){initializeKeystrokesUI();},ClearSelection:function(dt){clearSelectedKeystroke(dt);},SelectKeystroke:function(row){onKeyStrokeClick(row)},ShowTimestamp:function(show){onTimestampCheckboxChange(show);},ShowStandardOutput:function(show){onKeyStrokeCheckboxClick(show);}}
- var initializeKeystrokesUI=function(){$.when(viewModel.selectedSession().GetKeystrokes()).then(function(){initializeDataTable('#keystrokes',rWindowData);});clearDataTableCustomFilter();$.fn.dataTableExt.afnFiltering.push(function(oSettings,aData,iDataIndex){return filterFunc(oSettings.aoData[iDataIndex]._aData["Type"],viewModel.selectedSession().showOutputKeystrokes());});var filterFunc=function(kt,showingOutput){if(!showingOutput){return kt==2?false:true;}else{return true;}}
- var initializeDataTable=function(tableId,kendoWindowContext){var dt=kendoWindowContext.element.find(tableId).DataTable({destroy:true,mark:true,search:{search:viewModel.filterModel().keystrokeCommand()},data:viewModel.selectedSession().keystrokes(),orderClasses:true,ordering:true,columns:[{data:"KeystrokeID"},{data:"TimeMarker"},{data:null,render:getKeystrokeDisplayText}],columnDefs:[{targets:[0],visible:false,searchable:false},{targets:[1],visible:false,searchable:false,},{targets:[2],iDataSort:1}],order:[[2,'asc']],rowId:'KeystrokeID',dom:'<"k-grid k-widget"<"toolbar self_clear">frt<"footer"ip>>',scrollY:"400px",scrollCollapse:true,paging:true,pagingType:"full",lengthChange:false,language:{search:"_INPUT_",searchPlaceholder:"Search Keystrokes...",emptyTable:"No recorded keystrokes",info:"_START_ to _END_ of _TOTAL_ items",infoEmpty:"0 to 0 of 0 items",infoFiltered:"",zeroRecords:"No keystrokes found",},preDrawCallback:function(settings){dtPreDrawCallback(this,settings,kendoWindowContext);},initComplete:function(settings,json){dtInitCompleted(kendoWindowContext,this);},rowCallback:function(row,data,index){dtRowCallback(viewModel.selectedSession().showOutputKeystrokes()==true,row,data,index);}});dt.$("tr").uitooltip({track:true,items:"td",show:{delay:450},content:function(){var ofs=$(this).find("a").attr("id");return getHumanReadableTime(Math.round(ofs/1000));;}});}
- var dtInitCompleted=function(kendoWindowContext,dt){if(dt.api().rows().count()){}else{kendoWindowContext.element.find("#keystrokes_filter").hide();kendoWindowContext.element.find('.dataTables_scrollHead').hide();kendoWindowContext.element.find('.dataTables_info').hide();}}
- var appendToolbarUIElements=function(kendoWindowContext){var elems='';if(viewModel.selectedSession().protocol().name=='SSH'){elems+='<label class="checkbox" style="float:left; margin-right:1em;" title=\'Toggle visibility of output\' "><input id="chkShowOutput" title=\'Toggle visibility of output\' type="checkbox" data-bind="checked:showOutputKeystrokes()">Show output</label>';}
- elems+='<label class="checkbox" style="float:left;" title="Toggle keystrokes timestamps"><input id="chkDT" title="Toggle keystrokes timestamps" type="checkbox">Show timestamp</label>';kendoWindowContext.element.find("div.toolbar").html('<div>'+elems+'</div>');ko.applyBindings(viewModel.selectedSession(),kendoWindowContext.element.find("div.toolbar")[0]);addDataTableCustomEventHandlers(kendoWindowContext);kendoWindowContext.element.find("#keystrokes_filter").prop("title","Start typing to search keystrokes");}
- var dtPreDrawCallback=function(dt,dtSettings,kendoWindowContext){var api=new $.fn.dataTable.Api(dtSettings);var pagination=$(dt).closest('.dataTables_wrapper').find('.dataTables_paginate');if(api.rows().count()&&!(kendoWindowContext.element.find("div.toolbar")[0].firstChild)){appendToolbarUIElements(kendoWindowContext);kendoWindowContext.element.find("#keystrokes_filter").show();kendoWindowContext.element.find('.dataTables_scrollHead').show();kendoWindowContext.element.find('.dataTables_info').show();}
- if(api.page.info().pages<=1){pagination.hide();}
- else{pagination.show();}}
- var dtRowCallback=function(showOutput,row,data,index){var isSelected=row.className.indexOf('k-state-selected')>-1;if(showOutput){row.className=(data.Type==2)?'output k-alt':'input';}else{row.className=index%2==0?'input':'input k-alt';}
- if(isSelected){row.className+=" k-state-selected";}}
- var addDataTableCustomEventHandlers=function(kendoWindowContext){kendoWindowContext.element.find('#keystrokes tbody').on('click','tr',function(){KeystrokesController.SelectKeystroke(this);if(!viewModel.selectedSession().playAuditCommitted()){savePlaybackAudit();viewModel.selectedSession().playAuditCommitted(true);}});kendoWindowContext.element.find('.dataTables_scrollHead th').on('click','a',function(e){e.preventDefault();})
- kendoWindowContext.element.find('.dataTables_scrollHead').on('click','th',function(e){var t=kendoWindowContext.element.find("#keystrokes");var o=t.DataTable().order();if(o[0][1]=="asc"){$('a',this).text("Sorted: oldest to newest").attr("title","Click to sort by newest to oldest");}else{$('a',this).text("Sorted: newest to oldest").attr("title","Click to sort by oldest to newest");}});kendoWindowContext.element.find('#keystrokes tbody').on('mouseover','td:not(".dataTables_empty")',function(){onKeyStrokeHover(this.parentNode,true)}).on('mouseout','td:not(".dataTables_empty")',function(){onKeyStrokeHover(this.parentNode,false)});kendoWindowContext.element.find("#chkShowOutput").on("click",function(e){var show=$(this).is(":checked");KeystrokesController.ShowStandardOutput(show);});kendoWindowContext.element.find("#chkDT").on("change",function(e){var show=$(this).is(":checked");KeystrokesController.ShowTimestamp(show);});}
- var onKeyStrokeHover=function(row,isHover){if(isHover){$(row).addClass("k-state-hover");}else{$(row).removeClass("k-state-hover");}}}
- var onKeyStrokeCheckboxClick=function(show){var dt=rWindowData.element.find('#keystrokes').dataTable();if(show){viewModel.selectedSession().showOutputKeystrokes(true);}else{viewModel.selectedSession().showOutputKeystrokes(false);}
- dt.fnFilter('',0,true,false);}
- var onTimestampCheckboxChange=function(show){var dt=rWindowData.element.find('#keystrokes').dataTable();if(show){dt.$('span.kstime').removeClass("inactive");}else{dt.$('span.kstime').addClass("inactive");}}
- var toggleSelectedKeystroke=function(target){var dt=rWindowData.element.find('#keystrokes').dataTable();KeystrokesController.ClearSelection(dt);$(target).addClass('k-state-selected');}
- var onKeyStrokeClick=function(row){var a=$(row).children().children('a');if(a.attr("disabled")){return false;}
- toggleSelectedKeystroke(row);var ofs=a.attr('id');PlaybackController.Play(ofs);updateProgressBar(false,rWindowData.element.find("#progress")[0],viewModel.selectedSession().duration()*1000,ofs);}
- var clearSelectedKeystroke=function(dt){if(dt==null){dt=rWindowData.element.find('#keystrokes').dataTable();}
- dt.$('tr.k-state-selected').removeClass('k-state-selected');}
- var setPlaybackRDPImage=function(kw,replayToken,originalToken){var elem=kw.element.find('#PBbigOne_'+replayToken)[0];setTimeout(function(){pushPlaybackInterval(1000,function(){var rs=viewModel.selectedSession().remoteSessionState();if(rs==RemoteSessionStateENUM.PLAYING||rs==RemoteSessionStateENUM.PLAYING_DOUBLE||rs==RemoteSessionStateENUM.PLAYING_HALF){elem.setAttribute("src",'/eEye.RetinaCS.Server/api/PMM/GetReplaySessionThumbnail?token='+replayToken+'&jpeg=1&protocol=RDP×tamp='+new Date().getTime()+'&anticsrftoken='+_antiCSRFToken);}},originalToken+'_RDP');},1000)}
- var setPlaybackSSHCommandText=function(kw,replayToken,originalToken){var sshElem=kw.element.find('#PBbigSshDiv_'+replayToken)[0];setTimeout(function(){pushPlaybackInterval(1000,function(){var rs=viewModel.selectedSession().remoteSessionState();if(rs==RemoteSessionStateENUM.PLAYING||rs==RemoteSessionStateENUM.PLAYING_DOUBLE||rs==RemoteSessionStateENUM.PLAYING_HALF||rs==RemoteSessionStateENUM.CLOSING){var deserializedSSHText;var sshTextURL='/eEye.RetinaCS.Server/api/PMM/ReplaySessionSSHText?token='+replayToken+'&screen=1&protocol=SSH&scrollback=1';var top=$(sshElem).scrollTop();var left=$(sshElem).scrollLeft();$.get(sshTextURL,function(data){if(data.toLowerCase().indexOf(',"duration":0,')==-1){sshElem.innerHTML=data;sshElem.scrollTop=top;sshElem.scrollLeft=left;}else{for(var i=0;i<replayDurationIntervals.length;i++){if(replayDurationIntervals[i][1]===originalToken){clearInterval(replayDurationIntervals[i][0]);}}}});}},originalToken+'_SSH');},1000)}
- var hide=function(){if(rWindowData!=undefined){rWindowData.close();}};var afterHide=function(){};var resize=function(){resizeSessionMonitoringGrid();};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};var pushPlaybackInterval=function(duration,pushFunction,intervalId){replayDurationIntervals.push([setInterval(function(){pushFunction();},duration),intervalId]);}
- function bytesToSize(bytes){if(bytes==0)return'0';var k=1000;var i=Math.floor(Math.log(bytes)/Math.log(k));if(bytes<k){return(bytes/k).toPrecision(3);}else{return(bytes/Math.pow(k,i)).toPrecision(5);}}
- function archiveStatuses(theStatus){var archiveStatusList=[1,2,3,4,5];if(archiveStatusList.indexOf(theStatus)!=-1){return true;}else{return false;}};function refreshPlaybackGrid(){isGridRefresh=true;var $viewRootR=$(".view.view-session-monitoring");var grid=$viewRootR.find(".session-monitoring-grid").data("kendoGrid");var expandedRows=$.map(grid.tbody.children(":has(> .k-hierarchy-cell .k-minus)"),function(row){var dataItem=grid.dataItem(row);return dataItem.Token;});var expanded=false;selected=$.map(grid.tbody.children(".k-state-selected:first"),function(row){expanded=$(row).find(".k-minus").length>0;var dataItem=grid.dataItem(row);return dataItem.Token;});selectedRow[0]=[selected,expanded];grid.dataSource.read().then(function(){if(selected!=null&&selected.length){var r=grid.tbody.children().filter(function(idx,row){var dataItem=grid.dataItem(row);return dataItem.Token==selectedRow[0][0];});grid.select(r);grid.expandRow(r);}}).done(function(){selected[0]=0;selected.length=0;selectedRow[0]=0;selectedRow.length=0;isGridRefresh=false;});}</script>
- <script id="tmpl-Node" type="text/x-kendo-template">
- # if (IsLocal == false) { #
- <a href="\#" class="infoIcon" data-selector="true" data-container="body" title="Node Information" data-toggle="popover"></a>
- #} #
- <span>#= AgentName #</span>
- </script>
- <div class="header-container">
- <h4>Recorded RDP/SSH Sessions</h4>
- <!--========== START JS template for Replay Grid's inline area START ==============================-->
- <script id="replay-detail-template" type="text/x-kendo-template">
- <div class="session-expanded self_clear">
- # if (IsLocal) { #
- <div class="self_clear">
- <div class="first">
- #if (Protocol == 'RDP') {#
- <img onerror="if (this.src != '../images/rdp-placeholder.jpg?whwwi') this.src = '../images/rdp-placeholder.jpg?shwiwwwh';" src="../images/rdp-placeholder.jpg?whqawi" id="replay_placeholder_img_#=Token#" class="replay_placeholder_img_#=Token#" style="width:147px; height:125px;" />
- #} else {#
- <img onerror="if (this.src != '../images/ssh_placeholder.jpeg') this.src = '../images/ssh_placeholder.jpeg';" src="../images/ssh_placeholder.jpeg" id="replay_placeholder_img_#=Token#" class="replay_placeholder_img_#=Token#" style="width:137px; height:125px;" />
- #}#
- </div>
- <div class="second">
- <span>AssetName: <b>#=AssetName#</b></span><br />
- <span>Requestor: <b>#=UserName#</b></span><br />
- Duration:<b><span id="placeholder_time_#=Token#" class="placeholder_time_#=Token#">#= getHumanReadableTime(Duration) #</span></b><br />
- <span>Resolution: <b>#=Resolution#</b></span><br />
- #if (ArchiveStatus == 0) {#
- <button class="btn btn-open-rdp-session" data-toggle="dropdown" data-bind="click: parent().parent().OnExpand"><i class="icon-eject icon-white"></i> Open</button>
- #} else {#
- #if (ArchiveStatus == 1 || ArchiveStatus == 4 || ArchiveStatus == 5 || ArchiveStatus == 6) {#
- <button class="btn btn-unarchive-session" data-toggle="dropdown"><i class="icon-share icon-white"></i> Restore Session</button>
- # } #
- #}#
- </div>
- <div class="last">
- <textarea readonly="readonly">#= ReviewHistoryComments #</textarea>
- </div>
- </div>
- #if (ArchiveStatus == 2) {#
- <div class="archiveStatusMsg msg-restoring-session alert">A request has been made to restore the session.</div>
- #}#
- #if (ArchiveStatus == 3) {#
- <div class="archiveStatusMsg msg-archiving-session alert">Session is being archived...</div>
- #}#
- #if (ArchiveStatus == 4) {#
- <div class="archiveStatusMsg msg-archive-notfound-session alert-error">Could not retrieve session. File not found on repository, contact the administrator, or try again.</div>
- #}#
- #if (ArchiveStatus == 5) {#
- <div class="archiveStatusMsg msg-archive-offline-session alert-error">Could not retrieve session. Repository is offline, contact the administrator, or try again.</div>
- #}#
- #if (ArchiveStatus == 6) {#
- <div class="archiveStatusMsg msg-archive-unknown-session alert-error">Could not retrieve session. Unknown error from repository, contact the administrator, or try again.</div>
- #}#
- # } else { #
- <div class="self_clear">
- <div class="first">
- #if (Protocol == 'RDP') {#
- <img onerror="if (this.src != '../images/rdp-placeholder.jpg?whwwi') this.src = '../images/rdp-placeholder.jpg?shwiwwwh';" src="../images/rdp-placeholder.jpg?whqawi" id="replay_placeholder_img_#=Token#" class="replay_placeholder_img_#=Token#" style="width:147px; height:125px;" />
- #} else {#
- <img onerror="if (this.src != '../images/ssh_placeholder.jpeg') this.src = '../images/ssh_placeholder.jpeg';" src="../images/ssh_placeholder.jpeg" id="replay_placeholder_img_#=Token#" class="replay_placeholder_img_#=Token#" style="width:137px; height:125px;" />
- #}#
- </div>
- <div class="second">
- <span>AssetName: <b>#=AssetName#</b></span><br />
- <span>Requestor: <b>#=UserName#</b></span><br />
- Duration:<b><span id="placeholder_time_#=Token#" class="placeholder_time_#=Token#">#= getHumanReadableTime(Duration) #</span></b><br />
- <span>Resolution: <b>#=Resolution#</b></span><br />
- <div class="alert alert-info">
- <div class="child">This session was created on a remote node, and can only be viewed from that node.</div>
- </div>
- </div>
- <div class="last">
- <textarea readonly="readonly">#= ReviewHistoryComments #</textarea>
- </div>
- </div>
- # } #
- </div>
- </script>
- <!--========== END JS template for Replay Grid's inline area END ==================================-->
- <div class="filter-bar pull-left" style="width:150px !important;">
- <form class="form-inline form-filter">
- <div class="pull-left filter-request-status">
- <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: filterModel().buttons">
- <button class="btn" data-bind="text: name, css: {active: selected}, enable: $parent.sessionsLoaded, click: $parent.toggleProtocolFilter"></button>
- </div>
- </div>
- </form>
- </div>
- <!--==================== Search UI ==================================================-->
- <div class="filter-bar pull-right">
- <form class="form-inline form-filter">
- <div class="pull-right">
- <label id="lblKsSearch" for="chkKsSearch" title="Search sessions by keystroke">
- <input id="chkKsSearch" type="checkbox" title="Search sessions by keystroke" data-bind="checked: filterModel().isKeystrokeSearch" class="checkbox kssearch">
- <span data-bind="css: { checked: (filterModel().isKeystrokeSearch() == true) } ">Search by keystroke</span>
- </label>
- <input class="filter-system" style="display:none;" type="text" data-bind="visible: !filterModel().isKeystrokeSearch(), value: filterModel().system, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
- <input class="filter-keystroke" style="display:none;" type="text" data-bind="visible: filterModel().isKeystrokeSearch(), value: filterModel().keystrokeCommand, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
- <button class="btn btn-mini btn-primary btn-filter" type="submit" data-bind="enable: sessionsLoaded, click: applyFilter">Search</button>
- <!-- , click: applyFilter-->
- <button class="btn btn-mini btn-clear-filter" type="button" data-bind="enable: sessionsLoaded">Reset</button>
- <button class="btn btn-mini btn-refresh" type="button" onclick="refreshPlaybackGrid();">Refresh</button>
- </div>
- </form>
- </div>
- </div>
- <div style="display:none;" class="sessionWindow self_clear" data-bind="with:selectedSession()">
- <div class="leftpane self_clear">
- <div class="inner">
- <div id="sessionBody">
- <div class="inner-content">
- <div class="scaleme" style="position: relative; height: 0; padding-bottom: 73%;" data-bind="visible: (protocol().name == 'SSH')"><textarea class="sessionSSHDiv" readonly="readonly" data-bind="attr: {'id': 'PBbigSshDiv_' + replayToken()}, visible: (protocol().name == 'SSH')">...</textarea></div>
- <img onerror="if (this.src != '../images/rdp-placeholder-lg.jpg?whw') this.src = '../images/rdp-placeholder-lg.jpg?shwi';" data-bind="attr: {'id': 'PBbigOne_' + replayToken()}, visible: (protocol().name == 'RDP')" src="../images/rdp-placeholder-lg.jpg?whwiwh" />
- <div id="alertparent" data-bind="fadeIn: showReplayStatus, stopAnimation: stickyStatus">
- <div class="session-playback-status alert" data-bind="css: replayStatus">
- <div class="child" data-bind="text: replayStatusMessage"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="sessionFooter" class="self_clear">
- <div id="progressContainer" class="self_clear">
- <div id="progressWrap" class="self_clear">
- <div id="progress" class="progress-bar waiting"></div>
- </div>
- </div>
- <div class="durationTimer" data-bind="attr: {'id': 'progress_' + replayToken()}, visible: true"><span id="elapsed">00h:00m:00s</span> / <span class="plTotalDuration">00h:00m:00s</span></div>
- <div id="playerControls" class="replay">
- <div class="buttons">
- <button class="btn btn-play-session" title="Start the playback" data-bind="visible: archiveStatus() == 0 && remoteSessionState() != RemoteSessionStateENUM.PLAYING && remoteSessionState() != RemoteSessionStateENUM.PLAYING_DOUBLE && remoteSessionState() != RemoteSessionStateENUM.PLAYING_HALF, enable: (remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING) && remoteSessionState() != RemoteSessionStateENUM.PLAYING"><i class="icon-play icon-white"></i> Play </button>
- <button class="btn btn-pause-session" title="Pause the playback" data-bind="visible: archiveStatus() == 0 && remoteSessionState() != RemoteSessionStateENUM.INITIALIZED && remoteSessionState() != RemoteSessionStateENUM.PAUSED && remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING, enable: remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING && remoteSessionState() != RemoteSessionStateENUM.INITIALIZED && remoteSessionState() != RemoteSessionStateENUM.PAUSED"><i class="icon-pause icon-white"></i> Pause</button>
- <button class="btn btn-restart-session" title="Restart the playback" data-bind="visible: archiveStatus() == 0, enable: remoteSessionState() != RemoteSessionStateENUM.INITIALIZED"><i class="icon-repeat icon-white"></i> Restart</button>
- <button class="btn btn-next-action-session" title="Jump to the next action" data-bind="visible: archiveStatus() == 0, click: nextAction, enable: remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING && inEditMode() == true"><i class="icon-step-forward icon-white"></i> Next Action</button>
- <button class="btn btn-archive-session" title="Set playback to be archived" data-toggle="dropdown" data-bind="visible: archiveStatus() == 0 && self.SessionArchivingSupported, enable: (remoteSessionState() == RemoteSessionStateENUM.CLOSED || remoteSessionState() == RemoteSessionStateENUM.CLOSING || remoteSessionState() == RemoteSessionStateENUM.INITIALIZED)"><i class="icon-share icon-white"></i> Archive Session</button>
- <button class="btn btn-unarchive-session" title="Restore the archived playback" data-toggle="dropdown" data-bind="visible: archiveStatus() == 1 || archiveStatus() == 4 || archiveStatus() == 5 || archiveStatus() == 6, click: unarchiveSession"><i class="icon-share icon-white"></i> Restore Session</button>
- <button class="btn btn-export-frame" data-bind="visible: archiveStatus() == 0, enable: ($parent.frameExportSupported() && remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING) && inEditMode() == true, attr: { title: $parent.frameExportSupported() ? 'Export current frame as JPEG' : 'Your browser does not support this feature'}" data-toggle="dropdown"><i class="icon-camera icon-white"></i> Snapshot</button>
- <select id="slSpeed" title="Set the playback speed" class="input-small speed"
- data-bind="value: selectedPlaybackSpeed,
- options: playbackSpeeds,
- optionsValue: 'speed',
- optionsText: 'name',
- optionsCaption: 'Speed',
- optionsAfterRender: setOptionTitle,
- visible: archiveStatus() == 0,
- enable: (remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING) && inEditMode() == true"></select>
- <div class="archiveStatusMsg msg-restoring-session" data-bind="css: replayStatus, text: 'A request has been made to restore the session', visible: archiveStatus() == 2"></div>
- <div class="archiveStatusMsgError msg-archiving-session" data-bind="css: replayStatus, text: 'Session is being archived...', visible: archiveStatus() == 3"></div>
- <div class="archiveStatusMsgError msg-archive-notfound-session" data-bind="css: replayStatus, text: 'Could not retrieve session. File not found on repository, contact the administrator, or try again', visible: archiveStatus() == 4"></div>
- <div class="archiveStatusMsgError msg-archive-offline-session" data-bind="css: replayStatus, text: 'Could not retrieve session. Repository is offline, contact the administrator, or try again.', visible: archiveStatus() == 5"></div>
- <div class="archiveStatusMsgError msg-archive-unknown-session" data-bind="css: replayStatus, text: 'Could not retrieve session. Unknown error from repository, contact the administrator, or try again', visible: archiveStatus() == 6"></div>
- </div>
- <div id="editable" class="self_clear">
- <textarea id="txtNotes" data-optional="true" placeholder="Add comment(s)" data-bind="value: reviewNotes, enable: inEditMode"></textarea><br>
- <div class="right">
- <label class="checkbox">
- <input id="chkReviewed" title="Mark playback as reviewed or not reviewed" type="checkbox" value="false" disabled="disabled" data-bind="checked: isReviewed, enable: inEditMode" /><span>Mark as Reviewed</span>
- </label>
- <button class="btn btn-save-review-state" title="Save changes and close the window" disabled="disabled" value="save" data-bind="enable: inEditMode">Save & Close</button>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="rightpane self_clear">
- <div class="inner">
- <div class="content">
- <table id="keystrokes" role="treegrid" data-role="selectable" class="selectable" style="margin: 0 auto;">
- <thead>
- <tr>
- <th>KeystrokeID</th>
- <th>TimeMarker</th>
- <th><a href="#">Sorted: oldest to newest</a></th>
- </tr>
- </thead>
- <tbody></tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- <div id="replayContent" class="session-monitoring-grid" data-model="replayGridSourceModel" data-bind="source: sessionsSource, events: {detailCollapse: dtCollapse, detailExpand: dtExpand, change: changeEvent, dataBound: OnDataBound }"></div>
- </div>
- </div> <!-- Views -->
- </div> <!-- Page -->
- <!--NEW Active section START-->
- <!-- Page: Active Sessions -->
- <div class="page page-active-sessions" data-route="active" data-default-view-route="list">
- <script type="text/javascript">var page_active_sessions=function(){var CHANNEL_PAGE="Channel.Page.Active";var PAGE_ROOT_CLASS="page-active-sessions";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_APPROVER,ROLE_REQUESTOR_APPROVER,ROLE_ISA,ROLE_ACTIVE_SESSION_REVIEWER];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles};};</script>
- <div class="views">
- <!-- View: Grid of ACTIVE RDP/SSH Sessions. -->
- <div class="view view-active-sessions" data-route="list">
- <script type="text/javascript">
- var isGridRefresh=false;var selectedRow=[[,]];var view_active_sessions=function(){var viewName="view-active-sessions";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-active-sessions");var viewModel;var _params=null;var $grid=null;var activeSessionsGridSourceModel=null;var asWindow=$viewRoot.find(".sessionWindow");var asWindowData;var theUrl="";var deserializedHearbeat;var hearbeatTotalSec;var hearbeatURL;function getKendoGrid(){return $(".view.view-active-sessions").find(".active-sessions-grid").data("kendoGrid");}
- var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;initializeActiveSessionsGrid();viewModel=new SessionMonitoringViewModel(RemoteSessionTypeENUM.ACTIVE);viewModel.filterModel().selectButton(viewModel.filterModel().buttons()[1]);ko.applyBindings(viewModel,$viewRoot[0]);$viewRoot.find(".form-filter .btn-clear-filter").click(function(e){e.preventDefault();var newUrl=window.location.href.substring(0,window.location.href.indexOf("/status="));newUrl+="/status=All&reset=true";window.location.href=newUrl;return false;});var onClose=function(){var gData=getKendoGrid();var sRow=gData.dataItem(gData.select());var ogTkn=viewModel.selectedSession().token();clearActiveSessionInterval('large_content');if(viewModel.selectedSession().protocol().name=='RDP'){$('#bigOne_'+ogTkn).attr("src",'../images/rdp-placeholder-lg.jpg');}else{$('#bigSshDiv_'+ogTkn).html('...');}
- clearActiveSessionInterval('ks_heartbeat');viewModel.selectedSession().showOutputKeystrokes(false);viewModel.selectedSession().selectedKeystroke(null);$(this.element).find("#keystrokes").DataTable().destroy();}
- asWindow.kendoWindow({width:"55%",minWidth:818,title:"Session View Placeholder text",content:"",close:onClose,actions:["Maximize","Close"],visible:false,modal:true});asWindowData=asWindow.data("kendoWindow");$.widget.bridge('uitooltip',$.ui.tooltip);$viewRoot.on('click',function(e){if($(e.target).data('toggle')!=='popover'&&$(e.target).parents('.popover.in').length===0||$(e.target).is('.close')){hideGridPopovers($viewRoot);}});$(document).on('click','.btn-terminate-cancel-session',function(){var g=getKendoGrid();var di=g.dataItem(g.select());var r=g.tbody.find("tr[data-uid='"+di.uid+"']");if(r){r=r.next('.k-detail-row');}
- terminateAndCancel(r,viewModel.selectedSession().token(),viewModel.selectedSession().releaseRequestId());});$(document).on('click','.btn-terminate-session',function(){var g=getKendoGrid();var di=g.dataItem(g.select());var r=g.tbody.find("tr[data-uid='"+di.uid+"']");if(r){r=r.next('.k-detail-row');}
- terminateSession(r,viewModel.selectedSession().token());});$(document).on('click','.btn-session_lock',function(){$.when(viewModel.selectedSession().lock()).then(function(){var gData=getKendoGrid();var sRow=gData.dataItem(gData.select());sRow.Status=5;}).fail();});$(document).on('click','.btn-session_unlock',function(){$.when(viewModel.selectedSession().unlock()).then(function(){var gData=getKendoGrid();var sRow=gData.dataItem(gData.select());sRow.Status=1;}).fail();});_isInitialized=true;};var initializeActiveSessionsGrid=function(){$grid=$viewRoot.find(".active-sessions-grid");$grid.kendoGrid({resizable:true,selectable:"row",height:550,pageable:true,groupable:false,sortable:{mode:"multiple",allowUnsort:true},reorderable:true,columnMenu:false,detailTemplate:kendo.template($("#session-detail-template").html()),detailInit:function(e){kendo.bind(e.detailRow,e.data);},filterable:{extra:false,operators:{string:{contains:"Contains",startswith:"Starts with",eq:"Is equal to",neq:"Is not equal to"}}},columns:[{field:"StartDate",format:"{0:g}",title:"Created Date",filterable:{ui:"datetimepicker",extra:true}},{field:"AssetName",title:"System",filterable:{cell:{showOperators:true}}},{field:"AgentName",title:"Node",template:$("#tmpl-Node").html(),filterable:{cell:{showOperators:true}},hidden:!_sessionUserViewModel.IsActiveActive()},{field:"Alias",title:"Application",filterable:{cell:{showOperators:true}},hidden:true},{field:"DomainName",title:"Directory",filterable:{cell:{showOperators:true}}},{field:"ManagedAccountName",title:"Account",filterable:{cell:{showOperators:true}}},{field:"ReleaseRequestComment",title:"Reason",filterable:{cell:{showOperators:true}}},{field:"UserName",title:"Requestor",filterable:{cell:{showOperators:true}}},{field:"Protocol",title:"Protocol",filterable:{cell:{showOperators:true}}},{field:"SessionStartTime",width:120,format:"{0:g}",title:"Session Started",filterable:{ui:"datetimepicker",extra:true},hidden:true},{field:"SessionEndTime",width:120,format:"{0:g}",title:"Session Ended",filterable:{ui:"datetimepicker",extra:true},hidden:true},{field:"Duration",title:"Duration (sec.)",filterable:{cell:{showOperators:true}}},{field:"Filesize",template:"#= Math.round((Filesize/1024)*100)/100 #",title:"Size (KB)",filterable:{cell:{showOperators:true}}},{field:"Token",width:120,title:"Token",filterable:{cell:{showOperators:true}},hidden:true},{field:"Protocol",width:120,title:"Protocol",filterable:{cell:{showOperators:true}},hidden:true},{field:"ReleaseRequestID",width:120,title:"ReleaseRequestID",filterable:{cell:{showOperators:true}},hidden:true},{field:"Resolution",width:120,title:"Resolution",filterable:{cell:{showOperators:true}},hidden:true}]});};var onRequestStart=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",true);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(false);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(false);};var onRequestEnd=function(e){$viewRoot.find(".form-filter").find('input, textarea, button, select, a').attr("disabled",false);if($viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-from:input[data-role]").data("kendoDatePicker").enable(true);if($viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").length>0)
- $viewRoot.find(".form-filter").find(".filter-date-to:input[data-role]").data("kendoDatePicker").enable(true);};var resizeActiveSessionsGrid=function(){};var beforeShow=function(params){_params=params;globalIsInitialized=true;};var preprocessSeconds=function(data){$.each(data.data,function(index,item){item.Duration=moment.duration(item.Duration,"seconds").humanize();});return data;};var show=function(){viewModel.resetSelectedSession();if(_params==null){window.location.href+="/status=All";return;}
- if(_params["status"]){for(var i=0;i<viewModel.filterModel().buttons().length;i++){if(viewModel.filterModel().buttons()[i].name.toLowerCase()==_params["status"].toLowerCase()){viewModel.filterModel().selectButton(viewModel.filterModel().buttons()[i]);break;}}}
- if(_params["system"]){viewModel.filterModel().system(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{viewModel.filterModel().system("");}
- if(_params["keystrokeCommand"]){viewModel.filterModel().keystrokeCommand(_params["keystrokeCommand"]);$viewRoot.find(".filter-keystroke").val(_params["keystrokeCommand"]);}else{viewModel.filterModel().keystrokeCommand("");viewModel.filterModel().isKeystrokeSearch(false);}
- if(_params["start"]){viewModel.filterModel().start(parseDatesForIE8(_params["start"]));}else{viewModel.filterModel().start("");}
- if(_params["end"]){viewModel.filterModel().end(parseDatesForIE8(_params["end"]));}else{viewModel.filterModel().end("");}
- var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
- var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
- resizeActiveSessionsGrid();var gridDataSource=new kendo.data.DataSource({requestStart:onRequestStart,requestEnd:onRequestEnd,serverPaging:true,serverSorting:true,serverFiltering:true,pageSize:12,transport:{read:{url:"/eEye.RetinaCS.Server/api/PMM/GetMonitoredSessions",cache:false,dataType:"json",type:"POST",contentType:"application/json; charset=utf-8",data:{sessionType:viewModel.filterModel().selectedButton().name,systemName:viewModel.filterModel().system(),isKeystrokeSearch:viewModel.filterModel().isKeystrokeSearch(),keystrokeCommand:viewModel.filterModel().keystrokeCommand(),keystrokeType:1,startDate:startDate,endDate:endDate,gridType:'Active'}},parameterMap:function(data){var newdata=$.extend({},data,{filter:data.filter,sort:data.sort});return JSON.stringify(newdata);}},schema:{model:{id:"RequestId",fields:{StartDate:{type:"date"},RequestId:{type:"number"},RequestorName:{type:"string"},SystemName:{type:"string"},AccountName:{type:"string"},RequestReleaseDate:{type:"date"},ApprovedDate:{type:"date"},CanceledDate:{type:"date"},ExpiresDate:{type:"date"},Duration:{type:"string"},Filesize:{type:"string"},SessionStartTime:{type:"date"},SessionEndTime:{type:"date"},Token:{type:"string"},Protocol:{type:"string"},ReleaseRequestID:{type:"string"},Resolution:{type:"string"},AgentName:{type:"string"},IsLocal:{type:"boolean"}}},data:"data",total:"total",},error:function(e){showApplicationError(e.xhr);}});$grid.data("kendoGrid").bind("filterMenuInit",function(e){if(e.field=="Filesize"){e.container.find("div.k-filter-help-text").text("Select a file size range from the list:");e.container.find("span.k-dropdown:first").css("display","none");e.container.find(".k-textbox:first").removeClass("k-textbox").kendoDropDownList({dataSource:new kendo.data.DataSource({data:[{name:"Select an option below",id:0},{name:"Extra Small (0 - 10 KB)",id:2},{name:"Small (10 - 100 KB)",id:3},{name:"Medium (100 KB - 1 MB)",id:4},{name:"Large (1 - 6 MB)",id:5},{name:"Extra Large (6 - 128 MB)",id:6},{name:"Gigantic (> 128 MB)",id:7}]}),dataTextField:"name",dataValueField:"id"});}
- if(e.field=="Duration"){e.container.find("div.k-filter-help-text").text("Select a duration from the list:");e.container.find("span.k-dropdown:first").css("display","none");e.container.find(".k-textbox:first").removeClass("k-textbox").kendoDropDownList({dataSource:new kendo.data.DataSource({data:[{name:"Select an option below",id:0},{name:"Less than a minute (0 - 59 sec)",id:1},{name:"1 - 10 minutes (60 - 599 sec)",id:2},{name:"10 - 30 minutes (600 - 1799 sec)",id:3},{name:"30 minutes to an hour (1800 - 3599 sec)",id:4},{name:"1 hour to 2 hours (3600 - 7199 sec)",id:5},{name:"More than 2 hours (> 7200 sec)",id:6}]}),dataTextField:"name",dataValueField:"id"});}});if(_params["reset"]){gridDataSource._filter=null;}
- activeSessionsGridSourceModel=kendo.observable({sessionsSource:gridDataSource,OnDataBound:function(e){var headerObj=$grid.find(".k-grid-header-wrap table");var gridObj=$grid.find(".k-grid-content table");var grid=e.sender;var gridObjStyle=gridObj.attr('style');if(gridObjStyle){headerObj.attr('style',gridObjStyle);}
- addExtraStylingToGrid("active-sessions-grid");if(_sessionUserViewModel.IsActiveActive()){grid.showColumn("AgentName");}else{grid.hideColumn("AgentName");}
- gridNoDataMsgDisplay(e);initNodePopovers($grid);},OnExpand:expandThumbnail,changeEvent:OnGridRowChange,dtExpand:onDetailExpand,dtCollapse:onDetailCollapse,lock:function(e){sessionLock(e,this,true);},unlock:function(e){sessionLock(e,this,false);},terminate:function(e){var btn=$(e.currentTarget);var r=$(btn).closest('tr');terminateSession(r,this.Token);},terminateCancel:function(e){var btn=$(e.currentTarget);var r=$(btn).closest('tr');terminateAndCancel(r,this.Token,this.ReleaseRequestID);},});var initNodePopovers=function(grid){$('.popover').remove();grid.find("a.infoIcon").data('popover',null).popover({trigger:"manual",title:"Session Not Available",template:'<div class="popover node"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>',html:true,content:function(e){var content="<div class='node'>"+"<div><div class='popup-label'></div><div class='popup-value'>This session was created on a remote node, and can only be viewed from that node.</div></div>"+"</div>";return content;},animation:false,}).click(function(e){e.preventDefault();if(e.target!==this)
- return;e.stopPropagation();grid.find('a.infoIcon').not(this).popover('hide');var popover=$(this).data('popover');if($('.popover').is(":visible")){closeGridPopover(popover);return false;}
- grid.find('a.infoIcon').not(this).removeClass('active');grid.find('a.infoIcon').not(this).parents('tr').removeClass('k-state-selected');$(this).addClass('active');$(this).parents('tr').addClass('k-state-selected');$(this).popover('toggle');return false;}).on('shown',function(e){e.stopPropagation();var popover=$(this).data('popover'),$tip=popover.tip();var close=$('<button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>').click(function(){closeGridPopover(popover);});$('.popover-title',$tip).append(close);});}
- kendo.bind($viewRoot.find("#activeContent"),activeSessionsGridSourceModel);function OnGridRowChange(eventArgs){var gridData=eventArgs.sender;var currentDataItem=gridData.dataItem(gridData.select());var uid=currentDataItem.uid;if(uid!=viewModel.selectedUid()){rowChange(gridData,null,null);}else{toggleRow(gridData);}
- viewModel.selectedUid(currentDataItem.uid);}
- function applySelectedState(masterRow){$(masterRow).addClass("k-state-selected");};function removeSelectedState(grid){$(grid)[0].table.find(".k-state-selected").removeClass("k-state-selected");};function onDetailExpand(e){var curDI=e.sender.dataItem(e.masterRow);var m=generateSessionModel(curDI);viewModel.selectedSession(m);removeSelectedState(e.sender);applySelectedState(e.masterRow[0]);if(curDI.IsLocal){initializeSessionHeartbeat(curDI.Token,curDI.Protocol,curDI.Status,m);}};function initializeSessionHeartbeat(token,protocol,status,sessionModel){if(protocol!='SSH'){var refreshId=0;pushSessionInterval(3000,function(){$('.placeholder_img_'+token).attr('src','/eEye.RetinaCS.Server/api/PMM/ActiveSessionThumbnail?token='+token+'&jpeg=7&protocol='+protocol+'×tamp='+new Date().getTime()+'&anticsrftoken='+_antiCSRFToken);if(sessionModel.remoteSessionState()==RemoteSessionStateENUM.CLOSED){clearActiveSessionInterval(token+'_thumb');}},token+'_thumb');}
- sessionHeartbeatCallback(token,status,sessionModel);}
- function sessionHeartbeatCallback(token,status,sessionModel){var refreshDuration=0;var locked=false;var elapsedTime=0;if(status==5){locked=true;}else{locked=false;};var getDurationURL='/eEye.RetinaCS.Server/api/PMM/ActiveSessionDuration?token='+token;pushSessionInterval(1000,function(){var theGet=$.get(getDurationURL,function(data){var deserializedData=jQuery.parseJSON(data);if(!sessionModel.sessionStartTimeInMS()&&deserializedData.start){sessionModel.sessionStartTimeInMS(deserializedData.start);}
- var result=getHumanReadableTime(Math.floor(deserializedData.duration));;if(deserializedData.active!=undefined&&deserializedData.active==0){sessionModel.remoteSessionState(RemoteSessionStateENUM.CLOSED);OnTerminatedUI(token,token==viewModel.selectedSession().token());clearActiveSessionInterval(token+'_heartbeat');}else{if(sessionModel.remoteSessionState()==RemoteSessionStateENUM.CLOSED){sessionModel.remoteSessionState(RemoteSessionStateENUM.PLAYING);}
- $('.placeholder_time_'+token).html(result);sessionModel.elapsedTime(deserializedData.duration);if(token==viewModel.selectedSession().token()){viewModel.selectedSession().elapsedTime(deserializedData.duration);}
- if(deserializedData.locked!=locked){locked=deserializedData.locked;if(locked==true){sessionModel.remoteSessionState(RemoteSessionStateENUM.LOCKED);OnUpdateLockUI(token,true,null);}else{sessionModel.remoteSessionState(RemoteSessionStateENUM.PLAYING);OnUpdateLockUI(token,false,null);}}}});theGet.fail(function(data){clearInterval(refreshDuration);});},token+'_heartbeat');}
- function onDetailCollapse(e){var curDI=e.sender.dataItem(e.masterRow);clearActiveSessionInterval(curDI.Token+'_heartbeat');if(curDI.Protocol!='SSH'){clearActiveSessionInterval(curDI.Token+'_thumb');}
- e.masterRow.removeClass("k-state-selected");};function expandThumbnail(e){var thetoken=this.Token;var newAssetName=this.AssetName;var theProtocol=this.Protocol;var thumbSize=1;newAssetName=newAssetName.replace(/'/g,"&\#39;");newAssetName=newAssetName.replace(/"/g,"&\#34;");if(thetoken!=viewModel.selectedSession().token()){viewModel.selectedSession(generateSessionModel(this));var g=getKendoGrid();var r=g.tbody.find("tr[data-uid='"+this.uid+"']");rowChange(g,r);}else if((thetoken==viewModel.selectedSession().token())&&(!asWindowData.element.is(":hidden"))){return;}
- cleanupIntervals().then(function(){initializeSession(newAssetName,thetoken,viewModel.selectedSession().protocol().name);});}};function cleanupIntervals(){var dfd=$.Deferred();$.when(clearActiveSessionInterval('large_content'),clearActiveSessionInterval('ks_heartbeat')).then(dfd.resolve());return dfd.promise();}
- function generateSessionModel(gridDataRow){return ko.validatedObservable(new MonitoredSessionViewModel(gridDataRow))();}
- var initializeSession=function(assetName,token,protocol){asWindowData.center().open();asWindowData.title(assetName+' | '+moment(viewModel.selectedSession().startDate(),"MM-DD-YYYY h:mm A").format("MM/DD/YYYY h:mm A"));initializeSessionKeystrokesUI()
- if(protocol=='RDP'){setSessionRDPImage(asWindowData,token);}else{setSessionSSHCommandText(asWindowData,token);}}
- var setSessionRDPImage=function(kw,token){var elem=kw.element.find('#bigOne_'+token)[0];setTimeout(function(){pushSessionInterval(1000,function(){elem.setAttribute("src",'/eEye.RetinaCS.Server/api/PMM/ActiveSessionThumbnail?token='+token+'&jpeg=1&protocol=RDP×tamp='+new Date().getTime()+'&anticsrftoken='+_antiCSRFToken);},'large_content');},1000)}
- var setSessionSSHCommandText=function(kw,token){var sshElem=kw.element.find('#bigSshDiv_'+token)[0];setTimeout(function(){pushSessionInterval(1000,function(){var deserializedSSHText;var sshTextURL='/eEye.RetinaCS.Server/api/PMM/ActiveSessionSSHText?token='+token+'&screen=1&protocol=SSH&scrollback=1';var top=$(sshElem).scrollTop();var left=$(sshElem).scrollLeft();$.get(sshTextURL,function(data){if(data.toLowerCase().indexOf(',"duration":0,')==-1){sshElem.innerHTML=data;sshElem.scrollTop=top;sshElem.scrollLeft=left;}else{for(var i=0;i<activeDurationIntervals.length;i++){if(activeDurationIntervals[i][1]===token){clearInterval(activeDurationIntervals[i][0]);}}}});},'large_content');},1000)}
- function getKeystrokeDisplayText(data,type,dataToSet,meta){var offset=0;offset=(data.TimeMarker-viewModel.selectedSession().sessionStartTimeInMS());var m=moment(data.TimeMarker);var s=m.format("M/D/YYYY H:mm:ss");var title=getHumanReadableTime(Math.round(offset/1000));return'<span id='+offset+' class="offset"><span class="kstime inactive">'+s+' - </span>'+data.Data+'</span>';}
- var initializeSessionKeystrokesUI=function(){clearDataTableCustomFilter();$.fn.dataTableExt.afnFiltering.push(function(oSettings,aData,iDataIndex){return filterFunc(oSettings.aoData[iDataIndex]._aData["Type"],viewModel.selectedSession().showOutputKeystrokes());});var filterFunc=function(kt,showingOutput){if(!showingOutput){return kt==2?false:true;}else{return true;}}
- var initializeDataTable=function(tableId,kendoWindowContext){var dt=kendoWindowContext.element.find(tableId).DataTable({destroy:true,mark:true,search:{search:viewModel.filterModel().keystrokeCommand()},ajax:{url:"/eEye.RetinaCS.Server/api/PMM/GetSessionKeystrokes?sessionId="+viewModel.selectedSession().sessionId()+"&reverseOrder=false",type:"POST",dataSrc:"keystrokes",error:function(){}},orderClasses:true,ordering:true,columns:[{data:"KeystrokeID"},{data:"TimeMarker"},{data:null,render:getKeystrokeDisplayText}],columnDefs:[{targets:[0],visible:false,searchable:false},{targets:[1],visible:false,searchable:false,},{targets:[2],iDataSort:1}],order:[[2,'asc']],rowId:'KeystrokeID',dom:'<"k-grid k-widget"<"toolbar self_clear">frt<"footer"ip>>',scrollY:"400px",scrollCollapse:true,paging:true,pagingType:"full",lengthChange:false,language:{search:"_INPUT_",searchPlaceholder:"Search Keystrokes...",emptyTable:"No recorded keystrokes",info:"_START_ to _END_ of _TOTAL_ items",infoEmpty:"0 to 0 of 0 items",infoFiltered:"",zeroRecords:"No keystrokes found",},preDrawCallback:function(settings){dtPreDrawCallback(this,settings,kendoWindowContext);},initComplete:function(settings,json){dtInitCompleted(kendoWindowContext,this);},rowCallback:function(row,data,index){dtRowCallback(viewModel.selectedSession().showOutputKeystrokes()==true,row,data,index);},drawCallback:function(settings){dtDrawCallback(kendoWindowContext,this,settings);}});}
- var dtDrawCallback=function(kendoWindowContext,dt,dtSettings){if(viewModel.selectedSession().selectedKeystroke()!=null){onKeyStrokeClick(dt.$("#"+viewModel.selectedSession().selectedKeystroke())[0]);}
- dt.$("tr").uitooltip({track:true,items:"td",show:{delay:450},content:function(){var ofs=$(this).find("span").attr("id");return getHumanReadableTime(Math.round(ofs/1000));;}});var show=kendoWindowContext.element.find("#chkDT").is(":checked");onTimestampCheckboxChange(show);}
- var dtInitCompleted=function(kendoWindowContext,dt){if(dt.api().rows().count()){}else{kendoWindowContext.element.find("#keystrokes_filter").hide();kendoWindowContext.element.find('.dataTables_scrollHead').hide();kendoWindowContext.element.find('.dataTables_info').hide();}
- setTimeout(function(){establishKeystrokeHeartbeat(dt);},2000);}
- var appendToolbarUIElements=function(kendoWindowContext){var elems='';if(viewModel.selectedSession().protocol().name=='SSH'){elems+='<label class="checkbox" style="float:left; margin-right:1em;" title=\'Toggle visibility of output\' "><input id="chkShowOutput" title=\'Toggle visibility of output\' type="checkbox" data-bind="checked:showOutputKeystrokes()">Show output</label>';}
- elems+='<label class="checkbox" style="float:left;" title="Toggle keystrokes timestamps"><input id="chkDT" title="Toggle keystrokes timestamps" type="checkbox">Show timestamp</label>';kendoWindowContext.element.find("div.toolbar").html('<div>'+elems+'</div>');ko.applyBindings(viewModel.selectedSession(),kendoWindowContext.element.find("div.toolbar")[0]);addDataTableCustomEventHandlers(kendoWindowContext);kendoWindowContext.element.find("#keystrokes_filter").prop("title","Start typing to search keystrokes");}
- var showHideToolbarTools=function(kendoWindowContext,show){kendoWindowContext.element.find("div.toolbar div").toggle();}
- var establishKeystrokeHeartbeat=function(dt){pushSessionInterval(3000,function(){destroyTooltips(dt);keystrokeHeartbeatCallback(dt);},'ks_heartbeat');}
- var keystrokeHeartbeatCallback=function(dt){if($.fn.DataTable.isDataTable(dt[0])){dt.DataTable().ajax.reload(null,false);}else{clearActiveSessionInterval('ks_heartbeat');}}
- var destroyTooltips=function(dt){$('.ui-tooltip').remove();dt.$("tr").each(function(index){$(this).removeData('tooltip');$(this).tooltip("destroy");})}
- var dtPreDrawCallback=function(dt,dtSettings,kendoWindowContext){var api=new $.fn.dataTable.Api(dtSettings);var pagination=$(dt).closest('.dataTables_wrapper').find('.dataTables_paginate');if(api.rows().count()&&!(kendoWindowContext.element.find("div.toolbar")[0].firstChild)){appendToolbarUIElements(kendoWindowContext);kendoWindowContext.element.find("#keystrokes_filter").show();kendoWindowContext.element.find('.dataTables_scrollHead').show();kendoWindowContext.element.find('.dataTables_info').show();}
- if(api.page.info().pages<=1){pagination.hide();}
- else{pagination.show();}}
- var dtRowCallback=function(showOutput,row,data,index){var isSelected=row.className.indexOf('k-state-selected')>-1;if(showOutput){row.className=(data.Type==2)?'output k-alt':'input';}else{row.className=index%2==0?'input':'input k-alt';}
- if(isSelected){row.className+=" k-state-selected";}}
- var addDataTableCustomEventHandlers=function(kendoWindowContext){kendoWindowContext.element.find('.dataTables_scrollHead th').on('click','a',function(e){e.preventDefault();})
- kendoWindowContext.element.find('.dataTables_scrollHead').on('click','th',function(e){var t=kendoWindowContext.element.find("#keystrokes");var o=t.DataTable().order();if(o[0][1]=="asc"){$('a',this).text("Sorted: oldest to newest").attr("title","Click to sort by newest to oldest");}else{$('a',this).text("Sorted: newest to oldest").attr("title","Click to sort by oldest to newest");}});kendoWindowContext.element.find('#keystrokes tbody').on('click','tr',function(){onKeyStrokeClick(this);});kendoWindowContext.element.find('#keystrokes tbody').on('mouseover','td:not(".dataTables_empty")',function(){onKeyStrokeHover(this.parentNode,true)}).on('mouseout','td:not(".dataTables_empty")',function(){onKeyStrokeHover(this.parentNode,false)});kendoWindowContext.element.find("#chkShowOutput").on("click",function(e){var show=$(this).is(":checked");onKeyStrokeCheckboxClick(show);});kendoWindowContext.element.find("#chkDT").on("change",function(e){var show=$(this).is(":checked");onTimestampCheckboxChange(show);});kendoWindowContext.element.find("#ksRefresh").on("click",function(e){e.preventDefault();var t=kendoWindowContext.element.find("#keystrokes");t.DataTable().ajax.reload(null,false);});}
- var onKeyStrokeHover=function(row,isHover){if(isHover){$(row).addClass("k-state-hover");}else{$(row).removeClass("k-state-hover");}}
- initializeDataTable('#keystrokes',asWindowData);}
- var onKeyStrokeCheckboxClick=function(show){var dt=asWindowData.element.find('#keystrokes').dataTable();if(show){viewModel.selectedSession().showOutputKeystrokes(true);}else{viewModel.selectedSession().showOutputKeystrokes(false);}
- dt.fnFilter('',0,true,false);}
- var onTimestampCheckboxChange=function(show){var dt=asWindowData.element.find('#keystrokes').dataTable();if(show){dt.$('span.kstime').removeClass("inactive");}else{dt.$('span.kstime').addClass("inactive");}}
- var toggleSelectedKeystroke=function(target){var dt=asWindowData.element.find('#keystrokes').dataTable();clearSelectedKeystroke(dt);$(target).addClass('k-state-selected');}
- var onKeyStrokeClick=function(row){viewModel.selectedSession().selectedKeystroke(row.id);toggleSelectedKeystroke(row);}
- var clearSelectedKeystroke=function(dt){if(dt==null){dt=asWindowData.element.find('#keystrokes').dataTable();}
- dt.$('tr.k-state-selected').removeClass('k-state-selected');}
- function OnTerminatedUI(token,closeKendoWindow){if(closeKendoWindow==true){asWindowData.close();}
- var btnLock=$('.btn-session_lock_'+token);var tr=btnLock.parents("tr");var btnUnLock=$(tr).find('.btn-session_unlock_'+token);var btnT=$(tr).find('.btn-terminate-session_'+token);var btnTC=$(tr).find('.btn-terminate-cancel-session_'+token);btnLock.prop('disabled',true);btnUnLock.prop('disabled',true);btnT.prop('disabled',true);if(btnTC)
- btnTC.prop('disabled',true);var thumb=$('.div-expand',tr);thumb.prop('disabled',true).off("click").addClass("disabled");var s=$(tr).find(".archiveStatusMsg.session");if(!s.is(":visible")){successCallback(s,"Session has ended.");}}
- function OnUpdateLockUI(token,state,tr){var btnLock=$('.btn-session_lock_'+token);var btnUnLock=$('.btn-session_unlock_'+token);btnLock.prop('disabled',false);btnUnLock.prop('disabled',false);if(tr==null||tr==undefined){tr=btnLock.parents("tr");}
- if(state){msg='Session has been locked.';btnLock.hide();btnUnLock.show();}else{msg='Session has been unlocked.';btnLock.show();btnUnLock.hide();}
- var s=$(tr).find(".archiveStatusMsg.session");successCallback(s,msg).delay(3000).fadeOut(1000);}
- function expandCollapseRow(curRow,gridData){var expanded=curRow.next().hasClass('k-detail-row');if(!isGridRefresh){if(!expanded||curRow.next().css('display')=="none"){gridData.expandRow(curRow);}else{var expandedRows=$('.k-detail-row:visible');if(!expandedRows.length){clearDurationIntervals(activeDurationIntervals,false);}}}else{if(selectedRow[0][0].length>0){if(selectedRow[0][1]){gridData.expandRow(curRow);}else{gridData.collapseRow(curRow);curRow.removeClass("k-state-selected");}}}};function rowChange(gridData,row){if(!row){row=gridData.select();}else{gridData.select(row);}
- if(asWindowData!=undefined){asWindowData.close();}
- expandCollapseRow(row,gridData);}
- function toggleRow(gridData){var curRow=gridData.select();var expanded=curRow.next().hasClass('k-detail-row');if(!expanded||curRow.next().css('display')=="none"){gridData.expandRow(curRow);}else{gridData.collapseRow(curRow);curRow.removeClass("k-state-selected");var expandedRows=$('.k-detail-row:visible');if(!expandedRows.length){clearDurationIntervals(activeDurationIntervals,false);}}}
- function sessionLock(e,row,state){var thetoken=row.Token;var btnLock=$('.btn-session_lock_'+thetoken);var btnUnLock=$('.btn-session_unlock_'+thetoken);var r=$(e.currentTarget).closest('tr');clearErrors(r.find(".archiveStatusMsg"));var lockColor='0x7FFF0000';hearbeatURL='/eEye.RetinaCS.Server/api/PMM/ActiveSessionDuration?token='+thetoken;$.get(hearbeatURL,function(data){deserializedHearbeat=jQuery.parseJSON(data);hearbeatTotalSec=deserializedHearbeat.duration;}).then(function(){if(hearbeatTotalSec!=0){btnLock.prop('disabled',true);btnUnLock.prop('disabled',true);if(state==true){theUrl="/eEye.RetinaCS.Server/api/PMM/LockActiveSession?token="+thetoken+"&lock=1&fg="+lockColor;}else{theUrl="/eEye.RetinaCS.Server/api/PMM/LockActiveSession?token="+thetoken+"&lock=0&fg=0";}
- locked=state;$.when(setLockedState(theUrl)).then(function(){row.Status=locked?5:1;}).fail(function(jqXhr,textStatus,errorThrown){errorCallback(r.find(".archiveStatusMsg.session"),jqXhr,textStatus,errorThrown);})}else{refreshSessionsGrid();}});}
- function clearActiveSessionInterval(token){var dfd=$.Deferred();var toRemove=[];var clear=function(){for(var i=activeDurationIntervals.length;i--;){if(activeDurationIntervals[i][1]===token){clearInterval(activeDurationIntervals[i][0]);toRemove.push(i);}}
- for(var j=toRemove.length;j--;){activeDurationIntervals.splice(toRemove[j],1);}
- dfd.resolve();}
- clear();return dfd.promise();}
- function setLockedState(url){return $.ajax({cache:false,url:url,type:"POST",dataType:"json"});}
- function cancelRequest(requestId){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/ExpireRequest",data:{requestId:requestId,comment:''},contentType:"application/json; charset=utf-8",dataType:"json"});}
- function sessionTerminate(token){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/TerminateActiveSession?token="+token,type:"POST",dataType:"json",contentType:"application/json; charset=utf-8"});}
- function terminateSessionsForRequest(requestId){return $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/TerminateActiveSessions?requestId="+requestId,data:{requestId:requestId},contentType:"application/json; charset=utf-8",type:"POST",dataType:"json"});}
- function terminateSession(row,token){asWindowData.close();clearErrors(row.find(".archiveStatusMsg"));var deserializedHearbeat;var hearbeatTotalSec;var hearbeatURL='/eEye.RetinaCS.Server/api/PMM/ActiveSessionDuration?token='+token;$.get(hearbeatURL,function(data){deserializedHearbeat=jQuery.parseJSON(data);hearbeatTotalSec=deserializedHearbeat.duration;}).then(function(){if(hearbeatTotalSec!=0){$.when(sessionTerminate(token)).then(function(){setTimeout(function(){refreshSessionsGrid();},3000);}).fail(function(jqXhr,textStatus,errorThrown){errorCallback(row.find(".archiveStatusMsg.session"),jqXhr,textStatus,errorThrown);})}else{refreshSessionsGrid();}})}
- function terminateAndCancel(row,thetoken,theRequestId){asWindowData.close();clearErrors(row.find(".archiveStatusMsg"));var deserializedHearbeat;var hearbeatTotalSec;var hearbeatURL='/eEye.RetinaCS.Server/api/PMM/ActiveSessionDuration?token='+thetoken;$.get(hearbeatURL,function(data){deserializedHearbeat=jQuery.parseJSON(data);hearbeatTotalSec=deserializedHearbeat.duration;}).then(function(){if(hearbeatTotalSec!=0){$.when(cancelRequest(theRequestId)).then(function(){successCallback(row.find(".archiveStatusMsg.request"),"Request canceled.").delay(3000).fadeOut(1000);}).fail(function(jqXhr,textStatus,errorThrown){errorCallback(row.find(".archiveStatusMsg.request"),jqXhr,textStatus,errorThrown);})
- $.when(terminateSessionsForRequest(theRequestId)).then(function(){successCallback(row.find(".archiveStatusMsg.session"),"All sessions terminated for the cancelled request. Refreshing the data.");setTimeout(function(){refreshSessionsGrid();},3000);}).fail(function(jqXhr,textStatus,errorThrown){errorCallback(row.find(".archiveStatusMsg.session"),jqXhr,textStatus,errorThrown);})}else{refreshSessionsGrid();}})}
- function clearErrors(messageContainer){$(messageContainer).removeClass("alert-error").hide();}
- function successCallback(messageContainer,message){return $(messageContainer).removeClass("alert-error").addClass("alert-success").text(message).fadeIn(200);}
- function errorCallback(messageContainer,jqXhr,textStatus,errorThrown){if(jqXhr.status==502){return;}
- var ex=parseAjaxError(jqXhr);if(ex!=null){$(messageContainer).addClass("alert-error").text(ex.Message).fadeIn(200);}
- else showApplicationError(jqXhr);}
- var hide=function(){if(asWindowData!=undefined){asWindowData.close();}};var afterHide=function(){};var resize=function(){resizeActiveSessionsGrid();};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};var pushSessionInterval=function(duration,pushFunction,intervalId){activeDurationIntervals.push([setInterval(function(){pushFunction();},duration),intervalId]);}
- function bytesToSize(bytes){if(bytes==0)return'0';var k=1000;var i=Math.floor(Math.log(bytes)/Math.log(k));if(bytes<k){return(bytes/k).toPrecision(3);}else{return(bytes/Math.pow(k,i)).toPrecision(5);}}
- function refreshSessionsGrid(){isGridRefresh=true;clearDurationIntervals(activeDurationIntervals,true);var $viewRootR=$(".view.view-active-sessions");var grid=$viewRootR.find(".active-sessions-grid").data("kendoGrid");var expandedRows=$.map(grid.tbody.children(":has(> .k-hierarchy-cell .k-minus)"),function(row){var dataItem=grid.dataItem(row);return dataItem.Token;});var expanded=false;selected=$.map(grid.tbody.children(".k-state-selected:first"),function(row){expanded=$(row).find(".k-minus").length>0;var dataItem=grid.dataItem(row);return dataItem.Token;});selectedRow[0]=[selected,expanded];grid.dataSource.read().then(function(){if(selected!=null&&selected.length){var r=grid.tbody.children().filter(function(idx,row){var dataItem=grid.dataItem(row);return dataItem.Token==selectedRow[0][0];});grid.select(r);grid.expandRow(r);}}).done(function(){selected[0]=0;selected.length=0;selectedRow[0]=0;selectedRow.length=0;isGridRefresh=false;});}</script>
- <script id="tmpl-Node" type="text/x-kendo-template">
- # if (IsLocal == false) { #
- <a href="\#" class="infoIcon" data-selector="true" data-container="body" title="Node Information" data-toggle="popover"></a>
- #} #
- <span>#= AgentName #</span>
- </script>
- <div class="header-container">
- <h4>Active Sessions</h4>
- <!--========== START JS template for Grid's inline area START ==============================-->
- <script id="session-detail-template" type="text/x-kendo-template">
- <div class="session-expanded self_clear">
- # if (IsLocal) { #
- <div class="self_clear">
- <div class="first">
- <img src="/eEye.RetinaCS.Server/api/PMM/ActiveSessionThumbnail?token=#=Token#&jpeg=7&protocol=#=Protocol#&anticsrftoken=#=_antiCSRFToken#" id="placeholder_img_#=Token#" class="placeholder_img_#=Token#" style="width:137px; height:125px;" />
- <div class="div-expand" title="Click to view in larger window" style="width:137px !important; height:125px !important;" data-bind="click: parent().parent().OnExpand"><i class="icon-share icon-white" style="float: right;padding-right: 6px;"></i></div>
- </div>
- <div class="second">
- <span>AssetName: <b>#=AssetName#</b></span><br />
- <span>Requestor: <b>#=UserName#</b></span><br />
- Elapsed Time:<b><span id="placeholder_time_#=Token#" class="placeholder_time_#=Token#"></span></b><br />
- <span>Resolution: <b>#=Resolution#</b></span><br />
- <button class="btn btn-session_lock_#=Token#" data-bind="visible: Status == 1, click: parent().parent().lock" data-placement='top' data-toggle='tooltip' data-original-title='Locks or unlocks the current session.'><i class="icon-pause icon-white"></i> Lock</button>
- <button class="btn btn-session_unlock_#=Token#" data-bind="visible: Status == 5, click: parent().parent().unlock" data-placement='top' data-toggle='tooltip' data-original-title='Locks or unlocks the current session.'><i class="icon-play icon-white"></i> Unlock</button>
- <button class="btn btn-terminate-session_#=Token#" data-bind="click: parent().parent().terminate" data-placement='top' data-toggle='tooltip' data-original-title='Terminates the current session.'><i class="icon-stop icon-white"></i> Terminate</button>
- # if (ReleaseRequestID != 0) { #
- <button class="btn btn-terminate-cancel-session_#=Token#" data-bind="click: parent().parent().terminateCancel" data-placement='top' data-toggle='tooltip' data-original-title='Terminates ALL sessions and cancels the request.'><i class="icon-remove icon-white"></i> Terminate and Cancel</button>
- # } #
- </div>
- </div>
- <div style="display:none;" class="archiveStatusMsg request alert-error"></div>
- <div style="display:none;" class="archiveStatusMsg session alert-error"></div>
- # } else { #
- <div class="self_clear">
- <div class="first">
- #if (Protocol == 'RDP') {#
- <img src="../images/rdp-placeholder.jpg?whswwi" style="width:137px; height:125px;" />
- #} else {#
- <img src="../images/ssh_placeholder.jpeg?wiwhs" style="width:137px; height:125px;" />
- #}#
- </div>
- <div class="second">
- <span>AssetName: <b>#=AssetName#</b></span><br />
- <span>Requestor: <b>#=UserName#</b></span><br />
- <span>Resolution: <b>#=Resolution#</b></span><br />
- <div class="alert alert-info">
- <div class="child">This session was created on a remote node, and can only be viewed from that node.</div>
- </div>
- </div>
- </div>
- # } #
- </div>
- </script>
- <!--========== END JS template for Grid's inline area END ==================================-->
- <!--====================== Filter Buttons ==================================================-->
- <div class="filter-bar pull-left" style="width:150px !important;">
- <form class="form-inline form-filter">
- <div class="pull-left filter-request-status">
- <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: filterModel().buttons">
- <button class="btn" data-bind="text: name, css: {active: selected}, enable: $parent.sessionsLoaded, click: $parent.toggleProtocolFilter"></button>
- </div>
- </div>
- </form>
- </div>
- <!--==================== Active Sessions Search UI ==================================================-->
- <div class="filter-bar pull-right">
- <form class="form-inline form-filter">
- <div class="pull-right">
- <label id="lblASKsSearch" for="chkASKsSearch" title="Search sessions by keystroke">
- <input id="chkASKsSearch" type="checkbox" title="Search sessions by keystroke" data-bind="checked: filterModel().isKeystrokeSearch" class="checkbox kssearch">
- <span data-bind="css: { checked: (filterModel().isKeystrokeSearch() == true) } ">Search by keystroke</span>
- </label>
- <input class="filter-system" type="text" data-bind="visible: !filterModel().isKeystrokeSearch(), value: filterModel().system, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
- <input class="filter-keystroke" style="display:none;" type="text" data-bind="visible: filterModel().isKeystrokeSearch(), value: filterModel().keystrokeCommand, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
- <button class="btn btn-mini btn-primary btn-filter" type="submit" data-bind="enable: sessionsLoaded, click: applyFilter">Search</button>
- <button class="btn btn-mini btn-clear-filter" type="button" data-bind="enable: sessionsLoaded">Reset</button>
- <button class="btn btn-mini btn-refresh" type="button" onclick="refreshSessionsGrid();">Refresh</button>
- </div>
- </form>
- </div>
- </div>
- <div style="display:none;" class="sessionWindow self_clear" data-bind="with:selectedSession()">
- <div class="leftpane self_clear">
- <div id="sessionBody">
- <div class="inner-content">
- <div class="scaleme" style="position: relative; height: 0; padding-bottom: 73%;" data-bind="visible: (protocol().name == 'SSH')"><textarea class="sessionSSHDiv" readonly="readonly" data-bind="attr: {'id': 'bigSshDiv_' + token()}, visible: (protocol().name == 'SSH')">...</textarea></div>
- <img onerror="if (this.src != '../images/rdp-placeholder-lg.jpg') this.src = '../images/rdp-placeholder-lg.jpg';" data-bind="attr: {'id': 'bigOne_' + token()}, visible: (protocol().name == 'RDP')" src="../images/rdp-placeholder-lg.jpg" />
- <div id="alertparent" data-bind="fadeIn: showReplayStatus, stopAnimation: stickyStatus">
- <div class="session-playback-status alert" data-bind="css: replayStatus">
- <div class="child" data-bind="text: replayStatusMessage"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="sessionFooter" class="self_clear">
- <div id="progressContainer" class="self_clear" style="display:none;">
- <div id="progressWrap" class="self_clear">
- <div id="progress" class="waiting"></div>
- </div>
- </div>
- <div class="durationTimer" data-bind="attr: {'id': 'progress_' + token()}, visible: true"><span id="elapsed" data-bind="text: humanReadableElapsedTime">00h:00m:00s</span></div>
- <div id="playerControls" class="active">
- <div class="buttons">
- <button class="btn btn-session_lock" data-bind="visible: (remoteSessionState() != RemoteSessionStateENUM.LOCKED)" title="Locks the current session"><i class="icon-pause icon-white"></i> Lock</button>
- <button class="btn btn-session_unlock" data-bind="visible: (remoteSessionState() == RemoteSessionStateENUM.LOCKED)" title="Unlocks the current session"><i class="icon-play icon-white"></i> Unlock</button>
- <button class="btn btn-terminate-session" title="Terminates the current session"><i class="icon-stop icon-white"></i> Terminate</button>
- <button class="btn btn-terminate-cancel-session" data-bind="visible: releaseRequestId() != null && releaseRequestId() != '' && releaseRequestId() != '0'" title="Terminates ALL sessions associated with the request being cancelled"><i class="icon-remove icon-white"></i> Terminate and Cancel</button>
- </div>
- </div>
- </div>
- </div>
- <div class="rightpane self_clear">
- <div class="content">
- <table id="keystrokes" role="treegrid" data-role="selectable" class="selectable" style="margin: 0 auto;">
- <thead>
- <tr>
- <th>KeystrokeID</th>
- <th>TimeMarker</th>
- <th><a href="#">Sorted: oldest to newest</a></th>
- </tr>
- </thead>
- <tbody></tbody>
- </table>
- </div>
- </div>
- </div>
- <div id="activeContent" class="active-sessions-grid" data-model="activeSessionsGridSourceModel" data-bind="source: sessionsSource, events: {detailCollapse: dtCollapse, detailExpand: dtExpand, change: changeEvent, dataBound: OnDataBound }"></div>
- </div>
- </div> <!-- Views -->
- </div> <!-- Page -->
- <!--NEW Active section END-->
- <!-- Page: Change Password -->
- <div class="page page-change-password" data-route="changepassword" data-default-view-route="change">
- <script type="text/javascript">var page_change_password=function(){var CHANNEL_PAGE="Channel.Page.ChangePassword";var PAGE_ROOT_CLASS="page-change-password";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_REQUESTOR,ROLE_APPROVER,ROLE_REQUESTOR_APPROVER,ROLE_ISA,ROLE_ACTIVE_SESSION_REVIEWER,ROLE_RECORDED_SESSION_REVIEWER];var requiredPermission=[PERMISSION_ADMIN_SESSION];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles,requiredPermission:requiredPermission};};</script>
- <div class="views">
- <!-- View: Change current user's password form. -->
- <div class="view view-change-password" data-route="change">
- <script type="text/javascript">
- var view_change_password=function(){var viewName="view-change-password";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-change-password");var viewModel=null;var _params=null;var initializeCapsLockCheck=function(){var $passwordField=$viewRoot.find(".input-current-password");var $capsLockMessage=$viewRoot.find(".caps-lock-warning");$passwordField.keypress(function(e){var s=String.fromCharCode(e.which);if((s.toUpperCase()===s&&s.toLowerCase()!==s&&!e.shiftKey)||(s.toUpperCase()!==s&&s.toLowerCase()===s&&e.shiftKey)){$capsLockMessage.fadeIn();$passwordField.blur(function(){$capsLockMessage.hide();});}else{$capsLockMessage.hide();}});};var initializeCapsLockCheck2=function(){var $passwordField=$viewRoot.find(".input-new-password");var $capsLockMessage=$viewRoot.find(".caps-lock-warning2");$passwordField.keypress(function(e){var s=String.fromCharCode(e.which);if((s.toUpperCase()===s&&s.toLowerCase()!==s&&!e.shiftKey)||(s.toUpperCase()!==s&&s.toLowerCase()===s&&e.shiftKey)){$capsLockMessage.fadeIn();$passwordField.blur(function(){$capsLockMessage.hide();});}else{$capsLockMessage.hide();}});};var initializeCapsLockCheck3=function(){var $passwordField=$viewRoot.find(".input-confirm-new-password");var $capsLockMessage=$viewRoot.find(".caps-lock-warning3");$passwordField.keypress(function(e){var s=String.fromCharCode(e.which);if((s.toUpperCase()===s&&s.toLowerCase()!==s&&!e.shiftKey)||(s.toUpperCase()!==s&&s.toLowerCase()===s&&e.shiftKey)){$capsLockMessage.fadeIn();$passwordField.blur(function(){$capsLockMessage.hide();});}else{$capsLockMessage.hide();}});};initializeCapsLockCheck();initializeCapsLockCheck2();initializeCapsLockCheck3();var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;$viewRoot.find(".form-change-password").submit(function(e){e.preventDefault();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
- $viewRoot.find(".form-change-password :input").attr("disabled",true);$viewRoot.find(".btn-change-password").busy(true);changePassword();return false;});$viewRoot.find("#btn-cancel-passwordchange").on("click",function(e){e.preventDefault();viewModel().reset();$viewRoot.find(".form-change-password :input").attr("disabled",false);$viewRoot.find(".btn-change-password").busy(false);window.location.href="#/home";return false;});viewModel=ko.validatedObservable(new changePasswordViewModel());ko.applyBindings(viewModel,$viewRoot[0]);_isInitialized=true;};var changePassword=function(){$viewRoot.find(".change-password-message").html("").hide();var newPwd=viewModel().newPassword();var newConfirmedPwd=viewModel().confirmNewPassword();var currentPwd=viewModel().currentPassword();var viewModelJson=ko.toJSON(viewModel);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/ChangeCurrentUserPassword",dataType:"json",type:"POST",data:viewModelJson,contentType:"application/json; charset=utf-8",success:function(result){$viewRoot.find(".panel-change-password").fadeOut();$viewRoot.find(".panel-change-successful").offset({left:60}).animate({left:'-=60',opacity:"toggle"});},error:function(jqXhr,textStatus,errorThrown){if(jqXhr.status==400){var ex=parseAjaxError(jqXhr);if(ex!=null){if(ex.Message.toLowerCase().indexOf("the minimum length of a new password is")>-1){displayMessage=ex.Message;}
- else{switch(ex.Message.toLowerCase()){case"passwords do not match":displayMessage="The value entered for New Password is different from the value entered for Confirm New Password."+"Please try again.";break;case"failed to reauthenticate":displayMessage="The value entered for Current Password is not correct. Please try again.";break;case"userislocked":displayMessage="This account is locked. Please contact your Password Safe administrator.";break;case"passwordhasbeenusedbefore":displayMessage="The value entered for New Password has been used previously for this account. Please choose a different password.";break;default:displayMessage="An unexpected error occurred: {0}".format(ex.Message);}}
- $viewRoot.find(".change-password-message").text(displayMessage).fadeIn(200);}
- else showApplicationError(jqXhr);}
- else{showApplicationError(jqXhr);}},complete:function(){viewModel().reset();$viewRoot.find(".form-change-password :input").attr("disabled",false);$viewRoot.find(".btn-change-password").busy(false);$viewRoot.find(".input-current-password").focus();}});};var mustEqual=function(val,other){return val==other();};var changePasswordViewModel=function(){var self=this;self.currentPassword=ko.observable("").extend({required:true});self.newPassword=ko.observable("").extend({required:true});self.confirmNewPassword=ko.observable("").extend({required:true,validation:{validator:mustEqual,message:'Passwords do not match.',params:self.newPassword}});self.reset=function(){self.currentPassword("");self.currentPassword.isModified(false);self.newPassword("");self.newPassword.isModified(false);self.confirmNewPassword("");self.confirmNewPassword.isModified(false);};};var beforeShow=function(params){_params=params;if(viewModel!=null)viewModel().reset();$viewRoot.find(".change-password-message").html("").hide();$viewRoot.find(".panel-change-successful").hide();$viewRoot.find(".panel-change-password").show();};var show=function(params){$viewRoot.find(".input-current-password").focus();};var hide=function(){};var afterHide=function(){};var resize=function(){};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};</script>
- <div class="panels">
- <div class="panel panel-change-password">
- <h4>Change Your Password</h4>
- <div class="section-header section-content">
- <form class="form-horizontal form-change-password">
- <div class="control-group">
- <label class="control-label" for="username">Current Password:</label>
- <div class="controls password-container">
- <input type="password" class="input-xlarge input-current-password" data-bind="value: currentPassword" />
- <div class="caps-lock-warning" style="display: none;">
- <img src="../images/sign_warning_16x16.png" />Caps lock is on
- </div>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="username">New Password:</label>
- <div class="controls password-container">
- <input type="password" class="input-xlarge input-new-password" data-bind="value: newPassword" />
- <div class="caps-lock-warning2" style="display: none;">
- <img src="../images/sign_warning_16x16.png" />Caps lock is on
- </div>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="username">Confirm New Password:</label>
- <div class="controls password-container">
- <input type="password" class="input-xlarge input-confirm-new-password" data-bind="value: confirmNewPassword" />
- <div class="caps-lock-warning3" style="display: none;">
- <img src="../images/sign_warning_16x16.png" />Caps lock is on
- </div>
- </div>
- </div>
- <div class="control-group button-bar2 self_clear">
- <div class="controls">
- <div>
- <button class="btn btn-primary btn-change-password">Change Password</button>
- <a href="#" id="btn-cancel-passwordchange" class="btn">Cancel</a>
- </div>
- </div>
- </div>
- </form>
- </div>
- <div class="alert alert-error change-password-message"></div>
- </div>
- <div class="panel panel-change-successful" style="display:none; ">
- <div class="alert alert-success">
- <div><b>Password Successfully Changed</b></div>
- <p>Your password has been successfully changed.</p>
- <p><a href="#/home">Home</a></p>
- </div>
- </div>
- </div> <!-- Panels -->
- </div> <!-- View -->
- </div> <!-- Views -->
- </div> <!-- Page -->
- <!-- The "Show Password" panel, used by some Views. -->
- <div class="panel panel-retrieve-password" style="display:none;">
- <script type="text/javascript">
- var displayPasswordPanel=function(){var passwordCountdownInterval;var $timeRemaining;var $timeRemainingProgressBar;var $panelRoot;var _sourceView;var initialize=function(){$panelRoot=$(".panel-retrieve-password");$timeRemainingProgressBar=$panelRoot.find(".time-remaining-progress-bar");$timeRemaining=$panelRoot.find(".time-remaining");$panelRoot.find(".btn-select-password").click(function(e){e.preventDefault();$panelRoot.find(".password").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});return false;});$panelRoot.find(".btn-close-password-screen").click(closePasswordPanel);$panelRoot.find(".password").blur(function(){$panelRoot.find(".password-selected-message").css("opacity","0");});$panelRoot.find(".password").click(function(){$panelRoot.find(".password-selected-message").css("opacity","0");});}
- var showPasswordPanel=function(password,sourceView){_sourceView=sourceView;$panelRoot.find(".password").val(password);password=null;$timeRemainingProgressBar.addClass("no-animate");$timeRemainingProgressBar.css("width","100%");$timeRemainingProgressBar.removeClass("no-animate");$(_sourceView).hide();$panelRoot.offset({left:60}).animate({left:'-=60',opacity:"toggle"});clearInterval(passwordCountdownInterval);$timeRemainingProgressBar.css("width","100%");$timeRemainingProgressBar.removeClass("bar-danger").removeClass("bar-warning").addClass("bar-success");var now=new Date();passwordCountdownInterval=setInterval(function(){updatePasswordCountdownTimer(now);},200);};var updatePasswordCountdownTimer=function(startTime){var totalDuration=20000;var currentDuration=new Date().getTime()-startTime.getTime();var timeRemaining=totalDuration-currentDuration;$timeRemaining.text(Math.ceil(timeRemaining/1000).toString());var percentageRemaining=Math.floor(((totalDuration-currentDuration)/totalDuration)*100);if(percentageRemaining<=30)$timeRemainingProgressBar.removeClass("bar-danger").removeClass("bar-success").addClass("bar-warning");if(percentageRemaining<=15)$timeRemainingProgressBar.removeClass("bar-warning").removeClass("bar-success").addClass("bar-danger");$timeRemainingProgressBar.css("width",percentageRemaining.toString()+"%");if(timeRemaining<=0){closePasswordPanel();}};var closePasswordPanel=function(){clearInterval(passwordCountdownInterval);$panelRoot.fadeOut(function(){$panelRoot.find(".password").val("");$panelRoot.find(".password-selected-message").css("opacity","0");$timeRemainingProgressBar.css("width","100%");});$(_sourceView).offset({left:60}).animate({left:'-=60',opacity:"toggle"});};var hide=function(shift){clearInterval(passwordCountdownInterval);$panelRoot.fadeOut(function(){$panelRoot.find(".password").val("");$panelRoot.find(".password-selected-message").css("opacity","0");$timeRemainingProgressBar.css("width","100%");});if(shift==true){$(_sourceView).offset({left:60})}};return{initialize:initialize,showPasswordPanel:showPasswordPanel,hide:hide,};};</script>
- <form class="form-inline form-show-password">
- <label>Password:</label>
- <input class="input-xlarge password" type="text" readonly="readonly" />
- <button class="btn btn-success btn-select-password">Highlight Password</button>
- </form>
- <div class="alert alert-success password-selected-message">
- The password has been selected. To copy it to the clipboard, press <b>Ctrl-C</b><br />
- or right-click on the selected password and select <b>Copy</b>.
- </div>
- <div class="countdown-timer">
- This screen will automatically close in <span class="time-remaining">10</span> seconds.
- <div class="progress">
- <div class="bar bar-success time-remaining-progress-bar"></div>
- </div>
- <div>
- <button class="btn btn-warning btn-close-password-screen">Close Now</button>
- </div>
- </div>
- </div>
- <!-- The "Show SSH Session" panel, used by some Views. -->
- <div class="panel panel-retrieve-sshSession" style="display:none;">
- <script type="text/javascript">
- var displaySshSessionPanel=function(){var passwordCountdownInterval;var $timeRemaining;var $timeRemainingProgressBar;var $panelRoot;var _sourceView;var initialize=function(){$panelRoot=$(".panel-retrieve-sshSession");$timeRemainingProgressBar=$panelRoot.find(".time-remaining-progress-bar");$timeRemaining=$panelRoot.find(".time-remaining");$panelRoot.find(".btn-select-fullcommand").click(function(e){e.preventDefault();$panelRoot.find(".fullcommand").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Command");return false;});$panelRoot.find(".fullcommand").click(function(e){e.preventDefault();$panelRoot.find(".fullcommand").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Command");return false;});$panelRoot.find(".btn-ssh-session-usernameip").click(function(e){e.preventDefault();$panelRoot.find(".usernameip").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Username / IP");return false;});$panelRoot.find(".usernameip").click(function(e){e.preventDefault();$panelRoot.find(".usernameip").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Username / IP");return false;});$panelRoot.find(".btn-ssh-session-username").click(function(e){e.preventDefault();$panelRoot.find(".username").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Username");return false;});$panelRoot.find(".username").click(function(e){e.preventDefault();$panelRoot.find(".username").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Username");return false;});$panelRoot.find(".btn-ssh-session-ip").click(function(e){e.preventDefault();$panelRoot.find(".ip").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("IP");return false;});$panelRoot.find(".ip").click(function(e){e.preventDefault();$panelRoot.find(".ip").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("IP");return false;});$panelRoot.find(".btn-ssh-session-port").click(function(e){e.preventDefault();$panelRoot.find(".port").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Port");return false;});$panelRoot.find(".port").click(function(e){e.preventDefault();$panelRoot.find(".port").focus().select();$panelRoot.find(".password-selected-message").animate({opacity:"1"});$panelRoot.find(".dymanicText").text("Port");return false;});var isOpen=false;$panelRoot.find(".more").click(function(e){e.preventDefault();if(!isOpen){$panelRoot.find(".moreInfo").css("display","block");isOpen=true;}else{$panelRoot.find(".moreInfo").css("display","none");isOpen=false;}
- return false;});$panelRoot.find(".btn-close-SshSession-screen").click(closeSshSessionPanel);$panelRoot.find(".password").blur(function(){$panelRoot.find(".password-selected-message").css("opacity","0");});$panelRoot.find(".password").click(function(){$panelRoot.find(".password-selected-message").css("opacity","0");});}
- var showSshSessionPanel=function(result,sourceView){_sourceView=sourceView;$panelRoot.find('.btn-new-sshrequest').attr('href',result.sshLink);$panelRoot.find(".fullcommand").val(result.sshCommand);$panelRoot.find(".usernameip").val(result.sshUserNameIP);$panelRoot.find(".username").val(result.sshUserName);$panelRoot.find(".ip").val(result.sshIP);$panelRoot.find(".port").val(result.sshPort);$timeRemainingProgressBar.addClass("no-animate");$timeRemainingProgressBar.css("width","100%");$timeRemainingProgressBar.removeClass("no-animate");$(_sourceView).hide();$panelRoot.offset({left:60}).animate({left:'-=60',opacity:"toggle"});clearInterval(passwordCountdownInterval);$timeRemainingProgressBar.css("width","100%");$timeRemainingProgressBar.removeClass("bar-danger").removeClass("bar-warning").addClass("bar-success");var now=new Date();passwordCountdownInterval=setInterval(function(){updatePasswordCountdownTimer(now);},200);};var updatePasswordCountdownTimer=function(startTime){var totalDuration=20000;var currentDuration=new Date().getTime()-startTime.getTime();var timeRemaining=totalDuration-currentDuration;$timeRemaining.text(Math.ceil(timeRemaining/1000).toString());var percentageRemaining=Math.floor(((totalDuration-currentDuration)/totalDuration)*100);if(percentageRemaining<=30)$timeRemainingProgressBar.removeClass("bar-danger").removeClass("bar-success").addClass("bar-warning");if(percentageRemaining<=15)$timeRemainingProgressBar.removeClass("bar-warning").removeClass("bar-success").addClass("bar-danger");$timeRemainingProgressBar.css("width",percentageRemaining.toString()+"%");if(timeRemaining<=0){closeSshSessionPanel();}};var closeSshSessionPanel=function(){clearInterval(passwordCountdownInterval);$panelRoot.fadeOut(function(){$panelRoot.find(".password").val("");$panelRoot.find(".password-selected-message").css("opacity","0");$timeRemainingProgressBar.css("width","100%");});$(_sourceView).offset({left:60}).animate({left:'-=60',opacity:"toggle"});};var hide=function(shift){clearInterval(passwordCountdownInterval);$panelRoot.fadeOut(function(){$panelRoot.find(".password").val("");$panelRoot.find(".password-selected-message").css("opacity","0");$timeRemainingProgressBar.css("width","100%");});if(shift==true){$(_sourceView).offset({left:60})}};return{initialize:initialize,showSshSessionPanel:showSshSessionPanel,hide:hide,};};</script>
- <div class="alert alert-success password-selected-messagex" style="text-align: center">
- Copy and paste the command below to manually start the SSH Session.<br />
- Alternatively you can click the Start SSH Session button.
- </div>
- <form class="form-inline form-show-sshSession">
- <!--Full Command-->
- <div id="fullcommand_dev" style="padding:10px;">
- <label>Command:</label>
- <input class="input-xlarge fullcommand" type="text" readonly="readonly" style="width: 480px;" />
- <button class="btn btn-success btn-select-fullcommand"><i class="icon-file icon-white" title="Highlight Text"></i></button>
- </div>
- <!--Username/IP-->
- <div id="username_ip_dev" style="padding:10px;">
- <label>Username/IP:</label>
- <input class="input-xlarge usernameip" type="text" readonly="readonly" style="width: 464px;" />
- <button class="btn btn-success btn-ssh-session-usernameip"><i class="icon-file icon-white" title="Highlight Text"></i></button>
- </div>
- <a href="more" class="more" style="padding-left:10px;">more...</a>
- <div id="moreInfo" class="moreInfo closed" style="padding:10px,10px,10px,10px; display:none;">
- <br clear="all" />
- <!--Username-->
- <label style="padding-left:10px;">Username</label>
- <input class="input-medium username" type="text" readonly="readonly" style="width: 300px;" />
- <button class="btn btn-success btn-ssh-session-username"><i class="icon-file icon-white" title="Highlight Text"></i></button>
- <!--IP-->
- <label style="padding-left:10px;">IP</label>
- <input class="input-medium ip" type="text" readonly="readonly" style="width: 100px;" />
- <button class="btn btn-success btn-ssh-session-ip"><i class="icon-file icon-white" title="Highlight Text"></i></button>
- <!--Port-->
- <label style="padding-left:10px;">
- Port
- </label>
- <input class="input-medium port" type="text" readonly="readonly" style="width: 40px !important;" />
- <button class="btn btn-success btn-ssh-session-port"><i class="icon-file icon-white" title="Highlight Text"></i></button>
- </div>
- </form>
- <div class="alert alert-success password-selected-message">
- The <span class="dymanicText">password</span> has been selected. To copy it to the clipboard, press <b>Ctrl-C</b><br />
- or right-click on the selected password and select <b>Copy</b>.
- </div>
- <div style="text-align: center">
- <a target="_parent" class="btn btn-primary btn-new-sshrequest">Start SSH Session</a>
- </div>
- <div class="countdown-timer">
- This screen will automatically close in <span class="time-remaining">10</span> seconds.
- <div class="progress">
- <div class="bar bar-success time-remaining-progress-bar"></div>
- </div>
- <div>
- <button class="btn btn-warning btn-close-SshSession-screen">Close Now</button>
- </div>
- </div>
- </div>
- <!-- Page: Admin Session -->
- <div class="page page-admin-session" data-route="adminsession" data-default-view-route="newsession">
- <script type="text/javascript">var page_admin_session=function(){var CHANNEL_PAGE="Channel.Page.AdminSession";var PAGE_ROOT_CLASS="page-admin-session";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var requiredRoles=[ROLE_ISA];var requiredPermission=[PERMISSION_ADMIN_SESSION];var views={};var initialize=function(){if(_isInitialized)return;_isInitialized=true;};var registerView=function(view){if(views.hasOwnProperty(view.name))return;else views[view.name]=view;};return{pageRootClass:PAGE_ROOT_CLASS,pageChannel:CHANNEL_PAGE,isInitialized:isInitialized,registerView:registerView,requiredRoles:requiredRoles,requiredPermission:requiredPermission};};</script>
- <div class="views">
- <!-- View: Change current user's password form. -->
- <div class="view view-admin-session" data-route="newsession">
- <script type="text/javascript">
- var view_admin_session=function(){var viewName="view-admin-session";var _isInitialized=false;var isInitialized=function(){return _isInitialized;};var publishChannelName=null;var events={};var $viewRoot=$(".view.view-admin-session");var viewModel=null;var _params=null;var initializeCapsLockCheck=function(){var $passwordField=$viewRoot.find(".input-adminsession-password");var $capsLockMessage=$viewRoot.find(".caps-lock-warning");$viewRoot.on("keypress",".input-adminsession-password",function(e){var s=String.fromCharCode(e.which);if((s.toUpperCase()===s&&s.toLowerCase()!==s&&!e.shiftKey)||(s.toUpperCase()!==s&&s.toLowerCase()===s&&e.shiftKey)){$capsLockMessage.fadeIn();$viewRoot.on("blur",".input-adminsession-password",function(){$capsLockMessage.hide();});}else{$capsLockMessage.hide();}});};initializeCapsLockCheck();var initialize=function(notificationChannelName){if(_isInitialized)return;publishChannelName=notificationChannelName;$viewRoot.find(".available-accounts").change(function(e){$(".available-assets option").remove();viewModel().adminForm().domain("");$(".input-adminsession-domain").removeAttr("disabled");viewModel().adminForm().userName("");$(".input-adminsession-username").removeAttr("disabled");viewModel().adminForm().ipAddress("");$(".input-adminsession-ip").removeAttr("disabled");$(".input-adminsession-ip").removeAttr("disabled");$(".input-adminsession-port").removeAttr("disabled");$(".input-adminsession-password").removeAttr("disabled");viewModel().adminForm().password("");$(".input-adminsession-RDP").removeAttr("disabled");$(".input-adminsession-SSH").removeAttr("disabled");var selectedValue=$(".available-accounts option:selected").val();if(selectedValue=="")
- return;var selectedAccountID=0;selectedRequestID=0;var arrSelectedValue=selectedValue.split('|');if(arrSelectedValue.length==2){selectedAccountID=arrSelectedValue[0];selectedRequestID=arrSelectedValue[1];}
- var selectedText=$(".available-accounts option:selected").text();var arrSelectedText=selectedText.split('\\');if(arrSelectedText.length==2){viewModel().adminForm().domain(arrSelectedText[0]);$(".input-adminsession-username").attr("disabled","disabled");viewModel().adminForm().userName(arrSelectedText[1]);$(".input-adminsession-domain").attr("disabled","disabled");$(".input-adminsession-port").attr("disabled","disabled");viewModel().adminForm().port(viewModel().defaultRDPPort());$(".input-adminsession-password").attr("disabled","disabled");viewModel().adminForm().password("********");}
- $.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetAssetsForAdminSession",dataType:"json",contentType:"application/json; charset=utf-8",data:{accountID:selectedAccountID},success:function(result){$(".available-assets option").remove();var options="<option value=''></option>";$.each(result,function(index,value){options+='<option value="'+value.ManagedSystemID+'|'+value.WindowsFlag+'">'+value.AssetName.replace("<","<").replace(">",">")+" ("+value.IPAddress.replace("<","<").replace(">",">")+')</option>';});$('.available-assets').append(options);$('.available-assets').css("width","auto");},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});});$viewRoot.find(".available-assets").change(function(e){viewModel().adminForm().ipAddress("");var selectedValue=$(".available-assets option:selected").val();if(selectedValue==""){$(".input-adminsession-ip").removeAttr("disabled","disabled");return;}
- $(".input-adminsession-ip").attr("disabled","disabled");var arrSelectedValue=selectedValue.split('|');var isWindowsConnectionType=arrSelectedValue[1]
- if(isWindowsConnectionType=="true"){viewModel().isRDP(1);}
- else
- {viewModel().isRDP(0);}
- var selectedText=$(".available-assets option:selected").text();var arrSelectedText=selectedText.split('(');if(arrSelectedText.length==2){var trimmedIP=arrSelectedText[1]
- trimmedIP=arrSelectedText[1].substring(0,arrSelectedText[1].length-1);viewModel().adminForm().ipAddress(trimmedIP);}});$viewRoot.find(".form-admin-session").submit(function(e){e.preventDefault();$viewRoot.find(".admin-session-message").removeClass("alert-error").hide();if(viewModel().adminForm.errors().length>0){viewModel().adminForm.errors.showAllMessages();return false;}
- if(viewModel().isRDP()==1){startAdminSession();}else{startSSHSession();}
- return false;});viewModel=ko.validatedObservable(new startRemoteSessionAdminViewModel());ko.applyBindings(viewModel,$viewRoot[0]);_isInitialized=true;};var startSSHSession=function(){var userName=viewModel().adminForm().userName();var pwd=viewModel().adminForm().password();viewModel().adminForm().euserName(userName);viewModel().adminForm().epassword(pwd);var selectedManagedSystem=$('.available-assets').val();if(selectedManagedSystem!=null&selectedManagedSystem!=undefined){var arrSelectedManagedSystemID=selectedManagedSystem.split('|');var SelectedManagedSystemID=arrSelectedManagedSystemID[0]}
- var selectedValue=$('.available-accounts').val();var selectedAccountID=0;selectedRequestID=0;if(selectedValue!=null&selectedValue!=undefined){var arrSelectedValue=selectedValue.split('|');if(arrSelectedValue.length==2){selectedAccountID=arrSelectedValue[0];selectedRequestID=arrSelectedValue[1];}}
- setFormBusy(true);var sshSession={"IpAddress":viewModel().adminForm().ipAddress(),"UserName":viewModel().adminForm().euserName(),"Password":viewModel().adminForm().epassword(),"Resolution":viewModel().adminForm().resolution(),"Port":viewModel().adminForm().port(),"Domain":viewModel().adminForm().domain(),"ManagedSystem":SelectedManagedSystemID,"AccountId":selectedAccountID,"RequestId":selectedRequestID,"SmartSize":viewModel().adminForm().smartSize(),};$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteSessionSSHAdmin",type:"POST",dataType:"json",data:JSON.stringify(sshSession),contentType:"application/json; charset=utf-8",success:function(result){if(result.byPassLandingPage){window.location.href=result.sshLink;showSuccessMessage("Session established. Opening...");}else{_sshDisplayPanel.showSshSessionPanel(result,$viewRoot);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".admin-session-message").removeClass("alert-success").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){setFormBusy(false);if(selectedRequestID==0){viewModel().adminForm().password("");viewModel().adminForm().password.isModified(false);}}});};var startAdminSession=function(){var userName=viewModel().adminForm().userName();var pwd=viewModel().adminForm().password();viewModel().adminForm().euserName(userName);viewModel().adminForm().epassword(pwd);var selectedManagedSystem=$('.available-assets').val();if(selectedManagedSystem!=null&selectedManagedSystem!=undefined){var arrSelectedManagedSystemID=selectedManagedSystem.split('|');var SelectedManagedSystemID=arrSelectedManagedSystemID[0]}
- var selectedValue=$('.available-accounts').val();var selectedAccountID=0;selectedRequestID=0;if(selectedValue!=null&selectedValue!=undefined){var arrSelectedValue=selectedValue.split('|');if(arrSelectedValue.length==2){selectedAccountID=arrSelectedValue[0];selectedRequestID=arrSelectedValue[1];}}
- setFormBusy(true);var rdpSession={"IpAddress":viewModel().adminForm().ipAddress(),"UserName":viewModel().adminForm().euserName(),"Password":viewModel().adminForm().epassword(),"Resolution":viewModel().adminForm().resolution(),"Port":viewModel().adminForm().port(),"Domain":viewModel().adminForm().domain(),"ManagedSystem":SelectedManagedSystemID,"AccountId":selectedAccountID,"RequestId":selectedRequestID,"SmartSize":viewModel().adminForm().smartSize(),};var ticket=0;$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/StartRemoteSessionAdmin",type:"POST",dataType:"json",async:false,data:JSON.stringify(rdpSession),contentType:"application/json; charset=utf-8",success:function(result){ticket=result.Ticket;showSuccessMessage("Session established. Downloading the RDP file...");},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".admin-session-message").removeClass("alert-success").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);},complete:function(){setFormBusy(false);if(selectedRequestID==0){viewModel().adminForm().password("");viewModel().adminForm().password.isModified(false);}}});if(ticket!=0)
- window.open("/eEye.RetinaCS.Server/api/PMM/StartRemoteSessionAdmin?ticket="+ticket+"&anticsrftoken="+_antiCSRFToken);};$("input[name='rbtnIsRDP']").on("change",function(){if(this.value==0){viewModel().adminForm().port(22);}else{viewModel().adminForm().port(viewModel().defaultRDPPort());}});var beforeShow=function(params){_params=params;if(viewModel!=null)viewModel().reset();$viewRoot.find(".admin-session-message").html("").hide();$viewRoot.find(".panel-session-successful").hide();$viewRoot.find(".panel-admin-session").show();$viewRoot.find(".available-assets option").remove();};var show=function(params){$viewRoot.find(".input-adminsession-ip").focus();$viewRoot.find(".input-adminsession-ip").attr("disabled",false);$viewRoot.find(".input-adminsession-port").attr("disabled",false);$viewRoot.find(".input-adminsession-domain").attr("disabled",false);$viewRoot.find(".input-adminsession-username").attr("disabled",false);$viewRoot.find(".input-adminsession-password").attr("disabled",false);$viewRoot.find(".input-adminsession-RDP").attr("disabled",false);$viewRoot.find(".input-adminsession-SSH").attr("disabled",false);$viewRoot.find(".btn-admin-session").attr("disabled",false);$viewRoot.find(".btn-admin-session").busy(false);$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetScreenResolution",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){viewModel().adminForm().resolution(result);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".admin-session-message").removeClass("alert-success").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);}});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetOptionValueByTypeId",dataType:"json",contentType:"application/json; charset=utf-8",data:{optionTypeId:308},success:function(result){if(result.optionValue=="1"){viewModel().previousSmartSize(true);viewModel().adminForm().smartSize(true);}
- else{viewModel().adminForm().smartSize(false);viewModel().previousSmartSize(false);}},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".admin-session-message").removeClass("alert-success").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);}});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetDefaultRDPSessionPort",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){viewModel().defaultRDPPort(result);viewModel().adminForm().port(result);},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".admin-session-message").removeClass("alert-success").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);}});$.ajax({cache:false,url:"/eEye.RetinaCS.Server/api/PMM/GetAccountsForAdminSession",dataType:"json",contentType:"application/json; charset=utf-8",success:function(result){$viewRoot.find(".available-accounts option").remove();var options="<option value=''>None</option>";$.each(result,function(index,value){options+='<option value="'+value.ManagedAccountID+"|"+value.ReleaseRequestID+'">'+value.AccountNameFull.replace("<","<").replace(">",">")+'</option>';});$viewRoot.find(".available-accounts").append(options);$viewRoot.find('.available-accounts').css("width","auto");},error:function(jqXhr,textStatus,errorThrown){var ex=parseAjaxError(jqXhr);if(ex!=null){$viewRoot.find(".admin-session-message").removeClass("alert-success").addClass("alert-error").text(ex.ExceptionMessage===undefined?ex.Message:ex.ExceptionMessage).fadeIn(200);}
- else showApplicationError(jqXhr);}});};var showSuccessMessage=function(message){$viewRoot.find(".admin-session-message").removeClass("alert-error").addClass("success").text(message).fadeIn(200).delay(3000).fadeOut(1000);}
- var setFormBusy=function(isBusy){if(isBusy!=false)isBusy=true;if(isBusy){$viewRoot.find(".input-adminsession-ip").attr("disabled",true);$viewRoot.find(".input-adminsession-port").attr("disabled",true);$viewRoot.find(".input-adminsession-domain").attr("disabled",true);$viewRoot.find(".input-adminsession-username").attr("disabled",true);$viewRoot.find(".input-adminsession-password").attr("disabled",true);$viewRoot.find(".btn-admin-session").attr("disabled",true);$viewRoot.find(".btn-admin-session").busy();}else{if(selectedRequestID==0){$viewRoot.find(".input-adminsession-ip").attr("disabled",false);$viewRoot.find(".input-adminsession-port").attr("disabled",false);$viewRoot.find(".input-adminsession-domain").attr("disabled",false);$viewRoot.find(".input-adminsession-username").attr("disabled",false);$viewRoot.find(".input-adminsession-password").attr("disabled",false);}
- $viewRoot.find(".btn-admin-session").attr("disabled",false);$viewRoot.find(".btn-admin-session").busy(false);}};var hide=function(){_sshDisplayPanel.hide();};var afterHide=function(){$viewRoot.find(".admin-session-message").removeClass("alert-error").hide();};var resize=function(){};return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize};};var checkIsRequestor=function(){if(_sessionUserViewModel.IsAdministrator())
- return false;if(_sessionUserViewModel.IsIsa())
- return false;if(_sessionUserViewModel.IsRequestor())
- return true;else
- return false;}</script>
- <div class="panels">
- <div class="panel panel-admin-session">
- <h4>Admin Session - Recorded Session </h4>
- <div class="section-header section-content">
- <form class="form-horizontal form-admin-session" data-bind="with: adminForm">
- <div class="control-group-bulk-select" data-bind="visible: checkIsRequestor()">
- <div class="control-group">
- <label class="control-label" for="available-accounts">Available Accounts:</label>
- <div class="controls">
- <select class="available-accounts" title="Select an account and asset, or enter connection details"></select>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="available-assets">Asset / IP:</label>
- <div class="controls">
- <select class="available-assets" title="Select an account, then select an asset, or enter connection details"></select>
- </div>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="rbtnIsRDP">Connection Type:</label>
- <div class="controls">
- <label class="radio inline">
- <input name="rbtnIsRDP" class="input-adminsession-RDP" type="radio" data-bind="value:1, checked: $parent.isRDP" />RDP:
- </label>
- <!--<label class="radio inline">
- <input name="rbtnIsRDP" class="input-adminsession-SSH" type="radio" data-bind="value:0, checked: $parent.isRDP" />SSH:
- </label>-->
- <select class="input-large rdp-screen-resolution" data-bind="value: resolution, enable: $parent.requiredIsRDP">
- <option value="640x480">640x480</option>
- <option value="800x600">800x600</option>
- <option value="1024x768">1024x768</option>
- <option value="1280x800">1280x800</option>
- <option value="1280x1024">1280x1024</option>
- <option value="1366x768">1366x768</option>
- <option value="1440x900">1440x900</option>
- <option value="1440x1050">1440x1050</option>
- <option value="1680x1050">1680x1050</option>
- <option value="1920x1080">1920x1080</option>
- <option value="1920x1200">1920x1200</option>
- <option value="1920x2058">1920x2058</option>
- <option value="Maximized">Maximized</option>
- </select>
- <label class="radio">
- <input name="rbtnIsRDP" class="input-adminsession-SSH" type="radio" data-bind="value:0, checked: $parent.isRDP" />SSH:
- </label>
- </div>
- </div>
- <div class="control-group">
- <span class="control-label">Smart Sizing:</span>
- <div class="controls">
- <label class="checkbox">
- <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize, enable:$parent.requiredIsRDP" />
- </label>
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="input-adminsession-ip">IP Address / FQDN:</label>
- <div class="controls">
- <input type="text" class="input-xlarge input-adminsession-ip" data-bind="value: ipAddress" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="port">Port:</label>
- <div class="controls">
- <input type="number" class="input-xlarge input-adminsession-port" data-bind="value: port" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="port">Domain:</label>
- <div class="controls">
- <input type="text" class="input-xlarge input-adminsession-domain" data-bind="value: domain" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="input-adminsession-username">User Name:</label>
- <div class="controls">
- <input type="text" class="input-xlarge input-adminsession-username" data-bind="value: userName" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="password">Password:</label>
- <div class="controls password-container">
- <input type="password" class="input-xlarge input-adminsession-password" data-bind="value: password" autocomplete="off" />
- <div class="caps-lock-warning" style="display: none;">
- <img src="../images/sign_warning_16x16.png" />Caps lock is on
- </div>
- </div>
- </div>
- <button class="btn btn-primary btn-admin-session">Connect</button>
- </form>
- </div>
- <div class="alert alert-error admin-session-message"></div>
- </div>
- <div class="panel panel-session-successful" style="display:none; ">
- <div class="alert alert-success">
- <div><b>Success</b></div>
- <p>Click the link to begin the remote session</p>
- <p><a href="#/home">Home</a></p>
- </div>
- </div>
- </div> <!-- Panels -->
- </div> <!-- View -->
- </div> <!-- Views -->
- </div> <!-- Page -->
- </div> <!-- Application Pages -->
- </div> <!-- Application Root -->
- <!-- The knockout validation tooltip template to use -->
- <script id="retinaCSValidationTooltip" type="text/html">
- <div class="retinaCS-validation-message">
- <em />
- <div style="display: table">
- <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: field"></div>
- </div>
- </div>
- </script>
- <link rel="stylesheet" type="text/css" href="../libs/jquery-datatables/css/jquery.dataTables.css">
- <link href="../libs/jquery-ui/css/smoothness/jquery-ui-1.10.0.custom.min.css" rel="Stylesheet" />
- <link href="../libs/kendoui/styles/kendo.common.min.css?13" rel="Stylesheet" />
- <link href="../libs/kendoui/styles/kendo.metro.min.css?ac" rel="Stylesheet" />
- <link href="../libs/jquery-ui/jquery.datetimepicker.css" rel="Stylesheet" />
- <link href="RetinaCS.6.3.1.css?1" rel="Stylesheet" />
- <script type="text/javascript" src="../libs/underscore/underscore.1.4.4.min.js"></script>
- <script type="text/javascript" src="../libs/kendoui/js/jquery.min.js"></script>
- <script type="text/javascript" src="../libs/jquery-ui/jquery.datetimepicker.js"></script>
- <script type="text/javascript" src="../libs/jquery-ui/js/jquery-ui-1.10.0.custom.min.js"></script>
- <script type="text/javascript" src="../libs/bootstrap/js/bootstrap.2.3.1.min.js"></script>
- <script type="text/javascript" src="../libs/kendoui/js/kendo.web.min.js?wich"></script>
- <script type="text/javascript" src="../libs/stringExtensions/stringExtensions.1.0.js"></script>
- <script type="text/javascript" src="../libs/path/path.0.8.4.min.js"></script>
- <script type="text/javascript" src="../libs/postal/postal.0.8.2.min.js"></script>
- <script type="text/javascript" src="../libs/knockout/knockout-3.2.0.js"></script>
- <script type="text/javascript" src="../libs/knockout.mapping/knockout.mapping.2.4.1.min.js"></script>
- <script type="text/javascript" src="../libs/knockout-kendo/knockout-kendo.min.js"></script>
- <script type="text/javascript" src="../libs/knockout.validation/knockout.validation.modified.1.0.js"></script>
- <script type="text/javascript" src="../libs/ko-validatorVisible/ko-validatorVisible.1.0.js"></script>
- <script type="text/javascript" src="../libs/activity/jquery.activity-indicator-1.0.0.min.js"></script>
- <script type="text/javascript" src="../libs/busy/busy.1.0.js"></script>
- <script type="text/javascript" src="../libs/moment/moment.2.0.0.min.js"></script>
- <script type="text/javascript" src="../libs/jquery-datatables/jquery.dataTables.min.js"></script>
- <script type="text/javascript" src="../libs/mark/jquery.mark.min.js"></script>
- <script type="text/javascript" src="../libs/mark/datatables.mark.js"></script>
- <script type="text/javascript" src="RetinaCS.6.3.1.js"></script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement