SchoolTeacherController.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.Models;
  7. using TEAMModelOS.SDK;
  8. using TEAMModelOS.SDK.DI;
  9. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  10. using System.Text.Json;
  11. using TEAMModelOS.SDK.Models;
  12. using Microsoft.AspNetCore.Http;
  13. using Azure.Cosmos;
  14. using TEAMModelOS.SDK.Extension;
  15. using System.IdentityModel.Tokens.Jwt;
  16. using System.IO;
  17. using System.Linq;
  18. using Microsoft.Extensions.Options;
  19. using System.Net.Http;
  20. using TEAMModelOS.SDK.Context.Configuration;
  21. using System.Net;
  22. using Microsoft.Extensions.Configuration;
  23. using TEAMModelOS.SDK.Models.Service;
  24. using TEAMModelOS.Filter;
  25. namespace TEAMModelOS.Controllers
  26. {
  27. [ProducesResponseType(StatusCodes.Status200OK)]
  28. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  29. //[Authorize(Roles = "teacher")]
  30. [Route("school/teacher")]
  31. [ApiController]
  32. public class SchoolTeacherController : Controller
  33. {
  34. private readonly AzureCosmosFactory _azureCosmos;
  35. private readonly AzureStorageFactory _azureStorage;
  36. private readonly Option _option;
  37. private readonly IConfiguration _configuration;
  38. private readonly NotificationService _notificationService;
  39. public SchoolTeacherController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option, IConfiguration configuration, NotificationService notificationService)
  40. {
  41. _azureCosmos = azureCosmos;
  42. _azureStorage = azureStorage;
  43. _option = option?.Value;
  44. _configuration = configuration;
  45. _notificationService = notificationService;
  46. }
  47. /// <summary>
  48. /// 取得學校所有老師(不論加入狀態)
  49. /// </summary>
  50. /// <param name="request"></param>
  51. /// <returns></returns>
  52. [ProducesDefaultResponseType]
  53. [HttpPost("get-teacher-all")]
  54. public async Task<IActionResult> GetSchoolTeacherAll(JsonElement request)
  55. {
  56. var client = _azureCosmos.GetCosmosClient();
  57. //參數取得
  58. if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  59. //string status_str = (request.TryGetProperty("join_status", out JsonElement status_json)) ? status_json.ToString() : "join";
  60. //資料取得
  61. List<object> teachers = new List<object>();
  62. await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.classes, c.picture ,c.status, c.job, c.createTime, ARRAY_LENGTH(c.permissions) as permissionCount, c.size FROM c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{school_code}") }))
  63. {
  64. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  65. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  66. {
  67. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  68. {
  69. teachers.Add(obj.ToObject<object>());
  70. }
  71. }
  72. }
  73. return Ok(new { teachers });
  74. }
  75. /// <summary>
  76. /// 取得某位老師的權限
  77. /// </summary>
  78. /// <param name="request"></param>
  79. /// <returns></returns>
  80. [ProducesDefaultResponseType]
  81. [HttpPost("get-teacher-permission")]
  82. public async Task<IActionResult> GetPermissionById(JsonElement request)
  83. {
  84. var client = _azureCosmos.GetCosmosClient();
  85. //參數取得
  86. if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  87. if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
  88. //老師權限資料取得
  89. object permissions = null;
  90. var response = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(id.ToString(), new PartitionKey($"Teacher-{school_code}"));
  91. if (response.Status == 200)
  92. {
  93. using var json = await JsonDocument.ParseAsync(response.ContentStream);
  94. if (json.RootElement.TryGetProperty("permissions", out JsonElement value))
  95. {
  96. permissions = value.ToObject<object>();
  97. }
  98. }
  99. return Ok(new { permissions });
  100. }
  101. /// <summary>
  102. /// 取得權限總列表
  103. /// </summary>
  104. [ProducesDefaultResponseType]
  105. [HttpPost("get-teacher-authoritylist")]
  106. public async Task<IActionResult> GetSchoolAuthorityList()
  107. {
  108. Dictionary<string, object> dict = new Dictionary<string, object>
  109. {
  110. { "PartitionKey", "authority"}
  111. };
  112. List<Authority> authoritylist = await _azureStorage.FindListByDict<Authority>(dict);
  113. return Ok(new { authoritylist });
  114. }
  115. /// <summary>
  116. /// 更新老師的權限(可複數)
  117. /// </summary>
  118. /// <param name="request"></param>
  119. /// <returns></returns>
  120. [ProducesDefaultResponseType]
  121. [HttpPost("upd-teacher-permission")]
  122. public async Task<IActionResult> UpdSchoolTeacherPermission(JsonElement request)
  123. {
  124. try
  125. {
  126. var client = _azureCosmos.GetCosmosClient();
  127. //參數取得
  128. if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  129. request.TryGetProperty("ids", out JsonElement ids);
  130. request.TryGetProperty("mode", out JsonElement mode);
  131. request.TryGetProperty("pmAdd", out JsonElement pmAdd);
  132. request.TryGetProperty("pmRmv", out JsonElement pmRmv);
  133. List<string> pmAddList = new List<string>();
  134. List<string> pmRmvList = new List<string>();
  135. request.TryGetProperty("job", out JsonElement job);
  136. if (mode.GetString() == "multi")
  137. {
  138. foreach (var pm in pmAdd.EnumerateArray())
  139. {
  140. pmAddList.Add(pm.GetString());
  141. }
  142. foreach (var pm in pmRmv.EnumerateArray())
  143. {
  144. pmRmvList.Add(pm.GetString());
  145. }
  146. } else
  147. {
  148. foreach (var pm in pmAdd.EnumerateArray())
  149. {
  150. pmAddList.Add(pm.GetString());
  151. }
  152. }
  153. //更新權限
  154. foreach (var id in ids.EnumerateArray())
  155. {
  156. SchoolTeacher st = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<SchoolTeacher>(id.GetString(), new PartitionKey($"Teacher-{school_code}"));
  157. if(mode.GetString() == "multi")
  158. {
  159. foreach (var pm in pmRmvList)
  160. {
  161. if(st.permissions.Contains(pm))
  162. {
  163. st.permissions.Remove(pm);
  164. }
  165. }
  166. foreach (var pm in pmAddList)
  167. {
  168. if (!st.permissions.Contains(pm))
  169. {
  170. st.permissions.Add(pm);
  171. }
  172. }
  173. } else
  174. {
  175. st.permissions = pmAddList;
  176. st.job = (!string.IsNullOrEmpty(job.GetString())) ? job.GetString() : null;
  177. }
  178. await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(st, id.GetString(), new PartitionKey($"Teacher-{school_code}"));
  179. }
  180. return Ok(new {});
  181. }
  182. catch (Exception ex)
  183. {
  184. return BadRequest();
  185. }
  186. }
  187. /// <summary>
  188. /// 追加老師及學校加入狀態
  189. /// </summary>
  190. /// <param name="request"></param>
  191. /// <returns></returns>
  192. [ProducesDefaultResponseType]
  193. [HttpPost("add-teacher-status")]
  194. [AuthToken(Roles = "teacher,admin")]
  195. public async Task<IActionResult> AddSchoolTeacher(JsonElement request)
  196. {
  197. var (tid, tname, _, tschool) = HttpContext.GetAuthTokenInfo();
  198. var client = _azureCosmos.GetCosmosClient();
  199. //參數取得
  200. if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  201. if (!request.TryGetProperty("user_list", out JsonElement user_list)) return BadRequest();
  202. if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
  203. //取得學校資訊
  204. var schresponse = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(school_code.ToString(), new PartitionKey("Base"));
  205. string schname = string.Empty;
  206. if (schresponse.Status == 200)
  207. {
  208. using var schjson = await JsonDocument.ParseAsync(schresponse.ContentStream);
  209. schjson.RootElement.TryGetProperty("name", out JsonElement jsonschname);
  210. schname = jsonschname.ToString();
  211. }
  212. else
  213. {
  214. return BadRequest();
  215. }
  216. try
  217. {
  218. List<TmdInfo> ids = new List<TmdInfo>();
  219. foreach (var obj in user_list.EnumerateArray())
  220. {
  221. obj.TryGetProperty("id", out JsonElement id);
  222. obj.TryGetProperty("name", out JsonElement name);
  223. obj.TryGetProperty("picture", out JsonElement picture);
  224. ids.Add(new TmdInfo { tmdid=$"{id}",tmdname=$"{name}" });
  225. //老師個人資料
  226. var tresponse = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync(id.ToString(), new PartitionKey("Base"));
  227. if(tresponse.Status == 200)
  228. {
  229. using var json = await JsonDocument.ParseAsync(tresponse.ContentStream);
  230. Teacher teacher = json.ToObject<Teacher>();
  231. var school = teacher.schools.FirstOrDefault(x => x.schoolId.Equals(school_code.GetString(), StringComparison.OrdinalIgnoreCase));
  232. if (school != null)
  233. school.status = grant_type.GetString();
  234. else
  235. teacher.schools.Add(new Teacher.School() { schoolId = school_code.GetString(), name = schname, status = grant_type.GetString() });
  236. await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(teacher, id.ToString(), new PartitionKey("Base"));
  237. }
  238. else
  239. {
  240. using var stream = new MemoryStream();
  241. using var writer = new Utf8JsonWriter(stream);
  242. writer.WriteStartObject();
  243. writer.WriteString("pk", "Base");
  244. writer.WriteString("code", "Base");
  245. writer.WriteString("id", id.ToString());
  246. writer.WriteString("name", name.ToString());
  247. writer.WriteString("picture", picture.ToString());
  248. writer.WriteNumber("size", 1);
  249. writer.WriteNull("defaultSchool");
  250. writer.WriteStartArray("schools");
  251. writer.WriteStartObject();
  252. writer.WriteString("schoolId", school_code.ToString());
  253. writer.WriteString("name", schname);
  254. writer.WriteString("status", grant_type.ToString());
  255. writer.WriteEndObject();
  256. writer.WriteEndArray();
  257. writer.WriteEndObject();
  258. writer.Flush();
  259. await client.GetContainer("TEAMModelOS", "Teacher").CreateItemStreamAsync(stream, new PartitionKey("Base"));
  260. }
  261. //學校老師資料
  262. var sresponse = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(id.ToString(), new PartitionKey($"Teacher-{school_code}"));
  263. //SchoolTeacher schteacher = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<SchoolTeacher>(id.ToString(), new PartitionKey($"Teacher-{school_code}"));
  264. if (sresponse.Status == 200)
  265. {
  266. using var json = await JsonDocument.ParseAsync(sresponse.ContentStream);
  267. SchoolTeacher schteacher = json.ToObject<SchoolTeacher>();
  268. schteacher.status = grant_type.ToString();
  269. await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(schteacher, id.ToString(), new PartitionKey($"Teacher-{school_code}"));
  270. }
  271. else
  272. {
  273. using var stream = new MemoryStream();
  274. using var writer = new Utf8JsonWriter(stream);
  275. writer.WriteStartObject();
  276. writer.WriteString("pk", "Teacher");
  277. writer.WriteString("code", $"Teacher-{school_code}");
  278. writer.WriteString("id", id.ToString());
  279. writer.WriteString("name", name.ToString());
  280. writer.WriteString("picture", picture.ToString());
  281. writer.WriteNull("job");
  282. writer.WriteStartArray("roles");
  283. writer.WriteStringValue("teacher");
  284. writer.WriteEndArray();
  285. writer.WriteStartArray("permissions");
  286. writer.WriteEndArray();
  287. writer.WriteString("status", grant_type.ToString());
  288. writer.WriteNumber("createTime", DateTimeOffset.UtcNow.ToUnixTimeSeconds());
  289. writer.WriteEndObject();
  290. writer.Flush();
  291. await client.GetContainer("TEAMModelOS", "School").CreateItemStreamAsync(stream, new PartitionKey($"Teacher-{school_code}"));
  292. }
  293. }
  294. string bizcode = grant_type.GetString();
  295. if (grant_type.GetString() == "join")
  296. {
  297. bizcode = "request-join";
  298. }
  299. Notification notification = new Notification
  300. {
  301. hubName = "hita",
  302. type = "msg",
  303. from = $"ies5:{school_code}",
  304. to = ids.Select(x => x.tmdid).ToList(),
  305. label = $"{bizcode}_school",
  306. body = new { biz = bizcode, tmdid = tid, tmdname = tname.ToString(), schoolcode = $"{school_code}", schoolname = $"{schname}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
  307. expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
  308. };
  309. var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
  310. var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
  311. var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
  312. var location = _option.Location;
  313. var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
  314. return Ok(new { });
  315. }
  316. catch(Exception ex)
  317. {
  318. return BadRequest();
  319. }
  320. }
  321. /// <summary>
  322. /// 學校變更老師加入狀態
  323. /// </summary>
  324. /// <param name="request"></param>
  325. /// <returns></returns>
  326. [ProducesDefaultResponseType]
  327. [AuthToken(Roles = "admin")]
  328. [HttpPost("upd-teacher-status")]
  329. public async Task<IActionResult> UpdSchoolTeacherStatus(JsonElement request)
  330. {
  331. try
  332. {
  333. var (tid, tname, _, tschool) = HttpContext.GetAuthTokenInfo();
  334. if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
  335. if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  336. if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
  337. var client = _azureCosmos.GetCosmosClient();
  338. //取得學校資訊
  339. var schresponse = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(school_code.ToString(), new PartitionKey("Base"));
  340. string schname = string.Empty;
  341. if (schresponse.Status == 200)
  342. {
  343. using var schjson = await JsonDocument.ParseAsync(schresponse.ContentStream);
  344. schjson.RootElement.TryGetProperty("name", out JsonElement jsonschname);
  345. schname = jsonschname.ToString();
  346. }
  347. else
  348. {
  349. return BadRequest();
  350. }
  351. //在老師表找出老師,處理該學校狀態 (老師基本資料應該要存在)
  352. Teacher teacher = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Teacher>(id.ToString(), new PartitionKey("Base"));
  353. if (teacher.schools == null)
  354. teacher.schools = new List<Teacher.School>();
  355. var school = teacher.schools?.FirstOrDefault(x => x.schoolId.Equals(school_code.GetString(), StringComparison.OrdinalIgnoreCase));
  356. if (school != null)
  357. school.status = grant_type.GetString();
  358. else
  359. teacher.schools.Add(new Teacher.School() { schoolId = school_code.GetString(), name = schname, status = grant_type.GetString() });
  360. await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(teacher, id.ToString(), new PartitionKey("Base"));
  361. //在學校表處理該學校教師帳號的狀態
  362. var sresponse = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(id.GetString(), new PartitionKey($"Teacher-{school_code}"));
  363. if (sresponse.Status == 200)
  364. {
  365. using var json = await JsonDocument.ParseAsync(sresponse.ContentStream);
  366. SchoolTeacher steacher = json.ToObject<SchoolTeacher>();
  367. steacher.status = grant_type.GetString();
  368. var response = await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync(steacher, id.GetString(), new PartitionKey($"Teacher-{school_code}"));
  369. }
  370. else
  371. {
  372. SchoolTeacher st = new SchoolTeacher()
  373. {
  374. pk = "Teacher",
  375. code = $"Teacher-{school_code}",
  376. createTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
  377. id = teacher.id,
  378. name = teacher.name,
  379. picture = teacher.picture,
  380. roles = new List<string>(new string[] { "teacher" }),
  381. permissions = null,
  382. status = grant_type.GetString()
  383. };
  384. var response = await client.GetContainer("TEAMModelOS", "School").CreateItemAsync(st, new PartitionKey($"Teacher-{school_code}"));
  385. }
  386. string bizcode = grant_type.GetString();
  387. if (grant_type.GetString() == "join")
  388. {
  389. bizcode = "request-join";
  390. }
  391. Notification notification = new Notification
  392. {
  393. hubName = "hita",
  394. type = "msg",
  395. from = $"ies5:{school_code}",
  396. to =new List<string> { teacher.id },
  397. label = $"{bizcode}_school",
  398. body = new { biz = bizcode, tmdid = tid, tmdname =tname, schoolcode = $"{school_code}", schoolname = $"{schname}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
  399. expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
  400. };
  401. var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
  402. var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
  403. var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
  404. var location = _option.Location;
  405. var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
  406. return Ok(new { });
  407. }
  408. catch (Exception ex)
  409. {
  410. return BadRequest();
  411. }
  412. }
  413. /// <summary>
  414. /// 學校移除老師跟學校關聯
  415. /// </summary>
  416. /// <param name="request"></param>
  417. /// <returns></returns>
  418. [ProducesDefaultResponseType]
  419. //[AuthToken(Roles = "admin")]
  420. [HttpPost("rmv-teacher")]
  421. public async Task<IActionResult> RmvSchoolTeacher(JsonElement request)
  422. {
  423. try
  424. {
  425. var (tid, tname, _, tschool) = HttpContext.GetAuthTokenInfo();
  426. if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  427. if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
  428. var client = _azureCosmos.GetCosmosClient();
  429. //在老師表找出老師,刪除該學校 (老師基本資料應該要存在)
  430. Teacher teacher = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Teacher>(id.ToString(), new PartitionKey("Base"));
  431. var school = teacher.schools.RemoveAll(x => x.schoolId.Equals(school_code.GetString(), StringComparison.OrdinalIgnoreCase));
  432. await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(teacher, id.ToString(), new PartitionKey("Base"));
  433. //移除學校表中的老師document
  434. var sresponse = await client.GetContainer("TEAMModelOS", "School").DeleteItemStreamAsync(id.GetString(), new PartitionKey($"Teacher-{school_code}"));
  435. //取得學校資訊
  436. var schresponse = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(school_code.ToString(), new PartitionKey("Base"));
  437. string schname = string.Empty;
  438. if (schresponse.Status == 200)
  439. {
  440. using var schjson = await JsonDocument.ParseAsync(schresponse.ContentStream);
  441. schjson.RootElement.TryGetProperty("name", out JsonElement jsonschname);
  442. schname = jsonschname.ToString();
  443. }
  444. else
  445. {
  446. return BadRequest();
  447. }
  448. Notification notification = new Notification
  449. {
  450. hubName = "hita",
  451. type = "msg",
  452. from = $"ies5:{school_code}",
  453. to = new List<string> { teacher.id },
  454. label = $"remove_school",
  455. body = new { biz = "remove", tmdid = tid, tmdname = tname, schoolcode = $"{school_code}", schoolname = $"{schname}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
  456. expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
  457. };
  458. var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
  459. var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
  460. var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
  461. var location = _option.Location;
  462. var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
  463. return Ok(new { });
  464. }
  465. catch (Exception ex)
  466. {
  467. return BadRequest();
  468. }
  469. }
  470. /// <summary>
  471. /// 取得CoreID資訊
  472. /// </summary>
  473. /// <param name="request"></param>
  474. /// <returns></returns>
  475. [ProducesDefaultResponseType]
  476. //[AuthToken(Roles = "admin")]
  477. [HttpPost("get-coreuser")]
  478. public async Task<IActionResult> GetUserFromCoreID(JsonElement request)
  479. {
  480. try
  481. {
  482. string url = BaseConfigModel.Configuration["HaBookAuth:CoreId:userinfo"];
  483. HttpClient client = new HttpClient();
  484. var content = new StringContent(request.ToString(), Encoding.UTF8, "application/json");
  485. HttpResponseMessage responseMessage = await client.PostAsync(url, content);
  486. if(responseMessage.StatusCode == HttpStatusCode.OK)
  487. {
  488. string responseBody = responseMessage.Content.ReadAsStringAsync().Result;
  489. return Ok(responseBody);
  490. }
  491. else
  492. {
  493. return BadRequest();
  494. }
  495. }
  496. catch (Exception ex)
  497. {
  498. return BadRequest();
  499. }
  500. }
  501. }
  502. }