1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-01 08:02:49 -05:00

Merge branch 'master' into flexible-collections/deprecate-custom-collection-perm

This commit is contained in:
Rui Tome
2023-11-29 15:24:01 +00:00
256 changed files with 11118 additions and 2423 deletions

View File

@ -175,7 +175,8 @@
], ],
"force": { "force": {
"constraints": { "constraints": {
"dotnet": "6.0.413" "dotnet": "6.0.100"
} }
} },
"ignoreDeps": ["dotnet-sdk"]
} }

View File

@ -863,8 +863,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"NSec.Cryptography": { "NSec.Cryptography": {
"type": "Transitive", "type": "Transitive",
@ -1177,8 +1177,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2415,43 +2415,43 @@
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
} }
} }

View File

@ -967,8 +967,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1310,8 +1310,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2578,56 +2578,56 @@
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
} }
} }

View File

@ -1,6 +1,6 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs; using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs;
using Bit.Core.Entities;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Settings; using Bit.Core.Settings;

View File

@ -1,6 +1,6 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs; using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Settings; using Bit.Core.Settings;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Scim.Models; using Bit.Scim.Models;
namespace Bit.Scim.Groups.Interfaces; namespace Bit.Scim.Groups.Interfaces;

View File

@ -1,5 +1,4 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Scim.Models; using Bit.Scim.Models;
namespace Bit.Scim.Groups.Interfaces; namespace Bit.Scim.Groups.Interfaces;

View File

@ -1,5 +1,4 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Scim.Models; using Bit.Scim.Models;
namespace Bit.Scim.Groups.Interfaces; namespace Bit.Scim.Groups.Interfaces;

View File

@ -1,8 +1,8 @@
using System.Text.Json; using System.Text.Json;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.AdminConsole.Services; using Bit.Core.AdminConsole.Services;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Scim.Groups.Interfaces; using Bit.Scim.Groups.Interfaces;

View File

@ -2,7 +2,6 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -2,7 +2,6 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Scim.Context; using Bit.Scim.Context;

View File

@ -971,8 +971,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1314,8 +1314,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2582,71 +2582,71 @@
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -1118,8 +1118,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1461,8 +1461,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2742,71 +2742,71 @@
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -1,5 +1,6 @@
using Bit.Commercial.Core.AdminConsole.Services; using Bit.Commercial.Core.AdminConsole.Services;
using Bit.Commercial.Core.Test.AdminConsole.AutoFixture; using Bit.Commercial.Core.Test.AdminConsole.AutoFixture;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Models.Business.Provider; using Bit.Core.AdminConsole.Models.Business.Provider;

View File

@ -1,5 +1,5 @@
using Bit.Commercial.Core.SecretsManager.Queries.Projects; using Bit.Commercial.Core.SecretsManager.Queries.Projects;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -1,5 +1,5 @@
using Bit.Commercial.Core.SecretsManager.Queries.ServiceAccounts; using Bit.Commercial.Core.SecretsManager.Queries.ServiceAccounts;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.SecretsManager.Repositories; using Bit.Core.SecretsManager.Repositories;

View File

@ -980,8 +980,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"NSec.Cryptography": { "NSec.Cryptography": {
"type": "Transitive", "type": "Transitive",
@ -1312,8 +1312,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2657,74 +2657,74 @@
"commercial.core": { "commercial.core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )" "Core": "2023.10.3"
} }
}, },
"common": { "common": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.AutoNSubstitute": "4.17.0",
"AutoFixture.Xunit2": "[4.17.0, )", "AutoFixture.Xunit2": "4.17.0",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "1.2.0",
"Microsoft.NET.Test.Sdk": "[17.1.0, )", "Microsoft.NET.Test.Sdk": "17.1.0",
"NSubstitute": "[4.3.0, )", "NSubstitute": "4.3.0",
"xunit": "[2.4.1, )" "xunit": "2.4.1"
} }
}, },
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"core.test": { "core.test": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.AutoNSubstitute": "4.17.0",
"AutoFixture.Xunit2": "[4.17.0, )", "AutoFixture.Xunit2": "4.17.0",
"Common": "[2023.10.3, )", "Common": "2023.10.3",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "1.2.0",
"Microsoft.NET.Test.Sdk": "[17.1.0, )", "Microsoft.NET.Test.Sdk": "17.1.0",
"NSubstitute": "[4.3.0, )", "NSubstitute": "4.3.0",
"xunit": "[2.4.1, )" "xunit": "2.4.1"
} }
} }
} }

View File

@ -4,6 +4,7 @@ using System.Text;
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
using System.Text.Json; using System.Text.Json;
using Bit.Core.Services; using Bit.Core.Services;
using Bit.Infrastructure.EntityFramework.AdminConsole.Models;
using Bit.Infrastructure.EntityFramework.Repositories; using Bit.Infrastructure.EntityFramework.Repositories;
using Bit.IntegrationTestCommon.Factories; using Bit.IntegrationTestCommon.Factories;
using Bit.Scim.Models; using Bit.Scim.Models;
@ -196,11 +197,11 @@ public class ScimApplicationFactory : WebApplicationFactoryBase<Startup>
}; };
} }
private List<Infrastructure.EntityFramework.Models.Organization> GetSeedingOrganizations() private List<Organization> GetSeedingOrganizations()
{ {
return new List<Infrastructure.EntityFramework.Models.Organization>() return new List<Organization>()
{ {
new Infrastructure.EntityFramework.Models.Organization { Id = TestOrganizationId1, Name = "Test Organization 1", UseGroups = true } new Organization { Id = TestOrganizationId1, Name = "Test Organization 1", UseGroups = true }
}; };
} }

View File

@ -1223,8 +1223,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1576,8 +1576,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2972,107 +2972,107 @@
"common": { "common": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.AutoNSubstitute": "4.17.0",
"AutoFixture.Xunit2": "[4.17.0, )", "AutoFixture.Xunit2": "4.17.0",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "1.2.0",
"Microsoft.NET.Test.Sdk": "[17.1.0, )", "Microsoft.NET.Test.Sdk": "17.1.0",
"NSubstitute": "[4.3.0, )", "NSubstitute": "4.3.0",
"xunit": "[2.4.1, )" "xunit": "2.4.1"
} }
}, },
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"identity": { "identity": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"SharedWeb": "[2023.10.3, )", "SharedWeb": "2023.10.3",
"Swashbuckle.AspNetCore.SwaggerGen": "[6.5.0, )" "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"integrationtestcommon": { "integrationtestcommon": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Common": "[2023.10.3, )", "Common": "2023.10.3",
"Identity": "[2023.10.3, )", "Identity": "2023.10.3",
"Microsoft.AspNetCore.Mvc.Testing": "[6.0.5, )", "Microsoft.AspNetCore.Mvc.Testing": "6.0.5",
"Microsoft.Extensions.Configuration": "[6.0.1, )" "Microsoft.Extensions.Configuration": "6.0.1"
} }
}, },
"scim": { "scim": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"SharedWeb": "[2023.10.3, )" "SharedWeb": "2023.10.3"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -3,7 +3,6 @@ using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.AdminConsole.Services; using Bit.Core.AdminConsole.Services;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Scim.Groups; using Bit.Scim.Groups;

View File

@ -2,7 +2,6 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Scim.Context; using Bit.Scim.Context;

View File

@ -2,7 +2,6 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Scim.Context; using Bit.Scim.Context;

View File

@ -1097,8 +1097,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1450,8 +1450,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2825,90 +2825,90 @@
"common": { "common": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.AutoNSubstitute": "4.17.0",
"AutoFixture.Xunit2": "[4.17.0, )", "AutoFixture.Xunit2": "4.17.0",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "1.2.0",
"Microsoft.NET.Test.Sdk": "[17.1.0, )", "Microsoft.NET.Test.Sdk": "17.1.0",
"NSubstitute": "[4.3.0, )", "NSubstitute": "4.3.0",
"xunit": "[2.4.1, )" "xunit": "2.4.1"
} }
}, },
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"scim": { "scim": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"SharedWeb": "[2023.10.3, )" "SharedWeb": "2023.10.3"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"sdk": { "sdk": {
"version": "6.0.415", "version": "6.0.100",
"rollForward": "latestFeature" "rollForward": "latestFeature"
} }
} }

View File

