1
0
mirror of https://github.com/bitwarden/server synced 2025-12-19 01:33:20 +00:00

Updating SM to Sm, and adding more view refreshes

This commit is contained in:
cd-bitwarden
2025-11-05 21:50:36 -05:00
parent 7db2a840e6
commit 2bca8b1f07
28 changed files with 90 additions and 56 deletions

View File

@@ -473,7 +473,7 @@ public class OrganizationsController : Controller
organization.UseOrganizationDomains = model.UseOrganizationDomains;
organization.UseAdminSponsoredFamilies = model.UseAdminSponsoredFamilies;
organization.UseAutomaticUserConfirmation = model.UseAutomaticUserConfirmation;
organization.UseDisableSMAdsForUsers = model.UseDisableSMAdsForUsers;
organization.UseDisableSmAdsForUsers = model.UseDisableSmAdsForUsers;
//secrets
organization.SmSeats = model.SmSeats;

View File

@@ -107,7 +107,7 @@ public class OrganizationEditModel : OrganizationViewModel
MaxAutoscaleSmServiceAccounts = org.MaxAutoscaleSmServiceAccounts;
UseOrganizationDomains = org.UseOrganizationDomains;
UseAutomaticUserConfirmation = org.UseAutomaticUserConfirmation;
UseDisableSMAdsForUsers = org.UseDisableSMAdsForUsers;
UseDisableSmAdsForUsers = org.UseDisableSmAdsForUsers;
_plans = plans;
}
@@ -195,7 +195,7 @@ public class OrganizationEditModel : OrganizationViewModel
[Display(Name = "Use Organization Domains")]
public bool UseOrganizationDomains { get; set; }
[Display(Name = "Disable SM Ads For Users")]
public bool UseDisableSMAdsForUsers { get; set; }
public bool UseDisableSmAdsForUsers { get; set; }
[Display(Name = "Automatic User Confirmation")]
public bool UseAutomaticUserConfirmation { get; set; }
@@ -330,7 +330,7 @@ public class OrganizationEditModel : OrganizationViewModel
existingOrganization.SmServiceAccounts = SmServiceAccounts;
existingOrganization.MaxAutoscaleSmServiceAccounts = MaxAutoscaleSmServiceAccounts;
existingOrganization.UseOrganizationDomains = UseOrganizationDomains;
existingOrganization.UseDisableSMAdsForUsers = UseDisableSMAdsForUsers;
existingOrganization.UseDisableSmAdsForUsers = UseDisableSmAdsForUsers;
return existingOrganization;
}
}

View File

@@ -185,8 +185,8 @@
<label class="form-check-label" asp-for="UseSecretsManager"></label>
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" asp-for="UseDisableSMAdsForUsers" disabled='@(canEditPlan ? null : "disabled")'>
<label class="form-check-label" asp-for="UseDisableSMAdsForUsers"></label>
<input type="checkbox" class="form-check-input" asp-for="UseDisableSmAdsForUsers" disabled='@(canEditPlan ? null : "disabled")'>
<label class="form-check-label" asp-for="UseDisableSmAdsForUsers"></label>
</div>
</div>
<div class="col-2">

View File

@@ -71,7 +71,7 @@ public class OrganizationResponseModel : ResponseModel
UseOrganizationDomains = organization.UseOrganizationDomains;
UseAdminSponsoredFamilies = organization.UseAdminSponsoredFamilies;
UseAutomaticUserConfirmation = organization.UseAutomaticUserConfirmation;
UseDisableSMAdsForUsers = organization.UseDisableSMAdsForUsers;
UseDisableSmAdsForUsers = organization.UseDisableSmAdsForUsers;
}
public Guid Id { get; set; }
@@ -121,7 +121,7 @@ public class OrganizationResponseModel : ResponseModel
public bool UseOrganizationDomains { get; set; }
public bool UseAdminSponsoredFamilies { get; set; }
public bool UseAutomaticUserConfirmation { get; set; }
public bool UseDisableSMAdsForUsers { get; set; }
public bool UseDisableSmAdsForUsers { get; set; }
}
public class OrganizationSubscriptionResponseModel : OrganizationResponseModel

