Skip to content

Commit adbc9a6

Browse files
authored
Merge pull request #248 from sunnamed434/configs-in-args
Add support for custom configuration file paths
2 parents 488ade7 + 41c778e commit adbc9a6

14 files changed

Lines changed: 323 additions & 114 deletions

src/BitMono.CLI/GlobalUsings.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,19 @@
1010
global using System.Threading;
1111
global using System.Threading.Tasks;
1212
global using BitMono.Host.Extensions;
13+
global using BitMono.Host.Configurations;
1314
global using BitMono.Obfuscation.Files;
1415
global using BitMono.Obfuscation.Starter;
1516
global using BitMono.Shared.Models;
1617
global using BitMono.Utilities.Paths;
1718
global using CommandLine;
1819
global using Microsoft.Extensions.DependencyInjection;
1920
global using Microsoft.Extensions.Options;
21+
global using Microsoft.Extensions.Configuration;
2022
global using Pocket.Extensions;
2123
global using Serilog;
2224
global using System.Collections.Generic;
2325
global using System.Linq;
26+
global using BitMono.Shared;
2427
global using Serilog.Configuration;
2528
global using ILogger = Serilog.ILogger;

src/BitMono.CLI/Modules/ObfuscationNeeds.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ internal class ObfuscationNeeds
99
public string OutputPath { get; set; }
1010
public ObfuscationNeedsWay Way { get; set; }
1111
public List<string> Protections { get; set; }
12+
public ProtectionSettings? ProtectionSettings { get; set; }
13+
public string? CriticalsFile { get; set; }
14+
public string? LoggingFile { get; set; }
15+
public string? ObfuscationFile { get; set; }
1216
#pragma warning restore CS8618
1317
}
1418

src/BitMono.CLI/Modules/ObfuscationNeedsFactory.cs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,16 @@ namespace BitMono.CLI.Modules;
33
internal class ObfuscationNeedsFactory
44
{
55
private readonly string[] _args;
6-
private readonly ObfuscationSettings _obfuscationSettings;
7-
private readonly List<ProtectionSetting> _protectionSettings;
8-
private readonly ILogger _logger;
96

10-
public ObfuscationNeedsFactory(string[] args,
11-
ObfuscationSettings obfuscationSettings, List<ProtectionSetting> protectionSettings, ILogger logger)
7+
public ObfuscationNeedsFactory(string[] args)
128
{
139
_args = args;
14-
_obfuscationSettings = obfuscationSettings;
15-
_protectionSettings = protectionSettings;
16-
_logger = logger;
1710
}
1811

1912
public ObfuscationNeeds? Create(CancellationToken cancellationToken)
2013
{
2114
return _args.IsEmpty()
22-
? new ReadlineObfuscationNeedsFactory(_args, _obfuscationSettings, _protectionSettings, _logger).Create(cancellationToken)
23-
: new OptionsObfuscationNeedsFactory(_args, _obfuscationSettings, _logger).Create(cancellationToken);
15+
? new ReadlineObfuscationNeedsFactory(_args).Create(cancellationToken)
16+
: new OptionsObfuscationNeedsFactory(_args).Create(cancellationToken);
2417
}
2518
}

src/BitMono.CLI/Modules/Options.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ internal class Options
1111
[Option('o', "output", Required = false, HelpText = "Set output path.")]
1212
public string? Output { get; set; }
1313

14-
[Option('p', "protections", Required = false, HelpText = "Set protections, also can be set via protections.json.")]
14+
[Option('p', "protections", Required = false, HelpText = "Set protections list, also can be set via protections.json.")]
1515
public IEnumerable<string> Protections { get; set; } = [];
16+
17+
[Option("criticals-file", Required = false, HelpText = "Set criticals configuration file path.")]
18+
public string? CriticalsFile { get; set; }
19+
20+
[Option("logging-file", Required = false, HelpText = "Set logging configuration file path.")]
21+
public string? LoggingFile { get; set; }
22+
23+
[Option("obfuscation-file", Required = false, HelpText = "Set obfuscation configuration file path.")]
24+
public string? ObfuscationFile { get; set; }
1625
}

