Example #1
0
        /// <summary>
        /// Instanciates a new TOTP_Generator.
        /// </summary>
        /// <param name="initDuration">Duration of generation of each totp, in seconds.</param>
        /// <param name="initLength">Length of the generated totp.</param>
        /// <param name="initEncoder">The output encoder.</param>

        /*public TOTPProvider(int initDuration, int initLength, Func<byte[], int, string> initEncoder)
         * {
         *  this.Duration = initDuration;
         *  this.Length = initLength;
         *  this.encoder = initEncoder;
         *  this.TimeCorrection = TimeSpan.Zero;
         * }*/

        /// <summary>
        /// Instanciates a new TOTP_Generator.
        /// </summary>
        /// <param name="initSettings">Saved Settings.</param>
        public TOTPProvider(string[] Settings, ref TimeCorrectionCollection tcc)
        {
            this.duration = Convert.ToInt16(Settings[0]);

            if (Settings[1] == "S")
            {
                this.length  = 5;
                this.encoder = TOTPEncoder.steam;
            }
            else
            {
                this.length  = Convert.ToInt16(Settings[1]);
                this.encoder = TOTPEncoder.rfc6238;
            }

            if (Settings.Length > 2 && Settings[2] != String.Empty)
            {
                var tc = tcc[Settings[2]];

                if (tc != null)
                {
                    this.TimeCorrection = tc.TimeCorrection;
                }
                else
                {
                    this.TimeCorrection      = TimeSpan.Zero;
                    this.timeCorrectionError = false;
                }
            }
            else
            {
                this.TimeCorrection = TimeSpan.Zero;
            }
        }
Example #2
0
        /// <summary>
        /// Instantiate a new TOTP_Generator.
        /// </summary>
        public TOTPProvider(string[] settings, TimeCorrectionCollection tcc)
        {
            this._duration = Convert.ToInt16(settings[0]);

            if (settings[1] == "S")
            {
                this._length = 5;
                this.Encoder = TOTPEncoder.Steam;
            }
            else
            {
                this._length = Convert.ToInt16(settings[1]);
                this.Encoder = TOTPEncoder.Rfc6238;
            }

            if (settings.Length > 2 && settings[2] != string.Empty)
            {
                var tc = tcc[settings[2]];

                if (tc != null)
                {
                    this.TimeCorrection = tc.TimeCorrection;
                }
                else
                {
                    this.TimeCorrection      = TimeSpan.Zero;
                    this.TimeCorrectionError = false;
                }
            }
            else
            {
                this.TimeCorrection = TimeSpan.Zero;
            }
        }
