1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- using Microsoft.Extensions.Logging;
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- namespace FastGithub.HttpServer
- {
- abstract class CaCertInstallerOfLinux : ICaCertInstaller
- {
- const string OS_RELEASE_FILE = "/etc/os-release";
- /// <summary>
- /// 更新工具文件名
- /// </summary>
- public abstract string CertUpdateFileName { get; }
- /// <summary>
- /// 证书根目录
- /// </summary>
- public abstract string RootCertPath { get; }
- /// <summary>
- /// 是否支持
- /// </summary>
- /// <returns></returns>
- public abstract bool IsSupported();
- /// <summary>
- /// 安装ca证书
- /// </summary>
- /// <param name="caCertFilePath">证书文件路径</param>
- /// <param name="logger"></param>
- public void Install(string caCertFilePath, ILogger logger)
- {
- var destCertFilePath = Path.Combine(this.RootCertPath, "fastgithub.crt");
- if (File.Exists(destCertFilePath) && File.ReadAllBytes(caCertFilePath).SequenceEqual(File.ReadAllBytes(destCertFilePath)))
- {
- return;
- }
- if (Environment.UserName != "root")
- {
- logger.LogWarning($"无法自动安装CA证书{caCertFilePath},因为没有root权限");
- return;
- }
- try
- {
- Directory.CreateDirectory(this.RootCertPath);
- File.Copy(caCertFilePath, destCertFilePath, overwrite: true);
- Process.Start(this.CertUpdateFileName).WaitForExit();
- }
- catch (Exception ex)
- {
- logger.LogWarning(ex.Message, "自动安装证书异常");
- }
- }
- /// <summary>
- /// 是否为某个发行版
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- protected bool IsReleasName(string name)
- {
- if (File.Exists(OS_RELEASE_FILE) == false)
- {
- return false;
- }
- var releaseLines = File.ReadAllLines(OS_RELEASE_FILE);
- if (releaseLines.Length == 0)
- {
- return false;
- }
- var nameLine = releaseLines[0];
- return nameLine.Contains(name);
- }
- }
- }
|