* Add updated image upload support on Crowdfund plugin
* Refactor crowdfund image upload fix
* update crowdfund url for greenfield api
* Resolve integration test assertion
* Remove superfluous and unused command argument
* Fix missing validation error
* Minor API controller update
* Property and usage fixes
* Fix test after merge
---------
Co-authored-by: Dennis Reimann <mail@dennisreimann.de>
Validates missing and duplicate IDs on the edit actions and when creating/updating apps via the API.
Fails gracefully by excluding existing items without ID or with duplicate ID for the rest of the cases.
Fixes#6227.
Clicking on Sign Transaction in the Wallet Send page, will, when a hot
wallet is setup, use PostRedirect page to redirect to the
broadcast screen. The problem was that sometimes, s.Driver.PageSource
would return this PostRedirect page rather than the broadcast page.
Waiting for an element of the broadcast page fixes this issue.
* Wallet: Generate receive address automatically
This circumvents landing on a blank page with only the "generate address" button and automatically generates a new address, unless the Unreserve action was used.
* Fix close button leading to same page
* Fix tests
* Remove unreserve feature
---------
Co-authored-by: Nicolas Dorier <nicolas.dorier@gmail.com>
* Handle password reset when SMTP isn't configured or the configuration cannot be validated
* include rel in external a tag
* Simplify it
* Test fix
* Simplify a bit
* selenium test to manage users
---------
Co-authored-by: Dennis Reimann <mail@dennisreimann.de>
Co-authored-by: Nicolas Dorier <nicolas.dorier@gmail.com>
* Store Branding: Apply brand color to backend as well
Closes#5990.
* Add adjustments for different theme scenarios
* Add description text
* Make it optional to apply the brand color to the backend
* Toggle color fixes
* POS: Fix accounting for manually entered keypad amounts
For keypad orders where there are products AND manual amount entries, we didn't account for the latter.
Fixes#6168.
* Adjust wording: "Manual entry" becomes "Custom Amount"
* Fix divisibility in invoice details of lightning amounts
This PR will show 11 decimal in the invoice details for BTC amount
of lightning payment methods.
It also hacks around the fact that some
lightning clients don't create the requested amount of sats, which
resulted in over or under payments. (Blink not supporting msats, and
strike)
Now, In that case, a payment method fee (which can be negative) called tweak fee
will be added to the prompt.
We are also hiding this tweak fee from the user in the checkout page in
order to not disturb the UI with inconsequential fee of 0.000000001 sats.
* Only show 8 digits in checkout, even if amount is 11 digits
* Server: Make sending email optional when adding user
Closes#6158.
* Generate custom invite token and store it in user blob
Closes btcpayserver/app/#46.
* QR code for user invite
Closes#6157.
* Text fix
This is for the checkout page to properly redirect paid invoices with no payment methods (e.g. free invoices with zero amount) to either the receipt page or redirect URL. Only fall back to 404 if there is neither.
Fixes#6123.
* Cleanups
* Add text entries for dictionary pages
* Wording: Keep Clone title consistent with Payment Request cloning
* Dictionaries: List used one first; badge for marking In use
* Greenfield: Add file endpoints and upload
- Endpoints for server files
- File upload using `multipart/form-data`
Closes#6074.
Can also be tested using cURL:
- `curl --location 'https://localhost:14142/api/v1/files' --header 'Authorization: token MY_API_TOKEN' --form 'file=@"LOCAL_FILEPATH"'`
- `curl --location 'https://localhost:14142/api/v1/users/me/picture' --header 'Authorization: token MY_API_TOKEN' --form 'file=@"LOCAL_FILEPATH"'`
* Revert UnresolvedUri changes
* Add upload for store logo
* Rename filter to storeid for consistency with other filters
* Greenfield: Add storeId to notification
* Cleanups
* Greenfield: Allow filtering notifications by store id
* Greenfield: Refactor app endpoints
- Do not change unset data
- Clean up difference between request (template) and data (items/perks)
- Add missing properties (form id and custom tip percentage)
- Update docs
* Revert ToSettings changes in GreenfieldAppsController
* User: Add name and image URL
More personalization options, prerequisite for btcpayserver/app#3.
Additionally:
- Remove ambigious and read-only username from manage view.
- Improve email verification conditions and display.
- Greenfield: Update current user. Prerequisite for btcpayserver/app#13.
* Refactor UpdateCurrentUser
* Replace new columns by UserBlob
* Update email check and add test case for mailbox addresses
---------
Co-authored-by: nicolas.dorier <nicolas.dorier@gmail.com>
* Add setup script for dev basics like users and stores
I'm using and extending this script for setting up the basics after I erase my dev containers. Once you clean out everything with `cd BTCPayServer.Tests && docker-compose down --volumes --remove-orphans && docker-compose up dev` you otherwise have to recreate everything manually. This gives you ...
- An admin user with unrestricted API key
- One additional user per default role
- Store 1: Satoshis Steaks with Hot Wallet and Internal Node (and all users assigned to that store)
- Store 2: Nakamoto Nuggets with Hot Wallet and Merchant LND Lightning node (and all users besides Guest assigned to that store)
- Nakamoto Nuggets also gets Cart and Keypad apps
- Store 3 with External Lightning based store with Customer LND Lightning node
## Sample output
```bash
Admin ID: 78aa0b35-6c72-45ac-a7d4-b7976ebbbb62
Admin API Key: 992023ae659295b14c3b429007bbf67c2fec057d
Store Owner ID: e3151462-b0f8-4342-879e-16e42d3432d9
Store Manager ID: d0f11a4d-7c9f-466d-bbb9-dfba09295446
Store Employee ID: 13a882de-65f1-4be9-819e-be058e54a8a9
Satoshis Steaks Store ID: FDyaDcDxtSnNx77nEtT8VL55tcitcrV3Zoj5B6eoByEL
Nakamoto Nuggets Store ID: 8uJqvtPnvCU1XXBiSNBLGEn5XinwC1qYcyP495pPzn9a
Nakamoto Nuggets Keypad POS ID: 2q3Z6b8RUfwrvMyYngNAbj8kPqU8
Nakamoto Nuggets Cart POS ID: 2TfyrzZjiWnYp9QwWyy4U7y5dAFP
External Lightning Store ID: Cr56Ch7h3cgGPcbsZnKWnqCisMojfAdUVJhsN3zLcqSP
```
* Fix path issue
* UI: Move section navigation to sidebar
* Scroll active nav link into view
* Move CTAs to top right
* Server Settings: Make Policies first page
* Responsive table fixes
* Spacing fixes
* Add breadcrumb samples
* store settings fixes
* payment request fixes
* updates pull payment title
* adds invoice detail fix
* updates server settings breadcrumbs + copy fix
* Don't open Server Settings on Plugins page
* Add breadcrumbs to pull payment views
* adds breadcrumbs to account
* server and store breadcrumb fixes
* fixes access tokens
* Fix payment processor breadcrumbs
* fixes webhook 404
* Final touches
* Fix test
* Add breadcrumb for email rules page
* Design system updates
---------
Co-authored-by: dstrukt <gfxdsign@gmail.com>
* Search: Display text filters in search input
This changes the search text input to also display the filters, which don't have a special UI (e.g. dropdown). Those filters (e.g. orderid) were not displayed before and hence could not be reset.
Fixes#5984.
* Add and fix test
* Design system updates
* Icon fix
* Add new icons, replace show/hide
* Icon replacements
* Test fix
* Icon replacements in Vault
* More icon replacements
* Final icon replacements, remove Font Awesome
* Remove deprecated CSS options
Closes#5945.
* Greenfield: Add brandColor to store APIs
Closes#5946.
* Migrate file IDs to URLs
Closes#5953.
* Greenfield: Add CSS and logo URL to store settings API
Closes#5945.
* Add migration test
* Store and Server branding can reference file's via fileid:ID
* Add PaymentSoundUrl to Store API
---------
Co-authored-by: nicolas.dorier <nicolas.dorier@gmail.com>
* Support pluginable rate providers
This PR allows plugins to provide custom rate providers, that can be contextual to a store. For example, if you use the upcoming fiat offramp plugin, or the Blink plugin, you'll probably want to configure the fetch the rates from them since they are determining the actual fiat rrate to you. However, they require API keys. This PR enables these scenarios, even much more advanced ones, but for example:
* Install fiat offramp plugin
* Configure it
* You can now use the fiat offramp rate provider (no additional config steps beyond selecting the rate source from the select, or maybe the plugin would automatically set it for you once configured)
* Apply suggestions from code review
* Simplify
* Do not use BackgroundFetcherRateProvider for contextual rate prov
---------
Co-authored-by: nicolas.dorier <nicolas.dorier@gmail.com>
* Guard against running current master
With a longer release cycle for v2, we need to guard people from running master and corrupting their data. This adds a new requirement in that a special config must be set when running master. We will remove when v2 rc is ready.
* add envs
* Show Lightning node availability in navigation
Instead of simply communicating the setup state of the store's LN node, this now also checks its availability.
Closes #5940.
* Cleanups
* Add Selenium test for public node page and status in nav
* Cache the available lightning node result
---------
Co-authored-by: nicolas.dorier <nicolas.dorier@gmail.com>
Once more an improvement for the receipt, which also fixes#5882:
- Unify data displayed on the web and print version
- Split cart and additional data and ensure additional data is displayed
- Do not display extra subtotal row if there are no tips or discounts
- Make PosData partial more universal and backwards-compatible by using case insensitive key lookups