-
Notifications
You must be signed in to change notification settings - Fork 815
Expand file tree
/
Copy pathSecureSettings.cs
More file actions
107 lines (89 loc) · 3.14 KB
/
SecureSettings.cs
File metadata and controls
107 lines (89 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System.Diagnostics;
using UniGetUI.Core.Data;
using UniGetUI.Core.Tools;
namespace UniGetUI.Core.SettingsEngine.SecureSettings;
public static class SecureSettings
{
private static readonly Dictionary<string, bool> _cache = new();
public static class Args
{
public const string ENABLE_FOR_USER = "--enable-secure-setting-for-user";
public const string DISABLE_FOR_USER = "--disable-secure-setting-for-user";
}
public static bool Get(string setting)
{
string purifiedSetting = CoreTools.MakeValidFileName(setting);
if (_cache.TryGetValue(purifiedSetting, out var value))
{
return value;
}
string purifiedUser = CoreTools.MakeValidFileName(Environment.UserName);
var appData = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
var settingsLocation = Path.Join(appData, "UniGetUI\\SecureSettings", purifiedUser);
var settingFile = Path.Join(settingsLocation, purifiedSetting);
if (!Directory.Exists(settingsLocation))
{
_cache[purifiedSetting] = false;
return false;
}
bool exists = File.Exists(settingFile);
_cache[purifiedSetting] = exists;
return exists;
}
public static async Task<bool> TrySet(string setting, bool enabled)
{
string purifiedSetting = CoreTools.MakeValidFileName(setting);
_cache.Remove(purifiedSetting);
string purifiedUser = CoreTools.MakeValidFileName(Environment.UserName);
using Process p = new Process();
p.StartInfo = new()
{
UseShellExecute = true,
CreateNoWindow = true,
FileName = CoreData.UniGetUIExecutableFile,
Verb = "runas",
ArgumentList =
{
enabled? Args.ENABLE_FOR_USER: Args.DISABLE_FOR_USER,
purifiedUser,
purifiedSetting
}
};
p.Start();
await p.WaitForExitAsync();
return p.ExitCode is 0;
}
public static int ApplyForUser(string username, string setting, bool enable)
{
try
{
string purifiedSetting = CoreTools.MakeValidFileName(setting);
_cache.Remove(purifiedSetting);
string purifiedUser = CoreTools.MakeValidFileName(username);
var appData = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
var settingsLocation = Path.Join(appData, "UniGetUI\\SecureSettings", purifiedUser);
var settingFile = Path.Join(settingsLocation, purifiedSetting);
if (!Directory.Exists(settingsLocation))
{
Directory.CreateDirectory(settingsLocation);
}
if (enable)
{
File.WriteAllText(settingFile, "");
}
else
{
if (File.Exists(settingFile))
{
File.Delete(settingFile);
}
}
return 0;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return -1;
}
}
}