public override string GetOptions(string strCurrentOptions) { advancedOptionsEnabled = null; PasswordSequenceConfiguration configuration = new Sequencer().Load(strCurrentOptions); if (configuration == null) { PasswordSequenceConfigurationFactory factory = new PasswordSequenceConfigurationFactory(); string userFilePath = factory.GetUserFilePath(); MessageBox.Show("An error occurred reading the Sequencer configuration file at " + userFilePath + ". It may be corrupt. Fix or delete and try again. " + "A default configuration has been loaded.", "Error Reading Configuration", MessageBoxButtons.OK, MessageBoxIcon.Error); } MainForm form = new MainForm(configuration ?? new PasswordSequenceConfiguration(true)); form.ShowDialog(); // this reset the need for a dialog if ((advancedOptionsRequired = GetAdvancedOptionRequired(form.Configuration)) != false) { advancedOptionsEnabled = null; } return(form.Configuration.Name); }
public void Save(PasswordSequenceConfiguration configuration) { if (Sequencer.GetAdvancedOptionRequired(configuration) && Sequencer.AdvancedOptionsDialog("Configuring password sequence using the advanced mode can result in the password being weaker that what is displaied by the strength bar. " + "Click Ok if you want to save the sequence anyway.") == System.Windows.Forms.DialogResult.Cancel) { return; } /* pass "true" to GetConfigurationPath to default to the user config * even when it doesn't exist yet; we'll create it here */ PasswordSequenceConfigurationFactory factory = new PasswordSequenceConfigurationFactory(); string configFile = factory.GetUserFilePath(configuration.Name); if (null != configFile) { XmlSerializer serializer = new XmlSerializer(typeof(PasswordSequenceConfiguration), "http://quasivirtuel.com/PasswordSequenceConfiguration.xsd"); /* create the config file's directory if needed */ Directory.CreateDirectory(Path.GetDirectoryName(configFile)); /* open the file for writing, creating a new one if needed */ FileStream configStream = File.Open(configFile, FileMode.Create); try { serializer.Serialize(configStream, configuration); } finally { configStream.Close(); } } /* TODO: should we pop up an error message or something in the * "else" case (i.e. when getting config file path fails)? */ }
/// <summary> /// Loads a PasswordSequenceConfiguration configuration /// </summary> /// <param name="profileName">The keepass profile name, that we will be using to construct the filename from, if specified</param> /// <returns></returns> public PasswordSequenceConfiguration Load(string profileName = null) { PasswordSequenceConfigurationFactory factory = new PasswordSequenceConfigurationFactory(); return(factory.LoadFromUserFile(profileName) ?? factory.LoadFromSystemFile(profileName)); }