Skip to content

Commit

Permalink
feat: 加入更新客户端和命令行启动参数
Browse files Browse the repository at this point in the history
  • Loading branch information
nidbCN committed Jun 7, 2024
1 parent 1bc9d73 commit aeb8120
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 4 deletions.
3 changes: 2 additions & 1 deletion AliCdnSSLWorker.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<UserSecretsId>dotnet-AliCdnSSLWorker-69cd49e9-faf0-424c-980f-751b97c9a16a</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>.</DockerfileContext>
<AssemblyVersion>6.0.1.1</AssemblyVersion>
<AssemblyVersion>6.0.2.1</AssemblyVersion>
<FileVersion>6.0.1.1</FileVersion>
</PropertyGroup>

Expand All @@ -16,6 +16,7 @@
<PackageReference Include="Aliyun.Credentials" Version="1.3.3" />
<PackageReference Include="Macross.Json.Extensions" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
</ItemGroup>
</Project>
31 changes: 31 additions & 0 deletions Clients/RefreshRequestClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System.Net;
using AliCdnSSLWorker.Configs;
using Microsoft.Extensions.Options;

namespace AliCdnSSLWorker.Clients;
public class RefreshRequestClient
{
public HttpClient Client { get; }

public RefreshRequestClient(HttpClient httpClient, IOptions<ApiConfig> options)
{
var ip = options.Value.IpAddress.ToString();
if (options.Value.IpAddress.Equals(IPAddress.Any))
{
ip = IPAddress.Loopback.ToString();
}

httpClient.BaseAddress = new($"http://{ip}:{options.Value.Port}/");
httpClient.DefaultRequestHeaders.Add(
"User-Agent",
$"AliCdnSSLWorker/{GetType().Assembly.GetName().Version}"
);

Client = httpClient;
}

public async Task<HttpResponseMessage> RequestAsync()
{
return await Client.GetAsync("/force_refresh/");
}
}
29 changes: 29 additions & 0 deletions Program.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using AliCdnSSLWorker.Clients;
using AliCdnSSLWorker.Configs;
using AliCdnSSLWorker.Services;
using AliCdnSSLWorker.Workers;
Expand All @@ -10,11 +11,39 @@
builder.Services.Configure<CertConfig>(
builder.Configuration.GetSection(nameof(CertConfig))
);
builder.Services.Configure<ApiConfig>(
builder.Configuration.GetSection(nameof(ApiConfig))
);

builder.Services.AddHttpClient<RefreshRequestClient>();
builder.Services.AddSingleton<RefreshRequestService>();
builder.Services.AddSingleton<AliCdnService>();
builder.Services.AddSingleton<CertScanService>();

builder.Services.AddHostedService<SSLWorker>();
builder.Services.AddHostedService<ApiWorker>();

var host = builder.Build();

if (args.Length > 0)
{
var logger = host.Services.GetRequiredService<ILogger<Program>>();

if (args[0] == "-r" || args[0] == "--refresh")
{
logger.LogWarning("Quick update mode. `-r` will request a refresh to running worker.");

var requestService = host.Services.GetRequiredService<RefreshRequestService>();
await requestService.Update();

logger.LogInformation("Request force refresh success.");
}
else
{
logger.LogInformation("Usage: AliCdnSSLWorker [options]\n"
+ "\t --refresh, -r \tRequest a refresh to running worker."
+ "Notes: other arguments will pass to .NET Host.");
}
}

host.Run();
6 changes: 3 additions & 3 deletions Services/AliCdnService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@
using AliCdnSSLWorker.Configs;
using Tea;
using AliCdnSSLWorker.Models;
using Aliyun.Credentials;

namespace AliCdnSSLWorker.Services;

public class AliCdnService
{
private readonly ILogger<AliCdnService> _logger;
private readonly AlibabaCloud.SDK.Cdn20180510.Client _apiClient;
private readonly Aliyun.Credentials.Client _credentialClient;
private readonly RuntimeOptions _runtimeOptions = new();

public AliCdnService(ILogger<AliCdnService> logger, IOptions<AliCdnConfig> options)
{
ArgumentNullException.ThrowIfNull(options);

_credentialClient = new(new()
Client credentialClient = new(new()
{
AccessKeyId = options.Value.AccessKeyId,
AccessKeySecret = options.Value.AccessKeySecret,
Expand All @@ -28,7 +28,7 @@ public AliCdnService(ILogger<AliCdnService> logger, IOptions<AliCdnConfig> optio
_apiClient = new(new()
{
Endpoint = options.Value.Endpoint,
Credential = _credentialClient,
Credential = credentialClient,
});

_logger = logger;
Expand Down
11 changes: 11 additions & 0 deletions Services/RefreshRequestService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using AliCdnSSLWorker.Clients;

namespace AliCdnSSLWorker.Services;

public class RefreshRequestService(RefreshRequestClient client)
{
public async Task Update()
=> (await client.RequestAsync())
.EnsureSuccessStatusCode();

}

0 comments on commit aeb8120

Please sign in to comment.