From 6389e6700338a53770725fda2a73c185b7574811 Mon Sep 17 00:00:00 2001 From: Marcus Heese Date: Sun, 30 Mar 2014 02:24:05 -0700 Subject: [PATCH 1/2] first version ready for release: 1.9.0.0 on its way with support for remote access and https bindings --- KeePassHttp.plgx | Bin 157492 -> 158913 bytes KeePassHttp/ConfigOpt.cs | 193 ++--- KeePassHttp/KeePassHttp.cs | 31 +- KeePassHttp/OptionsForm.Designer.cs | 964 ++++++++++++++++--------- KeePassHttp/OptionsForm.cs | 441 +++++------ KeePassHttp/OptionsForm.resx | 257 +++---- KeePassHttp/Properties/AssemblyInfo.cs | 8 +- README.md | 2 + latest-version.txt | 2 +- update-version.txt | 2 +- 10 files changed, 1110 insertions(+), 790 deletions(-) diff --git a/KeePassHttp.plgx b/KeePassHttp.plgx index 6d364963fa98e922f8356c8615616744ebebe389..98aae314295dcf31f81034a39828ad749a6dbf77 100644 GIT binary patch delta 17837 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 Wgz4~i^8W%*h(rOz7q>QJ0{#O6gfT?` delta 16367 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 diff --git a/KeePassHttp/ConfigOpt.cs b/KeePassHttp/ConfigOpt.cs index aa65265..c44712e 100644 --- a/KeePassHttp/ConfigOpt.cs +++ b/KeePassHttp/ConfigOpt.cs @@ -1,84 +1,111 @@ -using KeePass.App.Configuration; - -namespace KeePassHttp -{ - public class ConfigOpt - { - readonly AceCustomConfig _config; - const string ReceiveCredentialNotificationKey = "KeePassHttp_ReceiveCredentialNotification"; - const string SpecificMatchingOnlyKey = "KeePassHttp_SpecificMatchingOnly"; - const string UnlockDatabaseRequestKey = "KeePassHttp_UnlockDatabaseRequest"; - const string AlwaysAllowAccessKey = "KeePassHttp_AlwaysAllowAccess"; - const string AlwaysAllowUpdatesKey = "KeePassHttp_AlwaysAllowUpdates"; - const string SearchInAllOpenedDatabasesKey = "KeePassHttp_SearchInAllOpenedDatabases"; - const string MatchSchemesKey = "KeePassHttp_MatchSchemes"; - const string ReturnStringFieldsKey = "KeePassHttp_ReturnStringFields"; - const string SortResultByUsernameKey = "KeePassHttp_SortResultByUsername"; - const string ListenerPortKey = "KeePassHttp_ListenerPort"; - - public ConfigOpt(AceCustomConfig config) - { - _config = config; - } - - public bool ReceiveCredentialNotification - { - get { return _config.GetBool(ReceiveCredentialNotificationKey, true); } - set { _config.SetBool(ReceiveCredentialNotificationKey, value); } - } - - public bool UnlockDatabaseRequest - { - get { return _config.GetBool(UnlockDatabaseRequestKey, false); } - set { _config.SetBool(UnlockDatabaseRequestKey, value); } - } - - public bool SpecificMatchingOnly - { - get { return _config.GetBool(SpecificMatchingOnlyKey, false); } - set { _config.SetBool(SpecificMatchingOnlyKey, value); } - } - - public bool AlwaysAllowAccess - { - get { return _config.GetBool(AlwaysAllowAccessKey, false); } - set { _config.SetBool(AlwaysAllowAccessKey, value); } - } - - public bool AlwaysAllowUpdates - { - get { return _config.GetBool(AlwaysAllowUpdatesKey, false); } - set { _config.SetBool(AlwaysAllowUpdatesKey, value); } - } - - public bool SearchInAllOpenedDatabases - { - get { return _config.GetBool(SearchInAllOpenedDatabasesKey, false); } - set { _config.SetBool(SearchInAllOpenedDatabasesKey, value); } - } - - public bool MatchSchemes - { - get { return _config.GetBool(MatchSchemesKey, false); } - set { _config.SetBool(MatchSchemesKey, value); } - } - - public bool ReturnStringFields - { - get { return _config.GetBool(ReturnStringFieldsKey, false); } - set { _config.SetBool(ReturnStringFieldsKey, value); } - } - - public bool SortResultByUsername - { - get { return _config.GetBool(SortResultByUsernameKey, true); } - set { _config.SetBool(SortResultByUsernameKey, value); } - } - - public long ListenerPort - { - get { return _config.GetLong(ListenerPortKey, KeePassHttpExt.DEFAULT_PORT); } - set { _config.SetLong(ListenerPortKey, value); } - } - } +using KeePass.App.Configuration; + +namespace KeePassHttp +{ + public class ConfigOpt + { + readonly AceCustomConfig _config; + const string ReceiveCredentialNotificationKey = "KeePassHttp_ReceiveCredentialNotification"; + const string SpecificMatchingOnlyKey = "KeePassHttp_SpecificMatchingOnly"; + const string UnlockDatabaseRequestKey = "KeePassHttp_UnlockDatabaseRequest"; + const string AlwaysAllowAccessKey = "KeePassHttp_AlwaysAllowAccess"; + const string AlwaysAllowUpdatesKey = "KeePassHttp_AlwaysAllowUpdates"; + const string SearchInAllOpenedDatabasesKey = "KeePassHttp_SearchInAllOpenedDatabases"; + const string MatchSchemesKey = "KeePassHttp_MatchSchemes"; + const string ReturnStringFieldsKey = "KeePassHttp_ReturnStringFields"; + const string SortResultByUsernameKey = "KeePassHttp_SortResultByUsername"; + const string ListenerHostHttpKey = "KeePassHttp_ListenerHostHttp"; + const string ListenerPortHttpKey = "KeePassHttp_ListenerPortHttp"; + const string ActivateHttpsListenerKey = "KeePassHttp_ActivateHttpsListener"; + const string ListenerHostHttpsKey = "KeePassHttp_ListenerHostHttps"; + const string ListenerPortHttpsKey = "KeePassHttp_ListenerPortHttps"; + + public ConfigOpt(AceCustomConfig config) + { + _config = config; + } + + public bool ReceiveCredentialNotification + { + get { return _config.GetBool(ReceiveCredentialNotificationKey, true); } + set { _config.SetBool(ReceiveCredentialNotificationKey, value); } + } + + public bool UnlockDatabaseRequest + { + get { return _config.GetBool(UnlockDatabaseRequestKey, false); } + set { _config.SetBool(UnlockDatabaseRequestKey, value); } + } + + public bool SpecificMatchingOnly + { + get { return _config.GetBool(SpecificMatchingOnlyKey, false); } + set { _config.SetBool(SpecificMatchingOnlyKey, value); } + } + + public bool AlwaysAllowAccess + { + get { return _config.GetBool(AlwaysAllowAccessKey, false); } + set { _config.SetBool(AlwaysAllowAccessKey, value); } + } + + public bool AlwaysAllowUpdates + { + get { return _config.GetBool(AlwaysAllowUpdatesKey, false); } + set { _config.SetBool(AlwaysAllowUpdatesKey, value); } + } + + public bool SearchInAllOpenedDatabases + { + get { return _config.GetBool(SearchInAllOpenedDatabasesKey, false); } + set { _config.SetBool(SearchInAllOpenedDatabasesKey, value); } + } + + public bool MatchSchemes + { + get { return _config.GetBool(MatchSchemesKey, false); } + set { _config.SetBool(MatchSchemesKey, value); } + } + + public bool ReturnStringFields + { + get { return _config.GetBool(ReturnStringFieldsKey, false); } + set { _config.SetBool(ReturnStringFieldsKey, value); } + } + + public bool SortResultByUsername + { + get { return _config.GetBool(SortResultByUsernameKey, true); } + set { _config.SetBool(SortResultByUsernameKey, value); } + } + + public string ListenerHostHttp { + get { return _config.GetString(ListenerHostHttpKey, KeePassHttpExt.DEFAULT_HOST); } + set { _config.SetString(ListenerHostHttpKey, value); } + } + + public long ListenerPortHttp + { + get { return _config.GetLong(ListenerPortHttpKey, KeePassHttpExt.DEFAULT_PORT_HTTP); } + set { _config.SetLong(ListenerPortHttpKey, value); } + } + + public bool ActivateHttpsListener + { + get { return _config.GetBool(ActivateHttpsListenerKey, false); } + set { _config.SetBool(ActivateHttpsListenerKey, value); } + } + + public string ListenerHostHttps + { + get { return _config.GetString(ListenerHostHttpsKey, KeePassHttpExt.DEFAULT_HOST); } + set { _config.SetString(ListenerHostHttpsKey, value); } + } + + public long ListenerPortHttps + { + get { return _config.GetLong(ListenerPortHttpsKey, KeePassHttpExt.DEFAULT_PORT_HTTPS); } + set { _config.SetLong(ListenerPortHttpsKey, value); } + } + } } \ No newline at end of file diff --git a/KeePassHttp/KeePassHttp.cs b/KeePassHttp/KeePassHttp.cs index 0cc3c5c..cc92b63 100644 --- a/KeePassHttp/KeePassHttp.cs +++ b/KeePassHttp/KeePassHttp.cs @@ -42,20 +42,17 @@ public sealed partial class KeePassHttpExt : Plugin public const string ASSOCIATE_KEY_PREFIX = "AES Key: "; private IPluginHost host; private HttpListener listener; - public const int DEFAULT_PORT = 19455; - /// - /// TODO make configurable - /// - private int port = DEFAULT_PORT; - private const string HTTP_PREFIX = "http://localhost:"; - //private const string HTTPS_PREFIX = "https://localhost:"; - //private int HTTPS_PORT = DEFAULT_PORT + 1; + public const int DEFAULT_PORT_HTTP = 19455; + public const int DEFAULT_PORT_HTTPS = 19456; + public const string DEFAULT_HOST = "localhost"; + private const string HTTP_PREFIX = "http://"; + private const string HTTPS_PREFIX = "https://"; private Thread httpThread; private volatile bool stopped = false; Dictionary handlers = new Dictionary(); //public string UpdateUrl = ""; - public override string UpdateUrl { get { return "https://passifox.appspot.com/kph/latest-version.txt"; } } + public override string UpdateUrl { get { return "https://raw.githubusercontent.com/mheese/keepasshttp/master/latest-version.txt"; } } private SearchParameters MakeSearchParameters() { @@ -198,9 +195,19 @@ public override bool Initialize(IPluginHost host) listener = new HttpListener(); var configOpt = new ConfigOpt(this.host.CustomConfig); - - listener.Prefixes.Add(HTTP_PREFIX + configOpt.ListenerPort.ToString() + "/"); - //listener.Prefixes.Add(HTTPS_PREFIX + HTTPS_PORT + "/"); + listener.Prefixes.Add(HTTP_PREFIX + configOpt.ListenerHostHttp + ":" + configOpt.ListenerPortHttp.ToString() + "/"); + if (configOpt.ListenerHostHttp != DEFAULT_HOST) + { + listener.Prefixes.Add(HTTP_PREFIX + DEFAULT_HOST + ":" + configOpt.ListenerPortHttp.ToString() + "/"); + } + if (configOpt.ActivateHttpsListener) + { + listener.Prefixes.Add(HTTPS_PREFIX + configOpt.ListenerHostHttps + ":" + configOpt.ListenerPortHttps.ToString() + "/"); + if (configOpt.ListenerHostHttps != DEFAULT_HOST) + { + listener.Prefixes.Add(HTTPS_PREFIX + DEFAULT_HOST + ":" + configOpt.ListenerPortHttps.ToString() + "/"); + } + } listener.Start(); httpThread = new Thread(new ThreadStart(Run)); diff --git a/KeePassHttp/OptionsForm.Designer.cs b/KeePassHttp/OptionsForm.Designer.cs index 9c1aad9..40a89f5 100644 --- a/KeePassHttp/OptionsForm.Designer.cs +++ b/KeePassHttp/OptionsForm.Designer.cs @@ -28,359 +28,590 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm)); - this.cancelButton = new System.Windows.Forms.Button(); - this.okButton = new System.Windows.Forms.Button(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.SortByUsernameRadioButton = new System.Windows.Forms.RadioButton(); - this.SortByTitleRadioButton = new System.Windows.Forms.RadioButton(); - this.matchSchemesCheckbox = new System.Windows.Forms.CheckBox(); - this.removePermissionsButton = new System.Windows.Forms.Button(); - this.unlockDatabaseCheckbox = new System.Windows.Forms.CheckBox(); - this.removeButton = new System.Windows.Forms.Button(); - this.credMatchingCheckbox = new System.Windows.Forms.CheckBox(); - this.credNotifyCheckbox = new System.Windows.Forms.CheckBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.returnStringFieldsCheckbox = new System.Windows.Forms.CheckBox(); - this.label2 = new System.Windows.Forms.Label(); - this.credSearchInAllOpenedDatabases = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.credAllowUpdatesCheckbox = new System.Windows.Forms.CheckBox(); - this.credAllowAccessCheckbox = new System.Windows.Forms.CheckBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.portNumber = new System.Windows.Forms.NumericUpDown(); - this.label7 = new System.Windows.Forms.Label(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.portNumber)).BeginInit(); - this.SuspendLayout(); - // - // cancelButton - // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(313, 383); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(88, 28); - this.cancelButton.TabIndex = 2; - this.cancelButton.Text = "&Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - // - // okButton - // - this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.okButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.okButton.Location = new System.Drawing.Point(219, 383); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(88, 28); - this.okButton.TabIndex = 1; - this.okButton.Text = "&Save"; - this.okButton.UseVisualStyleBackColor = true; - this.okButton.Click += new System.EventHandler(this.okButton_Click); - // - // tabControl1 - // - this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Location = new System.Drawing.Point(1, 3); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(410, 373); - this.tabControl1.TabIndex = 3; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.SortByUsernameRadioButton); - this.tabPage1.Controls.Add(this.SortByTitleRadioButton); - this.tabPage1.Controls.Add(this.matchSchemesCheckbox); - this.tabPage1.Controls.Add(this.removePermissionsButton); - this.tabPage1.Controls.Add(this.unlockDatabaseCheckbox); - this.tabPage1.Controls.Add(this.removeButton); - this.tabPage1.Controls.Add(this.credMatchingCheckbox); - this.tabPage1.Controls.Add(this.credNotifyCheckbox); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(402, 347); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "General"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // SortByUsernameRadioButton - // - this.SortByUsernameRadioButton.AutoSize = true; - this.SortByUsernameRadioButton.Location = new System.Drawing.Point(7, 124); - this.SortByUsernameRadioButton.Name = "SortByUsernameRadioButton"; - this.SortByUsernameRadioButton.Size = new System.Drawing.Size(171, 17); - this.SortByUsernameRadioButton.TabIndex = 19; - this.SortByUsernameRadioButton.TabStop = true; - this.SortByUsernameRadioButton.Text = "Sort found entries by &username"; - this.SortByUsernameRadioButton.UseVisualStyleBackColor = true; - // - // SortByTitleRadioButton - // - this.SortByTitleRadioButton.AutoSize = true; - this.SortByTitleRadioButton.Location = new System.Drawing.Point(7, 147); - this.SortByTitleRadioButton.Name = "SortByTitleRadioButton"; - this.SortByTitleRadioButton.Size = new System.Drawing.Size(141, 17); - this.SortByTitleRadioButton.TabIndex = 18; - this.SortByTitleRadioButton.TabStop = true; - this.SortByTitleRadioButton.Text = "Sort found entries by &title"; - this.SortByTitleRadioButton.UseVisualStyleBackColor = true; - // - // matchSchemesCheckbox - // - this.matchSchemesCheckbox.AutoSize = true; - this.matchSchemesCheckbox.Location = new System.Drawing.Point(7, 88); - this.matchSchemesCheckbox.Name = "matchSchemesCheckbox"; - this.matchSchemesCheckbox.Size = new System.Drawing.Size(375, 30); - this.matchSchemesCheckbox.TabIndex = 17; - this.matchSchemesCheckbox.Text = "&Match URL schemes\r\nonly entries with the same scheme (http://, https://, ftp://," + - " ...) are returned"; - this.matchSchemesCheckbox.UseVisualStyleBackColor = true; - // - // removePermissionsButton - // - this.removePermissionsButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.removePermissionsButton.ImageAlign = System.Drawing.ContentAlignment.TopLeft; - this.removePermissionsButton.Location = new System.Drawing.Point(14, 216); - this.removePermissionsButton.Name = "removePermissionsButton"; - this.removePermissionsButton.Size = new System.Drawing.Size(372, 28); - this.removePermissionsButton.TabIndex = 16; - this.removePermissionsButton.Text = "Remo&ve all stored permissions from entries in active database"; - this.removePermissionsButton.UseVisualStyleBackColor = true; - this.removePermissionsButton.Click += new System.EventHandler(this.removePermissionsButton_Click); - // - // unlockDatabaseCheckbox - // - this.unlockDatabaseCheckbox.AutoSize = true; - this.unlockDatabaseCheckbox.Location = new System.Drawing.Point(7, 65); - this.unlockDatabaseCheckbox.Name = "unlockDatabaseCheckbox"; - this.unlockDatabaseCheckbox.Size = new System.Drawing.Size(256, 17); - this.unlockDatabaseCheckbox.TabIndex = 15; - this.unlockDatabaseCheckbox.Text = "Re&quest for unlocking the database if it is locked"; - this.unlockDatabaseCheckbox.UseVisualStyleBackColor = true; - // - // removeButton - // - this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.removeButton.Location = new System.Drawing.Point(14, 182); - this.removeButton.Name = "removeButton"; - this.removeButton.Size = new System.Drawing.Size(372, 28); - this.removeButton.TabIndex = 11; - this.removeButton.Text = "R&emove all shared encryption-keys from active database"; - this.removeButton.UseVisualStyleBackColor = true; - this.removeButton.Click += new System.EventHandler(this.removeButton_Click); - // - // credMatchingCheckbox - // - this.credMatchingCheckbox.AutoSize = true; - this.credMatchingCheckbox.Location = new System.Drawing.Point(7, 29); - this.credMatchingCheckbox.Name = "credMatchingCheckbox"; - this.credMatchingCheckbox.Size = new System.Drawing.Size(238, 30); - this.credMatchingCheckbox.TabIndex = 9; - this.credMatchingCheckbox.Text = "&Return only best matching entries for an URL\r\ninstead of all entries for the who" + - "le domain"; - this.credMatchingCheckbox.UseVisualStyleBackColor = true; - // - // credNotifyCheckbox - // - this.credNotifyCheckbox.AutoSize = true; - this.credNotifyCheckbox.Location = new System.Drawing.Point(7, 6); - this.credNotifyCheckbox.Name = "credNotifyCheckbox"; - this.credNotifyCheckbox.Size = new System.Drawing.Size(267, 17); - this.credNotifyCheckbox.TabIndex = 8; - this.credNotifyCheckbox.Text = "Sh&ow a notification when credentials are requested"; - this.credNotifyCheckbox.UseVisualStyleBackColor = true; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.label7); - this.tabPage2.Controls.Add(this.portNumber); - this.tabPage2.Controls.Add(this.label5); - this.tabPage2.Controls.Add(this.label6); - this.tabPage2.Controls.Add(this.label4); - this.tabPage2.Controls.Add(this.label3); - this.tabPage2.Controls.Add(this.returnStringFieldsCheckbox); - this.tabPage2.Controls.Add(this.label2); - this.tabPage2.Controls.Add(this.credSearchInAllOpenedDatabases); - this.tabPage2.Controls.Add(this.label1); - this.tabPage2.Controls.Add(this.credAllowUpdatesCheckbox); - this.tabPage2.Controls.Add(this.credAllowAccessCheckbox); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(402, 347); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Advanced"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.Location = new System.Drawing.Point(53, 225); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(277, 26); - this.label4.TabIndex = 22; - this.label4.Text = "Automatic creates or updates are not supported\r\nfor string fields!"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(52, 156); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(302, 65); - this.label3.TabIndex = 21; - this.label3.Text = resources.GetString("label3.Text"); - // - // returnStringFieldsCheckbox - // - this.returnStringFieldsCheckbox.AutoSize = true; - this.returnStringFieldsCheckbox.Location = new System.Drawing.Point(7, 136); - this.returnStringFieldsCheckbox.Name = "returnStringFieldsCheckbox"; - this.returnStringFieldsCheckbox.Size = new System.Drawing.Size(303, 17); - this.returnStringFieldsCheckbox.TabIndex = 20; - this.returnStringFieldsCheckbox.Text = "&Return also advanced string fields which start with \"KPH: \""; - this.returnStringFieldsCheckbox.UseVisualStyleBackColor = true; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(52, 108); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(299, 13); - this.label2.TabIndex = 19; - this.label2.Text = "Only the selected database has to be connected with a client!"; - // - // credSearchInAllOpenedDatabases - // - this.credSearchInAllOpenedDatabases.AutoSize = true; - this.credSearchInAllOpenedDatabases.Location = new System.Drawing.Point(7, 88); - this.credSearchInAllOpenedDatabases.Name = "credSearchInAllOpenedDatabases"; - this.credSearchInAllOpenedDatabases.Size = new System.Drawing.Size(270, 17); - this.credSearchInAllOpenedDatabases.TabIndex = 18; - this.credSearchInAllOpenedDatabases.Text = "Searc&h in all opened databases for matching entries"; - this.credSearchInAllOpenedDatabases.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.Red; - this.label1.Location = new System.Drawing.Point(4, 7); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(391, 13); - this.label1.TabIndex = 17; - this.label1.Text = "Activate the following options only, if you know what you are doing!"; - // - // credAllowUpdatesCheckbox - // - this.credAllowUpdatesCheckbox.AutoSize = true; - this.credAllowUpdatesCheckbox.Location = new System.Drawing.Point(6, 56); - this.credAllowUpdatesCheckbox.Name = "credAllowUpdatesCheckbox"; - this.credAllowUpdatesCheckbox.Size = new System.Drawing.Size(164, 17); - this.credAllowUpdatesCheckbox.TabIndex = 16; - this.credAllowUpdatesCheckbox.Text = "Always allow &updating entries"; - this.credAllowUpdatesCheckbox.UseVisualStyleBackColor = true; - // - // credAllowAccessCheckbox - // - this.credAllowAccessCheckbox.AutoSize = true; - this.credAllowAccessCheckbox.Location = new System.Drawing.Point(6, 33); - this.credAllowAccessCheckbox.Name = "credAllowAccessCheckbox"; - this.credAllowAccessCheckbox.Size = new System.Drawing.Size(169, 17); - this.credAllowAccessCheckbox.TabIndex = 15; - this.credAllowAccessCheckbox.Text = "Always allow &access to entries"; - this.credAllowAccessCheckbox.UseVisualStyleBackColor = true; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(21, 298); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(29, 13); - this.label6.TabIndex = 26; - this.label6.Text = "Port:"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(6, 274); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(312, 13); - this.label5.TabIndex = 27; - this.label5.Text = "Change the default port number if you have connection problems"; - // - // portNumber - // - this.portNumber.Location = new System.Drawing.Point(56, 296); - this.portNumber.Maximum = new decimal(new int[] { - 99999, - 0, - 0, - 0}); - this.portNumber.Minimum = new decimal(new int[] { - 1025, - 0, - 0, - 0}); - this.portNumber.Name = "portNumber"; - this.portNumber.Size = new System.Drawing.Size(60, 20); - this.portNumber.TabIndex = 29; - this.portNumber.Value = new decimal(new int[] { - 19455, - 0, - 0, - 0}); - this.portNumber.ValueChanged += new System.EventHandler(this.portNumber_ValueChanged); - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(132, 296); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(241, 39); - this.label7.TabIndex = 30; - this.label7.Text = "Default: 19455\r\nDon\'t forget to change the port number also in\r\nthe plugins like " + - "chromeIPass, PassIFox, kypass,..."; - // - // OptionsForm - // - this.AcceptButton = this.okButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(411, 420); - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.okButton); - this.Controls.Add(this.cancelButton); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "OptionsForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "KeePassHttp Options"; - this.Load += new System.EventHandler(this.OptionsForm_Load); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.portNumber)).EndInit(); - this.ResumeLayout(false); - + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm)); + this.cancelButton = new System.Windows.Forms.Button(); + this.okButton = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.SortByUsernameRadioButton = new System.Windows.Forms.RadioButton(); + this.SortByTitleRadioButton = new System.Windows.Forms.RadioButton(); + this.matchSchemesCheckbox = new System.Windows.Forms.CheckBox(); + this.removePermissionsButton = new System.Windows.Forms.Button(); + this.unlockDatabaseCheckbox = new System.Windows.Forms.CheckBox(); + this.removeButton = new System.Windows.Forms.Button(); + this.credMatchingCheckbox = new System.Windows.Forms.CheckBox(); + this.credNotifyCheckbox = new System.Windows.Forms.CheckBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.returnStringFieldsCheckbox = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.credSearchInAllOpenedDatabases = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.credAllowUpdatesCheckbox = new System.Windows.Forms.CheckBox(); + this.credAllowAccessCheckbox = new System.Windows.Forms.CheckBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.label9 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label12 = new System.Windows.Forms.Label(); + this.listenerHostHttps = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.portNumberHttps = new System.Windows.Forms.NumericUpDown(); + this.label15 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label10 = new System.Windows.Forms.Label(); + this.listenerHostHttp = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.portNumberHttp = new System.Windows.Forms.NumericUpDown(); + this.label6 = new System.Windows.Forms.Label(); + this.activateHttpsListenerCheckbox = new System.Windows.Forms.CheckBox(); + this.instructionsLink = new System.Windows.Forms.LinkLabel(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.portNumberHttps)).BeginInit(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.portNumberHttp)).BeginInit(); + this.SuspendLayout(); + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(649, 791); + this.cancelButton.Margin = new System.Windows.Forms.Padding(6); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(176, 54); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.okButton.Location = new System.Drawing.Point(461, 791); + this.okButton.Margin = new System.Windows.Forms.Padding(6); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(176, 54); + this.okButton.TabIndex = 1; + this.okButton.Text = "&Save"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.ItemSize = new System.Drawing.Size(88, 30); + this.tabControl1.Location = new System.Drawing.Point(12, 12); + this.tabControl1.Margin = new System.Windows.Forms.Padding(6); + this.tabControl1.Multiline = true; + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(820, 767); + this.tabControl1.TabIndex = 3; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.SortByUsernameRadioButton); + this.tabPage1.Controls.Add(this.SortByTitleRadioButton); + this.tabPage1.Controls.Add(this.matchSchemesCheckbox); + this.tabPage1.Controls.Add(this.removePermissionsButton); + this.tabPage1.Controls.Add(this.unlockDatabaseCheckbox); + this.tabPage1.Controls.Add(this.removeButton); + this.tabPage1.Controls.Add(this.credMatchingCheckbox); + this.tabPage1.Controls.Add(this.credNotifyCheckbox); + this.tabPage1.Location = new System.Drawing.Point(4, 34); + this.tabPage1.Margin = new System.Windows.Forms.Padding(0); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(812, 729); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "General"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // SortByUsernameRadioButton + // + this.SortByUsernameRadioButton.AutoSize = true; + this.SortByUsernameRadioButton.Location = new System.Drawing.Point(8, 232); + this.SortByUsernameRadioButton.Margin = new System.Windows.Forms.Padding(6); + this.SortByUsernameRadioButton.Name = "SortByUsernameRadioButton"; + this.SortByUsernameRadioButton.Size = new System.Drawing.Size(343, 29); + this.SortByUsernameRadioButton.TabIndex = 19; + this.SortByUsernameRadioButton.TabStop = true; + this.SortByUsernameRadioButton.Text = "Sort found entries by &username"; + this.SortByUsernameRadioButton.UseVisualStyleBackColor = true; + // + // SortByTitleRadioButton + // + this.SortByTitleRadioButton.AutoSize = true; + this.SortByTitleRadioButton.Location = new System.Drawing.Point(8, 277); + this.SortByTitleRadioButton.Margin = new System.Windows.Forms.Padding(6); + this.SortByTitleRadioButton.Name = "SortByTitleRadioButton"; + this.SortByTitleRadioButton.Size = new System.Drawing.Size(282, 29); + this.SortByTitleRadioButton.TabIndex = 18; + this.SortByTitleRadioButton.TabStop = true; + this.SortByTitleRadioButton.Text = "Sort found entries by &title"; + this.SortByTitleRadioButton.UseVisualStyleBackColor = true; + // + // matchSchemesCheckbox + // + this.matchSchemesCheckbox.AutoSize = true; + this.matchSchemesCheckbox.Location = new System.Drawing.Point(8, 163); + this.matchSchemesCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.matchSchemesCheckbox.Name = "matchSchemesCheckbox"; + this.matchSchemesCheckbox.Size = new System.Drawing.Size(732, 54); + this.matchSchemesCheckbox.TabIndex = 17; + this.matchSchemesCheckbox.Text = "&Match URL schemes\r\nonly entries with the same scheme (http://, https://, ftp://," + + " ...) are returned"; + this.matchSchemesCheckbox.UseVisualStyleBackColor = true; + // + // removePermissionsButton + // + this.removePermissionsButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.removePermissionsButton.ImageAlign = System.Drawing.ContentAlignment.TopLeft; + this.removePermissionsButton.Location = new System.Drawing.Point(22, 409); + this.removePermissionsButton.Margin = new System.Windows.Forms.Padding(6); + this.removePermissionsButton.Name = "removePermissionsButton"; + this.removePermissionsButton.Size = new System.Drawing.Size(756, 54); + this.removePermissionsButton.TabIndex = 16; + this.removePermissionsButton.Text = "Remo&ve all stored permissions from entries in active database"; + this.removePermissionsButton.UseVisualStyleBackColor = true; + this.removePermissionsButton.Click += new System.EventHandler(this.removePermissionsButton_Click); + // + // unlockDatabaseCheckbox + // + this.unlockDatabaseCheckbox.AutoSize = true; + this.unlockDatabaseCheckbox.Location = new System.Drawing.Point(8, 119); + this.unlockDatabaseCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.unlockDatabaseCheckbox.Name = "unlockDatabaseCheckbox"; + this.unlockDatabaseCheckbox.Size = new System.Drawing.Size(509, 29); + this.unlockDatabaseCheckbox.TabIndex = 15; + this.unlockDatabaseCheckbox.Text = "Re&quest for unlocking the database if it is locked"; + this.unlockDatabaseCheckbox.UseVisualStyleBackColor = true; + // + // removeButton + // + this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.removeButton.Location = new System.Drawing.Point(22, 344); + this.removeButton.Margin = new System.Windows.Forms.Padding(6); + this.removeButton.Name = "removeButton"; + this.removeButton.Size = new System.Drawing.Size(756, 54); + this.removeButton.TabIndex = 11; + this.removeButton.Text = "R&emove all shared encryption-keys from active database"; + this.removeButton.UseVisualStyleBackColor = true; + this.removeButton.Click += new System.EventHandler(this.removeButton_Click); + // + // credMatchingCheckbox + // + this.credMatchingCheckbox.AutoSize = true; + this.credMatchingCheckbox.Location = new System.Drawing.Point(8, 50); + this.credMatchingCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.credMatchingCheckbox.Name = "credMatchingCheckbox"; + this.credMatchingCheckbox.Size = new System.Drawing.Size(474, 54); + this.credMatchingCheckbox.TabIndex = 9; + this.credMatchingCheckbox.Text = "&Return only best matching entries for an URL\r\ninstead of all entries for the who" + + "le domain"; + this.credMatchingCheckbox.UseVisualStyleBackColor = true; + // + // credNotifyCheckbox + // + this.credNotifyCheckbox.AutoSize = true; + this.credNotifyCheckbox.Location = new System.Drawing.Point(8, 6); + this.credNotifyCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.credNotifyCheckbox.Name = "credNotifyCheckbox"; + this.credNotifyCheckbox.Size = new System.Drawing.Size(532, 29); + this.credNotifyCheckbox.TabIndex = 8; + this.credNotifyCheckbox.Text = "Sh&ow a notification when credentials are requested"; + this.credNotifyCheckbox.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.label4); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Controls.Add(this.returnStringFieldsCheckbox); + this.tabPage2.Controls.Add(this.label2); + this.tabPage2.Controls.Add(this.credSearchInAllOpenedDatabases); + this.tabPage2.Controls.Add(this.label1); + this.tabPage2.Controls.Add(this.credAllowUpdatesCheckbox); + this.tabPage2.Controls.Add(this.credAllowAccessCheckbox); + this.tabPage2.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F); + this.tabPage2.Location = new System.Drawing.Point(4, 34); + this.tabPage2.Margin = new System.Windows.Forms.Padding(0); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(812, 729); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Advanced"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(100, 427); + this.label4.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(516, 52); + this.label4.TabIndex = 22; + this.label4.Text = "Automatic creates or updates are not supported\r\nfor string fields!"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(98, 294); + this.label3.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(530, 120); + this.label3.TabIndex = 21; + this.label3.Text = resources.GetString("label3.Text"); + // + // returnStringFieldsCheckbox + // + this.returnStringFieldsCheckbox.AutoSize = true; + this.returnStringFieldsCheckbox.Location = new System.Drawing.Point(8, 256); + this.returnStringFieldsCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.returnStringFieldsCheckbox.Name = "returnStringFieldsCheckbox"; + this.returnStringFieldsCheckbox.Size = new System.Drawing.Size(521, 28); + this.returnStringFieldsCheckbox.TabIndex = 20; + this.returnStringFieldsCheckbox.Text = "&Return also advanced string fields which start with \"KPH: \""; + this.returnStringFieldsCheckbox.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(98, 202); + this.label2.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(521, 24); + this.label2.TabIndex = 19; + this.label2.Text = "Only the selected database has to be connected with a client!"; + // + // credSearchInAllOpenedDatabases + // + this.credSearchInAllOpenedDatabases.AutoSize = true; + this.credSearchInAllOpenedDatabases.Location = new System.Drawing.Point(8, 163); + this.credSearchInAllOpenedDatabases.Margin = new System.Windows.Forms.Padding(6); + this.credSearchInAllOpenedDatabases.Name = "credSearchInAllOpenedDatabases"; + this.credSearchInAllOpenedDatabases.Size = new System.Drawing.Size(475, 28); + this.credSearchInAllOpenedDatabases.TabIndex = 18; + this.credSearchInAllOpenedDatabases.Text = "Searc&h in all opened databases for matching entries"; + this.credSearchInAllOpenedDatabases.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.Red; + this.label1.Location = new System.Drawing.Point(2, 7); + this.label1.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(723, 26); + this.label1.TabIndex = 17; + this.label1.Text = "Activate the following options only, if you know what you are doing!"; + // + // credAllowUpdatesCheckbox + // + this.credAllowUpdatesCheckbox.AutoSize = true; + this.credAllowUpdatesCheckbox.Location = new System.Drawing.Point(6, 102); + this.credAllowUpdatesCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.credAllowUpdatesCheckbox.Name = "credAllowUpdatesCheckbox"; + this.credAllowUpdatesCheckbox.Size = new System.Drawing.Size(288, 28); + this.credAllowUpdatesCheckbox.TabIndex = 16; + this.credAllowUpdatesCheckbox.Text = "Always allow &updating entries"; + this.credAllowUpdatesCheckbox.UseVisualStyleBackColor = true; + // + // credAllowAccessCheckbox + // + this.credAllowAccessCheckbox.AutoSize = true; + this.credAllowAccessCheckbox.Location = new System.Drawing.Point(6, 57); + this.credAllowAccessCheckbox.Margin = new System.Windows.Forms.Padding(6); + this.credAllowAccessCheckbox.Name = "credAllowAccessCheckbox"; + this.credAllowAccessCheckbox.Size = new System.Drawing.Size(294, 28); + this.credAllowAccessCheckbox.TabIndex = 15; + this.credAllowAccessCheckbox.Text = "Always allow &access to entries"; + this.credAllowAccessCheckbox.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.instructionsLink); + this.tabPage3.Controls.Add(this.activateHttpsListenerCheckbox); + this.tabPage3.Controls.Add(this.groupBox2); + this.tabPage3.Controls.Add(this.groupBox1); + this.tabPage3.Controls.Add(this.label9); + this.tabPage3.Controls.Add(this.label5); + this.tabPage3.Location = new System.Drawing.Point(4, 34); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(812, 729); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Listener Configuration"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.875F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(9, 541); + this.label9.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(583, 50); + this.label9.TabIndex = 41; + this.label9.Text = "Don\'t forget to change the listener (host + port) also in\r\nthe plugins like chrom" + + "eIPass, PassIFox, kypass, etc."; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(9, 13); + this.label5.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(762, 75); + this.label5.TabIndex = 36; + this.label5.Text = resources.GetString("label5.Text"); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label12); + this.groupBox1.Controls.Add(this.listenerHostHttps); + this.groupBox1.Controls.Add(this.label13); + this.groupBox1.Controls.Add(this.label14); + this.groupBox1.Controls.Add(this.portNumberHttps); + this.groupBox1.Controls.Add(this.label15); + this.groupBox1.Location = new System.Drawing.Point(14, 368); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(774, 149); + this.groupBox1.TabIndex = 44; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "HTTPS Listener"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(435, 42); + this.label12.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(178, 25); + this.label12.TabIndex = 48; + this.label12.Text = "Default: localhost"; + // + // listenerHostHttps + // + this.listenerHostHttps.Location = new System.Drawing.Point(87, 41); + this.listenerHostHttps.Name = "listenerHostHttps"; + this.listenerHostHttps.Size = new System.Drawing.Size(324, 31); + this.listenerHostHttps.TabIndex = 47; + this.listenerHostHttps.Text = "localhost"; + this.listenerHostHttps.TextChanged += new System.EventHandler(this.listenerHost_TextChanged); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(16, 42); + this.label13.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(62, 25); + this.label13.TabIndex = 46; + this.label13.Text = "Host:"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(435, 90); + this.label14.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(152, 25); + this.label14.TabIndex = 45; + this.label14.Text = "Default: 19456"; + // + // portNumberHttps + // + this.portNumberHttps.Location = new System.Drawing.Point(88, 92); + this.portNumberHttps.Margin = new System.Windows.Forms.Padding(6); + this.portNumberHttps.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.portNumberHttps.Minimum = new decimal(new int[] { + 1025, + 0, + 0, + 0}); + this.portNumberHttps.Name = "portNumberHttps"; + this.portNumberHttps.Size = new System.Drawing.Size(120, 31); + this.portNumberHttps.TabIndex = 44; + this.portNumberHttps.Value = new decimal(new int[] { + 19456, + 0, + 0, + 0}); + this.portNumberHttps.ValueChanged += new System.EventHandler(this.portNumber_ValueChanged); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(21, 94); + this.label15.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(57, 25); + this.label15.TabIndex = 43; + this.label15.Text = "Port:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label10); + this.groupBox2.Controls.Add(this.listenerHostHttp); + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.portNumberHttp); + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Location = new System.Drawing.Point(14, 144); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(774, 155); + this.groupBox2.TabIndex = 45; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "HTTP Listener"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(440, 47); + this.label10.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(178, 25); + this.label10.TabIndex = 48; + this.label10.Text = "Default: localhost"; + // + // listenerHostHttp + // + this.listenerHostHttp.Location = new System.Drawing.Point(92, 46); + this.listenerHostHttp.Name = "listenerHostHttp"; + this.listenerHostHttp.Size = new System.Drawing.Size(324, 31); + this.listenerHostHttp.TabIndex = 47; + this.listenerHostHttp.Text = "localhost"; + this.listenerHostHttp.TextChanged += new System.EventHandler(this.listenerHost_TextChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(21, 47); + this.label8.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(62, 25); + this.label8.TabIndex = 46; + this.label8.Text = "Host:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(440, 95); + this.label7.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(152, 25); + this.label7.TabIndex = 45; + this.label7.Text = "Default: 19455"; + // + // portNumberHttp + // + this.portNumberHttp.Location = new System.Drawing.Point(93, 97); + this.portNumberHttp.Margin = new System.Windows.Forms.Padding(6); + this.portNumberHttp.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.portNumberHttp.Minimum = new decimal(new int[] { + 1025, + 0, + 0, + 0}); + this.portNumberHttp.Name = "portNumberHttp"; + this.portNumberHttp.Size = new System.Drawing.Size(120, 31); + this.portNumberHttp.TabIndex = 44; + this.portNumberHttp.Value = new decimal(new int[] { + 19455, + 0, + 0, + 0}); + this.portNumberHttp.ValueChanged += new System.EventHandler(this.portNumber_ValueChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(26, 99); + this.label6.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(57, 25); + this.label6.TabIndex = 43; + this.label6.Text = "Port:"; + // + // activateHttpsListenerCheckbox + // + this.activateHttpsListenerCheckbox.AutoSize = true; + this.activateHttpsListenerCheckbox.Location = new System.Drawing.Point(14, 333); + this.activateHttpsListenerCheckbox.Name = "activateHttpsListenerCheckbox"; + this.activateHttpsListenerCheckbox.Size = new System.Drawing.Size(279, 29); + this.activateHttpsListenerCheckbox.TabIndex = 46; + this.activateHttpsListenerCheckbox.Text = "Activate HTTPS Listener"; + this.activateHttpsListenerCheckbox.UseVisualStyleBackColor = true; + this.activateHttpsListenerCheckbox.CheckedChanged += new System.EventHandler(this.activateHttpsListenerCheckbox_CheckedChanged); + // + // instructionsLink + // + this.instructionsLink.AutoSize = true; + this.instructionsLink.Location = new System.Drawing.Point(9, 98); + this.instructionsLink.Name = "instructionsLink"; + this.instructionsLink.Size = new System.Drawing.Size(221, 25); + this.instructionsLink.TabIndex = 47; + this.instructionsLink.TabStop = true; + this.instructionsLink.Text = "Read the instructions!"; + // + // OptionsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(840, 860); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.okButton); + this.Controls.Add(this.cancelButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Margin = new System.Windows.Forms.Padding(6); + this.Name = "OptionsForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "KeePassHttp Options"; + this.Load += new System.EventHandler(this.OptionsForm_Load); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.portNumberHttps)).EndInit(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.portNumberHttp)).EndInit(); + this.ResumeLayout(false); + } #endregion @@ -404,11 +635,26 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox returnStringFieldsCheckbox; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; - private System.Windows.Forms.RadioButton SortByUsernameRadioButton; - private System.Windows.Forms.RadioButton SortByTitleRadioButton; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.NumericUpDown portNumber; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; + private System.Windows.Forms.RadioButton SortByUsernameRadioButton; + private System.Windows.Forms.RadioButton SortByTitleRadioButton; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox activateHttpsListenerCheckbox; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox listenerHostHttp; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.NumericUpDown portNumberHttp; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox listenerHostHttps; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.NumericUpDown portNumberHttps; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.LinkLabel instructionsLink; } } \ No newline at end of file diff --git a/KeePassHttp/OptionsForm.cs b/KeePassHttp/OptionsForm.cs index be1698a..0b31b89 100644 --- a/KeePassHttp/OptionsForm.cs +++ b/KeePassHttp/OptionsForm.cs @@ -1,204 +1,237 @@ -using KeePassLib; -using KeePassHttp; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using KeePassLib.Collections; - -namespace KeePassHttp -{ - public partial class OptionsForm : Form - { - readonly ConfigOpt _config; - private bool _restartRequired = false; - - public OptionsForm(ConfigOpt config) - { - _config = config; - InitializeComponent(); - } - - - private PwEntry GetConfigEntry(PwDatabase db) - { - var kphe = new KeePassHttpExt(); - var root = db.RootGroup; - var uuid = new PwUuid(kphe.KEEPASSHTTP_UUID); - var entry = root.FindEntry(uuid, false); - return entry; - } - - private void OptionsForm_Load(object sender, EventArgs e) - { - credNotifyCheckbox.Checked = _config.ReceiveCredentialNotification; - credMatchingCheckbox.Checked = _config.SpecificMatchingOnly; - unlockDatabaseCheckbox.Checked = _config.UnlockDatabaseRequest; - credAllowAccessCheckbox.Checked = _config.AlwaysAllowAccess; - credAllowUpdatesCheckbox.Checked = _config.AlwaysAllowUpdates; - credSearchInAllOpenedDatabases.Checked = _config.SearchInAllOpenedDatabases; - matchSchemesCheckbox.Checked = _config.MatchSchemes; - returnStringFieldsCheckbox.Checked = _config.ReturnStringFields; - SortByUsernameRadioButton.Checked = _config.SortResultByUsername; - SortByTitleRadioButton.Checked = !_config.SortResultByUsername; - portNumber.Value = _config.ListenerPort; - } - - private void okButton_Click(object sender, EventArgs e) - { - _config.ReceiveCredentialNotification = credNotifyCheckbox.Checked; - _config.SpecificMatchingOnly = credMatchingCheckbox.Checked; - _config.UnlockDatabaseRequest = unlockDatabaseCheckbox.Checked; - _config.AlwaysAllowAccess = credAllowAccessCheckbox.Checked; - _config.AlwaysAllowUpdates = credAllowUpdatesCheckbox.Checked; - _config.SearchInAllOpenedDatabases = credSearchInAllOpenedDatabases.Checked; - _config.MatchSchemes = matchSchemesCheckbox.Checked; - _config.ReturnStringFields = returnStringFieldsCheckbox.Checked; - _config.SortResultByUsername = SortByUsernameRadioButton.Checked; - _config.ListenerPort = (int)portNumber.Value; - - if (_restartRequired) - { - MessageBox.Show( - "You have successfully changed the port number.\nA restart of KeePass is required!\n\nPlease restart KeePass now.", - "Restart required!", - MessageBoxButtons.OK, - MessageBoxIcon.Information - ); - } - } - - private void removeButton_Click(object sender, EventArgs e) - { - if (KeePass.Program.MainForm.DocumentManager.ActiveDatabase.IsOpen) - { - PwDatabase db = KeePass.Program.MainForm.DocumentManager.ActiveDatabase; - var entry = GetConfigEntry(db); - if (entry != null) - { - List deleteKeys = new List(); - - foreach (var s in entry.Strings) - { - if (s.Key.IndexOf(KeePassHttpExt.ASSOCIATE_KEY_PREFIX) == 0) - { - deleteKeys.Add(s.Key); - } - } - - - if(deleteKeys.Count > 0) - { - PwObjectList m_vHistory = entry.History.CloneDeep(); - entry.History = m_vHistory; - entry.CreateBackup(null); - - foreach (var key in deleteKeys) - { - entry.Strings.Remove(key); - } - - entry.Touch(true); - KeePass.Program.MainForm.UpdateUI(false, null, true, db.RootGroup, true, null, true); - MessageBox.Show( - String.Format("Successfully removed {0} encryption-key{1} from KeePassHttp Settings.", deleteKeys.Count.ToString(), deleteKeys.Count == 1 ? "" : "s"), - String.Format("Removed {0} key{1} from database", deleteKeys.Count.ToString(), deleteKeys.Count == 1 ? "" : "s"), - MessageBoxButtons.OK, - MessageBoxIcon.Information - ); - } - else - { - MessageBox.Show( - "No shared encryption-keys found in KeePassHttp Settings.", "No keys found", - MessageBoxButtons.OK, - MessageBoxIcon.Information - ); - } - } - else - { - MessageBox.Show("The active database does not contain an entry of KeePassHttp Settings.", "KeePassHttp Settings not available!", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - else - { - MessageBox.Show("The active database is locked!\nPlease unlock the selected database or choose another one which is unlocked.", "Database locked!", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void removePermissionsButton_Click(object sender, EventArgs e) - { - if (KeePass.Program.MainForm.DocumentManager.ActiveDatabase.IsOpen) - { - PwDatabase db = KeePass.Program.MainForm.DocumentManager.ActiveDatabase; - - uint counter = 0; - var entries = db.RootGroup.GetEntries(true); - - if (entries.Count() > 999) - { - MessageBox.Show( - String.Format("{0} entries detected!\nSearching and removing permissions could take some while.\n\nWe will inform you when the process has been finished.", entries.Count().ToString()), - String.Format("{0} entries detected", entries.Count().ToString()), - MessageBoxButtons.OK, - MessageBoxIcon.Information - ); - } - - foreach (var entry in entries) { - foreach (var str in entry.Strings) - { - if (str.Key == KeePassHttpExt.KEEPASSHTTP_NAME) - { - PwObjectList m_vHistory = entry.History.CloneDeep(); - entry.History = m_vHistory; - entry.CreateBackup(null); - - entry.Strings.Remove(str.Key); - - entry.Touch(true); - - counter += 1; - - break; - } - } - } - - if (counter > 0) - { - KeePass.Program.MainForm.UpdateUI(false, null, true, db.RootGroup, true, null, true); - MessageBox.Show( - String.Format("Successfully removed permissions from {0} entr{1}.", counter.ToString(), counter == 1 ? "y" : "ies"), - String.Format("Removed permissions from {0} entr{1}", counter.ToString(), counter == 1 ? "y" : "ies"), - MessageBoxButtons.OK, - MessageBoxIcon.Information - ); - } - else - { - MessageBox.Show( - "The active database does not contain an entry with permissions.", - "No entry with permissions found!", - MessageBoxButtons.OK, - MessageBoxIcon.Information - ); - } - } - else - { - MessageBox.Show("The active database is locked!\nPlease unlock the selected database or choose another one which is unlocked.", "Database locked!", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void portNumber_ValueChanged(object sender, EventArgs e) - { - _restartRequired = (_config.ListenerPort != portNumber.Value); - } - } -} +using KeePassLib; +using KeePassHttp; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using KeePassLib.Collections; + +namespace KeePassHttp +{ + public partial class OptionsForm : Form + { + readonly ConfigOpt _config; + private bool _restartRequired = false; + + public OptionsForm(ConfigOpt config) + { + _config = config; + InitializeComponent(); + } + + + private PwEntry GetConfigEntry(PwDatabase db) + { + var kphe = new KeePassHttpExt(); + var root = db.RootGroup; + var uuid = new PwUuid(kphe.KEEPASSHTTP_UUID); + var entry = root.FindEntry(uuid, false); + return entry; + } + + private void OptionsForm_Load(object sender, EventArgs e) + { + credNotifyCheckbox.Checked = _config.ReceiveCredentialNotification; + credMatchingCheckbox.Checked = _config.SpecificMatchingOnly; + unlockDatabaseCheckbox.Checked = _config.UnlockDatabaseRequest; + credAllowAccessCheckbox.Checked = _config.AlwaysAllowAccess; + credAllowUpdatesCheckbox.Checked = _config.AlwaysAllowUpdates; + credSearchInAllOpenedDatabases.Checked = _config.SearchInAllOpenedDatabases; + matchSchemesCheckbox.Checked = _config.MatchSchemes; + returnStringFieldsCheckbox.Checked = _config.ReturnStringFields; + SortByUsernameRadioButton.Checked = _config.SortResultByUsername; + SortByTitleRadioButton.Checked = !_config.SortResultByUsername; + listenerHostHttp.Text = _config.ListenerHostHttp; + portNumberHttp.Value = _config.ListenerPortHttp; + activateHttpsListenerCheckbox.Checked = _config.ActivateHttpsListener; + listenerHostHttps.Text = _config.ListenerHostHttps; + portNumberHttps.Value = _config.ListenerPortHttps; + + LinkLabel.Link link = new LinkLabel.Link(); + link.LinkData = "https://github.com/mheese/keepasshttp/wiki/Listener-Configuration"; + instructionsLink.Links.Add(link); + } + + private void okButton_Click(object sender, EventArgs e) + { + _config.ReceiveCredentialNotification = credNotifyCheckbox.Checked; + _config.SpecificMatchingOnly = credMatchingCheckbox.Checked; + _config.UnlockDatabaseRequest = unlockDatabaseCheckbox.Checked; + _config.AlwaysAllowAccess = credAllowAccessCheckbox.Checked; + _config.AlwaysAllowUpdates = credAllowUpdatesCheckbox.Checked; + _config.SearchInAllOpenedDatabases = credSearchInAllOpenedDatabases.Checked; + _config.MatchSchemes = matchSchemesCheckbox.Checked; + _config.ReturnStringFields = returnStringFieldsCheckbox.Checked; + _config.SortResultByUsername = SortByUsernameRadioButton.Checked; + _config.ListenerHostHttp = listenerHostHttp.Text; + _config.ListenerPortHttp = (int)portNumberHttp.Value; + _config.ActivateHttpsListener = activateHttpsListenerCheckbox.Checked; + _config.ListenerHostHttps = listenerHostHttps.Text; + _config.ListenerPortHttps = (int)portNumberHttps.Value; + + if (_restartRequired) + { + MessageBox.Show( + "You have successfully changed the port number or changed the host binding.\nA restart of KeePass is required!\n\nPlease restart KeePass now.", + "Restart required!", + MessageBoxButtons.OK, + MessageBoxIcon.Information + ); + } + } + + private void removeButton_Click(object sender, EventArgs e) + { + if (KeePass.Program.MainForm.DocumentManager.ActiveDatabase.IsOpen) + { + PwDatabase db = KeePass.Program.MainForm.DocumentManager.ActiveDatabase; + var entry = GetConfigEntry(db); + if (entry != null) + { + List deleteKeys = new List(); + + foreach (var s in entry.Strings) + { + if (s.Key.IndexOf(KeePassHttpExt.ASSOCIATE_KEY_PREFIX) == 0) + { + deleteKeys.Add(s.Key); + } + } + + + if(deleteKeys.Count > 0) + { + PwObjectList m_vHistory = entry.History.CloneDeep(); + entry.History = m_vHistory; + entry.CreateBackup(null); + + foreach (var key in deleteKeys) + { + entry.Strings.Remove(key); + } + + entry.Touch(true); + KeePass.Program.MainForm.UpdateUI(false, null, true, db.RootGroup, true, null, true); + MessageBox.Show( + String.Format("Successfully removed {0} encryption-key{1} from KeePassHttp Settings.", deleteKeys.Count.ToString(), deleteKeys.Count == 1 ? "" : "s"), + String.Format("Removed {0} key{1} from database", deleteKeys.Count.ToString(), deleteKeys.Count == 1 ? "" : "s"), + MessageBoxButtons.OK, + MessageBoxIcon.Information + ); + } + else + { + MessageBox.Show( + "No shared encryption-keys found in KeePassHttp Settings.", "No keys found", + MessageBoxButtons.OK, + MessageBoxIcon.Information + ); + } + } + else + { + MessageBox.Show("The active database does not contain an entry of KeePassHttp Settings.", "KeePassHttp Settings not available!", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + else + { + MessageBox.Show("The active database is locked!\nPlease unlock the selected database or choose another one which is unlocked.", "Database locked!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void removePermissionsButton_Click(object sender, EventArgs e) + { + if (KeePass.Program.MainForm.DocumentManager.ActiveDatabase.IsOpen) + { + PwDatabase db = KeePass.Program.MainForm.DocumentManager.ActiveDatabase; + + uint counter = 0; + var entries = db.RootGroup.GetEntries(true); + + if (entries.Count() > 999) + { + MessageBox.Show( + String.Format("{0} entries detected!\nSearching and removing permissions could take some while.\n\nWe will inform you when the process has been finished.", entries.Count().ToString()), + String.Format("{0} entries detected", entries.Count().ToString()), + MessageBoxButtons.OK, + MessageBoxIcon.Information + ); + } + + foreach (var entry in entries) { + foreach (var str in entry.Strings) + { + if (str.Key == KeePassHttpExt.KEEPASSHTTP_NAME) + { + PwObjectList m_vHistory = entry.History.CloneDeep(); + entry.History = m_vHistory; + entry.CreateBackup(null); + + entry.Strings.Remove(str.Key); + + entry.Touch(true); + + counter += 1; + + break; + } + } + } + + if (counter > 0) + { + KeePass.Program.MainForm.UpdateUI(false, null, true, db.RootGroup, true, null, true); + MessageBox.Show( + String.Format("Successfully removed permissions from {0} entr{1}.", counter.ToString(), counter == 1 ? "y" : "ies"), + String.Format("Removed permissions from {0} entr{1}", counter.ToString(), counter == 1 ? "y" : "ies"), + MessageBoxButtons.OK, + MessageBoxIcon.Information + ); + } + else + { + MessageBox.Show( + "The active database does not contain an entry with permissions.", + "No entry with permissions found!", + MessageBoxButtons.OK, + MessageBoxIcon.Information + ); + } + } + else + { + MessageBox.Show("The active database is locked!\nPlease unlock the selected database or choose another one which is unlocked.", "Database locked!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void portNumber_ValueChanged(object sender, EventArgs e) + { + checkRestartRequired(); + } + + private void listenerHost_TextChanged(object sender, EventArgs e) + { + checkRestartRequired(); + } + + private void activateHttpsListenerCheckbox_CheckedChanged(object sender, EventArgs e) + { + checkRestartRequired(); + } + + private void checkRestartRequired() + { + _restartRequired = ( + _config.ListenerPortHttp != portNumberHttp.Value || + _config.ListenerHostHttp != listenerHostHttp.Text || + _config.ActivateHttpsListener != activateHttpsListenerCheckbox.Checked || + _config.ListenerPortHttps != portNumberHttps.Value || + _config.ListenerHostHttps != listenerHostHttps.Text + ); + } + } +} diff --git a/KeePassHttp/OptionsForm.resx b/KeePassHttp/OptionsForm.resx index 4282a89..f327f44 100644 --- a/KeePassHttp/OptionsForm.resx +++ b/KeePassHttp/OptionsForm.resx @@ -1,127 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - If there are more fields needed than username + password, -normal "String Fields" are used, which can be defined in the -"Advanced" tab of an entry. -String fields are returned in alphabetical order and have to start -with "KPH: " (mind the space after KPH:). - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Specify a different port number if you have connection problems, and specify a +different host name if you require access from a remote network. Then you +probably also want to enable the HTTPS listener. + + + If there are more fields needed than username + password, +normal "String Fields" are used, which can be defined in the +"Advanced" tab of an entry. +String fields are returned in alphabetical order and have to start +with "KPH: " (mind the space after KPH:). + \ No newline at end of file diff --git a/KeePassHttp/Properties/AssemblyInfo.cs b/KeePassHttp/Properties/AssemblyInfo.cs index 155adbe..c738153 100644 --- a/KeePassHttp/Properties/AssemblyInfo.cs +++ b/KeePassHttp/Properties/AssemblyInfo.cs @@ -8,9 +8,9 @@ [assembly: AssemblyTitle("KeePassHttp")] [assembly: AssemblyDescription("A plugin to expose a secure HTTP interface to your KeePass database")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Perry Nguyen, Lukas Schulze")] +[assembly: AssemblyCompany("Marcus Heese, Perry Nguyen, Lukas Schulze")] [assembly: AssemblyProduct("KeePass Plugin")] -[assembly: AssemblyCopyright("Copyright © Perry Nguyen, Lukas Schulze 2013")] +[assembly: AssemblyCopyright("Copyright © Marcus Heese, Perry Nguyen, Lukas Schulze 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.21.0.0")] -[assembly: AssemblyFileVersion("1.8.3.0")] +[assembly: AssemblyVersion("2.22.0.0")] +[assembly: AssemblyFileVersion("1.9.0.0")] diff --git a/README.md b/README.md index e75aa45..e4de60c 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ is a plugin for KeePass 2.x and provides a secure means of exposing KeePass entries via HTTP for clients to consume. +This is a fork from [pfn/keepasshttp](https://github.com/pfn/keepasshttp). It is mainly intended to add remote access functionality to KeePassHttp. Have a look at the [Wiki section](https://github.com/mheese/keepasshttp/wiki/Listener-Configuration) on how to configure it! The rest is the same! Enjoy! + This plugin is primarily intended for use with [PassIFox for Mozilla Firefox and chromeIPass for Google Chrome](https://github.com/pfn/passifox/). ## Features diff --git a/latest-version.txt b/latest-version.txt index 3927bff..c0b0197 100644 --- a/latest-version.txt +++ b/latest-version.txt @@ -1,3 +1,3 @@ : -KeePassHttp:1.8.3.0 +KeePassHttp:1.9.0.0 : diff --git a/update-version.txt b/update-version.txt index 3927bff..c0b0197 100644 --- a/update-version.txt +++ b/update-version.txt @@ -1,3 +1,3 @@ : -KeePassHttp:1.8.3.0 +KeePassHttp:1.9.0.0 : From 7be46b7eb60bdcd11e307dfd545da58f6ea060c1 Mon Sep 17 00:00:00 2001 From: Marcus Heese Date: Sun, 30 Mar 2014 02:41:08 -0700 Subject: [PATCH 2/2] bug fix: release 1.9.0.1 to fix broken instructions link Signed-off-by: Marcus Heese --- KeePassHttp.plgx | Bin 158913 -> 159039 bytes KeePassHttp/OptionsForm.Designer.cs | 279 +++++++++++++------------ KeePassHttp/OptionsForm.cs | 5 + KeePassHttp/OptionsForm.resx | 10 +- KeePassHttp/Properties/AssemblyInfo.cs | 2 +- README.md | 4 +- latest-version.txt | 2 +- update-version.txt | 2 +- 8 files changed, 155 insertions(+), 149 deletions(-) diff --git a/KeePassHttp.plgx b/KeePassHttp.plgx index 98aae314295dcf31f81034a39828ad749a6dbf77..6c99fcc8102802e0d5d57c21dc536fd7f30979d1 100644 GIT binary patch delta 9546 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 delta 9442 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 diff --git a/KeePassHttp/OptionsForm.Designer.cs b/KeePassHttp/OptionsForm.Designer.cs index 40a89f5..ab2d001 100644 --- a/KeePassHttp/OptionsForm.Designer.cs +++ b/KeePassHttp/OptionsForm.Designer.cs @@ -51,15 +51,8 @@ private void InitializeComponent() this.credAllowUpdatesCheckbox = new System.Windows.Forms.CheckBox(); this.credAllowAccessCheckbox = new System.Windows.Forms.CheckBox(); this.tabPage3 = new System.Windows.Forms.TabPage(); - this.label9 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label12 = new System.Windows.Forms.Label(); - this.listenerHostHttps = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.portNumberHttps = new System.Windows.Forms.NumericUpDown(); - this.label15 = new System.Windows.Forms.Label(); + this.instructionsLink = new System.Windows.Forms.LinkLabel(); + this.activateHttpsListenerCheckbox = new System.Windows.Forms.CheckBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.label10 = new System.Windows.Forms.Label(); this.listenerHostHttp = new System.Windows.Forms.TextBox(); @@ -67,16 +60,23 @@ private void InitializeComponent() this.label7 = new System.Windows.Forms.Label(); this.portNumberHttp = new System.Windows.Forms.NumericUpDown(); this.label6 = new System.Windows.Forms.Label(); - this.activateHttpsListenerCheckbox = new System.Windows.Forms.CheckBox(); - this.instructionsLink = new System.Windows.Forms.LinkLabel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label12 = new System.Windows.Forms.Label(); + this.listenerHostHttps = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.portNumberHttps = new System.Windows.Forms.NumericUpDown(); + this.label15 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.tabPage2.SuspendLayout(); this.tabPage3.SuspendLayout(); - this.groupBox1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.portNumberHttps)).BeginInit(); this.groupBox2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.portNumberHttp)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.portNumberHttps)).BeginInit(); this.SuspendLayout(); // // cancelButton @@ -361,115 +361,27 @@ private void InitializeComponent() this.tabPage3.Text = "Listener Configuration"; this.tabPage3.UseVisualStyleBackColor = true; // - // label9 - // - this.label9.AutoSize = true; - this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.875F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label9.Location = new System.Drawing.Point(9, 541); - this.label9.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(583, 50); - this.label9.TabIndex = 41; - this.label9.Text = "Don\'t forget to change the listener (host + port) also in\r\nthe plugins like chrom" + - "eIPass, PassIFox, kypass, etc."; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(9, 13); - this.label5.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(762, 75); - this.label5.TabIndex = 36; - this.label5.Text = resources.GetString("label5.Text"); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.label12); - this.groupBox1.Controls.Add(this.listenerHostHttps); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.label14); - this.groupBox1.Controls.Add(this.portNumberHttps); - this.groupBox1.Controls.Add(this.label15); - this.groupBox1.Location = new System.Drawing.Point(14, 368); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(774, 149); - this.groupBox1.TabIndex = 44; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "HTTPS Listener"; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(435, 42); - this.label12.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(178, 25); - this.label12.TabIndex = 48; - this.label12.Text = "Default: localhost"; - // - // listenerHostHttps - // - this.listenerHostHttps.Location = new System.Drawing.Point(87, 41); - this.listenerHostHttps.Name = "listenerHostHttps"; - this.listenerHostHttps.Size = new System.Drawing.Size(324, 31); - this.listenerHostHttps.TabIndex = 47; - this.listenerHostHttps.Text = "localhost"; - this.listenerHostHttps.TextChanged += new System.EventHandler(this.listenerHost_TextChanged); - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(16, 42); - this.label13.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(62, 25); - this.label13.TabIndex = 46; - this.label13.Text = "Host:"; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(435, 90); - this.label14.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(152, 25); - this.label14.TabIndex = 45; - this.label14.Text = "Default: 19456"; - // - // portNumberHttps + // instructionsLink // - this.portNumberHttps.Location = new System.Drawing.Point(88, 92); - this.portNumberHttps.Margin = new System.Windows.Forms.Padding(6); - this.portNumberHttps.Maximum = new decimal(new int[] { - 99999, - 0, - 0, - 0}); - this.portNumberHttps.Minimum = new decimal(new int[] { - 1025, - 0, - 0, - 0}); - this.portNumberHttps.Name = "portNumberHttps"; - this.portNumberHttps.Size = new System.Drawing.Size(120, 31); - this.portNumberHttps.TabIndex = 44; - this.portNumberHttps.Value = new decimal(new int[] { - 19456, - 0, - 0, - 0}); - this.portNumberHttps.ValueChanged += new System.EventHandler(this.portNumber_ValueChanged); + this.instructionsLink.AutoSize = true; + this.instructionsLink.Location = new System.Drawing.Point(9, 98); + this.instructionsLink.Name = "instructionsLink"; + this.instructionsLink.Size = new System.Drawing.Size(221, 25); + this.instructionsLink.TabIndex = 47; + this.instructionsLink.TabStop = true; + this.instructionsLink.Text = "Read the instructions!"; + this.instructionsLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.instructionsLink_LinkClicked); // - // label15 + // activateHttpsListenerCheckbox // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(21, 94); - this.label15.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(57, 25); - this.label15.TabIndex = 43; - this.label15.Text = "Port:"; + this.activateHttpsListenerCheckbox.AutoSize = true; + this.activateHttpsListenerCheckbox.Location = new System.Drawing.Point(14, 333); + this.activateHttpsListenerCheckbox.Name = "activateHttpsListenerCheckbox"; + this.activateHttpsListenerCheckbox.Size = new System.Drawing.Size(279, 29); + this.activateHttpsListenerCheckbox.TabIndex = 46; + this.activateHttpsListenerCheckbox.Text = "Activate HTTPS Listener"; + this.activateHttpsListenerCheckbox.UseVisualStyleBackColor = true; + this.activateHttpsListenerCheckbox.CheckedChanged += new System.EventHandler(this.activateHttpsListenerCheckbox_CheckedChanged); // // groupBox2 // @@ -559,26 +471,115 @@ private void InitializeComponent() this.label6.TabIndex = 43; this.label6.Text = "Port:"; // - // activateHttpsListenerCheckbox + // groupBox1 // - this.activateHttpsListenerCheckbox.AutoSize = true; - this.activateHttpsListenerCheckbox.Location = new System.Drawing.Point(14, 333); - this.activateHttpsListenerCheckbox.Name = "activateHttpsListenerCheckbox"; - this.activateHttpsListenerCheckbox.Size = new System.Drawing.Size(279, 29); - this.activateHttpsListenerCheckbox.TabIndex = 46; - this.activateHttpsListenerCheckbox.Text = "Activate HTTPS Listener"; - this.activateHttpsListenerCheckbox.UseVisualStyleBackColor = true; - this.activateHttpsListenerCheckbox.CheckedChanged += new System.EventHandler(this.activateHttpsListenerCheckbox_CheckedChanged); + this.groupBox1.Controls.Add(this.label12); + this.groupBox1.Controls.Add(this.listenerHostHttps); + this.groupBox1.Controls.Add(this.label13); + this.groupBox1.Controls.Add(this.label14); + this.groupBox1.Controls.Add(this.portNumberHttps); + this.groupBox1.Controls.Add(this.label15); + this.groupBox1.Location = new System.Drawing.Point(14, 368); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(774, 149); + this.groupBox1.TabIndex = 44; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "HTTPS Listener"; // - // instructionsLink + // label12 // - this.instructionsLink.AutoSize = true; - this.instructionsLink.Location = new System.Drawing.Point(9, 98); - this.instructionsLink.Name = "instructionsLink"; - this.instructionsLink.Size = new System.Drawing.Size(221, 25); - this.instructionsLink.TabIndex = 47; - this.instructionsLink.TabStop = true; - this.instructionsLink.Text = "Read the instructions!"; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(435, 42); + this.label12.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(178, 25); + this.label12.TabIndex = 48; + this.label12.Text = "Default: localhost"; + // + // listenerHostHttps + // + this.listenerHostHttps.Location = new System.Drawing.Point(87, 41); + this.listenerHostHttps.Name = "listenerHostHttps"; + this.listenerHostHttps.Size = new System.Drawing.Size(324, 31); + this.listenerHostHttps.TabIndex = 47; + this.listenerHostHttps.Text = "localhost"; + this.listenerHostHttps.TextChanged += new System.EventHandler(this.listenerHost_TextChanged); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(16, 42); + this.label13.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(62, 25); + this.label13.TabIndex = 46; + this.label13.Text = "Host:"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(435, 90); + this.label14.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(152, 25); + this.label14.TabIndex = 45; + this.label14.Text = "Default: 19456"; + // + // portNumberHttps + // + this.portNumberHttps.Location = new System.Drawing.Point(88, 92); + this.portNumberHttps.Margin = new System.Windows.Forms.Padding(6); + this.portNumberHttps.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.portNumberHttps.Minimum = new decimal(new int[] { + 1025, + 0, + 0, + 0}); + this.portNumberHttps.Name = "portNumberHttps"; + this.portNumberHttps.Size = new System.Drawing.Size(120, 31); + this.portNumberHttps.TabIndex = 44; + this.portNumberHttps.Value = new decimal(new int[] { + 19456, + 0, + 0, + 0}); + this.portNumberHttps.ValueChanged += new System.EventHandler(this.portNumber_ValueChanged); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(21, 94); + this.label15.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(57, 25); + this.label15.TabIndex = 43; + this.label15.Text = "Port:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.875F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(9, 541); + this.label9.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(583, 50); + this.label9.TabIndex = 41; + this.label9.Text = "Don\'t forget to change the listener (host + port) also in\r\nthe plugins like chrom" + + "eIPass, PassIFox, kypass, etc."; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(9, 13); + this.label5.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(762, 75); + this.label5.TabIndex = 36; + this.label5.Text = resources.GetString("label5.Text"); // // OptionsForm // @@ -604,12 +605,12 @@ private void InitializeComponent() this.tabPage2.PerformLayout(); this.tabPage3.ResumeLayout(false); this.tabPage3.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.portNumberHttps)).EndInit(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.portNumberHttp)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.portNumberHttps)).EndInit(); this.ResumeLayout(false); } diff --git a/KeePassHttp/OptionsForm.cs b/KeePassHttp/OptionsForm.cs index 0b31b89..d9f0134 100644 --- a/KeePassHttp/OptionsForm.cs +++ b/KeePassHttp/OptionsForm.cs @@ -233,5 +233,10 @@ private void checkRestartRequired() _config.ListenerHostHttps != listenerHostHttps.Text ); } + + private void instructionsLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start(e.Link.LinkData as string); + } } } diff --git a/KeePassHttp/OptionsForm.resx b/KeePassHttp/OptionsForm.resx index f327f44..5937947 100644 --- a/KeePassHttp/OptionsForm.resx +++ b/KeePassHttp/OptionsForm.resx @@ -117,11 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Specify a different port number if you have connection problems, and specify a -different host name if you require access from a remote network. Then you -probably also want to enable the HTTPS listener. - If there are more fields needed than username + password, normal "String Fields" are used, which can be defined in the @@ -129,4 +124,9 @@ normal "String Fields" are used, which can be defined in the String fields are returned in alphabetical order and have to start with "KPH: " (mind the space after KPH:). + + Specify a different port number if you have connection problems, and specify a +different host name if you require access from a remote network. Then you +probably also want to enable the HTTPS listener. + \ No newline at end of file diff --git a/KeePassHttp/Properties/AssemblyInfo.cs b/KeePassHttp/Properties/AssemblyInfo.cs index c738153..9de9144 100644 --- a/KeePassHttp/Properties/AssemblyInfo.cs +++ b/KeePassHttp/Properties/AssemblyInfo.cs @@ -33,4 +33,4 @@ // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("2.22.0.0")] -[assembly: AssemblyFileVersion("1.9.0.0")] +[assembly: AssemblyFileVersion("1.9.0.1")] diff --git a/README.md b/README.md index e4de60c..a984b31 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # KeePassHttp -is a plugin for KeePass 2.x and provides a secure means of exposing KeePass entries via HTTP for clients to +is a plugin for KeePass 2.x and provides a secure means of exposing KeePass entries via HTTP or HTTPS for clients to consume. This is a fork from [pfn/keepasshttp](https://github.com/pfn/keepasshttp). It is mainly intended to add remote access functionality to KeePassHttp. Have a look at the [Wiki section](https://github.com/mheese/keepasshttp/wiki/Listener-Configuration) on how to configure it! The rest is the same! Enjoy! -This plugin is primarily intended for use with [PassIFox for Mozilla Firefox and chromeIPass for Google Chrome](https://github.com/pfn/passifox/). +This plugin is primarily intended for use with [PassIFox for Mozilla Firefox and chromeIPass for Google Chrome](https://github.com/pfn/passifox/). However, the listener HTTPS feature only works with passIFox at the moment, as you cannot specify https in chromeIPass yet. ## Features * returns all matching entries for a given URL diff --git a/latest-version.txt b/latest-version.txt index c0b0197..aa81dd8 100644 --- a/latest-version.txt +++ b/latest-version.txt @@ -1,3 +1,3 @@ : -KeePassHttp:1.9.0.0 +KeePassHttp:1.9.0.1 : diff --git a/update-version.txt b/update-version.txt index c0b0197..aa81dd8 100644 --- a/update-version.txt +++ b/update-version.txt @@ -1,3 +1,3 @@ : -KeePassHttp:1.9.0.0 +KeePassHttp:1.9.0.1 :