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

Commit 600faeb

Browse files
Merge pull request #298 from github-for-unity/fixes/kepp-auth-if-user-does-not-match
Keeping the authentication if the username doesn't match in the keychain
2 parents 06cdff2 + 0076abb commit 600faeb

File tree

2 files changed

+7
-81
lines changed

2 files changed

+7
-81
lines changed

src/GitHub.Api/Authentication/Keychain.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,15 @@ public async Task<IKeychainAdapter> Load(UriString host)
6464
logger.Warning("Cannot load host from Credential Manager; removing from cache");
6565
await Clear(host, false);
6666
}
67-
else if (keychainItem.Username != cachedConnection.Username)
68-
{
69-
logger.Warning("Item loaded from credential manager does not match connection cache ; removing from cache");
70-
await Clear(host, false);
71-
}
7267
else
7368
{
74-
logger.Trace($@"Loaded from Credential Manager Host:""{keychainItem.Host}"" Username:""{keychainItem.Username}""");
69+
if (keychainItem.Username != cachedConnection.Username)
70+
{
71+
logger.Warning("Keychain Username: {0} does not match; Hopefully it works", keychainItem.Username);
72+
}
73+
74+
logger.Trace("Loaded from Credential Manager Host:\"{0}\" Username:\"{1}\"", keychainItem.Host, keychainItem.Username);
75+
7576
keychainAdapter.Set(keychainItem);
7677
}
7778

src/tests/UnitTests/Authentication/KeychainTests.cs

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -247,81 +247,6 @@ public void ShouldDeleteFromCacheWhenLoadReturnsNullFromConnectionManager()
247247
credentialManager.DidNotReceive().Save(Arg.Any<ICredential>());
248248
}
249249

250-
[Test]
251-
public void ShouldDeleteFromCacheWhenLoadReturnsNullFromConnectionManagerDueToUserMismatch()
252-
{
253-
const string connectionsCachePath = @"c:\UserCachePath\";
254-
const string connectionsCacheFile = @"c:\UserCachePath\connections.json";
255-
256-
const string cachedUsername = "SomeCachedUser";
257-
const string credentialedUsername = "SomeCredentialedUser";
258-
259-
const string token = "SomeToken";
260-
261-
var hostUri = new UriString("https://github.com/");
262-
263-
var fileSystem = SubstituteFactory.CreateFileSystem(new CreateFileSystemOptions
264-
{
265-
FilesThatExist = new List<string> { connectionsCacheFile },
266-
FileContents = new Dictionary<string, IList<string>> {
267-
{connectionsCacheFile, new List<string> {$@"[{{""Host"":""https://github.com/"",""Username"":""{cachedUsername}""}}]"
268-
}}
269-
}
270-
});
271-
272-
NPath.FileSystem = fileSystem;
273-
274-
var environment = SubstituteFactory.CreateEnvironment();
275-
environment.UserCachePath.Returns(info => connectionsCachePath.ToNPath());
276-
environment.FileSystem.Returns(fileSystem);
277-
278-
var credentialManager = Substitute.For<ICredentialManager>();
279-
credentialManager.Load(hostUri).Returns(info =>
280-
{
281-
var credential = Substitute.For<ICredential>();
282-
credential.Username.Returns(credentialedUsername);
283-
credential.Token.Returns(token);
284-
credential.Host.Returns(hostUri);
285-
return TaskEx.FromResult(credential);
286-
});
287-
288-
var keychain = new Keychain(environment, credentialManager);
289-
keychain.Initialize();
290-
291-
fileSystem.Received(1).FileExists(connectionsCacheFile);
292-
fileSystem.DidNotReceive().FileDelete(Args.String);
293-
fileSystem.Received(1).ReadAllText(connectionsCacheFile);
294-
fileSystem.DidNotReceive().ReadAllLines(Args.String);
295-
fileSystem.DidNotReceive().WriteAllText(Args.String, Args.String);
296-
fileSystem.DidNotReceive().WriteAllLines(Args.String, Arg.Any<string[]>());
297-
298-
credentialManager.DidNotReceive().Load(Args.UriString);
299-
credentialManager.DidNotReceive().HasCredentials();
300-
credentialManager.DidNotReceive().Delete(Args.UriString);
301-
credentialManager.DidNotReceive().Save(Arg.Any<ICredential>());
302-
303-
fileSystem.ClearReceivedCalls();
304-
305-
var uriString = keychain.Hosts.FirstOrDefault();
306-
var keychainAdapter = keychain.Load(uriString).Result;
307-
keychainAdapter.Credential.Should().BeNull();
308-
309-
keychainAdapter.OctokitCredentials.AuthenticationType.Should().Be(AuthenticationType.Anonymous);
310-
keychainAdapter.OctokitCredentials.Login.Should().BeNull();
311-
keychainAdapter.OctokitCredentials.Password.Should().BeNull();
312-
313-
fileSystem.DidNotReceive().FileExists(Args.String);
314-
fileSystem.DidNotReceive().ReadAllText(Args.String);
315-
fileSystem.DidNotReceive().FileDelete(Args.String);
316-
fileSystem.Received(1).WriteAllText(connectionsCacheFile, "[]");
317-
fileSystem.DidNotReceive().WriteAllLines(Args.String, Arg.Any<string[]>());
318-
319-
credentialManager.Received(1).Load(hostUri);
320-
credentialManager.DidNotReceive().HasCredentials();
321-
credentialManager.DidNotReceive().Delete(Args.UriString);
322-
credentialManager.DidNotReceive().Save(Arg.Any<ICredential>());
323-
}
324-
325250
[Test]
326251
public void ShouldConnectSetCredentialsTokenAndSave()
327252
{

0 commit comments

Comments
 (0)