Fix migration issue on invalid json char

This commit is contained in:
nicolas.dorier 2024-09-09 23:15:53 +09:00
parent 222e8f66df
commit c377617b5a
No known key found for this signature in database
GPG key ID: 6618763EF09186FE
5 changed files with 13 additions and 13 deletions

View file

@ -55,13 +55,14 @@ namespace BTCPayServer.Data
};
#pragma warning disable CS0618 // Type or member is obsolete
public void Migrate()
public bool TryMigrate()
{
if (Currency is not null)
return;
return false;
if (Blob is not (null or { Length: 0 }))
{
Blob2 = MigrationExtensions.Unzip(Blob);
Blob2 = MigrationExtensions.SanitizeJSON(Blob2);
Blob = null;
}
var blob = JObject.Parse(Blob2);
@ -349,10 +350,9 @@ namespace BTCPayServer.Data
};
blob["version"] = 3;
Blob2 = blob.ToString(Formatting.None);
return true;
}
public bool ShouldMigrate() => Currency is null;
[NotMapped]
public bool Migrated { get; set; }
static string[] detailsRemoveDefault =

View file

@ -147,5 +147,8 @@ namespace BTCPayServer.Data
return $"{splitted[0]}-CHAIN";
throw new NotSupportedException("Unknown payment id " + paymentMethodId);
}
// Make postgres happy
public static string SanitizeJSON(string json) => json.Replace("\\u0000", string.Empty, StringComparison.OrdinalIgnoreCase);
}
}

View file

@ -17,16 +17,14 @@ namespace BTCPayServer.Data
{
public interface IHasMigration
{
bool ShouldMigrate();
void Migrate();
bool TryMigrate();
bool Migrated { get; set; }
}
public static readonly MigrationInterceptor Instance = new MigrationInterceptor();
public object InitializedInstance(MaterializationInterceptionData materializationData, object entity)
{
if (entity is IHasMigration hasMigration && hasMigration.ShouldMigrate())
if (entity is IHasMigration hasMigration && hasMigration.TryMigrate())
{
hasMigration.Migrate();
hasMigration.Migrated = true;
}
return entity;

View file

@ -16,14 +16,15 @@ namespace BTCPayServer.Data
{
public partial class PaymentData : MigrationInterceptor.IHasMigration
{
public void Migrate()
public bool TryMigrate()
{
#pragma warning disable CS0618 // Type or member is obsolete
if (Currency is not null)
return;
return false;
if (Blob is not (null or { Length: 0 }))
{
Blob2 = MigrationExtensions.Unzip(Blob);
Blob2 = MigrationExtensions.SanitizeJSON(Blob2);
Blob = null;
}
var blob = JObject.Parse(Blob2);
@ -158,9 +159,8 @@ namespace BTCPayServer.Data
Blob2 = blob.ToString(Formatting.None);
Accounted = null;
#pragma warning restore CS0618 // Type or member is obsolete
return true;
}
public bool ShouldMigrate() => Currency is null;
[NotMapped]
public bool Migrated { get; set; }

View file

@ -2835,7 +2835,6 @@ namespace BTCPayServer.Tests
Assert.Equal("coingecko", b.PreferredExchange);
}
[Fact(Timeout = LongRunningTestTimeout)]
[Trait("Integration", "Integration")]
public async Task CanDoInvoiceMigrations()