From aad4a8e696160b98084a0791177404b8b7ce7c22 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 6 Jun 2025 17:43:46 +0200 Subject: [PATCH 1/8] Remove string length limit --- src/Core/KeyManagement/Entities/UserSignatureKeyPair.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Core/KeyManagement/Entities/UserSignatureKeyPair.cs b/src/Core/KeyManagement/Entities/UserSignatureKeyPair.cs index fcac83a1bc..c2b2c1c538 100644 --- a/src/Core/KeyManagement/Entities/UserSignatureKeyPair.cs +++ b/src/Core/KeyManagement/Entities/UserSignatureKeyPair.cs @@ -1,5 +1,4 @@ -using System.ComponentModel.DataAnnotations; -using Bit.Core.Entities; +using Bit.Core.Entities; using Bit.Core.KeyManagement.Enums; using Bit.Core.Utilities; @@ -13,9 +12,7 @@ public class UserSignatureKeyPair : ITableObject, IRevisable public Guid UserId { get; set; } public SignatureAlgorithm SignatureAlgorithm { get; set; } - [MaxLength(500)] required public string VerifyingKey { get; set; } - [MaxLength(500)] required public string SigningKey { get; set; } public DateTime CreationDate { get; set; } = DateTime.UtcNow; From d699c0115ad73fa4f0a2ebe7e2ae4ab12f8a576d Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 6 Jun 2025 18:00:51 +0200 Subject: [PATCH 2/8] Regenerate EF migrations --- .../DatabaseContextModelSnapshot.cs | 6 +-- .../DatabaseContextModelSnapshot.cs | 6 +-- util/Setup/Program.cs | 37 ++++++++++--------- .../DatabaseContextModelSnapshot.cs | 2 - 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs index 238ca3ab86..d1a0c8d98f 100644 --- a/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -1752,16 +1752,14 @@ namespace Bit.MySqlMigrations.Migrations b.Property("SigningKey") .IsRequired() - .HasMaxLength(500) - .HasColumnType("varchar(500)"); + .HasColumnType("longtext"); b.Property("UserId") .HasColumnType("char(36)"); b.Property("VerifyingKey") .IsRequired() - .HasMaxLength(500) - .HasColumnType("varchar(500)"); + .HasColumnType("longtext"); b.HasKey("Id"); diff --git a/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs index 69cb237766..c0850cea68 100644 --- a/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -1758,16 +1758,14 @@ namespace Bit.PostgresMigrations.Migrations b.Property("SigningKey") .IsRequired() - .HasMaxLength(500) - .HasColumnType("character varying(500)"); + .HasColumnType("text"); b.Property("UserId") .HasColumnType("uuid"); b.Property("VerifyingKey") .IsRequired() - .HasMaxLength(500) - .HasColumnType("character varying(500)"); + .HasColumnType("text"); b.HasKey("Id"); diff --git a/util/Setup/Program.cs b/util/Setup/Program.cs index 921c32f5e6..50f3046d6d 100644 --- a/util/Setup/Program.cs +++ b/util/Setup/Program.cs @@ -20,29 +20,30 @@ public class Program ParseParameters(); - if (_context.Parameters.TryGetValue("q", out var q)) + if (_context.Parameters.ContainsKey("q")) { - _context.Quiet = q == "true" || q == "1"; + _context.Quiet = _context.Parameters["q"] == "true" || _context.Parameters["q"] == "1"; } - if (_context.Parameters.TryGetValue("os", out var os)) + if (_context.Parameters.ContainsKey("os")) { - _context.HostOS = os; + _context.HostOS = _context.Parameters["os"]; } - if (_context.Parameters.TryGetValue("corev", out var coreVersion)) + if (_context.Parameters.ContainsKey("corev")) { - _context.CoreVersion = coreVersion; + _context.CoreVersion = _context.Parameters["corev"]; } - if (_context.Parameters.TryGetValue("webv", out var webVersion)) + if (_context.Parameters.ContainsKey("webv")) { - _context.WebVersion = webVersion; + _context.WebVersion = _context.Parameters["webv"]; } - if (_context.Parameters.TryGetValue("keyconnectorv", out var keyConnectorVersion)) + if (_context.Parameters.ContainsKey("keyconnectorv")) { - _context.KeyConnectorVersion = keyConnectorVersion; + _context.KeyConnectorVersion = _context.Parameters["keyconnectorv"]; } - if (_context.Parameters.TryGetValue("stub", out var stub)) + if (_context.Parameters.ContainsKey("stub")) { - _context.Stub = stub == "true" || stub == "1"; + _context.Stub = _context.Parameters["stub"] == "true" || + _context.Parameters["stub"] == "1"; } Helpers.WriteLine(_context); @@ -67,18 +68,18 @@ public class Program private static void Install() { - if (_context.Parameters.TryGetValue("letsencrypt", out var sslManagedLetsEncrypt)) + if (_context.Parameters.ContainsKey("letsencrypt")) { _context.Config.SslManagedLetsEncrypt = - sslManagedLetsEncrypt.ToLowerInvariant() == "y"; + _context.Parameters["letsencrypt"].ToLowerInvariant() == "y"; } - if (_context.Parameters.TryGetValue("domain", out var domain)) + if (_context.Parameters.ContainsKey("domain")) { - _context.Install.Domain = domain.ToLowerInvariant(); + _context.Install.Domain = _context.Parameters["domain"].ToLowerInvariant(); } - if (_context.Parameters.TryGetValue("dbname", out var database)) + if (_context.Parameters.ContainsKey("dbname")) { - _context.Install.Database = database; + _context.Install.Database = _context.Parameters["dbname"]; } if (_context.Stub) diff --git a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs index ae3d7a0d47..dbfb180002 100644 --- a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -1741,7 +1741,6 @@ namespace Bit.SqliteMigrations.Migrations b.Property("SigningKey") .IsRequired() - .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("UserId") @@ -1749,7 +1748,6 @@ namespace Bit.SqliteMigrations.Migrations b.Property("VerifyingKey") .IsRequired() - .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); From baba8290054b3a9b99040b8c2bd882092a4821cc Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 6 Jun 2025 18:03:31 +0200 Subject: [PATCH 3/8] Undo changes to program.cs --- util/Setup/Program.cs | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/util/Setup/Program.cs b/util/Setup/Program.cs index 50f3046d6d..921c32f5e6 100644 --- a/util/Setup/Program.cs +++ b/util/Setup/Program.cs @@ -20,30 +20,29 @@ public class Program ParseParameters(); - if (_context.Parameters.ContainsKey("q")) + if (_context.Parameters.TryGetValue("q", out var q)) { - _context.Quiet = _context.Parameters["q"] == "true" || _context.Parameters["q"] == "1"; + _context.Quiet = q == "true" || q == "1"; } - if (_context.Parameters.ContainsKey("os")) + if (_context.Parameters.TryGetValue("os", out var os)) { - _context.HostOS = _context.Parameters["os"]; + _context.HostOS = os; } - if (_context.Parameters.ContainsKey("corev")) + if (_context.Parameters.TryGetValue("corev", out var coreVersion)) { - _context.CoreVersion = _context.Parameters["corev"]; + _context.CoreVersion = coreVersion; } - if (_context.Parameters.ContainsKey("webv")) + if (_context.Parameters.TryGetValue("webv", out var webVersion)) { - _context.WebVersion = _context.Parameters["webv"]; + _context.WebVersion = webVersion; } - if (_context.Parameters.ContainsKey("keyconnectorv")) + if (_context.Parameters.TryGetValue("keyconnectorv", out var keyConnectorVersion)) { - _context.KeyConnectorVersion = _context.Parameters["keyconnectorv"]; + _context.KeyConnectorVersion = keyConnectorVersion; } - if (_context.Parameters.ContainsKey("stub")) + if (_context.Parameters.TryGetValue("stub", out var stub)) { - _context.Stub = _context.Parameters["stub"] == "true" || - _context.Parameters["stub"] == "1"; + _context.Stub = stub == "true" || stub == "1"; } Helpers.WriteLine(_context); @@ -68,18 +67,18 @@ public class Program private static void Install() { - if (_context.Parameters.ContainsKey("letsencrypt")) + if (_context.Parameters.TryGetValue("letsencrypt", out var sslManagedLetsEncrypt)) { _context.Config.SslManagedLetsEncrypt = - _context.Parameters["letsencrypt"].ToLowerInvariant() == "y"; + sslManagedLetsEncrypt.ToLowerInvariant() == "y"; } - if (_context.Parameters.ContainsKey("domain")) + if (_context.Parameters.TryGetValue("domain", out var domain)) { - _context.Install.Domain = _context.Parameters["domain"].ToLowerInvariant(); + _context.Install.Domain = domain.ToLowerInvariant(); } - if (_context.Parameters.ContainsKey("dbname")) + if (_context.Parameters.TryGetValue("dbname", out var database)) { - _context.Install.Database = _context.Parameters["dbname"]; + _context.Install.Database = database; } if (_context.Stub) From 764509f16b4736b3fefa82e725ad3f18ae2c941f Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 9 Jun 2025 09:23:56 +0200 Subject: [PATCH 4/8] Update util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> --- .../DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql index 5310aa1015..e6c0767c8f 100644 --- a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql +++ b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql @@ -56,7 +56,7 @@ BEGIN END GO -CREATE PROCEDURE [dbo].[UserSignatureKeyPair_SetForRotation] +CREATE OR ALTER PROCEDURE [dbo].[UserSignatureKeyPair_SetForRotation] @Id UNIQUEIDENTIFIER, @UserId UNIQUEIDENTIFIER, @SignatureKeyPairAlgorithm TINYINT, From 7f14f6f9f34e37e582179105b02707780ff0c484 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 9 Jun 2025 09:24:28 +0200 Subject: [PATCH 5/8] Update util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> --- .../DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql index e6c0767c8f..5a464fa317 100644 --- a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql +++ b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql @@ -39,7 +39,7 @@ BEGIN END GO -CREATE PROCEDURE [dbo].[UserSignatureKeyPair_UpdateForRotation] +CREATE OR ALTER PROCEDURE [dbo].[UserSignatureKeyPair_UpdateForRotation] @UserId UNIQUEIDENTIFIER, @SignatureKeyPairAlgorithm TINYINT, @SigningKey VARCHAR(MAX), From 18cbc70ab56bbac59a041263fe8933afe5922dea Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 9 Jun 2025 09:24:50 +0200 Subject: [PATCH 6/8] Update util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> --- .../DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql index 5a464fa317..0dcf44e4c0 100644 --- a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql +++ b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql @@ -29,7 +29,7 @@ FROM [dbo].[UserSignatureKeyPair] GO -CREATE PROCEDURE [dbo].[UserSignatureKeyPair_ReadByUserId] +CREATE OR ALTER PROCEDURE [dbo].[UserSignatureKeyPair_ReadByUserId] @UserId UNIQUEIDENTIFIER AS BEGIN From 576d9d79f52fc5c22c5d389fd6dcaf0420859e58 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 9 Jun 2025 09:25:20 +0200 Subject: [PATCH 7/8] Update util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> --- ...2025-06-01_00_AddSignatureKeyPairTable.sql | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql index 0dcf44e4c0..ca022f907b 100644 --- a/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql +++ b/util/Migrator/DbScripts/2025-06-01_00_AddSignatureKeyPairTable.sql @@ -1,14 +1,18 @@ -CREATE TABLE [dbo].[UserSignatureKeyPair] ( - [Id] UNIQUEIDENTIFIER NOT NULL, - [UserId] UNIQUEIDENTIFIER NOT NULL, - [SignatureKeyPairAlgorithm] TINYINT NOT NULL, - [SigningKey] VARCHAR(MAX) NOT NULL, - [VerifyingKey] VARCHAR(MAX) NOT NULL, - [CreationDate] DATETIME2 (7) NOT NULL, - [RevisionDate] DATETIME2 (7) NOT NULL, - CONSTRAINT [PK_UserSignatureKeyPair] PRIMARY KEY CLUSTERED ([Id] ASC), - CONSTRAINT [FK_UserSignatureKeyPair_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id]) -); +IF OBJECT_ID('[dbo].[UserSignatureKeyPair]') IS NULL +BEGIN + CREATE TABLE [dbo].[UserSignatureKeyPair] + ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [UserId] UNIQUEIDENTIFIER NOT NULL, + [SignatureKeyPairAlgorithm] TINYINT NOT NULL, + [SigningKey] VARCHAR(MAX) NOT NULL, + [VerifyingKey] VARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_UserSignatureKeyPair] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_UserSignatureKeyPair_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id]) + ); +END GO IF NOT EXISTS(SELECT name From 503e2b36aced25559a8af185b3f62ab1305350a1 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 9 Jun 2025 09:47:14 +0200 Subject: [PATCH 8/8] Rename dbset to plural --- .../Repositories/UserSignatureKeyPairRepository.cs | 8 ++++---- .../Repositories/DatabaseContext.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Infrastructure.EntityFramework/KeyManagement/Repositories/UserSignatureKeyPairRepository.cs b/src/Infrastructure.EntityFramework/KeyManagement/Repositories/UserSignatureKeyPairRepository.cs index 645f8cc6b3..735a1f6261 100644 --- a/src/Infrastructure.EntityFramework/KeyManagement/Repositories/UserSignatureKeyPairRepository.cs +++ b/src/Infrastructure.EntityFramework/KeyManagement/Repositories/UserSignatureKeyPairRepository.cs @@ -10,13 +10,13 @@ using Microsoft.Extensions.DependencyInjection; namespace Bit.Infrastructure.EntityFramework.KeyManagement.Repositories; -public class UserSignatureKeyPairRepository(IServiceScopeFactory serviceScopeFactory, IMapper mapper) : Repository(serviceScopeFactory, mapper, context => context.UserSignatureKeyPair), IUserSignatureKeyPairRepository +public class UserSignatureKeyPairRepository(IServiceScopeFactory serviceScopeFactory, IMapper mapper) : Repository(serviceScopeFactory, mapper, context => context.UserSignatureKeyPairs), IUserSignatureKeyPairRepository { public async Task GetByUserIdAsync(Guid userId) { await using var scope = ServiceScopeFactory.CreateAsyncScope(); var dbContext = GetDatabaseContext(scope); - var signingKeys = await dbContext.UserSignatureKeyPair.FindAsync(userId); + var signingKeys = await dbContext.UserSignatureKeyPairs.FindAsync(userId); if (signingKeys == null) { return null; @@ -45,7 +45,7 @@ public class UserSignatureKeyPairRepository(IServiceScopeFactory serviceScopeFac CreationDate = DateTime.UtcNow, RevisionDate = DateTime.UtcNow, }; - await dbContext.UserSignatureKeyPair.AddAsync(entity); + await dbContext.UserSignatureKeyPairs.AddAsync(entity); await dbContext.SaveChangesAsync(); }; } @@ -56,7 +56,7 @@ public class UserSignatureKeyPairRepository(IServiceScopeFactory serviceScopeFac { await using var scope = ServiceScopeFactory.CreateAsyncScope(); var dbContext = GetDatabaseContext(scope); - var entity = await dbContext.UserSignatureKeyPair.FirstOrDefaultAsync(x => x.UserId == grantorId); + var entity = await dbContext.UserSignatureKeyPairs.FirstOrDefaultAsync(x => x.UserId == grantorId); if (entity != null) { entity.SignatureAlgorithm = signingKeys.SignatureAlgorithm; diff --git a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs index 3c2e8b2d50..a68a9767f1 100644 --- a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs +++ b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs @@ -71,7 +71,7 @@ public class DatabaseContext : DbContext public DbSet TaxRates { get; set; } public DbSet Transactions { get; set; } public DbSet Users { get; set; } - public DbSet UserSignatureKeyPair { get; set; } + public DbSet UserSignatureKeyPairs { get; set; } public DbSet AuthRequests { get; set; } public DbSet OrganizationDomains { get; set; } public DbSet WebAuthnCredentials { get; set; }