diff --git a/README.ru.md b/README.ru.md index e1ae47a..a8046fb 100644 --- a/README.ru.md +++ b/README.ru.md @@ -350,19 +350,6 @@ sudo systemctl enable multifactor-radius } ``` -### Дополнительные RADIUS атрибуты - -```xml - - - - - - - - -``` - ## Запуск компонента После настройки конфигурации запустите компонент: diff --git a/src/.dockerignore b/src/.dockerignore new file mode 100644 index 0000000..fe1152b --- /dev/null +++ b/src/.dockerignore @@ -0,0 +1,30 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md +!**/.gitignore +!.git/HEAD +!.git/config +!.git/packed-refs +!.git/refs/heads/** \ No newline at end of file diff --git a/src/MultiFactor.Radius.Adapter.Tests/MultiFactor.Radius.Adapter.Tests.csproj b/src/MultiFactor.Radius.Adapter.Tests/MultiFactor.Radius.Adapter.Tests.csproj index 62c9bc3..010d9f9 100644 --- a/src/MultiFactor.Radius.Adapter.Tests/MultiFactor.Radius.Adapter.Tests.csproj +++ b/src/MultiFactor.Radius.Adapter.Tests/MultiFactor.Radius.Adapter.Tests.csproj @@ -154,6 +154,12 @@ + + + ..\libs\LdapForNet.dll + + + Always diff --git a/src/MultiFactor.Radius.Adapter/Dockerfile b/src/MultiFactor.Radius.Adapter/Dockerfile new file mode 100644 index 0000000..965cbd2 --- /dev/null +++ b/src/MultiFactor.Radius.Adapter/Dockerfile @@ -0,0 +1,26 @@ +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +RUN apt-get update && apt-get install -y libldap-2.4-2 +RUN ln -s libldap-2.4.so.2 /usr/lib/x86_64-linux-gnu/libldap.so.2 +EXPOSE 80 +EXPOSE 443 +EXPOSE 1812/udp + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["MultiFactor.Radius.Adapter/MultiFactor.Radius.Adapter.csproj", "MultiFactor.Radius.Adapter/"] +RUN dotnet restore "./MultiFactor.Radius.Adapter/MultiFactor.Radius.Adapter.csproj" +COPY . . +WORKDIR "/src/MultiFactor.Radius.Adapter" +RUN dotnet build "./MultiFactor.Radius.Adapter.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./MultiFactor.Radius.Adapter.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "multifactor-radius-adapter.dll"] \ No newline at end of file diff --git a/src/MultiFactor.Radius.Adapter/Extensions/ConfigureApplicationExtension.cs b/src/MultiFactor.Radius.Adapter/Extensions/ConfigureApplicationExtension.cs index 5420092..f85df85 100644 --- a/src/MultiFactor.Radius.Adapter/Extensions/ConfigureApplicationExtension.cs +++ b/src/MultiFactor.Radius.Adapter/Extensions/ConfigureApplicationExtension.cs @@ -60,11 +60,11 @@ public static RadiusHostApplicationBuilder AddLogging(this RadiusHostApplication var services = new ServiceCollection(); var appVarDescriptor = builder.InternalHostApplicationBuilder.Services.FirstOrDefault(x => x.ServiceType == typeof(ApplicationVariables)) - ?? throw new System.Exception($"Service type '{typeof(ApplicationVariables)}' was not found in the RadiusHostApplicationBuilder services"); + ?? throw new Exception($"Service type '{typeof(ApplicationVariables)}' was not found in the RadiusHostApplicationBuilder services"); services.Add(appVarDescriptor); var rootConfigProvDescriptor = builder.InternalHostApplicationBuilder.Services.FirstOrDefault(x => x.ServiceType == typeof(IRootConfigurationProvider)) - ?? throw new System.Exception($"Service type '{typeof(IRootConfigurationProvider)}' was not found in the RadiusHostApplicationBuilder services"); + ?? throw new Exception($"Service type '{typeof(IRootConfigurationProvider)}' was not found in the RadiusHostApplicationBuilder services"); services.Add(rootConfigProvDescriptor); services.AddSingleton(); diff --git a/src/MultiFactor.Radius.Adapter/Framework/Context/RadiusContext.cs b/src/MultiFactor.Radius.Adapter/Framework/Context/RadiusContext.cs index 1b8bf59..864b4b4 100644 --- a/src/MultiFactor.Radius.Adapter/Framework/Context/RadiusContext.cs +++ b/src/MultiFactor.Radius.Adapter/Framework/Context/RadiusContext.cs @@ -19,12 +19,12 @@ namespace MultiFactor.Radius.Adapter.Framework.Context /// public class RadiusContext { - public RadiusContext(IRadiusPacket request, + public RadiusContext( + IRadiusPacket request, IClientConfiguration clientConfiguration, IServiceProvider provider) { RequestPacket = request ?? throw new ArgumentNullException(nameof(request)); - ReceivedAt = DateTime.Now; Configuration = clientConfiguration ?? throw new ArgumentNullException(nameof(clientConfiguration)); RequestServices = provider ?? throw new ArgumentNullException(nameof(provider)); Authentication = new(); @@ -40,10 +40,11 @@ public RadiusContext(IRadiusPacket request, /// Current request packet. /// public IRadiusPacket RequestPacket { get; } - public DateTime ReceivedAt { get; } + public RadiusPacketHeader Header => RequestPacket.Header; public IRadiusPacket ResponsePacket { get; set; } + public PacketCode ResponseCode => Authentication.ToPacketCode(); /// @@ -55,7 +56,6 @@ public RadiusContext(IRadiusPacket request, /// Challenge state. /// public string State { get; private set; } - public string ReplyMessage { get; private set; } /// diff --git a/src/MultiFactor.Radius.Adapter/MultiFactor.Radius.Adapter.csproj b/src/MultiFactor.Radius.Adapter/MultiFactor.Radius.Adapter.csproj index dfe53eb..f9a8265 100644 --- a/src/MultiFactor.Radius.Adapter/MultiFactor.Radius.Adapter.csproj +++ b/src/MultiFactor.Radius.Adapter/MultiFactor.Radius.Adapter.csproj @@ -5,7 +5,7 @@ multifactor-radius-adapter Multifactor Multifactor Radus Adapter - 2.0.0 + 2.1.0 @@ -18,13 +18,15 @@ true + f07ad043-43df-44e3-965d-beb88a9eac86 + Linux - + @@ -52,6 +54,9 @@ Always + + Always + @@ -62,4 +67,10 @@ + + + ..\libs\LdapForNet.dll + + + diff --git a/src/MultiFactor.Radius.Adapter/Properties/launchSettings.json b/src/MultiFactor.Radius.Adapter/Properties/launchSettings.json index b80472d..18e68ac 100644 --- a/src/MultiFactor.Radius.Adapter/Properties/launchSettings.json +++ b/src/MultiFactor.Radius.Adapter/Properties/launchSettings.json @@ -10,8 +10,11 @@ }, "Docker": { "commandName": "Docker", - "launchBrowser": false, "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "localhost", + "LD_DEBUG": "libs" + }, "publishAllPorts": true, "useSSL": false } diff --git a/src/MultiFactor.Radius.Adapter/Server/Pipeline/FirstFactorAuthentication/FirstFactorAuthenticationMiddleware.cs b/src/MultiFactor.Radius.Adapter/Server/Pipeline/FirstFactorAuthentication/FirstFactorAuthenticationMiddleware.cs index 02707ed..77ea944 100644 --- a/src/MultiFactor.Radius.Adapter/Server/Pipeline/FirstFactorAuthentication/FirstFactorAuthenticationMiddleware.cs +++ b/src/MultiFactor.Radius.Adapter/Server/Pipeline/FirstFactorAuthentication/FirstFactorAuthenticationMiddleware.cs @@ -14,12 +14,10 @@ namespace MultiFactor.Radius.Adapter.Server.Pipeline.FirstFactorAuthentication public class FirstFactorAuthenticationMiddleware : IRadiusMiddleware { private readonly IFirstFactorAuthenticationProcessorProvider _firstAuthFactorProcessorProvider; - private readonly IRadiusRequestPostProcessor _requestPostProcessor; - public FirstFactorAuthenticationMiddleware(IFirstFactorAuthenticationProcessorProvider firstAuthFactorProcessorProvider, IRadiusRequestPostProcessor requestPostProcessor) + public FirstFactorAuthenticationMiddleware(IFirstFactorAuthenticationProcessorProvider firstAuthFactorProcessorProvider) { _firstAuthFactorProcessorProvider = firstAuthFactorProcessorProvider ?? throw new ArgumentNullException(nameof(firstAuthFactorProcessorProvider)); - _requestPostProcessor = requestPostProcessor ?? throw new ArgumentNullException(nameof(requestPostProcessor)); } public async Task InvokeAsync(RadiusContext context, RadiusRequestDelegate next) diff --git a/src/MultiFactor.Radius.Adapter/Server/RadiusResponseSender.cs b/src/MultiFactor.Radius.Adapter/Server/RadiusResponseSender.cs index 77c6232..8361f2c 100644 --- a/src/MultiFactor.Radius.Adapter/Server/RadiusResponseSender.cs +++ b/src/MultiFactor.Radius.Adapter/Server/RadiusResponseSender.cs @@ -25,7 +25,6 @@ using Microsoft.Extensions.Logging; using MultiFactor.Radius.Adapter.Configuration.Core; using MultiFactor.Radius.Adapter.Core.Radius; -using System; using System.Net; namespace MultiFactor.Radius.Adapter.Server diff --git a/src/MultiFactor.Radius.Adapter/Services/BindIdentityFormatter.cs b/src/MultiFactor.Radius.Adapter/Services/BindIdentityFormatter.cs index 0d3682a..734e887 100644 --- a/src/MultiFactor.Radius.Adapter/Services/BindIdentityFormatter.cs +++ b/src/MultiFactor.Radius.Adapter/Services/BindIdentityFormatter.cs @@ -33,7 +33,7 @@ public string FormatIdentity(LdapIdentity user, string ldapUri) return _clientConfiguration.FirstFactorAuthenticationSource switch { Configuration.AuthenticationSource.None or Configuration.AuthenticationSource.ActiveDirectory => FormatIdentityAD(user, ldapUri), - Configuration.AuthenticationSource.Ldap => FormatIdentityLdap(user, ldapUri), + Configuration.AuthenticationSource.Ldap => FormatIdentityLdap(user), _ => user.Name, }; } @@ -59,7 +59,7 @@ private static string FormatIdentityAD(LdapIdentity user, string ldapUri) return user.Name; } - private string FormatIdentityLdap(LdapIdentity user, string ldapUri) + private string FormatIdentityLdap(LdapIdentity user) { if (user.Type == IdentityType.UserPrincipalName) { diff --git a/src/libs/LdapForNet.dll b/src/libs/LdapForNet.dll new file mode 100644 index 0000000..2b1e07d Binary files /dev/null and b/src/libs/LdapForNet.dll differ diff --git a/src/multifactor-radius-adapter.sln b/src/multifactor-radius-adapter.sln index 5c2c660..8b6a2a2 100644 --- a/src/multifactor-radius-adapter.sln +++ b/src/multifactor-radius-adapter.sln @@ -5,10 +5,10 @@ VisualStudioVersion = 17.4.33103.184 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1FDA0815-14C7-4C4A-B632-52BFF4AF7788}" ProjectSection(SolutionItems) = preProject - LICENSE.md = LICENSE.md - LICENSE.ru.md = LICENSE.ru.md - README.md = README.md - README.ru.md = README.ru.md + ..\LICENSE.md = ..\LICENSE.md + ..\LICENSE.ru.md = ..\LICENSE.ru.md + ..\README.md = ..\README.md + ..\README.ru.md = ..\README.ru.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MultiFactor.Radius.Adapter.Tests", "MultiFactor.Radius.Adapter.Tests\MultiFactor.Radius.Adapter.Tests.csproj", "{E8A7518C-A622-4343-A594-46EE5869EE96}"