Force users to authenticate in Playnite plugin. More graceful handling of validating connections.

This commit is contained in:
Pat Hartl 2023-03-17 02:07:25 -05:00
parent 55ab125c80
commit b7f4141175
3 changed files with 18 additions and 17 deletions

View file

@ -35,6 +35,11 @@ namespace LANCommander.PlaynitePlugin
public override void Install(InstallActionArgs args) public override void Install(InstallActionArgs args)
{ {
while (!Plugin.ValidateConnection())
{
Plugin.ShowAuthenticationWindow();
}
var gameId = Guid.Parse(Game.GameId); var gameId = Guid.Parse(Game.GameId);
var game = Plugin.LANCommander.GetGame(gameId); var game = Plugin.LANCommander.GetGame(gameId);

View file

@ -131,9 +131,15 @@ namespace LANCommander.PlaynitePlugin
public bool ValidateToken(AuthToken token) public bool ValidateToken(AuthToken token)
{ {
if (token == null)
return false;
var request = new RestRequest("/api/Auth/Validate") var request = new RestRequest("/api/Auth/Validate")
.AddHeader("Authorization", $"Bearer {token.AccessToken}"); .AddHeader("Authorization", $"Bearer {token.AccessToken}");
if (String.IsNullOrEmpty(token.AccessToken) || String.IsNullOrEmpty(token.RefreshToken))
return false;
var response = Client.Post(request); var response = Client.Post(request);
return response.StatusCode == HttpStatusCode.OK; return response.StatusCode == HttpStatusCode.OK;

View file

@ -61,28 +61,18 @@ namespace LANCommander.PlaynitePlugin
} }
} }
public bool ValidateConnection()
{
return LANCommander.ValidateToken(LANCommander.Token);
}
public override IEnumerable<GameMetadata> GetGames(LibraryGetGamesArgs args) public override IEnumerable<GameMetadata> GetGames(LibraryGetGamesArgs args)
{ {
var gameMetadata = new List<GameMetadata>(); var gameMetadata = new List<GameMetadata>();
if (LANCommander.Token == null || !LANCommander.ValidateToken(LANCommander.Token)) while (!ValidateConnection())
{ {
try ShowAuthenticationWindow();
{
var response = LANCommander.RefreshToken(LANCommander.Token);
LANCommander.Token.AccessToken = response.AccessToken;
LANCommander.Token.RefreshToken = response.RefreshToken;
if (!LANCommander.ValidateToken(LANCommander.Token))
{
throw new Exception();
}
}
catch
{
ShowAuthenticationWindow();
}
} }
try try