SchoolTeacherController.cs 26 KB

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