116 lines
3.5 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<List<CredentialResponse>>> GetAllCredentials()
{
var credentials = await _credentialService.GetAllCredentialsAsync();
return 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();
}
[HttpPost]
public async Task<ActionResult<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);
return CreatedAtAction(nameof(GetAllCredentials), new { id = created.Id }, new CredentialResponse
{
Id = created.Id,
Name = created.Name,
Username = created.Username,
IsDefault = created.IsDefault,
Description = created.Description,
HasPassword = true
});
}
[HttpPut("{id}")]
public async Task<ActionResult<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);
return new CredentialResponse
{
Id = updated.Id,
Name = updated.Name,
Username = updated.Username,
IsDefault = updated.IsDefault,
Description = updated.Description,
HasPassword = !string.IsNullOrEmpty(updated.Password)
};
}
catch (KeyNotFoundException)
{
return NotFound();
}
}
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteCredential(long id)
{
await _credentialService.DeleteCredentialAsync(id);
return NoContent();
}
}
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; }
}