From 09df3f64d30d8e64fd9c6a6d62245f53ed7bad62 Mon Sep 17 00:00:00 2001
From: Matt Portune <mportune@bitwarden.com>
Date: Tue, 23 Jun 2020 23:54:27 -0400
Subject: [PATCH] Updates to SSO config DB setup

---
 src/Sql/dbo/Tables/Organization.sql            |  4 ++++
 src/Sql/dbo/Tables/SsoConfig.sql               |  5 ++++-
 src/Sql/dbo/Views/SsoConfigView.sql            |  6 ++++--
 .../DbScripts/2020-06-23_00_OrgIdentifier.sql  | 18 ++++++++++++++++++
 ..._OrgSso.sql => 2020-06-23_01_SsoConfig.sql} | 16 ++++++++++------
 5 files changed, 40 insertions(+), 9 deletions(-)
 create mode 100644 util/Migrator/DbScripts/2020-06-23_00_OrgIdentifier.sql
 rename util/Migrator/DbScripts/{2020-06-16_00_OrgSso.sql => 2020-06-23_01_SsoConfig.sql} (73%)

diff --git a/src/Sql/dbo/Tables/Organization.sql b/src/Sql/dbo/Tables/Organization.sql
index 226335de70..9840c2fdd0 100644
--- a/src/Sql/dbo/Tables/Organization.sql
+++ b/src/Sql/dbo/Tables/Organization.sql
@@ -1,5 +1,6 @@
 CREATE TABLE [dbo].[Organization] (
     [Id]                    UNIQUEIDENTIFIER NOT NULL,
+    [Identifier]            NVARCHAR (50)    NULL,
     [Name]                  NVARCHAR (50)    NOT NULL,
     [BusinessName]          NVARCHAR (50)    NULL,
     [BusinessAddress1]      NVARCHAR (50)    NULL,
@@ -42,3 +43,6 @@ CREATE NONCLUSTERED INDEX [IX_Organization_Enabled]
     ON [dbo].[Organization]([Id] ASC, [Enabled] ASC)
     INCLUDE ([UseTotp]);
 
+GO
+CREATE NONCLUSTERED INDEX [IX_Organization_Identifier]
+    ON [dbo].[Organization]([Identifier] ASC)
diff --git a/src/Sql/dbo/Tables/SsoConfig.sql b/src/Sql/dbo/Tables/SsoConfig.sql
index 2c0ecfeb7d..e425300eb9 100644
--- a/src/Sql/dbo/Tables/SsoConfig.sql
+++ b/src/Sql/dbo/Tables/SsoConfig.sql
@@ -1,8 +1,11 @@
 CREATE TABLE [dbo].[SsoConfig] (
-    [OrganizationId]     UNIQUEIDENTIFIER    NULL,
+    [Id]                 BIGINT              IDENTITY (1, 1) NOT NULL,
+    [Enabled]            BIT                 NOT NULL,
+    [OrganizationId]     UNIQUEIDENTIFIER    NOT NULL,
     [Identifier]         NVARCHAR (50)       NULL,
     [Data]               NVARCHAR (MAX)      NULL,
     [CreationDate]       DATETIME2 (7)       NOT NULL,
     [RevisionDate]       DATETIME2 (7)       NOT NULL,
+    CONSTRAINT [PK_SsoConfig] PRIMARY KEY CLUSTERED ([Id] ASC),
     CONSTRAINT [FK_SsoConfig_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id])
 );
diff --git a/src/Sql/dbo/Views/SsoConfigView.sql b/src/Sql/dbo/Views/SsoConfigView.sql
index 7bcfe15b4b..03f43f2fa8 100644
--- a/src/Sql/dbo/Views/SsoConfigView.sql
+++ b/src/Sql/dbo/Views/SsoConfigView.sql
@@ -1,6 +1,8 @@
 CREATE VIEW [dbo].[SsoConfigView]
 AS
 SELECT
