CrazyIter_Bin 1 năm trước cách đây
mục cha
commit
b7782c9029

+ 4 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/Activity.cs

@@ -85,6 +85,7 @@ namespace TEAMModelOS.SDK.Models
         /// 0未发布,1已发布,2.已结束
         /// </summary>
         public int publish { get; set; }
+        public string sas { get; set; }
     }
 
 
@@ -478,6 +479,9 @@ namespace TEAMModelOS.SDK.Models
     
     public class ActivityExpert : CosmosEntity
     {
+        /// <summary>
+        /// 活动id
+        /// </summary>
         public ActivityExpert() {
             pk="ActivityExpert";
             code="ActivityExpert";

+ 3 - 1
TEAMModelOS.SDK/Models/Service/Common/ActivityService.cs

@@ -1,4 +1,5 @@
-using HTEXLib.COMM.Helpers;
+using Azure.Storage.Blobs.Models;
+using HTEXLib.COMM.Helpers;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -7,6 +8,7 @@ using System.Threading.Tasks;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
+using TEAMModelOS.Services;
 
 namespace TEAMModelOS.SDK
 {

+ 2 - 3
TEAMModelOS.SDK/Models/Service/Common/TeacherService.cs

@@ -30,9 +30,10 @@ namespace TEAMModelOS.Services
 {
     public static class TeacherService
     {
-        public static async Task<TeacherInfo> TeacherInfoLite(AzureCosmosFactory _azureCosmos, Teacher teacher, string name, string picture, string id,
+        public static async Task<TeacherInfo> TeacherInfoLite(AzureCosmosFactory _azureCosmos,  string name, string picture, string id,
            AzureStorageFactory _azureStorage, Option _option, AzureRedisFactory _azureRedis, string ip, HttpTrigger _httpTrigger, string lang)
         {
+            Teacher teacher = null;
             string defaultschool = null;
             //TODO 取得Teacher 個人相關數據(課程清單、虛擬教室清單、歷史紀錄清單等),學校數據另外API處理,多校切換時不同
             var client = _azureCosmos.GetCosmosClient();
@@ -179,7 +180,6 @@ namespace TEAMModelOS.Services
             List<string> roles = new List<string>() { "teacher" };
            
             //換取AuthToken,提供給前端
-            var auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, id, name?.ToString(), picture?.ToString(), _option.JwtSecretKey, Website: "IES", scope: Constant.ScopeTeacher, standard: "", roles: roles.ToArray(), expire: 1);
 
             //用户在线记录
             try
@@ -194,7 +194,6 @@ namespace TEAMModelOS.Services
             var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(id, BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List | BlobContainerSasPermissions.Delete);
             return new TeacherInfo
             {
-                auth_token = auth_token,
                 blob_uri = blob_uri,
                 blob_sas = blob_sas,
                 defaultschool = defaultschool,

+ 90 - 6
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -33,6 +33,10 @@ using TEAMModelOS.SDK.Models.Service;
 using DocumentFormat.OpenXml.Office2010.Excel;
 using TEAMModelOS.Services;
 using OfficeOpenXml.FormulaParsing.LexicalAnalysis;
+using Azure.Storage.Sas;
+using DocumentFormat.OpenXml.Bibliography;
+using System.Runtime.Intrinsics.X86;
+using Microsoft.IdentityModel.Tokens;
 
 namespace TEAMModelOS.Controllers
 {
@@ -543,6 +547,10 @@ namespace TEAMModelOS.Controllers
                             }
                             string sql = $"select value c from c where c.owner='{_areaId}' {yearSql}  ";
                             var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sql, "Activity");
+                            result.list.ForEach(z => {
+                                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner,  BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                                z.sas=blob_sas;
+                            });
                             return Ok(new { activities = result.list.OrderByDescending(z => z.stime) });
                         }
                     //校级活动列表
@@ -628,6 +636,10 @@ namespace TEAMModelOS.Controllers
                                     var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
                                     activities.AddRange(resultSchool.list);
                                 }
+                                activities.ForEach(z => {
+                                    var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                                    z.sas=blob_sas;
+                                });
                                 return Ok(new { activities = activities.OrderByDescending(z => z.stime) });
                             }
                             break;
@@ -670,7 +682,7 @@ namespace TEAMModelOS.Controllers
 
                                 if (!string.IsNullOrWhiteSpace(schoolIdIn))
                                 {   //部分学校
-                                    string sqlSchool = $"select value c from c join i in c.confirmedSchools  where c.scope='public' and c.joinMode='enroll'  and (c.publish=1 or c.publish=2 )  and s.status=1 {yearSql}  {schoolIdIn}  ";
+                                    string sqlSchool = $"select value c from c join i in c.confirmedSchools  where c.scope='public' and c.joinMode='enroll'  and (c.publish=1 or c.publish=2 )  and i.status=1 {yearSql}  {schoolIdIn}  ";
                                     var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
                                     activities.AddRange(resultSchool.list);
                                 }
@@ -686,7 +698,7 @@ namespace TEAMModelOS.Controllers
                             //获取所有区级的
                             if (!string.IsNullOrWhiteSpace(areaOwnerIn) && !string.IsNullOrEmpty(schoolIdIn)) {
                                 
-                                string sqlOpen = $"select value c from c join i  in c.confirmedSchools where c.scope='area'  and c.joinMode='enroll' and (c.publish=1 or c.publish=2 ) and s.status=1 {yearSql}  {areaOwnerIn}   {schoolIdIn} ";
+                                string sqlOpen = $"select value c from c join i  in c.confirmedSchools where c.scope='area'  and c.joinMode='enroll' and (c.publish=1 or c.publish=2 ) and i.status=1 {yearSql}  {areaOwnerIn}   {schoolIdIn} ";
                                 var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
                                 activities.AddRange(resultOpen.list);
                             }
@@ -698,6 +710,11 @@ namespace TEAMModelOS.Controllers
                                 var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
                                 activities.AddRange(resultSchool.list);
                             }
+
+                            activities.ForEach(z => {
+                                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner,  BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                                z.sas=blob_sas;
+                            });
                             return Ok(new { activities = activities.OrderByDescending(z => z.stime) });
                         }
                     //读取优课评选模块及评审规则
@@ -1028,9 +1045,7 @@ namespace TEAMModelOS.Controllers
                 jwt.Payload.TryGetValue("lang", out object _jwtlang);
                 head_lang = !string.IsNullOrWhiteSpace($"{_jwtlang}") ? $"{_jwtlang}" : head_lang;
             }
