public Task SignOutAsync()
 {
     _userContext.SignedInUser = null;
     _tokenManager.RemoveTokenAsync();
     AuthenticationStateUpdated?.Invoke(null, EventArgs.Empty);
     return(Task.CompletedTask);
 }
        public async Task SignInAsync(JwtTokenDto tokenDto)
        {
            _userContext.SignedInUser = new SignedInUser(tokenDto.Token);
            await _tokenManager.SaveTokenAsync(tokenDto);

            AuthenticationStateUpdated?.Invoke(null, EventArgs.Empty);
        }
        public async Task <bool> IsUserSignedInAsync()
        {
            if (_userContext.SignedInUser is not null)
            {
                if (_userContext.SignedInUser.Expiry > DateTime.Now)
                {
                    return(true);
                }
                await SignOutAsync();

                return(false);
            }

            var token = await _tokenManager.GetTokenAsync();

            if (token is not null)
            {
                _userContext.SignedInUser = new SignedInUser(token.Token);
                if (_userContext.SignedInUser.Expiry < DateTime.Now)
                {
                    var newToken = await _authenticationProxy.RefreshAsync(token.Refresh, _userContext.SignedInUser.Email);

                    if (newToken is null)
                    {
                        Console.WriteLine("Failed to use refresh token");
                        _userContext.SignedInUser = null;
                        await _tokenManager.RemoveTokenAsync();

                        AuthenticationStateUpdated?.Invoke(null, EventArgs.Empty);
                        return(false);
                    }

                    _userContext.SignedInUser = new SignedInUser(token.Token);
                    await _tokenManager.SaveTokenAsync(token);
                }
                AuthenticationStateUpdated?.Invoke(null, EventArgs.Empty);
                return(true);
            }

            return(false);
        }