View File

@@ -137,7 +137,7 @@ public class Organization : ITableObject<Guid>, IStorableSubscriber, IRevisable
/// <summary>
/// If set to true, disables Secrets Manager ads for users in the organization
/// </summary>
public bool UseDisableSMAdsForUsers { get; set; }
public bool UseDisableSmAdsForUsers { get; set; }
public void SetNewId()
{
@@ -338,6 +338,6 @@ public class Organization : ITableObject<Guid>, IStorableSubscriber, IRevisable
UseRiskInsights = license.UseRiskInsights;
UseOrganizationDomains = license.UseOrganizationDomains;
UseAdminSponsoredFamilies = license.UseAdminSponsoredFamilies;
UseDisableSMAdsForUsers = license.UseDisableSMAdsForUsers;
UseDisableSmAdsForUsers = license.UseDisableSmAdsForUsers;
}
}

View File

@@ -29,7 +29,7 @@ public class OrganizationAbility
UseOrganizationDomains = organization.UseOrganizationDomains;
UseAdminSponsoredFamilies = organization.UseAdminSponsoredFamilies;
UseAutomaticUserConfirmation = organization.UseAutomaticUserConfirmation;
UseDisableSMAdsForUsers = organization.UseDisableSMAdsForUsers;
UseDisableSmAdsForUsers = organization.UseDisableSmAdsForUsers;
}
public Guid Id { get; set; }
@@ -52,5 +52,5 @@ public class OrganizationAbility
public bool UseOrganizationDomains { get; set; }
public bool UseAdminSponsoredFamilies { get; set; }
public bool UseAutomaticUserConfirmation { get; set; }
public bool UseDisableSMAdsForUsers { get; set; }
public bool UseDisableSmAdsForUsers { get; set; }
}

View File

@@ -154,7 +154,7 @@ public class SelfHostedOrganizationDetails : Organization
Status = Status,
UseRiskInsights = UseRiskInsights,
UseAdminSponsoredFamilies = UseAdminSponsoredFamilies,
UseDisableSMAdsForUsers = UseDisableSMAdsForUsers,
UseDisableSmAdsForUsers = UseDisableSmAdsForUsers,
};
}
}

View File

@@ -62,8 +62,8 @@ public static class OrganizationFactory
UseAdminSponsoredFamilies =
claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseAdminSponsoredFamilies),
UseAutomaticUserConfirmation = claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseAutomaticUserConfirmation),
UseDisableSMAdsForUsers =
claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseDisableSMAdsForUsers),
UseDisableSmAdsForUsers =
claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseDisableSmAdsForUsers),
};
public static Organization Create(

View File

@@ -44,7 +44,7 @@ public static class OrganizationLicenseConstants
public const string UseAdminSponsoredFamilies = nameof(UseAdminSponsoredFamilies);
public const string UseOrganizationDomains = nameof(UseOrganizationDomains);
public const string UseAutomaticUserConfirmation = nameof(UseAutomaticUserConfirmation);
public const string UseDisableSMAdsForUsers = nameof(UseDisableSMAdsForUsers);
public const string UseDisableSmAdsForUsers = nameof(UseDisableSmAdsForUsers);
}
public static class UserLicenseConstants

View File

@@ -57,7 +57,7 @@ public class OrganizationLicenseClaimsFactory : ILicenseClaimsFactory<Organizati
new(nameof(OrganizationLicenseConstants.UseAdminSponsoredFamilies), entity.UseAdminSponsoredFamilies.ToString()),
new(nameof(OrganizationLicenseConstants.UseOrganizationDomains), entity.UseOrganizationDomains.ToString()),
new(nameof(OrganizationLicenseConstants.UseAutomaticUserConfirmation), entity.UseAutomaticUserConfirmation.ToString()),
new(nameof(OrganizationLicenseConstants.UseDisableSMAdsForUsers), entity.UseDisableSMAdsForUsers.ToString()),
new(nameof(OrganizationLicenseConstants.UseDisableSmAdsForUsers), entity.UseDisableSmAdsForUsers.ToString()),
};
if (entity.Name is not null)

