Quellcode durchsuchen

注册装置,创建教室,加入教室

黄贺彬 vor 5 Jahren
Ursprung
Commit
77bdcbbc51

+ 6 - 0
AzureAuth/Program.cs

@@ -13,6 +13,12 @@ namespace AzureAuth
     {
         public static void Main(string[] args)
         {
+            Random random = new Random();
+            String result = "";
+            for (int i = 0; i < 100; i++)
+            {
+                Console.WriteLine(random.Next(0, 10));
+            }
             CreateHostBuilder(args).Build().Run();
         }
 

+ 48 - 0
HiTeachCE/Controllers/BaseController.cs

@@ -0,0 +1,48 @@
+using HiTeachCE.Extension;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Claims;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Context.Constant.Common;
+using TEAMModelOS.SDK.Extension.JwtAuth.Models;
+
+namespace HiTeachCE.Controllers
+{
+    public class BaseController : Controller
+    {
+        public List<string> GetLoginUser(string claimType)
+        {
+            var tokenHeader = "";
+            HttpRequest request = HttpContext.Request;
+            if (request.Headers.ContainsKey(Constants.AUTHORIZATION))
+            {
+                tokenHeader = request.Headers[Constants.AUTHORIZATION];
+                //tokenHeader = tokenHeader.ToString().Substring("Bearer ".Length).Trim();
+                tokenHeader = tokenHeader.Replace("Bearer ", "");
+            }
+            if (request.Query.ContainsKey(Constants.ACCESS_TOKEN))
+            {
+                tokenHeader = request.Query[Constants.ACCESS_TOKEN];
+                tokenHeader = tokenHeader.Trim();
+            }
+            if (string.IsNullOrEmpty(tokenHeader))
+            {
+                return null;
+            }
+            ClaimModel claimModel = JwtHelper.SerializeJWT(tokenHeader);
+            claimModel.Claim.TryGetValue(claimType, out var claimValue);
+            List<string> claimValues = new List<string>();
+            foreach (Claim claim in claimModel.Claims)
+            {
+                if (claim.Type.Equals(claimType))
+                {
+                    claimValues.Add(claim.Value);
+                }
+            }
+            return claimValues;
+        }
+    }
+}

+ 97 - 12
HiTeachCE/Controllers/LoginController.cs

@@ -27,12 +27,13 @@ namespace HiTeachCE.Controllers
 {
     [Route("api/[controller]")]
     [ApiController]
-    public class LoginController : Controller
+    public class LoginController : BaseController
     {
 
         public static int smsTTL = 4 * 60;
         public static int ticketTTL = 10 * 60;
         public static int freeTTL = 7 * 24 * 60 * 60;
+        public static int deviceTTL=1 * 24 * 60 * 60;
         public static string freeOrg = "7f847a9f05224184a5d01ee69a6b00d6";
         public static string model_teach = "teach";
         public static string model_prepare = "prepare";
@@ -57,14 +58,30 @@ namespace HiTeachCE.Controllers
         [HttpPost("regist")]
         public BaseJosnRPCResponse Regist(JosnRPCRequest<Dictionary<string, string>> request)
         {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<string> ClientId = new List<string>() { "fb564dde14df423cafac2085936e3b96" };/// GetLoginUser(JwtClaimTypes.ClientId);
             /**
              "params": {
-		            "deviceId": "f67fb5dd-ee1b-d3b7-9b95-61022d7e8acd",
-		            "clientId": "931dee8c-74be-4c9b-a602-c74583b0e985",
-	            }
+                    "deviceId": "f67fb5dd-ee1b-d3b7-9b95-61022d7e8acd",
+                    "clientId": "931dee8c-74be-4c9b-a602-c74583b0e985",
+                }
              */
-            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
-            return builder.build();
+            if (request.@params.TryGetValue("deviceId", out string deviceId) && ClientId.IsNotEmpty())
+            {
+                if (RedisHelper.HExists("device:" + ClientId[0], deviceId))
+                {
+                }
+                else
+                {
+                    RedisHelper.HSet("device:" + ClientId[0], deviceId, null);
+                    RedisHelper.Expire("device:" + ClientId[0], deviceTTL);
+                }
+                return  builder.Data(new Dictionary<string, object> { { "deviceId", deviceId } }).build();
+            }
+            else {
+                throw new BizException("参数错误", 2);
+            }
+             
         }
 
         /// <summary>
@@ -82,10 +99,42 @@ namespace HiTeachCE.Controllers
 		            "extraInfo": {}
 	            }
              */
+
             JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
-            return builder.build();
+            List<string> ClientId = new List<string>() { "fb564dde14df423cafac2085936e3b96" };
+                // GetLoginUser(JwtClaimTypes.ClientId);
+            string groupNum = "";
+            if (request.@params.TryGetValue("deviceId", out string deviceId) && ClientId.IsNotEmpty())
+            {
+                if (RedisHelper.HExists("device:" + ClientId[0], deviceId))
+                {
+                    groupNum= RedisHelper.HGet<string>("device:" + ClientId[0], deviceId);
+                    if (string.IsNullOrEmpty(groupNum)) {
+                        do
+                        {
+                            groupNum = RandGroupNum();
+                        } while (RedisHelper.Exists("group:" + groupNum));
+                        RedisHelper.HSet("group:" + groupNum, deviceId, null);
+                        RedisHelper.Expire("group:" + groupNum, deviceTTL);
+                        RedisHelper.HSet("device:" + ClientId[0], deviceId, groupNum);
+                    }
+                }
+                else { throw new BizException("装置未注册", 2); }
+            }
+            else {
+                throw new BizException("参数错误", 2);
+            }
+            return builder.Data(groupNum).build();
+        }
+        public string RandGroupNum() {
+            Random random = new Random();
+            String result = "";
+            for (int i = 0; i < 6; i++)
+            {
+                result += random.Next(0,10);
+            }
+            return result;
         }
-
         /// <summary>
         /// 加入教室
         /// </summary>
@@ -94,14 +143,50 @@ namespace HiTeachCE.Controllers
         [HttpPost("joinGroup")]
         public BaseJosnRPCResponse JoinGroup(JosnRPCRequest<Dictionary<string, string>> request)
         {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            Dictionary<string, object> dict = new Dictionary<string, object>();
             /**
              "params": {
 		            "deviceId": "f67fb5dd-ee1b-d3b7-9b95-61022d7e8acd",
 		            "groupNum": "818288"
 	            }
              */
-            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
-            return builder.build();
+            if (request.@params.TryGetValue("deviceId", out string deviceId) && 
+                request.@params.TryGetValue("groupNum", out string groupNum)&&
+                !string.IsNullOrEmpty(deviceId) && !string.IsNullOrEmpty(groupNum)
+                )
+            {
+                if (RedisHelper.Exists("group:" + groupNum))
+                {
+                    dynamic groupMember = new { 
+                        deviceId,
+                        name= "🌱菁華浮梦",
+                        unionid= "b180ca87fea84c908a688c005b3f487e",
+                        role= "lecturer",
+                        org= "7f847a9f05224184a5d01ee69a6b00d6",
+                        phone_number="15283771540"
+                    };
+                    Dictionary<string, string> connectInfo = new Dictionary<string, string>() { 
+                        { "brokerHostName", "cdhabook.teammodel.cn" },
+                        { "brokerHostNameWSS", "wss://cdhabook.teammodel.cn/mqtt" },
+                        { "clientID", deviceId },
+                        //使用BCrypt加密
+                        { "password", "cdhabook.teammodel.cn" },
+                        { "username", "cdhabook.teammodel.cn/"+deviceId }
+                    };
+                    RedisHelper.HSet("group:" + groupNum, deviceId, groupMember) ;
+                    dict.Add("mqtt", new Dictionary<string,object>() { { "connectInfo", connectInfo },{ "groupMember", groupMember } });
+                }
+                else {
+                    throw new BizException("教室不存在", 2);
+                }
+            }
+            else
+            {
+                throw new BizException("参数错误", 2);
+            }
+          
+            return builder.Data(dict).build();
         }
         /// <summary>
         /// 认证
@@ -114,8 +199,8 @@ namespace HiTeachCE.Controllers
             JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
             if (request.@params.TryGetValue("ticket", out string ticket) &&
                 //上课模式  备课模式
-                request.@params.TryGetValue("model", out string model)&&
-                (model.Equals(model_teach )||model.Equals(model_prepare)) &&
+                //request.@params.TryGetValue("model", out string model)&&
+              //  (model.Equals(model_teach )||model.Equals(model_prepare)) &&
                 request.@params.TryGetValue("orgCode", out string orgCode)
                 )
             {

+ 3 - 3
HiTeachCE/appsettings.json

@@ -11,7 +11,7 @@
     "MySqlConnectionString": "server=106.12.23.251;database=HiTeachCE;port=3306;uid=root;pwd=teammodelabc123;charset='utf8mb4';SslMode=None"
   },
   "Redis": {
-    "ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,defaultDatabase=13,writeBuffer=10240,poolsize=50,prefix=habook:"
+    "ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,defaultDatabase=11,writeBuffer=10240,poolsize=50,prefix=HiTeachCE:"
   },
   "JwtSetting": {
     "Issuer": "HaBook", //签发者
@@ -45,13 +45,13 @@
     },
     {
       "code": "sendMsg",
-      "value": "devices/f92c19c0-30cd-a7d7-65e5-c71885f99d40/messages/events/endpoint=coretopiciot&groupNum=888280&deviceId=f92c19c0-30cd-a7d7-65e5-c71885f99d40"
+      "value": "devices/{deviceId}/messages/events/endpoint=coretopiciot&groupNum={groupNum}&deviceId={deviceId}"
     }
   ],
   "SubscribeTopic": [
     {
       "code": "receiveMsg",
-      "value": "devices/f92c19c0-30cd-a7d7-65e5-c71885f99d40/messages/devicebound/#"
+      "value": "devices/{deviceId}/messages/devicebound/#"
     },
     {
       "code": "receiveDirectMethod",