Prevent two accounts from behing linked to the same external account

This commit is contained in:
Zoe Roux 2024-03-10 15:23:17 +01:00
parent 25b7903c37
commit 08f3e9c06b
3 changed files with 6 additions and 3 deletions

View File

@ -112,9 +112,12 @@ public class OidcController(
return user;
}
public async Task<User> LinkAccount(Guid userId, string provider, string code)
public async Task<User> LinkAccountOrLogin(Guid userId, string provider, string code)
{
(_, ExternalToken extToken) = await _TranslateCode(provider, code);
User? user = await users.GetByExternalId(provider, extToken.Id);
if (user != null)
return user;
return await users.AddExternalToken(userId, provider, extToken);
}
}

View File

@ -173,7 +173,7 @@ namespace Kyoo.Authentication.Views
Guid? userId = User.GetId();
User user = userId.HasValue
? await oidc.LinkAccount(userId.Value, provider, code)
? await oidc.LinkAccountOrLogin(userId.Value, provider, code)
: await oidc.LoginViaCode(provider, code);
return new JwtToken(
tokenController.CreateAccessToken(user, out TimeSpan expireIn),

View File

@ -59,7 +59,7 @@ namespace Kyoo.Tests.Database
SeasonRepository season = new(_NewContext(), thumbs.Object);
LibraryItemRepository libraryItem = new(_NewConnection(), new(null));
EpisodeRepository episode = new(_NewContext(), show, thumbs.Object);
UserRepository user = new(_NewContext(), _NewConnection(), new(null), thumbs.Object);
UserRepository user = new(_NewContext(), _NewConnection(), new(null), thumbs.Object, new());
_repositories = new IBaseRepository[]
{