119 lines
3.9 KiB
C#

using AmtScanner.Api.Models;
using AmtScanner.Api.Services;
using Microsoft.AspNetCore.Mvc;
namespace AmtScanner.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class CredentialsController : ControllerBase
{
private readonly ICredentialService _credentialService;
public CredentialsController(ICredentialService credentialService)
{
_credentialService = credentialService;
}
[HttpGet]
public async Task<ActionResult<ApiResponse<List<CredentialResponse>>>> GetAllCredentials()
{
var credentials = await _credentialService.GetAllCredentialsAsync();
var result = credentials.Select(c => new CredentialResponse
{
Id = c.Id,
Name = c.Name,
Username = c.Username,
IsDefault = c.IsDefault,
Description = c.Description,
HasPassword = !string.IsNullOrEmpty(c.Password)
}).ToList();
return Ok(ApiResponse<List<CredentialResponse>>.Success(result));
}
[HttpPost]
public async Task<ActionResult<ApiResponse<CredentialResponse>>> CreateCredential([FromBody] CredentialRequest request)
{
var credential = new AmtCredential
{
Name = request.Name,
Username = request.Username,
Password = request.Password,
IsDefault = request.IsDefault,
Description = request.Description
};
var created = await _credentialService.CreateCredentialAsync(credential);
var response = new CredentialResponse
{
Id = created.Id,
Name = created.Name,
Username = created.Username,
IsDefault = created.IsDefault,
Description = created.Description,
HasPassword = true
};
return Ok(ApiResponse<CredentialResponse>.Success(response, "创建成功"));
}
[HttpPut("{id}")]
public async Task<ActionResult<ApiResponse<CredentialResponse>>> UpdateCredential(long id, [FromBody] CredentialRequest request)
{
try
{
var credential = new AmtCredential
{
Name = request.Name,
Username = request.Username,
Password = request.Password,
IsDefault = request.IsDefault,
Description = request.Description
};
var updated = await _credentialService.UpdateCredentialAsync(id, credential);
var response = new CredentialResponse
{
Id = updated.Id,
Name = updated.Name,
Username = updated.Username,
IsDefault = updated.IsDefault,
Description = updated.Description,
HasPassword = !string.IsNullOrEmpty(updated.Password)
};
return Ok(ApiResponse<CredentialResponse>.Success(response, "更新成功"));
}
catch (KeyNotFoundException)
{
return Ok(ApiResponse<CredentialResponse>.Fail(404, "凭据不存在"));
}
}
[HttpDelete("{id}")]
public async Task<ActionResult<ApiResponse<object>>> DeleteCredential(long id)
{
await _credentialService.DeleteCredentialAsync(id);
return Ok(ApiResponse<object>.Success(null, "删除成功"));
}
}
public class CredentialRequest
{
public string Name { get; set; } = string.Empty;
public string Username { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public bool IsDefault { get; set; }
public string? Description { get; set; }
}
public class CredentialResponse
{
public long Id { get; set; }
public string Name { get; set; } = string.Empty;
public string Username { get; set; } = string.Empty;
public bool IsDefault { get; set; }
public string? Description { get; set; }
public bool HasPassword { get; set; }
}