using System.Text; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using MoonlightServers.Shared.Admin.Templates; using VYaml.Serialization; namespace MoonlightServers.Api.Admin.Templates; [ApiController] [Route("api/admin/servers/templates")] public class TransferController : Controller { private readonly TemplateTransferService TransferService; public TransferController(TemplateTransferService transferService) { TransferService = transferService; } [HttpGet("{id:int}/export")] public async Task ExportAsync([FromRoute] int id) { var transferModel = await TransferService.ExportAsync(id); if (transferModel == null) return Problem("No template with that id found", statusCode: 404); var yml = YamlSerializer.Serialize(transferModel, new YamlSerializerOptions { Resolver = CompositeResolver.Create([ GeneratedResolver.Instance, StandardResolver.Instance ]) }); return File(yml.ToArray(), "text/yaml", $"{transferModel.Name}.yml"); } [HttpPost("import")] public async Task> ImportAsync() { string content; await using (Stream receiveStream = Request.Body) using (StreamReader readStream = new StreamReader(receiveStream)) content = await readStream.ReadToEndAsync(); if(content.Contains("version: PLCN_v3")) { var importService = HttpContext.RequestServices.GetRequiredService(); var template = await importService.ImportAsync(content); return TemplateMapper.ToDto(template); } if ( content.Contains("PTDL_v2", StringComparison.OrdinalIgnoreCase) || content.Contains("PLCN_v1", StringComparison.OrdinalIgnoreCase) || content.Contains("PLCN_v2", StringComparison.OrdinalIgnoreCase) || content.Contains("PLCN_v3", StringComparison.OrdinalIgnoreCase) ) { var importService = HttpContext.RequestServices.GetRequiredService(); var template = await importService.ImportAsync(content); return TemplateMapper.ToDto(template); } else { var transferModel = YamlSerializer.Deserialize( Encoding.UTF8.GetBytes(content), new YamlSerializerOptions { Resolver = CompositeResolver.Create([ GeneratedResolver.Instance, StandardResolver.Instance ]) } ); var template = await TransferService.ImportAsync(transferModel); return TemplateMapper.ToDto(template); } } }