AppConfigs.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. namespace DhcpServer
  7. {
  8. internal static class AppConfigs
  9. {
  10. private static readonly string ConfigFileDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs");
  11. private static readonly HashSet<char> InvalidFileNameChars = new HashSet<char>(Path.GetInvalidFileNameChars());
  12. private static string FilterUserClass(string input)
  13. {
  14. if (input == null) return null;
  15. var sb = new StringBuilder(input);
  16. for (int i = 0; i < sb.Length; i++)
  17. {
  18. if (InvalidFileNameChars.Contains(sb[i])) sb[i] = '_';
  19. }
  20. sb.Insert(0, '-');
  21. return sb.ToString();
  22. }
  23. private static string GetClientEntryPath(string mac, string userClass = null)
  24. {
  25. return Path.Combine(ConfigFileDir, mac + FilterUserClass(userClass) + ".json");
  26. }
  27. private static string GetDefaultEntryPath(string userClass = null)
  28. {
  29. return Path.Combine(ConfigFileDir, "Default" + FilterUserClass(userClass) + ".json");
  30. }
  31. public static bool CreateDefaultClientEntryIfNoExist()
  32. {
  33. var path = GetDefaultEntryPath();
  34. if (File.Exists(path)) return false;
  35. if (false == Directory.Exists(ConfigFileDir)) Directory.CreateDirectory(ConfigFileDir);
  36. File.WriteAllText(path, JsonConvert.SerializeObject(new ClientEntry(), Formatting.Indented));
  37. return true;
  38. }
  39. public static ClientEntry GetDefaultClientEntry(string userClass = null)
  40. {
  41. var path = GetDefaultEntryPath(userClass);
  42. if (File.Exists(path)) return JsonConvert.DeserializeObject<ClientEntry>(File.ReadAllText(path));
  43. var createNew = new ClientEntry();
  44. File.WriteAllText(path, JsonConvert.SerializeObject(new ClientEntry(), Formatting.Indented));
  45. return createNew;
  46. }
  47. public static ClientEntry GetClientEntry(string mac, string userClass = null)
  48. {
  49. var path = GetClientEntryPath(mac, userClass);
  50. if (File.Exists(path)) return JsonConvert.DeserializeObject<ClientEntry>(File.ReadAllText(path));
  51. var createNew = new ClientEntry();
  52. File.WriteAllText(path, JsonConvert.SerializeObject(new ClientEntry(), Formatting.Indented));
  53. return createNew;
  54. }
  55. }
  56. }