public static EntrySettings GetKeeAgentSettings(this PwEntry entry) { var settingsString = entry.Strings.ReadSafe(settingsStringId); // move settings from string to binary attachment if (settingsString != string.Empty) { entry.Binaries.Set(settingsBinaryId, new ProtectedBinary(false, Encoding.Unicode.GetBytes(settingsString))); entry.Strings.Remove(settingsStringId); entry.Touch(true); } var settingsBinary = entry.Binaries.Get(settingsBinaryId); if (settingsBinary != null) { settingsString = Encoding.Unicode.GetString(settingsBinary.ReadData()); if (!string.IsNullOrWhiteSpace(settingsString)) { using (var reader = XmlReader.Create(new StringReader(settingsString))) { if (EntrySettingsSerializer.CanDeserialize(reader)) { return(EntrySettingsSerializer.Deserialize(reader) as EntrySettings); } } } } return(new EntrySettings()); }
public static void SetKeeAgentSettings(this ProtectedBinaryDictionary binaries, EntrySettings settings) { // only save if there is an existing entry or AllowUseOfSshKey is checked // this way we don't pollute entries that don't have SSH keys if (binaries.Get(settingsBinaryId) != null || settings.AllowUseOfSshKey) { using (var writer = new StringWriter()) { EntrySettingsSerializer.Serialize(writer, settings); // string is protected just to make UI look cleaner binaries.Set(settingsBinaryId, new ProtectedBinary(false, Encoding.Unicode.GetBytes(writer.ToString()))); } } }