-            Teacher teacher = null;
-            teacherInfo = await TeacherService.TeacherInfo(_azureCosmos, teacher, $"{name}", $"{picture}", tmdid, _azureStorage, _option, _azureRedis, ip, _httpTrigger, head_lang);
-
+            teacherInfo = await TeacherService.TeacherInfoLite(_azureCosmos,  $"{name}", $"{picture}", tmdid, _azureStorage, _option, _azureRedis, ip, _httpTrigger, head_lang);
             string sql = $"select value c from c where c.route='{_route}'";
             var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsite>(sql, "ActivityWebsite");
             ActivityWebsite website = null;
@@ -1046,10 +1061,79 @@ namespace TEAMModelOS.Controllers
 
                 }
             }
+            List<string > roles= new List<string>() { "teacher" };
+
+            CoreUser coreUser = await _coreAPIHttpService.GetUserInfo(new Dictionary<string, string> { { "key", teacherInfo.teacher.id } }, _option.Location, _configuration);
+            string sqlExpert = $"select value c from c join e in c.experts   where e.id='{teacherInfo.teacher.id}'";
+            if (!string.IsNullOrWhiteSpace(coreUser.mobile)) {
+                sqlExpert=$"  or  e.mobile='{coreUser.mobile}' ";
+
+            }
+            var resultActivityExpert = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityExpert>(sqlExpert, "ActivityExpert",pageSize:1);
 
-            return Ok(new { website, code =200, teacher});
+            if (resultActivityExpert.list.IsNotEmpty()) {
+                roles.Add("expert");
+            }
+            var payload = new JwtPayload {
+                { JwtRegisteredClaimNames.Iss, _option.HostName }, //發行者
+                { JwtRegisteredClaimNames.Sub, teacherInfo.teacher.id }, // 用戶ID                  
+                { JwtRegisteredClaimNames.Exp,DateTimeOffset.UtcNow.AddHours(2).ToUnixTimeSeconds()},  // 到期的時間,必須為數字
+                { "name",name}, // 用戶的顯示名稱
+                { "picture",picture}, // 用戶頭像
+                { "roles", roles}, // 登入者的角色,角色類型 (Admin、Teacher、Student) 
+                { JwtRegisteredClaimNames.Website,website.route},
+            };
+            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_option.JwtSecretKey));
+            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+            var header = new JwtHeader(signingCredentials);
+            var secToken = new JwtSecurityToken(header, payload);
+            // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
+            var tokenHandler = new JwtSecurityTokenHandler();
+            var serializeToken = tokenHandler.WriteToken(secToken);
+            return Ok(new { website, code =200,token =serializeToken, schools= teacherInfo.teacher.schools.Where(z=>z.status.Equals("join"))});
         }
 
