Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
1f1b103
Adding new item to organization license
cd-bitwarden Oct 22, 2025
f2388e6
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Oct 22, 2025
763cc10
fixing whitespace issues
cd-bitwarden Oct 22, 2025
69b8586
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Oct 22, 2025
de5b797
fixing missing comment
cd-bitwarden Oct 22, 2025
7d4d0fd
Merge branch 'SM-1571-DisableSMAdsForUsers' of https://github.com/bitโ€ฆ
cd-bitwarden Oct 22, 2025
4e6b2de
fixing merge conflicts
cd-bitwarden Oct 22, 2025
3d51aac
merge fix
cd-bitwarden Oct 22, 2025
f319d7a
db merge fixes
cd-bitwarden Oct 22, 2025
9c5fce0
fix
cd-bitwarden Oct 22, 2025
7c930b7
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Oct 23, 2025
9baa22c
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Oct 23, 2025
7db2a84
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Oct 28, 2025
2bca8b1
Updating SM to Sm, and adding more view refreshes
cd-bitwarden Nov 6, 2025
363fa4f
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Nov 6, 2025
10b0465
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Nov 6, 2025
911be60
Merge branch 'SM-1571-DisableSMAdsForUsers' of https://github.com/bitโ€ฆ
cd-bitwarden Nov 6, 2025
036b2bd
Merge branch 'SM-1571-DisableSMAdsForUsers' of https://github.com/bitโ€ฆ
cd-bitwarden Nov 6, 2025
b8a14c9
fixing merge conflicts
cd-bitwarden Nov 6, 2025
17fad60
Redoing migration
cd-bitwarden Nov 26, 2025
fbf07ab
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 3, 2025
654cbc8
Update OrganizationLicense.cs
cd-bitwarden Dec 3, 2025
3fe93b5
Update OrganizationLicense.cs
cd-bitwarden Dec 3, 2025
f9d62ae
fixes
cd-bitwarden Dec 3, 2025
cad1c93
fixes
cd-bitwarden Dec 3, 2025
fd46c91
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 3, 2025
de81e4e
Merge branch 'SM-1571-DisableSMAdsForUsers' of https://github.com/bitโ€ฆ
cd-bitwarden Dec 3, 2025
eedd4c2
fixing db issues
cd-bitwarden Dec 3, 2025
e309d36
fix
cd-bitwarden Dec 3, 2025
6d8cc7f
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 3, 2025
126ca9f
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 4, 2025
fbb9b0d
rearranging sql after merge conflicts
cd-bitwarden Dec 9, 2025
42f83ec
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 9, 2025
e0bf292
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 10, 2025
b0342f5
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cturnbull-bitwarden Dec 18, 2025
17500ed
Merge conflicts with dbscripts are fixed, adding missing usedisableSMโ€ฆ
cd-bitwarden Dec 18, 2025
beef8e2
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 18, 2025
12a004b
removing incorrect merge fix
cd-bitwarden Dec 19, 2025
81f9985
Merge branch 'SM-1571-DisableSMAdsForUsers' of https://github.com/bitโ€ฆ
cd-bitwarden Dec 19, 2025
2c1701d
fixes
cd-bitwarden Dec 19, 2025
a97b82c
adding feature flag to disable sm ads
cd-bitwarden Dec 23, 2025
3fb4539
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 23, 2025
930c336
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 26, 2025
35185fa
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Dec 30, 2025
090f462
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Jan 2, 2026
5b59234
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Jan 7, 2026
b8860ca
Merge branch 'main' into SM-1571-DisableSMAdsForUsers
cd-bitwarden Jan 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ private void UpdateOrganization(Organization organization, OrganizationEditModel
organization.UseOrganizationDomains = model.UseOrganizationDomains;
organization.UseAdminSponsoredFamilies = model.UseAdminSponsoredFamilies;
organization.UseAutomaticUserConfirmation = model.UseAutomaticUserConfirmation;
organization.UseDisableSMAdsForUsers = model.UseDisableSMAdsForUsers;

//secrets
organization.SmSeats = model.SmSeats;
Expand Down
4 changes: 4 additions & 0 deletions src/Admin/AdminConsole/Models/OrganizationEditModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ public OrganizationEditModel(
MaxAutoscaleSmServiceAccounts = org.MaxAutoscaleSmServiceAccounts;
UseOrganizationDomains = org.UseOrganizationDomains;
UseAutomaticUserConfirmation = org.UseAutomaticUserConfirmation;
UseDisableSMAdsForUsers = org.UseDisableSMAdsForUsers;

_plans = plans;
}
Expand Down Expand Up @@ -193,6 +194,8 @@ public OrganizationEditModel(
public int? MaxAutoscaleSmServiceAccounts { get; set; }
[Display(Name = "Use Organization Domains")]
public bool UseOrganizationDomains { get; set; }
[Display(Name = "Disable SM Ads For Users")]
public bool UseDisableSMAdsForUsers { get; set; }

[Display(Name = "Automatic User Confirmation")]
public bool UseAutomaticUserConfirmation { get; set; }
Expand Down Expand Up @@ -327,6 +330,7 @@ public Organization ToOrganization(Organization existingOrganization)
existingOrganization.SmServiceAccounts = SmServiceAccounts;
existingOrganization.MaxAutoscaleSmServiceAccounts = MaxAutoscaleSmServiceAccounts;
existingOrganization.UseOrganizationDomains = UseOrganizationDomains;
existingOrganization.UseDisableSMAdsForUsers = UseDisableSMAdsForUsers;
return existingOrganization;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@
<input type="checkbox" class="form-check-input" asp-for="UseSecretsManager" disabled='@(canEditPlan ? null : "disabled")'>
<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>
</div>
</div>
<div class="col-2">
<h3>Access Intelligence</h3>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public OrganizationResponseModel(
UseOrganizationDomains = organization.UseOrganizationDomains;
UseAdminSponsoredFamilies = organization.UseAdminSponsoredFamilies;
UseAutomaticUserConfirmation = organization.UseAutomaticUserConfirmation;
UseDisableSMAdsForUsers = organization.UseDisableSMAdsForUsers;
}

public Guid Id { get; set; }
Expand Down Expand Up @@ -120,6 +121,7 @@ public OrganizationResponseModel(
public bool UseOrganizationDomains { get; set; }
public bool UseAdminSponsoredFamilies { get; set; }
public bool UseAutomaticUserConfirmation { get; set; }
public bool UseDisableSMAdsForUsers { get; set; }
}

public class OrganizationSubscriptionResponseModel : OrganizationResponseModel
Expand Down
6 changes: 6 additions & 0 deletions src/Core/AdminConsole/Entities/Organization.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@ public class Organization : ITableObject<Guid>, IStorableSubscriber, IRevisable
/// </summary>
public bool UseAutomaticUserConfirmation { get; set; }

/// <summary>
/// If set to true, disables Secrets Manager ads for users in the organization
/// </summary>
public bool UseDisableSMAdsForUsers { get; set; }

public void SetNewId()
{
if (Id == default(Guid))
Expand Down Expand Up @@ -333,5 +338,6 @@ public void UpdateFromLicense(OrganizationLicense license, IFeatureService featu
UseRiskInsights = license.UseRiskInsights;
UseOrganizationDomains = license.UseOrganizationDomains;
UseAdminSponsoredFamilies = license.UseAdminSponsoredFamilies;
UseDisableSMAdsForUsers = license.UseDisableSMAdsForUsers;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public OrganizationAbility(Organization organization)
UseOrganizationDomains = organization.UseOrganizationDomains;
UseAdminSponsoredFamilies = organization.UseAdminSponsoredFamilies;
UseAutomaticUserConfirmation = organization.UseAutomaticUserConfirmation;
UseDisableSMAdsForUsers = organization.UseDisableSMAdsForUsers;
}

public Guid Id { get; set; }
Expand All @@ -51,4 +52,5 @@ public OrganizationAbility(Organization organization)
public bool UseOrganizationDomains { get; set; }
public bool UseAdminSponsoredFamilies { get; set; }
public bool UseAutomaticUserConfirmation { get; set; }
public bool UseDisableSMAdsForUsers { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ public Organization ToOrganization()
Status = Status,
UseRiskInsights = UseRiskInsights,
UseAdminSponsoredFamilies = UseAdminSponsoredFamilies,
UseDisableSMAdsForUsers = UseDisableSMAdsForUsers,
};
}
}
2 changes: 2 additions & 0 deletions src/Core/AdminConsole/Services/OrganizationFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ public static Organization Create(
UseAdminSponsoredFamilies =
claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseAdminSponsoredFamilies),
UseAutomaticUserConfirmation = claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseAutomaticUserConfirmation),
UseDisableSMAdsForUsers =
claimsPrincipal.GetValue<bool>(OrganizationLicenseConstants.UseDisableSMAdsForUsers),
};

