2
0
Эх сурвалжийг харах

linux不读取发行版名称

老九 3 жил өмнө
parent
commit
b824ffece1

+ 19 - 35
FastGithub.HttpServer/CaCertInstallerOfLinux.cs

@@ -8,32 +8,40 @@ namespace FastGithub.HttpServer
 {
     abstract class CaCertInstallerOfLinux : ICaCertInstaller
     {
-        const string OS_RELEASE_FILE = "/etc/os-release";
+        private readonly ILogger logger;
 
         /// <summary>
         /// 更新工具文件名
         /// </summary>
-        public abstract string CertUpdateFileName { get; }
+        protected abstract string CertToolName { get; }
 
         /// <summary>
         /// 证书根目录
         /// </summary>
-        public abstract string RootCertPath { get; }
+        protected abstract string CertStorePath { get; }
+
+
+        public CaCertInstallerOfLinux(ILogger logger)
+        {
+            this.logger = logger;
+        }
 
         /// <summary>
         /// 是否支持
         /// </summary>
         /// <returns></returns>
-        public abstract bool IsSupported();
+        public bool IsSupported()
+        {
+            return OperatingSystem.IsLinux() && File.Exists(this.CertToolName);
+        }
 
         /// <summary>
         /// 安装ca证书
         /// </summary>
         /// <param name="caCertFilePath">证书文件路径</param>
-        /// <param name="logger"></param>
-        public void Install(string caCertFilePath, ILogger logger)
+        public void Install(string caCertFilePath)
         {
-            var destCertFilePath = Path.Combine(this.RootCertPath, "fastgithub.crt");
+            var destCertFilePath = Path.Combine(this.CertStorePath, "fastgithub.crt");
             if (File.Exists(destCertFilePath) && File.ReadAllBytes(caCertFilePath).SequenceEqual(File.ReadAllBytes(destCertFilePath)))
             {
                 return;
@@ -41,45 +49,21 @@ namespace FastGithub.HttpServer
 
             if (Environment.UserName != "root")
             {
-                logger.LogWarning($"无法自动安装CA证书{caCertFilePath},因为没有root权限");
+                this.logger.LogWarning($"无法自动安装CA证书{caCertFilePath},因为没有root权限");
                 return;
             }
 
             try
             {
-                Directory.CreateDirectory(this.RootCertPath);
+                Directory.CreateDirectory(this.CertStorePath);
                 File.Copy(caCertFilePath, destCertFilePath, overwrite: true);
-                Process.Start(this.CertUpdateFileName).WaitForExit();
+                Process.Start(this.CertToolName).WaitForExit();
             }
             catch (Exception ex)
             {
                 File.Delete(destCertFilePath);
-                logger.LogWarning(ex.Message, "自动安装证书异常");
+                this.logger.LogWarning(ex.Message, "自动安装证书异常");
             }
         }
-
-
-        /// <summary>
-        /// 是否为某个发行版
-        /// </summary>
-        /// <param name="name"></param>
-        /// <returns></returns>
-        protected static bool IsReleasName(string name)
-        {
-            if (File.Exists(OS_RELEASE_FILE) == false)
-            {
-                return false;
-            }
-
-            foreach (var line in File.ReadAllLines(OS_RELEASE_FILE))
-            {
-                if (line.StartsWith("NAME=") && line.Contains(name))
-                {
-                    return true;
-                }
-            }
-
-            return false;
-        }
     }
 }

+ 0 - 16
FastGithub.HttpServer/CaCertInstallerOfLinuxCentOS.cs

@@ -1,16 +0,0 @@
-using System;
-
-namespace FastGithub.HttpServer
-{
-    sealed class CaCertInstallerOfLinuxCentOS : CaCertInstallerOfLinuxRedHat
-    {
-        /// <summary>
-        /// 是否支持
-        /// </summary>
-        /// <returns></returns>
-        public override bool IsSupported()
-        {
-            return OperatingSystem.IsLinux() && IsReleasName("CentOS");
-        }
-    }
-}

+ 6 - 10
FastGithub.HttpServer/CaCertInstallerOfLinuxDebian.cs

@@ -1,20 +1,16 @@
-using System;
+using Microsoft.Extensions.Logging;
 
 namespace FastGithub.HttpServer
 {
-    class CaCertInstallerOfLinuxDebian : CaCertInstallerOfLinux
+    sealed class CaCertInstallerOfLinuxDebian : CaCertInstallerOfLinux
     {
-        public override string RootCertPath => "/usr/local/share/ca-certificates";
+        protected override string CertToolName => "update-ca-certificates";
 
-        public override string CertUpdateFileName => "update-ca-certificates";
+        protected override string CertStorePath => "/usr/local/share/ca-certificates";
 
-        /// <summary>
-        /// 是否支持
-        /// </summary>
-        /// <returns></returns>
-        public override bool IsSupported()
+        public CaCertInstallerOfLinuxDebian(ILogger<CaCertInstallerOfLinuxDebian> logger)
+            : base(logger)
         {
-            return OperatingSystem.IsLinux() && IsReleasName("Debian");
         }
     }
 }

+ 6 - 10
FastGithub.HttpServer/CaCertInstallerOfLinuxRedHat.cs

@@ -1,20 +1,16 @@
-using System;
+using Microsoft.Extensions.Logging;
 
 namespace FastGithub.HttpServer
 {
-    class CaCertInstallerOfLinuxRedHat : CaCertInstallerOfLinux
+    sealed class CaCertInstallerOfLinuxRedHat : CaCertInstallerOfLinux
     {
-        public override string RootCertPath => "/etc/pki/ca-trust/source/anchors";
+        protected override string CertToolName => "update-ca-trust";
 
-        public override string CertUpdateFileName => "update-ca-trust";
+        protected override string CertStorePath => "/etc/pki/ca-trust/source/anchors";
 
-        /// <summary>
-        /// 是否支持
-        /// </summary>
-        /// <returns></returns>
-        public override bool IsSupported()
+        public CaCertInstallerOfLinuxRedHat(ILogger<CaCertInstallerOfLinuxRedHat> logger)
+            : base(logger)
         {
-            return OperatingSystem.IsLinux() && IsReleasName("Red Hat");
         }
     }
 }

+ 0 - 16
FastGithub.HttpServer/CaCertInstallerOfLinuxUbuntu.cs

@@ -1,16 +0,0 @@
-using System;
-
-namespace FastGithub.HttpServer
-{
-    sealed class CaCertInstallerOfLinuxUbuntu : CaCertInstallerOfLinuxDebian
-    {
-        /// <summary>
-        /// 是否支持
-        /// </summary>
-        /// <returns></returns>
-        public override bool IsSupported()
-        {
-            return OperatingSystem.IsLinux() && IsReleasName("Ubuntu");
-        }
-    }
-}

+ 9 - 3
FastGithub.HttpServer/CaCertInstallerOfMacOS.cs

@@ -5,6 +5,13 @@ namespace FastGithub.HttpServer
 {
     sealed class CaCertInstallerOfMacOS : ICaCertInstaller
     {
+        private readonly ILogger<CaCertInstallerOfMacOS> logger;
+
+        public CaCertInstallerOfMacOS(ILogger<CaCertInstallerOfMacOS> logger)
+        {
+            this.logger = logger;
+        }
+
         /// <summary>
         /// 是否支持
         /// </summary>
@@ -18,10 +25,9 @@ namespace FastGithub.HttpServer
         /// 安装ca证书
         /// </summary>
         /// <param name="caCertFilePath">证书文件路径</param>
-        /// <param name="logger"></param>
-        public void Install(string caCertFilePath, ILogger logger)
+        public void Install(string caCertFilePath)
         {
-            logger.LogWarning($"请手动安装CA证书然后设置信任CA证书{caCertFilePath}");
+            this.logger.LogWarning($"请手动安装CA证书然后设置信任CA证书{caCertFilePath}");
         }
     }
 }

+ 9 - 3
FastGithub.HttpServer/CaCertInstallerOfWindows.cs

@@ -6,6 +6,13 @@ namespace FastGithub.HttpServer
 {
     sealed class CaCertInstallerOfWindows : ICaCertInstaller
     {
+        private readonly Logger<CaCertInstallerOfWindows> logger;
+
+        public CaCertInstallerOfWindows(Logger<CaCertInstallerOfWindows> logger)
+        {
+            this.logger = logger;
+        }
+
         /// <summary>
         /// 是否支持
         /// </summary>
@@ -19,8 +26,7 @@ namespace FastGithub.HttpServer
         /// 安装ca证书
         /// </summary>
         /// <param name="caCertFilePath">证书文件路径</param>
-        /// <param name="logger"></param>
-        public void Install(string caCertFilePath, ILogger logger)
+        public void Install(string caCertFilePath)
         {
             try
             {
@@ -44,7 +50,7 @@ namespace FastGithub.HttpServer
             }
             catch (Exception)
             {
-                logger.LogWarning($"请手动安装CA证书{caCertFilePath}到“将所有的证书都放入下列存储”\\“受信任的根证书颁发机构”");
+                this.logger.LogWarning($"请手动安装CA证书{caCertFilePath}到“将所有的证书都放入下列存储”\\“受信任的根证书颁发机构”");
             }
         }
     }

+ 1 - 1
FastGithub.HttpServer/CertService.cs

@@ -76,7 +76,7 @@ namespace FastGithub.HttpServer
             var installer = this.certInstallers.FirstOrDefault(item => item.IsSupported());
             if (installer != null)
             {
-                installer.Install(this.CaCerFilePath, this.logger);
+                installer.Install(this.CaCerFilePath);
             }
             else
             {

+ 2 - 5
FastGithub.HttpServer/ICaCertInstaller.cs

@@ -1,6 +1,4 @@
-using Microsoft.Extensions.Logging;
-
-namespace FastGithub.HttpServer
+namespace FastGithub.HttpServer
 {
     /// <summary>
     /// CA证书安装器
@@ -17,7 +15,6 @@ namespace FastGithub.HttpServer
         /// 安装ca证书
         /// </summary>
         /// <param name="caCertFilePath">证书文件路径</param>
-        /// <param name="logger"></param>
-        void Install(string caCertFilePath,ILogger logger);
+        void Install(string caCertFilePath);
     }
 }

+ 0 - 2
FastGithub.HttpServer/ServiceCollectionExtensions.cs

@@ -21,9 +21,7 @@ namespace FastGithub
                 .AddSingleton<ICaCertInstaller, CaCertInstallerOfMacOS>()
                 .AddSingleton<ICaCertInstaller, CaCertInstallerOfWindows>()
                 .AddSingleton<ICaCertInstaller, CaCertInstallerOfLinuxRedHat>()
-                .AddSingleton<ICaCertInstaller, CaCertInstallerOfLinuxCentOS>()
                 .AddSingleton<ICaCertInstaller, CaCertInstallerOfLinuxDebian>()
-                .AddSingleton<ICaCertInstaller, CaCertInstallerOfLinuxUbuntu>()
                 .AddSingleton<HttpProxyMiddleware>()
                 .AddSingleton<RequestLoggingMiddleware>()
                 .AddSingleton<HttpReverseProxyMiddleware>();