@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.2" /> <PackageReference Include="BenchmarkDotNet" Version="0.13.10" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -4,22 +4,20 @@
"net6.0": { "net6.0": {
"BenchmarkDotNet": { "BenchmarkDotNet": {
"type": "Direct", "type": "Direct",
"requested": "[0.13.2, )", "requested": "[0.13.10, )",
"resolved": "0.13.2", "resolved": "0.13.10",
"contentHash": "82IflYxY8qnQXEA3kXtqC9pntrkJYJZbQ9PV7hEV/XcfCtOdwLz84ilyO8tLRVbiliWttvmt/v44P+visN+fPQ==", "contentHash": "p/LrTtR5TlwhZIvy2hG9VzTFWEDPS90r3QP9Q9pL4/B1iXzC/JNrpYyCWW3Xeg4vuiq/qV8hvJkJmT1sj+5LSw==",
"dependencies": { "dependencies": {
"BenchmarkDotNet.Annotations": "0.13.2", "BenchmarkDotNet.Annotations": "0.13.10",
"CommandLineParser": "2.4.3", "CommandLineParser": "2.9.1",
"Gee.External.Capstone": "2.3.0",
"Iced": "1.17.0", "Iced": "1.17.0",
"Microsoft.CodeAnalysis.CSharp": "3.0.0", "Microsoft.CodeAnalysis.CSharp": "4.1.0",
"Microsoft.Diagnostics.Runtime": "2.2.332302", "Microsoft.Diagnostics.Runtime": "2.2.332302",
"Microsoft.Diagnostics.Tracing.TraceEvent": "3.0.2", "Microsoft.Diagnostics.Tracing.TraceEvent": "3.0.2",
"Microsoft.DotNet.PlatformAbstractions": "3.1.6", "Microsoft.DotNet.PlatformAbstractions": "3.1.6",
"Perfolizer": "0.2.1", "Perfolizer": "[0.2.1]",
"System.Management": "6.0.0", "System.Management": "5.0.0"
"System.Reflection.Emit": "4.7.0",
"System.Reflection.Emit.Lightweight": "4.7.0",
"System.Threading.Tasks.Extensions": "4.5.4"
} }
}, },
"AspNetCoreRateLimit": { "AspNetCoreRateLimit": {
@ -153,8 +151,8 @@
}, },
"BenchmarkDotNet.Annotations": { "BenchmarkDotNet.Annotations": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.13.2", "resolved": "0.13.10",
"contentHash": "+SGOYyXT6fiagbtrni38B8BqBgjruYKU3PfROI0lDIYo8jQ+APUmLKMEswK7zwR5fEOCrDmoAHSH6oykBkqPgA==" "contentHash": "abYKp+P5NBuam7q0w7AFgOYF3nqAvKBw6MLq96Kjk1WdaRDNpgBc6uCgOP4pVIH/g0IF9d4ubnFLBwiJuIAHMw=="
}, },
"BitPay.Light": { "BitPay.Light": {
"type": "Transitive", "type": "Transitive",
@ -181,8 +179,8 @@
}, },
"CommandLineParser": { "CommandLineParser": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.4.3", "resolved": "2.9.1",
"contentHash": "U2FC9Y8NyIxxU6MpFFdWWu1xwiqz/61v/Doou7kmVjpeIEMLWyiNNkzNlSE84kyJ0O1LKApuEj5z48Ow0Hi4OQ==" "contentHash": "OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA=="
}, },
"DnsClient": { "DnsClient": {
"type": "Transitive", "type": "Transitive",
@ -236,6 +234,11 @@
"resolved": "3.0.1", "resolved": "3.0.1",
"contentHash": "mgjcuGETuYSCUEaZG+jQeeuuEMkDLc4GDJHBvKDdOz6oSOWp5adPdWP4btZx7Pi+9fu4szN3JIjJmby67MaILw==" "contentHash": "mgjcuGETuYSCUEaZG+jQeeuuEMkDLc4GDJHBvKDdOz6oSOWp5adPdWP4btZx7Pi+9fu4szN3JIjJmby67MaILw=="
}, },
"Gee.External.Capstone": {
"type": "Transitive",
"resolved": "2.3.0",
"contentHash": "2ap/rYmjtzCOT8hxrnEW/QeiOt+paD8iRrIcdKX0cxVwWLFa1e+JDBNeECakmccXrSFeBQuu5AV8SNkipFMMMw=="
},
"Handlebars.Net": { "Handlebars.Net": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.2", "resolved": "2.1.2",
@ -447,29 +450,29 @@
}, },
"Microsoft.CodeAnalysis.Analyzers": { "Microsoft.CodeAnalysis.Analyzers": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.6.2-beta2", "resolved": "3.3.3",
"contentHash": "rg5Ql73AmGCMG5Q40Kzbndq7C7S4XvsJA+2QXfZBCy2dRqD+a7BSbx/3942EoRUJ/8Wh9+kLg2G2qC46o3f1Aw==" "contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ=="
}, },
"Microsoft.CodeAnalysis.Common": { "Microsoft.CodeAnalysis.Common": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.0.0", "resolved": "4.1.0",
"contentHash": "HEnLZ9Op5IoXeuokhfSLIXstXfEyPzXhQ/xsnvUmxzb+7YpwuLk57txArzGs/Wne5bWmU7Uey4Q1jUZ3++heqg==", "contentHash": "bNzTyxP3iD5FPFHfVDl15Y6/wSoI7e3MeV0lOaj9igbIKTjgrmuw6LoVJ06jUNFA7+KaDC/OIsStWl/FQJz6sQ==",
"dependencies": { "dependencies": {
"Microsoft.CodeAnalysis.Analyzers": "2.6.2-beta2", "Microsoft.CodeAnalysis.Analyzers": "3.3.3",
"System.Collections.Immutable": "1.5.0", "System.Collections.Immutable": "5.0.0",
"System.Memory": "4.5.1", "System.Memory": "4.5.4",
"System.Reflection.Metadata": "1.6.0", "System.Reflection.Metadata": "5.0.0",
"System.Runtime.CompilerServices.Unsafe": "4.5.0", "System.Runtime.CompilerServices.Unsafe": "5.0.0",
"System.Text.Encoding.CodePages": "4.5.0", "System.Text.Encoding.CodePages": "4.5.1",
"System.Threading.Tasks.Extensions": "4.5.0" "System.Threading.Tasks.Extensions": "4.5.4"
} }
}, },
"Microsoft.CodeAnalysis.CSharp": { "Microsoft.CodeAnalysis.CSharp": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.0.0", "resolved": "4.1.0",
"contentHash": "hWFUxc0iUbVvIKWJODErOeOa5GiqZuEcetxaCfHqZ04zHy0ZCLx3v4/TdF/6Erx1mXPHfoT2Tiz5rZCQZ6OyxQ==", "contentHash": "sbu6kDGzo9bfQxuqWpeEE7I9P30bSuZEnpDz9/qz20OU6pm79Z63+/BsAzO2e/R/Q97kBrpj647wokZnEVr97w==",
"dependencies": { "dependencies": {
"Microsoft.CodeAnalysis.Common": "[3.0.0]" "Microsoft.CodeAnalysis.Common": "[4.1.0]"
} }
}, },
"Microsoft.CSharp": { "Microsoft.CSharp": {
@ -957,8 +960,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"NSec.Cryptography": { "NSec.Cryptography": {
"type": "Transitive", "type": "Transitive",
@ -1279,8 +1282,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -1324,8 +1327,8 @@
}, },
"System.CodeDom": { "System.CodeDom": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "5.0.0",
"contentHash": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==" "contentHash": "JPJArwA1kdj8qDAkY2XGjSWoYnqiM7q/3yRNkt6n28Mnn95MuEGkZXUbPBf7qc3IjwrGY5ttQon7yqHZyQJmOQ=="
}, },
"System.Collections": { "System.Collections": {
"type": "Transitive", "type": "Transitive",
@ -1700,10 +1703,12 @@
}, },
"System.Management": { "System.Management": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "5.0.0",
"contentHash": "sHsESYMmPDhQuOC66h6AEOs/XowzKsbT9srMbX71TCXP58hkpn1BqBjdmKj1+DCA/WlBETX1K5WjQHwmV0Txrg==", "contentHash": "MF1CHaRcC+MLFdnDthv4/bKWBZnlnSpkGqa87pKukQefgEdwtb9zFW6zs0GjPp73qtpYYg4q6PEKbzJbxCpKfw==",
"dependencies": { "dependencies": {
"System.CodeDom": "6.0.0" "Microsoft.NETCore.Platforms": "5.0.0",
"Microsoft.Win32.Registry": "5.0.0",
"System.CodeDom": "5.0.0"
} }
}, },
"System.Memory": { "System.Memory": {
@ -1925,8 +1930,15 @@
}, },
"System.Reflection.Emit": { "System.Reflection.Emit": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "4.3.0",
"contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==" "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
}, },
"System.Reflection.Emit.ILGeneration": { "System.Reflection.Emit.ILGeneration": {
"type": "Transitive", "type": "Transitive",
@ -1940,8 +1952,14 @@
}, },
"System.Reflection.Emit.Lightweight": { "System.Reflection.Emit.Lightweight": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "4.3.0",
"contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==" "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
}, },
"System.Reflection.Extensions": { "System.Reflection.Extensions": {
"type": "Transitive", "type": "Transitive",
@ -1956,8 +1974,8 @@
}, },
"System.Reflection.Metadata": { "System.Reflection.Metadata": {
"type": "Transitive", "type": "Transitive",
"resolved": "1.6.0", "resolved": "5.0.0",
"contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ=="
}, },
"System.Reflection.Primitives": { "System.Reflection.Primitives": {
"type": "Transitive", "type": "Transitive",
@ -2522,43 +2540,43 @@
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
} }
} }

View File

