huanghb 5 months ago
parent
commit
8207d086e8

+ 39 - 28
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/ManageController.cs

@@ -75,10 +75,10 @@ namespace IES.ExamServer.Controllers
             {
                 predicate= predicate.And(x => x.id!.Equals(evaluationId));
             }
-            IEnumerable<EvaluationClient> evaluationClients = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Find(predicate);
+            IEnumerable<EvaluationClient>? evaluationClients = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Find(predicate);
             EvaluationClient? evaluationLocal = null;
             EvaluationClient? evaluationCloud = null;
-            if (evaluationClients.Count()>0)
+            if (evaluationClients!=null && evaluationClients.Count()>0)
             {
                 evaluationLocal= evaluationClients.First();
             }
@@ -88,22 +88,25 @@ namespace IES.ExamServer.Controllers
             {
                 if (  _connectionService.dataCenterIsConnected)
                 {
-                    Teacher teacher=  _liteDBFactory.GetLiteDatabase().GetCollection<Teacher>().FindOne(x => x.id!.Equals(token.id));
-                    string? CenterUrl = _configuration.GetValue<string>("ExamServer:CenterUrl");
-                    var client = _httpClientFactory.CreateClient();
-                    if (client.DefaultRequestHeaders.Contains(Constant._X_Auth_AuthToken)) 
+                    Teacher? teacher=  _liteDBFactory.GetLiteDatabase().GetCollection<Teacher>().FindOne(x => x.id!.Equals(token.id));
+                    if (teacher != null) 
                     {
-                        client.DefaultRequestHeaders.Remove(Constant._X_Auth_AuthToken);
-                    }
-                    client.DefaultRequestHeaders.Add(Constant._X_Auth_AuthToken, teacher.x_auth_token);
-                    HttpResponseMessage message = await client.PostAsJsonAsync($"{CenterUrl}/evaluation-sync/find-sync-info",new { shortCode, evaluationId });
-                    if (message.IsSuccessStatusCode) 
-                    {
-                        string content = await message.Content.ReadAsStringAsync();
-                        JsonNode? jsonNode =content.ToObject<JsonNode>();
-                        if (jsonNode!=null) 
+                        string? CenterUrl = _configuration.GetValue<string>("ExamServer:CenterUrl");
+                        var client = _httpClientFactory.CreateClient();
+                        if (client.DefaultRequestHeaders.Contains(Constant._X_Auth_AuthToken))
                         {
-                            evaluationCloud=jsonNode["evaluation"]?.ToObject<EvaluationClient>(); 
+                            client.DefaultRequestHeaders.Remove(Constant._X_Auth_AuthToken);
+                        }
+                        client.DefaultRequestHeaders.Add(Constant._X_Auth_AuthToken, teacher.x_auth_token);
+                        HttpResponseMessage message = await client.PostAsJsonAsync($"{CenterUrl}/evaluation-sync/find-sync-info", new { shortCode, evaluationId });
+                        if (message.IsSuccessStatusCode)
+                        {
+                            string content = await message.Content.ReadAsStringAsync();
+                            JsonNode? jsonNode = content.ToObject<JsonNode>();
+                            if (jsonNode != null)
+                            {
+                                evaluationCloud = jsonNode["evaluation"]?.ToObject<EvaluationClient>();
+                            }
                         }
                     }
                 }
@@ -366,7 +369,7 @@ namespace IES.ExamServer.Controllers
             string shortCode = $"{json["shortCode"]}";
             if (!string.IsNullOrWhiteSpace(id) && !string.IsNullOrWhiteSpace(shortCode)) 
             {
-                EvaluationClient evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindOne(x => x.id!.Equals(id) && !string.IsNullOrWhiteSpace(x.shortCode) && x.shortCode.Equals(shortCode));
+                EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindOne(x => x.id!.Equals(id) && !string.IsNullOrWhiteSpace(x.shortCode) && x.shortCode.Equals(shortCode));
                 if (evaluationClient != null)
                 {
 
@@ -383,21 +386,29 @@ namespace IES.ExamServer.Controllers
         public IActionResult ListLocalEvaluation(JsonNode json) 
         {
 
-            IEnumerable<EvaluationClient> evaluationClients = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindAll().OrderByDescending(x=>x.activate).ThenByDescending(x=>x.stime);
-            var result = evaluationClients.Select(client =>
+            IEnumerable<EvaluationClient>? evaluationClients = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindAll().OrderByDescending(x=>x.activate).ThenByDescending(x=>x.stime);
+
+            if (evaluationClients != null)
             {
-                var properties = client.GetType().GetProperties();
-                var anonymousObject = new Dictionary<string, object?>();
-                foreach (var property in properties)
+                var result = evaluationClients.Select(client =>
                 {
-                    if (!property.Name .Equals("password")  && !property.Name.Equals("shortCode"))
+                    var properties = client.GetType().GetProperties();
+                    var anonymousObject = new Dictionary<string, object?>();
+                    foreach (var property in properties)
                     {
-                        anonymousObject[property.Name] = property.GetValue(client);
+                        if (!property.Name.Equals("password") && !property.Name.Equals("shortCode"))
+                        {
+                            anonymousObject[property.Name] = property.GetValue(client);
+                        }
                     }
-                }
-                return anonymousObject;
-            });
-            return Ok(new {code=200, evaluation= result });
+                    return anonymousObject;
+                });
+                return Ok(new { code = 200, evaluation = result });
+            }
+            else {
+                return Ok(new { code = 200, evaluation = new Dictionary<string, object?>() });
+            }
+            
         }
     }
 }

