public object ExecuteCommand(string guid, string command, string stringFormat) { var serializer = new JavaScriptSerializer(); var output = new StringBuilder(); if (!IsLoggedInUserAuthorized || !SessionElevationManager.IsSessionTokenElevated(ApplicationNames.Console)) { return(serializer.Serialize( new { status = StatusElevationRequired, result = "You need to be authenticated, elevated and have sufficient privileges to use the PowerShell console. Please (re)login to Sitecore.", prompt = "PS >", background = OutputLine.ProcessHtmlColor(ConsoleColor.DarkBlue) })); } PowerShellLog.Info($"Arbitrary script execution in Console session '{guid}' by user: '******'"); var session = GetScriptSession(guid); session.Interactive = true; session.SetItemContextFromLocation(); try { var handle = ID.NewID.ToString(); var jobOptions = new JobOptions(GetJobId(guid, handle), "PowerShell", "shell", this, nameof(RunJob), new object[] { session, command }) { AfterLife = new TimeSpan(0, 0, 20), ContextUser = Sitecore.Context.User, EnableSecurity = true, ClientLanguage = Sitecore.Context.ContentLanguage }; JobManager.Start(jobOptions); Thread.Sleep(WebServiceSettings.CommandWaitMillis); return(PollCommandOutput(guid, handle, stringFormat)); } catch (Exception ex) { return (serializer.Serialize( new Result { status = StatusError, result = output + ScriptSession.GetExceptionString(ex, ScriptSession.ExceptionStringFormat.Console) + "\r\n" + "\r\n[[;#f00;#000]Uh oh, looks like the command you ran is invalid or something else went wrong. Is it something we should know about?]\r\n" + "[[;#f00;#000]Please submit a support ticket here https://git.io/spe with error details, screenshots, and anything else that might help.]\r\n\r\n" + "[[;#f00;#000]We also have a user guide here http://doc.sitecorepowershell.com/.]\r\n\r\n", prompt = $"PS {session.CurrentLocation}>", background = OutputLine.ProcessHtmlColor(session.PrivateData.BackgroundColor), color = OutputLine.ProcessHtmlColor(session.PrivateData.ForegroundColor) })); } }
public object GetAutoCompletionPrefix(string guid, string command) { if (!IsLoggedInUserAuthorized || !SessionElevationManager.IsSessionTokenElevated(ApplicationNames.ISE)) { return(string.Empty); } PowerShellLog.Info($"Auto completion requested in session '{guid}' by user: '******'"); var serializer = new JavaScriptSerializer(); var session = GetScriptSession(guid); try { var result = serializer.Serialize(CommandCompletion.GetPrefix(session, command)); return(result); } finally { if (string.IsNullOrEmpty(guid)) { ScriptSessionManager.RemoveSession(session); } } }
private void UpdateWarning() { var isSessionElevated = SessionElevationManager.IsSessionTokenElevated(ApplicationNames.Console); var controlContent = string.Empty; var hidePanel = false; var tokenAction = SessionElevationManager.GetToken(ApplicationNames.Console).Action; switch (tokenAction) { case (SessionElevationManager.TokenDefinition.ElevationAction.Allow): // it is always elevated hidePanel = true; break; case (SessionElevationManager.TokenDefinition.ElevationAction.Password): // show that session elevation can be dropped controlContent = HtmlUtil.RenderControl(isSessionElevated ? ElevatedPanel : ElevationRequiredPanel); break; case (SessionElevationManager.TokenDefinition.ElevationAction.Block): controlContent = HtmlUtil.RenderControl(ElevationBlockedPanel); break; } InfoPanel.InnerHtml = controlContent; InfoPanel.Visible = !hidePanel; SheerResponse.Eval($"cognifide.powershell.showInfoPanel({(!hidePanel).ToString().ToLower()});"); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (Sitecore.Context.ClientPage.IsEvent) { return; } AppName = WebUtil.GetQueryString("app"); var actionName = WebUtil.GetQueryString("action"); if (string.IsNullOrEmpty(actionName)) { actionName = SessionElevationManager.ExecuteAction; } UserName.Text = Sitecore.Context.User?.Name ?? string.Empty; HttpContext.Current.Response.AddHeader("X-UA-Compatible", "IE=edge"); DialogDescription.Text = Translate.Text(DialogDescription.Text, actionName); DialogMessage.Text = Translate.Text(DialogMessage.Text, actionName); DialogMessageConfirm.Text = Translate.Text(DialogMessageConfirm.Text, actionName); var tokenAction = SessionElevationManager.GetToken(AppName).Action; if (tokenAction == SessionElevationManager.TokenDefinition.ElevationAction.Confirm) { PasswordLabel.Visible = false; PasswordBox.Visible = false; DialogMessage.Visible = false; DialogMessageConfirm.Visible = true; } }
public void DropElevationButtonClick() { SessionElevationManager.DropSessionTokenElevation(ApplicationNames.Console); SheerResponse.Eval(@"$ise(function() { cognifide.powershell.showUnelevated(); });"); UpdateWarning(); }
protected void OkClick() { if (Membership.ValidateUser(Sitecore.Context.User?.Name ?? string.Empty, PasswordBox.Value)) { SessionElevationManager.ElevateSessionToken(AppName); SheerResponse.CloseWindow(); } }
protected void OkClick() { if (Membership.ValidateUser(Sitecore.Context.User?.Name ?? string.Empty, PasswordBox.Value)) { SessionElevationManager.ElevateSessionToken(AppName); SheerResponse.CloseWindow(); } else { SheerResponse.Alert(Texts.PowerShellSessionElevation_Could_not_validate); } }
public object GetHelpForCommand(string guid, string command) { if (!IsLoggedInUserAuthorized || !SessionElevationManager.IsSessionTokenElevated(ApplicationNames.ISE)) { return(string.Empty); } PowerShellLog.Info($"Help message requested in session '{guid}' by user: '******'"); var serializer = new JavaScriptSerializer(); var result = serializer.Serialize(GetHelpOutputs(guid, command)); return(result); }
public object CompleteCommand(string guid, string command) { if (!IsLoggedInUserAuthorized || !SessionElevationManager.IsSessionTokenElevated(ApplicationNames.Console)) { return(string.Empty); } PowerShellLog.Info($"Auto completion requested for command in Console session '{guid}' by user: '******'"); var serializer = new JavaScriptSerializer(); var result = serializer.Serialize(GetTabCompletionOutputs(guid, command, false)); return(result); }
public void SessionElevationPipeline(ClientPipelineArgs args) { if (!args.IsPostBack) { var url = new UrlString(UIUtil.GetUri("control:PowerShellSessionElevation")); url.Parameters["app"] = ApplicationNames.Console; TypeResolver.Resolve <ISessionElevationWindowLauncher>().ShowSessionElevationWindow(url); args.WaitForPostBack(true); } else { SheerResponse.Eval(SessionElevationManager.IsSessionTokenElevated(ApplicationNames.Console) ? @"$ise(function() { cognifide.powershell.bootstrap(); });" : @"$ise(function() { cognifide.powershell.showUnelevated(); });"); } }
private void UpdateWarning(string updateFromMessage = "") { var isSessionElevated = SessionElevationManager.IsSessionTokenElevated(ApplicationNames.ISE); var controlContent = string.Empty; var hidePanel = false; var tokenAction = SessionElevationManager.GetToken(ApplicationNames.ISE).Action; switch (tokenAction) { case SessionElevationManager.TokenDefinition.ElevationAction.Allow: // it is always elevated hidePanel = true; break; case SessionElevationManager.TokenDefinition.ElevationAction.Password: case SessionElevationManager.TokenDefinition.ElevationAction.Confirm: // show that session elevation can be dropped if (isSessionElevated) { controlContent = HtmlUtil.RenderControl(ElevatedPanel); } else { if (WasElevated) { // we're cool devs know that session will need to be elevated. hidePanel = true; } else { controlContent = HtmlUtil.RenderControl(ElevationRequiredPanel); } } break; case SessionElevationManager.TokenDefinition.ElevationAction.Block: controlContent = HtmlUtil.RenderControl(ElevationBlockedPanel); break; } InfoPanel.InnerHtml = controlContent; InfoPanel.Visible = !hidePanel; SheerResponse.Eval($"spe.showInfoPanel({(!hidePanel).ToString().ToLower()}, '{updateFromMessage}');"); }
private bool RequestSessionElevationEx(ClientPipelineArgs args, string appName, string action) { if (!SessionElevationManager.IsSessionTokenElevated(appName)) { if (args.Parameters.AllKeys.Contains("elevationResult")) { SessionElevationErrors.OperationRequiresElevation(); return(false); } var pipelineArgs = new ClientPipelineArgs(); pipelineArgs.Parameters["message"] = args.Parameters["message"]; pipelineArgs.Parameters["app"] = appName; pipelineArgs.Parameters["action"] = action; Context.ClientPage.Start(this, nameof(SessionElevationPipeline), pipelineArgs); return(false); } return(true); }
protected void OkClick() { var validateUser = true; var tokenAction = SessionElevationManager.GetToken(AppName).Action; if (tokenAction == SessionElevationManager.TokenDefinition.ElevationAction.Confirm) { validateUser = false; } if (!validateUser || Membership.ValidateUser(Sitecore.Context.User?.Name ?? string.Empty, PasswordBox.Value)) { SessionElevationManager.ElevateSessionToken(AppName); SheerResponse.CloseWindow(); } else { SheerResponse.Alert(Texts.PowerShellSessionElevation_Could_not_validate); } }
protected virtual void ElevateSession(ClientPipelineArgs args) { var isSessionElevated = SessionElevationManager.IsSessionTokenElevated(ApplicationNames.Console); var tokenAction = SessionElevationManager.GetToken(ApplicationNames.Console).Action; if (!isSessionElevated) { if (tokenAction == SessionElevationManager.TokenDefinition.ElevationAction.Block) { SheerResponse.Eval(@"$ise(function() { cognifide.powershell.bootstrap(true); });"); } else { Context.ClientPage.Start(this, nameof(SessionElevationPipeline)); } } else { SheerResponse.Eval(@"$ise(function() { cognifide.powershell.bootstrap(false); });"); } }
public void DropElevationButtonClick() { SessionElevationManager.DropSessionTokenElevation(ApplicationNames.ISE); UpdateRibbon(); }