public UIAccountController(
     UserManager <ApplicationUser> userManager,
     RoleManager <IdentityRole> roleManager,
     SignInManager <ApplicationUser> signInManager,
     PoliciesSettings policiesSettings,
     SettingsRepository settingsRepository,
     Configuration.BTCPayServerOptions options,
     BTCPayServerEnvironment btcPayServerEnvironment,
     EventAggregator eventAggregator,
     Fido2Service fido2Service,
     UserLoginCodeService userLoginCodeService,
     LnurlAuthService lnurlAuthService,
     LinkGenerator linkGenerator,
     Logs logs)
 {
     _userManager             = userManager;
     _signInManager           = signInManager;
     PoliciesSettings         = policiesSettings;
     _SettingsRepository      = settingsRepository;
     _RoleManager             = roleManager;
     _Options                 = options;
     _btcPayServerEnvironment = btcPayServerEnvironment;
     _fido2Service            = fido2Service;
     _lnurlAuthService        = lnurlAuthService;
     _linkGenerator           = linkGenerator;
     _userLoginCodeService    = userLoginCodeService;
     _eventAggregator         = eventAggregator;
     _logger = logs.PayServer;
     Logs    = logs;
 }
 public GreenfieldStoreOnChainWalletsController(
     IAuthorizationService authorizationService,
     BTCPayWalletProvider btcPayWalletProvider,
     BTCPayNetworkProvider btcPayNetworkProvider,
     WalletRepository walletRepository,
     ExplorerClientProvider explorerClientProvider,
     NBXplorerDashboard nbXplorerDashboard,
     PoliciesSettings policiesSettings,
     UIWalletsController walletsController,
     PayjoinClient payjoinClient,
     DelayedTransactionBroadcaster delayedTransactionBroadcaster,
     EventAggregator eventAggregator,
     WalletReceiveService walletReceiveService,
     IFeeProviderFactory feeProviderFactory,
     LabelFactory labelFactory
     )
 {
     _authorizationService          = authorizationService;
     _btcPayWalletProvider          = btcPayWalletProvider;
     _btcPayNetworkProvider         = btcPayNetworkProvider;
     _walletRepository              = walletRepository;
     _explorerClientProvider        = explorerClientProvider;
     PoliciesSettings               = policiesSettings;
     _nbXplorerDashboard            = nbXplorerDashboard;
     _walletsController             = walletsController;
     _payjoinClient                 = payjoinClient;
     _delayedTransactionBroadcaster = delayedTransactionBroadcaster;
     _eventAggregator               = eventAggregator;
     _walletReceiveService          = walletReceiveService;
     _feeProviderFactory            = feeProviderFactory;
     _labelFactory = labelFactory;
 }
Beispiel #3
0
        public static async Task <(bool HotWallet, bool RPCImport)> CanUseHotWallet(
            this IAuthorizationService authorizationService,
            PoliciesSettings policiesSettings,
            ClaimsPrincipal user)
        {
            if (!user.Identity.IsAuthenticated)
            {
                return(false, false);
            }
            var claimUser = user.Identity as ClaimsIdentity;

            if (claimUser is null)
            {
                return(false, false);
            }

            bool isAdmin = false;

            if (claimUser.AuthenticationType == AuthenticationSchemes.Cookie)
            {
                isAdmin = user.IsInRole(Roles.ServerAdmin);
            }
            else if (claimUser.AuthenticationType == GreenfieldConstants.AuthenticationType)
            {
                isAdmin = (await authorizationService.AuthorizeAsync(user, Policies.CanModifyServerSettings)).Succeeded;
            }
            return(isAdmin ? (true, true) :
                   (policiesSettings?.AllowHotWalletForAll is true, policiesSettings?.AllowHotWalletRPCImportForAll is true));
        }