@ -5,7 +5,6 @@ using Bit.Admin.Utilities;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.OrganizationConnectionConfigs; using Bit.Core.Models.OrganizationConnectionConfigs;
@ -21,7 +20,6 @@ using Bit.Core.Utilities;
using Bit.Core.Vault.Repositories; using Bit.Core.Vault.Repositories;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Stripe;
namespace Bit.Admin.Controllers; namespace Bit.Admin.Controllers;
@ -50,7 +48,6 @@ public class OrganizationsController : Controller
private readonly ISecretRepository _secretRepository; private readonly ISecretRepository _secretRepository;
private readonly IProjectRepository _projectRepository; private readonly IProjectRepository _projectRepository;
private readonly IServiceAccountRepository _serviceAccountRepository; private readonly IServiceAccountRepository _serviceAccountRepository;
private readonly IStripeSyncService _stripeSyncService;
public OrganizationsController( public OrganizationsController(
IOrganizationService organizationService, IOrganizationService organizationService,
@ -74,8 +71,7 @@ public class OrganizationsController : Controller
ICurrentContext currentContext, ICurrentContext currentContext,
ISecretRepository secretRepository, ISecretRepository secretRepository,
IProjectRepository projectRepository, IProjectRepository projectRepository,
IServiceAccountRepository serviceAccountRepository, IServiceAccountRepository serviceAccountRepository)
IStripeSyncService stripeSyncService)
{ {
_organizationService = organizationService; _organizationService = organizationService;
_organizationRepository = organizationRepository; _organizationRepository = organizationRepository;
@ -99,7 +95,6 @@ public class OrganizationsController : Controller
_secretRepository = secretRepository; _secretRepository = secretRepository;
_projectRepository = projectRepository; _projectRepository = projectRepository;
_serviceAccountRepository = serviceAccountRepository; _serviceAccountRepository = serviceAccountRepository;
_stripeSyncService = stripeSyncService;
} }
[RequirePermission(Permission.Org_List_View)] [RequirePermission(Permission.Org_List_View)]
@ -213,19 +208,6 @@ public class OrganizationsController : Controller
throw new BadRequestException("Plan does not support Secrets Manager"); throw new BadRequestException("Plan does not support Secrets Manager");
} }
try
{
if (!string.IsNullOrWhiteSpace(organization.GatewayCustomerId) && !string.IsNullOrWhiteSpace(organization.BillingEmail))
{
await _stripeSyncService.UpdateCustomerEmailAddress(organization.GatewayCustomerId, organization.BillingEmail);
}
}
catch (StripeException stripeException)
{
_logger.LogError(stripeException, "Failed to update billing email address in Stripe for Organization with ID '{organizationId}'", organization.Id);
throw;
}
await _organizationRepository.ReplaceAsync(organization); await _organizationRepository.ReplaceAsync(organization);
await _applicationCacheService.UpsertOrganizationAbilityAsync(organization); await _applicationCacheService.UpsertOrganizationAbilityAsync(organization);
await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.OrganizationEditedByAdmin, organization, _currentContext) await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.OrganizationEditedByAdmin, organization, _currentContext)

View File

@ -3,6 +3,7 @@ using System.Text.Json;
using Bit.Admin.Enums; using Bit.Admin.Enums;
using Bit.Admin.Models; using Bit.Admin.Models;
using Bit.Admin.Utilities; using Bit.Admin.Utilities;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Models.BitStripe; using Bit.Core.Models.BitStripe;
using Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces;

View File

@ -2,6 +2,8 @@
using Bit.Admin.Models; using Bit.Admin.Models;
using Bit.Admin.Services; using Bit.Admin.Services;
using Bit.Admin.Utilities; using Bit.Admin.Utilities;
using Bit.Core;
using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Services; using Bit.Core.Services;
@ -21,19 +23,28 @@ public class UsersController : Controller
private readonly IPaymentService _paymentService; private readonly IPaymentService _paymentService;
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly IAccessControlService _accessControlService; private readonly IAccessControlService _accessControlService;
private readonly ICurrentContext _currentContext;
private readonly IFeatureService _featureService;
private bool UseFlexibleCollections =>
_featureService.IsEnabled(FeatureFlagKeys.FlexibleCollections, _currentContext);
public UsersController( public UsersController(
IUserRepository userRepository, IUserRepository userRepository,
ICipherRepository cipherRepository, ICipherRepository cipherRepository,
IPaymentService paymentService, IPaymentService paymentService,
GlobalSettings globalSettings, GlobalSettings globalSettings,
IAccessControlService accessControlService) IAccessControlService accessControlService,
ICurrentContext currentContext,
IFeatureService featureService)
{ {
_userRepository = userRepository; _userRepository = userRepository;
_cipherRepository = cipherRepository; _cipherRepository = cipherRepository;
_paymentService = paymentService; _paymentService = paymentService;
_globalSettings = globalSettings; _globalSettings = globalSettings;
_accessControlService = accessControlService; _accessControlService = accessControlService;
_currentContext = currentContext;
_featureService = featureService;
} }
[RequirePermission(Permission.User_List_View)] [RequirePermission(Permission.User_List_View)]
@ -69,7 +80,7 @@ public class UsersController : Controller
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
var ciphers = await _cipherRepository.GetManyByUserIdAsync(id); var ciphers = await _cipherRepository.GetManyByUserIdAsync(id, useFlexibleCollections: UseFlexibleCollections);
return View(new UserViewModel(user, ciphers)); return View(new UserViewModel(user, ciphers));
} }
@ -82,7 +93,7 @@ public class UsersController : Controller
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
var ciphers = await _cipherRepository.GetManyByUserIdAsync(id); var ciphers = await _cipherRepository.GetManyByUserIdAsync(id, useFlexibleCollections: UseFlexibleCollections);
var billingInfo = await _paymentService.GetBillingAsync(user); var billingInfo = await _paymentService.GetBillingAsync(user);
return View(new UserEditModel(user, ciphers, billingInfo, _globalSettings)); return View(new UserEditModel(user, ciphers, billingInfo, _globalSettings));
} }

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
namespace Bit.Admin.Models; namespace Bit.Admin.Models;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
namespace Bit.Admin.Models; namespace Bit.Admin.Models;

View File

@ -1020,8 +1020,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1363,8 +1363,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2785,114 +2785,114 @@
"commercial.core": { "commercial.core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )" "Core": "2023.10.3"
} }
}, },
"commercial.infrastructure.entityframework": { "commercial.infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
}, },
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"migrator": { "migrator": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.Extensions.Logging": "[6.0.0, )", "Microsoft.Extensions.Logging": "6.0.0",
"dbup-sqlserver": "[5.0.8, )" "dbup-sqlserver": "5.0.8"
} }
}, },
"mysqlmigrations": { "mysqlmigrations": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
}, },
"postgresmigrations": { "postgresmigrations": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
}, },
"sqlitemigrations": { "sqlitemigrations": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -795,6 +795,14 @@ public class OrganizationsController : Controller
throw new NotFoundException(); throw new NotFoundException();
} }
var v1Enabled = _featureService.IsEnabled(FeatureFlagKeys.FlexibleCollectionsV1, _currentContext);
if (!v1Enabled)
{
// V1 is disabled, ensure V1 setting doesn't change
model.AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
}
await _organizationService.UpdateAsync(model.ToOrganization(organization), eventType: EventType.Organization_CollectionManagement_Updated); await _organizationService.UpdateAsync(model.ToOrganization(organization), eventType: EventType.Organization_CollectionManagement_Updated);
return new OrganizationResponseModel(organization); return new OrganizationResponseModel(organization);
} }

View File

@ -1,5 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Api.AdminConsole.Models.Request.Organizations; namespace Bit.Api.AdminConsole.Models.Request.Organizations;

View File

@ -1,5 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
using Bit.Core.Settings; using Bit.Core.Settings;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
namespace Bit.Api.AdminConsole.Models.Response.Organizations; namespace Bit.Api.AdminConsole.Models.Response.Organizations;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
namespace Bit.Api.AdminConsole.Models.Response.Organizations; namespace Bit.Api.AdminConsole.Models.Response.Organizations;

View File

@ -1,5 +1,5 @@
using Bit.Api.Models.Response; using Bit.Api.Models.Response;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
@ -55,6 +55,7 @@ public class OrganizationResponseModel : ResponseModel
MaxAutoscaleSmSeats = organization.MaxAutoscaleSmSeats; MaxAutoscaleSmSeats = organization.MaxAutoscaleSmSeats;
MaxAutoscaleSmServiceAccounts = organization.MaxAutoscaleSmServiceAccounts; MaxAutoscaleSmServiceAccounts = organization.MaxAutoscaleSmServiceAccounts;
LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion; LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
} }
public Guid Id { get; set; } public Guid Id { get; set; }
@ -95,6 +96,7 @@ public class OrganizationResponseModel : ResponseModel
public int? MaxAutoscaleSmSeats { get; set; } public int? MaxAutoscaleSmSeats { get; set; }
public int? MaxAutoscaleSmServiceAccounts { get; set; } public int? MaxAutoscaleSmServiceAccounts { get; set; }
public bool LimitCollectionCreationDeletion { get; set; } public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
} }
public class OrganizationSubscriptionResponseModel : OrganizationResponseModel public class OrganizationSubscriptionResponseModel : OrganizationResponseModel

