Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New: Option to disable Email encryption
* New: Option to disable Email encryption (cherry picked from commit 7be5732a3a6679120b0f01bd1eb1207194f57f5e) * Fix possible NullRef in Email Encryption migration (cherry picked from commit 271266b10ac51ee6dd7a7024d346b631bd5397c2) --------- Co-authored-by: Mark McDowall <mark@mcdowall.ca>
- Loading branch information
1 parent
23830f5
commit 4beb5b3
Showing
6 changed files
with
236 additions
and
15 deletions.
There are no files selected for viewing
166 changes: 166 additions & 0 deletions
166
src/NzbDrone.Core.Test/Datastore/Migration/235_email_encryptionFixture.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using FluentAssertions; | ||
using NUnit.Framework; | ||
using NzbDrone.Common.Serializer; | ||
using NzbDrone.Core.Datastore.Migration; | ||
using NzbDrone.Core.Notifications.Email; | ||
using NzbDrone.Core.Test.Framework; | ||
|
||
namespace NzbDrone.Core.Test.Datastore.Migration | ||
{ | ||
[TestFixture] | ||
public class email_encryptionFixture : MigrationTest<email_encryption> | ||
{ | ||
[Test] | ||
public void should_convert_do_not_require_encryption_to_auto() | ||
{ | ||
var db = WithMigrationTestDb(c => | ||
{ | ||
c.Insert.IntoTable("Notifications").Row(new | ||
{ | ||
OnGrab = true, | ||
OnDownload = true, | ||
OnUpgrade = true, | ||
OnHealthIssue = true, | ||
IncludeHealthWarnings = true, | ||
OnRename = true, | ||
OnMovieDelete = false, | ||
Name = "Mail Radarr", | ||
Implementation = "Email", | ||
Tags = "[]", | ||
Settings = new EmailSettings234 | ||
{ | ||
Server = "smtp.gmail.com", | ||
Port = 563, | ||
To = new List<string> { "dont@email.me" }, | ||
RequireEncryption = false | ||
}.ToJson(), | ||
ConfigContract = "EmailSettings" | ||
}); | ||
}); | ||
|
||
var items = db.Query<NotificationDefinition235>("SELECT * FROM \"Notifications\""); | ||
|
||
items.Should().HaveCount(1); | ||
items.First().Implementation.Should().Be("Email"); | ||
items.First().ConfigContract.Should().Be("EmailSettings"); | ||
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred); | ||
} | ||
|
||
[Test] | ||
public void should_convert_require_encryption_to_always() | ||
{ | ||
var db = WithMigrationTestDb(c => | ||
{ | ||
c.Insert.IntoTable("Notifications").Row(new | ||
{ | ||
OnGrab = true, | ||
OnDownload = true, | ||
OnUpgrade = true, | ||
OnHealthIssue = true, | ||
IncludeHealthWarnings = true, | ||
OnRename = true, | ||
OnMovieDelete = false, | ||
Name = "Mail Radarr", | ||
Implementation = "Email", | ||
Tags = "[]", | ||
Settings = new EmailSettings234 | ||
{ | ||
Server = "smtp.gmail.com", | ||
Port = 563, | ||
To = new List<string> { "dont@email.me" }, | ||
RequireEncryption = true | ||
}.ToJson(), | ||
ConfigContract = "EmailSettings" | ||
}); | ||
}); | ||
|
||
var items = db.Query<NotificationDefinition235>("SELECT * FROM \"Notifications\""); | ||
|
||
items.Should().HaveCount(1); | ||
items.First().Implementation.Should().Be("Email"); | ||
items.First().ConfigContract.Should().Be("EmailSettings"); | ||
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Always); | ||
} | ||
|
||
[Test] | ||
public void should_use_defaults_when_settings_are_empty() | ||
{ | ||
var db = WithMigrationTestDb(c => | ||
{ | ||
c.Insert.IntoTable("Notifications").Row(new | ||
{ | ||
OnGrab = true, | ||
OnDownload = true, | ||
OnUpgrade = true, | ||
OnHealthIssue = true, | ||
IncludeHealthWarnings = true, | ||
OnRename = true, | ||
OnMovieDelete = false, | ||
Name = "Mail Radarr", | ||
Implementation = "Email", | ||
Tags = "[]", | ||
Settings = new { }.ToJson(), | ||
ConfigContract = "EmailSettings" | ||
}); | ||
}); | ||
|
||
var items = db.Query<NotificationDefinition235>("SELECT * FROM \"Notifications\""); | ||
|
||
items.Should().HaveCount(1); | ||
items.First().Implementation.Should().Be("Email"); | ||
items.First().ConfigContract.Should().Be("EmailSettings"); | ||
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred); | ||
} | ||
} | ||
|
||
public class NotificationDefinition235 | ||
{ | ||
public int Id { get; set; } | ||
public string Implementation { get; set; } | ||
public string ConfigContract { get; set; } | ||
public EmailSettings235 Settings { get; set; } | ||
public string Name { get; set; } | ||
public bool OnGrab { get; set; } | ||
public bool OnDownload { get; set; } | ||
public bool OnUpgrade { get; set; } | ||
public bool OnRename { get; set; } | ||
public bool OnMovieDelete { get; set; } | ||
public bool OnMovieFileDelete { get; set; } | ||
public bool OnMovieFileDeleteForUpgrade { get; set; } | ||
public bool OnHealthIssue { get; set; } | ||
public bool OnApplicationUpdate { get; set; } | ||
public bool OnManualInteractionRequired { get; set; } | ||
public bool OnMovieAdded { get; set; } | ||
public bool OnHealthRestored { get; set; } | ||
public bool IncludeHealthWarnings { get; set; } | ||
public List<int> Tags { get; set; } | ||
} | ||
|
||
public class EmailSettings234 | ||
{ | ||
public string Server { get; set; } | ||
public int Port { get; set; } | ||
public bool RequireEncryption { get; set; } | ||
public string Username { get; set; } | ||
public string Password { get; set; } | ||
public string From { get; set; } | ||
public IEnumerable<string> To { get; set; } | ||
public IEnumerable<string> Cc { get; set; } | ||
public IEnumerable<string> Bcc { get; set; } | ||
} | ||
|
||
public class EmailSettings235 | ||
{ | ||
public string Server { get; set; } | ||
public int Port { get; set; } | ||
public int UseEncryption { get; set; } | ||
public string Username { get; set; } | ||
public string Password { get; set; } | ||
public string From { get; set; } | ||
public IEnumerable<string> To { get; set; } | ||
public IEnumerable<string> Cc { get; set; } | ||
public IEnumerable<string> Bcc { get; set; } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
src/NzbDrone.Core/Datastore/Migration/235_email_encryption.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
using System.Collections.Generic; | ||
using System.Data; | ||
using Dapper; | ||
using FluentMigrator; | ||
using Newtonsoft.Json.Linq; | ||
using NzbDrone.Common.Serializer; | ||
using NzbDrone.Core.Datastore.Migration.Framework; | ||
|
||
namespace NzbDrone.Core.Datastore.Migration | ||
{ | ||
[Migration(235)] | ||
public class email_encryption : NzbDroneMigrationBase | ||
{ | ||
protected override void MainDbUpgrade() | ||
{ | ||
Execute.WithConnection(ChangeEncryption); | ||
} | ||
|
||
private void ChangeEncryption(IDbConnection conn, IDbTransaction tran) | ||
{ | ||
var updated = new List<object>(); | ||
using (var getEmailCmd = conn.CreateCommand()) | ||
{ | ||
getEmailCmd.Transaction = tran; | ||
getEmailCmd.CommandText = "SELECT \"Id\", \"Settings\" FROM \"Notifications\" WHERE \"Implementation\" = 'Email'"; | ||
|
||
using (var reader = getEmailCmd.ExecuteReader()) | ||
{ | ||
while (reader.Read()) | ||
{ | ||
var id = reader.GetInt32(0); | ||
var settings = Json.Deserialize<JObject>(reader.GetString(1)); | ||
|
||
settings["useEncryption"] = settings.Value<bool?>("requireEncryption") ?? false ? 1 : 0; | ||
settings["requireEncryption"] = null; | ||
|
||
updated.Add(new | ||
{ | ||
Settings = settings.ToJson(), | ||
Id = id | ||
}); | ||
} | ||
} | ||
} | ||
|
||
var updateSql = "UPDATE \"Notifications\" SET \"Settings\" = @Settings WHERE \"Id\" = @Id"; | ||
conn.Execute(updateSql, updated, transaction: tran); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters