Skip to content
Open
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
19 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
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