Skip to content

Commit

Permalink
Add support for .NET 8
Browse files Browse the repository at this point in the history
  • Loading branch information
LeaFrock committed Nov 18, 2023
1 parent 750c716 commit 33ee80b
Show file tree
Hide file tree
Showing 16 changed files with 86 additions and 163 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
dotnet-version: 8.0.x

- name: Restore Lib
run: dotnet restore ./Src
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
[CaptchaN-DI-Microsoft-SvgUrl]: https://img.shields.io/nuget/v/CaptchaN.DI.Microsoft.svg
[CaptchaN-DI-Microsoft-NugetUrl]: https://www.nuget.org/packages/CaptchaN.DI.Microsoft

![Image Demo](https://github.com/LeaFrock/CaptchaN/blob/main/Images/name.jpeg)
![Image Demo](https://raw.githubusercontent.com/LeaFrock/CaptchaN/main/Images/name.jpeg)

Generate captcha images based on [ImageSharp][ImageSharpUrl] and .NET.
>基于[ImageSharp][ImageSharpUrl]项目和.NET,生成图形验证码。
[![.NET 6](https://img.shields.io/badge/.NET-6-brightgreen)][DotNetUrl]
[![.NET 8](https://img.shields.io/badge/.NET-8-brightgreen)][DotNetUrl]
![License](https://img.shields.io/badge/License-MIT-green)

## Packages |Nuget包
Expand Down
2 changes: 1 addition & 1 deletion Samples/CaptchaN.WebApi/CaptchaN.WebApi.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

Expand Down
33 changes: 0 additions & 33 deletions Samples/CaptchaN.WebApi/Controllers/CaptchaController.cs

This file was deleted.

35 changes: 20 additions & 15 deletions Samples/CaptchaN.WebApi/Program.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
namespace CaptchaN.WebApi
using CaptchaN.Abstractions;
using CaptchaN.Factories;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.Extensions.Options;

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<PainterOption>(builder.Configuration.GetSection("CaptchaN"));
builder.Services.AddCaptchaN()
//.UseFontRandomer(new SystemFontRandomerFactory());
.UseFontRandomer(new DirectoryFontRandomerFactory() { FontDir = new(Path.Combine(builder.Environment.ContentRootPath, "Fonts")) });

var app = builder.Build();

app.MapGet("/captcha", async Task<FileContentHttpResult> (IOptions<PainterOption> painterOpt, ICodeTextGenerator codeTextGenerator, IPainter painter) =>
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
var codeText = codeTextGenerator.Generate(4);
var image = await painter.GenerateImageAsync(codeText, painterOpt.Value);
return TypedResults.File(image, "image/jpeg; charset=UTF-8");
});

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
app.Run();
12 changes: 2 additions & 10 deletions Samples/CaptchaN.WebApi/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,12 @@
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "captcha",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"CaptchaN.WebApi": {
"commandName": "Project",
"dotnetRunMessages": "true",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "captcha",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
Expand Down
4 changes: 2 additions & 2 deletions Samples/CaptchaN.WebApi/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# CaptchaN.WebApi

Before the first running, please create a directory called `Fonts` at the same level of `Controllers`, then put your font files `*.ttf` into `Fonts`.
>在第一次运行前,请先创建一个与`Controllers`同级的文件夹,命名为`Fonts`,然后将你的`*.ttf`格式字体文件放入其中。
Before the first running, please create a directory called `Fonts` at the same level of `Program.cs`, then put your font files `*.ttf` into `Fonts`.
>在第一次运行前,请先创建一个与`Program.cs`同级的文件夹,命名为`Fonts`,然后将你的`*.ttf`格式字体文件放入其中。
50 changes: 0 additions & 50 deletions Samples/CaptchaN.WebApi/Startup.cs

This file was deleted.

22 changes: 15 additions & 7 deletions Src/CaptchaN.DI.Microsoft/CaptchaN.DI.Microsoft.csproj
Original file line number Diff line number Diff line change
@@ -1,28 +1,36 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>

<LangVersion>latest</LangVersion>
<PackageId>CaptchaN.DI.Microsoft</PackageId>
<Title>CaptchaN.DI.Microsoft</Title>
<Authors>LeaFrock</Authors>
<Version>1.1.0</Version>
<Version>3.0.0</Version>
<Product>CaptchaN.DI.Microsoft</Product>
<Description>CaptchaN DI for .NET default container.</Description>
<Copyright>Copyright © LeaFrock 2022</Copyright>
<Copyright>Copyright © LeaFrock 2023</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageTags>captcha;imagesharp</PackageTags>
<PackageProjectUrl>https://github.com/LeaFrock/CaptchaN</PackageProjectUrl>
<RepositoryUrl>https://github.com/LeaFrock/CaptchaN.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageReleaseNotes>Upgrade to ImageSharp 2.0</PackageReleaseNotes>
<PackageReleaseNotes>Add support for .NET 8</PackageReleaseNotes>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CaptchaN" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\CaptchaN\CaptchaN.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>

</Project>
7 changes: 3 additions & 4 deletions Src/CaptchaN.DI.Microsoft/PainterBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,9 @@ public PainterBuilder UseFontRandomer<T>() where T : class, IFontRandomer
public PainterBuilder UseFontRandomer(IFontRandomerFactory fontRandomerFactory)
{
var fontRandomer = fontRandomerFactory.CreateFontRandomer();
if (fontRandomer is null)
{
throw new NullReferenceException("Created FontRandomer is null.");
}

ArgumentNullException.ThrowIfNull(fontRandomer);

_services.AddSingleton(fontRandomer);
return this;
}
Expand Down
17 changes: 11 additions & 6 deletions Src/CaptchaN/CaptchaN.csproj
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>

<LangVersion>latest</LangVersion>
<PackageId>CaptchaN</PackageId>
<Title>CaptchaN</Title>
<Authors>LeaFrock</Authors>
<Version>2.0.1</Version>
<Version>3.0.0</Version>
<Product>CaptchaN</Product>
<Description>Core module of generating captcha images.</Description>
<Copyright>Copyright © LeaFrock 2022</Copyright>
<Copyright>Copyright © LeaFrock 2023</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageTags>captcha;imagesharp</PackageTags>
<PackageProjectUrl>https://github.com/LeaFrock/CaptchaN</PackageProjectUrl>
<RepositoryUrl>https://github.com/LeaFrock/CaptchaN.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageReleaseNotes>Upgrade to ImageSharp 2.1</PackageReleaseNotes>
<PackageReleaseNotes>Add support for .NET 8</PackageReleaseNotes>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta15" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.0.1" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>

</Project>
24 changes: 13 additions & 11 deletions Src/CaptchaN/CodeTextGenerator.cs
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
using CaptchaN.Abstractions;
using CaptchaN.Helpers;

namespace CaptchaN
{
public class CodeTextGenerator : ICodeTextGenerator
{
private readonly static char[] _pool = new char[]
{
//Skip '0/o/O','1/l/I','9/g/q'
'2','3','4','5','6','7','8',
'a','b','c','d','e','f','h','i','j','k','m','n','p','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z',
};
//Skip '0/o/O','1/l/I','9/g/q'
private const string _pool = "2345678"
+ "abcdefhijkmnprstuvwxyz"
+ "ABCDEFGHJKLMNPQRSTUVWXYZ";

public string Generate(int length)
{
var random = RandomHelper.CurrentRandom;
Span<char> span = length <= 10 ? stackalloc char[length] : new char[length];
var random = Random.Shared;
Span<char> span = length <= 10
? stackalloc char[length]
: new char[length]; // Will you do so?
#if NET8_0_OR_GREATER
random.GetItems(_pool, span);
#else
for (int i = 0; i < length; i++)
{
span[i] = _pool[random.Next(0, _pool.Length)];
span[i] = _pool[random.Next(_pool.Length)];
}
#endif
return new string(span);
}
}
Expand Down
15 changes: 7 additions & 8 deletions Src/CaptchaN/ColorRandomer.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
using CaptchaN.Abstractions;
using CaptchaN.Helpers;
using SixLabors.ImageSharp;

namespace CaptchaN
{
public class ColorRandomer : IColorRandomer
{
private readonly static Color[] _darkPool = new Color[]
{
private readonly static Color[] _darkPool =
[
Color.Black,
Color.MidnightBlue,
Color.MediumBlue,
Expand All @@ -19,10 +18,10 @@ public class ColorRandomer : IColorRandomer
Color.OrangeRed,
Color.Maroon,
Color.DarkViolet
};
];

private readonly static Color[] _lightPool = new Color[]
{
private readonly static Color[] _lightPool =
[
Color.White,
Color.Snow,
Color.GhostWhite,
Expand All @@ -47,15 +46,15 @@ public class ColorRandomer : IColorRandomer
Color.LightYellow,
Color.Pink,
Color.PaleGreen
};
];

public Color RandomDark() => RandomColor(_darkPool);

public Color RandomLight() => RandomColor(_lightPool);

private static Color RandomColor(Color[] pool)
{
int index = RandomHelper.CurrentRandom.Next(0, pool.Length);
int index = Random.Shared.Next(0, pool.Length);
return pool[index];
}
}
Expand Down
Loading

0 comments on commit 33ee80b

Please sign in to comment.