Files
VDownload/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Authentication/TwitchAuthenticationService.cs
Mateusz Skoczek e3ec5c3a48 twitch vod downloading done
ffmpeg essentials

fix

Project reorganized

git lfs

ffmpeg removed

ffmpeg added
2024-02-22 02:25:13 +01:00

114 lines
3.3 KiB
C#

using Newtonsoft.Json;
using VDownload.Services.Data.Authentication;
using VDownload.Services.Data.Configuration;
using VDownload.Services.Utility.Encryption;
using VDownload.Sources.Twitch.Api;
using VDownload.Sources.Twitch.Authentication.Models;
namespace VDownload.Sources.Twitch.Authentication
{
public interface ITwitchAuthenticationService
{
Task DeleteToken();
Task<byte[]?> GetToken();
Task SetToken(byte[] token);
Task<TwitchValidationResult> ValidateToken(byte[] token);
}
public class TwitchAuthenticationService : ITwitchAuthenticationService
{
#region SERVICES
protected readonly IConfigurationService _configurationService;
protected readonly ITwitchApiService _apiService;
protected readonly IAuthenticationDataService _authenticationDataService;
protected readonly IEncryptionService _encryptionService;
#endregion
#region CONSTRUCTORS
public TwitchAuthenticationService(IConfigurationService configurationService, ITwitchApiService apiService, IAuthenticationDataService authenticationDataService, IEncryptionService encryptionService)
{
_configurationService = configurationService;
_apiService = apiService;
_authenticationDataService = authenticationDataService;
_encryptionService = encryptionService;
}
#endregion
#region PUBLIC METHODS
public async Task<byte[]?> GetToken()
{
await _authenticationDataService.Load();
byte[]? tokenEncrypted = _authenticationDataService.Data.Twitch.Token;
if (tokenEncrypted is not null && tokenEncrypted.Length == 0)
{
tokenEncrypted = null;
}
if (tokenEncrypted is not null)
{
tokenEncrypted = _encryptionService.Decrypt(tokenEncrypted);
}
return tokenEncrypted;
}
public async Task SetToken(byte[] token)
{
Task loadTask = _authenticationDataService.Load();
byte[] tokenEncrypted = _encryptionService.Encrypt(token);
await loadTask;
_authenticationDataService.Data.Twitch.Token = tokenEncrypted;
await _authenticationDataService.Save();
}
public async Task DeleteToken()
{
await _authenticationDataService.Load();
_authenticationDataService.Data.Twitch.Token = null;
await _authenticationDataService.Save();
}
public async Task<TwitchValidationResult> ValidateToken(byte[] token)
{
string response = await _apiService.AuthValidate(token);
try
{
ValidateResponseSuccess success = JsonConvert.DeserializeObject<ValidateResponseSuccess>(response);
return new TwitchValidationResult(success);
}
catch (JsonSerializationException)
{ }
try
{
ValidateResponseFail fail = JsonConvert.DeserializeObject<ValidateResponseFail>(response);
return new TwitchValidationResult(fail);
}
catch (JsonSerializationException)
{ }
throw new Exception(response);
}
#endregion
}
}