btcpayserver/BTCPayServer/Services/BTCPayServerEnvironment.cs

96 lines
3.2 KiB
C#
Raw Normal View History

2020-06-29 04:44:35 +02:00
using System;
using System.Linq;
using System.Reflection;
using System.Text;
2021-10-11 05:32:09 +02:00
using BTCPayServer.Configuration;
2019-10-03 10:06:49 +02:00
using Microsoft.AspNetCore.Hosting;
2020-06-28 10:55:27 +02:00
using Microsoft.AspNetCore.Http;
2019-10-03 11:00:07 +02:00
using Microsoft.Extensions.Hosting;
2021-10-11 05:32:09 +02:00
using Microsoft.Extensions.Options;
2020-06-28 10:55:27 +02:00
using NBitcoin;
namespace BTCPayServer.Services
{
public class BTCPayServerEnvironment
{
readonly IHttpContextAccessor httpContext;
readonly TorServices torServices;
2021-10-11 05:32:09 +02:00
public BTCPayServerEnvironment(IWebHostEnvironment env, BTCPayNetworkProvider provider, IHttpContextAccessor httpContext, TorServices torServices, BTCPayServerOptions opts)
{
this.httpContext = httpContext;
Version = typeof(BTCPayServerEnvironment).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;
#if DEBUG
Build = "Debug";
#else
Build = "Release";
#endif
2020-07-30 15:06:54 +02:00
#if ALTCOINS
AltcoinsVersion = true;
#else
AltcoinsVersion = false;
#endif
Environment = env;
2018-04-19 09:54:25 +02:00
NetworkType = provider.NetworkType;
2019-03-18 09:07:39 +01:00
this.torServices = torServices;
2021-10-11 05:32:09 +02:00
CheatMode = opts.CheatMode;
}
2019-10-03 10:06:49 +02:00
public IWebHostEnvironment Environment
{
get; set;
}
public string ExpectedDomain => httpContext.HttpContext.Request.Host.Host;
public string ExpectedHost => httpContext.HttpContext.Request.Host.Value;
public string ExpectedProtocol => httpContext.HttpContext.Request.Scheme;
2019-03-18 09:07:39 +01:00
public string OnionUrl => this.torServices.Services.Where(s => s.ServiceType == TorServiceType.BTCPayServer)
.Select(s => $"http://{s.OnionHost}").FirstOrDefault();
2021-10-11 05:32:09 +02:00
public bool CheatMode { get; set; }
public ChainName NetworkType { get; set; }
public string Version
{
get; set;
}
public string Build
{
get; set;
}
2020-07-30 15:06:54 +02:00
public bool AltcoinsVersion { get; set; }
2020-07-31 03:43:44 +02:00
public bool IsDeveloping
{
get
{
return NetworkType == ChainName.Regtest && Environment.IsDevelopment();
}
}
public bool IsSecure
{
get
{
return NetworkType != ChainName.Mainnet ||
httpContext.HttpContext.Request.Scheme == "https" ||
httpContext.HttpContext.Request.Host.Host.EndsWith(".onion", StringComparison.OrdinalIgnoreCase) ||
Extensions.IsLocalNetwork(httpContext.HttpContext.Request.Host.Host);
}
}
2020-06-28 10:55:27 +02:00
public HttpContext Context => httpContext.HttpContext;
public override string ToString()
{
StringBuilder txt = new StringBuilder();
txt.Append($"@Copyright BTCPayServer v{Version}");
2020-07-30 15:06:54 +02:00
if (AltcoinsVersion)
txt.Append($" (altcoins)");
if (!Environment.IsProduction() || !Build.Equals("Release", StringComparison.OrdinalIgnoreCase))
{
txt.Append($" Environment: {Environment.EnvironmentName} Build: {Build}");
}
return txt.ToString();
}
}
}