Beispiel #4
0
        public async Task <IActionResult> Policies(PoliciesSettings settings)
        {
            if (!String.IsNullOrEmpty(settings.RootAppId))
            {
                using (var ctx = _ContextFactory.CreateContext())
                {
                    var app = ctx.Apps.SingleOrDefault(a => a.Id == settings.RootAppId);
                    if (app != null)
                    {
                        settings.RootAppType = Enum.Parse <AppType>(app.AppType);
                    }
                    else
                    {
                        settings.RootAppType = null;
                    }
                }
            }
            else
            {
                // not preserved on client side, but clearing it just in case
                settings.RootAppType = null;
            }

            await _SettingsRepository.UpdateSetting(settings);

            TempData["StatusMessage"] = "Policies updated successfully";
            return(RedirectToAction(nameof(Policies)));
        }
Beispiel #5
0
        public async Task <IActionResult> Policies(PoliciesSettings settings)
        {
            await _SettingsRepository.UpdateSetting(settings);

            TempData["StatusMessage"] = "Policies updated successfully";
            return(View(settings));
        }
        internal void Update(PoliciesSettings data)
        {
            ShowRegister            = !data.LockSubscription;
            DiscourageSearchEngines = data.DiscourageSearchEngines;

            RootAppType = data.RootAppType;
            RootAppId   = data.RootAppId;
        }
 protected GreenfieldLightningNodeApiController(BTCPayNetworkProvider btcPayNetworkProvider,
                                                PoliciesSettings policiesSettings,
                                                IAuthorizationService authorizationService)
 {
     _btcPayNetworkProvider = btcPayNetworkProvider;
     _policiesSettings      = policiesSettings;
     _authorizationService  = authorizationService;
 }
        public async Task <IActionResult> Policies(PoliciesSettings settings, string command = "")
        {
            ViewBag.AppsList = await GetAppSelectList();

            if (command == "add-domain")
            {
                ModelState.Clear();
                settings.DomainToAppMapping.Add(new PoliciesSettings.DomainToAppMappingItem());
                return(View(settings));
            }
            if (command.StartsWith("remove-domain", StringComparison.InvariantCultureIgnoreCase))
            {
                ModelState.Clear();
                var index = int.Parse(command.Substring(command.IndexOf(":", StringComparison.InvariantCultureIgnoreCase) + 1), CultureInfo.InvariantCulture);
                settings.DomainToAppMapping.RemoveAt(index);
                return(View(settings));
            }

            if (!ModelState.IsValid)
            {
                return(View(settings));
            }
            var appIdsToFetch = settings.DomainToAppMapping.Select(item => item.AppId).ToList();

            if (!string.IsNullOrEmpty(settings.RootAppId))
            {
                appIdsToFetch.Add(settings.RootAppId);
            }
            else
            {
                settings.RootAppType = null;
            }

            if (appIdsToFetch.Any())
            {
                using (var ctx = _ContextFactory.CreateContext())
                {
                    var apps = await ctx.Apps.Where(data => appIdsToFetch.Contains(data.Id))
                               .ToDictionaryAsync(data => data.Id, data => Enum.Parse <AppType>(data.AppType));

                    if (!string.IsNullOrEmpty(settings.RootAppId))
                    {
                        settings.RootAppType = apps[settings.RootAppId];
                    }

                    foreach (var domainToAppMappingItem in settings.DomainToAppMapping)
                    {
                        domainToAppMappingItem.AppType = apps[domainToAppMappingItem.AppId];
                    }
                }
            }

            await _SettingsRepository.UpdateSetting(settings);

            TempData["StatusMessage"] = "Policies updated successfully";
            return(RedirectToAction(nameof(Policies)));
        }
        internal void Update(PoliciesSettings data)
        {
            ShowRegister            = !data.LockSubscription;
            DiscourageSearchEngines = data.DiscourageSearchEngines;

            RootAppType        = data.RootAppType;
            RootAppId          = data.RootAppId;
            DomainToAppMapping = data.DomainToAppMapping;
            AllowLightningInternalNodeForAll = data.AllowLightningInternalNodeForAll;
        }
 public GreenfieldInternalLightningNodeApiController(
     BTCPayNetworkProvider btcPayNetworkProvider, PoliciesSettings policiesSettings, LightningClientFactoryService lightningClientFactory,
     IOptions <LightningNetworkOptions> lightningNetworkOptions,
     IAuthorizationService authorizationService) : base(
         btcPayNetworkProvider, policiesSettings, authorizationService)
 {
     _btcPayNetworkProvider   = btcPayNetworkProvider;
     _lightningClientFactory  = lightningClientFactory;
     _lightningNetworkOptions = lightningNetworkOptions;
 }
