winget-cli

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

ConfigurationSetUtilities.cpp (5365B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #include "pch.h"
      4 #include "ConfigurationSetUtilities.h"
      5 #include <AppInstallerStrings.h>
      6 
      7 using namespace std::string_view_literals;
      8 
      9 namespace winrt::Microsoft::Management::Configuration::implementation
     10 {
     11     std::string_view GetConfigurationFieldName(ConfigurationField fieldName)
     12     {
     13         switch (fieldName)
     14         {
     15         case ConfigurationField::ConfigurationVersion: return "configurationVersion"sv;
     16         case ConfigurationField::Properties: return "properties"sv;
     17         case ConfigurationField::Resource: return "resource"sv;
     18         case ConfigurationField::Directives: return "directives"sv;
     19         case ConfigurationField::Settings: return "settings"sv;
     20         case ConfigurationField::Assertions: return "assertions"sv;
     21         case ConfigurationField::Id: return "id"sv;
     22         case ConfigurationField::DependsOn: return "dependsOn"sv;
     23 
     24         case ConfigurationField::Resources: return "resources"sv;
     25         case ConfigurationField::ModuleDirective: return "module"sv;
     26         case ConfigurationField::SecurityContextMetadata: return "securityContext"sv;
     27 
     28         case ConfigurationField::Schema: return "$schema"sv;
     29         case ConfigurationField::Metadata: return "metadata"sv;
     30         case ConfigurationField::Parameters: return "parameters"sv;
     31         case ConfigurationField::Variables: return "variables"sv;
     32         case ConfigurationField::Type: return "type"sv;
     33         case ConfigurationField::Description: return "description"sv;
     34         case ConfigurationField::Name: return "name"sv;
     35         case ConfigurationField::IsGroupMetadata: return "isGroup"sv;
     36         case ConfigurationField::DefaultValue: return "defaultValue"sv;
     37         case ConfigurationField::AllowedValues: return "allowedValues"sv;
     38         case ConfigurationField::MinimumLength: return "minLength"sv;
     39         case ConfigurationField::MaximumLength: return "maxLength"sv;
     40         case ConfigurationField::MinimumValue: return "minValue"sv;
     41         case ConfigurationField::MaximumValue: return "maxValue"sv;
     42         case ConfigurationField::WingetMetadataRoot: return "winget"sv;
     43         case ConfigurationField::ProcessorMetadata: return "processor"sv;
     44         case ConfigurationField::ProcessorIdentifierMetadata: return "identifier"sv;
     45         case ConfigurationField::ProcessorPropertiesMetadata: return "properties"sv;
     46         }
     47 
     48         THROW_HR(E_UNEXPECTED);
     49     }
     50 
     51     hstring GetConfigurationFieldNameHString(ConfigurationField fieldName)
     52     {
     53         return hstring{ AppInstaller::Utility::ConvertToUTF16(GetConfigurationFieldName(fieldName)) };
     54     }
     55 
     56     bool TryParseSecurityContext(const hstring& value, SecurityContext& result)
     57     {
     58         std::wstring securityContextLower = AppInstaller::Utility::ToLower(value);
     59 
     60         if (securityContextLower == L"elevated")
     61         {
     62             result = SecurityContext::Elevated;
     63         }
     64         else if (securityContextLower == L"restricted")
     65         {
     66             result = SecurityContext::Restricted;
     67         }
     68         else if (securityContextLower == L"current")
     69         {
     70             result = SecurityContext::Current;
     71         }
     72         else
     73         {
     74             return false;
     75         }
     76 
     77         return true;
     78     }
     79 
     80     SecurityContext ParseSecurityContext(const hstring& value)
     81     {
     82         SecurityContext result = SecurityContext::Current;
     83         THROW_HR_IF(E_INVALIDARG, !TryParseSecurityContext(value, result));
     84         return result;
     85     }
     86 
     87     std::string_view ToString(SecurityContext value)
     88     {
     89         switch (value)
     90         {
     91         case SecurityContext::Current: return "current";
     92         case SecurityContext::Restricted: return "restricted";
     93         case SecurityContext::Elevated: return "elevated";
     94         }
     95 
     96         THROW_HR(E_INVALIDARG);
     97     }
     98 
     99     std::wstring_view ToWString(SecurityContext value)
    100     {
    101         switch (value)
    102         {
    103         case SecurityContext::Current: return L"current";
    104         case SecurityContext::Restricted: return L"restricted";
    105         case SecurityContext::Elevated: return L"elevated";
    106         }
    107 
    108         THROW_HR(E_INVALIDARG);
    109     }
    110 
    111     Windows::Foundation::Collections::ValueSet TryLookupValueSet(const Windows::Foundation::Collections::ValueSet& valueSet, ConfigurationField field)
    112     {
    113         Windows::Foundation::IInspectable value = valueSet.TryLookup(GetConfigurationFieldNameHString(field));
    114 
    115         if (value)
    116         {
    117             return value.try_as<Windows::Foundation::Collections::ValueSet>();
    118         }
    119 
    120         return nullptr;
    121     }
    122 
    123     Windows::Foundation::IPropertyValue TryLookupProperty(const Windows::Foundation::Collections::ValueSet& valueSet, ConfigurationField field, Windows::Foundation::PropertyType type)
    124     {
    125         Windows::Foundation::IInspectable value = valueSet.TryLookup(GetConfigurationFieldNameHString(field));
    126 
    127         if (value)
    128         {
    129             Windows::Foundation::IPropertyValue property = value.try_as<Windows::Foundation::IPropertyValue>();
    130             if (property && (type == Windows::Foundation::PropertyType::Empty || property.Type() == type))
    131             {
    132                 return property;
    133             }
    134         }
    135 
    136         return nullptr;
    137     }
    138 }