using Azure.Cosmos; using Azure.Storage.Blobs.Models; using Grpc.Core; using HTEXLib.COMM.Helpers; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Http; using Microsoft.Azure.Cosmos.Table; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Json; using System.Reflection; using System.Security.Policy; using System.Text; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.Filter; using TEAMModelOS.SDK; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal; using TEAMModelOS.SDK.Models.Cosmos.Teacher; using TEAMModelOS.SDK.Models.Service; using TEAMModelOS.SDK.Models.Table; using static TEAMModelOS.SDK.Models.Teacher; namespace TEAMModelOS.SDK.DI { public class WebHookHttpTrigger { private readonly AzureCosmosFactory _azureCosmos; private readonly DingDing _dingDing; private readonly AzureStorageFactory _azureStorage; private readonly AzureRedisFactory _azureRedis; private readonly IHttpClientFactory _httpClient; public WebHookHttpTrigger(IHttpClientFactory httpClient, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis) { _azureCosmos = azureCosmos; _dingDing = dingDing; _azureStorage = azureStorage; _azureRedis = azureRedis; _httpClient = httpClient; } /// /// 学校数据授权变更,学校基础信息 10开头 /// /// /// [Function("school-auth-change")] [ApiToken(Auth = "1001", Name = "学校数据授权变更", TName = "變更學校數據授權", EName = "School Auth Changes", RWN = "N")] public async Task NoticeSchoolAuthChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/school-auth-change")] HttpRequestData request) { var response = request.CreateResponse(HttpStatusCode.OK); string datastr = await new StreamReader(request.Body).ReadToEndAsync(); var json = JsonDocument.Parse(datastr).RootElement; SchoolAuthChange data = null; if (json.TryGetProperty("data", out JsonElement _data)) { data = _data.ToObject(); } (List businessConfigs, List<(List urls, string head, string token, BizConfig config)> webhooks) = await WebHookService.GetRequestData(json, _azureCosmos, _azureRedis, _azureStorage); if (webhooks.IsNotEmpty()) { foreach (var webhook in webhooks) { foreach (var url in webhook.urls) { await WebHookService.Send(new { data.addSchools, data.rmvSchools }, (url, webhook.head, webhook.token, webhook.config), "school-auth-change",_httpClient,_dingDing); } } } return response; } /// /// 名单变更通知,名单类12开头 /// /// /// [Function("group-member-change")] [ApiToken(Auth = "1201", Name = "名单成员变更", TName = "變更名單成員資料", EName = "Name List Member Changes", RWN = "N")] public async Task NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-member-change")] HttpRequestData request) { var response = request.CreateResponse(HttpStatusCode.OK); string datastr = await new StreamReader(request.Body).ReadToEndAsync(); var json = JsonDocument.Parse(datastr).RootElement; GroupChange data = null; if (json.TryGetProperty("data", out JsonElement _data)){ data= _data.ToObject(); } (List businessConfigs, List<(List urls, string head, string token, BizConfig config)> webhooks ) = await WebHookService.GetRequestData(json,_azureCosmos,_azureRedis,_azureStorage); if (webhooks.IsNotEmpty() && string.IsNullOrWhiteSpace(data.school)) { foreach (var webhook in webhooks) { foreach (var url in webhook.urls) { await WebHookService.Send(new { data.status, data.type, data.listid, data.tmdjoin, data.tmdleave, data.stujoin, data.stuleave, data.tchjoin, data.tchleave, data.school }, (url, webhook.head, webhook.token, webhook.config), "group-member-change", _httpClient, _dingDing); } } } return response; } } }