Beispiel #11
0
 public GreenfieldStoreLightningNetworkPaymentMethodsController(
     StoreRepository storeRepository,
     BTCPayNetworkProvider btcPayNetworkProvider,
     IAuthorizationService authorizationService,
     ISettingsRepository settingsRepository,
     PoliciesSettings policiesSettings)
 {
     _storeRepository       = storeRepository;
     _btcPayNetworkProvider = btcPayNetworkProvider;
     _authorizationService  = authorizationService;
     _settingsRepository    = settingsRepository;
     PoliciesSettings       = policiesSettings;
 }
Beispiel #12
0
 public GreenfieldStoreOnChainPaymentMethodsController(
     StoreRepository storeRepository,
     BTCPayNetworkProvider btcPayNetworkProvider,
     BTCPayWalletProvider walletProvider,
     IAuthorizationService authorizationService,
     ExplorerClientProvider explorerClientProvider,
     PoliciesSettings policiesSettings)
 {
     _storeRepository        = storeRepository;
     _btcPayNetworkProvider  = btcPayNetworkProvider;
     _walletProvider         = walletProvider;
     _authorizationService   = authorizationService;
     _explorerClientProvider = explorerClientProvider;
     PoliciesSettings        = policiesSettings;
 }
 public UIStoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     BitpayAccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     LanguageService langService,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     PoliciesSettings policiesSettings,
     IAuthorizationService authorizationService,
     EventAggregator eventAggregator,
     AppService appService,
     WebhookSender webhookNotificationManager,
     IDataProtectionProvider dataProtector,
     IOptions <ExternalServicesOptions> externalServiceOptions)
 {
     _RateFactory     = rateFactory;
     _Repo            = repo;
     _TokenRepository = tokenRepo;
     _UserManager     = userManager;
     _LangService     = langService;
     _TokenController = tokenController;
     _WalletProvider  = walletProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _policiesSettings          = policiesSettings;
     _authorizationService      = authorizationService;
     _appService                = appService;
     DataProtector              = dataProtector.CreateProtector("ConfigProtector");
     WebhookNotificationManager = webhookNotificationManager;
     _EventAggregator           = eventAggregator;
     _NetworkProvider           = networkProvider;
     _ExplorerProvider          = explorerProvider;
     _ServiceProvider           = serviceProvider;
     _BtcpayServerOptions       = btcpayServerOptions;
     _BTCPayEnv = btcpayEnv;
     _externalServiceOptions = externalServiceOptions;
 }
