CrazyIter_Bin 1 年之前
父節點
當前提交
149cf31a60

+ 4 - 2
TEAMModelBI/Tool/Extension/JwtAuth.cs

@@ -50,7 +50,8 @@ namespace TEAMModelBI.Models.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必须要大于 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必须要大于 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
@@ -93,7 +94,8 @@ namespace TEAMModelBI.Models.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必须要大于 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必须要大于 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 产出所需要的 JWT securityToken 物件,并取得序列化后的 Token 结果(字串格式)
             // 产出所需要的 JWT securityToken 物件,并取得序列化后的 Token 结果(字串格式)

+ 10 - 5
TEAMModelOS.SDK/Extension/JwtAuthExtension.cs

@@ -41,7 +41,8 @@ namespace TEAMModelOS.SDK.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
@@ -104,7 +105,8 @@ namespace TEAMModelOS.SDK.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
@@ -165,7 +167,8 @@ namespace TEAMModelOS.SDK.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
@@ -197,7 +200,8 @@ namespace TEAMModelOS.SDK.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
@@ -315,7 +319,8 @@ namespace TEAMModelOS.SDK.Extension
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
             // HmacSha256 有要求必须要大于 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // HmacSha256 有要求必须要大于 128 bits,所以 salt 不能太短,至少要 16 字元以上
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
             // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)

+ 10 - 7
TEAMModelOS.SDK/Models/Cosmos/School/Knowledge.cs

@@ -17,17 +17,15 @@ namespace TEAMModelOS.SDK.Models
         }
         }
         [Required(ErrorMessage = "owner 必须设置")]
         [Required(ErrorMessage = "owner 必须设置")]
         public string owner { get; set; }
         public string owner { get; set; }
-        
+
         public string scope { get; set; }
         public string scope { get; set; }
         /// <summary>
         /// <summary>
         /// 学段id
         /// 学段id
         /// </summary>
         /// </summary>
-       [Required(ErrorMessage = "periodId 必须设置")]
         public string periodId { get; set; }
         public string periodId { get; set; }
         /// <summary>
         /// <summary>
         /// 学科id
         /// 学科id
         /// </summary>
         /// </summary>
-        [Required(ErrorMessage = "subjectId 必须设置")]
         public string subjectId { get; set; }
         public string subjectId { get; set; }
         /// <summary>
         /// <summary>
         /// 知识点
         /// 知识点
@@ -37,12 +35,12 @@ namespace TEAMModelOS.SDK.Models
         /// 知识块
         /// 知识块
         /// </summary>
         /// </summary>
         public List<Block> blocks { get; set; } = new List<Block>();
         public List<Block> blocks { get; set; } = new List<Block>();
-        public List<PointNode> nodes { get; set; }= new List<PointNode>();
+        public List<PointNode> nodes { get; set; } = new List<PointNode>();
 
 
     }
     }
 
 
