private async void Login_OnClick(object sender, RoutedEventArgs e)
        {
            if (Email.Text.IsNullOrEmpty() || Password.Password.IsNullOrEmpty())
            {
                ErrorMessage.Text = AkaI18N.EmptyEmailOrPasswordIsNotAllowed;
                return;
            }

            Login.Disable();

            try
            {
                await Task.WhenAll(Authentication.AppApiAuthenticate(Email.Text, Password.Password),
                                   Authentication.WebApiAuthenticate(Email.Text, Password.Password));
            }
            catch (Exception exception)
            {
                SetErrorHint(exception);
                ExceptionDumper.WriteException(exception);
                Login.Enable();
                return;
            }

            var mainWindow = new MainWindow();

            mainWindow.Show();

            Close();
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request,
                                                                      CancellationToken cancellationToken)
        {
            _requestHandler?.Handle(request);

            if (_directConnect)
            {
                var host = request.RequestUri.DnsSafeHost;

                var isSslSession = request.RequestUri.ToString().StartsWith("https://");

                request.RequestUri =
                    new Uri(
                        $"{(isSslSession ? "https://" : "http://")}{(await DnsResolver.Lookup(host))[0]}{request.RequestUri.PathAndQuery}");
                request.Headers.Host = host;
            }

            HttpResponseMessage result;

            try
            {
                result = await base.SendAsync(request, cancellationToken);
            }
            catch (HttpRequestException e)
            {
                if (e.InnerException != null && e.InnerException.Message.ToLower().Contains("winhttp"))
                {
                    return(new HttpResponseMessage(HttpStatusCode.OK));
                }
                throw;
            }

            if (result.StatusCode == HttpStatusCode.BadRequest &&
                (await result.Content.ReadAsStringAsync()).Contains("OAuth"))
            {
                using var semaphore = new SemaphoreSlim(1);
                await semaphore.WaitAsync(cancellationToken);

                await Authentication.AppApiAuthenticate(Session.Current.Account, Session.Current.Password);

                var token = request.Headers.Authorization;
                if (token != null)
                {
                    request.Headers.Authorization =
                        new AuthenticationHeaderValue(token.Scheme, Session.Current.AccessToken);
                }

                return(await base.SendAsync(request, cancellationToken));
            }

            return(result);
        }