|
|
1.1 ! root 1: /* ! 2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. ! 3: ! 4: Governed by the TrueCrypt License 2.4 the full text of which is contained ! 5: in the file License.txt included in TrueCrypt binary and source code ! 6: distribution packages. ! 7: */ ! 8: ! 9: #include "System.h" ! 10: #include "Main/Application.h" ! 11: #include "UserPreferences.h" ! 12: #include "Xml.h" ! 13: ! 14: namespace TrueCrypt ! 15: { ! 16: void UserPreferences::SetValue (const wxString &cfgText, bool &cfgVar) ! 17: { ! 18: if (cfgText == L"0") ! 19: cfgVar = false; ! 20: else if (cfgText == L"1") ! 21: cfgVar = true; ! 22: } ! 23: ! 24: void UserPreferences::SetValue (const wxString &cfgText, int &cfgVar) ! 25: { ! 26: if (cfgText.empty()) ! 27: cfgVar = 0; ! 28: else ! 29: cfgVar = StringConverter::ToUInt32 (wstring (cfgText)); ! 30: } ! 31: ! 32: void UserPreferences::SetValue (const wxString &cfgText, uint64 &cfgVar) ! 33: { ! 34: if (cfgText.empty()) ! 35: cfgVar = 0; ! 36: else ! 37: cfgVar = StringConverter::ToUInt64 (wstring (cfgText)); ! 38: } ! 39: ! 40: void UserPreferences::SetValue (const wxString &cfgText, wstring &cfgVar) ! 41: { ! 42: cfgVar = cfgText; ! 43: } ! 44: ! 45: void UserPreferences::SetValue (const wxString &cfgText, wxString &cfgVar) ! 46: { ! 47: cfgVar = cfgText; ! 48: } ! 49: ! 50: void UserPreferences::Load() ! 51: { ! 52: // Preferences ! 53: FilePath cfgPath = Application::GetConfigFilePath (GetPreferencesFileName()); ! 54: if (cfgPath.IsFile()) ! 55: { ! 56: map <wxString, wxString> configMap; ! 57: foreach (XmlNode node, XmlParser (cfgPath).GetNodes (L"config")) ! 58: { ! 59: configMap[node.Attributes[L"key"]] = node.InnerText; ! 60: } ! 61: ! 62: #define TC_CONFIG_SET(NAME) SetValue (configMap[L###NAME], NAME) ! 63: ! 64: TC_CONFIG_SET (BackgroundTaskEnabled); ! 65: TC_CONFIG_SET (BackgroundTaskMenuDismountItemsEnabled); ! 66: TC_CONFIG_SET (BackgroundTaskMenuMountItemsEnabled); ! 67: TC_CONFIG_SET (BackgroundTaskMenuOpenItemsEnabled); ! 68: TC_CONFIG_SET (BeepAfterHotkeyMountDismount); ! 69: SetValue (configMap[L"CachePasswords"], DefaultMountOptions.CachePassword); ! 70: TC_CONFIG_SET (CloseBackgroundTaskOnNoVolumes); ! 71: TC_CONFIG_SET (CloseExplorerWindowsOnDismount); ! 72: TC_CONFIG_SET (DismountOnInactivity); ! 73: TC_CONFIG_SET (DismountOnLogOff); ! 74: TC_CONFIG_SET (DismountOnPowerSaving); ! 75: TC_CONFIG_SET (DismountOnScreenSaver); ! 76: TC_CONFIG_SET (DisplayMessageAfterHotkeyDismount); ! 77: TC_CONFIG_SET (BackgroundTaskEnabled); ! 78: SetValue (configMap[L"FilesystemOptions"], DefaultMountOptions.FilesystemOptions); ! 79: TC_CONFIG_SET (ForceAutoDismount); ! 80: TC_CONFIG_SET (LastSelectedSlotNumber); ! 81: TC_CONFIG_SET (MaxVolumeIdleTime); ! 82: TC_CONFIG_SET (MountDevicesOnLogon); ! 83: TC_CONFIG_SET (MountFavoritesOnLogon); ! 84: ! 85: bool readOnly; ! 86: SetValue (configMap[L"MountVolumesReadOnly"], readOnly); ! 87: DefaultMountOptions.Protection = readOnly ? VolumeProtection::ReadOnly : VolumeProtection::None; ! 88: ! 89: SetValue (configMap[L"MountVolumesRemovable"], DefaultMountOptions.Removable); ! 90: TC_CONFIG_SET (OpenExplorerWindowAfterMount); ! 91: SetValue (configMap[L"PreserveTimestamps"], DefaultMountOptions.PreserveTimestamps); ! 92: TC_CONFIG_SET (SaveHistory); ! 93: TC_CONFIG_SET (StartOnLogon); ! 94: TC_CONFIG_SET (UseKeyfiles); ! 95: TC_CONFIG_SET (WipeCacheOnAutoDismount); ! 96: TC_CONFIG_SET (WipeCacheOnClose); ! 97: } ! 98: ! 99: // Default keyfiles ! 100: cfgPath = Application::GetConfigFilePath (GetDefaultKeyfilesFileName()); ! 101: if (cfgPath.IsFile()) ! 102: { ! 103: foreach (const XmlNode &node, XmlParser (cfgPath).GetNodes (L"keyfile")) ! 104: { ! 105: DefaultKeyfiles.push_back (make_shared <Keyfile> ((wstring) node.InnerText)); ! 106: } ! 107: } ! 108: ! 109: #ifdef TC_WINDOWS ! 110: // Hotkeys ! 111: Hotkeys = Hotkey::LoadList(); ! 112: #endif ! 113: } ! 114: ! 115: void UserPreferences::Save() const ! 116: { ! 117: // Preferences ! 118: class ConfigXmlFormatter ! 119: { ! 120: public: ! 121: void AddEntry (const wchar_t *key, const wxString &value) ! 122: { ! 123: if (!value.empty()) ! 124: { ! 125: XmlNode config (L"config"); ! 126: config.Attributes[L"key"] = key; ! 127: config.InnerText = value; ! 128: XmlConfig.InnerNodes.push_back (config); ! 129: } ! 130: } ! 131: ! 132: void AddEntry (const wchar_t *key, bool value) ! 133: { ! 134: AddEntry (key, wxString (value ? L"1" : L"0")); ! 135: } ! 136: ! 137: void AddEntry (const wchar_t *key, int value) ! 138: { ! 139: wstringstream s; ! 140: s << value; ! 141: AddEntry (key, s.str()); ! 142: } ! 143: ! 144: void AddEntry (const wchar_t *key, uint64 value) ! 145: { ! 146: wstringstream s; ! 147: s << value; ! 148: AddEntry (key, s.str()); ! 149: } ! 150: ! 151: XmlNode XmlConfig; ! 152: }; ! 153: ! 154: ConfigXmlFormatter formatter; ! 155: formatter.XmlConfig.Name = L"configuration"; ! 156: ! 157: #define TC_CONFIG_ADD(NAME) formatter.AddEntry (L###NAME, NAME) ! 158: ! 159: TC_CONFIG_ADD (BackgroundTaskEnabled); ! 160: TC_CONFIG_ADD (BackgroundTaskMenuDismountItemsEnabled); ! 161: TC_CONFIG_ADD (BackgroundTaskMenuMountItemsEnabled); ! 162: TC_CONFIG_ADD (BackgroundTaskMenuOpenItemsEnabled); ! 163: TC_CONFIG_ADD (BeepAfterHotkeyMountDismount); ! 164: formatter.AddEntry (L"CachePasswords", DefaultMountOptions.CachePassword); ! 165: TC_CONFIG_ADD (CloseBackgroundTaskOnNoVolumes); ! 166: TC_CONFIG_ADD (CloseExplorerWindowsOnDismount); ! 167: TC_CONFIG_ADD (DismountOnInactivity); ! 168: TC_CONFIG_ADD (DismountOnLogOff); ! 169: TC_CONFIG_ADD (DismountOnPowerSaving); ! 170: TC_CONFIG_ADD (DismountOnScreenSaver); ! 171: TC_CONFIG_ADD (DisplayMessageAfterHotkeyDismount); ! 172: TC_CONFIG_ADD (BackgroundTaskEnabled); ! 173: formatter.AddEntry (L"FilesystemOptions", DefaultMountOptions.FilesystemOptions); ! 174: TC_CONFIG_ADD (ForceAutoDismount); ! 175: TC_CONFIG_ADD (LastSelectedSlotNumber); ! 176: TC_CONFIG_ADD (MaxVolumeIdleTime); ! 177: TC_CONFIG_ADD (MountDevicesOnLogon); ! 178: TC_CONFIG_ADD (MountFavoritesOnLogon); ! 179: formatter.AddEntry (L"MountVolumesReadOnly", DefaultMountOptions.Protection == VolumeProtection::ReadOnly); ! 180: formatter.AddEntry (L"MountVolumesRemovable", DefaultMountOptions.Removable); ! 181: TC_CONFIG_ADD (OpenExplorerWindowAfterMount); ! 182: formatter.AddEntry (L"PreserveTimestamps", DefaultMountOptions.PreserveTimestamps); ! 183: TC_CONFIG_ADD (SaveHistory); ! 184: TC_CONFIG_ADD (StartOnLogon); ! 185: TC_CONFIG_ADD (UseKeyfiles); ! 186: TC_CONFIG_ADD (WipeCacheOnAutoDismount); ! 187: TC_CONFIG_ADD (WipeCacheOnClose); ! 188: ! 189: XmlWriter writer (Application::GetConfigFilePath (GetPreferencesFileName(), true)); ! 190: writer.WriteNode (formatter.XmlConfig); ! 191: writer.Close(); ! 192: ! 193: // Default keyfiles ! 194: FilePath keyfilesCfgPath = Application::GetConfigFilePath (GetDefaultKeyfilesFileName(), true); ! 195: ! 196: if (DefaultKeyfiles.empty()) ! 197: { ! 198: if (keyfilesCfgPath.IsFile()) ! 199: keyfilesCfgPath.Delete(); ! 200: } ! 201: else ! 202: { ! 203: XmlNode keyfilesXml (L"defaultkeyfiles"); ! 204: ! 205: foreach_ref (const Keyfile &keyfile, DefaultKeyfiles) ! 206: { ! 207: keyfilesXml.InnerNodes.push_back (XmlNode (L"keyfile", wxString (FilesystemPath (keyfile)))); ! 208: } ! 209: ! 210: XmlWriter keyfileWriter (keyfilesCfgPath); ! 211: keyfileWriter.WriteNode (keyfilesXml); ! 212: keyfileWriter.Close(); ! 213: } ! 214: ! 215: #ifdef TC_WINDOWS ! 216: // Hotkeys ! 217: Hotkey::SaveList (Hotkeys); ! 218: #endif ! 219: } ! 220: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.