Ejemplo n.º 1
0
        /// <summary>
        /// Attempts to parse a string as an Rdp setting
        /// </summary>
        /// <param name="rdpSettingString">The Rdp setting in string format</param>
        /// <param name="setting">The parsed RdpSetting</param>
        /// <returns>If parse was successful. There will be no cake.</returns>
        public static bool TryParse(string rdpSettingString, out RdpSetting setting)
        {
            setting = null;

            if (string.IsNullOrWhiteSpace(rdpSettingString))
            {
                return(false);
            }

            Match regexMatch = SettingRegex.Match(rdpSettingString);

            if (!regexMatch.Success)
            {
                return(false);
            }

            string settingName  = regexMatch.Groups[SettingNameGroupName].Value;
            char   settingType  = regexMatch.Groups[SettingTypeGroupName].Value[0];
            string settingValue = regexMatch.Groups[SettingValueGroupName].Value;

            try
            {
                setting = new RdpSetting(settingName, settingType, settingValue);
            }
            catch (ArgumentException)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Parses a string and converts each line into an rdp setting if it is valid
        /// </summary>
        /// <param name="data">The string to parse</param>
        /// <returns>A list of rdp settings</returns>
        private static List <RdpSetting> ParseSettings(string data)
        {
            List <RdpSetting> settings = new List <RdpSetting>();

            if (string.IsNullOrWhiteSpace(data))
            {
                return(settings);
            }

            using (StringReader reader = new StringReader(data))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    RdpSetting parsedSetting;

                    if (RdpSetting.TryParse(line, out parsedSetting))
                    {
                        settings.Add(parsedSetting);
                    }
                }
            }

            return(settings);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Checks if an alternate full address is supplied, if not, then all it.
        /// This stops people from adding a full address after the signing is done
        /// </summary>
        /// <param name="settings">The collection of settings to check and add to</param>
        private static void EnsureAlternateFullAddressExists(List <RdpSetting> settings)
        {
            if (settings.Any(x => x.SettingName.Equals(RdpSettingHelper.AlternateFullAddressSettingName, StringComparison.OrdinalIgnoreCase)))
            {
                return;
            }

            RdpSetting fullAddressSetting = settings.FirstOrDefault(x =>
                                                                    x.SettingName.Equals(RdpSettingHelper.FullAddressSettingName, StringComparison.OrdinalIgnoreCase)
                                                                    );

            if (fullAddressSetting == null)
            {
                throw new Exception("Supplied Rdp settings do not contain a '" + RdpSettingHelper.FullAddressSettingName + "' setting");
            }

            settings.Add(new RdpSetting(RdpSettingHelper.AlternateFullAddressSettingName, fullAddressSetting.SettingType, fullAddressSetting.SettingValue));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Signs the provided rdp string
        /// </summary>
        /// <param name="rdpText">The string data inside an rdp file</param>
        /// <param name="signingCertificate">The certificate you wish to use when signing</param>
        /// <returns>The signed value within an rdp file</returns>
        public static string Sign(string rdpText, X509Certificate2 signingCertificate)
        {
            List <RdpSetting> settings = ParseSettings(rdpText);

            RemoveSignSettings(settings);

            EnsureAlternateFullAddressExists(settings);

            List <RdpSetting> settingsToSign = settings.Where(setting => setting.IsSignableSetting).ToList();

            RdpSetting signScopeSetting = BuildSignScopeSetting(settingsToSign);

            settings.Add(signScopeSetting);
            settingsToSign.Add(signScopeSetting);

            RdpSetting signatureSetting = BuildSignatureSetting(settingsToSign, signingCertificate);

            settings.Add(signatureSetting);

            string signedRdpFile = FlattenSettings(settings);

            return(signedRdpFile);
        }