using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.IO; using System.Xml.Serialization; using System.Diagnostics; using System.Security.Cryptography; namespace Misuzilla.Applications.TwitterIrcGateway { public class Config { public String IMServiceServerName { get; set; } public String IMServerName { get; set; } public String IMUserName { get; set; } public String IMEncryptoPassword { get; set; } public String GetIMPassword(String key) { StringBuilder sb = new StringBuilder(); String passwordDecoded = Encoding.UTF8.GetString(Convert.FromBase64String(IMEncryptoPassword)); for (var i = 0; i < passwordDecoded.Length; i++) { sb.Append((Char)(passwordDecoded[i] ^ key[i % key.Length])); } return sb.ToString(); } public void SetIMPassword(String key, String password) { StringBuilder sb = new StringBuilder(); for (var i = 0; i < password.Length; i++) { sb.Append((Char)(password[i] ^ key[i % key.Length])); } IMEncryptoPassword = Convert.ToBase64String(Encoding.UTF8.GetBytes(sb.ToString())); } #region XML Serialize private static Object _syncObject = new object(); private static XmlSerializer _serializer = null; static Config() { lock (_syncObject) { if (_serializer == null) { _serializer = new XmlSerializer(typeof(Config)); } } } public static XmlSerializer Serializer { get { return _serializer; } } public void Serialize(Stream stream) { using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stream, Encoding.UTF8)) { _serializer.Serialize(xmlTextWriter, this); } } public static Config Deserialize(Stream stream) { return _serializer.Deserialize(stream) as Config; } #endregion /// /// /// /// /// public static Config Load(String path) { // group 読み取り if (File.Exists(path)) { Trace.WriteLine(String.Format("Load Config: {0}", path)); try { using (FileStream fs = new FileStream(path, FileMode.Open)) { try { Config config = Config.Deserialize(fs); if (config != null) return config; } catch (XmlException xe) { Trace.WriteLine(xe.Message); } catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } } } catch (IOException ie) { Trace.WriteLine(ie.Message); throw; } } return new Config(); } /// /// /// /// public void Save(String path) { Trace.WriteLine(String.Format("Save Config: {0}", path)); try { String dir = Path.GetDirectoryName(path); Directory.CreateDirectory(dir); using (FileStream fs = new FileStream(path, FileMode.Create)) { try { this.Serialize(fs); } catch (XmlException xe) { Trace.WriteLine(xe.Message); } catch (InvalidOperationException ioe) { Trace.WriteLine(ioe.Message); } } } catch (IOException ie) { Trace.WriteLine(ie.Message); throw; } } } }