Compare commits
11 Commits
v1.9.0-rc4
...
v1.9.1
Author | SHA1 | Date | |
---|---|---|---|
d738f797ec | |||
b5de97f785 | |||
b0c1b0895d | |||
8e60932f81 | |||
7d14cd74f2 | |||
717f1610f5 | |||
f1abe6497f | |||
046129a57d | |||
90d300a490 | |||
a2d506c0db | |||
58748a24da |
BTCPayServer.Tests
BTCPayServer
Controllers
Hosting
Payments/Lightning
Services
Views
wwwroot
Build
Changelog.md@ -188,8 +188,10 @@ namespace BTCPayServer.Tests
|
||||
});
|
||||
|
||||
s.Driver.Navigate().Refresh();
|
||||
|
||||
// Pay full amount
|
||||
s.PayInvoice();
|
||||
|
||||
// Processing
|
||||
TestUtils.Eventually(() =>
|
||||
{
|
||||
@ -197,8 +199,9 @@ namespace BTCPayServer.Tests
|
||||
Assert.True(processingSection.Displayed);
|
||||
Assert.Contains("Payment Received", processingSection.Text);
|
||||
Assert.Contains("Your payment has been received and is now processing", processingSection.Text);
|
||||
Assert.True(s.Driver.ElementDoesNotExist(By.Id("confetti")));
|
||||
});
|
||||
s.Driver.FindElement(By.Id("confetti"));
|
||||
|
||||
// Mine
|
||||
s.MineBlockOnInvoiceCheckout();
|
||||
TestUtils.Eventually(() =>
|
||||
|
@ -2445,6 +2445,31 @@ namespace BTCPayServer.Tests
|
||||
Assert.False(fn.Seen);
|
||||
}
|
||||
|
||||
[Fact(Timeout = LongRunningTestTimeout)]
|
||||
[Trait("Integration", "Integration")]
|
||||
public async Task CanFixMappedDomainAppType()
|
||||
{
|
||||
using var tester = CreateServerTester(newDb: true);
|
||||
await tester.StartAsync();
|
||||
var f = tester.PayTester.GetService<ApplicationDbContextFactory>();
|
||||
using (var ctx = f.CreateContext())
|
||||
{
|
||||
var setting = new SettingData() { Id = "BTCPayServer.Services.PoliciesSettings" };
|
||||
setting.Value = JObject.Parse("{\"RootAppId\": null, \"RootAppType\": 1, \"Experimental\": false, \"PluginSource\": null, \"LockSubscription\": false, \"DisableSSHService\": false, \"PluginPreReleases\": false, \"BlockExplorerLinks\": [],\"DomainToAppMapping\": [{\"AppId\": \"87kj5yKay8mB4UUZcJhZH5TqDKMD3CznjwLjiu1oYZXe\", \"Domain\": \"donate.nicolas-dorier.com\", \"AppType\": 0}], \"CheckForNewVersions\": false, \"AllowHotWalletForAll\": false, \"RequiresConfirmedEmail\": false, \"DiscourageSearchEngines\": false, \"DisableInstantNotifications\": false, \"DisableNonAdminCreateUserApi\": false, \"AllowHotWalletRPCImportForAll\": false, \"AllowLightningInternalNodeForAll\": false, \"DisableStoresToUseServerEmailSettings\": false}").ToString();
|
||||
ctx.Settings.Add(setting);
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
await RestartMigration(tester);
|
||||
using (var ctx = f.CreateContext())
|
||||
{
|
||||
var setting = await ctx.Settings.FirstOrDefaultAsync(c => c.Id == "BTCPayServer.Services.PoliciesSettings");
|
||||
var o = JObject.Parse(setting.Value);
|
||||
Assert.Equal("Crowdfund", o["RootAppType"].Value<string>());
|
||||
o = (JObject)((JArray)o["DomainToAppMapping"])[0];
|
||||
Assert.Equal("PointOfSale", o["AppType"].Value<string>());
|
||||
}
|
||||
}
|
||||
|
||||
[Fact(Timeout = LongRunningTestTimeout)]
|
||||
[Trait("Integration", "Integration")]
|
||||
public async Task CanDoLightningInternalNodeMigration()
|
||||
|
@ -243,7 +243,7 @@ services:
|
||||
- "5432"
|
||||
|
||||
merchant_lnd:
|
||||
image: btcpayserver/lnd:v0.15.4-beta-1
|
||||
image: btcpayserver/lnd:v0.16.0-beta
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
LND_CHAIN: "btc"
|
||||
@ -278,7 +278,7 @@ services:
|
||||
- bitcoind
|
||||
|
||||
customer_lnd:
|
||||
image: btcpayserver/lnd:v0.15.4-beta-1
|
||||
image: btcpayserver/lnd:v0.16.0-beta
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
LND_CHAIN: "btc"
|
||||
|
@ -230,7 +230,7 @@ services:
|
||||
- "5432"
|
||||
|
||||
merchant_lnd:
|
||||
image: btcpayserver/lnd:v0.15.4-beta-1
|
||||
image: btcpayserver/lnd:v0.16.0-beta
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
LND_CHAIN: "btc"
|
||||
@ -267,7 +267,7 @@ services:
|
||||
- bitcoind
|
||||
|
||||
customer_lnd:
|
||||
image: btcpayserver/lnd:v0.15.4-beta-1
|
||||
image: btcpayserver/lnd:v0.16.0-beta
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
LND_CHAIN: "btc"
|
||||
|
@ -754,7 +754,7 @@ namespace BTCPayServer.Controllers
|
||||
{
|
||||
case "auto":
|
||||
case null when storeBlob.AutoDetectLanguage:
|
||||
lang = _languageService.AutoDetectLanguageUsingHeader(HttpContext.Request.Headers, null).Code;
|
||||
lang = _languageService.AutoDetectLanguageUsingHeader(HttpContext.Request.Headers, null)?.Code;
|
||||
break;
|
||||
case { } langs when !string.IsNullOrEmpty(langs):
|
||||
{
|
||||
|
@ -242,6 +242,12 @@ namespace BTCPayServer.Hosting
|
||||
settings.FixSeqAfterSqliteMigration = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
if (!settings.FixMappedDomainAppType)
|
||||
{
|
||||
await FixMappedDomainAppType();
|
||||
settings.FixMappedDomainAppType = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -250,6 +256,44 @@ namespace BTCPayServer.Hosting
|
||||
}
|
||||
}
|
||||
|
||||
private async Task FixMappedDomainAppType()
|
||||
{
|
||||
await using var ctx = _DBContextFactory.CreateContext();
|
||||
var setting = await ctx.Settings.FirstOrDefaultAsync(s => s.Id == "BTCPayServer.Services.PoliciesSettings");
|
||||
if (setting?.Value is null)
|
||||
return;
|
||||
string MapToString(int v)
|
||||
{
|
||||
return v switch
|
||||
{
|
||||
0 => "PointOfSale",
|
||||
1 => "Crowdfund",
|
||||
_ => throw new NotSupportedException()
|
||||
};
|
||||
}
|
||||
var data = JObject.Parse(setting.Value);
|
||||
if (data["RootAppType"]?.Type is JTokenType.Integer)
|
||||
{
|
||||
var v = data["RootAppType"].Value<int>();
|
||||
data["RootAppType"] = new JValue(MapToString(v));
|
||||
}
|
||||
var arr = data["DomainToAppMapping"] as JArray;
|
||||
if (arr != null)
|
||||
{
|
||||
foreach (var map in arr)
|
||||
{
|
||||
if (map["AppType"]?.Type is JTokenType.Integer)
|
||||
{
|
||||
var v = map["AppType"].Value<int>();
|
||||
map["AppType"] = new JValue(MapToString(v));
|
||||
}
|
||||
}
|
||||
}
|
||||
setting.Value = data.ToString();
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
||||
private async Task FixSeqAfterSqliteMigration()
|
||||
{
|
||||
await using var ctx = _DBContextFactory.CreateContext();
|
||||
|
@ -66,7 +66,7 @@ namespace BTCPayServer.Payments.Lightning
|
||||
|
||||
public string GetPaymentProof()
|
||||
{
|
||||
return Preimage.ToString();
|
||||
return Preimage?.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,5 +36,6 @@ namespace BTCPayServer.Services
|
||||
public bool MigrateWalletColors { get; set; }
|
||||
public bool FileSystemStorageAsDefault { get; set; }
|
||||
public bool FixSeqAfterSqliteMigration { get; set; }
|
||||
public bool FixMappedDomainAppType { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -112,6 +112,7 @@
|
||||
<div v-if="isProcessing" id="processing" key="processing">
|
||||
<div class="top">
|
||||
<span class="icn">
|
||||
<div id="confetti" v-if="srvModel.celebratePayment" v-on:click="celebratePayment(5000)"></div>
|
||||
<vc:icon symbol="payment-sent" />
|
||||
</span>
|
||||
<h4 v-t="'payment_received'"></h4>
|
||||
|
@ -167,7 +167,7 @@
|
||||
<div class="form-check">
|
||||
<input asp-for="AutoDetectLanguage" type="checkbox" class="form-check-input" />
|
||||
<label asp-for="AutoDetectLanguage" class="form-check-label"></label>
|
||||
<div class="form-text">Detects the language of the customer's browser with 99.9% accuracy.</div>
|
||||
<div class="form-text">Detects the language of the customer's browser.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
@ -34,6 +34,10 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-9-0/" target="_blank" rel="noreferrer noopener">v1.9.0</a></h5>
|
||||
<p class="mb-2">Lots of improvements for our new checkout experience, which is now also the default for new stores — better NFC support, improved receipts and … confetti! 🎉</p>
|
||||
<p class="mb-0">You'll also notice that wallet labels are featured more prominently. And the invoice details page now contains all the information you'd expect.</p>
|
||||
<hr style="height:1px;background-color:var(--btcpay-body-text-muted);margin:var(--btcpay-space-m) 0;" />
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-8-0/" target="_blank" rel="noreferrer noopener">v1.8.0</a></h5>
|
||||
<p class="mb-2">Bear markets are for building: This version brings custom checkout forms, store branding options, a redesigned Point of Sale keypad view, new notification icons and address labeling.</p>
|
||||
<p class="mb-0">You like that? Consider <a href="https://opensats.org/projects/btcpayserver" target="_blank" rel="noreferrer noopener">supporting BTCPay Server via OpenSats</a>.</p>
|
||||
@ -41,10 +45,6 @@
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-7-0/" target="_blank" rel="noreferrer noopener">v1.7.0</a></h5>
|
||||
<p class="mb-2">We've redesigned the checkout and the new version is available as an opt-in feature. We're looking forward to your <a href="https://github.com/btcpayserver/btcpayserver/discussions/4308" target="_blank" rel="noreferrer noopener">feedback</a>!</p>
|
||||
<p class="mb-0">You can now also request customer data (e.g. their shipping address) when they pay an invoice.</p>
|
||||
<hr style="height:1px;background-color:var(--btcpay-body-text-muted);margin:var(--btcpay-space-m) 0;" />
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-6-0/" target="_blank" rel="noreferrer noopener">v1.6.0</a></h5>
|
||||
<p class="mb-2">The dashboard now contains your Lightning balances and services, as well as Point of Sale statistics.</p>
|
||||
<p class="mb-0">We've also added invoice receipts and LNURL withdraw for payouts.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -192,6 +192,11 @@ function initApp() {
|
||||
if (newValue === true && oldValue === false) {
|
||||
// poll from here on
|
||||
this.listenForConfirmations();
|
||||
// celebration!
|
||||
const self = this;
|
||||
Vue.nextTick(function () {
|
||||
self.celebratePayment(5000);
|
||||
});
|
||||
}
|
||||
},
|
||||
isSettled: function (newValue, oldValue) {
|
||||
|
@ -128,7 +128,6 @@
|
||||
"get": {
|
||||
"tags": [
|
||||
"Apps",
|
||||
"POS",
|
||||
"Point of Sale"
|
||||
],
|
||||
"operationId": "Apps_GetPointOfSaleApp",
|
||||
|
@ -189,7 +189,7 @@
|
||||
"StoreUserDataList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/StoreData"
|
||||
"$ref": "#/components/schemas/StoreUserData"
|
||||
}
|
||||
},
|
||||
"StoreUserData": {
|
||||
|
@ -1,5 +1,5 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>1.9.0</Version>
|
||||
<Version>1.9.1</Version>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
@ -1,5 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## 1.9.1
|
||||
|
||||
### Bug fixes
|
||||
|
||||
* Fix crash if auto detect language on checkout page, and the language couldn't be detected (Fix #4881) @NicolasDorier
|
||||
* Error 500 when viewing Receipt Page (Fix #4884) @dennisreimann
|
||||
* When updating to version v1.9.0 the mapping to the APP stops working (Fix #4882) @NicolasDorier
|
||||
|
||||
## 1.9.0
|
||||
|
||||
### Breaking change
|
||||
@ -40,6 +48,7 @@ We introduce another flag, `--deprecated`, which allows you to start with SQLite
|
||||
* Point of Sale: Fix escaped HTML entities in item title (#4798) @dennisreimann
|
||||
* Fix: Labels added by payouts to transactions shouldn't show HTML markups (#4790) @dennisreimann
|
||||
* If store user is Guest, "issue refund" shouldn't be an option (#4595 #3512) @Kukks
|
||||
* Fix wrong data mapping to store data instead of store user data (#4874) @ndeet
|
||||
|
||||
### Improvements
|
||||
|
||||
|
Reference in New Issue
Block a user