From 9ffbabdd35d0eef005efa391b60ccf9a8a76c504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miskolczi=20Rich=C3=A1rd?= Date: Tue, 28 Mar 2023 10:59:44 +0200 Subject: [PATCH] Rethinking of this class: - private static Config object - Designated methods for providing fields of said Config object - Config info isn't fetched from the file all the time, but rather only once in the Init() method. After that, data is fetched from the Configuration object --- Password Manager/ConfigFileManager.cs | 57 +++++++++++++++++++-------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/Password Manager/ConfigFileManager.cs b/Password Manager/ConfigFileManager.cs index 47d2ac7..c1152d4 100644 --- a/Password Manager/ConfigFileManager.cs +++ b/Password Manager/ConfigFileManager.cs @@ -4,26 +4,28 @@ namespace Password_Manager { static class ConfigFileManager { - private static string configPath = SpecialDirectories.CurrentUserApplicationData + "\\config.cfg"; +#region Config flags + /*Configuration: (format: fieldname=value) - #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 const string CONFIGPATH = SpecialDirectories.CurrentUserApplicationData + "\\config.cfg"; + private static const char DELIMETER = '='; + private static const string RECIPIENT = "recipient"; + private static const string PATH = "password_store_path"; +#endregion - pwdStorePath: path to the folder which contains the .gpg files - recipient: whose public key to use for encryption when a new password is created - */ - private const char DELIMETER = '='; - private const string RECIPIENT = "recipient"; - private const string PATH = "pwdStorePath"; + private static Config Configuration; - #endregion - public static string GetPath() - { + public static void Init() + { try { - StreamReader sr = new StreamReader(configPath); + StreamReader sr = new StreamReader(CONFIGPATH); if (sr != null) { + string? path, recipient; while (!sr.EndOfStream) { string[]? fields = sr.ReadLine().Split(DELIMETER); @@ -31,14 +33,27 @@ namespace Password_Manager { if (fields[0] == PATH) { - return fields[1]; + path = fields[0]; } + else if (fields[0] == RECIPIENT) + { + recipient = fields[0]; + } } - else + else //probably an empty line or something { continue; } } + + if (path != null && recipient != null) + { + Configuration = new Config(path, recipient); + } + else + { + throw new InvalidConfigurationException("One or more required fileds were missing from the configuration file."); + } } else { @@ -53,15 +68,23 @@ namespace Password_Manager { MessageBox.Show(e.ToString(), "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } + } - return @"C:\Users\Typo\pass"; //TODO: temporary default value + public static string GetPath() + { + return Configuration.PasswordStorePath; } + public static string GetRecipient() + { + return Configuration.Recipient; + } + private static void CreateDefaultConfig() { try { - StreamWriter sw = new StreamWriter(configPath); + StreamWriter sw = new StreamWriter(CONFIGPATH); sw.WriteLine(RECIPIENT + DELIMETER + "typo"); sw.WriteLine(PATH + DELIMETER + @"C:\Users\Typo\pass"); sw.Close();