public static Organization Create(
Expand Down
1 change: 1 addition & 0 deletions src/Core/Billing/Licenses/LicenseConstants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +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 static class UserLicenseConstants
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public Task<List<Claim>> GenerateClaims(Organization entity, LicenseContext lice
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()),
};

if (entity.Name is not null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ public OrganizationLicense(Organization org, SubscriptionInfo subscriptionInfo,
public bool UseOrganizationDomains { get; set; }
public bool UseAdminSponsoredFamilies { get; set; }
public bool UseAutomaticUserConfirmation { get; set; }
public bool UseDisableSMAdsForUsers { get; set; }
public string Hash { get; set; }
public string Signature { get; set; }
public string Token { get; set; }
Expand Down Expand Up @@ -228,7 +229,8 @@ public byte[] GetDataBytes(bool forHash = false)
!p.Name.Equals(nameof(UseRiskInsights)) &&
!p.Name.Equals(nameof(UseAdminSponsoredFamilies)) &&
!p.Name.Equals(nameof(UseOrganizationDomains)) &&
!p.Name.Equals(nameof(UseAutomaticUserConfirmation)))
!p.Name.Equals(nameof(UseAutomaticUserConfirmation)) &&
!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}");
Expand Down Expand Up @@ -424,6 +426,7 @@ public bool VerifyData(
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));

