Skip to content

Commit

Permalink
feat: Use ini extensions to parse the model file (#332)
Browse files Browse the repository at this point in the history
* feat: Change to Configuration.Ini resolution.conf

Signed-off-by: Tan <2912363476@qq.com>

* feat: Remove invalid reference

Signed-off-by: Tan <2912363476@qq.com>

* feat: Revise according to the suggestions.

Signed-off-by: Tan <2912363476@qq.com>

* feat: Revise according to the suggestions(2).

Signed-off-by: Tan <2912363476@qq.com>

---------

Signed-off-by: Tan <2912363476@qq.com>
  • Loading branch information
Tanyuu committed Sep 16, 2023
1 parent 349d574 commit 0e56748
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 40 deletions.
77 changes: 43 additions & 34 deletions Casbin/Casbin.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,77 +37,86 @@
</PropertyGroup>

<ItemGroup>
<None Remove="casbin.snk"/>
<None Remove="Casbin.csproj.DotSettings"/>
<None Remove="casbin.snk" />
<None Remove="Casbin.csproj.DotSettings" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="CsvHelper" Version="30.0.1"/>
<PackageReference Include="DotNet.Glob" Version="3.1.3"/>
<PackageReference Include="System.Memory" Version="4.5.5"/>
<PackageReference Include="JetBrains.Annotations" Version="2023.2.0" PrivateAssets="All"/>
<PackageReference Include="Microsoft.SourceLink.Github" Version="1.1.1" PrivateAssets="All"/>
<PackageReference Include="CsvHelper" Version="30.0.1" />
<PackageReference Include="DotNet.Glob" Version="3.1.3" />
<PackageReference Include="System.Memory" Version="4.5.5" />
<PackageReference Include="JetBrains.Annotations" Version="2023.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.Github" Version="1.1.1" PrivateAssets="All" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0-preview.5.23280.8"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="8.0.0-rc.1.23419.4" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0-rc.1.23419.4" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.32"/>
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="3.1.32" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.32" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net461'">
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.16.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net452'">
<PackageReference Include="DynamicExpresso.Core" Version="2.10.0"/>
<PackageReference Include="System.ValueTuple" Version="4.5.0"/>
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all"/>
<PackageReference Include="DynamicExpresso.Core" Version="2.10.0" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>

<ItemGroup>
<None Include="../README.md" Pack="true" PackagePath="" />
<None Include="casbin.png" Pack="true" Visible="false" PackagePath=""/>
<None Include="casbin.png" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>


Expand Down
62 changes: 56 additions & 6 deletions Casbin/Config/DefaultConfig.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Text;
#if !NET452
using Microsoft.Extensions.Configuration;
#endif

namespace Casbin.Config
{
Expand Down Expand Up @@ -48,7 +55,8 @@ public static IConfig CreateFromFile(string configFilePath)
public static IConfig CreateFromText(string text)
{
var config = new DefaultConfig();
config.ParseBuffer(new StringReader(text));
using MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
config.AddStream(config.RemoveComment(memoryStream));
return config;
}

Expand Down Expand Up @@ -159,26 +167,53 @@ private bool AddConfig(string section, string option, string value)

private void Parse(string configFilePath)
{
using (var sr = new StreamReader(configFilePath))
using FileStream fileStream = File.OpenRead(configFilePath);
AddStream(RemoveComment(fileStream));
}

private Stream RemoveComment(Stream stream)
{
TextWriter textWriter = new StringWriter();
string line;
string processedValue = string.Empty;
using var streamReader = new StreamReader(stream);
while ((line = streamReader.ReadLine()) != null)
{
line = line.Split(_defaultComment[0]).First().Trim();
if (line.EndsWith(_defaultFeed))
{
processedValue += line.Split(_defaultFeed[0]).First();
}
else
{
processedValue += line;
textWriter.WriteLine(processedValue);
processedValue = string.Empty;
}
}
if (processedValue != string.Empty)
{
ParseBuffer(sr);
textWriter.WriteLine(processedValue);
}
return new MemoryStream(Encoding.UTF8.GetBytes(textWriter.ToString()));
}

private void ParseBuffer(TextReader reader)
private void AddStream(Stream stream)
{
#if NET452
string section = string.Empty;
int lineNum = 0;
string line;
bool inSuccessiveLine = false;
string option = string.Empty;
string processedValue = string.Empty;
using var streamReader = new StreamReader(stream);
while (true)
{
lineNum++;
try
{
if ((line = reader.ReadLine()) != null)
if ((line = streamReader.ReadLine()) != null)
{
if (string.IsNullOrEmpty(line))
{
Expand Down Expand Up @@ -257,7 +292,22 @@ private void ParseBuffer(TextReader reader)
}
}
}
}
#else
IConfigurationBuilder builder = new ConfigurationBuilder().AddIniStream(stream);
IConfigurationRoot configuration = builder.Build();
var sections = configuration.GetChildren().ToList();

foreach (var section in sections)
{
foreach (var kvPair in section.AsEnumerable())
{
if (kvPair.Value is not null)
{
AddConfig(section.Path, kvPair.Key.Split(':').Last().Trim(), kvPair.Value.Trim());
}
}
}
#endif
}
}
}

0 comments on commit 0e56748

Please sign in to comment.