View File

@ -60,6 +60,7 @@ public class ProfileOrganizationResponseModel : ResponseModel
FamilySponsorshipValidUntil = organization.FamilySponsorshipValidUntil; FamilySponsorshipValidUntil = organization.FamilySponsorshipValidUntil;
AccessSecretsManager = organization.AccessSecretsManager; AccessSecretsManager = organization.AccessSecretsManager;
LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion; LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
if (organization.SsoConfig != null) if (organization.SsoConfig != null)
{ {
@ -114,4 +115,5 @@ public class ProfileOrganizationResponseModel : ResponseModel
public bool? FamilySponsorshipToDelete { get; set; } public bool? FamilySponsorshipToDelete { get; set; }
public bool AccessSecretsManager { get; set; } public bool AccessSecretsManager { get; set; }
public bool LimitCollectionCreationDeletion { get; set; } public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
} }

View File

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Api.Auth.Models.Request.Accounts; using Bit.Api.Auth.Models.Request.Accounts;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Auth.Utilities; using Bit.Core.Auth.Utilities;

View File

@ -1,6 +1,6 @@
using Bit.Core.Auth.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Entities;
using Bit.Core.Auth.Models.Data; using Bit.Core.Auth.Models.Data;
using Bit.Core.Entities;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
using Bit.Core.Settings; using Bit.Core.Settings;

View File

@ -1,4 +1,5 @@
using Bit.Core.Auth.Enums; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;

View File

@ -1,4 +1,5 @@
using Bit.Core.Auth.Enums; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;

View File