src/BitMono.CLI/Modules/OptionsObfuscationNeedsFactory.cs

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ namespace BitMono.CLI.Modules;
33
internal class OptionsObfuscationNeedsFactory
44
{
55
private readonly string[] _args;
6-
private readonly ObfuscationSettings _obfuscationSettings;
7-
private readonly ILogger _logger;
86

9-
public OptionsObfuscationNeedsFactory(string[] args, ObfuscationSettings obfuscationSettings, ILogger logger)
7+
public OptionsObfuscationNeedsFactory(string[] args)
108
{
119
_args = args;
12-
_obfuscationSettings = obfuscationSettings;
13-
_logger = logger.ForContext<OptionsObfuscationNeedsFactory>();
1410
}
1511

1612
[SuppressMessage("ReSharper", "AssignNullToNotNullAttribute")]
@@ -22,20 +18,54 @@ public OptionsObfuscationNeedsFactory(string[] args, ObfuscationSettings obfusca
2218
with.HelpWriter = Console.Error;
2319
});
2420
var parserResult = parser.ParseArguments<Options>(_args);
25-
if (parserResult.Errors.IsEmpty() == false)
21+
if (!parserResult.Errors.IsEmpty())
2622
{
2723
return null;
2824
}
2925
var options = parserResult.Value;
26+
27+
ObfuscationSettings? obfuscationSettings = null;
28+
try
29+
{
30+
if (options.ObfuscationFile != null && File.Exists(options.ObfuscationFile))
31+
{
32+
var obfuscationConfig = new BitMonoObfuscationConfiguration(options.ObfuscationFile);
33+
obfuscationSettings = obfuscationConfig.Configuration.Get<ObfuscationSettings>();
34+
}
35+
else if (File.Exists(KnownConfigNames.Obfuscation))
36+
{
37+
var obfuscationConfig = new BitMonoObfuscationConfiguration();
38+
obfuscationSettings = obfuscationConfig.Configuration.Get<ObfuscationSettings>();
39+
}
40+
}
41+
catch (Exception ex)
42+
{
43+
Console.WriteLine($"Warning: Could not load obfuscation configuration: {ex}");
44+
}
45+
3046
var filePath = PathFormatterUtility.Format(options.File!);
31-
if (File.Exists(filePath) == false)
47+
if (!File.Exists(filePath))
3248
{
33-
_logger.Fatal($"File {filePath} cannot be found, please, try again!");
49+
Console.WriteLine($"File {filePath} cannot be found, please, try again!");
3450
return null;
3551
}
36-
ObfuscationNeeds needs;
3752
var fileBaseDirectory = Path.GetDirectoryName(filePath);
38-
if (_obfuscationSettings.ForceObfuscation)
53+
54+
ProtectionSettings? protectionSettings = null;
55+
if (options.Protections.Any())
56+
{
57+
protectionSettings = new ProtectionSettings
58+
{
59+
Protections = options.Protections.Select(x => new ProtectionSetting
60+
{
61+
Name = x,
62+
Enabled = true
63+
}).ToList()
64+
};
65+
}
66+
67+
ObfuscationNeeds needs;
68+
if (obfuscationSettings?.ForceObfuscation == true)
3969
{
4070
needs = new ObfuscationNeeds
4171
{
@@ -44,7 +74,11 @@ public OptionsObfuscationNeedsFactory(string[] args, ObfuscationSettings obfusca
4474
ReferencesDirectoryName = fileBaseDirectory,
4575
OutputPath = fileBaseDirectory,
4676
Protections = options.Protections.ToList(),
47-
Way = ObfuscationNeedsWay.Options
77+
ProtectionSettings = protectionSettings,
78+
Way = ObfuscationNeedsWay.Options,
79+
CriticalsFile = options.CriticalsFile,
80+
LoggingFile = options.LoggingFile,
81+
ObfuscationFile = options.ObfuscationFile
4882
};
4983
}
5084
else
@@ -55,12 +89,16 @@ public OptionsObfuscationNeedsFactory(string[] args, ObfuscationSettings obfusca
5589
FileBaseDirectory = fileBaseDirectory,
5690
ReferencesDirectoryName = options.Libraries?.IsNullOrEmpty() == false
5791
? options.Libraries
58-
: Path.Combine(fileBaseDirectory, _obfuscationSettings.ReferencesDirectoryName),
92+
: Path.Combine(fileBaseDirectory, obfuscationSettings?.ReferencesDirectoryName ?? "libs"),
5993
OutputPath = options.Output?.IsNullOrEmpty() == false
6094
? options.Output
61-
: Path.Combine(fileBaseDirectory, _obfuscationSettings.OutputDirectoryName),
95+
: Path.Combine(fileBaseDirectory, obfuscationSettings?.OutputDirectoryName ?? "output"),
6296
Protections = options.Protections.ToList(),
63-
Way = ObfuscationNeedsWay.Options
97+
ProtectionSettings = protectionSettings,
98+
Way = ObfuscationNeedsWay.Options,
99+
CriticalsFile = options.CriticalsFile,
100+
LoggingFile = options.LoggingFile,
101+
ObfuscationFile = options.ObfuscationFile
64102
};
65103
}
66104

0 commit comments

Comments
 (0)