-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFileBaseProxyConfigProvider.cs
More file actions
77 lines (58 loc) · 2.41 KB
/
FileBaseProxyConfigProvider.cs
File metadata and controls
77 lines (58 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System.Diagnostics.CodeAnalysis;
using AppServiceProxy.Configuration.Yarp;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
using Yarp.ReverseProxy.Configuration;
namespace AppServiceProxy.Configuration;
internal class FileBaseProxyConfigProvider : IProxyConfigProvider
{
public FileBaseProxyConfigProvider(IEnumerable<IConfigFileLoader> configFileLoaders)
{
_configFileLoaders = configFileLoaders;
var json = System.Text.Json.JsonSerializer.Deserialize<YarpJson>(File.ReadAllText(@"C:\Users\shibayan\Documents\yarp.json"));
_fileProvider = new PhysicalFileProvider(s_wwwroot)
{
UseActivePolling = true,
UsePollingFileWatcher = true
};
}
private readonly IEnumerable<IConfigFileLoader> _configFileLoaders;
private readonly PhysicalFileProvider _fileProvider;
private static readonly string s_wwwroot = Environment.ExpandEnvironmentVariables(@"%HOME%\site\wwwroot");
public IProxyConfig GetConfig()
{
if (TryGetConfigFileLoader(out var configFileLoader))
{
var contents = File.ReadAllText(Path.Combine(s_wwwroot, configFileLoader.ConfigFileName));
var (routes, clusters) = configFileLoader.LoadConfig(contents);
var changeToken = _fileProvider.Watch(configFileLoader.ConfigFileName);
return new FileBaseProxyConfig
{
Routes = routes,
Clusters = clusters,
ChangeToken = changeToken
};
}
else
{
var changeToken = _fileProvider.Watch("*.*");
return new FileBaseProxyConfig
{
Routes = Array.Empty<RouteConfig>(),
Clusters = Array.Empty<ClusterConfig>(),
ChangeToken = changeToken
};
}
}
private bool TryGetConfigFileLoader([NotNullWhen(true)] out IConfigFileLoader? configFileLoader)
{
configFileLoader = _configFileLoaders.FirstOrDefault(x => File.Exists(Path.Combine(s_wwwroot, x.ConfigFileName)));
return configFileLoader is not null;
}
private class FileBaseProxyConfig : IProxyConfig
{
public IReadOnlyList<RouteConfig> Routes { get; init; } = null!;
public IReadOnlyList<ClusterConfig> Clusters { get; init; } = null!;
public IChangeToken ChangeToken { get; init; } = null!;
}
}