示例#1
0
 public TokenChangeManager(AuthenticationContext authContext, ILoginInfoStorage storage)
 {
     domain0AuthenticationContext = authContext;
     loginInfoStorage             = storage;
     if (domain0AuthenticationContext.AutoRefreshEnabled)
     {
         refreshTokenTimer = new RefreshTokenTimer(authContext);
     }
 }
示例#2
0
        public AuthenticationContext(
            IDomain0ClientScope domain0ClientEnvironment = null,
            ILoginInfoStorage externalStorage            = null,
            uint reserveTimeToUpdateToken = 120,
            bool enableAutoRefreshTimer   = false)
        {
            ReserveTimeToUpdate = reserveTimeToUpdateToken;
            AutoRefreshEnabled  = enableAutoRefreshTimer;

            Domain0Scope = domain0ClientEnvironment ?? new Domain0ClientScope();

            var loginInfoStorage = externalStorage ?? new LoginInfoStorage();

            tokenChangeManager = new TokenChangeManager(this, loginInfoStorage);

            tokenChangeManager.RestoreLoginInfo();

            Client = new ProxyGenerator()
                     .CreateInterfaceProxyWithTargetInterface(
                Domain0Scope.Client,
                new RefreshTokenInterceptor(this, Domain0Scope));
        }
示例#3
0
        public LoginViewModel(IMessageBus bus, ILoginInfoStorage storage)
        {
            _bus = bus;

            _isTokenValid = this.ObservableToProperty(
                this.ObservableForProperty(vm => vm.Token).Select(t => !String.IsNullOrEmpty(t.Value)),
                vm => vm.IsTokenValid);
            LoginCommand = new ReactiveCommand(
                this.WhenAny(
                    vm => vm.IsAccountNameVerified,
                    vm => vm.IsTokenValid,
                    (verified, token) => verified.Value && token.Value
                    ));
            _bus.RegisterSourceAndHandleReply <RequestLoginMessage, RequestLoginResponse>(
                LoginCommand.Select(_ => new RequestLoginMessage(new LoginInfo(Account, Token)))
                .Do(_ => IsLoggingIn    = true)
                .Do(_ => IsTokenInError = false),

                res =>
            {
                IsLoggingIn = false;
                if (res.SuccessFul)
                {
                    storage.PersistLoginInfo(new LoginInfo(Account, Token));
                    IsTokenInError = false;
                    _bus.SendMessage(new ActivateMainModuleMessage(ModuleNames.MainCampfireView));
                }
                else
                {
                    IsTokenInError = true;
                }
            });


            RetryCommand = new ReactiveCommand();

            _bus.RegisterSourceAndHandleReply <RequestCheckAccountName, RequestCheckAccountNameReply>(
                this.ObservableForProperty(vm => vm.Account)
                .DistinctUntilChanged()
                .Select(_ => Unit.Default)
                .Throttle(TimeSpan.FromSeconds(1), RxApp.TaskpoolScheduler)
                .Merge(RetryCommand.Select(_ => Unit.Default))
                .Do(_ =>
            {
                IsAccountNameVerified = false;
                IsAccountNameInError  = String.IsNullOrEmpty(Account);
                ShowConnectionError   = false;
            })
                .Where(_ => !String.IsNullOrEmpty(Account))
                .Select(_ => new RequestCheckAccountName(Account))
                .Do(_ => IsVerifyingAccountInProgress = true)
                .Do(msg => _accountNameCorrelationId  = msg.CorrelationId),

                rep =>
            {
                IsVerifyingAccountInProgress = false;
                IsAccountNameVerified        = rep.Result;
                IsAccountNameInError         = !rep.Result;
            },

                ex =>
            {
                IsVerifyingAccountInProgress = false;
                IsAccountNameVerified        = false;
                IsAccountNameInError         = true;
                ShowConnectionError          = true;
                ConnectionErrorMessage       = ex.Message;
            });

            ProxySettingsCommand = new ReactiveCommand();
            _bus.RegisterMessageSource(ProxySettingsCommand.Select(_ => new NavigateSettingsPageMessage(SettingsPageNames.Network)));

            LoginInfo info = storage.GetStoredLoginInfo();

            if (info != null)
            {
                Token   = info.Token;
                Account = info.Account;
            }
        }
示例#4
0
        public LoginViewModel(IMessageBus bus, ILoginInfoStorage storage)
        {
            _bus = bus;

            _isTokenValid = this.ObservableToProperty(
                this.ObservableForProperty(vm => vm.Token).Select(t => !String.IsNullOrEmpty(t.Value)),
                vm => vm.IsTokenValid);
            LoginCommand = new ReactiveCommand(
                this.WhenAny(
                    vm => vm.IsAccountNameVerified,
                    vm => vm.IsTokenValid,
                    (verified, token) => verified.Value && token.Value
                    ));
            _bus.RegisterSourceAndHandleReply<RequestLoginMessage, RequestLoginResponse>(
                LoginCommand.Select(_ => new RequestLoginMessage(new LoginInfo(Account, Token)))
                    .Do(_ => IsLoggingIn = true)
                    .Do(_ => IsTokenInError = false),

                res =>
                    {
                        IsLoggingIn = false;
                        if (res.SuccessFul)
                        {
                            storage.PersistLoginInfo(new LoginInfo(Account, Token));
                            IsTokenInError = false;
                            _bus.SendMessage(new ActivateMainModuleMessage(ModuleNames.MainCampfireView));
                        }
                        else
                        {
                            IsTokenInError = true;
                        }
                    });

            RetryCommand = new ReactiveCommand();

            _bus.RegisterSourceAndHandleReply<RequestCheckAccountName, RequestCheckAccountNameReply>(
                this.ObservableForProperty(vm => vm.Account)
                .DistinctUntilChanged()
                .Select(_ => Unit.Default)
                .Throttle(TimeSpan.FromSeconds(1), RxApp.TaskpoolScheduler)
                .Merge(RetryCommand.Select(_ => Unit.Default))
                .Do(_ =>
                {
                    IsAccountNameVerified = false;
                    IsAccountNameInError = String.IsNullOrEmpty(Account);
                    ShowConnectionError = false;
                })
                .Where(_ => !String.IsNullOrEmpty(Account))
                .Select(_ => new RequestCheckAccountName(Account))
                .Do(_ => IsVerifyingAccountInProgress = true)
                .Do(msg => _accountNameCorrelationId = msg.CorrelationId),

                rep =>
                {
                    IsVerifyingAccountInProgress = false;
                    IsAccountNameVerified = rep.Result;
                    IsAccountNameInError = !rep.Result;
                },

                ex =>
                {
                    IsVerifyingAccountInProgress = false;
                    IsAccountNameVerified = false;
                    IsAccountNameInError = true;
                    ShowConnectionError = true;
                    ConnectionErrorMessage = ex.Message;
                });

            ProxySettingsCommand = new ReactiveCommand();
            _bus.RegisterMessageSource(ProxySettingsCommand.Select(_ => new NavigateSettingsPageMessage(SettingsPageNames.Network)));

            LoginInfo info = storage.GetStoredLoginInfo();
            if (info != null)
            {
                Token = info.Token;
                Account = info.Account;
            }
        }