@ -58,6 +58,8 @@ public class AccountsController : Controller
private readonly IFeatureService _featureService; private readonly IFeatureService _featureService;
private readonly ICurrentContext _currentContext; private readonly ICurrentContext _currentContext;
private bool UseFlexibleCollections =>
_featureService.IsEnabled(FeatureFlagKeys.FlexibleCollections, _currentContext);
public AccountsController( public AccountsController(
GlobalSettings globalSettings, GlobalSettings globalSettings,
@ -415,7 +417,7 @@ public class AccountsController : Controller
var ciphers = new List<Cipher>(); var ciphers = new List<Cipher>();
if (model.Ciphers.Any()) if (model.Ciphers.Any())
{ {
var existingCiphers = await _cipherRepository.GetManyByUserIdAsync(user.Id); var existingCiphers = await _cipherRepository.GetManyByUserIdAsync(user.Id, useFlexibleCollections: UseFlexibleCollections);
ciphers.AddRange(existingCiphers ciphers.AddRange(existingCiphers
.Join(model.Ciphers, c => c.Id, c => c.Id, (existing, c) => c.ToCipher(existing))); .Join(model.Ciphers, c => c.Id, c => c.Id, (existing, c) => c.ToCipher(existing)));
} }

View File

@ -1,14 +1,16 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
namespace Bit.Api.Models.Request.Organizations; namespace Bit.Api.Models.Request.Organizations;
public class OrganizationCollectionManagementUpdateRequestModel public class OrganizationCollectionManagementUpdateRequestModel
{ {
public bool LimitCreateDeleteOwnerAdmin { get; set; } public bool LimitCreateDeleteOwnerAdmin { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public virtual Organization ToOrganization(Organization existingOrganization) public virtual Organization ToOrganization(Organization existingOrganization)
{ {
existingOrganization.LimitCollectionCreationDeletion = LimitCreateDeleteOwnerAdmin; existingOrganization.LimitCollectionCreationDeletion = LimitCreateDeleteOwnerAdmin;
existingOrganization.AllowAdminAccessToAllCollectionItems = AllowAdminAccessToAllCollectionItems;
return existingOrganization; return existingOrganization;
} }
} }

View File

@ -1,5 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Api.Models.Request.Organizations; namespace Bit.Api.Models.Request.Organizations;

View File

@ -40,6 +40,10 @@ public class CiphersController : Controller
private readonly ILogger<CiphersController> _logger; private readonly ILogger<CiphersController> _logger;
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly Version _cipherKeyEncryptionMinimumVersion = new Version(Constants.CipherKeyEncryptionMinimumVersion); private readonly Version _cipherKeyEncryptionMinimumVersion = new Version(Constants.CipherKeyEncryptionMinimumVersion);
private readonly IFeatureService _featureService;
private bool UseFlexibleCollections =>
_featureService.IsEnabled(FeatureFlagKeys.FlexibleCollections, _currentContext);
public CiphersController( public CiphersController(
ICipherRepository cipherRepository, ICipherRepository cipherRepository,
@ -50,7 +54,8 @@ public class CiphersController : Controller
IProviderService providerService, IProviderService providerService,
ICurrentContext currentContext, ICurrentContext currentContext,
ILogger<CiphersController> logger, ILogger<CiphersController> logger,
GlobalSettings globalSettings) GlobalSettings globalSettings,
IFeatureService featureService)
{ {
_cipherRepository = cipherRepository; _cipherRepository = cipherRepository;
_collectionCipherRepository = collectionCipherRepository; _collectionCipherRepository = collectionCipherRepository;
@ -61,13 +66,14 @@ public class CiphersController : Controller
_currentContext = currentContext; _currentContext = currentContext;
_logger = logger; _logger = logger;
_globalSettings = globalSettings; _globalSettings = globalSettings;
_featureService = featureService;
} }
[HttpGet("{id}")] [HttpGet("{id}")]
public async Task<CipherResponseModel> Get(string id) public async Task<CipherResponseModel> Get(Guid id)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -91,17 +97,16 @@ public class CiphersController : Controller
[HttpGet("{id}/full-details")] [HttpGet("{id}/full-details")]
[HttpGet("{id}/details")] [HttpGet("{id}/details")]
public async Task<CipherDetailsResponseModel> GetDetails(string id) public async Task<CipherDetailsResponseModel> GetDetails(Guid id)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipherId = new Guid(id); var cipher = await GetByIdAsync(id, userId);
var cipher = await _cipherRepository.GetByIdAsync(cipherId, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
} }
var collectionCiphers = await _collectionCipherRepository.GetManyByUserIdCipherIdAsync(userId, cipherId); var collectionCiphers = await _collectionCipherRepository.GetManyByUserIdCipherIdAsync(userId, id);
return new CipherDetailsResponseModel(cipher, _globalSettings, collectionCiphers); return new CipherDetailsResponseModel(cipher, _globalSettings, collectionCiphers);
} }
@ -111,7 +116,7 @@ public class CiphersController : Controller
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var hasOrgs = _currentContext.Organizations?.Any() ?? false; var hasOrgs = _currentContext.Organizations?.Any() ?? false;
// TODO: Use hasOrgs proper for cipher listing here? // TODO: Use hasOrgs proper for cipher listing here?
var ciphers = await _cipherRepository.GetManyByUserIdAsync(userId, true || hasOrgs); var ciphers = await _cipherRepository.GetManyByUserIdAsync(userId, useFlexibleCollections: UseFlexibleCollections, withOrganizations: true || hasOrgs);
Dictionary<Guid, IGrouping<Guid, CollectionCipher>> collectionCiphersGroupDict = null; Dictionary<Guid, IGrouping<Guid, CollectionCipher>> collectionCiphersGroupDict = null;
if (hasOrgs) if (hasOrgs)
{ {
@ -175,7 +180,7 @@ public class CiphersController : Controller
public async Task<CipherResponseModel> Put(Guid id, [FromBody] CipherRequestModel model) public async Task<CipherResponseModel> Put(Guid id, [FromBody] CipherRequestModel model)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(id, userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -247,25 +252,23 @@ public class CiphersController : Controller
[HttpPut("{id}/partial")] [HttpPut("{id}/partial")]
[HttpPost("{id}/partial")] [HttpPost("{id}/partial")]
public async Task<CipherResponseModel> PutPartial(string id, [FromBody] CipherPartialRequestModel model) public async Task<CipherResponseModel> PutPartial(Guid id, [FromBody] CipherPartialRequestModel model)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var folderId = string.IsNullOrWhiteSpace(model.FolderId) ? null : (Guid?)new Guid(model.FolderId); var folderId = string.IsNullOrWhiteSpace(model.FolderId) ? null : (Guid?)new Guid(model.FolderId);
var cipherId = new Guid(id); await _cipherRepository.UpdatePartialAsync(id, userId, folderId, model.Favorite);
await _cipherRepository.UpdatePartialAsync(cipherId, userId, folderId, model.Favorite);
var cipher = await _cipherRepository.GetByIdAsync(cipherId, userId); var cipher = await GetByIdAsync(id, userId);
var response = new CipherResponseModel(cipher, _globalSettings); var response = new CipherResponseModel(cipher, _globalSettings);
return response; return response;
} }
[HttpPut("{id}/share")] [HttpPut("{id}/share")]
[HttpPost("{id}/share")] [HttpPost("{id}/share")]
public async Task<CipherResponseModel> PutShare(string id, [FromBody] CipherShareRequestModel model) public async Task<CipherResponseModel> PutShare(Guid id, [FromBody] CipherShareRequestModel model)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipherId = new Guid(id); var cipher = await _cipherRepository.GetByIdAsync(id);
var cipher = await _cipherRepository.GetByIdAsync(cipherId);
if (cipher == null || cipher.UserId != userId || if (cipher == null || cipher.UserId != userId ||
!await _currentContext.OrganizationUser(new Guid(model.Cipher.OrganizationId))) !await _currentContext.OrganizationUser(new Guid(model.Cipher.OrganizationId)))
{ {
@ -279,17 +282,17 @@ public class CiphersController : Controller
await _cipherService.ShareAsync(original, model.Cipher.ToCipher(cipher), new Guid(model.Cipher.OrganizationId), await _cipherService.ShareAsync(original, model.Cipher.ToCipher(cipher), new Guid(model.Cipher.OrganizationId),
model.CollectionIds.Select(c => new Guid(c)), userId, model.Cipher.LastKnownRevisionDate); model.CollectionIds.Select(c => new Guid(c)), userId, model.Cipher.LastKnownRevisionDate);
var sharedCipher = await _cipherRepository.GetByIdAsync(cipherId, userId); var sharedCipher = await GetByIdAsync(id, userId);
var response = new CipherResponseModel(sharedCipher, _globalSettings); var response = new CipherResponseModel(sharedCipher, _globalSettings);
return response; return response;
} }
[HttpPut("{id}/collections")] [HttpPut("{id}/collections")]
[HttpPost("{id}/collections")] [HttpPost("{id}/collections")]
public async Task PutCollections(string id, [FromBody] CipherCollectionsRequestModel model) public async Task PutCollections(Guid id, [FromBody] CipherCollectionsRequestModel model)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null || !cipher.OrganizationId.HasValue || if (cipher == null || !cipher.OrganizationId.HasValue ||
!await _currentContext.OrganizationUser(cipher.OrganizationId.Value)) !await _currentContext.OrganizationUser(cipher.OrganizationId.Value))
{ {
@ -318,10 +321,10 @@ public class CiphersController : Controller
[HttpDelete("{id}")] [HttpDelete("{id}")]
[HttpPost("{id}/delete")] [HttpPost("{id}/delete")]
public async Task Delete(string id) public async Task Delete(Guid id)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -380,10 +383,10 @@ public class CiphersController : Controller
} }
[HttpPut("{id}/delete")] [HttpPut("{id}/delete")]
public async Task PutDelete(string id) public async Task PutDelete(Guid id)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -436,10 +439,10 @@ public class CiphersController : Controller
} }
[HttpPut("{id}/restore")] [HttpPut("{id}/restore")]
public async Task<CipherResponseModel> PutRestore(string id) public async Task<CipherResponseModel> PutRestore(Guid id)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -526,7 +529,7 @@ public class CiphersController : Controller
} }
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var ciphers = await _cipherRepository.GetManyByUserIdAsync(userId, false); var ciphers = await _cipherRepository.GetManyByUserIdAsync(userId, useFlexibleCollections: UseFlexibleCollections, withOrganizations: false);
var ciphersDict = ciphers.ToDictionary(c => c.Id); var ciphersDict = ciphers.ToDictionary(c => c.Id);
var shareCiphers = new List<(Cipher, DateTime?)>(); var shareCiphers = new List<(Cipher, DateTime?)>();
@ -581,13 +584,12 @@ public class CiphersController : Controller
} }
[HttpPost("{id}/attachment/v2")] [HttpPost("{id}/attachment/v2")]
public async Task<AttachmentUploadDataResponseModel> PostAttachment(string id, [FromBody] AttachmentRequestModel request) public async Task<AttachmentUploadDataResponseModel> PostAttachment(Guid id, [FromBody] AttachmentRequestModel request)
{ {
var idGuid = new Guid(id);
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = request.AdminRequest ? var cipher = request.AdminRequest ?
await _cipherRepository.GetOrganizationDetailsByIdAsync(idGuid) : await _cipherRepository.GetOrganizationDetailsByIdAsync(id) :
await _cipherRepository.GetByIdAsync(idGuid, userId); await GetByIdAsync(id, userId);
if (cipher == null || (request.AdminRequest && (!cipher.OrganizationId.HasValue || if (cipher == null || (request.AdminRequest && (!cipher.OrganizationId.HasValue ||
!await _currentContext.EditAnyCollection(cipher.OrganizationId.Value)))) !await _currentContext.EditAnyCollection(cipher.OrganizationId.Value))))
@ -615,11 +617,10 @@ public class CiphersController : Controller
} }
[HttpGet("{id}/attachment/{attachmentId}/renew")] [HttpGet("{id}/attachment/{attachmentId}/renew")]
public async Task<AttachmentUploadDataResponseModel> RenewFileUploadUrl(string id, string attachmentId) public async Task<AttachmentUploadDataResponseModel> RenewFileUploadUrl(Guid id, string attachmentId)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipherId = new Guid(id); var cipher = await GetByIdAsync(id, userId);
var cipher = await _cipherRepository.GetByIdAsync(cipherId, userId);
var attachments = cipher?.GetAttachments(); var attachments = cipher?.GetAttachments();
if (attachments == null || !attachments.ContainsKey(attachmentId) || attachments[attachmentId].Validated) if (attachments == null || !attachments.ContainsKey(attachmentId) || attachments[attachmentId].Validated)
@ -638,7 +639,7 @@ public class CiphersController : Controller
[SelfHosted(SelfHostedOnly = true)] [SelfHosted(SelfHostedOnly = true)]
[RequestSizeLimit(Constants.FileSize501mb)] [RequestSizeLimit(Constants.FileSize501mb)]
[DisableFormValueModelBinding] [DisableFormValueModelBinding]
public async Task PostFileForExistingAttachment(string id, string attachmentId) public async Task PostFileForExistingAttachment(Guid id, string attachmentId)
{ {
if (!Request?.ContentType.Contains("multipart/") ?? true) if (!Request?.ContentType.Contains("multipart/") ?? true)
{ {
@ -646,7 +647,7 @@ public class CiphersController : Controller
} }
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
var attachments = cipher?.GetAttachments(); var attachments = cipher?.GetAttachments();
if (attachments == null || !attachments.ContainsKey(attachmentId)) if (attachments == null || !attachments.ContainsKey(attachmentId))
{ {
@ -664,13 +665,12 @@ public class CiphersController : Controller
[Obsolete("Deprecated Attachments API", false)] [Obsolete("Deprecated Attachments API", false)]
[RequestSizeLimit(Constants.FileSize101mb)] [RequestSizeLimit(Constants.FileSize101mb)]
[DisableFormValueModelBinding] [DisableFormValueModelBinding]
public async Task<CipherResponseModel> PostAttachment(string id) public async Task<CipherResponseModel> PostAttachment(Guid id)
{ {
ValidateAttachment(); ValidateAttachment();
var idGuid = new Guid(id);
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(idGuid, userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -711,10 +711,10 @@ public class CiphersController : Controller
} }
[HttpGet("{id}/attachment/{attachmentId}")] [HttpGet("{id}/attachment/{attachmentId}")]
public async Task<AttachmentResponseModel> GetAttachmentData(string id, string attachmentId) public async Task<AttachmentResponseModel> GetAttachmentData(Guid id, string attachmentId)
{ {
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); var cipher = await GetByIdAsync(id, userId);
var result = await _cipherService.GetAttachmentDownloadDataAsync(cipher, attachmentId); var result = await _cipherService.GetAttachmentDownloadDataAsync(cipher, attachmentId);
return new AttachmentResponseModel(result); return new AttachmentResponseModel(result);
} }
@ -742,11 +742,10 @@ public class CiphersController : Controller
[HttpDelete("{id}/attachment/{attachmentId}")] [HttpDelete("{id}/attachment/{attachmentId}")]
[HttpPost("{id}/attachment/{attachmentId}/delete")] [HttpPost("{id}/attachment/{attachmentId}/delete")]
public async Task DeleteAttachment(string id, string attachmentId) public async Task DeleteAttachment(Guid id, string attachmentId)
{ {
var idGuid = new Guid(id);
var userId = _userService.GetProperUserId(User).Value; var userId = _userService.GetProperUserId(User).Value;
var cipher = await _cipherRepository.GetByIdAsync(idGuid, userId); var cipher = await GetByIdAsync(id, userId);
if (cipher == null) if (cipher == null)
{ {
throw new NotFoundException(); throw new NotFoundException();
@ -836,4 +835,9 @@ public class CiphersController : Controller
} }
} }
} }
private async Task<CipherDetails> GetByIdAsync(Guid cipherId, Guid userId)
{
return await _cipherRepository.GetByIdAsync(cipherId, userId, UseFlexibleCollections);
}
} }

View File

