using Microsoft.VisualBasic.FileIO; namespace Password_Manager { static class ConfigFileManager { #region Config flags /*Configuration: (format: fieldname=value) password_store_path: path to the folder which contains the .gpg files recipient: whose public key to use for encryption when a new password is created */ private static string CONFIGPATH = SpecialDirectories.CurrentUserApplicationData + "\\config.cfg"; private static char DELIMETER = '='; private static string RECIPIENT = "recipient"; private static string PATH = "password_store_path"; #endregion private static Config Configuration; public static void Init() { bool success = false; while (!success) { if (File.Exists(CONFIGPATH)) { StreamReader sr = new StreamReader(CONFIGPATH); string? path = null, recipient = null; while (!sr.EndOfStream) { string[]? fields = sr.ReadLine().Split(DELIMETER); if (fields != null) { if (fields[0] == PATH) { path = fields[1]; } else if (fields[0] == RECIPIENT) { recipient = fields[1]; } } else //probably an empty line or something { continue; } } if (path != null && recipient != null) { Configuration = new Config(path, recipient); success = true; } else { throw new InvalidConfigurationException("One or more required fileds were missing from the configuration file."); } } else { CreateDefaultConfig(); } } } public static string GetPath() { return Configuration.PasswordStorePath; } public static string GetRecipient() { return Configuration.Recipient; } private static void CreateDefaultConfig() { try { string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name; StreamWriter sw = new StreamWriter(CONFIGPATH); sw.WriteLine(RECIPIENT + DELIMETER + user); sw.WriteLine(PATH + DELIMETER + SpecialDirectories.CurrentUserApplicationData); sw.Close(); } catch (Exception e) { MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }