Skip to content

Commit

Permalink
[Powertoys Run] Add setting to confirm system commands (#12427)
Browse files Browse the repository at this point in the history
* HTTPS by default, HTTP only if specified

* Added/Updated unit tests;Added FTPS

* Added confirmation to system messages such as shutdown, reboot, and lock

* Corrected Typo

* Added confirmation to system messages such as shutdown, reboot, and lock

* Corrected Typo

* Made changes requested by @mykhailopylyp

* Further changes per review by mykhailopylyp

* Fixes per code review
  • Loading branch information
chrisharris333 committed Jul 28, 2021
1 parent 9731cde commit 0463633
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,25 @@

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using ManagedCommon;
using Microsoft.PowerToys.Run.Plugin.System.Win32;
using Microsoft.PowerToys.Settings.UI.Library;
using Wox.Infrastructure;
using Wox.Infrastructure.Storage;
using Wox.Plugin;

namespace Microsoft.PowerToys.Run.Plugin.System
{
public class Main : IPlugin, IPluginI18n
public class Main : IPlugin, IPluginI18n, ISettingProvider
{
private PluginInitContext _context;
private const string ConfirmSystemCommands = nameof(ConfirmSystemCommands);

internal const int EWXLOGOFF = 0x00000000;
internal const int EWXSHUTDOWN = 0x00000001;
Expand All @@ -26,13 +33,27 @@ public class Main : IPlugin, IPluginI18n

public string IconTheme { get; set; }

public ICommand Command { get; set; }

public string Name => Properties.Resources.Microsoft_plugin_sys_plugin_name;

public string Description => Properties.Resources.Microsoft_plugin_sys_plugin_description;

private bool _confirmSystemCommands;

public IEnumerable<PluginAdditionalOption> AdditionalOptions => new List<PluginAdditionalOption>()
{
new PluginAdditionalOption()
{
Key = ConfirmSystemCommands,
DisplayLabel = Properties.Resources.confirm_system_commands,
Value = false,
},
};

public void Init(PluginInitContext context)
{
this._context = context;
_context = context;
_context.API.ThemeChanged += OnThemeChanged;
UpdateIconTheme(_context.API.GetCurrentTheme());
}
Expand Down Expand Up @@ -73,8 +94,7 @@ private List<Result> Commands()
IcoPath = $"Images\\shutdown.{IconTheme}.png",
Action = c =>
{
Helper.OpenInShell("shutdown", "/s /t 0");
return true;
return ExecuteCommand(Properties.Resources.Microsoft_plugin_sys_shutdown_computer_confirmation, () => Helper.OpenInShell("shutdown", "/s /t 0"));
},
},
new Result
Expand All @@ -84,8 +104,7 @@ private List<Result> Commands()
IcoPath = $"Images\\restart.{IconTheme}.png",
Action = c =>
{
Helper.OpenInShell("shutdown", "/r /t 0");
return true;
return ExecuteCommand(Properties.Resources.Microsoft_plugin_sys_restart_computer_confirmation, () => Helper.OpenInShell("shutdown", "/r /t 0"));
},
},
new Result
Expand All @@ -95,8 +114,7 @@ private List<Result> Commands()
IcoPath = $"Images\\logoff.{IconTheme}.png",
Action = c =>
{
NativeMethods.ExitWindowsEx(EWXLOGOFF, 0);
return true;
return ExecuteCommand(Properties.Resources.Microsoft_plugin_sys_sign_out_confirmation, () => NativeMethods.ExitWindowsEx(EWXLOGOFF, 0));
},
},
new Result
Expand All @@ -106,8 +124,7 @@ private List<Result> Commands()
IcoPath = $"Images\\lock.{IconTheme}.png",
Action = c =>
{
NativeMethods.LockWorkStation();
return true;
return ExecuteCommand(Properties.Resources.Microsoft_plugin_sys_lock_confirmation, () => NativeMethods.LockWorkStation());
},
},
new Result
Expand All @@ -117,8 +134,7 @@ private List<Result> Commands()
IcoPath = $"Images\\sleep.{IconTheme}.png",
Action = c =>
{
NativeMethods.SetSuspendState(false, true, true);
return true;
return ExecuteCommand(Properties.Resources.Microsoft_plugin_sys_sleep_confirmation, () => NativeMethods.SetSuspendState(false, true, true));
},
},
new Result
Expand All @@ -128,8 +144,7 @@ private List<Result> Commands()
IcoPath = $"Images\\sleep.{IconTheme}.png", // Icon change needed
Action = c =>
{
NativeMethods.SetSuspendState(true, true, true);
return true;
return ExecuteCommand(Properties.Resources.Microsoft_plugin_sys_hibernate_confirmation, () => NativeMethods.SetSuspendState(true, true, true));
},
},
new Result
Expand Down Expand Up @@ -184,5 +199,44 @@ public string GetTranslatedPluginTitle()
{
return Properties.Resources.Microsoft_plugin_sys_plugin_name;
}

private bool ExecuteCommand(string confirmationMessage, Action command)
{
if (_confirmSystemCommands)
{
MessageBoxResult messageBoxResult = MessageBox.Show(
confirmationMessage,
Properties.Resources.Microsoft_plugin_sys_confirmation,
MessageBoxButton.YesNo,
MessageBoxImage.Warning);

if (messageBoxResult == MessageBoxResult.No)
{
return false;
}
}

command();
return true;
}

public Control CreateSettingPanel()
{
throw new NotImplementedException();
}

