- 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
99 lines
2.8 KiB
C#
99 lines
2.8 KiB
C#
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 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
|
|
|
|
private static Config Configuration;
|
|
|
|
public static void Init()
|
|
{
|
|
try
|
|
{
|
|
StreamReader sr = new StreamReader(CONFIGPATH);
|
|
if (sr != null)
|
|
{
|
|
string? path, recipient;
|
|
while (!sr.EndOfStream)
|
|
{
|
|
string[]? fields = sr.ReadLine().Split(DELIMETER);
|
|
if (fields != null)
|
|
{
|
|
if (fields[0] == PATH)
|
|
{
|
|
path = fields[0];
|
|
}
|
|
else if (fields[0] == RECIPIENT)
|
|
{
|
|
recipient = fields[0];
|
|
}
|
|
}
|
|
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
|
|
{
|
|
throw new FileNotFoundException();
|
|
}
|
|
}
|
|
catch (FileNotFoundException)
|
|
{
|
|
CreateDefaultConfig();
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
MessageBox.Show(e.ToString(), "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
public static string GetPath()
|
|
{
|
|
return Configuration.PasswordStorePath;
|
|
}
|
|
|
|
public static string GetRecipient()
|
|
{
|
|
return Configuration.Recipient;
|
|
}
|
|
|
|
private static void CreateDefaultConfig()
|
|
{
|
|
try
|
|
{
|
|
StreamWriter sw = new StreamWriter(CONFIGPATH);
|
|
sw.WriteLine(RECIPIENT + DELIMETER + "typo");
|
|
sw.WriteLine(PATH + DELIMETER + @"C:\Users\Typo\pass");
|
|
sw.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
}
|