CrazyIter_Bin 4 months ago
parent
commit
03ff1a4ca4

+ 1 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamClient/app.js

@@ -36,7 +36,7 @@ const createWindow = async () => {
             height: 600
         });
         win.maximize();
-        win.loadURL('https://localhost:5001');
+        win.loadURL('https://exam.habook.local:6001');
     } catch (error) {
         console.error('Error starting dotnet or loading window:', error);
     }

+ 22 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Configs/cert.pem

@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDozCCAougAwIBAgIUXVG28xNwGPdDM2SRRiCQhDTZG60wDQYJKoZIhvcNAQEL
+BQAwazELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB1NpQ2h1YW4xEDAOBgNVBAcMB0No
+ZW5nRHUxDzANBgNVBAoMBmhhYm9vazELMAkGA1UECwwCcmQxGjAYBgNVBAMMEWV4
+YW0uaGFib29rLmxvY2FsMB4XDTI1MDEyMTA0MzM0NVoXDTI2MDEyMTA0MzM0NVow
+azELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB1NpQ2h1YW4xEDAOBgNVBAcMB0NoZW5n
+RHUxDzANBgNVBAoMBmhhYm9vazELMAkGA1UECwwCcmQxGjAYBgNVBAMMEWV4YW0u
+aGFib29rLmxvY2FsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAl2
+7myycEOgiO0OEohPYDV/1raik81QuU3485caFoxs2UUXJoW0zkG0TKHVqVJGcNbg
+xncN7gjThRAKy4PSLTrn9A9fPJVqRpB0ElJlBsChhfXxpWzrFl/wHOxdmYz5rUjs
+gjq0zdlodSQ2yWE0VdZhI6VqIbvz16rHXj19B1kKcGVzlnwuRxuqldDEJSUD3UTe
+epPGaSbdqI4riUcOaksEMEAgll7HqixTv5tB3/aKJ0w+nxZFimocdA/XFXIXMO1M
+lLP2CCck1Jv7vlAL/TP22wQnfINifYDisTmsdtFvq6hgkFgh34lDX+moM92MPR5/
+m5D4GQi6BYtFpOoC+wIDAQABoz8wPTAcBgNVHREEFTATghFleGFtLmhhYm9vay5s
+b2NhbDAdBgNVHQ4EFgQUXr4ImISHw4eBN6r8MO3LiM0o+5gwDQYJKoZIhvcNAQEL
+BQADggEBAIFTbpGUwtpMa//mrHGghAcF+jw3+6G/I6K0bsfcFfYVQJCwJ+HcNWDJ
++nCn64rdu5sQvFmpPSlXBMbFoW/ZAxs2g7jhk90MUrR0MFBu91qAu2gqwE55S6xr
+O7fg4sd0aVvR2tE2e6wxMaLGTfNtF9Uo0tKFehDUQXIiCSAQkLGwsWneZ+GRE8Dc
+CwGjJXpwvBfmcQoNMLqZpZ8P8AdOUVjp7PIEkWJWSGcaa+RCrP4qhVwNv+ZloBbc
+XBNxCrftg2epupYOGvsq5ACX7u3nLbRfuKu3X+E0F7V/Qwmjfc9+WS50LouCMIx/
+TvVawMxytPaTUlQe45aNANW4reHWezQ=
+-----END CERTIFICATE-----

+ 74 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Configs/certificate.bat

@@ -0,0 +1,74 @@
+@echo off
+echo Configuring hosts file
+
+net session >nul 2>&1
+if %errorLevel% neq 0 (
+    echo Please run this script as an administrator
+    pause
+    exit /b
+)
+
+set "hostsFile=C:\Windows\System32\drivers\etc\hosts"
+set "newEntry=192.168.8.131 exam.habook.local"
+
+if not exist "%hostsFile%" (
+    echo hosts file does not exist:%hostsFile%
+    pause
+    exit /b
+)
+
+
+findstr /v /i /c:"exam.habook.local" "%hostsFile%" > "%hostsFile%.tmp"
+if %errorLevel% equ 0 (
+    move /y "%hostsFile%.tmp" "%hostsFile%" >nul 2>&1
+    echo Removed all entries containing exam.habook.local
+) else (
+    echo Failed to remove entries containing exam.habook.local
+    pause
+    exit /b
+)
+
+
+echo %newEntry% >> "%hostsFile%"
+if %errorLevel% equ 0 (
+    echo Hosts file configured successfully
+) else (
+    echo Hosts file configuration failed
+    pause
+    exit /b
+)
+
+:ImportCert
+echo Importing certificate
+
+if not exist "%~dp0certificate.cer" (
+    echo Certificate file does not exist:%~dp0certificate.cer
+    pause
+    exit /b
+)
+
+set "certSubject="
+for /f "tokens=*" %%i in ('certutil -dump "%~dp0certificate.cer" ^| findstr /i "CN="') do (
+    set "certSubject=%%i"
+)
+
+if defined certSubject (
+    echo Deleting existing certificate with the same name
+    certutil -delstore "Root" "%certSubject%"
+    if %errorLevel% equ 0 (
+        echo Existing certificate deleted successfully
+    ) else (
+        echo Failed to delete existing certificate (may not exist)
+    )
+)
+
+echo Importing new certificate
+certutil -addstore -f "Root" "%~dp0certificate.cer"
+if %errorLevel% equ 0 (
+    echo Certificate imported successfully
+) else (
+    echo Certificate import failed
+)
+
+echo All operations completed
+pause

