Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 05c2cd3

Browse files
Trying to load keychain; trying to handle scenario where item is in the cache but not in the credentialManager
1 parent b9a3733 commit 05c2cd3

File tree

4 files changed

+49
-5
lines changed

4 files changed

+49
-5
lines changed

src/GitHub.Api/ApplicationManagerBase.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
2+
using System.Linq;
23
using System.Threading;
34
using System.Threading.Tasks;
5+
using Octokit;
46

57
namespace GitHub.Unity
68
{
@@ -42,8 +44,29 @@ protected void Initialize()
4244

4345
public virtual ITask Run()
4446
{
47+
Logger.Trace("Run");
48+
4549
var progress = new ProgressReport();
46-
return new ActionTask(SetupAndRestart(progress));
50+
return new ActionTask(SetupAndRestart(progress))
51+
.Then(new ActionTask(LoadKeychain()));
52+
}
53+
54+
private async Task LoadKeychain()
55+
{
56+
Logger.Trace("Loading Keychain");
57+
58+
var firstConnection = Platform.Keychain.Connections.FirstOrDefault();
59+
if (firstConnection == null)
60+
{
61+
Logger.Trace("No Host Found");
62+
}
63+
else
64+
{
65+
Logger.Trace("Loading Connection to Host:\"{0}\"", firstConnection);
66+
var keychainAdapter = await Platform.Keychain.Load(firstConnection).SafeAwait();
67+
if (keychainAdapter.OctokitCredentials == Credentials.Anonymous)
68+
{ }
69+
}
4770
}
4871

4972
protected abstract string DetermineInstallationPath();
@@ -84,6 +107,8 @@ public virtual ITask RestartRepository()
84107

85108
private async Task SetupAndRestart(ProgressReport progress)
86109
{
110+
Logger.Trace("SetupAndRestart");
111+
87112
var gitSetup = new GitSetup(Environment, CancellationToken);
88113
var expectedPath = gitSetup.GitInstallationPath;
89114
var setupDone = await gitSetup.SetupIfNeeded(progress.Percentage, progress.Remaining);

src/GitHub.Api/Authentication/IKeychain.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Threading.Tasks;
1+
using System.Collections.Generic;
2+
using System.Threading.Tasks;
23

34
namespace GitHub.Unity
45
{
@@ -12,6 +13,7 @@ interface IKeychain
1213
void UpdateToken(UriString host, string token);
1314
void Save(ICredential credential);
1415
void Initialize();
16+
IList<UriString> Connections { get; }
1517
bool HasKeys { get; }
1618
}
1719
}

src/GitHub.Api/Authentication/Keychain.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,23 @@ public KeychainAdapter Connect(UriString host)
5555

5656
public async Task<KeychainAdapter> Load(UriString host)
5757
{
58-
logger.Trace("Load Host:{0}", host);
58+
logger.Trace("Load KeychainAdapter Host:\"{0}\"", host);
5959

6060
var keychainAdapter = FindOrCreateAdapter(host);
6161

62+
var keychainAdapterCredential = keychainAdapter.Credential;
63+
if (keychainAdapterCredential == null)
64+
{
65+
throw new NullReferenceException($"{nameof(keychainAdapterCredential)} is null");
66+
}
67+
68+
logger.Trace("Load KeychainAdapter Host:\"{0}\" Username:\"{1}\"", keychainAdapterCredential.Host ?? "NULL",
69+
keychainAdapterCredential.Username ?? "NULL");
70+
6271
var keychainItem = await credentialManager.Load(host);
72+
73+
logger.Trace("Loading KeychainItem:{0}", keychainItem?.ToString() ?? "NULL");
74+
6375
keychainAdapter.Set(keychainItem);
6476

6577
return keychainAdapter;
@@ -207,6 +219,8 @@ public void UpdateToken(UriString host, string token)
207219
keychainItem.UpdateToken(token);
208220
}
209221

222+
public IList<UriString> Connections => connectionCache.Keys.ToArray();
223+
210224
public bool HasKeys => connectionCache.Any();
211225
}
212226
}

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,15 +222,18 @@ private void GoToProfile(object obj)
222222
}
223223
private void SignOut(object obj)
224224
{
225-
var task = new ActionTask(Platform.CredentialManager.Delete(Platform.CredentialManager.CachedCredentials.Host))
225+
var credentialManager = Platform.CredentialManager;
226+
var cachedCredentialsHost = credentialManager.CachedCredentials.Host;
227+
228+
new ActionTask(credentialManager.Delete(cachedCredentialsHost))
226229
.Then(s =>
227230
{
228231
if (s)
229232
{
230233
Platform.Keychain.Clear(Repository.CloneUrl.ToRepositoryUrl());
231234
Platform.Keychain.Flush(Repository.CloneUrl.ToRepositoryUrl());
232235
}
233-
});
236+
}).Start();
234237
}
235238

236239
private bool ValidateSettings()

0 commit comments

Comments
 (0)