Exemplo n.º 1
0
 public SetupLoginCommand(
     LoginUi ui,
     MethodWeb web,
     int loginDurationMinutes = 15)
     : this(
         ui,
         web,
         TimeSpan.FromMinutes(
             loginDurationMinutes))
 {
 }
Exemplo n.º 2
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();
                });
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Requires an AccessController and UiReaderWriter
        /// Also requires a SettingsHolder and Labels, but
        /// this is registered by the SetupLoginCommand
        /// </summary>
        /// <param name="ui">The LoginUi on which to handle the event</param>
        public virtual void Handle(
            LoginUi ui)
        {
            var r = this.runner;

            r?.Run <
                AccessController,
                SettingsHolder,
                Labels>(
                (ac, settings, labels) =>
            {
                var cal = ac.CurrentAccessLevel;
                string timeRemaining;
                if (cal < AccessLevel.Level1)
                {
                    timeRemaining = labels.NotLoggedIn;
                    goto checkAccess;
                }

                var tr = ac.TimeRemaining;
                var sb = new StringBuilder();
                sb.Append((int)tr.TotalHours)
                .Append(':')
                .Append(tr
                        .Minutes
                        .ToString()
                        .PadLeft(2, '0'))
                .Append(':')
                .Append(tr
                        .Seconds
                        .ToString()
                        .PadLeft(2, '0'))
                .Append('.')
                .Append(tr
                        .Milliseconds
                        .ToString()
                        .PadLeft(3, '0'));
                timeRemaining = sb.ToString();

                checkAccess:
                var noAccess = cal == AccessLevel.None;
                if (noAccess)
                {
                    settings.CurrentPassword = null;
                }

                r.Run <UiReaderWriter>(uiRW =>
                {
                    uiRW.Write(
                        ui,
                        () =>
                    {
                        if (ui == null)
                        {
                            return;
                        }

                        ui.CurrentAccessLevel = cal;
                        ui.TimeRemaining      = timeRemaining;
                    });
                });
            });
        }
Exemplo n.º 4
0
        /// <summary>
        /// Requires a UiReaderWriter, an AccessController, and
        /// a timer called LoginTimer registered with the MethodWeb
        /// </summary>
        /// <param name="ui">
        /// The LoginUi to set up</param>
        public virtual void Handle(
            LoginUi ui)
        {
            var r = this.runner;

            r?.Run <Labels, UiReaderWriter>(
                (labels, uiRW) =>
            {
                uiRW.Write(
                    ui,
                    () =>
                {
                    if (ui == null)
                    {
                        return;
                    }

                    ui.TimeRemaining      = labels.NotLoggedIn;
                    ui.KeyboardKeyVisible = false;
                });

                r.Run <KeyboardLoader>(loader =>
                {
                    uiRW.Write(
                        ui,
                        () =>
                    {
                        if (ui == null)
                        {
                            return;
                        }

                        ui.KeyboardKeyVisible = true;
                    });
                });

                r.Run <AccessController>(ac =>
                {
                    var cal = ac.CurrentAccessLevel;
                    uiRW.Write(
                        ui,
                        () =>
                    {
                        if (ui == null)
                        {
                            return;
                        }

                        ui.CurrentAccessLevel = cal;
                    });
                });

                if (ui is LoginUiV2 v2)
                {
                    r.Run <LabelApplier>(applier =>
                    {
                        applier.Apply(
                            v2);
                    });
                }

                r.Run <xofz.Framework.Timer>(t =>
                {
                    const short timerInterval = 1000;
                    t.Start(timerInterval);
                },
                                             DependencyNames.Timer);
            });
        }