+ 1 - 10
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/DI/LiteDBFactory.cs

@@ -30,16 +30,7 @@ namespace IES.ExamServer.DI
 
         public LiteDatabase GetLiteDatabase(string name = "Master")
         {
-            try
-            {
-                var DB = LiteDatabases.GetOrAdd(name, x => new LiteDatabase(_optionsMonitor.Get(name).Connectionstring));
-                return DB;
-            }
-            catch (Exception e)
-            {
-                _logger?.LogWarning(e, e.Message);
-                return null;
-            }
+            return LiteDatabases.GetOrAdd(name, x => new LiteDatabase(_optionsMonitor.Get(name).Connectionstring));
         }
     }
     public class LiteDBFactoryOptions

+ 1 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Helpers/FileHelper.cs

@@ -8,7 +8,7 @@
         /// <param name="directoryPath"></param>
         /// <param name="filter">获取指定匹配模式的文件,如后缀, local.json</param>
         /// <returns></returns>
-        public static List<string> ListAllFiles(string directoryPath, string filter = null)
+        public static List<string> ListAllFiles(string directoryPath, string? filter = null)
         {
             List<string> filePaths = new List<string>();
             DirectoryInfo dirInfo = new DirectoryInfo(directoryPath);

+ 19 - 19
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Helpers/HttpContextExtensions.cs

@@ -19,7 +19,7 @@ namespace IES.ExamServer
         /// <typeparam name="TAttribute"></typeparam>
         /// <param name="httpContext"></param>
         /// <returns></returns>
-        public static TAttribute GetMetadata<TAttribute>(this HttpContext httpContext)
+        public static TAttribute? GetMetadata<TAttribute>(this HttpContext httpContext)
             where TAttribute : class
         {
             return httpContext.GetEndpoint()?.Metadata?.GetMetadata<TAttribute>();
@@ -29,7 +29,7 @@ namespace IES.ExamServer
         /// </summary>
         /// <param name="httpContext"></param>
         /// <returns></returns>
-        public static ControllerActionDescriptor GetControllerActionDescriptor(this HttpContext httpContext)
+        public static ControllerActionDescriptor? GetControllerActionDescriptor(this HttpContext httpContext)
         {
             return httpContext.GetEndpoint()?.Metadata?.FirstOrDefault(u => u is ControllerActionDescriptor) as ControllerActionDescriptor;
         }
@@ -38,7 +38,7 @@ namespace IES.ExamServer
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public static string GetLocalIpAddressToIPv4(this HttpContext context)
+        public static string? GetLocalIpAddressToIPv4(this HttpContext context)
         {
             return context.Connection.LocalIpAddress?.MapToIPv4()?.ToString();
         }
@@ -48,7 +48,7 @@ namespace IES.ExamServer
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public static string GetLocalIpAddressToIPv6(this HttpContext context)
+        public static string? GetLocalIpAddressToIPv6(this HttpContext context)
         {
             return context.Connection.LocalIpAddress?.MapToIPv6()?.ToString();
         }
@@ -58,7 +58,7 @@ namespace IES.ExamServer
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public static string GetRemoteIpAddressToIPv4(this HttpContext context)
+        public static string? GetRemoteIpAddressToIPv4(this HttpContext context)
         {
             return context.Connection.RemoteIpAddress?.MapToIPv4()?.ToString();
         }
@@ -68,7 +68,7 @@ namespace IES.ExamServer
         /// </summary>
         /// <param name="context"></param>
         /// <returns></returns>
-        public static string GetRemoteIpAddressToIPv6(this HttpContext context)
+        public static string? GetRemoteIpAddressToIPv6(this HttpContext context)
         {
             return context.Connection.RemoteIpAddress?.MapToIPv6()?.ToString();
         }
@@ -107,7 +107,7 @@ namespace IES.ExamServer
         /// <param name="httpContext"></param>
         /// <remarks>需先在 Startup 的 Configure 中注册 app.EnableBuffering()</remarks>
         /// <returns></returns>
-        public static async Task<string> ReadBodyContentAsync(this HttpContext httpContext)
+        public static async Task<string?> ReadBodyContentAsync(this HttpContext httpContext)
         {
             if (httpContext == null) return default;
             return await httpContext.Request.ReadBodyContentAsync();
@@ -174,7 +174,7 @@ namespace IES.ExamServer
         /// <summary>
         /// 取得遠端呼叫的IP
         /// </summary>        
-        public static string GetRemoteIP(this HttpContext httpContext)
+        public static string? GetRemoteIP(this HttpContext httpContext)
         {
             return httpContext?.Connection?.RemoteIpAddress?.ToString();
         }
@@ -184,7 +184,7 @@ namespace IES.ExamServer
         /// </summary>        
         /// <param name="key">Key Name</param>
         /// <returns></returns>
-        public static string GetXAuth(this HttpContext httpContext, string key = null)
+        public static string? GetXAuth(this HttpContext httpContext, string? key = null)
         {
             try
             {
@@ -203,7 +203,7 @@ namespace IES.ExamServer
         /// </summary>        
         /// <param name="key">Key Name</param>
         /// <returns></returns>
-        public static string GetAuthorization(this HttpContext httpContext)
+        public static string? GetAuthorization(this HttpContext httpContext)
         {
             try
             {
@@ -222,9 +222,9 @@ namespace IES.ExamServer
         /// </summary>        
         /// <param name="key">Key Name</param>
         /// <returns></returns>
-        public static (string id, string school) GetApiTokenInfo(this HttpContext httpContext, string key = null)
+        public static (string? id, string? school) GetApiTokenInfo(this HttpContext httpContext, string? key = null)
         {
-            object id = null, school = null;
+            object? id = null, school = null;
             httpContext?.Items.TryGetValue("ID", out id);
             httpContext?.Items.TryGetValue("School", out school);
             return (id?.ToString(), school?.ToString());
@@ -234,9 +234,9 @@ namespace IES.ExamServer
         /// </summary>        
         /// <param name="key">Key Name</param>
         /// <returns></returns>
-        public static (string id, string name, string picture, string school) GetAuthTokenInfo(this HttpContext httpContext, string key = null)
+        public static (string? id, string? name, string? picture, string? school) GetAuthTokenInfo(this HttpContext httpContext, string? key = null)
         {
-            object id = null, name = null, picture = null, school = null;
+            object? id = null, name = null, picture = null, school = null;
             httpContext?.Items.TryGetValue("ID", out id);
             httpContext?.Items.TryGetValue("Name", out name);
             httpContext?.Items.TryGetValue("Picture", out picture);
@@ -249,9 +249,9 @@ namespace IES.ExamServer
         /// </summary>        
         /// <param name="key">Key Name</param>
         /// <returns></returns>
-        public static (string id, string name, string picture, string school, string area, string keyData) GetAuthTokenKey(this HttpContext httpContext, string key = null)
+        public static (string? id, string? name, string? picture, string? school, string? area, string? keyData) GetAuthTokenKey(this HttpContext httpContext, string key = null)
         {
-            object id = null, name = null, picture = null, school = null, area = null, keyData = null;
+            object? id = null, name = null, picture = null, school = null, area = null, keyData = null;
             httpContext?.Items.TryGetValue("ID", out id);
             httpContext?.Items.TryGetValue("Name", out name);
             httpContext?.Items.TryGetValue("Picture", out picture);
@@ -266,7 +266,7 @@ namespace IES.ExamServer
         /// <summary>
         /// 取得User-Agent值
         /// </summary>       
-        public static string GetUserAgent(this HttpContext httpContext)
+        public static string? GetUserAgent(this HttpContext httpContext)
         {
             try
             {
@@ -281,7 +281,7 @@ namespace IES.ExamServer
         /// <summary>
         /// 取得Scheme值
         /// </summary>      
-        public static string GetScheme(this HttpContext httpContext)
+        public static string? GetScheme(this HttpContext httpContext)
         {
             return httpContext?.Request?.Scheme;
         }
@@ -289,7 +289,7 @@ namespace IES.ExamServer
         /// <summary>
         /// 取得HostName值
         /// </summary>        
-        public static string GetHostName(this HttpContext httpContext)
+        public static string? GetHostName(this HttpContext httpContext)
         {
             return httpContext?.Request?.Host.ToString();
         }

+ 1 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Helpers/JwtAuthExtension.cs

@@ -33,7 +33,7 @@ namespace IES.ExamServer
         }
 
 
-        public static string CreateAuthToken(string issuer, string id, string name, string picture, string salt, string scope,   int timezone,   string schoolID =null,string[] roles = null,   int expire = 1, int year = -1)
+        public static string CreateAuthToken(string issuer, string id, string name, string picture, string salt, string scope,   int timezone,   string? schoolID =null,string[]? roles = null,   int expire = 1, int year = -1)
         {
             // 設定要加入到 JWT Token 中的聲明資訊(Claims)  
             var payload = new JwtPayload {

+ 1 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Services/IndexService.cs

@@ -231,7 +231,7 @@ namespace IES.ExamServer.Services
             if (_url!.IsNotEmpty())
             {
                 List<UriInfo> ports = new List<UriInfo>();
-                foreach (var url in _url)
+                foreach (var url in _url!)
                 {
                     Uri uri = new Uri(url);
                     device.uris.Add(new UriInfo { port= uri.Port, protocol= uri.Scheme });