OpenApiConfigController.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Azure.Cosmos;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.Http;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.Extensions.Options;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text.Json;
  10. using System.Threading.Tasks;
  11. using TEAMModelOS.Filter;
  12. using TEAMModelOS.Models;
  13. using TEAMModelOS.SDK.DI;
  14. using TEAMModelOS.SDK.Extension;
  15. using TEAMModelOS.SDK.Models;
  16. using TEAMModelOS.SDK.Models.Cosmos;
  17. using TEAMModelOS.SDK.Models.Table;
  18. namespace TEAMModelBI.Controllers
  19. {
  20. [ProducesResponseType(StatusCodes.Status200OK)]
  21. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  22. [Route("openapi-config")]
  23. [ApiController]
  24. public class OpenApiConfigController : ControllerBase
  25. {
  26. private readonly AzureCosmosFactory _azureCosmos;
  27. private readonly AzureStorageFactory _azureStorage;
  28. private readonly AzureRedisFactory _azureRedis;
  29. private readonly DingDing _dingDing;
  30. private readonly Option _option;
  31. public OpenApiConfigController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, DingDing dingDing, IOptionsSnapshot<Option> option)
  32. {
  33. _azureCosmos = azureCosmos;
  34. _azureStorage = azureStorage;
  35. _azureRedis = azureRedis;
  36. _dingDing = dingDing;
  37. _option = option?.Value;
  38. }
  39. /// <summary>
  40. /// {"id":"uuid","code":"hbcn学校编码"}
  41. /// </summary>
  42. /// <param name="requert"></param>
  43. /// <returns></returns>
  44. [ProducesDefaultResponseType]
  45. //[AuthToken(Roles = "admin")]
  46. [HttpPost("create-token")]
  47. //[Authorize(Roles = "IES")]
  48. public async Task<IActionResult> CreateToken(JsonElement request)
  49. {
  50. try
  51. { if (!request.TryGetProperty("id", out JsonElement _id)) { return BadRequest(); }
  52. var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi");
  53. List<BusinessConfig> configs = table.FindListByDictSync<BusinessConfig>(new Dictionary<string, object> { { "PartitionKey", $"BusinessConfig" }, { "RowKey", $"{_id}" } });
  54. string jwt = "";
  55. if (configs.Any()) {
  56. var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, configs[0].RowKey, _option.JwtSecretKey, "business");
  57. jwt = auth_token.jwt;
  58. configs[0].jti = auth_token.jti;
  59. configs[0].token = auth_token.jwt;
  60. await table.SaveOrUpdate<BusinessConfig>(configs[0]);
  61. }
  62. return Ok(new { jwt });
  63. }
  64. catch (Exception e)
  65. {
  66. await _dingDing.SendBotMsg($"OS,{_option.Location},open-api/upsert()\n{e.Message}\n{e.StackTrace}\n{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
  67. return BadRequest();
  68. }
  69. }
  70. }
  71. }