Amber nodes are monitored by CommitWatch. Gray nodes are sampled from authenticated GitHub public commit search and may not represent complete contribution history.
This commit refactors BTCPay Server's plugin management into a dedicated plugin and adds an embedded plugin directory that loads content from an external plugin catalog via an iframe. The change moves plugin URLs from the server settings a…
New SafeExternalUrl helper filters plugin metadata URLs to http/https absolute URIs only, mitigating javascript: and relative-link injection in author/documentation fieldsDownloadRemotePlugin now validates that the downloaded manifest identifier matches the requested plugin identifierPlugin directory is rendered via iframe to an external, configurable plugin source, increasing attack surface if the source is compromised or MITM'd
This commit adds a new multisignature wallet setup feature to BTCPay Server. It introduces new database tables, UI flows, controllers, services, and tests for creating and managing multisig wallets. The changes are a feature implementation…
This commit introduces more fine-grained permission checks for BTCPay Server's on-chain wallet API. Previously, many wallet operations required broad 'modify store settings' or 'view store settings' permissions. Now, operations are gated b…
Authorization policy tightening from broad store policies to wallet-specific policiesNew explicit permission checks in transaction creation endpointPayjoin PSBT handling bugfix: clone before finalize to keep Payjoin PSBT unfinalized until after request
This is a large refactoring commit that splits BTCPay Server's wallet functionality into a separate plugin and introduces finer-grained wallet permissions (view, create transactions, sign, broadcast, manage settings, etc.). It also adds ne…
Introduction of granular wallet permissions and role-based access controlRelocation of wallet controllers into a plugin area with updated authorization attributesNew tests assert that wallet-only users cannot access invoices, reports, payment requests, pull payments, payouts, or another store's wallet settings
This commit fixes a bug where BTCPay Server's 'reserved addresses' list could show addresses from a previously replaced wallet. After a user swaps one wallet for another, the old reserved addresses are now filtered out by checking which ad…
Information disclosure: reserved addresses from a replaced wallet could remain visible to the store owner or users with wallet accessAddress/wallet confusion: UI displayed addresses not controlled by the currently configured walletMissing authorization boundary between wallet derivations sharing the same WalletId
This commit refactors how BTCPay Server stores labels for payment requests, moving them from a wallet-based graph system into new store-scoped database tables. It also adds a new API endpoint for updating store-scoped labels. The changes a…
New POST endpoint /stores/{storeId}/update-labels is protected with [Authorize(Policy = Policies.CanModifyStoreSettings)] and [ValidateAntiForgeryToken]Client-side JS extracts and sends the anti-forgery token in the RequestVerificationToken header for label updatesStore-scoped label endpoints verify CurrentStore exists and matches the route storeId before acting