BIN
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Configs/certificate.cer


+ 28 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Configs/key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDECXbubLJwQ6CI
+7Q4SiE9gNX/WtqKTzVC5TfjzlxoWjGzZRRcmhbTOQbRModWpUkZw1uDGdw3uCNOF
+EArLg9ItOuf0D188lWpGkHQSUmUGwKGF9fGlbOsWX/Ac7F2ZjPmtSOyCOrTN2Wh1
+JDbJYTRV1mEjpWohu/PXqsdePX0HWQpwZXOWfC5HG6qV0MQlJQPdRN56k8ZpJt2o
+jiuJRw5qSwQwQCCWXseqLFO/m0Hf9oonTD6fFkWKahx0D9cVchcw7UyUs/YIJyTU
+m/u+UAv9M/bbBCd8g2J9gOKxOax20W+rqGCQWCHfiUNf6agz3Yw9Hn+bkPgZCLoF
+i0Wk6gL7AgMBAAECggEABMSeKepm5KggbXQmlXjPRW3HsDc8+Q9TWU52MaaJMec0
+doxhpcQ2w5WBhyOgiL/BitkPGoSmyBVa36+mM5D/Oa5nGd6N2HFh5ll5GUD7yBBD
+XXi/6eAeT6sBshJlrGhrYjWV2w0GfMM+8SpyUq+UkEnoju9lB3EE20gCFV61fco3
+pK7en/hHCK0/jLDJYxEhEk5FMKA0BAUdsoD2WRVCnakCSaKRJzJEafL9CHQaL/oq
+pPVIYO3tx0ryNtdcLsc0j01rLMJ8n9lG59+3zAu5nCEVHYKO7oPuj8kpwdqxIj9J
+ZnSHX9ayJYNOdJDGD8zQYKhZQdquOYOAE9NnbINAMQKBgQD+OCf02IIuK4NcU1Ef
+wlx/sRjvCIWq39S1KNQ0kPtI4dWUNLI5DJqVQgylHIkVC/FNbTcaW1A6nVqukJfJ
+Nu3HrZoN+585QRKesTGNd45Zmwwy8JuV1OblV6SbI5xZ3g3S4SVkWnldOz36FThn
+wdHf2lg/unGzX4ojgYfuV1VpfwKBgQDFaPsd7Lo9oDUEZH4GDjk8onsIWwad6Nut
+3CCdBn3tiSlSAddVbZfu60VtM25CA9K1UbPsV1FU7ZYX1wKma019r1VqkwhPMWoq
+FsnhoHMOl69vV/3brjfHZDflbCMbMt/vYc91kRS7nVDAeqz5sDf4mJ7BSs70ZGth
+oAqHLQfMhQKBgQDhg71mRX5OKMmR6FMpwkg9+kNtIHk7GO5feoWs0AQqJjRKEekc
+FKM4zuvauJKeegaoMb9VATYNmTMtchVEKRcMMGNeDh20M5ap8fRMU4eS06khszHB
+26isQHBEM3XqfsJylMmP2XaaDwiuxY5Q9K4ST2ZDukhM3+7yCmEkPJMHTwKBgEEK
+DXIWhGW5Wr5PvZWRKhpoDdD67HsqNPZbCAO0F9kiz5JNOPzUVrJIoV8RCsqFJ+7F
+NFoxioJIpKLGHAFoaOd31NSADMTKqwei6nCDxGSSZSJyAxlVlNsEkcXsksRrRow/
+1XIOkp4dfnVr9YFuJYKqBeP5GaY7T4WijNVsaJ1hAoGAGQD8EyQXcfsaIEjaPQ65
+io+DloCFqwJd5EkCFPyv7Qz+5A9Jv6/RTznXSXtNBv+j6t7MG/o6A8ZX0ZR5UjuG
+WB/U87QpUokC+wzNTCdbDWaF/GvOU8lziksDrMMzrV8Yy+CVtGNiscAZyj6QJ1Am
+WrPltUEZoXxKkRRcmvNeti8=
+-----END PRIVATE KEY-----

