|
@@ -34,6 +34,8 @@ using Microsoft.OData.Edm;
|
|
|
using TEAMModelOS.Controllers.Core;
|
|
|
using DocumentFormat.OpenXml.VariantTypes;
|
|
|
using static TEAMModelOS.Controllers.CourseController;
|
|
|
+using System.IdentityModel.Tokens.Jwt;
|
|
|
+using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers
|
|
|
{
|
|
@@ -1744,5 +1746,84 @@ namespace TEAMModelOS.Controllers
|
|
|
string datawebHooks = webHooks.ToJsonString();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 学生登录信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="_azureCosmos"></param>
|
|
|
+ /// <param name="_dingDing"></param>
|
|
|
+ /// <param name="bizId"></param>
|
|
|
+ /// <param name="school"></param>
|
|
|
+ /// <param name="json"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static async Task<ResponseData<dynamic>> GetLoginStuInfo(AzureCosmosFactory _azureCosmos, DingDing _dingDing, Option _option, string bizId, string school, JsonElement json)
|
|
|
+ {
|
|
|
+ json.TryGetProperty("stuId", out JsonElement _stuId);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ if (!json.TryGetProperty("idToken", out JsonElement _idToken)) return new ResponseData<dynamic>() { code = RespondCode.ParamsError, msg = "idToken参数错误", data = null };
|
|
|
+ //if (!string.IsNullOrWhiteSpace($"{_idToken}") && JwtAuthExtension.ValidateApiToken($"{_idToken}", _option.JwtSecretKey))
|
|
|
+ //{
|
|
|
+ // JwtSecurityToken jwt = new($"{_idToken}");
|
|
|
+ //}
|
|
|
+ OStudent student = new();
|
|
|
+ JwtSecurityToken jwt = new($"{_idToken}");
|
|
|
+ var iss = jwt.Payload.Iss;
|
|
|
+ var stuId = jwt.Payload.Sub;
|
|
|
+ var scId = jwt.Payload.Azp;
|
|
|
+ jwt.Payload.TryGetValue("name", out object stuName);
|
|
|
+ jwt.Payload.TryGetValue("picture", out object stuPicture);
|
|
|
+ if(!jwt.Payload.TryGetValue("scope", out object scope)) return new ResponseData<dynamic>() { code = RespondCode.ParamsError, msg = "参数错误:scope", data = null };
|
|
|
+ if(!jwt.Payload.TryGetValue("roles", out object _roles)) return new ResponseData<dynamic>() { code = RespondCode.ParamsError, msg = "参数错误:roles", data = null };
|
|
|
+ jwt.Payload.TryGetValue("permissions", out object permissions);
|
|
|
+ jwt.Payload.TryGetValue("standard", out object standard);
|
|
|
+ jwt.Payload.TryGetValue("area", out object area);
|
|
|
+ jwt.Payload.TryGetValue("website", out object website);
|
|
|
+
|
|
|
+ List<string> roles = $"{_roles}".ToObject<List<string>>();
|
|
|
+ if (roles.Contains("student") && $"{scope}".Equals("student"))
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(stuId) && !string.IsNullOrEmpty(scId))
|
|
|
+ {
|
|
|
+ var responseStu = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReadItemStreamAsync(stuId, new PartitionKey($"Base-{scId}"));
|
|
|
+ if (responseStu.Status == 200)
|
|
|
+ {
|
|
|
+ JsonDocument jsonD = JsonDocument.Parse(responseStu.Content);
|
|
|
+ student = jsonD.RootElement.ToObject<OStudent>();
|
|
|
+ switch (student.gender)
|
|
|
+ {
|
|
|
+ case "M":
|
|
|
+ student.gender = "男";
|
|
|
+ break;
|
|
|
+ case "F":
|
|
|
+ student.gender = "女";
|
|
|
+ break;
|
|
|
+ case "N":
|
|
|
+ student.gender = "保密";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return new ResponseData<dynamic>() { code = RespondCode.NotFound, msg = "未找到该学生", data = new { id = stuId, schoolId = scId } };
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return new ResponseData<dynamic>() { code = RespondCode.ParamsError, msg = "参数错误:Sub/scId", data = null };
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return new ResponseData<dynamic>() { code = RespondCode.ParamsError, msg = "参数错误:roles/Azp", data = null };
|
|
|
+
|
|
|
+
|
|
|
+ return new ResponseData<dynamic>() { code = RespondCode.Ok, msg = "成功", data = student };
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ await _dingDing.SendBotMsg($"OpenApi,{Environment.GetEnvironmentVariable("Option:Location")} OpenApiService/GetLoginStuInfo() 参数:stu:{_stuId},school:{school},json:{json.ToJsonString()} \n {ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
|
|
|
+ return new ResponseData<dynamic>() { code = RespondCode.Error, msg = "服务器错误" };
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|