/// /// Copyright (c) 2020 Sensus Slovensko a.s. /// using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.Xml.Serialization; namespace EventViewer { /// /// Class to be serialized to an XML file... /// [XmlRootAttribute("EventViewer")] public class LocalSettings { static XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeof(LocalSettings) })[0]; /// /// Configuration file ecryption/decryption key and initialization vector /// static byte[] key = new byte[] { 83, 254, 105, 64, 184, 201, 195, 127, 52, 99, 77, 45, 252, 132, 163, 156 }; static byte[] IV = new byte[] { 189, 23, 137, 56, 204, 241, 242, 118, 28, 89, 9, 198, 224, 111, 186, 125 }; /// Common public string ConnectionString; public bool NonAnonymousAccess; public string UserName; public string UsersDBConnString; public int RecentTimeDays; public string Language; /// MainWnd public int WndLeft; public int WndTop; public int WndWidth; public int WndHeight; public bool WndMaximized; public int ColWid1; public int ColWid2; public int ColWid3; public int ColWid4; public int ColWid5; public int ColWid6; public LocalSettings() { } public LocalSettings(bool createNew) : this() { /// Default settings /// Common #if DEBUG ConnectionString = "SERVER=localhost; DATABASE=test-e; UID=root; PASSWORD=kraken; CHARSET=utf8"; UsersDBConnString = "SERVER=localhost; DATABASE=test; UID=root; PASSWORD=kraken; CHARSET=utf8;"; #else ConnectionString = "SERVER=10.42.128.24; DATABASE=st_wr_shared_events; UID=v9305784; PASSWORD=p89344390; CHARSET=utf8"; UsersDBConnString = "SERVER=10.42.128.24; DATABASE=st_wr_shared_config; UID=u9305784; PASSWORD=p89344390; CHARSET=utf8;"; #endif RecentTimeDays = 7; Language = "sk"; /// MainWnd WndLeft = 20; WndTop = 20; WndWidth = 1250; WndHeight = 750; WndMaximized = false; ColWid1 = 80; ColWid2 = 50; ColWid3 = 100; ColWid4 = 60; ColWid5 = 70; ColWid6 = 500; } /// /// Load public fields of this class from the XML file. /// /// Name of the file. /// /// LocalSettings object or null when Load() fails /// public static LocalSettings Load(string fileName) { try { bool isEncrypted = true; using (StreamReader reader = new StreamReader(fileName)) { isEncrypted = !reader.ReadLine().StartsWith(" /// Save public fields of this class to the XML file. /// public void Save() { try { #if false /// Write settings to an unencrypted file using (TextWriter writer = new StreamWriter(Program.LocalSettingsFileName)) { serializer.Serialize(writer, this); log.Warn("LocalSettings succesfully saved"); } #else /// Encrypt and write to file 'Program.LocalSettingsFileName' using (RijndaelManaged aes = new RijndaelManaged { Padding = PaddingMode.Zeros }) { using (FileStream fsCrypt = new FileStream(Program.LocalSettingsFileName, FileMode.Create)) { using (ICryptoTransform encryptor = aes.CreateEncryptor(key, IV)) { using (CryptoStream cs = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write)) { using (MemoryStream mStream = new MemoryStream()) { using (var writer = new StreamWriter(mStream)) { /// Serialize and write settings to a memory stream serializer.Serialize(writer, this); writer.Flush(); mStream.Position = 0; using (var reader = new StreamReader(mStream)) { /// Encrypt and write to file 'Program.LocalSettingsFileName' int data; while ((data = mStream.ReadByte()) != -1) cs.WriteByte((byte)data); //log.WarnFormat("Succesfully encrypted and saved to '{0}'", Program.LocalSettingsFileName); } } } } } } } #endif } catch (Exception) { //log.ErrorFormat("Failed to save to '{0}': {1}", Program.LocalSettingsFileName, e.Message); } } } }