mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-20 10:40:29 +01:00
63 lines
2.2 KiB
C#
63 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BTCPayServer.Configuration
|
|
{
|
|
public class SparkConnectionString
|
|
{
|
|
public Uri Server { get; private set; }
|
|
public string CookeFile { get; private set; }
|
|
|
|
public static bool TryParse(string str, out SparkConnectionString result, out string error)
|
|
{
|
|
if (str == null)
|
|
throw new ArgumentNullException(nameof(str));
|
|
error = null;
|
|
result = null;
|
|
var resultTemp = new SparkConnectionString();
|
|
foreach(var kv in str.Split(';')
|
|
.Select(part => part.Split('='))
|
|
.Where(kv => kv.Length == 2))
|
|
{
|
|
switch (kv[0].ToLowerInvariant())
|
|
{
|
|
case "server":
|
|
if (resultTemp.Server != null)
|
|
{
|
|
error = "Duplicated server attribute";
|
|
return false;
|
|
}
|
|
if (!Uri.IsWellFormedUriString(kv[1], UriKind.Absolute))
|
|
{
|
|
error = "Invalid URI";
|
|
return false;
|
|
}
|
|
resultTemp.Server = new Uri(kv[1], UriKind.Absolute);
|
|
if(resultTemp.Server.Scheme == "http")
|
|
{
|
|
error = "Insecure transport protocol (http)";
|
|
return false;
|
|
}
|
|
break;
|
|
case "cookiefile":
|
|
case "cookiefilepath":
|
|
if (resultTemp.CookeFile != null)
|
|
{
|
|
error = "Duplicated cookiefile attribute";
|
|
return false;
|
|
}
|
|
|
|
resultTemp.CookeFile = kv[1];
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
result = resultTemp;
|
|
return true;
|
|
}
|
|
}
|
|
}
|