mirror of
https://github.com/bitwarden/server
synced 2025-12-20 18:23:44 +00:00
Add CQRS and caching support for OrganizationIntegrationConfigurations (#6690)
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using System.Text.Json;
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.AdminConsole.Models.Data.EventIntegrations;
|
||||
using Bit.Core.Enums;
|
||||
|
||||
namespace Bit.Core.AdminConsole.Services;
|
||||
|
||||
public class OrganizationIntegrationConfigurationValidator : IOrganizationIntegrationConfigurationValidator
|
||||
{
|
||||
public bool ValidateConfiguration(IntegrationType integrationType,
|
||||
OrganizationIntegrationConfiguration configuration)
|
||||
{
|
||||
// Validate template is present
|
||||
if (string.IsNullOrWhiteSpace(configuration.Template))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// If Filters are present, they must be valid
|
||||
if (!IsFiltersValid(configuration.Filters))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (integrationType)
|
||||
{
|
||||
case IntegrationType.CloudBillingSync or IntegrationType.Scim:
|
||||
return false;
|
||||
case IntegrationType.Slack:
|
||||
return IsConfigurationValid<SlackIntegrationConfiguration>(configuration.Configuration);
|
||||
case IntegrationType.Webhook:
|
||||
return IsConfigurationValid<WebhookIntegrationConfiguration>(configuration.Configuration);
|
||||
case IntegrationType.Hec:
|
||||
case IntegrationType.Datadog:
|
||||
case IntegrationType.Teams:
|
||||
return configuration.Configuration is null;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsConfigurationValid<T>(string? configuration)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(configuration))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var config = JsonSerializer.Deserialize<T>(configuration);
|
||||
return config is not null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsFiltersValid(string? filters)
|
||||
{
|
||||
if (filters is null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var filterGroup = JsonSerializer.Deserialize<IntegrationFilterGroup>(filters);
|
||||
return filterGroup is not null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user