using Confluent.Kafka; using Confluent.Kafka.Admin; using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Extensions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using TelpoKafkaConsole.Model; using TelpoKafkaConsole.Service; using TelpoKafkaConsole.WebApi.Controllers.Api; using TelpoKafkaConsole.WebApi.Model.Request; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace TelpoKafkaConsole.WebApi.Controllers { [Route("api/[controller]")] [ApiController] public class ScramCredentialsUserController : ControllerBase { private readonly KafkaAdminService _servicekafkaAdmin; public ScramCredentialsUserController(KafkaAdminService kafkaAdminService) { _servicekafkaAdmin = kafkaAdminService; } // GET: api/ [HttpGet] public async Task> Get() { var usersScram = await _servicekafkaAdmin.DescribeUserScramCredentialsAsync(new List()); var users = usersScram .Select(i => new {i.User, ScramCredentialInfos=i.ScramCredentialInfos .Select(s=>new { Mechanism=s.Mechanism.GetDisplayName(),s.Iterations }) }) .Where(i=>!i.User.Equals("superuser")); return ApiResponse.Success(users); } // GET api//5 [HttpGet("{username}")] public async Task> GetAsync(string username) { var users = new List { username }; var usersScram = await _servicekafkaAdmin.DescribeUserScramCredentialsAsync(users); var firstUserScram = usersScram.FirstOrDefault(); var user = new { firstUserScram?.User, ScramCredentialInfos = firstUserScram?.ScramCredentialInfos .Select(i => new { Mechanism = i.Mechanism.GetDisplayName(), i.Iterations }) }; return ApiResponse.Success(user); } // POST api/ [HttpPost] public async Task> PostAsync([FromBody] UserReq user) { ScramCredentialsUser scramUser = new() { Name = user.Name, Password = user.Password, }; await _servicekafkaAdmin.AlterUserScramCredentialsAsync(scramUser); return ApiResponse.Success($"创建 Scram 用户{user.Name}成功"); } [HttpDelete("{username}")] public async Task> Delete(string username) { ScramCredentialsUser scramUser = new() { Name = username }; await _servicekafkaAdmin.AlterUserScramCredentialsAsync(scramUser,"DELETE"); return ApiResponse.Success($"删除 Scram 用户{username} 成功"); } } }