+
+      
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-website")]
+        public async Task<IActionResult> GetWebsite(JsonElement request) {
+            if (!request.TryGetProperty("route", out JsonElement _route)) return BadRequest();
+            string sql = $"select value c from c where c.route='{_route}'";
+            var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsite>(sql, "ActivityWebsite");
+            ActivityWebsite website = null;
+            if (result.list.Count>1)
+            {
+                return Ok(new { code = 1, msg = "路由匹配多个区校" });
+            }
+            else
+            {
+                if (result.list.Count==1)
+                {
+                    website= result.list[0];
+                }
+            }
+            if (website!= null)
+            {
+                List<ActivityWebsite> websites = new List<ActivityWebsite>();
+                if (website.route.Equals("teammodel") )
+                {
+                    string sqlAll = $"select value c from c where IS_DEFINED(c.route) = true  and c.route<> null  and  c.route<>'' ";
+                    var resultAll = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsite>(sqlAll, "ActivityWebsite");
+                    websites=resultAll.list;
+                }
+                return Ok(new { code = 200, website ,websites });
+            }
+            else {
+                return Ok(new { code = 2, msg = "未匹配分站" }) ;
+            }
+          
+        }
         /// <summary>
         /// portal站的
         /// </summary>

+ 32 - 32
TEAMModelOS/appsettings.Development.json