-    public class PointNode 
-    { 
+    public class PointNode
+    {
         public string id { get; set; }
         public string id { get; set; }
         public string name { get; set; }
         public string name { get; set; }
         public string pid { get; set; }
         public string pid { get; set; }
@@ -53,7 +51,12 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// <summary>
         /// 关联的资源数量
         /// 关联的资源数量
         /// </summary>
         /// </summary>
-        public long link {  get; set; }
+        public long link { get; set; }
+    }
+
+    public  class KnowledgeTreeDto
+    {
+        
     }
     }
     public class PointTree 
     public class PointTree 
     {
     {

+ 46 - 0
TEAMModelOS/Controllers/Both/KnowledgeController.cs

@@ -0,0 +1,46 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Filter;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.DI;
+
+namespace TEAMModelOS.Controllers.Both
+{
+    [ProducesResponseType(StatusCodes.Status200OK)]
+    [ProducesResponseType(StatusCodes.Status400BadRequest)]
+
+    [Route("knowledge")]
+    [ApiController]
+    public class KnowledgeController : ControllerBase
+    {
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+        private readonly AzureRedisFactory _azureRedis;
+        private readonly HttpTrigger _httpTrigger;
+        public KnowledgeController(HttpTrigger httpTrigger, AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId, DingDing dingDing, IOptionsSnapshot<Option> option, AzureRedisFactory azureRedis)
+        {
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
+            _dingDing = dingDing;
+            _option = option?.Value;
+            _azureRedis = azureRedis;
+            _httpTrigger = httpTrigger;
+        }
+        [ProducesDefaultResponseType]
+        [HttpPost("upsert-knowledge")]
+        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
+        public async Task<IActionResult> UpsertKnowledge(JsonElement json) 
+        {
+
+
+            return Ok();
+        }
+    }
+}

+ 13 - 1
TEAMModelOS/Controllers/Both/PaperController.cs

@@ -249,9 +249,13 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <param name="request"></param>
         /// <returns></returns>
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [ProducesDefaultResponseType]
-        //[AuthToken(Roles = "teacher")]
+       
         [HttpPost("upsert")]
         [HttpPost("upsert")]
+#if !DEBUG
+
+        [AuthToken(Roles = "teacher")]
         [Authorize(Roles = "IES")]
         [Authorize(Roles = "IES")]
+#endif
         public async Task<IActionResult> Upsert(JsonElement request)
         public async Task<IActionResult> Upsert(JsonElement request)
         {
         {
             var client = _azureCosmos.GetCosmosClient();
             var client = _azureCosmos.GetCosmosClient();
@@ -280,6 +284,14 @@ namespace TEAMModelOS.Controllers
             }
             }
             else  
             else  
             {
             {
+                string tbname = paper.scope.Equals("private") ? "Teacher" : "School";
+                QueryDefinition query = new QueryDefinition(@"select * from  c where c.name=@name").WithParameter("@name", paper.name);
+                List<Paper> papers = new List<Paper>();
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, tbname).GetItemQueryIterator<Paper>(query, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey(paper.code) }))
+                {
+                    papers.Add(item);
+                }
+                await client.GetContainer(Constant.TEAMModelOS, tbname).DeleteItemsStreamAsync(papers.Select(x => x.id).ToList(), paper.code);
                 if (paper.scope.Equals("private"))
                 if (paper.scope.Equals("private"))
                 {
                 {
                     paper = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(paper, paper.id, new PartitionKey($"{paper.code}"));
                     paper = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(paper, paper.id, new PartitionKey($"{paper.code}"));

+ 2 - 1
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -2906,7 +2906,8 @@ namespace TEAMModelOS.Controllers
                 { JwtRegisteredClaimNames.Website,website?.route},
                 { JwtRegisteredClaimNames.Website,website?.route},
             };
             };
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_option.JwtSecretKey));
             var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_option.JwtSecretKey));
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            //var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
             var header = new JwtHeader(signingCredentials);
             var header = new JwtHeader(signingCredentials);
             var secToken = new JwtSecurityToken(header, payload);
             var secToken = new JwtSecurityToken(header, payload);
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
             // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)

+ 9 - 1
TEAMModelOS/Controllers/School/KnowledgesController.cs

@@ -47,7 +47,6 @@ namespace TEAMModelOS.Controllers
             _httpTrigger = httpTrigger;
             _httpTrigger = httpTrigger;
         }
         }
 
 
-
         /**
         /**
          * 
          * 
          {
          {
@@ -84,6 +83,15 @@ namespace TEAMModelOS.Controllers
             ]
             ]
         }
         }
          */
          */
+
+
+
+
+        /// <summary>
+        /// 废弃
+        /// </summary>
+        /// <param name="knowledge"></param>
+        /// <returns></returns>
         [ProducesDefaultResponseType]
         [ProducesDefaultResponseType]
         [HttpPost("upsert")]
         [HttpPost("upsert")]
         [Authorize(Roles = "IES")]
         [Authorize(Roles = "IES")]