@ -1,7 +1,9 @@
using Bit.Api.Vault.Models.Response; using Bit.Api.Vault.Models.Response;
using Bit.Core;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
@ -30,6 +32,11 @@ public class SyncController : Controller
private readonly IPolicyRepository _policyRepository; private readonly IPolicyRepository _policyRepository;
private readonly ISendRepository _sendRepository; private readonly ISendRepository _sendRepository;
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly ICurrentContext _currentContext;
private readonly IFeatureService _featureService;
private bool UseFlexibleCollections =>
_featureService.IsEnabled(FeatureFlagKeys.FlexibleCollections, _currentContext);
public SyncController( public SyncController(
IUserService userService, IUserService userService,
@ -41,7 +48,9 @@ public class SyncController : Controller
IProviderUserRepository providerUserRepository, IProviderUserRepository providerUserRepository,
IPolicyRepository policyRepository, IPolicyRepository policyRepository,
ISendRepository sendRepository, ISendRepository sendRepository,
GlobalSettings globalSettings) GlobalSettings globalSettings,
ICurrentContext currentContext,
IFeatureService featureService)
{ {
_userService = userService; _userService = userService;
_folderRepository = folderRepository; _folderRepository = folderRepository;
@ -53,6 +62,8 @@ public class SyncController : Controller
_policyRepository = policyRepository; _policyRepository = policyRepository;
_sendRepository = sendRepository; _sendRepository = sendRepository;
_globalSettings = globalSettings; _globalSettings = globalSettings;
_currentContext = currentContext;
_featureService = featureService;
} }
[HttpGet("")] [HttpGet("")]
@ -74,7 +85,7 @@ public class SyncController : Controller
var hasEnabledOrgs = organizationUserDetails.Any(o => o.Enabled); var hasEnabledOrgs = organizationUserDetails.Any(o => o.Enabled);
var folders = await _folderRepository.GetManyByUserIdAsync(user.Id); var folders = await _folderRepository.GetManyByUserIdAsync(user.Id);
var ciphers = await _cipherRepository.GetManyByUserIdAsync(user.Id, hasEnabledOrgs); var ciphers = await _cipherRepository.GetManyByUserIdAsync(user.Id, useFlexibleCollections: UseFlexibleCollections, withOrganizations: hasEnabledOrgs);
var sends = await _sendRepository.GetManyByUserIdAsync(user.Id); var sends = await _sendRepository.GetManyByUserIdAsync(user.Id);
IEnumerable<CollectionDetails> collections = null; IEnumerable<CollectionDetails> collections = null;

View File

@ -1119,8 +1119,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1462,8 +1462,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2765,85 +2765,85 @@
"commercial.core": { "commercial.core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )" "Core": "2023.10.3"
} }
}, },
"commercial.infrastructure.entityframework": { "commercial.infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
}, },
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -1,7 +1,7 @@
using Bit.Billing.Constants; using Bit.Billing.Constants;
using Bit.Billing.Services; using Bit.Billing.Services;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -971,8 +971,8 @@
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.1", "resolved": "13.0.3",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
}, },
"Npgsql": { "Npgsql": {
"type": "Transitive", "type": "Transitive",
@ -1314,8 +1314,8 @@
}, },
"Serilog.Sinks.SyslogMessages": { "Serilog.Sinks.SyslogMessages": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.6", "resolved": "2.0.9",
"contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", "contentHash": "y7J+/h/Nf5EAtbpa6lC1nDhK/F9kC5oxuVYmQivv242Oh4hAVMeoAk5Gv6bgb/KbmqufGPXUFkX/AlcrvZ8Ywg==",
"dependencies": { "dependencies": {
"Serilog": "2.5.0", "Serilog": "2.5.0",
"Serilog.Sinks.PeriodicBatching": "2.3.0" "Serilog.Sinks.PeriodicBatching": "2.3.0"
@ -2582,71 +2582,71 @@
"core": { "core": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AWSSDK.SQS": "[3.7.2.47, )", "AWSSDK.SQS": "3.7.2.47",
"AWSSDK.SimpleEmail": "[3.7.0.150, )", "AWSSDK.SimpleEmail": "3.7.0.150",
"AspNetCoreRateLimit": "[4.0.2, )", "AspNetCoreRateLimit": "4.0.2",
"AspNetCoreRateLimit.Redis": "[1.0.1, )", "AspNetCoreRateLimit.Redis": "1.0.1",
"Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.3.2, )", "Azure.Extensions.AspNetCore.DataProtection.Blobs": "1.3.2",
"Azure.Identity": "[1.10.2, )", "Azure.Identity": "1.10.2",
"Azure.Messaging.ServiceBus": "[7.15.0, )", "Azure.Messaging.ServiceBus": "7.15.0",
"Azure.Storage.Blobs": "[12.14.1, )", "Azure.Storage.Blobs": "12.14.1",
"Azure.Storage.Queues": "[12.12.0, )", "Azure.Storage.Queues": "12.12.0",
"BitPay.Light": "[1.0.1907, )", "BitPay.Light": "1.0.1907",
"Braintree": "[5.19.0, )", "Braintree": "5.19.0",
"DnsClient": "[1.7.0, )", "DnsClient": "1.7.0",
"Duende.IdentityServer": "[6.0.4, )", "Duende.IdentityServer": "6.0.4",
"Fido2.AspNet": "[3.0.1, )", "Fido2.AspNet": "3.0.1",
"Handlebars.Net": "[2.1.2, )", "Handlebars.Net": "2.1.2",
"LaunchDarkly.ServerSdk": "[8.0.0, )", "LaunchDarkly.ServerSdk": "8.0.0",
"MailKit": "[4.2.0, )", "MailKit": "4.2.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "6.0.4",
"Microsoft.Azure.Cosmos.Table": "[1.0.8, )", "Microsoft.Azure.Cosmos.Table": "1.0.8",
"Microsoft.Azure.NotificationHubs": "[4.1.0, )", "Microsoft.Azure.NotificationHubs": "4.1.0",
"Microsoft.Data.SqlClient": "[5.0.1, )", "Microsoft.Data.SqlClient": "5.0.1",
"Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", "Microsoft.Extensions.Caching.StackExchangeRedis": "6.0.6",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1",
"Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1",
"Microsoft.Extensions.Identity.Stores": "[6.0.4, )", "Microsoft.Extensions.Identity.Stores": "6.0.4",
"Newtonsoft.Json": "[13.0.1, )", "Newtonsoft.Json": "13.0.3",
"Otp.NET": "[1.2.2, )", "Otp.NET": "1.2.2",
"Quartz": "[3.4.0, )", "Quartz": "3.4.0",
"SendGrid": "[9.27.0, )", "SendGrid": "9.27.0",
"Sentry.Serilog": "[3.16.0, )", "Sentry.Serilog": "3.16.0",
"Serilog.AspNetCore": "[5.0.0, )", "Serilog.AspNetCore": "5.0.0",
"Serilog.Extensions.Logging": "[3.1.0, )", "Serilog.Extensions.Logging": "3.1.0",
"Serilog.Extensions.Logging.File": "[2.0.0, )", "Serilog.Extensions.Logging.File": "2.0.0",
"Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", "Serilog.Sinks.AzureCosmosDB": "2.0.0",
"Serilog.Sinks.SyslogMessages": "[2.0.6, )", "Serilog.Sinks.SyslogMessages": "2.0.9",
"Stripe.net": "[40.0.0, )", "Stripe.net": "40.0.0",
"YubicoDotNetClient": "[1.2.0, )" "YubicoDotNetClient": "1.2.0"
} }
}, },
"infrastructure.dapper": { "infrastructure.dapper": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Dapper": "[2.0.123, )" "Dapper": "2.0.123"
} }
}, },
"infrastructure.entityframework": { "infrastructure.entityframework": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": "[12.0.1, )", "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.1",
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Microsoft.EntityFrameworkCore.Relational": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Relational": "7.0.5",
"Microsoft.EntityFrameworkCore.SqlServer": "[7.0.5, )", "Microsoft.EntityFrameworkCore.SqlServer": "7.0.5",
"Microsoft.EntityFrameworkCore.Sqlite": "[7.0.5, )", "Microsoft.EntityFrameworkCore.Sqlite": "7.0.5",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )", "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.4",
"Pomelo.EntityFrameworkCore.MySql": "[7.0.0, )", "Pomelo.EntityFrameworkCore.MySql": "7.0.0",
"linq2db.EntityFrameworkCore": "[7.5.0, )" "linq2db.EntityFrameworkCore": "7.5.0"
} }
}, },
"sharedweb": { "sharedweb": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Core": "[2023.10.3, )", "Core": "2023.10.3",
"Infrastructure.Dapper": "[2023.10.3, )", "Infrastructure.Dapper": "2023.10.3",
"Infrastructure.EntityFramework": "[2023.10.3, )" "Infrastructure.EntityFramework": "2023.10.3"
} }
} }
} }

View File