public void UpdateSettings(PowerLauncherPluginSettings settings)
{
var confirmSystemCommands = false;

if (settings != null && settings.AdditionalOptions != null)
{
var option = settings.AdditionalOptions.FirstOrDefault(x => x.Key == ConfirmSystemCommands);

confirmSystemCommands = option == null ? false : option.Value;
}

_confirmSystemCommands = confirmSystemCommands;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="confirm_system_commands" xml:space="preserve">
<value>Show a dialog to confirm system commands</value>
</data>
<data name="Microsoft_plugin_sys_confirmation" xml:space="preserve">
<value>Please Confirm</value>
<comment>Request confirmation</comment>
</data>
<data name="Microsoft_plugin_sys_emptyrecyclebin" xml:space="preserve">
<value>Empty Recycle Bin</value>
<comment>This should align to the action in Windows of emptying the recycle bin on your computer.</comment>
Expand All @@ -129,6 +136,10 @@
<value>Hibernate</value>
<comment>This should align to the action in Windows of a hibernating your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_hibernate_confirmation" xml:space="preserve">
<value>You are about to put this computer into hibernation, are you sure?</value>
<comment>This should align to the action in Windows of a hibernating your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_hibernate_description" xml:space="preserve">
<value>Hibernate computer</value>
<comment>This should align to the action in Windows of a hibernating your computer.</comment>
Expand All @@ -137,6 +148,10 @@
<value>Lock</value>
<comment>This should align to the action in Windows of a locking your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_lock_confirmation" xml:space="preserve">
<value>You are about to lock this computer, are you sure?</value>
<comment>This should align to the action in Windows of a locking your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_lock_description" xml:space="preserve">
<value>Lock computer</value>
<comment>This should align to the action in Windows of a locking your computer.</comment>
Expand All @@ -153,6 +168,10 @@
<value>Restart</value>
<comment>This should align to the action in Windows of a restarting your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_restart_computer_confirmation" xml:space="preserve">
<value>You are about to restart this computer, are you sure?</value>
<comment>This should align to the action in Windows of a restarting your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_restart_computer_description" xml:space="preserve">
<value>Restart computer</value>
<comment>This should align to the action in Windows of a restarting your computer.</comment>
Expand All @@ -161,6 +180,10 @@
<value>Shutdown</value>
<comment>This should align to the action in Windows of a shutting down your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_shutdown_computer_confirmation" xml:space="preserve">
<value>You are about to shut down this computer, are you sure?</value>
<comment>This should align to the action in Windows of a shutting down your computer.</comment>
</data>
<data name="Microsoft_plugin_sys_shutdown_computer_description" xml:space="preserve">
<value>Shutdown computer</value>
<comment>This should align to the action in Windows of a shutting down your computer.</comment>
Expand All @@ -169,6 +192,10 @@
<value>Sign out</value>
<comment>This should align to the action in windows of a signing out back to the lock screen.</comment>
</data>
<data name="Microsoft_plugin_sys_sign_out_confirmation" xml:space="preserve">
<value>You are about to sign out of this computer, are you sure?</value>
<comment>This should align to the action in windows of a signing out back to the lock screen.</comment>
</data>
<data name="Microsoft_plugin_sys_sign_out_description" xml:space="preserve">
<value>Sign out of computer</value>
<comment>This should align to the action in windows of a signing out back to the lock screen.</comment>
Expand All @@ -177,6 +204,10 @@
<value>Sleep</value>
<comment>This should align to the action in Windows of a making your computer go to sleep.</comment>
</data>
<data name="Microsoft_plugin_sys_sleep_confirmation" xml:space="preserve">
<value>You are about to put this computer to sleep, are you sure?</value>
<comment>This should align to the action in Windows of a making your computer go to sleep.</comment>
</data>
<data name="Microsoft_plugin_sys_sleep_description" xml:space="preserve">
<value>Put computer to sleep</value>
<comment>This should align to the action in Windows of a making your computer go to sleep.</comment>
Expand Down
1 change: 1 addition & 0 deletions src/modules/launcher/Wox.Plugin/PluginPair.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ public void Update(PowerLauncherPluginSettings setting, IPublicAPI api)

Metadata.ActionKeyword = setting.ActionKeyword;
Metadata.IsGlobal = setting.IsGlobal;

if (Plugin is ISettingProvider)
{
(Plugin as ISettingProvider).UpdateSettings(setting);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,20 +278,18 @@
AutomationProperties.LabeledBy="{Binding ElementName=ActionKeywordHeaderTextBlock}"
HorizontalAlignment="Left"
IsEnabled="{x:Bind Enabled, Mode=OneWay}" />
<CheckBox x:Uid="PowerLauncher_IncludeInGlobalResult"

<CheckBox x:Uid="PowerLauncher_IncludeInGlobalResult"
IsChecked="{x:Bind Path=IsGlobal, Mode=TwoWay}"
IsEnabled="{x:Bind Enabled, Mode=OneWay}"
Margin="{StaticResource SmallTopMargin}"/>



<TextBlock x:Name="AdditionalOptionsTextBlock"
x:Uid="Run_AdditionalOptions"
Margin="{StaticResource SmallTopMargin}"
Visibility="{x:Bind ShowAdditionalOptions, Converter={StaticResource BoolToVisibilityConverter}}"
Style="{StaticResource SettingsGroupTitleStyle}"
Opacity="{x:Bind DisabledOpacity}"/>
<TextBlock x:Name="AdditionalOptionsTextBlock"
x:Uid="Run_AdditionalOptions"
Margin="{StaticResource SmallTopMargin}"
Visibility="{x:Bind ShowAdditionalOptions, Converter={StaticResource BoolToVisibilityConverter}}"
Style="{StaticResource SettingsGroupTitleStyle}"
Opacity="{x:Bind DisabledOpacity}"/>

<ListView ItemsSource="{x:Bind Path=AdditionalOptions}"
SelectionMode="None"
Expand Down

0 comments on commit 0463633

Please sign in to comment.