소스 검색

調整代碼

JAELYS 4 년 전
부모
커밋
35554500a6

+ 20 - 18
TEAMModelOS.SDK/DI/AzureStorage/AzureStorageFactory.cs

@@ -35,7 +35,7 @@ namespace TEAMModelOS.SDK.DI
         }
 
         public BlobServiceClient GetBlobServiceClient(string name = "Default")
-        {            
+        {
             try
             {
                 var options = _optionsMonitor.Get(name);
@@ -50,7 +50,7 @@ namespace TEAMModelOS.SDK.DI
         }
 
         public BlobContainerClient GetBlobContainerClient(string containerName, string name = "Default")
-        {            
+        {
             try
             {
                 var options = _optionsMonitor.Get(name);
@@ -62,9 +62,9 @@ namespace TEAMModelOS.SDK.DI
                 return null;
             }
         }
-        
+
         public BlobBatchClient GetBlobBatchClient(string name = "Default")
-        {           
+        {
             try
             {
                 var options = _optionsMonitor.Get(name);
@@ -85,7 +85,7 @@ namespace TEAMModelOS.SDK.DI
         /// <param name="blobContainerSasPermissions">權限(可多選)Flags</param>
         /// <param name="name"></param>
         /// <returns></returns>
-        public (string uri ,string sas) GetBlobContainerSAS(string containerName, BlobContainerSasPermissions blobContainerSasPermissions, string name = "Default")
+        public (string uri, string sas) GetBlobContainerSAS(string containerName, BlobContainerSasPermissions blobContainerSasPermissions, string name = "Default")
         {
             try
             {
@@ -154,11 +154,13 @@ namespace TEAMModelOS.SDK.DI
                     BlobContainerName = containerName
                 };
                 BlobContainerSasPermissions blobContainerSasPermissions = BlobContainerSasPermissions.Read;
-                if (isRead) {
+                if (isRead)
+                {
                     blobContainerSasPermissions = BlobContainerSasPermissions.Read;
                 }
-                else {
-                    blobContainerSasPermissions = BlobContainerSasPermissions.Delete| BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Create | BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List;
+                else
+                {
+                    blobContainerSasPermissions = BlobContainerSasPermissions.Delete | BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Create | BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List;
                 }
                 blobSasBuilder.SetPermissions(blobContainerSasPermissions);
                 var sskc = new StorageSharedKeyCredential(accountname, accountkey);
@@ -170,12 +172,12 @@ namespace TEAMModelOS.SDK.DI
                     Path = containerName
                     //Query = sasQueryParameters.ToString()
                 };
-                return new BlobAuth { url = fullUri.Uri.ToString().Replace(fullUri.Uri.LocalPath,""), sas = sasQueryParameters.ToString(), timeout = time, name = containerName };
-               // return (fullUri.Uri.ToString(), sasQueryParameters.ToString());
+                return new BlobAuth { url = fullUri.Uri.ToString().Replace(fullUri.Uri.LocalPath, ""), sas = sasQueryParameters.ToString(), timeout = time, name = containerName };
+                // return (fullUri.Uri.ToString(), sasQueryParameters.ToString());
             }
             catch
             {
-                return   null ;
+                return null;
             }
         }
 
@@ -232,7 +234,7 @@ namespace TEAMModelOS.SDK.DI
         /// <param name="blobSasPermissions"></param>
         /// <param name="name"></param>
         /// <returns></returns>
-        public BlobAuth GetBlobSasUriRead(string containerName, string blobName,string name = "Default")
+        public BlobAuth GetBlobSasUriRead(string containerName, string blobName, string name = "Default")
         {
             try
             {
@@ -240,7 +242,7 @@ namespace TEAMModelOS.SDK.DI
                 var accountname = keys["AccountName"];
                 var accountkey = keys["AccountKey"];
                 var endpoint = keys["EndpointSuffix"];
-                DateTimeOffset dateTime = DateTimeOffset.UtcNow.Add(new TimeSpan(365*99, 0, 15, 0));
+                DateTimeOffset dateTime = DateTimeOffset.UtcNow.Add(new TimeSpan(365 * 99, 0, 15, 0));
                 long time = dateTime.ToUnixTimeMilliseconds();
                 var blobSasBuilder = new BlobSasBuilder
                 {
@@ -261,7 +263,7 @@ namespace TEAMModelOS.SDK.DI
                     Query = sasQueryParameters.ToString()
                 };
                 return new BlobAuth { url = fullUri.Uri.ToString(), sas = sasQueryParameters.ToString(), timeout = time };
-               // return fullUri.Uri.ToString();
+                // return fullUri.Uri.ToString();
             }
             catch
             {
@@ -270,7 +272,7 @@ namespace TEAMModelOS.SDK.DI
         }
 
         public CloudTableClient GetCloudTableClient(string name = "Default")
-        {            
+        {
             try
             {
                 var options = _optionsMonitor.Get(name);
@@ -284,7 +286,7 @@ namespace TEAMModelOS.SDK.DI
             }
         }
 
-       
+
 
         /// <summary>
         /// 可讓您管理儲存體帳戶中的所有佇列
@@ -292,7 +294,7 @@ namespace TEAMModelOS.SDK.DI
         /// <param name="name"></param>
         /// <returns></returns>
         public QueueServiceClient GetQueueServiceClient(string name = "Default")
-        {            
+        {
             try
             {
                 var options = _optionsMonitor.Get(name);
@@ -325,7 +327,7 @@ namespace TEAMModelOS.SDK.DI
                 return null;
             }
         }
-        public  async Task<CloudTable> InitializeTable<T>()
+        public async Task<CloudTable> InitializeTable<T>()
         {
             string TableName = GetTableSpace<T>();
             CloudTable cloudTable = GetCloudTableClient().GetTableReference(TableName);

+ 5 - 0
TEAMModelOS.SDK/Extension/Utils.cs

@@ -75,6 +75,11 @@ namespace TEAMModelOS.SDK.Extension
             return value;
         }        
 
+        /// <summary>
+        /// 剖析連接字串
+        /// </summary>
+        /// <param name="connectionString"></param>
+        /// <returns></returns>
         public static Dictionary<string, string> ParseConnectionString(string connectionString)
         {
             var d = new Dictionary<string, string>();

+ 35 - 59
TEAMModelOS/Controllers/School/StudentController.cs

@@ -1893,94 +1893,70 @@ namespace TEAMModelOS.Controllers
                 //參數取得
                 if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
                 if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
-                if (!request.TryGetProperty("pw", out JsonElement pw)) return BadRequest();
+                if (!request.TryGetProperty("pw", out JsonElement pw)) return BadRequest();  
 
-                int error = 0;              
-                string auth_token = "";
-                string blob_uri = string.Empty;
-                string blob_sas = string.Empty;
-                dynamic classinfo = new ExpandoObject();
-                bool classExistFlg = false;
-                List<object> courses = new List<object>();
-
-                var response = await client.GetContainer("TEAMModelOS", "Student").ReadItemStreamAsync(id.GetString(), new PartitionKey($"Base-{school_code.ToString().ToLower()}"));
+                var response = await client.GetContainer("TEAMModelOS", "Student").ReadItemStreamAsync(id.GetString(), new PartitionKey($"Base-{school_code.GetString().ToLower()}"));
                 if (response.Status == 200)
                 {
-                    var json = await JsonDocument.ParseAsync(response.ContentStream);
-                    json.RootElement.TryGetProperty("salt", out JsonElement salt);
-                    json.RootElement.TryGetProperty("pw", out JsonElement dbpw);
-                    json.RootElement.TryGetProperty("name", out JsonElement name);
-                    json.RootElement.TryGetProperty("picture", out JsonElement picture); 
+                    var rjson = await JsonDocument.ParseAsync(response.ContentStream);
+                    rjson.RootElement.TryGetProperty("salt", out JsonElement salt);
+                    rjson.RootElement.TryGetProperty("pw", out JsonElement dbpw);
+                    rjson.RootElement.TryGetProperty("name", out JsonElement name);
+                    rjson.RootElement.TryGetProperty("picture", out JsonElement picture);                    
 
                     var HashedPW = Utils.HashedPassword(pw.ToString(), salt.ToString());
-                    if (dbpw.ToString().Equals(HashedPW.ToString()))
+                    if (HashedPW.Equals(dbpw.GetString()))
                     {
-                        //BLOB(學校,唯讀)
-                        string school_code_blob = school_code.GetString().ToLower();
-                        string blobPath = $"{school_code_blob}/student/{id}";
-                        (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(blobPath, BlobContainerSasPermissions.Read);
-                        //所屬班級資訊
+                        string classid = string.Empty;
+                        object classinfo = null;
+                        List<object> courses = new List<object>();
+                        //去學校找出所屬校本預設班級信息
                         var query = $"SELECT c.code, c.id, c.name, c.periodId, c.gradeId FROM c JOIN cs IN c.students WHERE cs.id = '{id}'";
-                        await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school_code}") }))
+                        var school = client.GetContainer("TEAMModelOS", "School");
+                        await foreach (var item in school.GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school_code}") }))
                         {
-                            var jsoncm = await JsonDocument.ParseAsync(item.ContentStream);
-                            if (jsoncm.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                            using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                            if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                             {
-                                foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
+                                foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
                                 {
-                                    classinfo = obj.ToObject<object>();
-                                    classExistFlg = true;
+                                    classid = obj.GetProperty("id").GetString();
+                                    classinfo = obj.ToObject<object>();                                    
                                 }
                             }
                         }
-
-                        //換取AuthToken,提供給前端
-                        auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, id.GetString(), name.GetString(), picture.GetString(), _option.JwtSecretKey, schoolID: school_code.GetString(), roles: new[] { "student" });
-
-                        //所屬班級的課程列表
-                        if (classExistFlg)
+                        //找出所屬班級的課程列表                                    
+                        var queryc = $"SELECT VALUE cc.course FROM c JOIN cc IN c.courses WHERE c.id = '{classid}'";
+                        await foreach (var item in school.GetItemQueryStreamIterator(queryText: queryc, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"CourseManagement-{school_code}") }))
                         {
-                            string classId = classinfo.GetProperty("id").ToString();
-                            var queryc = $"SELECT VALUE cc.course FROM c JOIN cc IN c.courses WHERE c.id = '{classId}'";
-                            await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: queryc, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"CourseManagement-{school_code}") }))
+                            using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                            if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                             {
-                                using var jsoncm = await JsonDocument.ParseAsync(item.ContentStream);
-                                if (jsoncm.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                                foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
                                 {
-                                    foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
-                                    {
-                                        courses.Add(obj.ToObject<object>());
-                                    }
+                                    courses.Add(obj.ToObject<object>());
                                 }
                             }
                         }
-                        else
-                        {
-                            classinfo = null;
-                        }
+                        // BLOB(學校,唯讀)
+                        var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(school_code.GetString().ToLower(), BlobContainerSasPermissions.Read);
+                        //換取AuthToken,提供給前端
+                        var auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, id.GetString(), name.GetString(), picture.GetString(), _option.JwtSecretKey, schoolID: school_code.GetString(), roles: new[] { "student" });
+                        return Ok(new { auth_token, blob_uri, blob_sas, classinfo, courses });
                     }
                     else
                     {
-                        error = 1;
+                        return Ok(new { error = 1, message = "账号或密码错误" });
                     }
                 }
                 else
                 {
-                    error = 1;
-                }
-
-                if (error > 0)
-                {
-                    return Ok(new { error, message = "账号或密码错误" });
-                }
-                else
-                {
-                    return Ok(new { error, auth_token, blob_uri, blob_sas, classinfo, courses });
-                }
+                    return Ok(new { error = 2, message = "無此帳號存在" });
+                }                
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"student/login,{_option.Location},hiteach/GetTeacherInfo()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
+                await _dingDing.SendBotMsg($"IES5,{_option.Location},student/login()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
                 return BadRequest();
             }
         }

+ 1 - 1
TEAMModelOS/Controllers/Teacher/InitController.cs

@@ -151,7 +151,7 @@ namespace TEAMModelOS.Controllers
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"CoreAPI2,{_option.Location},hiteach/GetTeacherInfo()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
+                await _dingDing.SendBotMsg($"IES5,{_option.Location},Teacher/GetTeacherInfo()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
                 return BadRequest();
             }
         }