+ 38 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/IndexController.cs

@@ -11,6 +11,7 @@ using System.IdentityModel.Tokens.Jwt;
 using IES.ExamServer.Services;
 using IES.ExamServer.DI;
 using IES.ExamLib.Models;
+using IES.ExamServer.Helpers;
 
 namespace IES.ExamServer.Controllers
 {
@@ -34,6 +35,43 @@ namespace IES.ExamServer.Controllers
             _connectionService=connectionService;
             _liteDBFactory=liteDBFactory;
         }
+        [HttpPost("generate-certificate")]
+        public async Task<IActionResult> GenerateCertificate(JsonNode json) 
+        {
+            try {
+                ServerDevice serverDevice = _memoryCache.Get<ServerDevice>(Constant._KeyServerDevice);
+                if (serverDevice!=null && serverDevice.networks.IsNotEmpty())
+                {
+                    string mac = $"{json["mac"]}";
+                    var network = serverDevice.networks.Find(x => mac.Equals(x.mac));
+                    if (network!=null)
+                    {
+                        string pathBat = Path.Combine(Directory.GetCurrentDirectory(), "Configs", "certificate.bat");
+                        string pathCer = Path.Combine(Directory.GetCurrentDirectory(), "Configs", "certificate.cer");
+                        string text = await System.IO.File.ReadAllTextAsync(pathBat);
+                        text = text.Replace("192.168.8.131", network.ip);
+                        string pathCertificateBat = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "package", "certificate.bat");
+                        await System.IO.File.WriteAllTextAsync(pathCertificateBat, text);
+                        string pathCertificateCer = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "package", "certificate.cer");
+                        System.IO.File.Copy(pathCer, pathCertificateCer);
+                        return Ok(new { code = 200, msg = "生成成功。", bat = "package/certificate.bat", cer = "package/certificate.cer" });
+                    }
+                    else
+                    {
+                        msg="未找到匹配的网卡设备。";
+                    }
+                }
+                else
+                {
+                    msg="服务端设备未找到,或网卡设备不存在。";
+                }
+            } catch (Exception ex) 
+            {
+                _logger.LogError($"生成证书和自定义域名映射脚本错误。{ex.Message},{ex.StackTrace}");
+                msg=$"服务端错误,{ex.Message}";
+            }
+            return Ok(new { code = 400, msg = msg });
+        }
         [HttpPost("list-schools")]
         public async Task<IActionResult> ListSchool(JsonNode json) 
         {

+ 6 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/IES.ExamServer.csproj

@@ -61,9 +61,15 @@
 	</ItemGroup>
 
 	<ItemGroup>
+	  <None Update="Configs\cert.pem">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </None>
 	  <None Update="Configs\cert.pfx">
 	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 	  </None>
+	  <None Update="Configs\key.pem">
+	    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+	  </None>
 	</ItemGroup>
 	<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build">
 		<!-- Build Target:  Ensure Node.js is installed -->

+ 5 - 5
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Program.cs

@@ -29,11 +29,11 @@ namespace IES.ExamServer
         public async static Task Main(string[] args)
         {
             Console.OutputEncoding = Encoding.UTF8;
-            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)||RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
-            { }
-            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
-            {
-            }
+            //if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)||RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+            //{ }
+            //else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+            //{
+            //}
 
             //
             //var mutex = new Mutex(true, "IES.ExamServer", out var createdNew);

+ 10 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/appsettings.Development.json

@@ -4,5 +4,15 @@
       "Default": "Information",
       "Microsoft.AspNetCore": "Warning"
     }
+  },
+  "Kestrel": {
+    "Endpoints": {
+      "Http": {
+        "Url": "https://*:6001"
+      },
+      "Https": {
+        "Url": "http://*:6000"
+      }
+    }
   }
 }

+ 5 - 4
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/appsettings.json

@@ -16,11 +16,12 @@
   "AllowedHosts": "*",
   "Kestrel": {
     "Endpoints": {
-      "Http": {
-        "Url": "https://*:6001"
-      },
       "Https": {
-        "Url": "http://*:6000"
+        "Url": "https://exam.habook.local:8001",
+        "Certificate": {
+          "Path": "Configs/cert.pem",
+          "KeyPath": "Configs/key.pem"
+        }
       }
     }
   },