2021-12-26 17:40:51 -08:00
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
|
|
|
|
using APIModels.Requests;
|
|
|
|
|
|
|
|
|
|
using TeamServer.Services;
|
|
|
|
|
using TeamServer.Models;
|
|
|
|
|
|
|
|
|
|
namespace TeamServer.Controllers.Implants
|
|
|
|
|
{
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Route("[controller]")]
|
|
|
|
|
public class ImplantsController : ControllerBase
|
|
|
|
|
{
|
|
|
|
|
private readonly IImplantService _implants;
|
|
|
|
|
|
|
|
|
|
public ImplantsController(IImplantService implants) { _implants = implants; }
|
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public IActionResult GetImplants(){
|
|
|
|
|
var implants = _implants.GetImplants();
|
|
|
|
|
return Ok(implants);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpGet("{implantId}")]
|
|
|
|
|
public IActionResult GetImplant(string implantId)
|
|
|
|
|
{
|
|
|
|
|
var implant = _implants.GetImplant(implantId);
|
|
|
|
|
if (implant is null) { return NotFound($"{implantId} not found"); }
|
|
|
|
|
|
|
|
|
|
return Ok(implant);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpGet("{implantId}/tasks")]
|
|
|
|
|
public IActionResult ReturnTasks(string implantId)
|
|
|
|
|
{
|
|
|
|
|
var implant = _implants.GetImplant(implantId);
|
|
|
|
|
if (implant is null) { return NotFound($"{implantId} not found"); }
|
|
|
|
|
|
|
|
|
|
var taskOuts = implant.GetTaskOut();
|
|
|
|
|
return Ok(taskOuts);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpGet("{implantId}/tasks/{taskId}")]
|
|
|
|
|
public IActionResult ReturnTask(string implantId, string taskId)
|
|
|
|
|
{
|
|
|
|
|
var implant = _implants.GetImplant(implantId);
|
|
|
|
|
if (implant is null) { return NotFound($"{implantId} not found"); }
|
|
|
|
|
|
|
|
|
|
var taskOut = implant.ReturnTaskOut(taskId);
|
|
|
|
|
if(taskOut is null) { return NotFound($"{taskId} not found"); }
|
|
|
|
|
|
|
|
|
|
return Ok(taskOut);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPost("{implantId}")]
|
|
|
|
|
public IActionResult TaskImplant(string implantId, [FromBody] ImplantTaskRequest req)
|
|
|
|
|
{
|
2022-03-16 19:10:46 -07:00
|
|
|
|
Implant implant = _implants.GetImplant(implantId);
|
2021-12-26 17:40:51 -08:00
|
|
|
|
if(implant is null) { return NotFound($"{implantId} not found"); }
|
|
|
|
|
|
2022-03-16 19:10:46 -07:00
|
|
|
|
ImplantTask task = new ImplantTask() { Id = Guid.NewGuid().ToString() , Command = req.Command , Args = req.Args, File = req.File};
|
2021-12-26 17:40:51 -08:00
|
|
|
|
implant.TaskQueue(task);
|
|
|
|
|
|
|
|
|
|
var root = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}";
|
|
|
|
|
var path = $"{root}/tasks/{task.Id}";
|
|
|
|
|
|
|
|
|
|
return Created(path, task);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-16 19:10:46 -07:00
|
|
|
|
[HttpDelete("{implantId}")]
|
|
|
|
|
public IActionResult PurgeImplant(string implantId)
|
|
|
|
|
{
|
|
|
|
|
Implant implant = _implants.GetImplant(implantId);
|
|
|
|
|
if (implant is null) { return NotFound($"{implantId} not found"); }
|
|
|
|
|
_implants.PurgeImplant(implant);
|
|
|
|
|
|
|
|
|
|
return Ok($"{implantId} removed");
|
|
|
|
|
}
|
2021-12-26 17:40:51 -08:00
|
|
|
|
}
|
|
|
|
|
}
|