1
0
mirror of https://github.com/bitwarden/server.git synced 2025-04-05 05:00:19 -05:00

[SM-823] ApiKey table follow up (#3183)

* dbo_future -> dbo

* DbScripts_future -> DbScripts

* Remove deprecated property

* Move data_migration -> DbScripts
This commit is contained in:
Thomas Avery 2023-08-29 17:15:07 -05:00 committed by GitHub
parent 776e454b79
commit b1725115e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 8 additions and 85 deletions

View File

@ -4,8 +4,6 @@ namespace Bit.Core.SecretsManager.Models.Data;
public class ApiKeyDetails : ApiKey public class ApiKeyDetails : ApiKey
{ {
public string ClientSecret { get; set; } // Deprecated as of 2023-05-17
protected ApiKeyDetails() { } protected ApiKeyDetails() { }
protected ApiKeyDetails(ApiKey apiKey) protected ApiKeyDetails(ApiKey apiKey)

View File

@ -107,11 +107,6 @@ public class ClientStore : IClientStore
break; break;
} }
if (string.IsNullOrEmpty(apiKey.ClientSecretHash))
{
apiKey.ClientSecretHash = apiKey.ClientSecret.Sha256();
}
var client = new Client var client = new Client
{ {
ClientId = clientId, ClientId = clientId,

View File

@ -2,8 +2,7 @@ CREATE PROCEDURE [dbo].[ApiKey_Create]
@Id UNIQUEIDENTIFIER OUTPUT, @Id UNIQUEIDENTIFIER OUTPUT,
@ServiceAccountId UNIQUEIDENTIFIER, @ServiceAccountId UNIQUEIDENTIFIER,
@Name VARCHAR(200), @Name VARCHAR(200),
@ClientSecret VARCHAR(30) = 'migrated', -- Deprecated as of 2023-05-17 @ClientSecretHash VARCHAR(128),
@ClientSecretHash VARCHAR(128) = NULL,
@Scope NVARCHAR(4000), @Scope NVARCHAR(4000),
@EncryptedPayload NVARCHAR(4000), @EncryptedPayload NVARCHAR(4000),
@Key VARCHAR(MAX), @Key VARCHAR(MAX),
@ -14,18 +13,11 @@ AS
BEGIN BEGIN
SET NOCOUNT ON SET NOCOUNT ON
IF (@ClientSecretHash IS NULL) INSERT INTO [dbo].[ApiKey]
BEGIN
DECLARE @hb VARBINARY(128) = HASHBYTES('SHA2_256', @ClientSecret);
SET @ClientSecretHash = CAST(N'' as xml).value('xs:base64Binary(sql:variable("@hb"))', 'VARCHAR(128)');
END
INSERT INTO [dbo].[ApiKey]
( (
[Id], [Id],
[ServiceAccountId], [ServiceAccountId],
[Name], [Name],
[ClientSecret],
[ClientSecretHash], [ClientSecretHash],
[Scope], [Scope],
[EncryptedPayload], [EncryptedPayload],
@ -34,12 +26,11 @@ BEGIN
[CreationDate], [CreationDate],
[RevisionDate] [RevisionDate]
) )
VALUES VALUES
( (
@Id, @Id,
@ServiceAccountId, @ServiceAccountId,
@Name, @Name,
@ClientSecret,
@ClientSecretHash, @ClientSecretHash,
@Scope, @Scope,
@EncryptedPayload, @EncryptedPayload,

View File

@ -2,7 +2,6 @@
[Id] UNIQUEIDENTIFIER, [Id] UNIQUEIDENTIFIER,
[ServiceAccountId] UNIQUEIDENTIFIER NULL, [ServiceAccountId] UNIQUEIDENTIFIER NULL,
[Name] VARCHAR(200) NOT NULL, [Name] VARCHAR(200) NOT NULL,
[ClientSecret] VARCHAR(30) NOT NULL,
[ClientSecretHash] VARCHAR(128) NULL, [ClientSecretHash] VARCHAR(128) NULL,
[Scope] NVARCHAR (4000) NOT NULL, [Scope] NVARCHAR (4000) NOT NULL,
[EncryptedPayload] NVARCHAR (4000) NOT NULL, [EncryptedPayload] NVARCHAR (4000) NOT NULL,

View File

@ -1,42 +0,0 @@
CREATE PROCEDURE [dbo].[ApiKey_Create]
@Id UNIQUEIDENTIFIER OUTPUT,
@ServiceAccountId UNIQUEIDENTIFIER,
@Name VARCHAR(200),
@ClientSecretHash VARCHAR(128),
@Scope NVARCHAR(4000),
@EncryptedPayload NVARCHAR(4000),
@Key VARCHAR(MAX),
@ExpireAt DATETIME2(7),
@CreationDate DATETIME2(7),
@RevisionDate DATETIME2(7)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO [dbo].[ApiKey]
(
[Id],
[ServiceAccountId],
[Name],
[ClientSecretHash],
[Scope],
[EncryptedPayload],
[Key],
[ExpireAt],
[CreationDate],
[RevisionDate]
)
VALUES
(
@Id,
@ServiceAccountId,
@Name,
@ClientSecretHash,
@Scope,
@EncryptedPayload,
@Key,
@ExpireAt,
@CreationDate,
@RevisionDate
)
END

View File

@ -1,18 +0,0 @@
CREATE TABLE [dbo].[ApiKey] (
[Id] UNIQUEIDENTIFIER,
[ServiceAccountId] UNIQUEIDENTIFIER NULL,
[Name] VARCHAR(200) NOT NULL,
[ClientSecretHash] VARCHAR(128) NULL,
[Scope] NVARCHAR (4000) NOT NULL,
[EncryptedPayload] NVARCHAR (4000) NOT NULL,
[Key] VARCHAR (MAX) NOT NULL,
[ExpireAt] DATETIME2(7) NULL,
[CreationDate] DATETIME2(7) NOT NULL,
[RevisionDate] DATETIME2(7) NOT NULL,
CONSTRAINT [PK_ApiKey] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_ApiKey_ServiceAccountId] FOREIGN KEY ([ServiceAccountId]) REFERENCES [dbo].[ServiceAccount] ([Id])
);
GO
CREATE NONCLUSTERED INDEX [IX_ApiKey_ServiceAccountId]
ON [dbo].[ApiKey]([ServiceAccountId] ASC);

View File

@ -1,7 +1,7 @@
/* /*
This is the data migration script for the client secret hash updates. This is the data migration script for the client secret hash updates.
The initial migration util/Migrator/DbScripts/2023-05-16_00_ClientSecretHash.sql should be run prior. The initial migration util/Migrator/DbScripts/2023-05-16_00_ClientSecretHash.sql should be run prior.
The final migration is in util/Migrator/DbScripts_future/2023-06-FutureMigration.sql. The final migration is in util/Migrator/DbScripts/2023-08-10_01_RemoveClientSecret
*/ */
IF COL_LENGTH('[dbo].[ApiKey]', 'ClientSecretHash') IS NOT NULL AND COL_LENGTH('[dbo].[ApiKey]', 'ClientSecret') IS NOT NULL IF COL_LENGTH('[dbo].[ApiKey]', 'ClientSecretHash') IS NOT NULL AND COL_LENGTH('[dbo].[ApiKey]', 'ClientSecret') IS NOT NULL
BEGIN BEGIN
@ -9,7 +9,7 @@ BEGIN
-- Add index -- Add index
IF NOT EXISTS(SELECT name FROM sys.indexes WHERE name = 'IX_ApiKey_ClientSecretHash') IF NOT EXISTS(SELECT name FROM sys.indexes WHERE name = 'IX_ApiKey_ClientSecretHash')
BEGIN BEGIN
CREATE NONCLUSTERED INDEX [IX_ApiKey_ClientSecretHash] CREATE NONCLUSTERED INDEX [IX_ApiKey_ClientSecretHash]
ON [dbo].[ApiKey]([ClientSecretHash] ASC) ON [dbo].[ApiKey]([ClientSecretHash] ASC)
WITH (ONLINE = ON) WITH (ONLINE = ON)
END END
@ -30,7 +30,7 @@ BEGIN
WHERE [ClientSecretHash] IS NULL WHERE [ClientSecretHash] IS NULL
SET @BatchSize = @@ROWCOUNT SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION Migrate_ClientSecretHash COMMIT TRANSACTION Migrate_ClientSecretHash
END END

View File

@ -36,7 +36,7 @@ AS
BEGIN BEGIN
SET NOCOUNT ON SET NOCOUNT ON
INSERT INTO [dbo].[ApiKey] INSERT INTO [dbo].[ApiKey]
( (
[Id], [Id],
[ServiceAccountId], [ServiceAccountId],
@ -49,7 +49,7 @@ BEGIN
[CreationDate], [CreationDate],
[RevisionDate] [RevisionDate]
) )
VALUES VALUES
( (
@Id, @Id,
@ServiceAccountId, @ServiceAccountId,