injecting spotify app credentials, closes #7
This commit is contained in:
parent
3564ce7d6d
commit
bfb2a5d2cd
@ -37,7 +37,15 @@ namespace Selector.CLI
|
|||||||
OptionsHelper.ConfigureOptions(options, context.Configuration);
|
OptionsHelper.ConfigureOptions(options, context.Configuration);
|
||||||
});
|
});
|
||||||
|
|
||||||
return OptionsHelper.ConfigureOptions(context.Configuration);
|
var config = OptionsHelper.ConfigureOptions(context.Configuration);
|
||||||
|
|
||||||
|
services.Configure<SpotifyAppCredentials>(options =>
|
||||||
|
{
|
||||||
|
options.ClientId = config.ClientId;
|
||||||
|
options.ClientSecret = config.ClientSecret;
|
||||||
|
});
|
||||||
|
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ConfigureLastFm(RootOptions config, IServiceCollection services)
|
public static void ConfigureLastFm(RootOptions config, IServiceCollection services)
|
||||||
|
@ -52,8 +52,6 @@ namespace Selector.CLI
|
|||||||
LastAuth = lastAuth;
|
LastAuth = lastAuth;
|
||||||
Cache = cache;
|
Cache = cache;
|
||||||
Subscriber = subscriber;
|
Subscriber = subscriber;
|
||||||
|
|
||||||
SpotifyFactory.Initialise(Config.ClientId, Config.ClientSecret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task StartAsync(CancellationToken cancellationToken)
|
public async Task StartAsync(CancellationToken cancellationToken)
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using Xunit;
|
|
||||||
using Moq;
|
|
||||||
using FluentAssertions;
|
|
||||||
using SpotifyAPI.Web;
|
|
||||||
|
|
||||||
using Selector;
|
|
||||||
|
|
||||||
namespace Selector.Tests
|
|
||||||
{
|
|
||||||
public class RefreshTokenFactoryProviderTests
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void Init()
|
|
||||||
{
|
|
||||||
var provider = new RefreshTokenFactoryProvider();
|
|
||||||
|
|
||||||
provider.Initialised.Should().BeFalse();
|
|
||||||
|
|
||||||
provider.Initialise("a", "b");
|
|
||||||
|
|
||||||
provider.Initialised.Should().BeTrue();
|
|
||||||
|
|
||||||
provider.Initialise("a", "");
|
|
||||||
|
|
||||||
provider.Initialised.Should().BeFalse();
|
|
||||||
|
|
||||||
provider.Initialise(null, "b");
|
|
||||||
|
|
||||||
provider.Initialised.Should().BeFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void Get()
|
|
||||||
{
|
|
||||||
var provider = new RefreshTokenFactoryProvider();
|
|
||||||
|
|
||||||
provider.Initialise("a", "b");
|
|
||||||
|
|
||||||
var consumer = provider.GetFactory("a");
|
|
||||||
|
|
||||||
consumer.Should().NotBeNull();
|
|
||||||
consumer.Result.Should().NotBeNull();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
|
|
||||||
namespace Selector.Web.Service {
|
|
||||||
public class SpotifyInitialiser : IHostedService
|
|
||||||
{
|
|
||||||
private readonly ILogger<SpotifyInitialiser> Logger;
|
|
||||||
private readonly IRefreshTokenFactoryProvider FactoryProvider;
|
|
||||||
private readonly RootOptions Config;
|
|
||||||
|
|
||||||
public SpotifyInitialiser(
|
|
||||||
ILogger<SpotifyInitialiser> logger,
|
|
||||||
IRefreshTokenFactoryProvider factoryProvider,
|
|
||||||
IOptions<RootOptions> config
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Logger = logger;
|
|
||||||
FactoryProvider = factoryProvider;
|
|
||||||
Config = config.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
Logger.LogInformation("Initialising Spotify Factory");
|
|
||||||
|
|
||||||
if(string.IsNullOrEmpty(Config.ClientId) || string.IsNullOrEmpty(Config.ClientSecret))
|
|
||||||
{
|
|
||||||
Logger.LogError("Unable to initialise Spotify factory, null client id or secret");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FactoryProvider.Initialise(Config.ClientId, Config.ClientSecret);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StopAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -41,6 +41,12 @@ namespace Selector.Web
|
|||||||
});
|
});
|
||||||
var config = OptionsHelper.ConfigureOptions(Configuration);
|
var config = OptionsHelper.ConfigureOptions(Configuration);
|
||||||
|
|
||||||
|
services.Configure<SpotifyAppCredentials>(options =>
|
||||||
|
{
|
||||||
|
options.ClientId = config.ClientId;
|
||||||
|
options.ClientSecret = config.ClientSecret;
|
||||||
|
});
|
||||||
|
|
||||||
services.AddRazorPages().AddRazorRuntimeCompilation();
|
services.AddRazorPages().AddRazorRuntimeCompilation();
|
||||||
services.AddControllers();
|
services.AddControllers();
|
||||||
services.AddSignalR(o => o.EnableDetailedErrors = true);
|
services.AddSignalR(o => o.EnableDetailedErrors = true);
|
||||||
@ -117,7 +123,6 @@ namespace Selector.Web
|
|||||||
services.AddTransient<ISubscriber>(services => services.GetService<ConnectionMultiplexer>().GetSubscriber());
|
services.AddTransient<ISubscriber>(services => services.GetService<ConnectionMultiplexer>().GetSubscriber());
|
||||||
}
|
}
|
||||||
|
|
||||||
services.AddHostedService<SpotifyInitialiser>();
|
|
||||||
services.AddSingleton<IRefreshTokenFactoryProvider, CachingRefreshTokenFactoryProvider>();
|
services.AddSingleton<IRefreshTokenFactoryProvider, CachingRefreshTokenFactoryProvider>();
|
||||||
services.AddSingleton<AudioFeaturePuller>();
|
services.AddSingleton<AudioFeaturePuller>();
|
||||||
|
|
||||||
|
14
Selector/Spotify/Credentials.cs
Normal file
14
Selector/Spotify/Credentials.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
namespace Selector {
|
||||||
|
public class SpotifyAppCredentials {
|
||||||
|
public string ClientId { get; set; }
|
||||||
|
public string ClientSecret { get; set; }
|
||||||
|
|
||||||
|
public SpotifyAppCredentials() { }
|
||||||
|
|
||||||
|
public SpotifyAppCredentials(string clientId, string clientSecret)
|
||||||
|
{
|
||||||
|
ClientId = clientId;
|
||||||
|
ClientSecret = clientSecret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
using SpotifyAPI.Web;
|
using SpotifyAPI.Web;
|
||||||
|
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ namespace Selector
|
|||||||
{
|
{
|
||||||
protected readonly ILogger<CachingRefreshTokenFactoryProvider> Logger;
|
protected readonly ILogger<CachingRefreshTokenFactoryProvider> Logger;
|
||||||
|
|
||||||
public CachingRefreshTokenFactoryProvider(ILogger<CachingRefreshTokenFactoryProvider> logger)
|
public CachingRefreshTokenFactoryProvider(IOptions<SpotifyAppCredentials> credentials, ILogger<CachingRefreshTokenFactoryProvider> logger) : base(credentials)
|
||||||
{
|
{
|
||||||
Logger = logger;
|
Logger = logger;
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ namespace Selector
|
|||||||
{
|
{
|
||||||
public interface IRefreshTokenFactoryProvider
|
public interface IRefreshTokenFactoryProvider
|
||||||
{
|
{
|
||||||
public void Initialise(string clientId, string clientSecret);
|
|
||||||
public bool Initialised { get; }
|
|
||||||
public Task<RefreshTokenFactory> GetFactory(string refreshToken);
|
public Task<RefreshTokenFactory> GetFactory(string refreshToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
using SpotifyAPI.Web;
|
using SpotifyAPI.Web;
|
||||||
|
|
||||||
|
|
||||||
@ -12,22 +13,18 @@ namespace Selector
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class RefreshTokenFactoryProvider : IRefreshTokenFactoryProvider
|
public class RefreshTokenFactoryProvider : IRefreshTokenFactoryProvider
|
||||||
{
|
{
|
||||||
protected string ClientId { get; set; }
|
protected readonly SpotifyAppCredentials Credentials;
|
||||||
protected string ClientSecret { get; set; }
|
|
||||||
|
|
||||||
public void Initialise(string clientId, string clientSecret){
|
public RefreshTokenFactoryProvider(IOptions<SpotifyAppCredentials> credentials)
|
||||||
ClientId = clientId;
|
{
|
||||||
ClientSecret = clientSecret;
|
Credentials = credentials.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Initialised => !string.IsNullOrWhiteSpace(ClientId) && !string.IsNullOrWhiteSpace(ClientSecret);
|
|
||||||
|
|
||||||
public virtual Task<RefreshTokenFactory> GetFactory(string refreshToken)
|
public virtual Task<RefreshTokenFactory> GetFactory(string refreshToken)
|
||||||
{
|
{
|
||||||
if(!Initialised) throw new InvalidOperationException("Factory not initialised");
|
|
||||||
if(string.IsNullOrEmpty(refreshToken)) throw new ArgumentException("Null or empty refresh key provided");
|
if(string.IsNullOrEmpty(refreshToken)) throw new ArgumentException("Null or empty refresh key provided");
|
||||||
|
|
||||||
return Task.FromResult(new RefreshTokenFactory(ClientId, ClientSecret, refreshToken));
|
return Task.FromResult(new RefreshTokenFactory(Credentials.ClientId, Credentials.ClientSecret, refreshToken));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user