btcpayserver-configurator/BTCPayServerDockerConfigurator/Controllers/ConfiguratorController.Advanced.cs
2019-11-15 14:27:33 +01:00

95 lines
3.8 KiB
C#

using System;
using System.Linq;
using System.Net;
using System.Text.Json;
using System.Threading.Tasks;
using BTCPayServerDockerConfigurator.Models;
using Microsoft.AspNetCore.Mvc;
namespace BTCPayServerDockerConfigurator.Controllers
{
public partial class ConfiguratorController
{
[HttpGet("advanced")]
public IActionResult AdvancedSettings()
{
var model = GetConfiguratorSettings();
return View(new UpdateSettings<AdvancedSettings, AdvancedSettingsAdditionalData>()
{
Json = model.ToString(),
Settings = model.AdvancedSettings,
Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = model.AdvancedSettings.AnythingSet()
}
});
}
[HttpPost("advanced")]
public async Task<IActionResult> AdvancedSettings(UpdateSettings<AdvancedSettings, AdvancedSettingsAdditionalData> updateSettings,
string command = null)
{
switch (command)
{
case "show":
updateSettings.Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = true
};
return View(updateSettings);
case "add-additional":
updateSettings.Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = true
};
updateSettings.Settings.AdditionalFragments.Add("");
return View(updateSettings);
case string commandx
when commandx.StartsWith("remove-additional", StringComparison.InvariantCultureIgnoreCase):
{
updateSettings.Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = true
};
var index = int.Parse(commandx.Substring(commandx.IndexOf(":", StringComparison.Ordinal) + 1));
updateSettings.Settings.AdditionalFragments.RemoveAt(index);
return View(updateSettings);
}
case "add-excluded":
updateSettings.Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = true
};
updateSettings.Settings.ExcludedFragments.Add("");
return View(updateSettings);
case string commandx
when commandx.StartsWith("remove-excluded", StringComparison.InvariantCultureIgnoreCase):
{
updateSettings.Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = true
};
var index = int.Parse(commandx.Substring(commandx.IndexOf(":", StringComparison.Ordinal) + 1));
updateSettings.Settings.ExcludedFragments.RemoveAt(index);
return View(updateSettings);
}
}
if (!ModelState.IsValid)
{
updateSettings.Additional = new AdvancedSettingsAdditionalData()
{
ShowSettings = true
};
return View(updateSettings);
}
var configuratorSettings = string.IsNullOrEmpty(updateSettings.Json)
? new ConfiguratorSettings()
: JsonSerializer.Deserialize<ConfiguratorSettings>(updateSettings.Json);
configuratorSettings.AdvancedSettings = updateSettings.Settings;
SetConfiguratorSettings(configuratorSettings);
return RedirectToAction(nameof(Summary));
}
}
}