mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-23 22:46:49 +01:00
* Set store context in cookie
* Fix page id usages in view
* Move Pay Button to nav
* Move integrations to plugins nav
* Store switch links to wallet if present
* Test fixes
* Nav fixes
* Fix altcoin view
* Main nav updates
* Wallet setttings nav update
* Move storeId cookie fallback to cookie auth handler
* View fixes
* Test fixes
* Fix profile check
* Rename integrations nav extension point to store-integrations-nav-list
* Allow strings for Active page/category for plugins
* Make invoice list filter based on store context
* Do not set context if we are running authorizer through tag helper
* Fix test and unfiltered invoices
* Add permission helper for wallet links
* Add sanity checks for payment requests and invoices
* Store context in home controller
* Fix PayjoinViaUI test
* Store context for notifications
* Minor UI improvements
* Store context for userstores and vault controller
* Bring back integrations page
* Rename notifications nav pages file
* Fix user stores controller policies
* Controller policy fixes from code review
* CookieAuthHandler: Simplify CanViewInvoices case
* Revert "Controller policy fixes from code review"
This reverts commit 97e8b8379c
.
* Simplify LayoutSimple
* Fix CanViewInvoices condition
Co-authored-by: Kukks <evilkukka@gmail.com>
64 lines
2.9 KiB
C#
64 lines
2.9 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using BTCPayServer.Models;
|
|
using BTCPayServer.Models.InvoicingModels;
|
|
using BTCPayServer.Models.PaymentRequestViewModels;
|
|
using BTCPayServer.Models.ServerViewModels;
|
|
using BTCPayServer.Models.WalletViewModels;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace BTCPayServer
|
|
{
|
|
// Classes here remember users preferences on certain pages and store them in unified blob cookie "UserPrefsCookie"
|
|
public static class ControllerBaseExtension
|
|
{
|
|
public static T ParseListQuery<T>(this ControllerBase ctrl, T model) where T : BasePagingViewModel
|
|
{
|
|
PropertyInfo prop;
|
|
if (model is InvoicesModel)
|
|
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.InvoicesQuery));
|
|
else if (model is ListPaymentRequestsViewModel)
|
|
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.PaymentRequestsQuery));
|
|
else if (model is UsersViewModel)
|
|
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.UsersQuery));
|
|
else if (model is PayoutsModel)
|
|
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.PayoutsQuery));
|
|
else if (model is PullPaymentsModel)
|
|
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.PullPaymentsQuery));
|
|
else
|
|
throw new Exception("Unsupported BasePagingViewModel for cookie user preferences saving");
|
|
|
|
return ProcessParse(ctrl, model, prop);
|
|
}
|
|
|
|
private static T ProcessParse<T>(ControllerBase ctrl, T model, PropertyInfo prop) where T : BasePagingViewModel
|
|
{
|
|
var prefCookie = ctrl.HttpContext.GetUserPrefsCookie();
|
|
|
|
// If the user enter an empty searchTerm, then the variable will be null and not empty string
|
|
// but we want searchTerm to be null only if the user is browsing the page via some link
|
|
// NOT if the user entered some empty search
|
|
var searchTerm = model.SearchTerm;
|
|
searchTerm = searchTerm is string ? searchTerm :
|
|
ctrl.Request.Query.ContainsKey(nameof(searchTerm)) ? string.Empty :
|
|
null;
|
|
if (searchTerm is null)
|
|
{
|
|
var section = prop.GetValue(prefCookie) as ListQueryDataHolder;
|
|
if (section != null && !string.IsNullOrEmpty(section.SearchTerm))
|
|
{
|
|
model.SearchTerm = section.SearchTerm;
|
|
model.TimezoneOffset = section.TimezoneOffset ?? 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
prop.SetValue(prefCookie, new ListQueryDataHolder(model.SearchTerm, model.TimezoneOffset));
|
|
ctrl.Response.Cookies.Append(nameof(UserPrefsCookie), JsonConvert.SerializeObject(prefCookie));
|
|
}
|
|
|
|
return model;
|
|
}
|
|
}
|
|
}
|