Added support chat. Added resource service. Added server backups

This commit is contained in:
Marcel Baumgartner
2023-02-21 21:22:40 +01:00
parent c3eadf9133
commit 0b6882d3f8
26 changed files with 2408 additions and 9 deletions

View File

@@ -0,0 +1,95 @@
using Microsoft.AspNetCore.Mvc;
using Moonlight.App.Http.Requests.Wings;
using Moonlight.App.Repositories;
using Moonlight.App.Repositories.Servers;
using Moonlight.App.Services;
namespace Moonlight.App.Http.Controllers.Api.Remote;
[Route("api/remote/backups")]
[ApiController]
public class BackupController : Controller
{
private readonly ServerBackupRepository ServerBackupRepository;
private readonly MessageService MessageService;
private readonly NodeRepository NodeRepository;
public BackupController(
ServerBackupRepository serverBackupRepository,
NodeRepository nodeRepository,
MessageService messageService)
{
ServerBackupRepository = serverBackupRepository;
NodeRepository = nodeRepository;
MessageService = messageService;
}
[HttpGet("{uuid}")]
public ActionResult<string> Download(Guid uuid)
{
return "";
}
[HttpPost("{uuid}")]
public async Task<ActionResult> SetStatus([FromRoute] Guid uuid, [FromBody] ReportBackupCompleteRequest request)
{
var tokenData = Request.Headers.Authorization.ToString().Replace("Bearer ", "");
var id = tokenData.Split(".")[0];
var token = tokenData.Split(".")[1];
var node = NodeRepository.Get().FirstOrDefault(x => x.TokenId == id);
if (node == null)
return NotFound();
if (token != node.Token)
return Unauthorized();
var backup = ServerBackupRepository.Get().FirstOrDefault(x => x.Uuid == uuid);
if (backup == null)
return NotFound();
if (request.Successful)
{
backup.Created = true;
backup.Bytes = request.Size;
ServerBackupRepository.Update(backup);
await MessageService.Emit($"wings.backups.create", backup);
}
else
{
await MessageService.Emit($"wings.backups.createfailed", backup);
ServerBackupRepository.Delete(backup);
}
return NoContent();
}
[HttpPost("{uuid}/restore")]
public async Task<ActionResult> SetRestoreStatus([FromRoute] Guid uuid)
{
var tokenData = Request.Headers.Authorization.ToString().Replace("Bearer ", "");
var id = tokenData.Split(".")[0];
var token = tokenData.Split(".")[1];
var node = NodeRepository.Get().FirstOrDefault(x => x.TokenId == id);
if (node == null)
return NotFound();
if (token != node.Token)
return Unauthorized();
var backup = ServerBackupRepository.Get().FirstOrDefault(x => x.Uuid == uuid);
if (backup == null)
return NotFound();
await MessageService.Emit($"wings.backups.restore", backup);
return NoContent();
}
}

View File

@@ -0,0 +1,115 @@
using Microsoft.AspNetCore.Mvc;
using Moonlight.App.Http.Requests.Wings;
using Moonlight.App.Http.Resources.Wings;
using Moonlight.App.Repositories;
using Moonlight.App.Services;
namespace Moonlight.App.Http.Controllers.Api.Remote;
[ApiController]
[Route("api/remote/sftp/auth")]
public class SftpAuthController : Controller
{
private readonly ServerService ServerService;
private readonly NodeRepository NodeRepository;
public SftpAuthController(
ServerService serverService,
NodeRepository nodeRepository)
{
ServerService = serverService;
NodeRepository = nodeRepository;
}
[HttpPost]
public async Task<ActionResult<SftpLoginResult>> Login(SftpLoginRequest request)
{
var tokenData = Request.Headers.Authorization.ToString().Replace("Bearer ", "");
var tokenId = tokenData.Split(".")[0];
var token = tokenData.Split(".")[1];
var node = NodeRepository.Get().FirstOrDefault(x => x.TokenId == tokenId);
if (node == null)
return NotFound();
if (token != node.Token)
return Unauthorized();
if (request.Type == "public_key") // Deny public key authentication, because moonlight does not implement that
{
return StatusCode(403);
}
// Parse the username
var parts = request.Username.Split(".");
if (parts.Length < 2)
return BadRequest();
if (!int.TryParse(parts[0], out int id))
return BadRequest();
if (!int.TryParse(parts[1], out int serverId))
return BadRequest();
try
{
var server = await ServerService.SftpServerLogin(serverId, id, request.Password);
return Ok(new SftpLoginResult()
{
Server = server.Uuid.ToString(),
User = "",
Permissions = new()
{
"control.console",
"control.start",
"control.stop",
"control.restart",
"websocket.connect",
"file.create",
"file.read",
"file.read-content",
"file.update",
"file.delete",
"file.archive",
"file.sftp",
"user.create",
"user.read",
"user.update",
"user.delete",
"backup.create",
"backup.read",
"backup.delete",
"backup.download",
"backup.restore",
"allocation.read",
"allocation.create",
"allocation.update",
"allocation.delete",
"startup.read",
"startup.update",
"startup.docker-image",
"database.create",
"database.read",
"database.update",
"database.delete",
"database.view_password",
"schedule.create",
"schedule.read",
"schedule.update",
"schedule.delete",
"settings.rename",
"settings.reinstall"
}
});
}
catch (Exception e)
{
// Most of the exception here will be because of stuff like a invalid server id and simular things
// so we ignore them and return 403
return StatusCode(403);
}
}
}