View File

@@ -154,7 +154,7 @@ public class OrganizationLicense : ILicense
public bool UseOrganizationDomains { get; set; }
public bool UseAdminSponsoredFamilies { get; set; }
public bool UseAutomaticUserConfirmation { get; set; }
public bool UseDisableSMAdsForUsers { get; set; }
public bool UseDisableSmAdsForUsers { get; set; }
public string Hash { get; set; }
public string Signature { get; set; }
public string Token { get; set; }
@@ -230,7 +230,7 @@ public class OrganizationLicense : ILicense
!p.Name.Equals(nameof(UseAdminSponsoredFamilies)) &&
!p.Name.Equals(nameof(UseOrganizationDomains)) &&
!p.Name.Equals(nameof(UseAutomaticUserConfirmation)) &&
!p.Name.Equals(nameof(UseDisableSMAdsForUsers)))
!p.Name.Equals(nameof(UseDisableSmAdsForUsers)))
.OrderBy(p => p.Name)
.Select(p => $"{p.Name}:{Core.Utilities.CoreHelpers.FormatLicenseSignatureValue(p.GetValue(this, null))}")
.Aggregate((c, n) => $"{c}|{n}");
@@ -426,7 +426,7 @@ public class OrganizationLicense : ILicense
var useAdminSponsoredFamilies = claimsPrincipal.GetValue<bool>(nameof(UseAdminSponsoredFamilies));
var useOrganizationDomains = claimsPrincipal.GetValue<bool>(nameof(UseOrganizationDomains));
var useAutomaticUserConfirmation = claimsPrincipal.GetValue<bool>(nameof(UseAutomaticUserConfirmation));
var useDisableSMAdsForUsers = claimsPrincipal.GetValue<bool>(nameof(UseDisableSMAdsForUsers));
var useDisableSmAdsForUsers = claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseDisableSmAdsForUsers);
return issued <= DateTime.UtcNow &&
expires >= DateTime.UtcNow &&
@@ -458,7 +458,7 @@ public class OrganizationLicense : ILicense
useAdminSponsoredFamilies == organization.UseAdminSponsoredFamilies &&
useOrganizationDomains == organization.UseOrganizationDomains &&
useAutomaticUserConfirmation == organization.UseAutomaticUserConfirmation &&
useDisableSMAdsForUsers == organization.UseDisableSMAdsForUsers;
useDisableSMAdsForUsers == organization.UseDisableSmAdsForUsers;
}

View File

@@ -114,7 +114,7 @@ public class OrganizationRepository : Repository<Core.AdminConsole.Entities.Orga
UseOrganizationDomains = e.UseOrganizationDomains,
UseAdminSponsoredFamilies = e.UseAdminSponsoredFamilies,
UseAutomaticUserConfirmation = e.UseAutomaticUserConfirmation,
UseDisableSMAdsForUsers = e.UseDisableSMAdsForUsers
UseDisableSmAdsForUsers = e.UseDisableSmAdsForUsers
}).ToListAsync();
}
}

View File

@@ -60,7 +60,7 @@ CREATE PROCEDURE [dbo].[Organization_Create]
@UseAdminSponsoredFamilies BIT = 0,
@SyncSeats BIT = 0,
@UseAutomaticUserConfirmation BIT = 0,
@UseDisableSMAdsForUsers BIT = 0
@UseDisableSmAdsForUsers BIT = 0
AS
BEGIN
SET NOCOUNT ON
@@ -128,7 +128,7 @@ BEGIN
[UseAdminSponsoredFamilies],
[SyncSeats],
[UseAutomaticUserConfirmation],
[UseDisableSMAdsForUsers]
[UseDisableSmAdsForUsers]
)
VALUES
(
@@ -193,6 +193,6 @@ BEGIN
@UseAdminSponsoredFamilies,
@SyncSeats,
@UseAutomaticUserConfirmation,
@UseDisableSMAdsForUsers
@UseDisableSmAdsForUsers
);
END

View File

@@ -29,7 +29,7 @@ BEGIN
[UseOrganizationDomains],
[UseAdminSponsoredFamilies],
[UseAutomaticUserConfirmation],
[UseDisableSMAdsForUsers]
[UseDisableSmAdsForUsers]
FROM
[dbo].[Organization]
END

View File

@@ -60,7 +60,7 @@ CREATE PROCEDURE [dbo].[Organization_Update]
@UseAdminSponsoredFamilies BIT = 0,
@SyncSeats BIT = 0,
@UseAutomaticUserConfirmation BIT = 0,
@UseDisableSMAdsForUsers BIT = 0
@UseDisableSmAdsForUsers BIT = 0
AS
BEGIN
SET NOCOUNT ON
@@ -128,7 +128,7 @@ BEGIN
[UseAdminSponsoredFamilies] = @UseAdminSponsoredFamilies,
[SyncSeats] = @SyncSeats,
[UseAutomaticUserConfirmation] = @UseAutomaticUserConfirmation,
[UseDisableSMAdsForUsers] = @UseDisableSMAdsForUsers
[UseDisableSmAdsForUsers] = @UseDisableSmAdsForUsers
WHERE
[Id] = @Id;
END

View File

@@ -60,7 +60,7 @@ CREATE TABLE [dbo].[Organization] (
[UseAdminSponsoredFamilies] BIT NOT NULL CONSTRAINT [DF_Organization_UseAdminSponsoredFamilies] DEFAULT (0),
[SyncSeats] BIT NOT NULL CONSTRAINT [DF_Organization_SyncSeats] DEFAULT (0),
[UseAutomaticUserConfirmation] BIT NOT NULL CONSTRAINT [DF_Organization_UseAutomaticUserConfirmation] DEFAULT (0),
[UseDisableSMAdsForUsers] BIT NOT NULL CONSTRAINT [DF_Organization_UseDisableSMAdsForUsers] DEFAULT (0),
[UseDisableSmAdsForUsers] BIT NOT NULL CONSTRAINT [DF_Organization_UseDisableSmAdsForUsers] DEFAULT (0),
CONSTRAINT [PK_Organization] PRIMARY KEY CLUSTERED ([Id] ASC)
);

View File

@@ -98,21 +98,21 @@ public class OrganizationTests
}
[Fact]
public void UseDisableSMAdsForUsers_DefaultValue_IsFalse()
public void UseDisableSmAdsForUsers_DefaultValue_IsFalse()
{
var organization = new Organization();
Assert.False(organization.UseDisableSMAdsForUsers);
Assert.False(organization.UseDisableSmAdsForUsers);
}
[Fact]
public void UseDisableSMAdsForUsers_CanBeSetToTrue()
public void UseDisableSmAdsForUsers_CanBeSetToTrue()
{
var organization = new Organization
{
UseDisableSMAdsForUsers = true
UseDisableSmAdsForUsers = true
};
Assert.True(organization.UseDisableSMAdsForUsers);
Assert.True(organization.UseDisableSmAdsForUsers);
}
}

View File

@@ -214,7 +214,7 @@ If you believe you need to change the version for a valid reason, please discuss
AllowAdminAccessToAllCollectionItems = true,
UseOrganizationDomains = true,
UseAdminSponsoredFamilies = false,
UseDisableSMAdsForUsers = false
UseDisableSmAdsForUsers = false
};
}
@@ -260,4 +260,34 @@ If you believe you need to change the version for a valid reason, please discuss
.Returns([0x00, 0x01, 0x02, 0x03]); // Dummy signature for hash testing
return mockService;
}
/// <summary>
/// Verifies that UseDisableSmAdsForUsers claim is properly generated in the license Token
/// and that VerifyData correctly validates the claim.
/// </summary>
[Theory]
[BitAutoData(true)]
[BitAutoData(false)]
public void OrganizationLicense_UseDisableSmAdsForUsers_ClaimGenerationAndValidation(bool useDisableSmAdsForUsers, ClaimsPrincipal claimsPrincipal)
{
// Arrange
var organization = CreateDeterministicOrganization();
organization.UseDisableSmAdsForUsers = useDisableSmAdsForUsers;
var subscriptionInfo = CreateDeterministicSubscriptionInfo();
var installationId = new Guid("78900000-0000-0000-0000-000000000123");
var mockLicensingService = CreateMockLicensingService();
var license = new OrganizationLicense(organization, subscriptionInfo, installationId, mockLicensingService);
license.Expires = DateTime.MaxValue; // Prevent expiration during test
var globalSettings = Substitute.For<IGlobalSettings>();
globalSettings.Installation.Returns(new GlobalSettings.InstallationSettings
{
Id = installationId
});
// Act & Assert - Verify VerifyData passes with the UseDisableSmAdsForUsers value
Assert.True(license.VerifyData(organization, claimsPrincipal, globalSettings));
}
}

View File

@@ -2,15 +2,19 @@
IF NOT EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Organization'
AND COLUMN_NAME = 'UseDisableSMAdsForUsers')
AND COLUMN_NAME = 'UseDisableSmAdsForUsers')
BEGIN
ALTER TABLE [dbo].[Organization]
ADD [UseDisableSMAdsForUsers] BIT NOT NULL CONSTRAINT [DF_Organization_UseDisableSMAdsForUsers] DEFAULT 0;
ADD [UseDisableSmAdsForUsers] BIT NOT NULL CONSTRAINT [DF_Organization_UseDisableSmAdsForUsers] DEFAULT 0;
END
GO
-- Refresh view
-- Refresh views
EXEC sp_refreshview N'[dbo].[OrganizationCipherDetailsCollectionsView]';
EXEC sp_refreshview N'[dbo].[OrganizationUserOrganizationDetailsView]';
EXEC sp_refreshsqlmodule N'[dbo].[OrganizationView]';
EXEC sp_refreshview N'[dbo].[ProviderOrganizationOrganizationDetailsView]';
EXEC sp_refreshview N'[dbo].[ProviderUserProviderOrganizationDetailsView]';
GO
CREATE OR ALTER PROCEDURE [dbo].[Organization_Create]
@@ -75,7 +79,7 @@ CREATE OR ALTER PROCEDURE [dbo].[Organization_Create]
@UseAdminSponsoredFamilies BIT = 0,
@SyncSeats BIT = 0,
@UseAutomaticUserConfirmation BIT = 0,
@UseDisableSMAdsForUsers BIT = 0
@UseDisableSmAdsForUsers BIT = 0
AS
BEGIN
SET NOCOUNT ON
@@ -143,7 +147,7 @@ BEGIN
[UseAdminSponsoredFamilies],
[SyncSeats],
[UseAutomaticUserConfirmation],
[UseDisableSMAdsForUsers]
[UseDisableSmAdsForUsers]
)
VALUES
(
@@ -208,7 +212,7 @@ BEGIN
@UseAdminSponsoredFamilies,
@SyncSeats,
@UseAutomaticUserConfirmation,
@UseDisableSMAdsForUsers
@UseDisableSmAdsForUsers
)
END
GO
@@ -275,7 +279,7 @@ CREATE OR ALTER PROCEDURE [dbo].[Organization_Update]
@UseAdminSponsoredFamilies BIT = 0,
@SyncSeats BIT = 0,
@UseAutomaticUserConfirmation BIT = 0,
@UseDisableSMAdsForUsers BIT = 0
@UseDisableSmAdsForUsers BIT = 0
AS
BEGIN
SET NOCOUNT ON
@@ -343,7 +347,7 @@ BEGIN
[UseAdminSponsoredFamilies] = @UseAdminSponsoredFamilies,
[SyncSeats] = @SyncSeats,
[UseAutomaticUserConfirmation] = @UseAutomaticUserConfirmation,
[UseDisableSMAdsForUsers] = @UseDisableSMAdsForUsers
[UseDisableSmAdsForUsers] = @UseDisableSmAdsForUsers
WHERE
[Id] = @Id
END
@@ -380,7 +384,7 @@ BEGIN
[UseOrganizationDomains],
[UseAdminSponsoredFamilies],
[UseAutomaticUserConfirmation],
[UseDisableSMAdsForUsers]
[UseDisableSmAdsForUsers]
FROM
[dbo].[Organization]
END

View File

@@ -113,7 +113,7 @@ namespace Bit.MySqlMigrations.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime(6)");
b.Property<bool>("UseDisableSMAdsForUsers")
b.Property<bool>("UseDisableSmAdsForUsers")
.HasColumnType("tinyint(1)");
b.Property<bool>("Enabled")

View File

@@ -11,7 +11,7 @@ public partial class AddingNewFlagToLicenseForDisableSMAdsForUser : Migration
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "UseDisableSMAdsForUsers",
name: "UseDisableSmAdsForUsers",
table: "Organization",
type: "tinyint(1)",
nullable: false,
@@ -22,7 +22,7 @@ public partial class AddingNewFlagToLicenseForDisableSMAdsForUser : Migration
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "UseDisableSMAdsForUsers",
name: "UseDisableSmAdsForUsers",
table: "Organization");
}
}

View File

@@ -110,7 +110,7 @@ namespace Bit.MySqlMigrations.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime(6)");
b.Property<bool>("UseDisableSMAdsForUsers")
b.Property<bool>("UseDisableSmAdsForUsers")
.HasColumnType("tinyint(1)");
b.Property<bool>("Enabled")

View File

@@ -114,7 +114,7 @@ namespace Bit.PostgresMigrations.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("UseDisableSMAdsForUsers")
b.Property<bool>("UseDisableSmAdsForUsers")
.HasColumnType("boolean");
b.Property<bool>("Enabled")

View File

@@ -11,7 +11,7 @@ public partial class AddingNewFlagToLicenseForDisableSMAdsForUser : Migration
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "UseDisableSMAdsForUsers",
name: "UseDisableSmAdsForUsers",
table: "Organization",
type: "boolean",
nullable: false,
@@ -22,7 +22,7 @@ public partial class AddingNewFlagToLicenseForDisableSMAdsForUser : Migration
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "UseDisableSMAdsForUsers",
name: "UseDisableSmAdsForUsers",
table: "Organization");
}
}

View File

@@ -111,7 +111,7 @@ namespace Bit.PostgresMigrations.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("timestamp with time zone");
b.Property<bool>("UseDisableSMAdsForUsers")
b.Property<bool>("UseDisableSmAdsForUsers")
.HasColumnType("boolean");
b.Property<bool>("Enabled")

View File

@@ -108,7 +108,7 @@ namespace Bit.SqliteMigrations.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("TEXT");
b.Property<bool>("UseDisableSMAdsForUsers")
b.Property<bool>("UseDisableSmAdsForUsers")
.HasColumnType("INTEGER");
b.Property<bool>("Enabled")

View File

@@ -11,7 +11,7 @@ public partial class AddingNewFlagToLicenseForDisableSMAdsForUser : Migration
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "UseDisableSMAdsForUsers",
name: "UseDisableSmAdsForUsers",
table: "Organization",
type: "INTEGER",
nullable: false,
@@ -22,7 +22,7 @@ public partial class AddingNewFlagToLicenseForDisableSMAdsForUser : Migration
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "UseDisableSMAdsForUsers",
name: "UseDisableSmAdsForUsers",
table: "Organization");
}
}

View File

@@ -105,7 +105,7 @@ namespace Bit.SqliteMigrations.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("TEXT");
b.Property<bool>("UseDisableSMAdsForUsers")
b.Property<bool>("UseDisableSmAdsForUsers")
.HasColumnType("INTEGER");
b.Property<bool>("Enabled")