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; 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); (_, 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); return await users.AddExternalToken(userId, provider, extToken);
} }
} }

View File

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

View File

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