@ -2,12 +2,13 @@
using System.Text.Json; using System.Text.Json;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Tools.Entities; using Bit.Core.Tools.Entities;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Core.Entities; namespace Bit.Core.AdminConsole.Entities;
public class Organization : ITableObject<Guid>, ISubscriber, IStorable, IStorableSubscriber, IRevisable, IReferenceable public class Organization : ITableObject<Guid>, ISubscriber, IStorable, IStorableSubscriber, IRevisable, IReferenceable
{ {
@ -82,6 +83,14 @@ public class Organization : ITableObject<Guid>, ISubscriber, IStorable, IStorabl
/// Refers to the ability for an organization to limit collection creation and deletion to owners and admins only /// Refers to the ability for an organization to limit collection creation and deletion to owners and admins only
/// </summary> /// </summary>
public bool LimitCollectionCreationDeletion { get; set; } public bool LimitCollectionCreationDeletion { get; set; }
/// <summary>
/// Refers to the ability for an organization to limit owner/admin access to all collection items
/// <remarks>
/// True: Owner/admins can access all items belonging to any collections
/// False: Owner/admins can only access items for collections they are assigned
/// </remarks>
/// </summary>
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public void SetNewId() public void SetNewId()
{ {

View File

@ -2,7 +2,6 @@
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;

View File

@ -1,5 +1,4 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;

View File

@ -1,5 +1,4 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;

View File

@ -1,7 +1,6 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationConnections.Interfaces; namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationConnections.Interfaces;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationConnections.Interfaces; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationConnections.Interfaces;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
namespace Bit.Core.Auth.Identity; namespace Bit.Core.Auth.Identity;

View File

@ -1,4 +1,5 @@
using Bit.Core.Auth.Enums; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Auth.Utilities.Duo; using Bit.Core.Auth.Utilities.Duo;
using Bit.Core.Entities; using Bit.Core.Entities;

View File

@ -1,5 +1,5 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Tokens; using Bit.Core.Tokens;
namespace Bit.Core.Auth.Models.Business.Tokenables; namespace Bit.Core.Auth.Models.Business.Tokenables;

View File

@ -1,5 +1,5 @@
using Bit.Core.Auth.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities; using Bit.Core.Auth.Entities;
namespace Bit.Core.Auth.Services; namespace Bit.Core.Auth.Services;

View File

@ -5,6 +5,7 @@ using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Auth.Models.Business.Tokenables; using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Auth.Models.Data; using Bit.Core.Auth.Models.Data;
using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
@ -33,6 +34,11 @@ public class EmergencyAccessService : IEmergencyAccessService
private readonly IPasswordHasher<User> _passwordHasher; private readonly IPasswordHasher<User> _passwordHasher;
private readonly IOrganizationService _organizationService; private readonly IOrganizationService _organizationService;
private readonly IDataProtectorTokenFactory<EmergencyAccessInviteTokenable> _dataProtectorTokenizer; private readonly IDataProtectorTokenFactory<EmergencyAccessInviteTokenable> _dataProtectorTokenizer;
private readonly ICurrentContext _currentContext;
private readonly IFeatureService _featureService;
private bool UseFlexibleCollections =>
_featureService.IsEnabled(FeatureFlagKeys.FlexibleCollections, _currentContext);
public EmergencyAccessService( public EmergencyAccessService(
IEmergencyAccessRepository emergencyAccessRepository, IEmergencyAccessRepository emergencyAccessRepository,
@ -46,7 +52,9 @@ public class EmergencyAccessService : IEmergencyAccessService
IPasswordHasher<User> passwordHasher, IPasswordHasher<User> passwordHasher,
GlobalSettings globalSettings, GlobalSettings globalSettings,
IOrganizationService organizationService, IOrganizationService organizationService,
IDataProtectorTokenFactory<EmergencyAccessInviteTokenable> dataProtectorTokenizer) IDataProtectorTokenFactory<EmergencyAccessInviteTokenable> dataProtectorTokenizer,
ICurrentContext currentContext,
IFeatureService featureService)
{ {
_emergencyAccessRepository = emergencyAccessRepository; _emergencyAccessRepository = emergencyAccessRepository;
_organizationUserRepository = organizationUserRepository; _organizationUserRepository = organizationUserRepository;
@ -60,6 +68,8 @@ public class EmergencyAccessService : IEmergencyAccessService
_globalSettings = globalSettings; _globalSettings = globalSettings;
_organizationService = organizationService; _organizationService = organizationService;
_dataProtectorTokenizer = dataProtectorTokenizer; _dataProtectorTokenizer = dataProtectorTokenizer;
_currentContext = currentContext;
_featureService = featureService;
} }
public async Task<EmergencyAccess> InviteAsync(User invitingUser, string email, EmergencyAccessType type, int waitTime) public async Task<EmergencyAccess> InviteAsync(User invitingUser, string email, EmergencyAccessType type, int waitTime)
@ -387,7 +397,7 @@ public class EmergencyAccessService : IEmergencyAccessService
throw new BadRequestException("Emergency Access not valid."); throw new BadRequestException("Emergency Access not valid.");
} }
var ciphers = await _cipherRepository.GetManyByUserIdAsync(emergencyAccess.GrantorId, false); var ciphers = await _cipherRepository.GetManyByUserIdAsync(emergencyAccess.GrantorId, useFlexibleCollections: UseFlexibleCollections, withOrganizations: false);
return new EmergencyAccessViewData return new EmergencyAccessViewData
{ {
@ -405,7 +415,7 @@ public class EmergencyAccessService : IEmergencyAccessService
throw new BadRequestException("Emergency Access not valid."); throw new BadRequestException("Emergency Access not valid.");
} }
var cipher = await _cipherRepository.GetByIdAsync(cipherId, emergencyAccess.GrantorId); var cipher = await _cipherRepository.GetByIdAsync(cipherId, emergencyAccess.GrantorId, UseFlexibleCollections);
return await _cipherService.GetAttachmentDownloadDataAsync(cipher, attachmentId); return await _cipherService.GetAttachmentDownloadDataAsync(cipher, attachmentId);
} }

View File

@ -6,7 +6,6 @@ using Bit.Core.AdminConsole.Services;
using Bit.Core.Auth.Entities; using Bit.Core.Auth.Entities;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -52,6 +52,7 @@ public static class FeatureFlagKeys
public const string AutofillV2 = "autofill-v2"; public const string AutofillV2 = "autofill-v2";
public const string BrowserFilelessImport = "browser-fileless-import"; public const string BrowserFilelessImport = "browser-fileless-import";
public const string FlexibleCollections = "flexible-collections"; public const string FlexibleCollections = "flexible-collections";
public const string FlexibleCollectionsV1 = "flexible-collections-v-1"; // v-1 is intentional
public const string BulkCollectionAccess = "bulk-collection-access"; public const string BulkCollectionAccess = "bulk-collection-access";
public const string AutofillOverlay = "autofill-overlay"; public const string AutofillOverlay = "autofill-overlay";
public const string ItemShare = "item-share"; public const string ItemShare = "item-share";

View File

@ -16,6 +16,7 @@ public class CurrentContextOrganization
Permissions = CoreHelpers.LoadClassFromJsonData<Permissions>(orgUser.Permissions); Permissions = CoreHelpers.LoadClassFromJsonData<Permissions>(orgUser.Permissions);
AccessSecretsManager = orgUser.AccessSecretsManager && orgUser.UseSecretsManager && orgUser.Enabled; AccessSecretsManager = orgUser.AccessSecretsManager && orgUser.UseSecretsManager && orgUser.Enabled;
LimitCollectionCreationDeletion = orgUser.LimitCollectionCreationDeletion; LimitCollectionCreationDeletion = orgUser.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = orgUser.AllowAdminAccessToAllCollectionItems;
} }
public Guid Id { get; set; } public Guid Id { get; set; }
@ -23,4 +24,5 @@ public class CurrentContextOrganization
public Permissions Permissions { get; set; } = new(); public Permissions Permissions { get; set; } = new();
public bool AccessSecretsManager { get; set; } public bool AccessSecretsManager { get; set; }
public bool LimitCollectionCreationDeletion { get; set; } public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
} }

View File

@ -48,9 +48,9 @@
<PackageReference Include="Serilog.Extensions.Logging.File" Version="2.0.0" /> <PackageReference Include="Serilog.Extensions.Logging.File" Version="2.0.0" />
<PackageReference Include="Sentry.Serilog" Version="3.16.0" /> <PackageReference Include="Sentry.Serilog" Version="3.16.0" />
<PackageReference Include="Duende.IdentityServer" Version="6.0.4" /> <PackageReference Include="Duende.IdentityServer" Version="6.0.4" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog.Sinks.AzureCosmosDB" Version="2.0.0" /> <PackageReference Include="Serilog.Sinks.AzureCosmosDB" Version="2.0.0" />
<PackageReference Include="Serilog.Sinks.SyslogMessages" Version="2.0.6" /> <PackageReference Include="Serilog.Sinks.SyslogMessages" Version="2.0.9" />
<PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" /> <PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
<PackageReference Include="Braintree" Version="5.19.0" /> <PackageReference Include="Braintree" Version="5.19.0" />
<PackageReference Include="Stripe.net" Version="40.0.0" /> <PackageReference Include="Stripe.net" Version="40.0.0" />

View File

