Advertisement
Guest User

Untitled

a guest
Jan 26th, 2018
655
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 386.97 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>Password Safe</title>
  5. <meta charset="UTF-8" />
  6. <meta name="copyright" content="Copyright &copy; 2016 BeyondTrust Corporation" />
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  8. <link rel="shortcut icon" href="../favicon.ico?h" />
  9. <style type="text/css">
  10. /* These styles are kept in the main document so the initial splash screenobdy
  11. displays immediately while the JavaScript application is being
  12. initialized. */
  13. body { /* fixes the splash page jump on load of the page */
  14. padding-top: 40px;
  15. }
  16.  
  17. .main-splash-container {
  18. width: 450px;
  19. margin-left: auto;
  20. margin-right: auto;
  21. text-align: center;
  22. position: relative;
  23. }
  24.  
  25. .main-splash-container .sub-container {
  26. position: relative;
  27. top: 112px;
  28. width: 450px;
  29. text-align: left;
  30. }
  31.  
  32. .main-splash-container .status-container {
  33. margin-top: 4em;
  34. text-align: center;
  35. }
  36.  
  37. .main-splash-container .initialization-messages {
  38. margin-top: 3em;
  39. }
  40.  
  41. .main-splash-container .initialization-step {
  42. width: 175px;
  43. padding-bottom: 0.5em;
  44. margin-left: auto;
  45. margin-right: auto;
  46. text-align: left;
  47. }
  48.  
  49. .main-splash-container .step-message {
  50. display: inline-block;
  51. width: 150px;
  52. }
  53.  
  54. .main-splash-container .initialization-error {
  55. display: none;
  56. }
  57.  
  58. .visuallyhidden {
  59. display: none !important;
  60. visibility: hidden !important;
  61. }
  62. </style>
  63. <!-- Load the Bootstrap style sheet immediately since it will affect
  64. the appearance of the splash screen. -->
  65. <link href="../libs/bootstrap/css/bootstrap.2.3.1.min.css" rel="Stylesheet" />
  66. </head>
  67. <body>
  68. <script type="text/javascript">
  69. document.msCapsLockWarningOff = true;
  70. </script>
  71. <!-- The application splash screen. -->
  72. <div class="main-splash-container">
  73. <div class="sub-container">
  74. <img src="../images/beyondtrust_logo_129x22.png?h" width="129" height="22" />
  75. <h1>Password Safe</h1>
  76. <div class="status-container">
  77. <img class="progress-bar" src="../images/progress-indeterminate-metro.gif" />
  78. <div class="initialization-messages">
  79. <div class="initialization-step step-client">
  80. <span class="step-message">Initializing client ..........</span> <span class="step-result" style="display:none;"><img src="../images/check_green_16x16.png" /></span>
  81. </div>
  82. <div class="initialization-step step-server" style="display:none;">
  83. <span class="step-message">Contacting server ......</span> <span class="step-result" style="display:none;"><img src="../images/check_green_16x16.png" /></span>
  84. </div>
  85. </div>
  86. <div class="alert alert-error initialization-error">
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <!-- The application root node. -->
  92. <div class="application-root">
  93. <!-- *********************************************** -->
  94. <!-- ********** BEGIN: Framework Elements ********** -->
  95. <!-- *********************************************** -->
  96. <!-- The top navigation bar. -->
  97. <div class="navbar navbar-fixed-top" style="display: none;">
  98. <div class="navbar-inner">
  99. <a class="brand" href="#/home">Password Safe</a>
  100. <ul class="nav">
  101. <li data-bind="visible: IsRequestor" data-page="accounts"><a id="nav-btn-accounts" href="#/accounts">Accounts</a></li>
  102. <li data-bind="visible: IsRequestor" data-page="request"><a id="nav-btn-request-password" href="#/request">Requests</a></li>
  103. <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>
  104. <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>
  105. <li data-bind="visible: (IsIsa()==true || IsActiveSessionReviewer()==true)" data-page="active"><a id="nav-btn-active-sessions" href="#/active">Active Sessions</a></li>
  106. <li data-bind="visible: AllowAdminSession" data-page="adminsession"><a id="nav-btn-admin-session" href="#/adminsession">Admin Session</a></li>
  107. </ul>
  108. <ul class="nav pull-right">
  109. <li class="dropdown">
  110. <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span data-bind="text: Name"></span> <b class="caret"></b></a>
  111. <ul class="dropdown-menu">
  112. <li><a href="#/changepassword" data-bind="visible: IsDirectoryUser() == false">Change Password</a></li>
  113. <li><a href="#/signout">Logout</a></li>
  114. </ul>
  115. </li>
  116. </ul>
  117. </div>
  118. </div>
  119. <!-- The login form. -->
  120. <div class="retinaCS-login-container" style="display: none;">
  121. <script type="text/javascript">
  122. var hash="";if(window.location.hash.substring(1)!=undefined){hash=window.location.hash.substring(1);}
  123. 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];}}
  124. 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];}
  125. if(foundDomain2!=-1){var domainArray=username.split('\@');newDomain=domainArray[1];}
  126. 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"]="";}}
  127. 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("");}
  128. 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);}
  129. 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);}
  130. $.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("");}
  131. 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;}
  132. $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');}
  133. 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;}
  134. $componentRoot.find(".input-response").focus();vPVM().viewModel_1().submitType("twoFactorlogin");$componentRoot.find(".btn-signIn").busy(true);if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){}
  135. else
  136. {signIn('.twoFactorAuth-form');}
  137. 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;}
  138. $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();}
  139. else{$componentRoot.find(".input-username").focus();}
  140. 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;}
  141. $componentRoot.find(".btn-ldap-signIn").busy(true);if(eUPN!=""&&eSID!=""&&eToken!=""&&eThumbPrint!=""){}else{signIn('.ldapAuth-form');}
  142. 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("<","&lt;").replace(">","&gt;")+'</option>';}else{options+='<option value="'+value.DomainName+'">'+value.DomainName.replace("<","&lt;").replace(">","&gt;")+'</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();}
  143. 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");}
  144. 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");}
  145. 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"})}
  146. var setModel=function(data){vPVM().showPreLoginBanner(data.showPreLoginBanner);vPVM().preLoginBannerMessage(data.preLoginBannerMessage);vPVM().preLoginBannerTitle(data.preLoginBannerTitle);}
  147. $.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();}
  148. 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)
  149. $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()
  150. $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="";}}
  151. $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);}
  152. $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]);}
  153. vPVM().viewModel_1().password("**************");if(vPVM().showPreLoginBanner()==false){$componentRoot.find(".btn-signIn").click();if(hash==""||hash=="signout"||hash=="home"){eUPN="";eSID="";eToken="";eThumbPrint="";}}}}
  154. 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];}
  155. if(foundDomain2!=-1){var domainArray=username.split('\@');newDomain=domainArray[1];}
  156. 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"]="";}}}
  157. var eSubmitType="";if(localStorage["isLDAP"]=="true"){eSubmitType=vPVM().viewModel_2().submitType();}else{eSubmitType=vPVM().viewModel_1().submitType();}
  158. 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("");}
  159. 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);}
  160. 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);}
  161. 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);}
  162. $.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("");}
  163. 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;}
  164. $.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>
  165. <!--[if lte IE 9]>
  166. <style type="text/css">
  167. .login-root .form-login,
  168. .login-root .reset-password-form {
  169. /*display:block;*/
  170. height: 160% !important;
  171. }
  172. </style>
  173. <![endif]-->
  174.  
  175. <div class="login-root">
  176. <div class="login-header">
  177. <div class="retinaCS-title">
  178. <img src="../images/beyondtrust_logo_129x22.png?h" width="129" height="22" />
  179. <h1>Password Safe</h1>
  180. </div>
  181. </div>
  182. <div class="form-container accept" data-bind="visible: showPreLoginBanner() == true">
  183. <div>
  184. <h3><!-- ko 'text': preLoginBannerTitle() --><!-- /ko --></h3>
  185. <textarea data-bind="value: preLoginBannerMessage" readonly="readonly"></textarea>
  186. <button id="accept" class="btn btn-primary pull-right" value="1">ACCEPT</button>
  187. </div>
  188. </div>
  189. <div class="form-container main" data-bind="visible: showPreLoginBanner() == false">
  190. <div class="panel-signing-out" style="display:none;">
  191. <p>Signing out....</p>
  192. <p><img class="progress-bar" src="../images/progress-indeterminate-metro.gif" /></p>
  193. </div>
  194. <div class="form-rotator flip-container">
  195. <!-- Login form -->
  196. <form class="form-horizontal form-login" data-bind="with: viewModel_1" autocomplete="off">
  197. <div class="control-group">
  198. <div class="control-group">
  199. <label class="control-label" for="username">Username:</label>
  200. <div class="controls">
  201. <input type="text" class="input-xlarge input-username" autocomplete="off" tabindex="1" data-bind="value: username" />
  202. </div>
  203. </div>
  204. <div class="control-group">
  205. <label class="control-label" for="password">Password:</label>
  206. <div class="controls password-container">
  207. <input type="password" class="input-xlarge input-password" tabindex="2" data-bind="value: password" autocomplete="off" />
  208. <div class="caps-lock-warning" style="display: none;">
  209. <img src="../images/sign_warning_16x16.png" />Caps lock is on
  210. </div>
  211. </div>
  212. </div>
  213. <div class="control-group">
  214. <label class="control-label" for="Domain">Domain:</label>
  215. <div class="controls div-domain">
  216. <select class="input-xlarge domains" data-bind="value: domain" tabindex="3"></select>
  217. </div>
  218. </div>
  219. <div class="pull-left action-link" style="margin-left: 0 !important;"><small><a class="ldap-action-flip" href="#" tabindex="10">LDAP</a></small></div>
  220. <div class="pull-left action-link"><small><a class="action-flip" href="#" tabindex="4">Forgot your password?</a></small></div>
  221. <button class="btn btn-primary btn-signIn pull-right" tabindex="5">Login</button>
  222. <br style="clear:both;" />
  223. <div class="alert alert-error login-message" style="margin-top:20px;"></div>
  224. <div class="copyright">
  225. Copyright &#169;
  226. <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
  227. </div>
  228. </div>
  229. </form>
  230. <!-- LDAP form -->
  231. <form class="form-horizontal ldapAuth-form" data-bind="with: viewModel_2" autocomplete="off">
  232. <div class="ldapAuth-form-container">
  233. <div style="text-align:left;">
  234. <div>
  235. <div class="control-group">
  236. <div class="control-group">
  237. <label class="visuallyhidden" for="ldapServer">LDAP Server:</label>
  238. <div class="controls div-ldap-domain">
  239. <input type="hidden" class="input-xlarge input-domain" autocomplete="off" tabindex="6" data-bind="value: ldapServer" />
  240. </div>
  241. </div>
  242. <div class="control-group">
  243. <label class="visuallyhidden" for="port">Port:</label>
  244. <div class="controls div-port">
  245. <input type="hidden" class="input-xlarge input-port" autocomplete="off" tabindex="7" data-bind="value: port" />
  246. </div>
  247. </div>
  248. <div class="control-group">
  249. <label class="control-label" for="username">Bind DN or User:</label>
  250. <div class="controls">
  251. <input type="text" class="input-xlarge input-ldapUsername" autocomplete="off" tabindex="8" data-bind="value: ldapUsername" />
  252. </div>
  253. </div>
  254. <div class="control-group">
  255. <label class="control-label" for="password">Bind Password:</label>
  256. <div class="controls password-container">
  257. <input type="password" class="input-xlarge input-ldapPassword" tabindex="9" data-bind="value: ldapPassword" autocomplete="off" />
  258. <div class="caps-lock-warning" style="display: none;">
  259. <img src="../images/sign_warning_16x16.png" />Caps lock is on
  260. </div>
  261. </div>
  262. </div>
  263. </div>
  264. <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>
  265. <button class="btn btn-primary btn-ldap-signIn pull-right" tabindex="11">Login</button>
  266. </div>
  267. </div>
  268. </div>
  269. <br style="clear:both;" />
  270. <div class="alert alert-error login-message" style="margin-top:20px;"></div>
  271. <div class="copyright">
  272. Copyright &#169;
  273. <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
  274. </div>
  275. </form>
  276. <!-- Forgot password form -->
  277. <form class="form-horizontal reset-password-form" data-bind="with: viewModel_1">
  278. <div class="reset-password-form-container">
  279. <div style="text-align:left;">
  280. If you have forgotten your Password Safe credentials, please enter your
  281. username below. Password reset instructions will be sent to your registered
  282. email address.
  283. </div>
  284. <div style="text-align:left; margin-top:2em;">
  285. <div>
  286. <div class="control-group">
  287. <label class="control-label" for="username">Username:</label>
  288. <div class="controls">
  289. <input type="text" class="input-xlarge input-username-forgot" autocomplete="off" tabindex="12" data-bind="value: username" />
  290. </div>
  291. </div>
  292. <div class="pull-left action-link"><small><a class="action-flip" href="#" tabindex="13">Back to Login</a></small></div>
  293. <button class="pull-right btn btn-primary btn-send-password" tabindex="14">Reset Password</button>
  294. </div>
  295. </div>
  296. </div>
  297. <br style="clear:both;" />
  298. <div class="alert alert-error login-message" style="margin-top:20px;"></div>
  299. <div class="copyright">
  300. Copyright &#169;
  301. <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
  302. </div>
  303. </form>
  304. <!-- TwoFactor Auth form-->
  305. <form class="form-horizontal twoFactorAuth-form">
  306. <div class="twoFactorAuth-form-container" style="width:400px; margin:auto;">
  307. <div style="text-align:left; margin-top:2em;">
  308. <div>
  309. <div class="control-group">
  310. <div class="2factorChallenge">re</div>
  311. <br />
  312. <div class="controls" style="margin-left: 0 !important;">
  313. <input type="password" class="input-xlarge input-response" autocomplete="off" tabindex="15" />
  314. </div>
  315. </div>
  316. <div class="pull-left action-link" style="margin-left: 0px !important;"><small><a class="action-flip-cancel" href="#" tabindex="16">Cancel</a></small></div>
  317. <button class="btn btn-primary btn-signIn pull-right" tabindex="17">Login</button>
  318. </div>
  319. </div>
  320. </div>
  321. <br style="clear:both;" />
  322. <div class="alert alert-error login-message" style="margin-top:20px;"></div>
  323. <div class="copyright">
  324. Copyright &#169;
  325. <script>document.write(new Date().getFullYear())</script> BeyondTrust Corporation
  326. </div>
  327. </form>
  328. </div>
  329. </div>
  330. </div>
  331. </div>
  332. <!-- The "404" display for an invalid path/route -->
  333. <div class="page-framework retinaCS-path-not-found" style="display:none;">
  334. <h2><img src="../images/sad_36x36.png" /> 404 Page Not Found</h2>
  335. <div class="alert alert-warning">
  336. The requested page does not exist in the Password Safe application. Please check the URL path
  337. and try again, or <a href="#/home">return to the home page</a>.
  338. </div>
  339. </div>
  340. <!-- The "Not Authorized" display for a page the user doesn't have permission to access. -->
  341. <div class="page-framework retinaCS-not-authorized" style="display:none;">
  342. <h2><img src="../images/lock_36x36.png" /> Not Authorized</h2>
  343. <div class="alert alert-warning" data-bind="visible: !(IsRequestor() || IsApprover() || IsActiveSessionReviewer)">
  344. <p>
  345. You have successfully signed in, but you do not have any of the required Roles to use this
  346. application.
  347. </p>
  348. <p>Please see your Password Safe administrator for more information.</p>
  349. </div>
  350. <div data-bind="visible: !(IsRecordedSessionReviewer() || IsActiveSessionReviewer() || IsAuditor() || IsIsa())">
  351. <div class="alert alert-warning">
  352. <p>You have successfully signed in, but you do not have any of the required Roles to access the requested page.</p>
  353. <p>Please see your Password Safe administrator for more information, or select an action below.</p>
  354. </div>
  355. <div>
  356. <a href="#/request/list" class="btn btn-primary" data-bind="visible: IsRequestor">Submit Request</a>
  357. <a href="#/approve/list" class="btn btn-primary" data-bind="visible: IsApprover">Approve Requests</a>
  358. </div>
  359. </div>
  360. </div>
  361. <!-- The "Application Error" display for a fatal, unhandled error. -->
  362. <div class="page-framework retinaCS-application-error" style="display:none;">
  363. <h2><img src="../images/error_36x36.png" /> Application Error</h2>
  364. <div class="alert alert-warning">
  365. <p>Sorry, but Password Safe has encountered an unexpected error condition and cannot continue.</p>
  366. <p>
  367. Try closing your web browser completely and then re-load Password Safe. If the problem continues,
  368. please contact your Password Safe administrator.
  369. </p>
  370. <div class="error-details"></div>
  371. </div>
  372. </div>
  373.  
  374. <!-- *********************************************** -->
  375. <!-- *********** END: Framework Elements *********** -->
  376. <!-- *********************************************** -->
  377. <div class="application-pages" style="display:none;">
  378. <!-- Page: Request Password -->
  379. <div class="page page-request-password" data-route="request" data-default-view-route="list">
  380. <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>
  381. <div class="views">
  382. <!-- View: Grid of user's current requests. -->
  383. <div class="view view-current-requests" data-route="list">
  384. <script type="text/javascript">
  385. 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;}
  386. 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&&current.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)');}}}}}}
  387. 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)
  388. $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)
  389. $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)
  390. $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)
  391. $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;}
  392. 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;}}}
  393. if(_params["system"]){filterModel().system(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{filterModel().system("");}
  394. if(_params["start"]){filterModel().start(parseDatesForIE8(_params["start"]));}else{filterModel().start("");}
  395. if(_params["end"]){filterModel().end(parseDatesForIE8(_params["end"]));}else{filterModel().end("");}
  396. var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
  397. var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
  398. 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;}
  399. $grid.data("kendoGrid").setDataSource(gridDataSource);}
  400. else{$grid.data("kendoGrid").dataSource.read();}
  401. 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);}
  402. 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>
  403. <script type="text/x-kendo-template" id="TempateUsingRemoteData1">
  404. #=Text#
  405. </script>
  406. <div class="header-container">
  407. <h4>Requests</h4> <!--XY ~ Request Grid Block ~ XY -->
  408. <div class="filter-bar pull-left">
  409. <!--<a href="#/request/accounts" class="btn btn-primary btn-new-request" style="float: left; margin-right: 20px;">New Request</a>-->
  410. <form class="form-inline form-filter">
  411. <div class="pull-left filter-request-status">
  412. <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: buttons">
  413. <button class="btn" data-bind="text: name, css: {active: selected}, click: $parent.selectButton"></button>
  414. </div>
  415. </div>
  416. </form>
  417. </div>
  418. <div class="filter-bar pull-right">
  419. <form class="form-inline form-filter">
  420. <div class="pull-right">
  421. <input class="filter-system" type="text" data-bind="value: system" placeholder="Global Search" />
  422. <button class="btn btn-mini btn-primary btn-filter" type="submit">Search</button>
  423. <!--
  424. <span class="filter-label">Search:</span>
  425. <span class="filter-label">Date Range:</span>
  426. <input class="filter-date-from" style="width:110px;" data-bind="kendoDatePicker: { value: start }" />
  427. <div class="retinaCS-validation-message" style="display:none;">
  428. <em></em>
  429. <div style="display: table">
  430. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: start"></div>
  431. </div>
  432. </div>
  433. to
  434. <input class="filter-date-to" style="width:110px;" data-bind="kendoDatePicker: { value: end }" />
  435. <div class="retinaCS-validation-message" style="display:none;">
  436. <em></em>
  437. <div style="display: table">
  438. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: end"></div>
  439. </div>
  440. </div>
  441. <button class="btn btn-mini btn-primary btn-filter" type="submit">Filter</button>-->
  442. <button class="btn btn-mini btn-clear-filter" type="button">Reset</button>
  443. </div>
  444. </form>
  445. </div>
  446. </div>
  447. <div class="current-requests-grid"></div>
  448. <!-- *** New request button was here
  449. <div class="button-bar"></div>
  450. -->
  451. </div>
  452.  
  453. <!-- View: Details for a request. -->
  454. <div class="view view-request-details" data-route="details">
  455. <script type="text/javascript">
  456. 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)}
  457. 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);}
  458. 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);}
  459. $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>"}]});}
  460. 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);}});}
  461. 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>";}
  462. $(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/>";}
  463. 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;}}
  464. 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="";}
  465. if(approversList[i].FirstName==null){approversList[i].FirstName="";}
  466. if(approversList[i].LastName==null){approversList[i].LastName="";}
  467. if(approversList[i].Email==null){approversList[i].Email="";}
  468. 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("'","\'"));}
  469. html+="</tbody></table>";$node.data("popover").options.content=html;$node.busy(false);$node.popover("show");}
  470. 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());}
  471. $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;}
  472. $viewRoot.find(".container-form-content").css("opacity",0.3)
  473. $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);}}
  474. else showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".container-form-content").css("opacity",1)
  475. $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")
  476. viewModel().smartSize(true);else
  477. 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)
  478. $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);}
  479. var clearInlineError=function clearInlineError(){$viewRoot.find(".request-result").removeClass("alert-error").hide();}
  480. 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>
  481. <div class="panels">
  482. <form class="panel form form-horizontal form-request-details">
  483. <div class="container-form-content">
  484. <div class="request-details">
  485. <h4>Request ID: <span class="form-value-label" data-bind="visible: requestId() > 0, text: requestId"></span></h4>
  486. <div class="section-content">
  487. <div class="control-group">
  488. <span class="control-label">Requested By:</span>
  489. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  490. <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>
  491. <span class="form-value-splitter">on</span> <span class="form-value-label" data-bind="dateString: submittedDate"></span>
  492. </div>
  493. </div>
  494. <div class="control-group">
  495. <span class="control-label">Account:</span>
  496. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  497. <strong><span class="form-value-label" data-bind="text: accountNameFull"></span></strong> on
  498. <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>
  499. </div>
  500. </div>
  501. <div class="control-group">
  502. <span class="control-label" data-bind="visible: remoteDesktopAppID() > 0">Application:</span>
  503. <div class="controls read-only-label" data-bind="visible: remoteDesktopAppID() > 0" style="display: none;">
  504. <strong><span class="form-value-label" data-bind="text: remoteDesktopAppAlias"></span></strong>
  505. </div>
  506. </div>
  507. <div class="control-group">
  508. <span class="control-label">Requested Date:</span>
  509. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  510. <span class="form-value-label" data-bind="text: requestedDateRange"></span><br />
  511. (<span class="form-value-label" data-bind="text: requestedDateHumanized"></span>)
  512. </div>
  513. </div>
  514. <div class="control-group access-type">
  515. <span class="control-label">Requested Access Type:</span>
  516. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  517. <span class="form-value-label" data-bind="text: AccessTypeName"></span>
  518. </div>
  519. </div>
  520. <style type="text/css">
  521. .isSevere {
  522. color: rgb(255, 100, 100) !important;
  523. }
  524. </style>
  525. <div class="control-group access-type">
  526. <span class="control-label">Restricted to Location:</span>
  527. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  528. <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>
  529. </div>
  530. </div>
  531. <div class="control-group">
  532. <span class="control-label">Reason:</span>
  533. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  534. <span class="form-value-label" data-bind="text: reason"></span>
  535. </div>
  536. </div>
  537. <div class="control-group" data-bind="visible: ticketNumber() != null && ticketNumber() != ''" style="display: none;">
  538. <span class="control-label">Ticket Number:</span>
  539. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  540. <span class="form-value-label" data-bind="text: ticketNumber"></span> on <span class="form-value-label" data-bind="text: ticketSystem"></span>
  541. </div>
  542. </div>
  543. <div class="control-group" data-bind="visible:((allowRDPConnectionFlag() || allowRemoteAppRDPConnectionFlag()) && ((approvedDate() != null)))">
  544. <span class="control-label">Screen Resolution:</span>
  545. <div class="controls" data-optional="false">
  546. <select class="input-xlarge rdp-screen-resolution" data-bind="value: resolution">
  547. <option value="640x480">640x480</option>
  548. <option value="800x600">800x600</option>
  549. <option value="1024x768">1024x768</option>
  550. <option value="1280x800">1280x800</option>
  551. <option value="1280x1024">1280x1024</option>
  552. <option value="1366x768">1366x768</option>
  553. <option value="1440x900">1440x900</option>
  554. <option value="1440x1050">1440x1050</option>
  555. <option value="1680x1050">1680x1050</option>
  556. <option value="1920x1080">1920x1080</option>
  557. <option value="1920x1200">1920x1200</option>
  558. <option value="1920x2058">1920x2058</option>
  559. <option value="Maximized">Maximized</option>
  560. </select>
  561. </div>
  562. </div>
  563. <div class="control-group" data-bind="visible:((allowRDPConnectionFlag() || allowRemoteAppRDPConnectionFlag()) && ((approvedDate() != null)))">
  564. <span class="control-label">Smart Sizing:</span>
  565. <div class="controls">
  566. <label class="checkbox">
  567. <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize" />
  568. </label>
  569. </div>
  570. </div>
  571. </div>
  572. </div>
  573.  
  574. <h4 class="section-header">Approval History</h4>
  575. <div class="section-content">
  576. <div class="control-group approvals-required">
  577. <span class="control-label">Approvals Required:</span>
  578. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  579. <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>
  580. </div>
  581. </div>
  582. <div class="approval-history-container">
  583. <div class="approver-response-history-grid"></div>
  584. </div>
  585. </div>
  586.  
  587. <div class="action-buttons">
  588. <!--
  589. , enable: IsClientLocationValid()
  590. -->
  591. <div data-bind="visible: (requestId() > 0 && !isExpired() && approvedDate() != null && approvedDate() != '' && (cancelledDate() == null || cancelledDate() == ''))" style="display:none;">
  592. <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>
  593. <span class="spacer-small"></span>
  594. <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>
  595. <span class="spacer-small"></span>
  596. <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>
  597. <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>
  598. <span class="spacer-small"></span>
  599. <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>
  600. <span class="spacer-small"></span>
  601. <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>
  602. </div>
  603. <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>
  604.  
  605. <div class="alert alert-warning" data-bind="visible: (requestId() > 0 && !isExpired() && (approvedDate() == null || approvedDate() == '') && (cancelledDate() == null || cancelledDate() == ''))" style="display:none;">
  606. This request has not yet been approved.
  607. </div>
  608. <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && !isExpired() && cancelledDate() != null && cancelledDate() != '')" style="display:none;">
  609. This request was cancelled or denied.
  610. </div>
  611. <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && isExpired())" style="display:none;">
  612. This request has expired.
  613. </div>
  614. <div class="alert request-result" style="display:none;"></div>
  615. </div>
  616. <div class="action-links">
  617. <a href="#/request/list" class="btn btn-mini btn-back-to-list">Back to Requests List</a>
  618. </div>
  619. </div>
  620. </form>
  621.  
  622. <div class="panel panel-invalid-parameter" style="display:none;">
  623. <h3>Invalid Request ID</h3>
  624. <div class="alert alert-error">
  625. <p>An invalid Request ID was specified, or you do not have the required permission to view it.</p>
  626. <p>
  627. Please view the <a href="#/request/list">current requests list</a>
  628. and select a request to view.
  629. </p>
  630. </div>
  631. </div>
  632. <div class="panel panel-request-expired" style="display:none;">
  633. <div class="alert alert-success">
  634. <div><b>Password Checked In</b></div>
  635. <p>
  636. The password for the account <strong data-bind="text: accountName"></strong>
  637. on system <strong data-bind="text: systemName"></strong> has been checked in.
  638. </p>
  639. </div>
  640. <div class="section-header">
  641. <a href="#/accounts" class="btn btn-primary">New Request</a><!--#/request/accounts-->
  642. <span class="spacer-small"></span>
  643. <a href="#/request/list" class="btn btn-view-requests">View Your Requests</a>
  644. </div>
  645. </div>
  646. </div>
  647. </div>
  648.  
  649. <!-- View: Password request form. -->
  650. <div class="view view-password-request" data-route="newrequest">
  651. <script type="text/javascript">
  652. 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();}
  653. $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;}
  654. sessionStartClickFunc(startRemoteAppSession);});$viewRoot.find(".btn-start-raSSH-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
  655. sessionStartClickFunc(startRemoteAppSessionSSH);});$viewRoot.find(".btn-start-rdp-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
  656. startRDPSession();});$viewRoot.find(".btn-start-ssh-sessionisa").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
  657. startSSHSession();});$viewRoot.find(".btn-retrieve-password").click(function(){clearError();if(viewModel.errors().length>0){viewModel.errors.showAllMessages();return false;}
  658. 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;}
  659. 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);}
  660. 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');}
  661. 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);}
  662. 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;}
  663. systemID=_params["sId"];}else{isInitialized=false;}
  664. if(isIsa===true){showAccessPolicy=false;var showRDP=false;var showSSH=false;if(isWindows===true){showRDP=true;}
  665. else if(isUnix===true){showSSH=true;}
  666. $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();}
  667. 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();}
  668. 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();}
  669. 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();}
  670. 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(){}});}
  671. $.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);}});}
  672. 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));}
  673. if(isAccessRDP===true&&isWindows===true&&remoteAppID==0){viewModel().addAccessType(new AccessTypeViewModel("rdpaccess",2,"RDP Session",true,false));}
  674. if(isAccessSSH===true&&isUnix===true&&remoteAppID==0){viewModel().addAccessType(new AccessTypeViewModel("sshaccess",4,"SSH Session",true,false));}
  675. if(isAccessibleRemoteApp){viewModel().addAccessType(new AccessTypeViewModel("rasaccess",8,"Application Session",true,false));}
  676. 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;}
  677. 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"]);}
  678. 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);}}
  679. 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"]);}
  680. 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");}}
  681. if(showAccessPolicy){function setTimePickerState(isImmediate){var sp=$("#stPicker").data("kendoTimePicker");if(sp!=null){if(!isImmediate){sp.enable();}else{sp.enable(false);}}}
  682. $(document).on('change','input[name=rbtnIsImmediate]',function(){setTimePickerState(this.value=="1");})
  683. 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);}
  684. 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()},})}
  685. 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()},});}
  686. var renderAccessPolicyUI=function(dateTime,accountId){var m=moment(dateTime).format();$viewRoot.find(".ap-schedule").show();resetAccessPolicyData();getAvailableTimeFrames(accountId,m,sysId).done(renderAPScheduleElememnts).fail(handleError);}
  687. 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;}
  688. $viewRoot.find(".request-result").addClass("alert-error").text(displayMessage).fadeIn(200);}
  689. else showApplicationError(jqXhr);}
  690. function renderDefaultAPUI(data){handleDatesData(data);renderAccessPolicyUI(viewModel().requestedDate(),acntId);}
  691. 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);}
  692. 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;}}
  693. 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);}}
  694. var onSelectDate=function(current_time,$input){viewModel().requestedDate(new Date(current_time));renderAccessPolicyUI(current_time,viewModel().accountId());}
  695. var resetAccessPolicyData=function(){viewModel().ResetAccessTypes();viewModel().APScheduleElements([]);viewModel().requestedAPScheduleId(0);}
  696. 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);}}
  697. $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);}
  698. getDisabledDatesForMonth(acntId,m).done(renderDefaultAPUI).fail(handleError);}
  699. if(viewModel.errors().length>0){viewModel().ticketSystemId.isModified(false);viewModel().ticketSystem.isModified(false);viewModel().ticketNumber.isModified(false);}
  700. 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");}}
  701. $.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("<","&lt;").replace(">","&gt;")+'</option>';}else{options+='<option value="'+this.Id+'">'+this.Name.replace("<","&lt;").replace(">","&gt;")+'</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")
  702. viewModel().smartSize(true);else
  703. viewModel().smartSize(false);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}
  704. $.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");}
  705. 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");}
  706. 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;}
  707. if(displayMessage.indexOf("This account is not available during the requested time because there")>-1){showBooked();}
  708. $viewRoot.find(".request-result").addClass("alert-error").text(displayMessage).fadeIn(200);}
  709. 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);}
  710. 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);}
  711. else showApplicationError(jqXhr);},complete:function(){setFormBusy(false);}});}
  712. 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="";}
  713. if(approvedList[i].FirstName==null){approvedList[i].FirstName="";}
  714. if(approvedList[i].LastName==null){approvedList[i].LastName="";}
  715. if(approvedList[i].Email==null){approvedList[i].Email="";}
  716. 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("'","\'"));}
  717. 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)
  718. $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);}
  719. return{name:viewName,events:events,isInitialized:isInitialized,initialize:initialize,beforeShow:beforeShow,show:show,hide:hide,afterHide:afterHide,resize:resize,showError:showInlineError};};</script>
  720. <div class="panels">
  721. <form class="form-horizontal form-request-password">
  722. <div class="control-group">
  723. <label class="control-label">Account:</label>
  724. <div class="controls read-only-label font-larger" style="font-size:larger;">
  725. <strong><span data-bind="text: accountNameFull"></span></strong>
  726. <span class="form-value-splitter">on</span>
  727. <strong><span data-bind="text: systemName"></span></strong>
  728. <span class="form-value-splitter" data-bind="visible: remoteDesktopAppID()>0">for Application</span>
  729. <strong><span data-bind="visible: remoteDesktopAppID()>0 ,text: remoteDesktopAppAlias"></span></strong>
  730. </div>
  731. </div>
  732. <div class="control-group date-required">
  733. <label class="control-label" for="rbtnIsImmediate">Start Date:</label>
  734. <div class="controls">
  735. <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>
  736. &nbsp;to&nbsp;
  737. <span data-bind="text: requestedEndDate"></span>
  738. </div>
  739. </div>
  740. <div class="control-group ap-schedule">
  741. <label class="control-label">Access Policy Windows:</label>
  742. <div class="controls" data-bind="visible: $root.APScheduleElements().length > 0">
  743. <div id="apSched">
  744. <!-- ko foreach: $root.APScheduleElements -->
  745. <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 />
  746. <!-- /ko -->
  747. </div>
  748. </div>
  749. <div class="controls read-only-label" data-bind="visible: $root.APScheduleElements().length == 0">
  750. <span class="form-value-label">No available windows. Contact your administrator.</span>
  751. </div>
  752. </div>
  753. <div id="timePickers" data-bind="with: currentAPScheduleElement()" class="control-group times">
  754. <label class="control-label">Start Time:</label>
  755. <div class="controls">
  756. <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 -->&nbsp;to&nbsp;<span data-bind="text: $root.EndTimeOnly"></span><!-- /ko --></label><br />
  757. <label class="radio inline"><input name="rbtnIsImmediate" type="radio" data-bind="value: 0, checked: $root.isImmediate, enable: $root.TimeSelectionAvailable" /></label>
  758. <input id="stPicker" data-bind="kendoTimePicker: { value: $root.SelectedStartTime, min: PickerStartTime(), max: PickerEndTime() , interval: stepInterval }" /><!-- ko if: $root.isImmediate() !== 1 -->&nbsp;to&nbsp;<span data-bind="text: $root.EndTimeOnly"></span><!-- /ko -->
  759. </div>
  760. </div>
  761. <div class="control-group requested-duration">
  762. <label class="control-label">Requested Duration:</label>
  763. <div class="controls">
  764. <input id="daySpinner" type="number" class="control-duration duration-days" min="0" max="6" step="1" data-bind="kendoNumericTextBox: {value: durationDays, format: 'n0'}" /> days
  765. <span class="spacer-mini"></span>
  766. <input id="hourSpinner" type="number" class="control-duration duration-hours" min="0" max="23" step="1" data-bind="kendoNumericTextBox: {value: durationHours, format: 'n0'}" /> hours
  767. <span class="spacer-mini"></span>
  768. <input id="minSpinner" type="number" class="control-duration duration-minutes" min="0" max="59" step="5" data-bind="kendoNumericTextBox: {value: durationMinutes, format: 'n0'}" /> minutes
  769. <div class="retinaCS-validation-message" style="display:none;">
  770. <em></em>
  771. <div style="display: table">
  772. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: maxDurationDays"></div>
  773. </div>
  774. </div>
  775. </div>
  776. </div>
  777. <div class="control-group access-type">
  778. <label class="control-label">Access Request:</label>
  779. <div class="controls div-access-type" data-bind="visible: accessTypes().length > 0">
  780. <input type="hidden" id="hiRequestAccessType" data-bind="value: requestAccessTypeStr" />
  781. <!-- ko foreach: $root.accessTypes -->
  782. <label data-bind="css: 'checkbox' + '&nbsp;' + cssClassName()"><input name="rbtnAccessType" type="checkbox" data-bind="value: bitValue(), enable: enabled(), checked: $root.requestAccessTypeStr" /><!-- ko text: title() --><!-- /ko --></label><br />
  783. <!-- /ko -->
  784. </div>
  785. <div class="controls read-only-label" data-bind="visible: accessTypes().length == 0">
  786. <span class="form-value-label">No access request types available. Contact your administrator.</span>
  787. </div>
  788. </div>
  789. <div class="control-group" data-bind="visible:_sessionUserViewModel.AllowAdminSession() == true && IsDomainLinkedAccount">
  790. <label class="control-label" for="multi-system-checkout">Multi-System Checkout:</label>
  791. <div class="controls multi-system-checkout">
  792. <label class="checkbox">
  793. <input type="checkbox" class="chk chk_multi-system-checkout" data-bind="checked: isMultiSystemCheckout" />
  794. Allow this account and request to be used for Admin Sessions
  795. </label>
  796. </div>
  797. </div>
  798. <div class="control-group">
  799. <label class="control-label" for="reason">Reason:</label>
  800. <div class="controls div-reason">
  801. <textarea id="reason" rows="4" class="input-xlarge" data-bind="value: reason"></textarea>
  802. </div>
  803. </div>
  804. <div class="control-group">
  805. <label class="control-label" for="ticketSystem">Ticket System:</label>
  806. <div class="controls div-ticket-systems">
  807. <select class="input-xlarge ticket-systems" data-bind="value: ticketSystemId"></select>
  808. </div>
  809. <div class="retinaCS-validation-message" style="display:none;">
  810. <em></em>
  811. <div style="display: table">
  812. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: ticketSystemDisplay"></div>
  813. </div>
  814. </div>
  815. </div>
  816. <div class="control-group">
  817. <label class="control-label" for="ticketNumber" data-bind="attr: { 'data-optional': ticketSystemId() > 0 ? 'false' : 'true' }">Ticket Number:</label>
  818. <div class="controls div-ticket-number">
  819. <input type="text" class="input-xlarge ticket-number" data-bind="value: ticketNumber" />
  820. </div>
  821. </div>
  822. <div class="control-group">
  823. <label class="control-label lbl-screen-resolutionisa">Screen Resolution:</label>
  824. <div class="controls" data-optional="false">
  825. <select class="input-xlarge rdp-screen-resolutionisa" data-bind="value: resolution">
  826. <option value="640x480">640x480</option>
  827. <option value="800x600">800x600</option>
  828. <option value="1024x768">1024x768</option>
  829. <option value="1280x800">1280x800</option>
  830. <option value="1280x1024">1280x1024</option>
  831. <option value="1366x768">1366x768</option>
  832. <option value="1440x900">1440x900</option>
  833. <option value="1440x1050">1440x1050</option>
  834. <option value="1680x1050">1680x1050</option>
  835. <option value="1920x1080">1920x1080</option>
  836. <option value="1920x1200">1920x1200</option>
  837. <option value="1920x2058">1920x2058</option>
  838. <option value="Maximized">Maximized</option>
  839. </select>
  840. </div>
  841. </div>
  842.  
  843. <div class="control-group smart-size-isa">
  844. <span class="control-label">Smart Sizing:</span>
  845. <div class="controls">
  846. <label class="checkbox">
  847. <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize" />
  848. </label>
  849. </div>
  850. </div>
  851.  
  852. <div class="control-group button-bar2">
  853. <div class="controls">
  854. <div>
  855. <button class="btn btn-primary btn-request-rdpsession">Request RDP Session</button>
  856. <button class="btn btn-primary btn-request-sshsession">Request SSH Session</button>
  857. <button class="btn btn-primary btn-request-password">Request Password</button>
  858. <button class="btn btn-primary btn-request-rasession">Request Application Session</button>
  859. <button class="btn btn-primary btn-submit-request" data-bind="enable: IsValidRequest">Submit Request</button>
  860. <button class="btn btn-success btn-retrieve-password"><i class="icon-eye-open icon-white"></i> Retrieve Password</button>
  861. <button class="btn btn-success btn-start-rdp-sessionisa"><i class="icon-off icon-white"></i> Open RDP Session</button>
  862. <button class="btn btn-success btn-start-ssh-sessionisa"><i class="icon-off icon-white"></i> Open SSH Session</button>
  863. <button class="btn btn-success btn-start-raRDP-sessionisa"><i class="icon-off icon-white"></i> Application Session</button>
  864. <button class="btn btn-success btn-start-raSSH-sessionisa"><i class="icon-off icon-white"></i> Application Session</button>
  865. <a href="#/accounts" id="requestPassword-cancelButton" class="btn">Cancel</a>
  866. </div>
  867. </div>
  868. </div>
  869. <div class="control-group button-bar">
  870. <div class="controls">
  871. <div>
  872. <input type="checkbox" class="chk chk_success chk-record-sessionisa" data-bind="checked: recordSessionForConnectionFlag()" />
  873. <span class="spacer-small"></span>
  874. <label class="control-label lbl-record-session">Record Session:</label>
  875. </div>
  876. </div>
  877. </div>
  878. <div class="alert request-result" style="display:none;"></div>
  879. <div class="blocked-request-container">
  880. <div class="booked-request-table"></div>
  881. </div>
  882. </form>
  883.  
  884. <div class="panel panel-request-successful" style="display:none;">
  885. <div class="alert alert-success">
  886. <div><b>Request Received</b></div>
  887. <p>
  888. Request number <strong data-bind="text: requestId">2</strong> for the release of the password for the account <strong data-bind=" text: accountName"></strong>
  889. on system <strong data-bind="text: systemName"></strong> has been submitted.
  890. </p>
  891. <p>
  892. You should receive email confirmation of the request.
  893. </p>
  894. <a data-bind="attr: { href: '#/request/details/id=' + requestId() }" class="btn btn-success">View Request Details</a>
  895. </div>
  896. <div class="section-header">
  897. <a href="#/accounts" class="btn btn-primary">New Request</a> <!--#/request/accounts-->
  898. <span class="spacer-small"></span>
  899. <a href="#/request/list" class="btn btn-view-requests">View Your Requests</a>
  900. </div>
  901. </div>
  902. </div>
  903. </div>
  904. </div>
  905. </div>
  906.  
  907. <!-- Page: ACCOUNTS -->
  908. <div class="page page-accounts-list" data-route="accounts" data-default-view-route="accounts">
  909. <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>
  910. <div class="views">
  911. <!-- View: List of accounts the user can check-out. -->
  912. <div class="view view-accounts-list" data-route="accounts">
  913. <script type="text/javascript">
  914. 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;}
  915. 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="))
  916. 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('*');}
  917. $(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="))
  918. 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;}
  919. 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);}
  920. 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",});}
  921. 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)}}
  922. var addAllAccountsToBoard=function(dataRows,grid){var arrFavs=[];for(var i=0;i<dataRows.length;i++){var dataitem=dataRows[i];arrFavs.push(getBoardItemFromDataItem(dataitem));}
  923. $.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);}
  924. else showApplicationError(e.xhr);});}
  925. var getFavoriteIdsFromRows=function(dataRows){return $(dataRows).map(function(){return this.FavoriteID;}).get();}
  926. 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);}
  927. 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);}
  928. else showApplicationError(e.xhr);});}
  929. return true;}}
  930. var refreshGrid=function(){$viewRoot.find(".managed-accounts-grid").data("kendoGrid").refresh();}
  931. var getBoardItemFromDataItem=function(dataitem){return new favouriteAccountModel(uid=dataitem.uid,managedAccountDTO=dataitem);}
  932. 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);}
  933. 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);}
  934. else showApplicationError(e.xhr);});}
  935. 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');}}
  936. 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);}}
  937. var updateDataRow=function updateDataRowFunc(dateItem,favoriteId){dateItem.FavoriteID=favoriteId;dateItem.IsFav=favoriteId!=null&&favoriteId>0;}
  938. 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});}
  939. 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});}
  940. 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},});}
  941. 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);}}
  942. $.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("<","&lt;").replace(">","&gt;")+'</option>';}else{options+='<option value="'+this.Id+'">'+this.Name.replace("<","&lt;").replace(">","&gt;")+'</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);}});}
  943. 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);}});}}
  944. 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")
  945. filterModel().selectedAccountRow().smartSize(true);else
  946. filterModel().selectedAccountRow().smartSize(false);},error:function(jqXhr,textStatus,errorThrown){showApplicationError(jqXhr);}});}}
  947. 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");}
  948. 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");}
  949. 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);}});}
  950. 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);}}
  951. var disableResolutionForSSHApplication=function(value){sshApplication=value;$(qlWindow.element).find(".rdp-screen-resolutionisa").attr("disabled",value);$(qlWindow.element).find(".chk_smart_sizing").attr("disabled",value);}
  952. 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();}
  953. 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));}
  954. $(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> '}
  955. 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> '}
  956. 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);}
  957. isApplication=true;}else{isApplication=false;}
  958. html=html+'</span>'}else{html=html+'<span><i class="icon-info-sign icon-black" title="'+dataItem.Location+'"></i> Location Restricted</span>';}
  959. 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>';}
  960. html=html+'<span> - </span>';html=html+'<span><a href="mailto:'+dataItem.EmailAddress+'">'+dataItem.EmailAddress+'</a></span>';}
  961. html=html+'<div><span class="access-policies-booked-titles"> Available after: </span> '
  962. 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);})
  963. $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-rdp-session-ql",function(e){e.preventDefault();qLWindowSaveSession(2,e,2);})
  964. $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-ssh-session-ql",function(e){e.preventDefault();qLWindowSaveSession(4,e,3);})
  965. $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-ra-sessionRDP-ql",function(e){e.preventDefault();qLWindowSaveSession(8,e,4);})
  966. $(qlWindow.element).find(".access-policies-grid").on("click",".btn-start-ra-sessionSSH-ql",function(e){e.preventDefault();qLWindowSaveSession(8,e,5);})
  967. 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));}
  968. 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;}
  969. $(qlWindow.element).find(".request-result").addClass("alert-error").text(displayMessage).fadeIn(200);}
  970. else{qlWindow.close();showApplicationError(jqXhr);}},complete:function(){setQLFormBusy(false,e);}});}}
  971. $(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();}
  972. 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');}
  973. 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);}
  974. 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);}
  975. 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);}
  976. 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);}
  977. 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:"&nbsp;",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:"&nbsp;",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())
  978. return false;if(_sessionUserViewModel.IsIsa())
  979. return false;if(_sessionUserViewModel.IsRequestor())
  980. return true;else
  981. return false;}
  982. var checkIsRequestorOnly=function(){if(_sessionUserViewModel.IsAdministrator())
  983. return false;if(_sessionUserViewModel.IsRequestor())
  984. return true;else
  985. return false;}
  986. 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;}}}
  987. var show=function(){if(_params==null){window.location.href+="/status=Favorites";return;}
  988. 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);}
  989. break;}}}
  990. if(_params["system"]){filterModel().SystemName(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{filterModel().SystemName("");}
  991. if(_params["accountName"]){filterModel().AccountName(_params["accountName"]);}else{filterModel().AccountName("");}
  992. 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);}
  993. else showApplicationError(e.xhr);}});if(_params["reset"]){accGridDataSource._filter=null;}
  994. $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;}}
  995. if(hideDirectConnectColumn()){grid.hideColumn("IsShowDirectConnect");}else{grid.showColumn("IsShowDirectConnect");}
  996. if(checkIsRequestorOnly()){grid.hideColumn("IsIsaAccess");grid.showColumn("IsShowQuickLaunch");}else{grid.showColumn("IsIsaAccess");grid.hideColumn("IsShowQuickLaunch");}
  997. if(filterModel().applySearch()&&filterModel().SystemName()){if(view.length===0){msg="<p>Your search returned 0 results.</p>";}
  998. 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>";}
  999. gridNoDataMsgDisplay(e,msg);if($viewRoot.find('.overlay')&&$viewRoot.find('.overlay').is(":visible")){$grid.find("#favMaster").addClass("disabled");}else{$grid.find("#favMaster").removeClass("disabled");}
  1000. if(grid.dataSource.transport.options!=undefined&&view.length>0){var favs=getFavoritesFromDataRows(grid.dataSource.data()).length;setMasterFavoriteState($grid.find("#favMaster"),!(favs==view.length));}
  1001. 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."});}
  1002. 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)
  1003. return;e.stopPropagation();grid.find('a.infoIcon').not(this).popover('hide');var popover=$(this).data('popover');if($('.popover').is(":visible")){closeGridPopover(popover);return false;}
  1004. 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">&times;</span></button>').click(function(){closeGridPopover(popover);});$('.popover-title',$tip).append(close);});}
  1005. 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);}}
  1006. return rows;}
  1007. 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');}}
  1008. 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>
  1009. <script id="tmpl-DirectConnect-template" type="text/x-kendo-template">
  1010. # if (IsShowDirectConnect) { #
  1011. <a class="gridicon download" title="Download RDP Direct Connect file" href="\#"></a>
  1012. # } else{ #
  1013. <span class="gridicon download disabled" title="RDP Direct Connect is only available for Windows-based systems"></span>
  1014. # } #
  1015. </script>
  1016. <script id="tmpl-oneClick-template" type="text/x-kendo-template">
  1017. # if(!IsIsaAccess){ #
  1018. # if(IsShowQuickLaunch){ #
  1019. <button class="btn onecl qlGridButtonFinger" title="OneClick Launch"></button>
  1020. # } else{ #
  1021. <span class="btn disabled onecl qlGridButtonFinger" title="OneClick Not Available"></span>
  1022. #} #
  1023. #} #
  1024. </script>
  1025. <script id="tmpl-AccountName-template" type="text/x-kendo-template">
  1026. # if (AccountDescription) { #
  1027. <span>#= AccountName #</span>
  1028. <a href="\#" class="gridicon infoIcon" data-selector="true" data-container="body" title="Click for description" data-toggle="popover"></a>
  1029. # } else{ #
  1030. <span>#= AccountName #</span>
  1031. <span class="gridicon infoIcon disabled" title="no description available"></span>
  1032. # } #
  1033. </script>
  1034. <script id="tmpl-Status-template" type="text/x-kendo-template">
  1035. <span class="level #= getStatusClass(AvailableRequests, MaxConcurrentRequests) #"></span>
  1036. <span class="display">#= StatusString #</span>
  1037. </script>
  1038. <script id="tmpl-Favorite-template" type="text/x-kendo-template">
  1039. <a title="#= IsFav ? 'remove from Favorites' : 'add to Favorites'#" class="#= IsFav ? 'favlink filled' : 'favlink' # " href="\#"></a>
  1040. </script>
  1041. <div class="header-container">
  1042. <h4>Accounts</h4>
  1043. <div class="instructions">
  1044. 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.
  1045. </div>
  1046. <div class="filter-bar pull-left">
  1047. <form class="form-inline form-filter">
  1048. <div class="pull-left filter-request-status">
  1049. <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: buttons">
  1050. <button class="btn" data-bind="text: name, css: cssClass, click: $parent.selectButton"></button>
  1051. </div>
  1052. </div>
  1053. </form>
  1054. </div>
  1055. <div class="filter-bar pull-right" data-bind="visible: (PlatformType() != AccountPlatformTypeEnum.FAVORITES && PlatformType() != AccountPlatformTypeEnum.RECENTLYUSED)">
  1056. <form class="form-inline form-filter">
  1057. <div class="pull-right">
  1058. <input class="filter-system" type="text" data-bind="value: SystemName" placeholder="Global Search" />
  1059. <button class="btn btn-mini btn-primary btn-filter" type="submit">Search</button>
  1060. <button class="btn btn-mini btn-clear-filter" type="button">Reset</button>
  1061. </div>
  1062. </form>
  1063. </div>
  1064. </div>
  1065. <div class="alert request-result" style="display:none;"></div>
  1066. <div id="AccountsGrid" class="managed-accounts-grid" data-model="accountsGridSourceModel" data-bind="source: accountsSource, events: { dataBound: OnDataBound }"></div>
  1067. <div id="managed-accounts-grid-popup"></div>
  1068. <!--QuickLaunch popup window-->
  1069. <div id="qlWindow" style="display:none;" data-bind="with:selectedAccountRow()">
  1070. <form class="form-horizontal form-request-passwordQL">
  1071. <div class="control-group requested-duration">
  1072. <label class="control-label">Requested Duration:</label>
  1073. <div class="controls">
  1074. <input id="daySpinner" type="number" class="control-duration duration-days" min="0" max="6" step="1" data-bind="kendoNumericTextBox: {value: durationDays, format: 'n0'}" /> days
  1075. <span class="spacer-mini"></span>
  1076. <input id="hourSpinner" type="number" class="control-duration duration-hours" min="0" max="23" step="1" data-bind="kendoNumericTextBox: {value: durationHours, format: 'n0'}" /> hours
  1077. <span class="spacer-mini"></span>
  1078. <input id="minSpinner" type="number" class="control-duration duration-minutes" min="0" max="59" step="5" data-bind="kendoNumericTextBox: {value: durationMinutes, format: 'n0'}" /> minutes
  1079. <div class="retinaCS-validation-message" style="display:none;">
  1080. <em></em>
  1081. <div style="display: table">
  1082. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: maxDurationDays"></div>
  1083. </div>
  1084. </div>
  1085. <span class="spacer-mini"></span>
  1086. <button class="btn btn-primary btn-submit-recheck">Recheck</button>
  1087. </div>
  1088. </div>
  1089. <div class="control-group access-policies-grid-container">
  1090. <div class="access-policies-grid"></div>
  1091. <div class="access-policies-booked-grid"></div>
  1092. </div>
  1093. <div class="control-group">
  1094. <label class="control-label lbl-screen-resolutionisa">Screen Resolution:</label>
  1095. <div class="controls" data-optional="false">
  1096. <select class="input-xlarge rdp-screen-resolutionisa" data-bind="value: resolution">
  1097. <option value="640x480">640x480</option>
  1098. <option value="800x600">800x600</option>
  1099. <option value="1024x768">1024x768</option>
  1100. <option value="1280x800">1280x800</option>
  1101. <option value="1280x1024">1280x1024</option>
  1102. <option value="1366x768">1366x768</option>
  1103. <option value="1440x900">1440x900</option>
  1104. <option value="1440x1050">1440x1050</option>
  1105. <option value="1680x1050">1680x1050</option>
  1106. <option value="1920x1080">1920x1080</option>
  1107. <option value="1920x1200">1920x1200</option>
  1108. <option value="1920x2058">1920x2058</option>
  1109. <option value="Maximized">Maximized</option>
  1110. </select>
  1111.  
  1112. <span class="spacer-mini"></span>
  1113. <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize" />
  1114. <span>Smart Sizing</span>
  1115. </div>
  1116. </div>
  1117.  
  1118. <div class="control-group">
  1119. <label class="control-label" for="reason">Reason:</label>
  1120. <div class="controls div-reason">
  1121. <textarea id="qlReason" name="reason" rows="2" class="input-xlarge" data-bind="value: reason"></textarea>
  1122. </div>
  1123. </div>
  1124. <div class="control-group">
  1125. <label class="control-label" for="ticketSystem">Ticket System:</label>
  1126. <div class="controls div-ticket-systems">
  1127. <select class="input-xlarge ticket-systems" name="ticketSystem" data-bind="value: ticketSystemId"></select>
  1128. </div>
  1129. <div class="retinaCS-validation-message" style="display:none;">
  1130. <em></em>
  1131. <div style="display: table">
  1132. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: ticketSystemDisplay"></div>
  1133. </div>
  1134. </div>
  1135. </div>
  1136. <div class="control-group">
  1137. <!-- data-bind="visible: ticketSystemId() != 0" -->
  1138. <label class="control-label" for="ticketNumber" data-bind="attr: { 'data-optional': ticketSystemId() > 0 ? 'false' : 'true' }">Ticket Number:</label>
  1139. <div class="controls div-ticket-number">
  1140. <input type="text" name="ticketNumber" class="input-xlarge ticket-number" data-bind="value: ticketNumber" />
  1141. </div>
  1142. </div>
  1143. <div class="alert request-result" style="display:none;"></div>
  1144. </form>
  1145. </div>
  1146. </div>
  1147. </div>
  1148. </div>
  1149. <!-- Page: Approve Requests -->
  1150. <div class="page page-approve-requests" data-route="approve" data-default-view-route="list">
  1151. <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>
  1152. <div class="views">
  1153. <!-- View: Grid of current pending requests. -->
  1154. <div class="view view-pending-requests" data-route="list">
  1155. <script type="text/javascript">
  1156. 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;}
  1157. 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&nbsp;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)
  1158. $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)
  1159. $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)
  1160. $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)
  1161. $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;}
  1162. 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;}}}
  1163. if(_params["system"]){filterModel().system(_params["system"]);}else{filterModel().system("");}
  1164. if(_params["start"]){filterModel().start(parseDatesForIE8(_params["start"]));}else{filterModel().start("");}
  1165. if(_params["end"]){filterModel().end(parseDatesForIE8(_params["end"]));}else{filterModel().end("");}
  1166. var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
  1167. var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
  1168. 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);}
  1169. else showApplicationError(e.xhr);}});if(_params["reset"]){gridDataSource._filter=null;}
  1170. $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>
  1171. <!--<script type="text/x-kendo-template" id="TempateUsingRemoteData">
  1172. #=Text#
  1173. </script>-->
  1174. <div class="header-container">
  1175. <h4>Release Requests</h4>
  1176. <div class="filter-bar pull-left">
  1177. <form class="form-inline form-filter">
  1178. <div class="pull-left filter-request-status">
  1179. <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: buttons">
  1180. <button class="btn" data-bind="text: name, css: {active: selected}, click: $parent.selectButton"></button>
  1181. </div>
  1182. </div>
  1183. </form>
  1184. </div>
  1185. <div class="filter-bar pull-right">
  1186. <form class="form-inline form-filter">
  1187. <div class="pull-right">
  1188. <input class="filter-system" type="text" data-bind="value: system" placeholder="Global Search" />
  1189. <button class="btn btn-mini btn-primary btn-filter" type="submit">Search</button>
  1190. <button class="btn btn-mini btn-clear-filter" type="button">Reset</button>
  1191. </div>
  1192. </form>
  1193. </div>
  1194. </div>
  1195. <div class="alert request-result" style="display:none;"></div>
  1196. <div class="password-release-requests-grid"></div>
  1197. </div>
  1198.  
  1199. <!-- View: Request approval form. -->
  1200. <div class="view view-approval-form" data-route="details">
  1201. <script type="text/javascript">
  1202. 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;}
  1203. approvalModel().response(true);onApproveClick(e.currentTarget);});$viewRoot.find(".btn-deny").click(function(){if(approvalModel.errors().length>0){approvalModel.errors.showAllMessages();return false;}
  1204. 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);}
  1205. 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);}
  1206. else showApplicationError(jqXhr);$(btn).busy(false);},complete:function(){$viewRoot.find(".link-change-response").attr("disabled",false);$(btn).attr("disabled",false);$(btn).busy(false);}});}
  1207. 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"}]});}
  1208. 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);}
  1209. else showApplicationError(jqXhr);$node.busy(false);}});}
  1210. 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/>";}
  1211. 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;}}
  1212. 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="";}
  1213. if(approversList[i].FirstName==null){approversList[i].FirstName="";}
  1214. if(approversList[i].LastName==null){approversList[i].LastName="";}
  1215. if(approversList[i].Email==null){approversList[i].Email="";}
  1216. 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("'","\'"));}
  1217. html+="</tbody></table>";$node.data("popover").options.content=html;$node.busy(false);$node.popover("show");}
  1218. 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)
  1219. $viewRoot.find(".approver-response-history-grid").data("kendoGrid").setDataSource(new kendo.data.DataSource());if(approvalModel!=null){approvalModel().comment("");approvalModel().comment.isModified(false);}
  1220. $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;}
  1221. $viewRoot.find(".container-form-content").css("opacity",0.3)
  1222. $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);}
  1223. else showApplicationError(jqXhr);},complete:function(){$viewRoot.find(".container-form-content").css("opacity",1)
  1224. $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);}
  1225. 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);}
  1226. 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)
  1227. $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())
  1228. return true;else
  1229. return false;}</script>
  1230. <div class="panels">
  1231. <form class="form form-horizontal form-approve-request">
  1232. <div class="container-form-content">
  1233. <div class="request-details">
  1234. <h4>Request ID: <span class="form-value-label" data-bind="visible: requestId() > 0, text: requestId"></span></h4>
  1235. <div class="section-content">
  1236. <div class="control-group">
  1237. <span class="control-label">Requested By:</span>
  1238. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1239. <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>
  1240. <span class="form-value-splitter">on</span> <span class="form-value-label" data-bind="dateString: submittedDate"></span>
  1241. </div>
  1242. </div>
  1243. <div class="control-group">
  1244. <span class="control-label">Account:</span>
  1245. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1246. <strong><span class="form-value-label" data-bind="text: accountName"></span></strong> on
  1247. <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>
  1248. <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>
  1249. </div>
  1250. </div>
  1251. <div class="control-group">
  1252. <span class="control-label" data-bind="visible: remoteDesktopAppID() > 0">Application:</span>
  1253. <div class="controls read-only-label" data-bind="visible: remoteDesktopAppID() > 0" style="display: none;">
  1254. <strong><span class="form-value-label" data-bind="text: remoteDesktopAppAlias"></span></strong>
  1255. </div>
  1256. </div>
  1257. <div class="control-group">
  1258. <span class="control-label">Requested Date:</span>
  1259. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1260. <span class="form-value-label" data-bind="text: requestedDateRange"></span><br />
  1261. (<span class="form-value-label" data-bind="text: requestedDateHumanized"></span>)
  1262. </div>
  1263. </div>
  1264. <div class="control-group access-type">
  1265. <span class="control-label">Requested Access Types:</span>
  1266. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1267. <span class="form-value-label" data-bind="text: AccessTypeName"></span>
  1268. </div>
  1269. </div>
  1270. <div class="control-group">
  1271. <span class="control-label">Reason:</span>
  1272. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1273. <span class="form-value-label" data-bind="text: reason"></span>
  1274. </div>
  1275. </div>
  1276. <div class="control-group" data-bind="visible: ticketNumber() != null && ticketNumber() != ''">
  1277. <span class="control-label">Ticket Number:</span>
  1278. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1279. <span class="form-value-label" data-bind="text: ticketNumber"></span> on <span class="form-value-label" data-bind="text: ticketSystem"></span>
  1280. </div>
  1281. </div>
  1282. </div>
  1283. </div>
  1284.  
  1285. <h4 class="section-header">Approval History</h4>
  1286. <div class="section-content">
  1287. <div class="control-group">
  1288. <span class="control-label approvals-required">Approvals Required:</span>
  1289. <div class="controls read-only-label" data-bind="visible: requestId() > 0" style="display: none;">
  1290. <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>
  1291. </div>
  1292. </div>
  1293. <div class="approval-history-container">
  1294. <div class="approver-response-history-grid"></div>
  1295. </div>
  1296. </div>
  1297.  
  1298. <h4 class="section-header">Action</h4>
  1299. <div class="section-action">
  1300. <div data-bind="visible: (requestId() > 0 && isApprovable() || isCancellable())" style="display:none;">
  1301. <div class="section-content request-response">
  1302. <div class="response-slider-container" data-bind="stopBindings: true">
  1303. <div class="response-panel-slider">
  1304. <!-- The comment and approve/deny panel -->
  1305. <div class="response-writable pull-left">
  1306. <div class="pull-left response-comment">
  1307. <label class="control-label pull-left label-comment" for="comment">Comment:</label>
  1308. <div class="pull-left" style="margin-left:1em;">
  1309. <textarea name="comment" rows="4" class="input-xlarge" data-bind="value: comment"></textarea>
  1310. </div>
  1311. </div>
  1312. <div class="pull-left button-panel">
  1313. <div class="btn-approve-container" data-bind="visible: isApprovable()">
  1314. <button class="btn btn-success btn-large btn-approve"><i class="icon-ok icon-white"></i> Approve</button>
  1315. </div>
  1316. <div class="btn-deny-container" data-bind="visible: isCancellable()">
  1317. <button class="btn btn-danger btn-deny"><i class="icon-ban-circle icon-white"></i> Deny/Cancel</button>
  1318. </div>
  1319. <div class="btn-session_unlock-container" data-bind="visible: isCancellable() && isLocked() && checkISA() && (AccessTypeName() == 'RDP' || AccessTypeName() == 'SSH' || AccessTypeName() == 'Application Session')">
  1320. <button class="btn btn-danger btn-session_unlock"><i class="icon-play icon-white"></i> Unlock Request</button>
  1321. </div>
  1322. <div class="btn-session_lock-container" data-bind="visible: isCancellable() && !isLocked() && checkISA() && (AccessTypeName() == 'RDP' || AccessTypeName() == 'SSH' || AccessTypeName() == 'Application Session')">
  1323. <button class="btn btn-danger btn-session_lock"><i class="icon-pause icon-white"></i> Lock Request</button>
  1324. </div>
  1325. </div>
  1326. </div>
  1327. <!-- The confirm action panel -->
  1328. <div class="response-confirm pull-left">
  1329. <div style="text-align: center">
  1330. <span data-bind="text: comment"></span>
  1331. </div>
  1332. <div class="confirm-button-container">
  1333. <button class="btn btn-danger btn-large btn-confirm-deny" data-bind="visible: response() == false">Confirm<br />Deny/Cancel</button>
  1334. </div>
  1335. <!--<div class="cancel-confirm-link">
  1336. <a class="link-change-response" href="#"><i class="icon-arrow-left"></i> Change your response</a>
  1337. </div>-->
  1338. </div>
  1339. </div>
  1340. </div>
  1341. </div>
  1342. </div>
  1343. <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && !isExpired() && !isApprovable() && !isCancellable())" style="display:none;">
  1344. This request cannot be approved or denied.
  1345. </div>
  1346. <div class="alert alert-danger" data-bind="visible: (requestId() > 0 && isExpired())" style="display:none;">
  1347. This request has expired.
  1348. </div>
  1349. </div>
  1350. <div class="section-header">
  1351. <button class="btn btn-mini btn-back-to-list">Back to Requests List</button>
  1352. </div>
  1353. </div>
  1354. <div class="alert request-result" style="display:none;"></div>
  1355. </form>
  1356. <div class="panel panel-response-successful" style="display:none; ">
  1357. <div class="alert alert-success">
  1358. <div><b>Response Recorded</b></div>
  1359. <p>
  1360. You have
  1361. <span class="label label-success" style="display:none;">Approved</span>
  1362. <span class="label label-important" style="display:none;">Denied/Canceled</span>
  1363. the following request:<br /><br />
  1364. <span class="field-label">Request Id:</span> <strong data-bind="text: requestId"></strong><br />
  1365. <span class="field-label">User:</span> <strong data-bind="text: requestedByName"></strong><br />
  1366. <span class="field-label">Account:</span> <strong data-bind="text: accountName"></strong><br />
  1367. <span class="field-label">System:</span> <strong data-bind="text: systemName"></strong>
  1368. </p>
  1369. </div>
  1370. <div class="section-header">
  1371. <a href="#/approve/list" class="btn">View Pending Requests</a>
  1372. </div>
  1373. </div>
  1374. <div class="panel panel-invalid-parameter" style="display:none;">
  1375. <h3>Invalid Request ID</h3>
  1376. <div class="alert alert-error">
  1377. <p>An invalid Request ID was specified, or you do not have the required permission to view it.</p>
  1378. <p>
  1379. Please view the <a href="#/approve/list">pending requests list</a>
  1380. and select a request to view.
  1381. </p>
  1382. </div>
  1383. </div>
  1384. </div>
  1385. </div>
  1386. </div> <!-- Views -->
  1387. </div> <!-- Page -->
  1388. <!-- Page: Replay Sessions -->
  1389. <div class="page page-replay-sessions" data-route="replay" data-default-view-route="list">
  1390. <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>
  1391. <div class="views">
  1392. <!-- View: Grid of session recordings. RDP SSH -->
  1393. <div class="view view-session-monitoring" data-route="list">
  1394. <script type="text/javascript">
  1395. 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");}
  1396. 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('...');}
  1397. clearDurationIntervals(replayDurationIntervals,false);if(e.userTriggered&&(viewModel.selectedSession().inEditMode()==true)){refreshPlaybackGrid();}
  1398. viewModel.selectedSession().inEditMode(false);viewModel.selectedSession().showOutputKeystrokes(false);}
  1399. 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);}}
  1400. 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);},}
  1401. 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();});}
  1402. 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);}}}
  1403. 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));}
  1404. 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;}
  1405. else{line=testLine;}}
  1406. context.fillText(line,x,y);y+=lineHeight;}}
  1407. 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);}
  1408. 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;}
  1409. 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);}}
  1410. function calculateProgressClickOffset(clickXCoord,leftOffset,barTWidth,duration){var x=clickXCoord-leftOffset;if(x<0){x=0;}
  1411. var percentWidth=convertPositionToPercentOfWidth(x,barTWidth);return convertPercentToOffset(percentWidth,duration);}
  1412. function convertPercentToOffset(widthPercent,duration){return((widthPercent/100)*duration)*1000;}
  1413. function convertPositionToPercentOfWidth(xCoord,totalWidth){return((xCoord/totalWidth)*100);}}
  1414. 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;}}
  1415. else showApplicationError(jqXhr);}).done(function(){refreshPlaybackGrid();});}
  1416. 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;}}
  1417. else showApplicationError(jqXhr);}).done(function(){rWindowData.close();refreshPlaybackGrid();});}
  1418. function onBtnPlaySessionClick(){var offset=0;$.when(viewModel.selectedSession().play(null)).then(function(){setFormBusy(false);if(!viewModel.selectedSession().playAuditCommitted()){savePlaybackAudit();viewModel.selectedSession().playAuditCommitted(true);}})}
  1419. 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.");}}
  1420. function onBtnSaveReplayStateClick(){if(viewModel.selectedSession().errors().length>0){viewModel.selectedSession().errors.showAllMessages();return false;}
  1421. 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;}}
  1422. else showApplicationError(jqXhr);}).done(function(){refreshPlaybackGrid();});}else{refreshPlaybackGrid();}}
  1423. _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&nbsp;Started",filterable:{ui:"datetimepicker",extra:true}},{field:"SessionEndTime",format:"{0:g}",title:"Session&nbsp;Ended",filterable:{ui:"datetimepicker",extra:true}},{field:"Duration",title:"Duration&nbsp;(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)
  1424. $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)
  1425. $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)
  1426. $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)
  1427. $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;}
  1428. 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;}}}
  1429. if(_params["system"]){viewModel.filterModel().system(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{viewModel.filterModel().system("");}
  1430. if(_params["keystrokeCommand"]){viewModel.filterModel().keystrokeCommand(_params["keystrokeCommand"]);$viewRoot.find(".filter-keystroke").val(_params["keystrokeCommand"]);}else{viewModel.filterModel().keystrokeCommand("");viewModel.filterModel().isKeystrokeSearch(false);}
  1431. if(_params["start"]){viewModel.filterModel().start(parseDatesForIE8(_params["start"]));}else{viewModel.filterModel().start("");}
  1432. if(_params["end"]){viewModel.filterModel().end(parseDatesForIE8(_params["end"]));}else{viewModel.filterModel().end("");}
  1433. var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
  1434. var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
  1435. 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"});}
  1436. 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;}
  1437. 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);}
  1438. 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)
  1439. return;e.stopPropagation();grid.find('a.infoIcon').not(this).popover('hide');var popover=$(this).data('popover');if($('.popover').is(":visible")){closeGridPopover(popover);return false;}
  1440. 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">&times;</span></button>').click(function(){closeGridPopover(popover);});$('.popover-title',$tip).append(close);});}
  1441. 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);}
  1442. viewModel.selectedUid(curDI.uid);}
  1443. 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");}
  1444. function removeSelectedState(grid){$(grid)[0].table.find(".k-state-selected").removeClass("k-state-selected");}
  1445. 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");}}}}
  1446. function rowChange(gridData,row){if(!row){row=gridData.select();}else{gridData.select(row);}
  1447. var isOpen=rWindowData.options.visible;if(rWindowData!=undefined&&isOpen){rWindowData.close();}
  1448. expandCollapseRow(row,gridData);}
  1449. 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);}}}
  1450. function getCurrentDataItem(gridDataRow){return gridDataRow.sender.dataItem(gridDataRow.sender.select());}
  1451. function generateSessionModel(gridDataRow){return ko.validatedObservable(new MonitoredSessionViewModel(gridDataRow))();}
  1452. function setSelectedSessionModel(monitoredSessionModel){viewModel.selectedSession(monitoredSessionModel);}
  1453. 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;}
  1454. 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",});}
  1455. 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",});}
  1456. 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);}
  1457. else showApplicationError(jqXhr);})}
  1458. var savePlaybackAudit=function(){if(viewModel.selectedSession().errors().length>0){viewModel.selectedSession().errors.showAllMessages();return false;}
  1459. 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;}}
  1460. else showApplicationError(jqXhr);})}
  1461. 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(){})}
  1462. function initializePlaybackHeartbeat(token){setTimeout(function(){pushPlaybackInterval(500,playbackHeartbeatFunc,token+'_HB');},2000);}
  1463. 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);})}
  1464. 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)}
  1465. function updateProgressBar(animate,progressBarElement,durationInMs,elapsedTime,replayStateEnum){clearInterval(handle);var curWidth=progressBarElement.style.width;if(curWidth==''){curWidth=0;}else{curWidth=parseFloat(curWidth);}
  1466. if(replayStateEnum==RemoteSessionStateENUM.PAUSED){return false;}
  1467. else if(replayStateEnum==RemoteSessionStateENUM.CLOSING){if(curWidth<100){animateWidth(progressBarElement,curWidth,100,100);return false;}}
  1468. 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;}
  1469. if(animate==true){animateWidth(progressBarElement,curWidth,_percentComplete,700);}else{progressBarElement.style['width']=_percentComplete+"%";}}}
  1470. 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;}
  1471. object.style['width']=value+"%";if(value>=end_value){clearInterval(handle);}},1/frame_rate);}
  1472. 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);}
  1473. rWindowData.element.find('#progress_'+thetoken+' .plTotalDuration').html(getHumanReadableTime(duration));rWindowData.center().open();})}
  1474. 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>';}
  1475. KeystrokesController={Initialize:function(){initializeKeystrokesUI();},ClearSelection:function(dt){clearSelectedKeystroke(dt);},SelectKeystroke:function(row){onKeyStrokeClick(row)},ShowTimestamp:function(show){onTimestampCheckboxChange(show);},ShowStandardOutput:function(show){onKeyStrokeCheckboxClick(show);}}
  1476. 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;}}
  1477. 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));;}});}
  1478. 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();}}
  1479. 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>';}
  1480. 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");}
  1481. 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();}
  1482. if(api.page.info().pages<=1){pagination.hide();}
  1483. else{pagination.show();}}
  1484. 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';}
  1485. if(isSelected){row.className+=" k-state-selected";}}
  1486. 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();})
  1487. 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);});}
  1488. var onKeyStrokeHover=function(row,isHover){if(isHover){$(row).addClass("k-state-hover");}else{$(row).removeClass("k-state-hover");}}}
  1489. var onKeyStrokeCheckboxClick=function(show){var dt=rWindowData.element.find('#keystrokes').dataTable();if(show){viewModel.selectedSession().showOutputKeystrokes(true);}else{viewModel.selectedSession().showOutputKeystrokes(false);}
  1490. dt.fnFilter('',0,true,false);}
  1491. var onTimestampCheckboxChange=function(show){var dt=rWindowData.element.find('#keystrokes').dataTable();if(show){dt.$('span.kstime').removeClass("inactive");}else{dt.$('span.kstime').addClass("inactive");}}
  1492. var toggleSelectedKeystroke=function(target){var dt=rWindowData.element.find('#keystrokes').dataTable();KeystrokesController.ClearSelection(dt);$(target).addClass('k-state-selected');}
  1493. var onKeyStrokeClick=function(row){var a=$(row).children().children('a');if(a.attr("disabled")){return false;}
  1494. toggleSelectedKeystroke(row);var ofs=a.attr('id');PlaybackController.Play(ofs);updateProgressBar(false,rWindowData.element.find("#progress")[0],viewModel.selectedSession().duration()*1000,ofs);}
  1495. var clearSelectedKeystroke=function(dt){if(dt==null){dt=rWindowData.element.find('#keystrokes').dataTable();}
  1496. dt.$('tr.k-state-selected').removeClass('k-state-selected');}
  1497. 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&timestamp='+new Date().getTime()+'&anticsrftoken='+_antiCSRFToken);}},originalToken+'_RDP');},1000)}
  1498. 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)}
  1499. 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]);}
  1500. 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);}}
  1501. 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>
  1502. <script id="tmpl-Node" type="text/x-kendo-template">
  1503. # if (IsLocal == false) { #
  1504. <a href="\#" class="infoIcon" data-selector="true" data-container="body" title="Node Information" data-toggle="popover"></a>
  1505. #} #
  1506. <span>#= AgentName #</span>
  1507. </script>
  1508. <div class="header-container">
  1509. <h4>Recorded RDP/SSH Sessions</h4>
  1510. <!--========== START JS template for Replay Grid's inline area START ==============================-->
  1511. <script id="replay-detail-template" type="text/x-kendo-template">
  1512. <div class="session-expanded self_clear">
  1513. # if (IsLocal) { #
  1514. <div class="self_clear">
  1515. <div class="first">
  1516. #if (Protocol == 'RDP') {#
  1517. <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;" />
  1518. #} else {#
  1519. <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;" />
  1520. #}#
  1521. </div>
  1522. <div class="second">
  1523. <span>AssetName: <b>#=AssetName#</b></span><br />
  1524. <span>Requestor: <b>#=UserName#</b></span><br />
  1525. Duration:<b><span id="placeholder_time_#=Token#" class="placeholder_time_#=Token#">#= getHumanReadableTime(Duration) #</span></b><br />
  1526. <span>Resolution: <b>#=Resolution#</b></span><br />
  1527. #if (ArchiveStatus == 0) {#
  1528. <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>
  1529. #} else {#
  1530. #if (ArchiveStatus == 1 || ArchiveStatus == 4 || ArchiveStatus == 5 || ArchiveStatus == 6) {#
  1531. <button class="btn btn-unarchive-session" data-toggle="dropdown"><i class="icon-share icon-white"></i> Restore Session</button>
  1532. # } #
  1533. #}#
  1534. </div>
  1535. <div class="last">
  1536. <textarea readonly="readonly">#= ReviewHistoryComments #</textarea>
  1537. </div>
  1538. </div>
  1539. #if (ArchiveStatus == 2) {#
  1540. <div class="archiveStatusMsg msg-restoring-session alert">A request has been made to restore the session.</div>
  1541. #}#
  1542. #if (ArchiveStatus == 3) {#
  1543. <div class="archiveStatusMsg msg-archiving-session alert">Session is being archived...</div>
  1544. #}#
  1545. #if (ArchiveStatus == 4) {#
  1546. <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>
  1547. #}#
  1548. #if (ArchiveStatus == 5) {#
  1549. <div class="archiveStatusMsg msg-archive-offline-session alert-error">Could not retrieve session. Repository is offline, contact the administrator, or try again.</div>
  1550. #}#
  1551. #if (ArchiveStatus == 6) {#
  1552. <div class="archiveStatusMsg msg-archive-unknown-session alert-error">Could not retrieve session. Unknown error from repository, contact the administrator, or try again.</div>
  1553. #}#
  1554. # } else { #
  1555. <div class="self_clear">
  1556. <div class="first">
  1557. #if (Protocol == 'RDP') {#
  1558. <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;" />
  1559. #} else {#
  1560. <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;" />
  1561. #}#
  1562. </div>
  1563. <div class="second">
  1564. <span>AssetName: <b>#=AssetName#</b></span><br />
  1565. <span>Requestor: <b>#=UserName#</b></span><br />
  1566. Duration:<b><span id="placeholder_time_#=Token#" class="placeholder_time_#=Token#">#= getHumanReadableTime(Duration) #</span></b><br />
  1567. <span>Resolution: <b>#=Resolution#</b></span><br />
  1568. <div class="alert alert-info">
  1569. <div class="child">This session was created on a remote node, and can only be viewed from that node.</div>
  1570. </div>
  1571. </div>
  1572. <div class="last">
  1573. <textarea readonly="readonly">#= ReviewHistoryComments #</textarea>
  1574. </div>
  1575. </div>
  1576. # } #
  1577. </div>
  1578. </script>
  1579. <!--========== END JS template for Replay Grid's inline area END ==================================-->
  1580. <div class="filter-bar pull-left" style="width:150px !important;">
  1581. <form class="form-inline form-filter">
  1582. <div class="pull-left filter-request-status">
  1583. <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: filterModel().buttons">
  1584. <button class="btn" data-bind="text: name, css: {active: selected}, enable: $parent.sessionsLoaded, click: $parent.toggleProtocolFilter"></button>
  1585. </div>
  1586. </div>
  1587. </form>
  1588. </div>
  1589. <!--==================== Search UI ==================================================-->
  1590. <div class="filter-bar pull-right">
  1591. <form class="form-inline form-filter">
  1592. <div class="pull-right">
  1593. <label id="lblKsSearch" for="chkKsSearch" title="Search sessions by keystroke">
  1594. <input id="chkKsSearch" type="checkbox" title="Search sessions by keystroke" data-bind="checked: filterModel().isKeystrokeSearch" class="checkbox kssearch">
  1595. <span data-bind="css: { checked: (filterModel().isKeystrokeSearch() == true) } ">Search by keystroke</span>
  1596. </label>
  1597. <input class="filter-system" style="display:none;" type="text" data-bind="visible: !filterModel().isKeystrokeSearch(), value: filterModel().system, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
  1598. <input class="filter-keystroke" style="display:none;" type="text" data-bind="visible: filterModel().isKeystrokeSearch(), value: filterModel().keystrokeCommand, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
  1599. <button class="btn btn-mini btn-primary btn-filter" type="submit" data-bind="enable: sessionsLoaded, click: applyFilter">Search</button>
  1600. <!-- , click: applyFilter-->
  1601. <button class="btn btn-mini btn-clear-filter" type="button" data-bind="enable: sessionsLoaded">Reset</button>
  1602. <button class="btn btn-mini btn-refresh" type="button" onclick="refreshPlaybackGrid();">Refresh</button>
  1603. </div>
  1604. </form>
  1605. </div>
  1606. </div>
  1607. <div style="display:none;" class="sessionWindow self_clear" data-bind="with:selectedSession()">
  1608. <div class="leftpane self_clear">
  1609. <div class="inner">
  1610. <div id="sessionBody">
  1611. <div class="inner-content">
  1612. <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>
  1613. <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" />
  1614. <div id="alertparent" data-bind="fadeIn: showReplayStatus, stopAnimation: stickyStatus">
  1615. <div class="session-playback-status alert" data-bind="css: replayStatus">
  1616. <div class="child" data-bind="text: replayStatusMessage"></div>
  1617. </div>
  1618. </div>
  1619. </div>
  1620. </div>
  1621. <div id="sessionFooter" class="self_clear">
  1622. <div id="progressContainer" class="self_clear">
  1623. <div id="progressWrap" class="self_clear">
  1624. <div id="progress" class="progress-bar waiting"></div>
  1625. </div>
  1626. </div>
  1627. <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>
  1628. <div id="playerControls" class="replay">
  1629. <div class="buttons">
  1630. <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&nbsp;&nbsp;&nbsp;</button>
  1631. <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>
  1632. <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>
  1633. <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>
  1634. <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>
  1635. <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>
  1636. <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>
  1637. <select id="slSpeed" title="Set the playback speed" class="input-small speed"
  1638. data-bind="value: selectedPlaybackSpeed,
  1639. options: playbackSpeeds,
  1640. optionsValue: 'speed',
  1641. optionsText: 'name',
  1642. optionsCaption: 'Speed',
  1643. optionsAfterRender: setOptionTitle,
  1644. visible: archiveStatus() == 0,
  1645. enable: (remoteSessionState() != RemoteSessionStateENUM.CLOSED && remoteSessionState() != RemoteSessionStateENUM.CLOSING) && inEditMode() == true"></select>
  1646. <div class="archiveStatusMsg msg-restoring-session" data-bind="css: replayStatus, text: 'A request has been made to restore the session', visible: archiveStatus() == 2"></div>
  1647. <div class="archiveStatusMsgError msg-archiving-session" data-bind="css: replayStatus, text: 'Session is being archived...', visible: archiveStatus() == 3"></div>
  1648. <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>
  1649. <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>
  1650. <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>
  1651. </div>
  1652. <div id="editable" class="self_clear">
  1653. <textarea id="txtNotes" data-optional="true" placeholder="Add comment(s)" data-bind="value: reviewNotes, enable: inEditMode"></textarea><br>
  1654. <div class="right">
  1655. <label class="checkbox">
  1656. <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>
  1657. </label>
  1658. <button class="btn btn-save-review-state" title="Save changes and close the window" disabled="disabled" value="save" data-bind="enable: inEditMode">Save &amp; Close</button>
  1659. </div>
  1660. </div>
  1661. </div>
  1662. </div>
  1663. </div>
  1664. </div>
  1665. <div class="rightpane self_clear">
  1666. <div class="inner">
  1667. <div class="content">
  1668. <table id="keystrokes" role="treegrid" data-role="selectable" class="selectable" style="margin: 0 auto;">
  1669. <thead>
  1670. <tr>
  1671. <th>KeystrokeID</th>
  1672. <th>TimeMarker</th>
  1673. <th><a href="#">Sorted: oldest to newest</a></th>
  1674. </tr>
  1675. </thead>
  1676. <tbody></tbody>
  1677. </table>
  1678. </div>
  1679. </div>
  1680. </div>
  1681. </div>
  1682. <div id="replayContent" class="session-monitoring-grid" data-model="replayGridSourceModel" data-bind="source: sessionsSource, events: {detailCollapse: dtCollapse, detailExpand: dtExpand, change: changeEvent, dataBound: OnDataBound }"></div>
  1683. </div>
  1684. </div> <!-- Views -->
  1685. </div> <!-- Page -->
  1686. <!--NEW Active section START-->
  1687. <!-- Page: Active Sessions -->
  1688. <div class="page page-active-sessions" data-route="active" data-default-view-route="list">
  1689. <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>
  1690. <div class="views">
  1691. <!-- View: Grid of ACTIVE RDP/SSH Sessions. -->
  1692. <div class="view view-active-sessions" data-route="list">
  1693. <script type="text/javascript">
  1694. 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");}
  1695. 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('...');}
  1696. clearActiveSessionInterval('ks_heartbeat');viewModel.selectedSession().showOutputKeystrokes(false);viewModel.selectedSession().selectedKeystroke(null);$(this.element).find("#keystrokes").DataTable().destroy();}
  1697. 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');}
  1698. 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');}
  1699. 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)
  1700. $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)
  1701. $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)
  1702. $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)
  1703. $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;}
  1704. 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;}}}
  1705. if(_params["system"]){viewModel.filterModel().system(_params["system"]);$viewRoot.find(".filter-system").val(_params["system"]);}else{viewModel.filterModel().system("");}
  1706. if(_params["keystrokeCommand"]){viewModel.filterModel().keystrokeCommand(_params["keystrokeCommand"]);$viewRoot.find(".filter-keystroke").val(_params["keystrokeCommand"]);}else{viewModel.filterModel().keystrokeCommand("");viewModel.filterModel().isKeystrokeSearch(false);}
  1707. if(_params["start"]){viewModel.filterModel().start(parseDatesForIE8(_params["start"]));}else{viewModel.filterModel().start("");}
  1708. if(_params["end"]){viewModel.filterModel().end(parseDatesForIE8(_params["end"]));}else{viewModel.filterModel().end("");}
  1709. var startDate=parseDatesForIE8(_params["start"]);if(startDate!=null&&startDate!=""){startDate=moment(startDate).format();}else{startDate="";}
  1710. var endDate=parseDatesForIE8(_params["end"]);if(endDate!=null&&endDate!=""){endDate=moment(endDate).format();}else{endDate="";}
  1711. 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"});}
  1712. 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;}
  1713. 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);}
  1714. addExtraStylingToGrid("active-sessions-grid");if(_sessionUserViewModel.IsActiveActive()){grid.showColumn("AgentName");}else{grid.hideColumn("AgentName");}
  1715. 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)
  1716. return;e.stopPropagation();grid.find('a.infoIcon').not(this).popover('hide');var popover=$(this).data('popover');if($('.popover').is(":visible")){closeGridPopover(popover);return false;}
  1717. 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">&times;</span></button>').click(function(){closeGridPopover(popover);});$('.popover-title',$tip).append(close);});}
  1718. 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);}
  1719. viewModel.selectedUid(currentDataItem.uid);}
  1720. 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+'&timestamp='+new Date().getTime()+'&anticsrftoken='+_antiCSRFToken);if(sessionModel.remoteSessionState()==RemoteSessionStateENUM.CLOSED){clearActiveSessionInterval(token+'_thumb');}},token+'_thumb');}
  1721. sessionHeartbeatCallback(token,status,sessionModel);}
  1722. 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);}
  1723. 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);}
  1724. $('.placeholder_time_'+token).html(result);sessionModel.elapsedTime(deserializedData.duration);if(token==viewModel.selectedSession().token()){viewModel.selectedSession().elapsedTime(deserializedData.duration);}
  1725. 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');}
  1726. function onDetailCollapse(e){var curDI=e.sender.dataItem(e.masterRow);clearActiveSessionInterval(curDI.Token+'_heartbeat');if(curDI.Protocol!='SSH'){clearActiveSessionInterval(curDI.Token+'_thumb');}
  1727. 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;}
  1728. 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();}
  1729. function generateSessionModel(gridDataRow){return ko.validatedObservable(new MonitoredSessionViewModel(gridDataRow))();}
  1730. 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()
  1731. if(protocol=='RDP'){setSessionRDPImage(asWindowData,token);}else{setSessionSSHCommandText(asWindowData,token);}}
  1732. 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&timestamp='+new Date().getTime()+'&anticsrftoken='+_antiCSRFToken);},'large_content');},1000)}
  1733. 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)}
  1734. 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>';}
  1735. 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;}}
  1736. 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);}});}
  1737. var dtDrawCallback=function(kendoWindowContext,dt,dtSettings){if(viewModel.selectedSession().selectedKeystroke()!=null){onKeyStrokeClick(dt.$("#"+viewModel.selectedSession().selectedKeystroke())[0]);}
  1738. 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);}
  1739. 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();}
  1740. setTimeout(function(){establishKeystrokeHeartbeat(dt);},2000);}
  1741. 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>';}
  1742. 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");}
  1743. var showHideToolbarTools=function(kendoWindowContext,show){kendoWindowContext.element.find("div.toolbar div").toggle();}
  1744. var establishKeystrokeHeartbeat=function(dt){pushSessionInterval(3000,function(){destroyTooltips(dt);keystrokeHeartbeatCallback(dt);},'ks_heartbeat');}
  1745. var keystrokeHeartbeatCallback=function(dt){if($.fn.DataTable.isDataTable(dt[0])){dt.DataTable().ajax.reload(null,false);}else{clearActiveSessionInterval('ks_heartbeat');}}
  1746. var destroyTooltips=function(dt){$('.ui-tooltip').remove();dt.$("tr").each(function(index){$(this).removeData('tooltip');$(this).tooltip("destroy");})}
  1747. 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();}
  1748. if(api.page.info().pages<=1){pagination.hide();}
  1749. else{pagination.show();}}
  1750. 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';}
  1751. if(isSelected){row.className+=" k-state-selected";}}
  1752. var addDataTableCustomEventHandlers=function(kendoWindowContext){kendoWindowContext.element.find('.dataTables_scrollHead th').on('click','a',function(e){e.preventDefault();})
  1753. 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);});}
  1754. var onKeyStrokeHover=function(row,isHover){if(isHover){$(row).addClass("k-state-hover");}else{$(row).removeClass("k-state-hover");}}
  1755. initializeDataTable('#keystrokes',asWindowData);}
  1756. var onKeyStrokeCheckboxClick=function(show){var dt=asWindowData.element.find('#keystrokes').dataTable();if(show){viewModel.selectedSession().showOutputKeystrokes(true);}else{viewModel.selectedSession().showOutputKeystrokes(false);}
  1757. dt.fnFilter('',0,true,false);}
  1758. var onTimestampCheckboxChange=function(show){var dt=asWindowData.element.find('#keystrokes').dataTable();if(show){dt.$('span.kstime').removeClass("inactive");}else{dt.$('span.kstime').addClass("inactive");}}
  1759. var toggleSelectedKeystroke=function(target){var dt=asWindowData.element.find('#keystrokes').dataTable();clearSelectedKeystroke(dt);$(target).addClass('k-state-selected');}
  1760. var onKeyStrokeClick=function(row){viewModel.selectedSession().selectedKeystroke(row.id);toggleSelectedKeystroke(row);}
  1761. var clearSelectedKeystroke=function(dt){if(dt==null){dt=asWindowData.element.find('#keystrokes').dataTable();}
  1762. dt.$('tr.k-state-selected').removeClass('k-state-selected');}
  1763. function OnTerminatedUI(token,closeKendoWindow){if(closeKendoWindow==true){asWindowData.close();}
  1764. 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)
  1765. 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.");}}
  1766. 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");}
  1767. if(state){msg='Session has been locked.';btnLock.hide();btnUnLock.show();}else{msg='Session has been unlocked.';btnLock.show();btnUnLock.hide();}
  1768. var s=$(tr).find(".archiveStatusMsg.session");successCallback(s,msg).delay(3000).fadeOut(1000);}
  1769. 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);}
  1770. if(asWindowData!=undefined){asWindowData.close();}
  1771. expandCollapseRow(row,gridData);}
  1772. 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);}}}
  1773. 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";}
  1774. 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();}});}
  1775. 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);}}
  1776. for(var j=toRemove.length;j--;){activeDurationIntervals.splice(toRemove[j],1);}
  1777. dfd.resolve();}
  1778. clear();return dfd.promise();}
  1779. function setLockedState(url){return $.ajax({cache:false,url:url,type:"POST",dataType:"json"});}
  1780. 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"});}
  1781. 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"});}
  1782. 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"});}
  1783. 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();}})}
  1784. 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);})
  1785. $.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();}})}
  1786. function clearErrors(messageContainer){$(messageContainer).removeClass("alert-error").hide();}
  1787. function successCallback(messageContainer,message){return $(messageContainer).removeClass("alert-error").addClass("alert-success").text(message).fadeIn(200);}
  1788. function errorCallback(messageContainer,jqXhr,textStatus,errorThrown){if(jqXhr.status==502){return;}
  1789. var ex=parseAjaxError(jqXhr);if(ex!=null){$(messageContainer).addClass("alert-error").text(ex.Message).fadeIn(200);}
  1790. else showApplicationError(jqXhr);}
  1791. 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]);}
  1792. 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);}}
  1793. 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>
  1794. <script id="tmpl-Node" type="text/x-kendo-template">
  1795. # if (IsLocal == false) { #
  1796. <a href="\#" class="infoIcon" data-selector="true" data-container="body" title="Node Information" data-toggle="popover"></a>
  1797. #} #
  1798. <span>#= AgentName #</span>
  1799. </script>
  1800. <div class="header-container">
  1801. <h4>Active Sessions</h4>
  1802. <!--========== START JS template for Grid's inline area START ==============================-->
  1803. <script id="session-detail-template" type="text/x-kendo-template">
  1804. <div class="session-expanded self_clear">
  1805. # if (IsLocal) { #
  1806. <div class="self_clear">
  1807. <div class="first">
  1808. <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;" />
  1809. <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>
  1810. </div>
  1811. <div class="second">
  1812. <span>AssetName: <b>#=AssetName#</b></span><br />
  1813. <span>Requestor: <b>#=UserName#</b></span><br />
  1814. Elapsed Time:<b><span id="placeholder_time_#=Token#" class="placeholder_time_#=Token#"></span></b><br />
  1815. <span>Resolution: <b>#=Resolution#</b></span><br />
  1816. <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>
  1817. <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>
  1818. <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>
  1819. # if (ReleaseRequestID != 0) { #
  1820. <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>
  1821. # } #
  1822. </div>
  1823. </div>
  1824. <div style="display:none;" class="archiveStatusMsg request alert-error"></div>
  1825. <div style="display:none;" class="archiveStatusMsg session alert-error"></div>
  1826. # } else { #
  1827. <div class="self_clear">
  1828. <div class="first">
  1829. #if (Protocol == 'RDP') {#
  1830. <img src="../images/rdp-placeholder.jpg?whswwi" style="width:137px; height:125px;" />
  1831. #} else {#
  1832. <img src="../images/ssh_placeholder.jpeg?wiwhs" style="width:137px; height:125px;" />
  1833. #}#
  1834. </div>
  1835. <div class="second">
  1836. <span>AssetName: <b>#=AssetName#</b></span><br />
  1837. <span>Requestor: <b>#=UserName#</b></span><br />
  1838. <span>Resolution: <b>#=Resolution#</b></span><br />
  1839. <div class="alert alert-info">
  1840. <div class="child">This session was created on a remote node, and can only be viewed from that node.</div>
  1841. </div>
  1842. </div>
  1843. </div>
  1844. # } #
  1845. </div>
  1846. </script>
  1847. <!--========== END JS template for Grid's inline area END ==================================-->
  1848. <!--====================== Filter Buttons ==================================================-->
  1849. <div class="filter-bar pull-left" style="width:150px !important;">
  1850. <form class="form-inline form-filter">
  1851. <div class="pull-left filter-request-status">
  1852. <div class="btn-group" data-toggle="buttons-radio" data-bind="foreach: filterModel().buttons">
  1853. <button class="btn" data-bind="text: name, css: {active: selected}, enable: $parent.sessionsLoaded, click: $parent.toggleProtocolFilter"></button>
  1854. </div>
  1855. </div>
  1856. </form>
  1857. </div>
  1858. <!--==================== Active Sessions Search UI ==================================================-->
  1859. <div class="filter-bar pull-right">
  1860. <form class="form-inline form-filter">
  1861. <div class="pull-right">
  1862. <label id="lblASKsSearch" for="chkASKsSearch" title="Search sessions by keystroke">
  1863. <input id="chkASKsSearch" type="checkbox" title="Search sessions by keystroke" data-bind="checked: filterModel().isKeystrokeSearch" class="checkbox kssearch">
  1864. <span data-bind="css: { checked: (filterModel().isKeystrokeSearch() == true) } ">Search by keystroke</span>
  1865. </label>
  1866. <input class="filter-system" type="text" data-bind="visible: !filterModel().isKeystrokeSearch(), value: filterModel().system, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
  1867. <input class="filter-keystroke" style="display:none;" type="text" data-bind="visible: filterModel().isKeystrokeSearch(), value: filterModel().keystrokeCommand, enable: sessionsLoaded, attr: {placeholder: filterModel().placeHolderText}" />
  1868. <button class="btn btn-mini btn-primary btn-filter" type="submit" data-bind="enable: sessionsLoaded, click: applyFilter">Search</button>
  1869. <button class="btn btn-mini btn-clear-filter" type="button" data-bind="enable: sessionsLoaded">Reset</button>
  1870. <button class="btn btn-mini btn-refresh" type="button" onclick="refreshSessionsGrid();">Refresh</button>
  1871. </div>
  1872. </form>
  1873. </div>
  1874. </div>
  1875. <div style="display:none;" class="sessionWindow self_clear" data-bind="with:selectedSession()">
  1876. <div class="leftpane self_clear">
  1877. <div id="sessionBody">
  1878. <div class="inner-content">
  1879. <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>
  1880. <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" />
  1881. <div id="alertparent" data-bind="fadeIn: showReplayStatus, stopAnimation: stickyStatus">
  1882. <div class="session-playback-status alert" data-bind="css: replayStatus">
  1883. <div class="child" data-bind="text: replayStatusMessage"></div>
  1884. </div>
  1885. </div>
  1886. </div>
  1887. </div>
  1888. <div id="sessionFooter" class="self_clear">
  1889. <div id="progressContainer" class="self_clear" style="display:none;">
  1890. <div id="progressWrap" class="self_clear">
  1891. <div id="progress" class="waiting"></div>
  1892. </div>
  1893. </div>
  1894. <div class="durationTimer" data-bind="attr: {'id': 'progress_' + token()}, visible: true"><span id="elapsed" data-bind="text: humanReadableElapsedTime">00h:00m:00s</span></div>
  1895. <div id="playerControls" class="active">
  1896. <div class="buttons">
  1897. <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>
  1898. <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>
  1899. <button class="btn btn-terminate-session" title="Terminates the current session"><i class="icon-stop icon-white"></i> Terminate</button>
  1900. <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>
  1901. </div>
  1902. </div>
  1903. </div>
  1904. </div>
  1905. <div class="rightpane self_clear">
  1906. <div class="content">
  1907. <table id="keystrokes" role="treegrid" data-role="selectable" class="selectable" style="margin: 0 auto;">
  1908. <thead>
  1909. <tr>
  1910. <th>KeystrokeID</th>
  1911. <th>TimeMarker</th>
  1912. <th><a href="#">Sorted: oldest to newest</a></th>
  1913. </tr>
  1914. </thead>
  1915. <tbody></tbody>
  1916. </table>
  1917. </div>
  1918. </div>
  1919. </div>
  1920. <div id="activeContent" class="active-sessions-grid" data-model="activeSessionsGridSourceModel" data-bind="source: sessionsSource, events: {detailCollapse: dtCollapse, detailExpand: dtExpand, change: changeEvent, dataBound: OnDataBound }"></div>
  1921. </div>
  1922. </div> <!-- Views -->
  1923. </div> <!-- Page -->
  1924. <!--NEW Active section END-->
  1925. <!-- Page: Change Password -->
  1926. <div class="page page-change-password" data-route="changepassword" data-default-view-route="change">
  1927. <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>
  1928. <div class="views">
  1929. <!-- View: Change current user's password form. -->
  1930. <div class="view view-change-password" data-route="change">
  1931. <script type="text/javascript">
  1932. 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;}
  1933. $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;}
  1934. 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);}}
  1935. $viewRoot.find(".change-password-message").text(displayMessage).fadeIn(200);}
  1936. else showApplicationError(jqXhr);}
  1937. 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>
  1938. <div class="panels">
  1939. <div class="panel panel-change-password">
  1940. <h4>Change Your Password</h4>
  1941. <div class="section-header section-content">
  1942. <form class="form-horizontal form-change-password">
  1943. <div class="control-group">
  1944. <label class="control-label" for="username">Current Password:</label>
  1945. <div class="controls password-container">
  1946. <input type="password" class="input-xlarge input-current-password" data-bind="value: currentPassword" />
  1947. <div class="caps-lock-warning" style="display: none;">
  1948. <img src="../images/sign_warning_16x16.png" />Caps lock is on
  1949. </div>
  1950. </div>
  1951. </div>
  1952. <div class="control-group">
  1953. <label class="control-label" for="username">New Password:</label>
  1954. <div class="controls password-container">
  1955. <input type="password" class="input-xlarge input-new-password" data-bind="value: newPassword" />
  1956. <div class="caps-lock-warning2" style="display: none;">
  1957. <img src="../images/sign_warning_16x16.png" />Caps lock is on
  1958. </div>
  1959. </div>
  1960. </div>
  1961. <div class="control-group">
  1962. <label class="control-label" for="username">Confirm New Password:</label>
  1963. <div class="controls password-container">
  1964. <input type="password" class="input-xlarge input-confirm-new-password" data-bind="value: confirmNewPassword" />
  1965. <div class="caps-lock-warning3" style="display: none;">
  1966. <img src="../images/sign_warning_16x16.png" />Caps lock is on
  1967. </div>
  1968. </div>
  1969. </div>
  1970. <div class="control-group button-bar2 self_clear">
  1971. <div class="controls">
  1972. <div>
  1973. <button class="btn btn-primary btn-change-password">Change Password</button>
  1974. <a href="#" id="btn-cancel-passwordchange" class="btn">Cancel</a>
  1975. </div>
  1976. </div>
  1977. </div>
  1978. </form>
  1979. </div>
  1980. <div class="alert alert-error change-password-message"></div>
  1981. </div>
  1982.  
  1983. <div class="panel panel-change-successful" style="display:none; ">
  1984. <div class="alert alert-success">
  1985. <div><b>Password Successfully Changed</b></div>
  1986. <p>Your password has been successfully changed.</p>
  1987. <p><a href="#/home">Home</a></p>
  1988. </div>
  1989. </div>
  1990. </div> <!-- Panels -->
  1991. </div> <!-- View -->
  1992. </div> <!-- Views -->
  1993. </div> <!-- Page -->
  1994. <!-- The "Show Password" panel, used by some Views. -->
  1995. <div class="panel panel-retrieve-password" style="display:none;">
  1996. <script type="text/javascript">
  1997. 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");});}
  1998. 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>
  1999. <form class="form-inline form-show-password">
  2000. <label>Password:</label>
  2001. <input class="input-xlarge password" type="text" readonly="readonly" />
  2002. <button class="btn btn-success btn-select-password">Highlight Password</button>
  2003. </form>
  2004. <div class="alert alert-success password-selected-message">
  2005. The password has been selected. To copy it to the clipboard, press <b>Ctrl-C</b><br />
  2006. or right-click on the selected password and select <b>Copy</b>.
  2007. </div>
  2008. <div class="countdown-timer">
  2009. This screen will automatically close in <span class="time-remaining">10</span> seconds.
  2010. <div class="progress">
  2011. <div class="bar bar-success time-remaining-progress-bar"></div>
  2012. </div>
  2013. <div>
  2014. <button class="btn btn-warning btn-close-password-screen">Close Now</button>
  2015. </div>
  2016. </div>
  2017. </div>
  2018. <!-- The "Show SSH Session" panel, used by some Views. -->
  2019. <div class="panel panel-retrieve-sshSession" style="display:none;">
  2020. <script type="text/javascript">
  2021. 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;}
  2022. 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");});}
  2023. 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>
  2024. <div class="alert alert-success password-selected-messagex" style="text-align: center">
  2025. Copy and paste the command below to manually start the SSH Session.<br />
  2026. Alternatively you can click the Start SSH Session button.
  2027. </div>
  2028. <form class="form-inline form-show-sshSession">
  2029. <!--Full Command-->
  2030. <div id="fullcommand_dev" style="padding:10px;">
  2031. <label>Command:</label>
  2032. <input class="input-xlarge fullcommand" type="text" readonly="readonly" style="width: 480px;" />
  2033. <button class="btn btn-success btn-select-fullcommand"><i class="icon-file icon-white" title="Highlight Text"></i></button>
  2034. </div>
  2035. <!--Username/IP-->
  2036. <div id="username_ip_dev" style="padding:10px;">
  2037. <label>Username/IP:</label>
  2038. <input class="input-xlarge usernameip" type="text" readonly="readonly" style="width: 464px;" />
  2039. <button class="btn btn-success btn-ssh-session-usernameip"><i class="icon-file icon-white" title="Highlight Text"></i></button>
  2040. </div>
  2041. <a href="more" class="more" style="padding-left:10px;">more...</a>
  2042. <div id="moreInfo" class="moreInfo closed" style="padding:10px,10px,10px,10px; display:none;">
  2043. <br clear="all" />
  2044. <!--Username-->
  2045. <label style="padding-left:10px;">Username</label>
  2046. <input class="input-medium username" type="text" readonly="readonly" style="width: 300px;" />
  2047. <button class="btn btn-success btn-ssh-session-username"><i class="icon-file icon-white" title="Highlight Text"></i></button>
  2048. <!--IP-->
  2049. <label style="padding-left:10px;">IP</label>
  2050. <input class="input-medium ip" type="text" readonly="readonly" style="width: 100px;" />
  2051. <button class="btn btn-success btn-ssh-session-ip"><i class="icon-file icon-white" title="Highlight Text"></i></button>
  2052. <!--Port-->
  2053. <label style="padding-left:10px;">
  2054. Port
  2055. </label>
  2056. <input class="input-medium port" type="text" readonly="readonly" style="width: 40px !important;" />
  2057. <button class="btn btn-success btn-ssh-session-port"><i class="icon-file icon-white" title="Highlight Text"></i></button>
  2058. </div>
  2059. </form>
  2060. <div class="alert alert-success password-selected-message">
  2061. The <span class="dymanicText">password</span> has been selected. To copy it to the clipboard, press <b>Ctrl-C</b><br />
  2062. or right-click on the selected password and select <b>Copy</b>.
  2063. </div>
  2064. <div style="text-align: center">
  2065. <a target="_parent" class="btn btn-primary btn-new-sshrequest">Start SSH Session</a>
  2066. </div>
  2067. <div class="countdown-timer">
  2068. This screen will automatically close in <span class="time-remaining">10</span> seconds.
  2069. <div class="progress">
  2070. <div class="bar bar-success time-remaining-progress-bar"></div>
  2071. </div>
  2072. <div>
  2073. <button class="btn btn-warning btn-close-SshSession-screen">Close Now</button>
  2074. </div>
  2075. </div>
  2076. </div>
  2077. <!-- Page: Admin Session -->
  2078. <div class="page page-admin-session" data-route="adminsession" data-default-view-route="newsession">
  2079. <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>
  2080. <div class="views">
  2081. <!-- View: Change current user's password form. -->
  2082. <div class="view view-admin-session" data-route="newsession">
  2083. <script type="text/javascript">
  2084. 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=="")
  2085. return;var selectedAccountID=0;selectedRequestID=0;var arrSelectedValue=selectedValue.split('|');if(arrSelectedValue.length==2){selectedAccountID=arrSelectedValue[0];selectedRequestID=arrSelectedValue[1];}
  2086. 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("********");}
  2087. $.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("<","&lt;").replace(">","&gt;")+" ("+value.IPAddress.replace("<","&lt;").replace(">","&gt;")+')</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;}
  2088. $(".input-adminsession-ip").attr("disabled","disabled");var arrSelectedValue=selectedValue.split('|');var isWindowsConnectionType=arrSelectedValue[1]
  2089. if(isWindowsConnectionType=="true"){viewModel().isRDP(1);}
  2090. else
  2091. {viewModel().isRDP(0);}
  2092. var selectedText=$(".available-assets option:selected").text();var arrSelectedText=selectedText.split('(');if(arrSelectedText.length==2){var trimmedIP=arrSelectedText[1]
  2093. 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;}
  2094. if(viewModel().isRDP()==1){startAdminSession();}else{startSSHSession();}
  2095. 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]}
  2096. 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];}}
  2097. 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);}
  2098. 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]}
  2099. 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];}}
  2100. 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);}
  2101. else showApplicationError(jqXhr);},complete:function(){setFormBusy(false);if(selectedRequestID==0){viewModel().adminForm().password("");viewModel().adminForm().password.isModified(false);}}});if(ticket!=0)
  2102. 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);}
  2103. 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);}
  2104. 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);}
  2105. 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);}
  2106. 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("<","&lt;").replace(">","&gt;")+'</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);}
  2107. 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);}
  2108. 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);}
  2109. $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())
  2110. return false;if(_sessionUserViewModel.IsIsa())
  2111. return false;if(_sessionUserViewModel.IsRequestor())
  2112. return true;else
  2113. return false;}</script>
  2114. <div class="panels">
  2115. <div class="panel panel-admin-session">
  2116. <h4>Admin Session - Recorded Session </h4>
  2117. <div class="section-header section-content">
  2118. <form class="form-horizontal form-admin-session" data-bind="with: adminForm">
  2119. <div class="control-group-bulk-select" data-bind="visible: checkIsRequestor()">
  2120. <div class="control-group">
  2121. <label class="control-label" for="available-accounts">Available Accounts:</label>
  2122. <div class="controls">
  2123. <select class="available-accounts" title="Select an account and asset, or enter connection details"></select>
  2124. </div>
  2125. </div>
  2126. <div class="control-group">
  2127. <label class="control-label" for="available-assets">Asset / IP:</label>
  2128. <div class="controls">
  2129. <select class="available-assets" title="Select an account, then select an asset, or enter connection details"></select>
  2130. </div>
  2131. </div>
  2132. </div>
  2133. <div class="control-group">
  2134. <label class="control-label" for="rbtnIsRDP">Connection Type:</label>
  2135. <div class="controls">
  2136. <label class="radio inline">
  2137. <input name="rbtnIsRDP" class="input-adminsession-RDP" type="radio" data-bind="value:1, checked: $parent.isRDP" />RDP:
  2138. </label>
  2139. <!--<label class="radio inline">
  2140. <input name="rbtnIsRDP" class="input-adminsession-SSH" type="radio" data-bind="value:0, checked: $parent.isRDP" />SSH:
  2141. </label>-->
  2142. <select class="input-large rdp-screen-resolution" data-bind="value: resolution, enable: $parent.requiredIsRDP">
  2143. <option value="640x480">640x480</option>
  2144. <option value="800x600">800x600</option>
  2145. <option value="1024x768">1024x768</option>
  2146. <option value="1280x800">1280x800</option>
  2147. <option value="1280x1024">1280x1024</option>
  2148. <option value="1366x768">1366x768</option>
  2149. <option value="1440x900">1440x900</option>
  2150. <option value="1440x1050">1440x1050</option>
  2151. <option value="1680x1050">1680x1050</option>
  2152. <option value="1920x1080">1920x1080</option>
  2153. <option value="1920x1200">1920x1200</option>
  2154. <option value="1920x2058">1920x2058</option>
  2155. <option value="Maximized">Maximized</option>
  2156. </select>
  2157. <label class="radio">
  2158. <input name="rbtnIsRDP" class="input-adminsession-SSH" type="radio" data-bind="value:0, checked: $parent.isRDP" />SSH:
  2159. </label>
  2160. </div>
  2161. </div>
  2162.  
  2163. <div class="control-group">
  2164. <span class="control-label">Smart Sizing:</span>
  2165. <div class="controls">
  2166. <label class="checkbox">
  2167. <input type="checkbox" class="chk chk_smart_sizing" data-bind="checked: smartSize, enable:$parent.requiredIsRDP" />
  2168. </label>
  2169. </div>
  2170. </div>
  2171.  
  2172. <div class="control-group">
  2173. <label class="control-label" for="input-adminsession-ip">IP Address / FQDN:</label>
  2174. <div class="controls">
  2175. <input type="text" class="input-xlarge input-adminsession-ip" data-bind="value: ipAddress" />
  2176. </div>
  2177. </div>
  2178. <div class="control-group">
  2179. <label class="control-label" for="port">Port:</label>
  2180. <div class="controls">
  2181. <input type="number" class="input-xlarge input-adminsession-port" data-bind="value: port" />
  2182. </div>
  2183. </div>
  2184. <div class="control-group">
  2185. <label class="control-label" for="port">Domain:</label>
  2186. <div class="controls">
  2187. <input type="text" class="input-xlarge input-adminsession-domain" data-bind="value: domain" />
  2188. </div>
  2189. </div>
  2190. <div class="control-group">
  2191. <label class="control-label" for="input-adminsession-username">User Name:</label>
  2192. <div class="controls">
  2193. <input type="text" class="input-xlarge input-adminsession-username" data-bind="value: userName" />
  2194. </div>
  2195. </div>
  2196. <div class="control-group">
  2197. <label class="control-label" for="password">Password:</label>
  2198. <div class="controls password-container">
  2199. <input type="password" class="input-xlarge input-adminsession-password" data-bind="value: password" autocomplete="off" />
  2200. <div class="caps-lock-warning" style="display: none;">
  2201. <img src="../images/sign_warning_16x16.png" />Caps lock is on
  2202. </div>
  2203. </div>
  2204. </div>
  2205. <button class="btn btn-primary btn-admin-session">Connect</button>
  2206. </form>
  2207. </div>
  2208. <div class="alert alert-error admin-session-message"></div>
  2209. </div>
  2210.  
  2211. <div class="panel panel-session-successful" style="display:none; ">
  2212. <div class="alert alert-success">
  2213. <div><b>Success</b></div>
  2214. <p>Click the link to begin the remote session</p>
  2215. <p><a href="#/home">Home</a></p>
  2216. </div>
  2217. </div>
  2218. </div> <!-- Panels -->
  2219. </div> <!-- View -->
  2220. </div> <!-- Views -->
  2221. </div> <!-- Page -->
  2222. </div> <!-- Application Pages -->
  2223. </div> <!-- Application Root -->
  2224. <!-- The knockout validation tooltip template to use -->
  2225. <script id="retinaCSValidationTooltip" type="text/html">
  2226. <div class="retinaCS-validation-message">
  2227. <em />
  2228. <div style="display: table">
  2229. <div class="retinaCS-validation-message-text" style="display: table-cell" data-bind="validationMessage: field"></div>
  2230. </div>
  2231. </div>
  2232. </script>
  2233. <link rel="stylesheet" type="text/css" href="../libs/jquery-datatables/css/jquery.dataTables.css">
  2234. <link href="../libs/jquery-ui/css/smoothness/jquery-ui-1.10.0.custom.min.css" rel="Stylesheet" />
  2235. <link href="../libs/kendoui/styles/kendo.common.min.css?13" rel="Stylesheet" />
  2236. <link href="../libs/kendoui/styles/kendo.metro.min.css?ac" rel="Stylesheet" />
  2237. <link href="../libs/jquery-ui/jquery.datetimepicker.css" rel="Stylesheet" />
  2238. <link href="RetinaCS.6.3.1.css?1" rel="Stylesheet" />
  2239. <script type="text/javascript" src="../libs/underscore/underscore.1.4.4.min.js"></script>
  2240. <script type="text/javascript" src="../libs/kendoui/js/jquery.min.js"></script>
  2241. <script type="text/javascript" src="../libs/jquery-ui/jquery.datetimepicker.js"></script>
  2242. <script type="text/javascript" src="../libs/jquery-ui/js/jquery-ui-1.10.0.custom.min.js"></script>
  2243. <script type="text/javascript" src="../libs/bootstrap/js/bootstrap.2.3.1.min.js"></script>
  2244. <script type="text/javascript" src="../libs/kendoui/js/kendo.web.min.js?wich"></script>
  2245. <script type="text/javascript" src="../libs/stringExtensions/stringExtensions.1.0.js"></script>
  2246. <script type="text/javascript" src="../libs/path/path.0.8.4.min.js"></script>
  2247. <script type="text/javascript" src="../libs/postal/postal.0.8.2.min.js"></script>
  2248. <script type="text/javascript" src="../libs/knockout/knockout-3.2.0.js"></script>
  2249. <script type="text/javascript" src="../libs/knockout.mapping/knockout.mapping.2.4.1.min.js"></script>
  2250. <script type="text/javascript" src="../libs/knockout-kendo/knockout-kendo.min.js"></script>
  2251. <script type="text/javascript" src="../libs/knockout.validation/knockout.validation.modified.1.0.js"></script>
  2252. <script type="text/javascript" src="../libs/ko-validatorVisible/ko-validatorVisible.1.0.js"></script>
  2253. <script type="text/javascript" src="../libs/activity/jquery.activity-indicator-1.0.0.min.js"></script>
  2254. <script type="text/javascript" src="../libs/busy/busy.1.0.js"></script>
  2255. <script type="text/javascript" src="../libs/moment/moment.2.0.0.min.js"></script>
  2256. <script type="text/javascript" src="../libs/jquery-datatables/jquery.dataTables.min.js"></script>
  2257. <script type="text/javascript" src="../libs/mark/jquery.mark.min.js"></script>
  2258. <script type="text/javascript" src="../libs/mark/datatables.mark.js"></script>
  2259. <script type="text/javascript" src="RetinaCS.6.3.1.js"></script>
  2260. </body>
  2261. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement