From 92238eb0a9de52e6ad74740adfa46c5bfd65daaa Mon Sep 17 00:00:00 2001 From: Matt Portune <59324545+mportune-bw@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:58:59 -0400 Subject: [PATCH] Additional changes for enterprise portal sso config (#819) * Additional changes for enterprise portal sso config * Requested changes * rename enum to Saml2 * Limit to one SSO config per org --- src/Core/Enums/SsoType.cs | 4 +- src/Core/Models/Table/SsoConfig.cs | 9 +++- src/Core/Repositories/ISsoConfigRepository.cs | 12 +++++ .../SqlServer/SsoConfigRepository.cs | 47 +++++++++++++++++++ .../Utilities/ServiceCollectionExtensions.cs | 1 + 5 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 src/Core/Repositories/ISsoConfigRepository.cs create mode 100644 src/Core/Repositories/SqlServer/SsoConfigRepository.cs diff --git a/src/Core/Enums/SsoType.cs b/src/Core/Enums/SsoType.cs index 38a0be4990..3c1884bd79 100644 --- a/src/Core/Enums/SsoType.cs +++ b/src/Core/Enums/SsoType.cs @@ -2,7 +2,7 @@ { public enum SsoType : byte { - // TODO proper SsoType values - Test = 1 + OpenIdConnect = 1, + Saml2 = 2, } } diff --git a/src/Core/Models/Table/SsoConfig.cs b/src/Core/Models/Table/SsoConfig.cs index 14d05a9922..5e5d47f4a2 100644 --- a/src/Core/Models/Table/SsoConfig.cs +++ b/src/Core/Models/Table/SsoConfig.cs @@ -2,13 +2,18 @@ namespace Bit.Core.Models.Table { - public class SsoConfig + public class SsoConfig : ITableObject { - public long? Id { get; set; } + public long Id { get; set; } public bool Enabled { get; set; } = true; public Guid OrganizationId { get; set; } public string Data { get; set; } public DateTime CreationDate { get; internal set; } = DateTime.UtcNow; public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow; + + public void SetNewId() + { + // nothing - int will be auto-populated + } } } diff --git a/src/Core/Repositories/ISsoConfigRepository.cs b/src/Core/Repositories/ISsoConfigRepository.cs new file mode 100644 index 0000000000..1fa54154e6 --- /dev/null +++ b/src/Core/Repositories/ISsoConfigRepository.cs @@ -0,0 +1,12 @@ +using System; +using System.Threading.Tasks; +using Bit.Core.Models.Table; + +namespace Bit.Core.Repositories +{ + public interface ISsoConfigRepository : IRepository + { + Task GetByOrganizationIdAsync(Guid organizationId); + Task GetByIdentifierAsync(string identifier); + } +} diff --git a/src/Core/Repositories/SqlServer/SsoConfigRepository.cs b/src/Core/Repositories/SqlServer/SsoConfigRepository.cs new file mode 100644 index 0000000000..8bd2cb3c65 --- /dev/null +++ b/src/Core/Repositories/SqlServer/SsoConfigRepository.cs @@ -0,0 +1,47 @@ +using System; +using Bit.Core.Models.Table; +using System.Threading.Tasks; +using System.Data.SqlClient; +using System.Data; +using Dapper; +using System.Linq; + +namespace Bit.Core.Repositories.SqlServer +{ + public class SsoConfigRepository : Repository, ISsoConfigRepository + { + public SsoConfigRepository(GlobalSettings globalSettings) + : this(globalSettings.SqlServer.ConnectionString, globalSettings.SqlServer.ReadOnlyConnectionString) + { } + + public SsoConfigRepository(string connectionString, string readOnlyConnectionString) + : base(connectionString, readOnlyConnectionString) + { } + + public async Task GetByOrganizationIdAsync(Guid organizationId) + { + using (var connection = new SqlConnection(ConnectionString)) + { + var results = await connection.QueryAsync( + $"[{Schema}].[{Table}_ReadByOrganizationId]", + new { OrganizationId = organizationId }, + commandType: CommandType.StoredProcedure); + + return results.SingleOrDefault(); + } + } + + public async Task GetByIdentifierAsync(string identifier) + { + using (var connection = new SqlConnection(ConnectionString)) + { + var results = await connection.QueryAsync( + $"[{Schema}].[{Table}_ReadByIdentifier]", + new { Identifier = identifier }, + commandType: CommandType.StoredProcedure); + + return results.SingleOrDefault(); + } + } + } +} diff --git a/src/Core/Utilities/ServiceCollectionExtensions.cs b/src/Core/Utilities/ServiceCollectionExtensions.cs index 0e702dc0c6..ba6f8c2f84 100644 --- a/src/Core/Utilities/ServiceCollectionExtensions.cs +++ b/src/Core/Utilities/ServiceCollectionExtensions.cs @@ -76,6 +76,7 @@ namespace Bit.Core.Utilities services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); } if (globalSettings.SelfHosted)