@ -3,7 +3,7 @@ using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Text; using System.Text;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Services; using Bit.Core.Services;
using Bit.Core.Settings; using Bit.Core.Settings;
@ -13,12 +13,13 @@ namespace Bit.Core.Models.Business;
public class OrganizationLicense : ILicense public class OrganizationLicense : ILicense
{ {
public OrganizationLicense() public OrganizationLicense()
{ } {
}
public OrganizationLicense(Organization org, SubscriptionInfo subscriptionInfo, Guid installationId, public OrganizationLicense(Organization org, SubscriptionInfo subscriptionInfo, Guid installationId,
ILicensingService licenseService, int? version = null) ILicensingService licenseService, int? version = null)
{ {
Version = version.GetValueOrDefault(CURRENT_LICENSE_FILE_VERSION); // TODO: Remember to change the constant Version = version.GetValueOrDefault(CurrentLicenseFileVersion); // TODO: Remember to change the constant
LicenseType = Enums.LicenseType.Organization; LicenseType = Enums.LicenseType.Organization;
LicenseKey = org.LicenseKey; LicenseKey = org.LicenseKey;
InstallationId = installationId; InstallationId = installationId;
@ -66,7 +67,7 @@ public class OrganizationLicense : ILicense
} }
} }
else if (subscriptionInfo.Subscription.TrialEndDate.HasValue && else if (subscriptionInfo.Subscription.TrialEndDate.HasValue &&
subscriptionInfo.Subscription.TrialEndDate.Value > DateTime.UtcNow) subscriptionInfo.Subscription.TrialEndDate.Value > DateTime.UtcNow)
{ {
Expires = Refresh = subscriptionInfo.Subscription.TrialEndDate.Value; Expires = Refresh = subscriptionInfo.Subscription.TrialEndDate.Value;
Trial = true; Trial = true;
@ -79,10 +80,11 @@ public class OrganizationLicense : ILicense
Expires = Refresh = org.ExpirationDate.Value; Expires = Refresh = org.ExpirationDate.Value;
} }
else if (subscriptionInfo?.Subscription?.PeriodDuration != null && else if (subscriptionInfo?.Subscription?.PeriodDuration != null &&
subscriptionInfo.Subscription.PeriodDuration > TimeSpan.FromDays(180)) subscriptionInfo.Subscription.PeriodDuration > TimeSpan.FromDays(180))
{ {
Refresh = DateTime.UtcNow.AddDays(30); Refresh = DateTime.UtcNow.AddDays(30);
Expires = subscriptionInfo.Subscription.PeriodEndDate?.AddDays(Constants.OrganizationSelfHostSubscriptionGracePeriodDays); Expires = subscriptionInfo.Subscription.PeriodEndDate?.AddDays(Constants
.OrganizationSelfHostSubscriptionGracePeriodDays);
ExpirationWithoutGracePeriod = subscriptionInfo.Subscription.PeriodEndDate; ExpirationWithoutGracePeriod = subscriptionInfo.Subscription.PeriodEndDate;
} }
else else
@ -137,15 +139,15 @@ public class OrganizationLicense : ILicense
public LicenseType? LicenseType { get; set; } public LicenseType? LicenseType { get; set; }
public string Hash { get; set; } public string Hash { get; set; }
public string Signature { get; set; } public string Signature { get; set; }
[JsonIgnore] [JsonIgnore] public byte[] SignatureBytes => Convert.FromBase64String(Signature);
public byte[] SignatureBytes => Convert.FromBase64String(Signature);
/// <summary> /// <summary>
/// Represents the current version of the license format. Should be updated whenever new fields are added. /// Represents the current version of the license format. Should be updated whenever new fields are added.
/// </summary> /// </summary>
/// <remarks>Intentionally set one version behind to allow self hosted users some time to update before /// <remarks>Intentionally set one version behind to allow self hosted users some time to update before
/// getting out of date license errors</remarks> /// getting out of date license errors</remarks>
private const int CURRENT_LICENSE_FILE_VERSION = 12; public const int CurrentLicenseFileVersion = 12;
private bool ValidLicenseVersion private bool ValidLicenseVersion
{ {
get => Version is >= 1 and <= 13; get => Version is >= 1 and <= 13;
@ -235,14 +237,14 @@ public class OrganizationLicense : ILicense
if (InstallationId != globalSettings.Installation.Id || !SelfHost) if (InstallationId != globalSettings.Installation.Id || !SelfHost)
{ {
exception = "Invalid license. Make sure your license allows for on-premise " + exception = "Invalid license. Make sure your license allows for on-premise " +
"hosting of organizations and that the installation id matches your current installation."; "hosting of organizations and that the installation id matches your current installation.";
return false; return false;
} }
if (LicenseType != null && LicenseType != Enums.LicenseType.Organization) if (LicenseType != null && LicenseType != Enums.LicenseType.Organization)
{ {
exception = "Premium licenses cannot be applied to an organization. " exception = "Premium licenses cannot be applied to an organization. "
+ "Upload this license from your personal account settings page."; + "Upload this license from your personal account settings page.";
return false; return false;
} }
@ -331,9 +333,9 @@ public class OrganizationLicense : ILicense
if (valid && Version >= 13) if (valid && Version >= 13)
{ {
valid = organization.UseSecretsManager == UseSecretsManager && valid = organization.UseSecretsManager == UseSecretsManager &&
organization.UsePasswordManager == UsePasswordManager && organization.UsePasswordManager == UsePasswordManager &&
organization.SmSeats == SmSeats && organization.SmSeats == SmSeats &&
organization.SmServiceAccounts == SmServiceAccounts; organization.SmServiceAccounts == SmServiceAccounts;
} }
return valid; return valid;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Stripe; using Stripe;
namespace Bit.Core.Models.Business; namespace Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Stripe; using Stripe;
namespace Bit.Core.Models.Business; namespace Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.StaticStore; using Bit.Core.Models.StaticStore;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Stripe; using Stripe;
namespace Bit.Core.Models.Business; namespace Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Stripe; using Stripe;
namespace Bit.Core.Models.Business; namespace Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Stripe; using Stripe;
using Plan = Bit.Core.Models.StaticStore.Plan; using Plan = Bit.Core.Models.StaticStore.Plan;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
namespace Bit.Core.Models.Data.Organizations; namespace Bit.Core.Models.Data.Organizations;

View File

@ -49,4 +49,5 @@ public class OrganizationUserOrganizationDetails
public int? SmSeats { get; set; } public int? SmSeats { get; set; }
public int? SmServiceAccounts { get; set; } public int? SmServiceAccounts { get; set; }
public bool LimitCollectionCreationDeletion { get; set; } public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
} }

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
namespace Bit.Core.Models.Data.Organizations.OrganizationUsers; namespace Bit.Core.Models.Data.Organizations.OrganizationUsers;

View File

@ -145,6 +145,7 @@ public class SelfHostedOrganizationDetails : Organization
MaxAutoscaleSeats = MaxAutoscaleSeats, MaxAutoscaleSeats = MaxAutoscaleSeats,
OwnersNotifiedOfAutoscaling = OwnersNotifiedOfAutoscaling, OwnersNotifiedOfAutoscaling = OwnersNotifiedOfAutoscaling,
LimitCollectionCreationDeletion = LimitCollectionCreationDeletion, LimitCollectionCreationDeletion = LimitCollectionCreationDeletion,
AllowAdminAccessToAllCollectionItems = AllowAdminAccessToAllCollectionItems
}; };
} }
} }

View File

@ -17,7 +17,6 @@ public record Families2019Plan : Models.StaticStore.Plan
HasSelfHost = true; HasSelfHost = true;
HasTotp = true; HasTotp = true;
UsersGetPremium = true;
UpgradeSortOrder = 1; UpgradeSortOrder = 1;
DisplaySortOrder = 1; DisplaySortOrder = 1;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces; namespace Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces;

View File

@ -1,6 +1,6 @@
#nullable enable #nullable enable
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Data.Organizations;

View File

@ -1,4 +1,5 @@
using Bit.Core.Context; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Api.OrganizationLicenses; using Bit.Core.Models.Api.OrganizationLicenses;

View File

@ -1,7 +1,7 @@
#nullable enable #nullable enable
using System.Text.Json; using System.Text.Json;
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Data.Organizations;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Data.Organizations.OrganizationSponsorships; using Bit.Core.Models.Data.Organizations.OrganizationSponsorships;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business.Tokenables; using Bit.Core.Models.Business.Tokenables;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Services; using Bit.Core.Services;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Models.Data.Organizations.OrganizationSponsorships; using Bit.Core.Models.Data.Organizations.OrganizationSponsorships;
namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; namespace Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;

View File

@ -1,6 +1,6 @@
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
namespace Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; namespace Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,10 +1,10 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs; using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Data.Organizations;
namespace Bit.Core.Repositories; namespace Bit.Core.Repositories;

View File

@ -1,6 +1,6 @@
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Models.Data.Provider; using Bit.Core.AdminConsole.Models.Data.Provider;
using Bit.Core.Entities;
using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Data.Organizations;
namespace Bit.Core.Services; namespace Bit.Core.Services;

View File

@ -1,4 +1,5 @@
using Bit.Core.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Core.Services; namespace Bit.Core.Services;

Some files were not shown because too many files have changed in this diff Show More