119 lines
3.9 KiB
C#
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; }
|
|
}
|