winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

SettingsCommand.cpp (9025B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #include "pch.h"
      4 #include "SettingsCommand.h"
      5 #include "Workflows/WorkflowBase.h"
      6 #include "Workflows/SettingsFlow.h"
      7 
      8 namespace AppInstaller::CLI
      9 {
     10     using namespace Utility::literals;
     11     using namespace AppInstaller::Settings;
     12     using namespace std::string_view_literals;
     13 
     14     namespace
     15     {
     16         Utility::LocIndView s_SettingsCommand_HelpLink = "https://aka.ms/winget-settings"_liv;
     17     }
     18 
     19     std::vector<std::unique_ptr<Command>> SettingsCommand::GetCommands() const
     20     {
     21         return InitializeFromMoveOnly<std::vector<std::unique_ptr<Command>>>({
     22             std::make_unique<SettingsExportCommand>(FullName()),
     23             std::make_unique<SettingsSetCommand>(FullName()),
     24             std::make_unique<SettingsResetCommand>(FullName()),
     25             });
     26     }
     27 
     28     std::vector<Argument> SettingsCommand::GetArguments() const
     29     {
     30         return {
     31             Argument{ Execution::Args::Type::AdminSettingEnable, Resource::String::AdminSettingEnableDescription, ArgumentType::Standard, Argument::Visibility::Help },
     32             Argument{ Execution::Args::Type::AdminSettingDisable, Resource::String::AdminSettingDisableDescription, ArgumentType::Standard, Argument::Visibility::Help },
     33         };
     34     }
     35 
     36     Resource::LocString SettingsCommand::ShortDescription() const
     37     {
     38         return { Resource::String::SettingsCommandShortDescription };
     39     }
     40 
     41     Resource::LocString SettingsCommand::LongDescription() const
     42     {
     43         return { Resource::String::SettingsCommandLongDescription };
     44     }
     45 
     46     Utility::LocIndView SettingsCommand::HelpLink() const
     47     {
     48         return s_SettingsCommand_HelpLink;
     49     }
     50 
     51     void SettingsCommand::ValidateArgumentsInternal(Execution::Args& execArgs) const
     52     {
     53         // Get admin setting string for all available options except Unknown
     54         std::vector<Utility::LocIndString> adminSettingList;
     55         for (auto setting : GetAllSequentialEnumValues(BoolAdminSetting::Unknown))
     56         {
     57             adminSettingList.emplace_back(AdminSettingToString(setting));
     58         }
     59 
     60         Utility::LocIndString validOptions = Join(", "_liv, adminSettingList);
     61 
     62         if (execArgs.Contains(Execution::Args::Type::AdminSettingEnable) && BoolAdminSetting::Unknown == StringToBoolAdminSetting(execArgs.GetArg(Execution::Args::Type::AdminSettingEnable)))
     63         {
     64             throw CommandException(Resource::String::InvalidArgumentValueError(ArgumentCommon::ForType(Execution::Args::Type::AdminSettingEnable).Name, validOptions));
     65         }
     66 
     67         if (execArgs.Contains(Execution::Args::Type::AdminSettingDisable) && BoolAdminSetting::Unknown == StringToBoolAdminSetting(execArgs.GetArg(Execution::Args::Type::AdminSettingDisable)))
     68         {
     69             throw CommandException(Resource::String::InvalidArgumentValueError(ArgumentCommon::ForType(Execution::Args::Type::AdminSettingDisable).Name, validOptions));
     70         }
     71     }
     72 
     73     void SettingsCommand::ExecuteInternal(Execution::Context& context) const
     74     {
     75         if (context.Args.Contains(Execution::Args::Type::AdminSettingEnable))
     76         {
     77             context <<
     78                 Workflow::EnsureRunningAsAdmin <<
     79                 Workflow::EnableAdminSetting;
     80 
     81         }
     82         else if (context.Args.Contains(Execution::Args::Type::AdminSettingDisable))
     83         {
     84             context <<
     85                 Workflow::EnsureRunningAsAdmin <<
     86                 Workflow::DisableAdminSetting;
     87         }
     88         else
     89         {
     90             context << Workflow::OpenUserSetting;
     91         }
     92     }
     93 
     94     Resource::LocString SettingsExportCommand::ShortDescription() const
     95     {
     96         return { Resource::String::SettingsExportCommandShortDescription };
     97     }
     98 
     99     Resource::LocString SettingsExportCommand::LongDescription() const
    100     {
    101         return { Resource::String::SettingsExportCommandLongDescription };
    102     }
    103 
    104     Utility::LocIndView SettingsExportCommand::HelpLink() const
    105     {
    106         return s_SettingsCommand_HelpLink;
    107     }
    108 
    109     void SettingsExportCommand::ExecuteInternal(Execution::Context& context) const
    110     {
    111         context <<
    112             Workflow::ExportSettings;
    113     }
    114 
    115     std::vector<Argument> SettingsSetCommand::GetArguments() const
    116     {
    117         return {
    118             Argument { Execution::Args::Type::SettingName, Resource::String::SettingNameArgumentDescription, ArgumentType::Positional, true },
    119             Argument { Execution::Args::Type::SettingValue, Resource::String::SettingValueArgumentDescription, ArgumentType::Positional, true },
    120         };
    121     }
    122 
    123     Resource::LocString SettingsSetCommand::ShortDescription() const
    124     {
    125         return { Resource::String::SettingsSetCommandShortDescription };
    126     }
    127 
    128     Resource::LocString SettingsSetCommand::LongDescription() const
    129     {
    130         return { Resource::String::SettingsSetCommandLongDescription };
    131     }
    132 
    133     Utility::LocIndView SettingsSetCommand::HelpLink() const
    134     {
    135         return s_SettingsCommand_HelpLink;
    136     }
    137 
    138     void SettingsSetCommand::ValidateArgumentsInternal(Execution::Args& execArgs) const
    139     {
    140         // Get admin setting string for all available options except Unknown
    141         std::vector<Utility::LocIndString> adminSettingList;
    142         for (auto setting : GetAllSequentialEnumValues(StringAdminSetting::Unknown))
    143         {
    144             adminSettingList.emplace_back(AdminSettingToString(setting));
    145         }
    146 
    147         Utility::LocIndString validOptions = Join(", "_liv, adminSettingList);
    148 
    149         if (StringAdminSetting::Unknown == StringToStringAdminSetting(execArgs.GetArg(Execution::Args::Type::SettingName)))
    150         {
    151             throw CommandException(Resource::String::InvalidArgumentValueError(ArgumentCommon::ForType(Execution::Args::Type::SettingName).Name, validOptions));
    152         }
    153     }
    154 
    155     void SettingsSetCommand::ExecuteInternal(Execution::Context& context) const
    156     {
    157         context <<
    158             Workflow::EnsureRunningAsAdmin <<
    159             Workflow::SetAdminSetting;
    160     }
    161 
    162     std::vector<Argument> SettingsResetCommand::GetArguments() const
    163     {
    164         return {
    165             Argument { Execution::Args::Type::SettingName, Resource::String::SettingNameArgumentDescription, ArgumentType::Positional },
    166             Argument { Execution::Args::Type::All, Resource::String::ResetAllAdminSettingsArgumentDescription, ArgumentType::Flag },
    167         };
    168     }
    169 
    170     Resource::LocString SettingsResetCommand::ShortDescription() const
    171     {
    172         return { Resource::String::SettingsResetCommandShortDescription };
    173     }
    174 
    175     Resource::LocString SettingsResetCommand::LongDescription() const
    176     {
    177         return { Resource::String::SettingsResetCommandLongDescription };
    178     }
    179 
    180     Utility::LocIndView SettingsResetCommand::HelpLink() const
    181     {
    182         return s_SettingsCommand_HelpLink;
    183     }
    184 
    185     void SettingsResetCommand::ValidateArgumentsInternal(Execution::Args& execArgs) const
    186     {
    187         if (execArgs.Contains(Execution::Args::Type::All))
    188         {
    189             if (execArgs.Contains(Execution::Args::Type::SettingName))
    190             {
    191                 throw CommandException(Resource::String::MultipleExclusiveArgumentsProvided("all|setting"_liv));
    192             }
    193 
    194             return;
    195         }
    196 
    197         if (!execArgs.Contains(Execution::Args::Type::SettingName))
    198         {
    199             throw CommandException(Resource::String::RequiredArgError(ArgumentCommon::ForType(Execution::Args::Type::SettingName).Name));
    200         }
    201 
    202         // Get admin setting string for all available options except Unknown.
    203         // We accept both bool and string settings
    204         std::vector<Utility::LocIndString> adminSettingList;
    205         for (auto setting : GetAllSequentialEnumValues(BoolAdminSetting::Unknown))
    206         {
    207             adminSettingList.emplace_back(AdminSettingToString(setting));
    208         }
    209         for (auto setting : GetAllSequentialEnumValues(StringAdminSetting::Unknown))
    210         {
    211             adminSettingList.emplace_back(AdminSettingToString(setting));
    212         }
    213 
    214         Utility::LocIndString validOptions = Join(", "_liv, adminSettingList);
    215 
    216         if (StringAdminSetting::Unknown == StringToStringAdminSetting(execArgs.GetArg(Execution::Args::Type::SettingName))
    217             && BoolAdminSetting::Unknown == StringToBoolAdminSetting(execArgs.GetArg(Execution::Args::Type::SettingName)))
    218         {
    219             throw CommandException(Resource::String::InvalidArgumentValueError(ArgumentCommon::ForType(Execution::Args::Type::SettingName).Name, validOptions));
    220         }
    221     }
    222 
    223     void SettingsResetCommand::ExecuteInternal(Execution::Context& context) const
    224     {
    225         context <<
    226             Workflow::EnsureRunningAsAdmin <<
    227             (context.Args.Contains(Execution::Args::Type::All) ? Workflow::ResetAllAdminSettings : Workflow::ResetAdminSetting);
    228     }
    229 }