public virtual void Handle(
            LoginUi ui)
        {
            var r = this.runner;

            r?.Run <KeyboardLoader>(loader =>
            {
                try
                {
                    loader.Load();
                }
                catch
                {
                    // swallow
                }
            });

            r?.Run <UiReaderWriter>(uiRW =>
            {
                uiRW.Write(
                    ui,
                    () =>
                {
                    ui?.FocusPassword();
                });
            });
        }
        /// <summary>
        /// Requires a UiReaderWriter registered with the MethodWeb.
        /// </summary>
        /// <param name="ui"></param>
        public virtual void Handle(
            LoginUi ui)
        {
            var r = this.runner;

            r?.Run <SecureStringToolSet, UiReaderWriter>(
                (ssts, uiRW) =>
            {
                const byte one = 1;
                var currentPw  = ssts.Decode(uiRW.Read(
                                                 ui,
                                                 () => ui?.CurrentPassword));
                var newPw = StringHelpers.RemoveEndChars(
                    currentPw,
                    one);
                var securePw = ssts.Encode(
                    newPw);
                uiRW.Write(
                    ui,
                    () =>
                {
                    if (ui == null)
                    {
                        return;
                    }

                    ui.CurrentPassword = securePw;
                    ui?.FocusPassword();
                });
            });
        }
예제 #3
0
        /// <summary>
        /// Requires a UiReaderWriter, an AccessController, and an EventRaiser
        /// Also requires a Timer called LoginTimer and a StopHandler
        /// The timer and handler are registered by the SetupLoginCommand
        /// </summary>
        /// <param name="ui"></param>
        ///
        public virtual void Handle(
            LoginUi ui)
        {
            var r = this.runner;

            r?.Run <
                UiReaderWriter,
                AccessController,
                SettingsHolder>(
                (uiRW, ac, settings) =>
            {
                var securePw = uiRW.Read(
                    ui,
                    () => ui?.CurrentPassword);
                var previousLevel = ac.CurrentAccessLevel;
                ac.InputPassword(
                    securePw,
                    settings.Duration);
                var newLevel = ac.CurrentAccessLevel;
                if (previousLevel == newLevel)
                {
                    r.Run <xofz.Framework.Timer, EventRaiser>(
                        (t, er) =>
                    {
                        er.Raise(t, nameof(t.Elapsed));
                    },
                        DependencyNames.Timer);
                }

                const AccessLevel zeroAccess = AccessLevel.None;
                if (newLevel > zeroAccess)
                {
                    settings.CurrentPassword = securePw;
                    r.Run <StopHandler>(handler =>
                    {
                        handler.Handle(ui);
                    });
                    return;
                }

                uiRW.Write(
                    ui,
                    () =>
                {
                    ui?.FocusPassword();
                });
            });
        }