return issued <= DateTime.UtcNow &&
expires >= DateTime.UtcNow &&
Expand Down Expand Up @@ -454,7 +457,8 @@ public bool VerifyData(
smServiceAccounts == organization.SmServiceAccounts &&
useAdminSponsoredFamilies == organization.UseAdminSponsoredFamilies &&
useOrganizationDomains == organization.UseOrganizationDomains &&
useAutomaticUserConfirmation == organization.UseAutomaticUserConfirmation;
useAutomaticUserConfirmation == organization.UseAutomaticUserConfirmation &&
useDisableSMAdsForUsers == organization.UseDisableSMAdsForUsers;

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ public async Task<ICollection<OrganizationAbility>> GetManyAbilitiesAsync()
UseRiskInsights = e.UseRiskInsights,
UseOrganizationDomains = e.UseOrganizationDomains,
UseAdminSponsoredFamilies = e.UseAdminSponsoredFamilies,
UseAutomaticUserConfirmation = e.UseAutomaticUserConfirmation
UseAutomaticUserConfirmation = e.UseAutomaticUserConfirmation,
UseDisableSMAdsForUsers = e.UseDisableSMAdsForUsers
}).ToListAsync();
}
}
Expand Down
133 changes: 68 additions & 65 deletions src/Sql/dbo/Stored Procedures/Organization_Create.sql
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ CREATE PROCEDURE [dbo].[Organization_Create]
@UseOrganizationDomains BIT = 0,
@UseAdminSponsoredFamilies BIT = 0,
@SyncSeats BIT = 0,
@UseAutomaticUserConfirmation BIT = 0
@UseAutomaticUserConfirmation BIT = 0,
@UseDisableSMAdsForUsers BIT = 0
AS
BEGIN
SET NOCOUNT ON
Expand Down Expand Up @@ -126,70 +127,72 @@ BEGIN
[UseOrganizationDomains],
[UseAdminSponsoredFamilies],
[SyncSeats],
[UseAutomaticUserConfirmation]
[UseAutomaticUserConfirmation],
[UseDisableSMAdsForUsers]
)
VALUES
(
@Id,
@Identifier,
@Name,
@BusinessName,
@BusinessAddress1,
@BusinessAddress2,
@BusinessAddress3,
@BusinessCountry,
@BusinessTaxNumber,
@BillingEmail,
@Plan,
@PlanType,
@Seats,
@MaxCollections,
@UsePolicies,
@UseSso,
@UseGroups,
@UseDirectory,
@UseEvents,
@UseTotp,
@Use2fa,
@UseApi,
@UseResetPassword,
@SelfHost,
@UsersGetPremium,
@Storage,
@MaxStorageGb,
@Gateway,
@GatewayCustomerId,
@GatewaySubscriptionId,
@ReferenceData,
@Enabled,
@LicenseKey,
@PublicKey,
@PrivateKey,
@TwoFactorProviders,
@ExpirationDate,
@CreationDate,
@RevisionDate,
@OwnersNotifiedOfAutoscaling,
@MaxAutoscaleSeats,
@UseKeyConnector,
@UseScim,
@UseCustomPermissions,
@UseSecretsManager,
@Status,
@UsePasswordManager,
@SmSeats,
@SmServiceAccounts,
@MaxAutoscaleSmSeats,
@MaxAutoscaleSmServiceAccounts,
@SecretsManagerBeta,
@LimitCollectionCreation,
@LimitCollectionDeletion,
@AllowAdminAccessToAllCollectionItems,
@UseRiskInsights,
@LimitItemDeletion,
@UseOrganizationDomains,
@UseAdminSponsoredFamilies,
@SyncSeats,
@UseAutomaticUserConfirmation
);
(
@Id,
@Identifier,
@Name,
@BusinessName,
@BusinessAddress1,
@BusinessAddress2,
@BusinessAddress3,
@BusinessCountry,
@BusinessTaxNumber,
@BillingEmail,
@Plan,
@PlanType,
@Seats,
@MaxCollections,
@UsePolicies,
@UseSso,
@UseGroups,
@UseDirectory,
@UseEvents,
@UseTotp,
@Use2fa,
@UseApi,
@UseResetPassword,
@SelfHost,
@UsersGetPremium,
@Storage,
@MaxStorageGb,
@Gateway,
@GatewayCustomerId,
@GatewaySubscriptionId,
@ReferenceData,
@Enabled,
@LicenseKey,
@PublicKey,
@PrivateKey,
@TwoFactorProviders,
@ExpirationDate,
@CreationDate,
@RevisionDate,
@OwnersNotifiedOfAutoscaling,
@MaxAutoscaleSeats,
@UseKeyConnector,
@UseScim,
@UseCustomPermissions,
@UseSecretsManager,
@Status,
@UsePasswordManager,
@SmSeats,
@SmServiceAccounts,
@MaxAutoscaleSmSeats,
@MaxAutoscaleSmServiceAccounts,
@SecretsManagerBeta,
@LimitCollectionCreation,
@LimitCollectionDeletion,
@AllowAdminAccessToAllCollectionItems,
@UseRiskInsights,
@LimitItemDeletion,
@UseOrganizationDomains,
@UseAdminSponsoredFamilies,
@SyncSeats,
@UseAutomaticUserConfirmation,
@UseDisableSMAdsForUsers
);
END
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ BEGIN
[LimitItemDeletion],
[UseOrganizationDomains],
[UseAdminSponsoredFamilies],
[UseAutomaticUserConfirmation]
[UseAutomaticUserConfirmation],
[UseDisableSMAdsForUsers]
FROM
[dbo].[Organization]
END
6 changes: 4 additions & 2 deletions src/Sql/dbo/Stored Procedures/Organization_Update.sql
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ CREATE PROCEDURE [dbo].[Organization_Update]
@UseOrganizationDomains BIT = 0,
@UseAdminSponsoredFamilies BIT = 0,
@SyncSeats BIT = 0,
@UseAutomaticUserConfirmation BIT = 0
@UseAutomaticUserConfirmation BIT = 0,
@UseDisableSMAdsForUsers BIT = 0
AS
BEGIN
SET NOCOUNT ON
Expand Down Expand Up @@ -126,7 +127,8 @@ BEGIN
[UseOrganizationDomains] = @UseOrganizationDomains,
[UseAdminSponsoredFamilies] = @UseAdminSponsoredFamilies,
[SyncSeats] = @SyncSeats,
[UseAutomaticUserConfirmation] = @UseAutomaticUserConfirmation
[UseAutomaticUserConfirmation] = @UseAutomaticUserConfirmation,
[UseDisableSMAdsForUsers] = @UseDisableSMAdsForUsers
WHERE
[Id] = @Id;
END
1 change: 1 addition & 0 deletions src/Sql/dbo/Tables/Organization.sql
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +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),
CONSTRAINT [PK_Organization] PRIMARY KEY CLUSTERED ([Id] ASC)
);

Expand Down
19 changes: 19 additions & 0 deletions test/Core.Test/AdminConsole/Entities/OrganizationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,23 @@ public void GetTwoFactorProviders_SavedWithName_Success()
var host = Assert.Contains("Host", (IDictionary<string, object>)duo.MetaData);
Assert.Equal("Host_value", host);
}

[Fact]
public void UseDisableSMAdsForUsers_DefaultValue_IsFalse()
{
var organization = new Organization();

Assert.False(organization.UseDisableSMAdsForUsers);
}

[Fact]
public void UseDisableSMAdsForUsers_CanBeSetToTrue()
{
var organization = new Organization
{
UseDisableSMAdsForUsers = true
};

Assert.True(organization.UseDisableSMAdsForUsers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ private static Organization CreateDeterministicOrganization()
LimitCollectionDeletion = true,
AllowAdminAccessToAllCollectionItems = true,
UseOrganizationDomains = true,
UseAdminSponsoredFamilies = false
UseAdminSponsoredFamilies = false,
UseDisableSMAdsForUsers = false
};
}

Expand Down
Loading
Loading