|
8 | 8 | using Microsoft.Extensions.Logging;
|
9 | 9 | using System.Net.Http;
|
10 | 10 | using System.Net.Http.Json;
|
| 11 | +using System.Net.Sockets; |
11 | 12 | using System.Text.Json;
|
12 | 13 | using System.Text.RegularExpressions;
|
13 | 14 |
|
@@ -582,50 +583,58 @@ public static async Task RequireGitAuthenticationAsync()
|
582 | 583 |
|
583 | 584 | while (!loginCTS.Token.IsCancellationRequested && pending && expiresIn > 0)
|
584 | 585 | {
|
585 |
| - var loginResponse = await client.PostAsync( |
| 586 | + try |
| 587 | + { |
| 588 | + var loginResponse = await client.PostAsync( |
586 | 589 | $"https://github.com/login/oauth/access_token?client_id={_clientId}&device_code={deviceCode}&grant_type=urn:ietf:params:oauth:grant-type:device_code",
|
587 | 590 | new StringContent(""));
|
588 | 591 |
|
589 |
| - expiresIn -= interval; |
590 |
| - |
591 |
| - if (!loginResponse.IsSuccessStatusCode) |
592 |
| - { |
593 |
| - dialog.Hide(); |
594 |
| - break; |
595 |
| - } |
| 592 | + expiresIn -= interval; |
596 | 593 |
|
597 |
| - var loginJsonContent = await loginResponse.Content.ReadFromJsonAsync<JsonDocument>(); |
598 |
| - if (loginJsonContent is null) |
599 |
| - { |
600 |
| - dialog.Hide(); |
601 |
| - break; |
602 |
| - } |
| 594 | + if (!loginResponse.IsSuccessStatusCode) |
| 595 | + { |
| 596 | + dialog.Hide(); |
| 597 | + break; |
| 598 | + } |
603 | 599 |
|
604 |
| - if (loginJsonContent.RootElement.TryGetProperty("error", out var error)) |
605 |
| - { |
606 |
| - if (error.GetString() == "authorization_pending") |
| 600 | + var loginJsonContent = await loginResponse.Content.ReadFromJsonAsync<JsonDocument>(); |
| 601 | + if (loginJsonContent is null) |
607 | 602 | {
|
608 |
| - await Task.Delay(TimeSpan.FromSeconds(interval)); |
609 |
| - continue; |
| 603 | + dialog.Hide(); |
| 604 | + break; |
610 | 605 | }
|
611 | 606 |
|
612 |
| - dialog.Hide(); |
613 |
| - break; |
614 |
| - } |
| 607 | + if (loginJsonContent.RootElement.TryGetProperty("error", out var error)) |
| 608 | + { |
| 609 | + if (error.GetString() == "authorization_pending") |
| 610 | + { |
| 611 | + await Task.Delay(TimeSpan.FromSeconds(interval)); |
| 612 | + continue; |
| 613 | + } |
615 | 614 |
|
616 |
| - var token = loginJsonContent.RootElement.GetProperty("access_token").GetString(); |
617 |
| - if (token is null) |
618 |
| - continue; |
| 615 | + dialog.Hide(); |
| 616 | + break; |
| 617 | + } |
619 | 618 |
|
620 |
| - pending = false; |
| 619 | + var token = loginJsonContent.RootElement.GetProperty("access_token").GetString(); |
| 620 | + if (token is null) |
| 621 | + continue; |
| 622 | + |
| 623 | + pending = false; |
621 | 624 |
|
622 |
| - CredentialsHelpers.SavePassword( |
623 |
| - GIT_RESOURCE_NAME, |
624 |
| - GIT_RESOURCE_USERNAME, |
625 |
| - token); |
| 625 | + CredentialsHelpers.SavePassword( |
| 626 | + GIT_RESOURCE_NAME, |
| 627 | + GIT_RESOURCE_USERNAME, |
| 628 | + token); |
626 | 629 |
|
627 |
| - viewModel.Subtitle = "AuthorizationSucceded".GetLocalizedResource(); |
628 |
| - viewModel.LoginConfirmed = true; |
| 630 | + viewModel.Subtitle = "AuthorizationSucceded".GetLocalizedResource(); |
| 631 | + viewModel.LoginConfirmed = true; |
| 632 | + } |
| 633 | + catch (SocketException ex) |
| 634 | + { |
| 635 | + _logger.LogWarning(ex.Message); |
| 636 | + return; |
| 637 | + } |
629 | 638 | }
|
630 | 639 |
|
631 | 640 | await loginDialogTask;
|
|
0 commit comments