-    *
+    SSO.*
 FROM
-    [dbo].[SsoConfig]
+    [dbo].[SsoConfig] SSO
+INNER JOIN
+    [dbo].[Organization] O ON O.[Identifier] = SSO.[Identifier]
diff --git a/util/Migrator/DbScripts/2020-06-23_00_OrgIdentifier.sql b/util/Migrator/DbScripts/2020-06-23_00_OrgIdentifier.sql
new file mode 100644
index 0000000000..ad7140fbda
--- /dev/null
+++ b/util/Migrator/DbScripts/2020-06-23_00_OrgIdentifier.sql
@@ -0,0 +1,18 @@
+IF COL_LENGTH('[dbo].[Organization]', 'Identifier') IS NULL
+BEGIN
+    ALTER TABLE
+        [dbo].[Organization]
+    ADD
+        [Identifier] NVARCHAR (50) NULL
+END
+GO
+
+IF NOT EXISTS (
+    SELECT * FROM sys.indexes  WHERE [Name]='IX_Organization_Identifier'
+    AND object_id = OBJECT_ID('[dbo].[Organization]')
+)
+BEGIN
+    CREATE NONCLUSTERED INDEX [IX_Organization_Identifier]
+        ON [dbo].[Organization]([Identifier] ASC)
+END
+GO
diff --git a/util/Migrator/DbScripts/2020-06-16_00_OrgSso.sql b/util/Migrator/DbScripts/2020-06-23_01_SsoConfig.sql
similarity index 73%
rename from util/Migrator/DbScripts/2020-06-16_00_OrgSso.sql
rename to util/Migrator/DbScripts/2020-06-23_01_SsoConfig.sql
index a3ba8442da..33ee3f1047 100644
--- a/util/Migrator/DbScripts/2020-06-16_00_OrgSso.sql
+++ b/util/Migrator/DbScripts/2020-06-23_01_SsoConfig.sql
@@ -1,11 +1,14 @@
 IF OBJECT_ID('[dbo].[SsoConfig]') IS NULL
 BEGIN
     CREATE TABLE [dbo].[SsoConfig] (
-        [OrganizationId]     UNIQUEIDENTIFIER    NULL,
+        [Id]                 BIGINT              IDENTITY (1, 1) NOT NULL,
+        [Enabled]            BIT                 NOT NULL,
+        [OrganizationId]     UNIQUEIDENTIFIER    NOT NULL,
         [Identifier]         NVARCHAR (50)       NULL,
         [Data]               NVARCHAR (MAX)      NULL,
         [CreationDate]       DATETIME2 (7)       NOT NULL,
         [RevisionDate]       DATETIME2 (7)       NOT NULL,
+        CONSTRAINT [PK_SsoConfig] PRIMARY KEY CLUSTERED ([Id] ASC),
         CONSTRAINT [FK_SsoConfig_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) 
     );
 END
@@ -20,10 +23,11 @@ GO
 CREATE VIEW [dbo].[SsoConfigView]
 AS
 SELECT
-    *
+    SSO.*
 FROM
-    [dbo].[SsoConfig]
-GO
+    [dbo].[SsoConfig] SSO
+INNER JOIN
+    [dbo].[Organization] O ON O.[Identifier] = SSO.[Identifier]
 
 IF OBJECT_ID('[dbo].[SsoConfig_ReadByIdentifier]') IS NOT NULL
 BEGIN
@@ -42,7 +46,7 @@ BEGIN
     FROM
         [dbo].[SsoConfigView]
     WHERE
-            [Identifier] = @Identifier
+        [Identifier] = @Identifier
 END
 GO
 
@@ -63,6 +67,6 @@ BEGIN
     FROM
         [dbo].[SsoConfigView]
     WHERE
-            [OrganizationId] = @OrganizationId
+        [OrganizationId] = @OrganizationId
 END
 GO