@@ -22,48 +22,48 @@
   },
   "Azure": {
     // 测试站数据库
-    //"Storage": {
-    //  "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodeltest;AccountKey=O2W2vadCqexDxWO+px+QK7y1sHwsYj8f/WwKLdOdG5RwHgW/Dupz9dDUb4c1gi6ojzQaRpFUeAAmOu4N9E+37A==;EndpointSuffix=core.chinacloudapi.cn"
-    //},
-    //"Cosmos": {
-    //  "ConnectionString": "AccountEndpoint=https://cdhabookdep-free.documents.azure.cn:443/;AccountKey=JTUVk92Gjsx17L0xqxn0X4wX2thDPMKiw4daeTyV1HzPb6JmBeHdtFY1MF1jdctW1ofgzqkDMFOtcqS46by31A==;"
-    //},
-    //"Redis": {
-    //  "ConnectionString": "52.130.252.100:6379,password=habook,ssl=false,abortConnect=False,writeBuffer=10240"
-    //},
-    //"ServiceBus": {
-    //  "ConnectionString": "Endpoint=sb://teammodelos.servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=Sy4h4EQ8zP+7w/lOLi1X3tGord/7ShFHimHs1vC50Dc=",
-    //  "ActiveTask": "dep-active-task",
-    //  "ItemCondQueue": "dep-itemcond",
-    //  "GenPdfQueue": "dep-genpdf"
-    //},
-    //"SignalR": {
-    //  "ConnectionString": "Endpoint=https://channel.service.signalr.net;AccessKey=KrblW06tuA4a/GyqRPDU0ynFFmAWxbAvyJihHclSXbQ=;Version=1.0;"
-    //}
-    // 正式站数据库
     "Storage": {
-      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelos;AccountKey=Dl04mfZ9hE9cdPVO1UtqTUQYN/kz/dD/p1nGvSq4tUu/4WhiKcNRVdY9tbe8620nPXo/RaXxs+1F9sVrWRo0bg==;EndpointSuffix=core.chinacloudapi.cn"
+      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodeltest;AccountKey=O2W2vadCqexDxWO+px+QK7y1sHwsYj8f/WwKLdOdG5RwHgW/Dupz9dDUb4c1gi6ojzQaRpFUeAAmOu4N9E+37A==;EndpointSuffix=core.chinacloudapi.cn"
     },
     "Cosmos": {
-      "ConnectionString": "AccountEndpoint=https://teammodelos.documents.azure.cn:443/;AccountKey=clF73GwPECfP1lKZTCvs8gLMMyCZig1HODFbhDUsarsAURO7TcOjVz6ZFfPqr1HzYrfjCXpMuVD5TlEG5bFGGg==;"
+      "ConnectionString": "AccountEndpoint=https://cdhabookdep-free.documents.azure.cn:443/;AccountKey=JTUVk92Gjsx17L0xqxn0X4wX2thDPMKiw4daeTyV1HzPb6JmBeHdtFY1MF1jdctW1ofgzqkDMFOtcqS46by31A==;"
     },
     "Redis": {
-      "ConnectionString": "CoreRedisCN.redis.cache.chinacloudapi.cn:6380,password=LyJWP1ORJdv+poXWofAF97lhCEQPg1wXWqvtzXGXQuE=,ssl=True,abortConnect=False"
+      "ConnectionString": "52.130.252.100:6379,password=habook,ssl=false,abortConnect=False,writeBuffer=10240"
     },
     "ServiceBus": {
-      "ConnectionString": "Endpoint=sb://coreiotservicebuscnpro.servicebus.chinacloudapi.cn/;SharedAccessKeyName=TEAMModelOS;SharedAccessKey=llRPBMDJG9w1Nnifj+pGhV0g4H2REcq0PjvX2qqpcOg=",
-      "ActiveTask": "active-task",
-      "ItemCondQueue": "itemcond",
-      "GenPdfQueue": "genpdf"
+      "ConnectionString": "Endpoint=sb://teammodelos.servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=Sy4h4EQ8zP+7w/lOLi1X3tGord/7ShFHimHs1vC50Dc=",
+      "ActiveTask": "dep-active-task",
+      "ItemCondQueue": "dep-itemcond",
+      "GenPdfQueue": "dep-genpdf"
     },
     "SignalR": {
-      "ConnectionString": "Endpoint=https://channel.signalr.azure.cn;AccessKey=AtcB7JYFNUbUXb1rGxa3PVksQ2X5YSv3JOHZR9J88tw=;Version=1.0;"
-    },
-    "Speech": {
-      "SubscriptionKey": "a4f5f4e2e2e54c6e8b0a4a0b4a0a4a0b",
-      "Region": "chinanorth3",
-      "Endpoint": "https://chinanorth3.api.cognitive.azure.cn/sts/v1.0/issuetoken"
+      "ConnectionString": "Endpoint=https://channel.service.signalr.net;AccessKey=KrblW06tuA4a/GyqRPDU0ynFFmAWxbAvyJihHclSXbQ=;Version=1.0;"
     }
+    // 正式站数据库
+    //"Storage": {
+    //  "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelos;AccountKey=Dl04mfZ9hE9cdPVO1UtqTUQYN/kz/dD/p1nGvSq4tUu/4WhiKcNRVdY9tbe8620nPXo/RaXxs+1F9sVrWRo0bg==;EndpointSuffix=core.chinacloudapi.cn"
+    //},
+    //"Cosmos": {
+    //  "ConnectionString": "AccountEndpoint=https://teammodelos.documents.azure.cn:443/;AccountKey=clF73GwPECfP1lKZTCvs8gLMMyCZig1HODFbhDUsarsAURO7TcOjVz6ZFfPqr1HzYrfjCXpMuVD5TlEG5bFGGg==;"
+    //},
+    //"Redis": {
+    //  "ConnectionString": "CoreRedisCN.redis.cache.chinacloudapi.cn:6380,password=LyJWP1ORJdv+poXWofAF97lhCEQPg1wXWqvtzXGXQuE=,ssl=True,abortConnect=False"
+    //},
+    //"ServiceBus": {
+    //  "ConnectionString": "Endpoint=sb://coreiotservicebuscnpro.servicebus.chinacloudapi.cn/;SharedAccessKeyName=TEAMModelOS;SharedAccessKey=llRPBMDJG9w1Nnifj+pGhV0g4H2REcq0PjvX2qqpcOg=",
+    //  "ActiveTask": "active-task",
+    //  "ItemCondQueue": "itemcond",
+    //  "GenPdfQueue": "genpdf"
+    //},
+    //"SignalR": {
+    //  "ConnectionString": "Endpoint=https://channel.signalr.azure.cn;AccessKey=AtcB7JYFNUbUXb1rGxa3PVksQ2X5YSv3JOHZR9J88tw=;Version=1.0;"
+    //},
+    //"Speech": {
+    //  "SubscriptionKey": "a4f5f4e2e2e54c6e8b0a4a0b4a0a4a0b",
+    //  "Region": "chinanorth3",
+    //  "Endpoint": "https://chinanorth3.api.cognitive.azure.cn/sts/v1.0/issuetoken"
+    //}
   },
   "HaBookAuth": {
     "CoreId": {