Example #3
0
        /// <summary>
        /// Instanciates a new TOTP_Generator.
        /// </summary>
        /// <param name="initDuration">Duration of generation of each totp, in seconds.</param>
        /// <param name="initLength">Length of the generated totp.</param>
        /// <param name="initEncoder">The output encoder.</param>
        /*public TOTPProvider(int initDuration, int initLength, Func<byte[], int, string> initEncoder)
        {
            this.Duration = initDuration;
            this.Length = initLength;
            this.encoder = initEncoder;
            this.TimeCorrection = TimeSpan.Zero;
        }*/
        /// <summary>
        /// Instanciates a new TOTP_Generator.
        /// </summary>
        /// <param name="initSettings">Saved Settings.</param>
        public TOTPProvider(string[] Settings, ref TimeCorrectionCollection tcc)
        {
            this.duration = Convert.ToInt16(Settings[0]);

            if (Settings[1] == "S")
            {
                this.length = 5;
                this.encoder = TOTPEncoder.steam;
            }
            else
            {
                this.length = Convert.ToInt16(Settings[1]);
                this.encoder = TOTPEncoder.rfc6238;
            }

            if(Settings.Length > 2 && Settings[2] != String.Empty)
            {
                var tc = tcc[Settings[2]];

                if (tc != null)
                    this.TimeCorrection = tc.TimeCorrection;
                else
                {
                    this.TimeCorrection = TimeSpan.Zero;
                    this.timeCorrectionError = false;
                }
            }
            else
            {
                this.TimeCorrection = TimeSpan.Zero;
            }
        }
        /// <summary>
        /// Initialization of the plugin, adding menus, handlers and forms.
        /// </summary>
        /// <param name="host">Plugin host for access to KeePass functions.</param>
        /// <returns>Successful loading of the plugin, if not the plugin is removed.</returns>
        public override bool Initialize(IPluginHost host)
        {
            //Internalise Host Handle.
            if (host == null) return false;
            m_host = host;

            //Instanciate Help Form.
            HelpForm = new FormHelp(this);

            //Register form events.
            m_host.MainWindow.Shown += MainWindow_Shown;

            //Tools Menus.
            toMenuTrayTOTP = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strTrayTOTPPlugin);
            toMenuTrayTOTP.Image = Properties.Resources.TOTP;
            m_host.MainWindow.ToolsMenu.DropDownItems.Add(toMenuTrayTOTP);
            toSubMenuSettings = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strSettings);
            toSubMenuSettings.Image = Properties.Resources.TOTP_Settings;
            toSubMenuSettings.Click += OnMenuSettingsClick;
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuSettings);
            toSubMenuSeperator1 = new ToolStripSeparator();
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuSeperator1);
            toSubMenuHelp = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strHelp);
            toSubMenuHelp.Image = Properties.Resources.TOTP_Help;
            toSubMenuHelp.Click += OnMenuHelpClick;
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuHelp);
            toSubMenuAbout = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strAbout + "...");
            toSubMenuAbout.Image = Properties.Resources.TOTP_Info;
            toSubMenuAbout.Click += OnMenuAboutClick;
            toMenuTrayTOTP.DropDownItems.Add(toSubMenuAbout);

            //Entry Context Menus.
            m_host.MainWindow.EntryContextMenu.Opening += OnEntryMenuOpening;
            enMenuCopyTOTP = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strCopyTOTP);
            enMenuCopyTOTP.Image = Properties.Resources.TOTP;
            enMenuCopyTOTP.ShortcutKeys = (Keys)Shortcut.CtrlT;
            enMenuCopyTOTP.Click += OnEntryMenuTOTPClick;
            m_host.MainWindow.EntryContextMenu.Items.Insert(m_host.MainWindow.EntryContextMenu.Items.IndexOfKey(keeobj_string_EntryContextMenuCopyPassword_Name) + 1, enMenuCopyTOTP);
            enMenuSetupTOTP = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strSetupTOTP);
            enMenuSetupTOTP.Image = Properties.Resources.TOTP_Setup;
            enMenuSetupTOTP.ShortcutKeys = (Keys)Shortcut.CtrlShiftI;
            enMenuSetupTOTP.Click += OnEntryMenuSetupClick;
            var ContextMenu = (ToolStripMenuItem)m_host.MainWindow.EntryContextMenu.Items.Find(keeobj_string_EntryContextMenuEntriesSubMenu_Name, true)[0];
            ContextMenu.DropDownItems.Insert(ContextMenu.DropDownItems.IndexOfKey(keeobj_string_EntryContextMenuEntriesSubMenuSeperator1_Name) + 1, enMenuSetupTOTP);
            enMenuSeperator = new ToolStripSeparator();
            ContextMenu.DropDownItems.Insert(ContextMenu.DropDownItems.IndexOf(enMenuSetupTOTP) + 1, enMenuSeperator);

            //Notify Icon Context Menus.
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Opening += OnNotifyMenuOpening;
            niMenuTitle = new ToolStripMenuItem(TrayTOTP_Plugin_Localization.strTrayTOTPPlugin);
            niMenuTitle.Image = Properties.Resources.TOTP;
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Insert(0, niMenuTitle);
            niMenuSeperator = new ToolStripSeparator();
            m_host.MainWindow.MainNotifyIcon.ContextMenuStrip.Items.Insert(1, niMenuSeperator);

            //Register auto-type function.
            if (m_host.CustomConfig.GetBool(setname_bool_AutoType_Enable, true))
            {
                SprEngine.FilterCompile += SprEngine_FilterCompile;
                SprEngine.FilterPlaceholderHints.Add(m_host.CustomConfig.GetString(setname_string_AutoType_FieldName, setdef_string_AutoType_FieldName).ExtWithBrackets());
            }

            //List Column TOTP.
            liColumnTOTP = new TrayTOTP_CustomColumn(this);
            m_host.ColumnProviderPool.Add(liColumnTOTP);

            //Refresh Timer.
            liRefreshTimer.Interval = setstat_int_EntryList_RefreshRate;
            liRefreshTimer.Enabled = true;
            liRefreshTimer.Tick += OnTimerTick;

            //Time Correction.
            TimeCorrections = new TimeCorrectionCollection(m_host.CustomConfig.GetBool(setname_bool_TimeCorrection_Enable, false));
            TimeCorrectionProvider.Interval = Convert.ToInt16(m_host.CustomConfig.GetULong(KeeTrayTOTPExt.setname_ulong_TimeCorrection_RefreshTime, KeeTrayTOTPExt.setdef_ulong_TimeCorrection_RefreshTime));
            TimeCorrections.AddRangeFromList(m_host.CustomConfig.GetString(setname_string_TimeCorrection_List, string.Empty).Split(';').ToList());

            return true;
        }