CaCertInstallerOfLinux.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Microsoft.Extensions.Logging;
  2. using System;
  3. using System.Diagnostics;
  4. using System.IO;
  5. namespace FastGithub.HttpServer
  6. {
  7. abstract class CaCertInstallerOfLinux : ICaCertInstaller
  8. {
  9. const string OS_RELEASE_FILE = "/etc/os-release";
  10. /// <summary>
  11. /// 更新工具文件名
  12. /// </summary>
  13. public abstract string CertUpdateFileName { get; }
  14. /// <summary>
  15. /// 证书根目录
  16. /// </summary>
  17. public abstract string RootCertPath { get; }
  18. /// <summary>
  19. /// 是否支持
  20. /// </summary>
  21. /// <returns></returns>
  22. public abstract bool IsSupported();
  23. /// <summary>
  24. /// 安装ca证书
  25. /// </summary>
  26. /// <param name="caCertFilePath">证书文件路径</param>
  27. /// <param name="logger"></param>
  28. public void Install(string caCertFilePath, ILogger logger)
  29. {
  30. if (Environment.UserName != "root")
  31. {
  32. logger.LogWarning($"无法自动安装CA证书{caCertFilePath},因为没有root权限");
  33. return;
  34. }
  35. try
  36. {
  37. Directory.CreateDirectory(this.RootCertPath);
  38. var destCertFilePath = Path.Combine(this.RootCertPath, "fastgithub.crt");
  39. File.Copy(caCertFilePath, destCertFilePath, overwrite: true);
  40. Process.Start(this.CertUpdateFileName).WaitForExit();
  41. }
  42. catch (Exception ex)
  43. {
  44. logger.LogWarning(ex.Message, "自动安装证书异常");
  45. }
  46. }
  47. /// <summary>
  48. /// 是否为某个发行版
  49. /// </summary>
  50. /// <param name="name"></param>
  51. /// <returns></returns>
  52. protected bool IsReleasName(string name)
  53. {
  54. if (File.Exists(OS_RELEASE_FILE) == false)
  55. {
  56. return false;
  57. }
  58. var releaseLines = File.ReadAllLines(OS_RELEASE_FILE);
  59. if (releaseLines.Length == 0)
  60. {
  61. return false;
  62. }
  63. var nameLine = releaseLines[0];
  64. return nameLine.Contains(name);
  65. }
  66. }
  67. }