Beispiel #14
0
 public MainNav(
     AppService appService,
     StoreRepository storeRepo,
     UIStoresController storesController,
     BTCPayNetworkProvider networkProvider,
     UserManager <ApplicationUser> userManager,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     CustodianAccountRepository custodianAccountRepository,
     PoliciesSettings policiesSettings)
 {
     _storeRepo        = storeRepo;
     _appService       = appService;
     _userManager      = userManager;
     _networkProvider  = networkProvider;
     _storesController = storesController;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _custodianAccountRepository     = custodianAccountRepository;
     PoliciesSettings = policiesSettings;
 }
 public GreenfieldUsersController(UserManager <ApplicationUser> userManager,
                                  RoleManager <IdentityRole> roleManager,
                                  SettingsRepository settingsRepository,
                                  PoliciesSettings policiesSettings,
                                  EventAggregator eventAggregator,
                                  IPasswordValidator <ApplicationUser> passwordValidator,
                                  IRateLimitService throttleService,
                                  BTCPayServerOptions options,
                                  IAuthorizationService authorizationService,
                                  UserService userService,
                                  Logs logs)
 {
     this.Logs             = logs;
     _userManager          = userManager;
     _roleManager          = roleManager;
     _settingsRepository   = settingsRepository;
     PoliciesSettings      = policiesSettings;
     _eventAggregator      = eventAggregator;
     _passwordValidator    = passwordValidator;
     _throttleService      = throttleService;
     _options              = options;
     _authorizationService = authorizationService;
     _userService          = userService;
 }
        public async Task <IActionResult> Policies([FromServices] BTCPayNetworkProvider btcPayNetworkProvider, PoliciesSettings settings, string command = "")
        {
            ViewBag.UpdateUrlPresent = _Options.UpdateUrl != null;
            ViewBag.AppsList         = await GetAppSelectList();

            if (command == "add-domain")
            {
                ModelState.Clear();
                settings.DomainToAppMapping.Add(new PoliciesSettings.DomainToAppMappingItem());
                return(View(settings));
            }
            if (command.StartsWith("remove-domain", StringComparison.InvariantCultureIgnoreCase))
            {
                ModelState.Clear();
                var index = int.Parse(command.Substring(command.IndexOf(":", StringComparison.InvariantCultureIgnoreCase) + 1), CultureInfo.InvariantCulture);
                settings.DomainToAppMapping.RemoveAt(index);
                return(View(settings));
            }

            settings.BlockExplorerLinks = settings.BlockExplorerLinks.Where(tuple => btcPayNetworkProvider.GetNetwork(tuple.CryptoCode).BlockExplorerLinkDefault != tuple.Link).ToList();

            if (!ModelState.IsValid)
            {
                return(View(settings));
            }
            var appIdsToFetch = settings.DomainToAppMapping.Select(item => item.AppId).ToList();

            if (!string.IsNullOrEmpty(settings.RootAppId))
            {
                appIdsToFetch.Add(settings.RootAppId);
            }
            else
            {
                settings.RootAppType = null;
            }

            if (appIdsToFetch.Any())
            {
                var apps = (await _AppService.GetApps(appIdsToFetch.ToArray()))
                           .ToDictionary(data => data.Id, data => Enum.Parse <AppType>(data.AppType));
                ;
                if (!string.IsNullOrEmpty(settings.RootAppId))
                {
                    settings.RootAppType = apps[settings.RootAppId];
                }

                foreach (var domainToAppMappingItem in settings.DomainToAppMapping)
                {
                    domainToAppMappingItem.AppType = apps[domainToAppMappingItem.AppId];
                }
            }

            await _SettingsRepository.UpdateSetting(settings);

            BlockExplorerLinkStartupTask.SetLinkOnNetworks(settings.BlockExplorerLinks, btcPayNetworkProvider);
            TempData[WellKnownTempData.SuccessMessage] = "Policies updated successfully";
            return(RedirectToAction(nameof(Policies)));
        }
Beispiel #17
0
 internal void Update(PoliciesSettings data)
 {
     ShowRegister = !data.LockSubscription;
 }
 internal void Update(PoliciesSettings data)
 {
     _policies = data;
 }
Beispiel #19
0
        internal static async Task FirstAdminRegistered(this SettingsRepository settingsRepository, PoliciesSettings policies,
                                                        bool updateCheck, bool disableRegistrations, Logs logs)
        {
            if (updateCheck)
            {
                logs.PayServer.LogInformation("First admin created, enabling checks for new versions");
                policies.CheckForNewVersions = updateCheck;
            }

            if (disableRegistrations)
            {
                // Once the admin user has been created lock subsequent user registrations (needs to be disabled for unit tests that require multiple users).
                logs.PayServer.LogInformation("First admin created, disabling subscription (disable-registration is set to true)");
                policies.LockSubscription = true;
            }

            if (updateCheck || disableRegistrations)
            {
                await settingsRepository.UpdateSetting(policies);
            }
        }