* layout new key rotation methods
- add endpoint with request model
- add command with data model
- add repository method
* layout new key rotation methods
- add endpoint with request model
- add command with data model
- add repository method
* formatting
* rename account recovery to reset password
* fix tests
* remove extra endpoint
* rename account recovery to reset password
* fix tests and formatting
* register db calls in command, removing list from user repo
* formatting
* Expose access policy discriminators
* Add people policy model and auth handler
* Add unit tests for authz handler
* Add people policies support in repo
* Add new endpoints and request/response models
* Update tests
* Upgraded old 2019 plans to have the same features as 2020 and beyond
* Removed redundant test and moved additional test cases to GetByOrgIdAsync_SmNoneFreePlans_ReturnsNull
* Fixed issue where feature flag wasn't returning correct plans
* Added teams 2010 plan
* Reverted accidental change to StripePaymentService
* Split feature flag logic and added some explanatory comments
* Removed families changes
* Resolved issue where Teams Starter could not sign up for a new org with SM enabled
* Fixed issue with signing up for SM with Teams Starter
* Resolved issue where an active plan could increase their SM seat count to be greater than the base seats in the password manager plan
* Updated unit test to ensure Seats are higher than SmSeats
* Resolved issue where getting plans would return a value that LINQ previously cached when feature flag was in a different state
* PM-3275 - Add new GetMasterPasswordPolicy endpoint which will allow authenticated clients to get an enabled MP org policy if it exists for the purposes of enforcing those policy requirements when setting a password.
* PM-3275 - AccountsController.cs - PostSetPasswordAsync - (1) Convert UserService.setPasswordAsync into new SetInitialMasterPasswordCommand (2) Refactor SetInitialMasterPasswordCommand to only accept post SSO users who are in the invited state
(3) Add TODOs for more cleanup work and more commands
* PM-3275 - Update AccountsControllerTests.cs to add new SetInitialMasterPasswordCommand
* PM-3275 - UserService.cs - Remove non implemented ChangePasswordAsync method
* PM-3275 - The new SetInitialMasterPasswordCommand leveraged the OrganizationService.cs AcceptUserAsync method so while I was in here I converted the AcceptUserAsync methods into a new AcceptOrgUserCommand.cs and turned the private method which accepted an existing org user public for use in the SetInitialMasterPasswordCommand
* PM-3275 - Dotnet format
* PM-3275 - Test SetInitialMasterPasswordCommand
* Dotnet format
* PM-3275 - In process AcceptOrgUserCommandTests.cs
* PM-3275 - Migrate changes from AC-244 / #3199 over into new AcceptOrgUserCommand
* PM-3275 - AcceptOrgUserCommand.cs - create data protector specifically for this command
* PM-3275 - Add TODO for renaming / removing overloading of methods to improve readability / clarity
* PM-3275 - AcceptOrgUserCommand.cs - refactor AcceptOrgUserAsync by OrgId to retrieve orgUser with _organizationUserRepository.GetByOrganizationAsync which gets a single user instead of a collection
* PM-3275 - AcceptOrgUserCommand.cs - update name in TODO for evaluation later
* PM-3275 / PM-1196 - (1) Slightly refactor SsoEmail2faSessionTokenable to provide public static GetTokenLifeTime() method for testing (2) Add missed tests to SsoEmail2faSessionTokenable in preparation for building tests for new OrgUserInviteTokenable.cs
* PM-3275 / PM-1196 - Removing SsoEmail2faSessionTokenable.cs changes + tests as I've handled that separately in a new PR (#3270) for newly created task PM-3925
* PM-3275 - ExpiringTokenable.cs - add clarifying comments to help distinguish between the Valid property and the TokenIsValid method.
* PM-3275 - Create OrgUserInviteTokenable.cs and add tests in OrgUserInviteTokenableTests.cs
* PM-3275 - OrganizationService.cs - Refactor Org User Invite methods to use new OrgUserInviteTokenable instead of manual creation of a token
* PM-3275 - OrgUserInviteTokenable.cs - clarify backwards compat note
* PM-3275 - AcceptOrgUserCommand.cs - Add TODOs + minor name refactor
* PM-3275 - AcceptOrgUserCommand.cs - replace method overloading with more easily readable names.
* PM-3275 - AcceptOrgUserCommand.cs - Update ValidateOrgUserInviteToken to add new token validation while maintaining backwards compatibility for 1 release.
* dotnet format
* PM-3275 - AcceptOrgUserCommand.cs - Move private method below where it is used
* PM-3275 - ServiceCollectionExtensions.cs - Must register IDataProtectorTokenFactory<OrgUserInviteTokenable> for new tokenable
* PM-3275 - OrgUserInviteTokenable needed access to global settings to set its token lifetime to the _globalSettings.OrganizationInviteExpirationHours value. Creating a factory seemed the most straightforward way to encapsulate the desired creation logic. Unsure if in the correct location in ServiceCollectionExtensions.cs but will figure that out later.
* PM-3275 - In process work of creating AcceptOrgUserCommandTests.cs
* PM-3275 - Remove no longer relevant AcceptOrgUser tests from OrganizationServiceTests.cs
* PM-3275 - Register OrgUserInviteTokenableFactory alongside tokenizer
* PM-3275 - AcceptOrgUserCommandTests.cs - AcceptOrgUserAsync basic test suite completed.
* PM-3275 - AcceptOrgUserCommandTests.cs - tweak test names
* PM-3275 - AcceptOrgUserCommandTests.cs - (1) Remove old tests from OrganizationServiceTests as no longer needed to reference (2) Add summary for SetupCommonAcceptOrgUserMocks (3) Get AcceptOrgUserByToken_OldToken_AcceptsUserAndVerifiesEmail passing
* PM-3275 - Create interface for OrgUserInviteTokenableFactory b/c that's the right thing to do + enables test substitution
* PM-3275 - AcceptOrgUserCommandTests.cs - (1) Start work on AcceptOrgUserByToken_NewToken_AcceptsUserAndVerifiesEmail (2) Create and use SetupCommonAcceptOrgUserByTokenMocks() (3) Create generic FakeDataProtectorTokenFactory for tokenable testing
* PM-3275 - (1) Get AcceptOrgUserByToken_NewToken_AcceptsUserAndVerifiesEmail test passing (2) Move FakeDataProtectorTokenFactory to own file
* PM-3275 - AcceptOrgUserCommandTests.cs - Finish up tests for AcceptOrgUserByTokenAsync
* PM-3275 - Add pseudo section comments
* PM-3275 - Clean up unused params on AcceptOrgUserByToken_EmailMismatch_ThrowsBadRequest test
* PM-3275 - (1) Tests written for AcceptOrgUserByOrgSsoIdAsync (2) Refactor happy path assertions into helper function AssertValidAcceptedOrgUser to reduce code duplication
* PM-3275 - Finish up testing AcceptOrgUserCommandTests.cs by adding tests for AcceptOrgUserByOrgIdAsync
* PM-3275 - Tweaking test naming to ensure consistency.
* PM-3275 - Bugfix - OrgUserInviteTokenableFactory implementation required when declaring singleton service in ServiceCollectionExtensions.cs
* PM-3275 - Resolve failing OrganizationServiceTests.cs
* dotnet format
* PM-3275 - PoliciesController.cs - GetMasterPasswordPolicy bugfix - for orgs without a MP policy, policy comes back as null and we should return notFound in that case.
* PM-3275 - Add PoliciesControllerTests.cs specifically for new GetMasterPasswordPolicy(...) endpoint.
* PM-3275 - dotnet format PoliciesControllerTests.cs
* PM-3275 - PoliciesController.cs - (1) Add tech debt task number (2) Properly flag endpoint as deprecated
* PM-3275 - Add new hasManageResetPasswordPermission property to ProfileResponseModel.cs primarily for sync so that we can condition client side if TDE user obtains elevated permissions
* PM-3275 - Fix AccountsControllerTests.cs
* PM-3275 - OrgUserInviteTokenable.cs - clarify TODO
* PM-3275 - AcceptOrgUserCommand.cs - Refactor token validation to use short circuiting to only run old token validation if new token validation fails.
* PM-3275 - OrgUserInviteTokenable.cs - (1) Add new static methods to centralize validation logic to avoid repetition (2) Add new token validation method so we can avoid having to pass in a full org user (and hitting the db to do so)
* PM-3275 - Realized that the old token validation was used in the PoliciesController.cs (existing user clicks invite link in email and goes to log in) and UserService.cs (user clicks invite link in email and registers for a new acct). Added tech debt item for cleaning up backwards compatibility in future.
* dotnet format
* PM-3275 - (1) AccountsController.cs - Update PostSetPasswordAsync SetPasswordRequestModel to allow null keys for the case where we have a TDE user who obtains elevated permissions - they already have a user public and user encrypted private key saved in the db. (2) AccountsControllerTests.cs - test PostSetPasswordAsync scenarios to ensure changes will work as expected.
* PM-3275 - PR review feedback - (1) set CurrentContext to private (2) Refactor GetProfile to use variables to improve clarity and simplify debugging.
* PM-3275 - SyncController.cs - PR Review Feedback - Set current context as private instead of protected.
* PM-3275 - CurrentContextExtensions.cs - PR Feedback - move parenthesis up from own line.
* PM-3275 - SetInitialMasterPasswordCommandTests.cs - Replace unnecessary variable
* PM-3275 - SetInitialMasterPasswordCommandTests.cs - PR Feedback - Add expected outcome statement to test name
* PM-3275 - Set Initial Password command and tests - PR Feedback changes - (1) Rename orgIdentifier --> OrgSsoIdentifier for clarity (2) Update SetInitialMasterPasswordAsync to not allow null orgSsoId with explicit message saying this vs letting null org trigger invalid organization (3) Add test to cover this new scenario.
* PM-3275 - SetInitialMasterPasswordCommand.cs - Move summary from implementation to interface to better respect standards and the fact that the interface is the more seen piece of code.
* PM-3275 - AcceptOrgUserCommand.cs - Per PR feedback, rename AcceptOrgUserByTokenAsync -> AcceptOrgUserByEmailTokenAsync + replace generic name token with emailToken
* PM-3275 - OrganizationService.cs - Per PR feedback, remove dupe line
* PM-3275 - AcceptOrgUserCommand.cs - Per PR feedback, remove new lines in error messages for consistency.
* PM-3275 - SetInitialMasterPasswordCommand.cs - Per PR feedback, adjust formatting of constructor for improved readability.
* PM-3275 - CurrentContextExtensions.cs - Refactor AnyOrgUserHasManageResetPasswordPermission per PR feedback to remove unnecessary var.
* PM-3275 - AcceptOrgUserCommand.cs - Per PR feedback, remove completed TODO
* PM-3275 - PoliciesController.cs - Per PR feedback, update GetByInvitedUser param to be guid instead of string.
* PM-3275 - OrgUserInviteTokenable.cs - per PR feedback, add tech debt item info.
* PM-3275 - AcceptOrgUserCommand.cs - Per PR feedback, use const purpose from tokenable instead of magic string.
* PM-3275 - Restore non duplicate line to fix tests
* PM-3275 - Per PR feedback, revert all sync controller changes as the ProfileResponseModel.organizations array has org objects which have permissions which have the ManageResetPassword permission. So, I have the information that I need clientside already to determine if the user has the ManageResetPassword in any org.
* PM-3275 - PoliciesControllerTests.cs - Update imports as the PoliciesController was moved under the admin console team's domain.
* PM-3275 - Resolve issues from merge conflict resolutions to get solution building.
* PM-3275 / PM-4633 - PoliciesController.cs - use orgUserId to look up user instead of orgId. Oops.
* Fix user service tests
* Resolve merge conflict
* PM-3659 - WebAuthnController.cs - Passkey Creation - Add RequireSSO login policy validation to prevent users from creating passkeys if require SSO applies to them.
* PM-3659 - per PR feedback, apply new require SSO validation to options call
* PM-3659 - Remove unneeded comment
* PM-3659 - Per PR feedback, add unit tests for new require SSO scenarios on both Post and Options endpoints on the WebAuthnController
* Remove duplicated line
* Remove extra whitespace
* Initial commit
* Fix the failing text
* Fix the unpaid invoice issue
* fix the unpaid invoice issue
* Changes for the threshold amount
* remove the billing threshold
* Add some comments to the old method
* Fixing issues on secret manager test
* import missing package
* Resolve pr comments
* Refactor PreviewUpcomingInvoiceAndPayAsync method
* Resolve some pr comments
* Resolving the comment around constant
* Resolve pr comment
* Add new class
* Resolve pr comments
* Change the prorateThreshold from 5 to 500 dollars
* Fix the failing test
* Fix the server returns a 500 error with the banner
* Upgraded old 2019 plans to have the same features as 2020 and beyond
* Removed redundant test and moved additional test cases to GetByOrgIdAsync_SmNoneFreePlans_ReturnsNull
* Fixed issue where feature flag wasn't returning correct plans
* Resolved issue where getting plans would return a value that LINQ previously cached when feature flag was in a different state
---------
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
* Add Organization_ReadOwnerEmailAddresses SPROC
* Add IOrganizationRepository.GetOwnerEmailAddressesById
* Add SendInvoiceUpcoming overload for multiple emails
* Update InvoiceUpcoming handler to send multiple emails
* Cy's feedback
* Updates from testing
Hardened against missing entity IDs in Stripe events in the StripeEventService. Updated ValidateCloudRegion to not use a refresh/expansion for the customer because the invoice.upcoming event does not have an invoice.Id. Updated the StripeController's handling of invoice.upcoming to not use a refresh/expansion for the subscription because the invoice does not have an ID.
* Fix broken test
* Move sub-subscription classes to a separate files
* Refactor the sub-class to a separate files
* format whitespace
* remove directive that is unnecessary
* Remove the baseSeat class
* Add ability to fetch events by service account
* Extract GetDateRange into ApiHelpers util
* Add dapper implementation
* Add EF repo implementation
* Add authz handler case
* unit + integration tests for controller
* swap to read check
* Adding comments
* Fix integration tests from merge
* Enabled SM events controller for self-hosting
Fix flaky UpdateSubscriptionAsync_ThrowsBadRequestException_WhenOccupiedSeatsExceedNewSeatTotal
test by expressly setting SmSeat value instead of relying on autodata.
This ensures that the new smSeat value is actually different.
* [PM-3779] Added IOrganizationDomainRepository.GetDomainByIdAndOrganizationIdAsync and SQL stored procedure
* [PM-3779] Changed GetOrganizationDomainByIdQuery to also take OrgId as a parameter. Updated existing unit tests and added new. Updated controller to match command changes
* [PM-3779] Removed type from url routes
* [PM-3779] Renamed IGetOrganizationDomainByIdAndOrganizationIdQuery to IGetOrganizationDomainByIdOrganizationIdQuery
* [PM-3779] Renamed GetOrganizationDomainByIdOrganizationIdQueryTests file and added more tests
* [AC-1654] Added IOrganizationConnectionRepository.GetByIdOrganizationIdAsync and modified OrganizationConnectionsController to use it to get a connection matching both Id and OrganizationId
* [AC-1654] Fixed unit tests
* refactor the plan and create new objects
* initial commit
* Add new plan types
* continue the refactoring by adding new plantypes
* changes for plans
* Refactoring continues
* making changes for plan
* Fixing the failing test
* Fixing whitespace
* Fix some in correct values
* Resolve the plan data
* rearranging the plan
* Make the plan more immutable
* Resolve the lint errors
* Fix the failing test
* Add custom plan
* Fix the failing test
* Fix the failing test
* resolve the failing addons after refactoring
* Refactoring
* Merge branch 'master' into ac-1451/refactor-staticstore-plans-and-consuming-logic
* merge from master
* Merge branch 'master' into ac-1451/refactor-staticstore-plans-and-consuming-logic
* format whitespace
* resolve the conflict
* Fix some pr comments
* Fixing some of the pr comments
* fixing some of the pr comments
* Resolve some pr comments
* Resolve pr comments
* Resolves some pr comments
* Resolving some or comments
* Resolve a failing test
* fix the failing test
* Resolving some pr comments
* Fix the failing test
* resolve pr comment
* add a using statement fir a failing test
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* restricting access to disabled orgs
* Unit Test Updates
* Update test/Api.IntegrationTest/SecretsManager/Controllers/AccessPoliciesControllerTests.cs
Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com>
* Covering all test cases
* making organization enabled NOT default
---------
Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com>
* Block MSPs from creating orgs with SM
* Block MSPs from adding SM to a managed org
* Prevent manually adding SM to an MSP-managed org
* Revert "Prevent manually adding SM to an MSP-managed org"
This change is no longer required
This reverts commit 51b086243b.
* Block provider from adding org with SM
* Update error message when adding existing org with SM to provider
* Update check to match client
* Revert "Update check to match client"
This reverts commit f195c1c1f6.
* Upgraded Braintree to 5.19.0
* Force evaluate of nuget packages
---------
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
* PM-3925 - (1) Slightly refactor SsoEmail2faSessionTokenable to provide public static GetTokenLifeTime() method for testing (2) Add missed tests to SsoEmail2faSessionTokenable
* PM-3925 - Take into account PR feedback
* [AC-244] Saving User.EmailVerified = true when accepting organization invite
* [AC-244] Added unit tests
* [AC-244] Added the parameter 'verifyEmail' to OrganizationService.AcceptUserAsync
* [AC-244] Refactored unit tests
* [AC-244] Fixed failing unit tests
* [AC-244] Marking email as verified only in the endpoint for accepting an invite with a token
* Update src/Core/Services/IOrganizationService.cs
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* [AC-244] Marking email as verified only if it was not
* [AC-244] Updated unit test to have the user's email unverified at the start
* [AC-244] dotnet format
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Vincent Salucci <vincesalucci21@gmail.com>
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem (#3037)
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem
- Add a helper method to determine the appropriate addon type based on the subscription items StripeId
* [AC-1423] Add helper to StaticStore.cs to find a Plan by StripePlanId
* [AC-1423] Use the helper method to set SubscriptionInfo.BitwardenProduct
* Add SecretsManagerBilling feature flag to Constants
* [AC 1409] Secrets Manager Subscription Stripe Integration (#3019)
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Changes for secret manager signup and upgradeplan
* Changes for secrets manager signup and upgrade
* refactoring the code
* Format whitespace
* remove unnecessary using directive
* Resolve the PR comment on Subscription creation
* Resolve PR comment
* Add password manager to the error message
* Add UseSecretsManager to the event log
* Resolve PR comment on plan validation
* Resolving pr comments for service account count
* Resolving pr comments for service account count
* Resolve the pr comments
* Remove the store procedure that is no-longer needed
* Rename a property properly
* Resolving the PR comment
* Resolve PR comments
* Resolving PR comments
* Resolving the Pr comments
* Resolving some PR comments
* Resolving the PR comments
* Resolving the build identity build
* Add additional Validation
* Resolve the Lint issues
* remove unnecessary using directive
* Remove the white spaces
* Adding unit test for the stripe payment
* Remove the incomplete test
* Fixing the failing test
* Fix the failing test
* Fix the fail test on organization service
* Fix the failing unit test
* Fix the whitespace format
* Fix the failing test
* Fix the whitespace format
* resolve pr comments
* Fix the lint message
* Resolve the PR comments
* resolve pr comments
* Resolve pr comments
* Resolve the pr comments
* remove unused code
* Added for sm validation test
* Fix the whitespace format issues
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* SM-802: Add SecretsManagerBetaColumn SQL migration and Org table update
* SM-802: Run EF Migrations for SecretsManagerBeta
* SM-802: Update the two Org procs and View, and move data migration to a separate file
* SM-802: Add missing comma to Organization_Create
* [AC-1418] Add missing SecretsManagerPlan property to OrganizationResponseModel (#3055)
* SM-802: Remove extra GO statement from data migration script
* [AC 1460] Update Stripe Configuration (#3070)
* change the stripeseat id
* change service accountId to align with new product
* make all the Id name for consistent
* SM-802: Add SecretsManagerBeta to OrganizationResponseModel
* SM-802: Move SecretsManagerBeta from OrganizationResponseModel to OrganizationSubscriptionResponseModel. Use sp_refreshview instead of sp_refreshsqlmodule in the migration script.
* SM-802: Remove OrganizationUserOrganizationDetailsView.sql changes
* [AC 1410] Secrets Manager subscription adjustment back-end changes (#3036)
* Create UpgradeSecretsManagerSubscription command
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* SM-802: Remove SecretsManagerBetaColumn migration
* SM-802: Add SecretsManagerBetaColumn migration
* SM-802: Remove OrganizationUserOrganizationDetailsView update
* [AC-1495] Extract UpgradePlanAsync into a command (#3081)
* This is a pure lift & shift with no refactors
* Only register subscription commands in Api
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
* [AC-1503] Fix Stripe integration on organization upgrade (#3084)
* Fix SM parameters not being passed to Stripe
* Fix flaky test
* Fix error message
* [AC-1504] Allow SM max autoscale limits to be disabled (#3085)
* [AC-1488] Changed SM Signup and Upgrade paths to set SmServiceAccounts to include the plan BaseServiceAccount (#3086)
* [AC-1510] Enable access to Secrets Manager to Organization owner for new Subscription (#3089)
* Revert changes to ReferenceEvent code (#3091)
* Revert changes to ReferenceEvent code
This will be done in AC-1481
* Revert ReferenceEventType change
* Move NoopServiceAccountRepository to SM and update namespace
* [AC-1462] Add secrets manager service accounts autoscaling commands (#3059)
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Changes for secret manager signup and upgradeplan
* Changes for secrets manager signup and upgrade
* refactoring the code
* Format whitespace
* remove unnecessary using directive
* Changes for subscription Update
* Update the seatAdjustment and update
* Resolve the PR comment on Subscription creation
* Resolve PR comment
* Add password manager to the error message
* Add UseSecretsManager to the event log
* Resolve PR comment on plan validation
* Resolving pr comments for service account count
* Resolving pr comments for service account count
* Resolve the pr comments
* Remove the store procedure that is no-longer needed
* Add a new class for update subscription
* Modify the Update subscription for sm
* Add the missing property
* Rename a property properly
* Resolving the PR comment
* Resolve PR comments
* Resolving PR comments
* Resolving the Pr comments
* Resolving some PR comments
* Resolving the PR comments
* Resolving the build identity build
* Add additional Validation
* Resolve the Lint issues
* remove unnecessary using directive
* Remove the white spaces
* Adding unit test for the stripe payment
* Remove the incomplete test
* Fixing the failing test
* Fix the failing test
* Fix the fail test on organization service
* Fix the failing unit test
* Fix the whitespace format
* Fix the failing test
* Fix the whitespace format
* resolve pr comments
* Fix the lint message
* refactor the code
* Fix the failing Test
* adding a new endpoint
* Remove the unwanted code
* Changes for Command and Queries
* changes for command and queries
* Fix the Lint issues
* Fix imports ordering
* Resolve the PR comments
* resolve pr comments
* Resolve pr comments
* Fix the failing test on adjustSeatscommandtests
* Fix the failing test
* Fix the whitespaces
* resolve failing test
* rename a property
* Resolve the pr comments
* refactoring the existing implementation
* Resolve the whitespaces format issue
* Resolve the pr comments
* [AC-1462] Created IAvailableServiceAccountsQuery along its implementation and with unit tests
* [AC-1462] Renamed ICountNewServiceAccountSlotsRequiredQuery
* [AC-1462] Added IAutoscaleServiceAccountsCommand and implementation
* Add more unit testing
* fix the whitespaces issues
* [AC-1462] Added unit tests for AutoscaleServiceAccountsCommand
* Add more unit test
* Remove unnecessary directive
* Resolve some pr comments
* Adding more unit test
* adding more test
* add more test
* Resolving some pr comments
* Resolving some pr comments
* Resolving some pr comments
* resolve some pr comments
* Resolving pr comments
* remove whitespaces
* remove white spaces
* Resolving pr comments
* resolving pr comments and fixing white spaces
* resolving the lint error
* Run dotnet format
* resolving the pr comments
* Add a missing properties to plan response model
* Add the email sender for sm seat and service acct
* Add the email sender for sm seat and service acct
* Fix the failing test after email sender changes
* Add staticstorewrapper to properly test the plans
* Add more test and validate the existing test
* Fix the white spaces issues
* Remove staticstorewrapper and fix the test
* fix a null issue on autoscaling
* Suggestion: do all seat calculations in update model
* Resolve some pr comments
* resolving some pr comments
* Return value is unnecessary
* Resolve the failing test
* resolve pr comments
* Resolve the pr comments
* Resolving admin api failure and adding more test
* Resolve the issue failing admin project
* Fixing the failed test
* Clarify naming and add comments
* Clarify naming conventions
* Dotnet format
* Fix the failing dependency
* remove similar test
* [AC-1462] Rewrote AutoscaleServiceAccountsCommand to use UpdateSecretsManagerSubscriptionCommand which has the same logic
* [AC-1462] Deleted IAutoscaleServiceAccountsCommand as the logic will be moved to UpdateSecretsManagerSubscriptionCommand
* [AC-1462] Created method AdjustSecretsManagerServiceAccountsAsync
* [AC-1462] Changed SecretsManagerSubscriptionUpdate to only be set by its constructor
* [AC-1462] Added check to CountNewServiceAccountSlotsRequiredQuery and revised unit tests
* [AC-1462] Revised logic for CountNewServiceAccountSlotsRequiredQuery and fixed unit tests
* [AC-1462] Changed SecretsManagerSubscriptionUpdate to receive Organization as a parameter and fixed the unit tests
* [AC-1462] Renamed IUpdateSecretsManagerSubscriptionCommand methods UpdateSubscriptionAsync and AdjustServiceAccountsAsync
* [AC-1462] Rewrote unit test UpdateSubscriptionAsync_ValidInput_Passes
* [AC-1462] Registered CountNewServiceAccountSlotsRequiredQuery for dependency injection
* [AC-1462] Added parameter names to SecretsManagerSubscriptionUpdateRequestModel
* [AC-1462] Updated SecretsManagerSubscriptionUpdate logic to handle null parameters. Revised the unit tests to test null values
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Add UsePasswordManager to sync data (#3114)
* [AC-1522] Fix service account check on upgrading (#3111)
* Create new query and add to save orgUser flow
* Add tests
* Resolved the checkmarx issues
* [AC-1521] Address checkmarx security feedback (#3124)
* Reinstate target attribute but add noopener noreferrer
* Make same updates to service account adjustment code
* Wire up to BulkEnableSecretsManager, delete separate command
* Register new query
* WIP: autoscaling in invite user flow
* Resolve dependency issues
* circular dependency between OrganizationService and
UpdateSecretsManagerSubscriptionCommand - fixed by temporarily
duplicating ReplaceAndUpdateCache
* Unresolvable dependencies in other services - fixed by temporarily
registering noop services and moving around some DI code
All should be resolved in PM-1880
* fix using refs
* Update date on migration script
* Remove unused constant
* Revert "Remove unused constant"
This reverts commit 4fcb9da4d6.
This is required to make feature flags work on the client
* Fix tests
* Refactor: fix the update object and use it to adjust values
* [PM-3177] Created OrganizationUserCommand and UpdateOrganizationUserGroupsCommand
* [PM-3177] Added unit tests for UpdateOrganizationUserGroupsCommand
* [PM-3177] Replaced IOrganizationService.UpdateUserGroupsAsync with IUpdateOrganizationUserGroupsCommand
* [AC-1458] Add Endpoint And Service Logic for secrets manager to existing subscription (#3087)
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* Handle autoscaling-specific errors
* Revert name change to method
* Fix typo
* Exclude beta users from seat limits
* Fix inaccurate comment
* Update nullable properties to use .Value accessor
* Fix tests
* Add missing awaits
* Move early return up
* Revert based on currentOrganization
* Remove duplicate migrations from incorrectly resolved merge
* Add tests
* [PM-3177] Remove Admin project referencing Commercial.Infrastructure.EntityFramework
* [PM-3177] Removed abstract class OrganizationUserCommand. Added ValidateOrganizationUserUpdatePermissions to IOrganizationService
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Colton Hurst <colton@coltonhurst.com>
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Conner Turnbull <cturnbull@bitwarden.com>
* Add ProjectLimitQuery
* Add query to DI
* Add unit tests
* Add query to controller
* Add controller unit tests
* add integration tests
* rename query and variables
* More renaming
* Add support CanReadSecret authorization
* Extract base response model for secret
* Add support for SA bulk fetching event logging
* secret repository bug fix
* Add endpoint and request for bulk fetching secrets
* Swap to original reference event
* Add unit tests
* Add integration tests
* Add unit tests for authz handler
* update authz handler tests
---------
* Remove UpdateSecretsManagerSubscriptionCommand.AdjustServiceAccounts interface
* Rewrite tests and use autofixture customizations
* Reduce method nesting in the command, simplify parameters
* Fix capitalization and wording of error messages
* Add checks for existing SM beta enrolment etc
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem (#3037)
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem
- Add a helper method to determine the appropriate addon type based on the subscription items StripeId
* [AC-1423] Add helper to StaticStore.cs to find a Plan by StripePlanId
* [AC-1423] Use the helper method to set SubscriptionInfo.BitwardenProduct
* Add SecretsManagerBilling feature flag to Constants
* [AC 1409] Secrets Manager Subscription Stripe Integration (#3019)
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Changes for secret manager signup and upgradeplan
* Changes for secrets manager signup and upgrade
* refactoring the code
* Format whitespace
* remove unnecessary using directive
* Resolve the PR comment on Subscription creation
* Resolve PR comment
* Add password manager to the error message
* Add UseSecretsManager to the event log
* Resolve PR comment on plan validation
* Resolving pr comments for service account count
* Resolving pr comments for service account count
* Resolve the pr comments
* Remove the store procedure that is no-longer needed
* Rename a property properly
* Resolving the PR comment
* Resolve PR comments
* Resolving PR comments
* Resolving the Pr comments
* Resolving some PR comments
* Resolving the PR comments
* Resolving the build identity build
* Add additional Validation
* Resolve the Lint issues
* remove unnecessary using directive
* Remove the white spaces
* Adding unit test for the stripe payment
* Remove the incomplete test
* Fixing the failing test
* Fix the failing test
* Fix the fail test on organization service
* Fix the failing unit test
* Fix the whitespace format
* Fix the failing test
* Fix the whitespace format
* resolve pr comments
* Fix the lint message
* Resolve the PR comments
* resolve pr comments
* Resolve pr comments
* Resolve the pr comments
* remove unused code
* Added for sm validation test
* Fix the whitespace format issues
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* SM-802: Add SecretsManagerBetaColumn SQL migration and Org table update
* SM-802: Run EF Migrations for SecretsManagerBeta
* SM-802: Update the two Org procs and View, and move data migration to a separate file
* SM-802: Add missing comma to Organization_Create
* [AC-1418] Add missing SecretsManagerPlan property to OrganizationResponseModel (#3055)
* SM-802: Remove extra GO statement from data migration script
* [AC 1460] Update Stripe Configuration (#3070)
* change the stripeseat id
* change service accountId to align with new product
* make all the Id name for consistent
* SM-802: Add SecretsManagerBeta to OrganizationResponseModel
* SM-802: Move SecretsManagerBeta from OrganizationResponseModel to OrganizationSubscriptionResponseModel. Use sp_refreshview instead of sp_refreshsqlmodule in the migration script.
* SM-802: Remove OrganizationUserOrganizationDetailsView.sql changes
* [AC 1410] Secrets Manager subscription adjustment back-end changes (#3036)
* Create UpgradeSecretsManagerSubscription command
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* SM-802: Remove SecretsManagerBetaColumn migration
* SM-802: Add SecretsManagerBetaColumn migration
* SM-802: Remove OrganizationUserOrganizationDetailsView update
* [AC-1495] Extract UpgradePlanAsync into a command (#3081)
* This is a pure lift & shift with no refactors
* Only register subscription commands in Api
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
* [AC-1503] Fix Stripe integration on organization upgrade (#3084)
* Fix SM parameters not being passed to Stripe
* Fix flaky test
* Fix error message
* [AC-1504] Allow SM max autoscale limits to be disabled (#3085)
* [AC-1488] Changed SM Signup and Upgrade paths to set SmServiceAccounts to include the plan BaseServiceAccount (#3086)
* [AC-1510] Enable access to Secrets Manager to Organization owner for new Subscription (#3089)
* Revert changes to ReferenceEvent code (#3091)
* Revert changes to ReferenceEvent code
This will be done in AC-1481
* Revert ReferenceEventType change
* Move NoopServiceAccountRepository to SM and update namespace
* [AC-1462] Add secrets manager service accounts autoscaling commands (#3059)
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Changes for secret manager signup and upgradeplan
* Changes for secrets manager signup and upgrade
* refactoring the code
* Format whitespace
* remove unnecessary using directive
* Changes for subscription Update
* Update the seatAdjustment and update
* Resolve the PR comment on Subscription creation
* Resolve PR comment
* Add password manager to the error message
* Add UseSecretsManager to the event log
* Resolve PR comment on plan validation
* Resolving pr comments for service account count
* Resolving pr comments for service account count
* Resolve the pr comments
* Remove the store procedure that is no-longer needed
* Add a new class for update subscription
* Modify the Update subscription for sm
* Add the missing property
* Rename a property properly
* Resolving the PR comment
* Resolve PR comments
* Resolving PR comments
* Resolving the Pr comments
* Resolving some PR comments
* Resolving the PR comments
* Resolving the build identity build
* Add additional Validation
* Resolve the Lint issues
* remove unnecessary using directive
* Remove the white spaces
* Adding unit test for the stripe payment
* Remove the incomplete test
* Fixing the failing test
* Fix the failing test
* Fix the fail test on organization service
* Fix the failing unit test
* Fix the whitespace format
* Fix the failing test
* Fix the whitespace format
* resolve pr comments
* Fix the lint message
* refactor the code
* Fix the failing Test
* adding a new endpoint
* Remove the unwanted code
* Changes for Command and Queries
* changes for command and queries
* Fix the Lint issues
* Fix imports ordering
* Resolve the PR comments
* resolve pr comments
* Resolve pr comments
* Fix the failing test on adjustSeatscommandtests
* Fix the failing test
* Fix the whitespaces
* resolve failing test
* rename a property
* Resolve the pr comments
* refactoring the existing implementation
* Resolve the whitespaces format issue
* Resolve the pr comments
* [AC-1462] Created IAvailableServiceAccountsQuery along its implementation and with unit tests
* [AC-1462] Renamed ICountNewServiceAccountSlotsRequiredQuery
* [AC-1462] Added IAutoscaleServiceAccountsCommand and implementation
* Add more unit testing
* fix the whitespaces issues
* [AC-1462] Added unit tests for AutoscaleServiceAccountsCommand
* Add more unit test
* Remove unnecessary directive
* Resolve some pr comments
* Adding more unit test
* adding more test
* add more test
* Resolving some pr comments
* Resolving some pr comments
* Resolving some pr comments
* resolve some pr comments
* Resolving pr comments
* remove whitespaces
* remove white spaces
* Resolving pr comments
* resolving pr comments and fixing white spaces
* resolving the lint error
* Run dotnet format
* resolving the pr comments
* Add a missing properties to plan response model
* Add the email sender for sm seat and service acct
* Add the email sender for sm seat and service acct
* Fix the failing test after email sender changes
* Add staticstorewrapper to properly test the plans
* Add more test and validate the existing test
* Fix the white spaces issues
* Remove staticstorewrapper and fix the test
* fix a null issue on autoscaling
* Suggestion: do all seat calculations in update model
* Resolve some pr comments
* resolving some pr comments
* Return value is unnecessary
* Resolve the failing test
* resolve pr comments
* Resolve the pr comments
* Resolving admin api failure and adding more test
* Resolve the issue failing admin project
* Fixing the failed test
* Clarify naming and add comments
* Clarify naming conventions
* Dotnet format
* Fix the failing dependency
* remove similar test
* [AC-1462] Rewrote AutoscaleServiceAccountsCommand to use UpdateSecretsManagerSubscriptionCommand which has the same logic
* [AC-1462] Deleted IAutoscaleServiceAccountsCommand as the logic will be moved to UpdateSecretsManagerSubscriptionCommand
* [AC-1462] Created method AdjustSecretsManagerServiceAccountsAsync
* [AC-1462] Changed SecretsManagerSubscriptionUpdate to only be set by its constructor
* [AC-1462] Added check to CountNewServiceAccountSlotsRequiredQuery and revised unit tests
* [AC-1462] Revised logic for CountNewServiceAccountSlotsRequiredQuery and fixed unit tests
* [AC-1462] Changed SecretsManagerSubscriptionUpdate to receive Organization as a parameter and fixed the unit tests
* [AC-1462] Renamed IUpdateSecretsManagerSubscriptionCommand methods UpdateSubscriptionAsync and AdjustServiceAccountsAsync
* [AC-1462] Rewrote unit test UpdateSubscriptionAsync_ValidInput_Passes
* [AC-1462] Registered CountNewServiceAccountSlotsRequiredQuery for dependency injection
* [AC-1462] Added parameter names to SecretsManagerSubscriptionUpdateRequestModel
* [AC-1462] Updated SecretsManagerSubscriptionUpdate logic to handle null parameters. Revised the unit tests to test null values
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Add UsePasswordManager to sync data (#3114)
* [AC-1522] Fix service account check on upgrading (#3111)
* Resolved the checkmarx issues
* [AC-1521] Address checkmarx security feedback (#3124)
* Reinstate target attribute but add noopener noreferrer
* Update date on migration script
* Remove unused constant
* Revert "Remove unused constant"
This reverts commit 4fcb9da4d6.
This is required to make feature flags work on the client
* [AC-1458] Add Endpoint And Service Logic for secrets manager to existing subscription (#3087)
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* Remove duplicate migrations from incorrectly resolved merge
* [AC-1468] Modified CountNewServiceAccountSlotsRequiredQuery to return zero if organization has SecretsManagerBeta == true (#3112)
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [Ac 1563] Unable to load billing and subscription related pages for non-enterprise organizations (#3138)
* Resolve the failing family plan
* resolve issues
* Resolve code related pr comments
* Resolve test related comments
* Resolving or comments
* [SM-809] Add service account slot limit check (#3093)
* Add service account slot limit check
* Add query to DI
* [AC-1462] Registered CountNewServiceAccountSlotsRequiredQuery for dependency injection
* remove duplicate DI entry
* Update unit tests
* Remove comment
* Code review updates
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Rui Tome <rtome@bitwarden.com>
* [AC-1461] Secrets manager seat autoscaling (#3121)
* Add autoscaling code to invite user, save user, and bulk enable SM
flows
* Add tests
* Delete command for BulkEnableSecretsManager
* circular dependency between OrganizationService and
UpdateSecretsManagerSubscriptionCommand - fixed by temporarily
duplicating ReplaceAndUpdateCache
* Unresolvable dependencies in other services - fixed by temporarily
registering noop services and moving around some DI code
All should be resolved in PM-1880
* Refactor: improve the update object and use it to adjust values,
remove excess interfaces on the command
* Handle autoscaling-specific errors
---------
Co-authored-by: Rui Tomé <108268980+r-tome@users.noreply.github.com>
* Move bitwarden_license include reference into conditional block
* [AC 1526]Show current SM seat and service account usage in Bitwarden Portal (#3142)
* changes base on the tickets request
* Code refactoring
* Removed the unwanted method
* Add implementation to the new method
* Resolve some pr comments
* resolve lint issue
* resolve pr comments
* add the new noop files
* Add new noop file and resolve some pr comments
* resolve pr comments
* removed unused method
* Fix prefill when changing plans or starting trials
* [AC-1575] Don't overwrite existing org information when changing plans
* [AC-1577] Prefill SM configuration section when starting trial
* Clarify property names
* Set SM subscription based on current usage
* Fix label for Service Accounts field
* Prevent subscribing to SM on an invalid plan
* Edit comment
* Set minimum seat count for SM
* Don't use hardcoded plan values
* Use plans directly in JS
* Refactor to getPlan function
* Remove unneeded namespace refs
* Add GetPlansHelper to provide some typesafety
* Use planType from form instead of model
* Add @model specification
* Add null coalescing
* [AC-108] Updated PolicyService to use IApplicationCacheService to determine if an organization uses policies
(cherry picked from commit b98b107c4b)
* [AC-108] Removed checking if Organization is enabled
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Colton Hurst <colton@coltonhurst.com>
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Conner Turnbull <cturnbull@bitwarden.com>
Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com>
* [PM-1203] feat: allow verification for all passwordless accounts (#3038)
* [PM-1033] Org invite user creation flow 1 (#3028)
* [PM-1033] feat: remove user verification from password enrollment
* [PM-1033] feat: auto accept invitation when enrolling into password reset
* [PM-1033] fix: controller tests
* [PM-1033] refactor: `UpdateUserResetPasswordEnrollmentCommand`
* [PM-1033] refactor(wip): make `AcceptUserCommand`
* Revert "[PM-1033] refactor(wip): make `AcceptUserCommand`"
This reverts commit dc1319e7fa.
* Revert "[PM-1033] refactor: `UpdateUserResetPasswordEnrollmentCommand`"
This reverts commit 43df689c7f.
* [PM-1033] refactor: move invite accept to controller
This avoids creating yet another method that depends on having `IUserService` passed in as a parameter
* [PM-1033] fix: add missing changes
* [PM-1381] Add Trusted Device Keys to Auth Response (#3066)
* Return Keys for Trusted Device
- Check whether the current logging in device is trusted
- Return their keys on successful login
* Formatting
* Address PR Feedback
* Add Remarks Comment
* [PM-1338] `AuthRequest` Event Logs (#3046)
* Update AuthRequestController
- Only allow AdminApproval Requests to be created from authed endpoint
- Add endpoint that has authentication to be able to create admin approval
* Add PasswordlessAuthSettings
- Add settings for customizing expiration times
* Add new EventTypes
* Add Logic for AdminApproval Type
- Add logic for validating AdminApproval expiration
- Add event logging for Approval/Disapproval of AdminApproval
- Add logic for creating AdminApproval types
* Add Test Helpers
- Change BitAutoData to allow you to use string representations of common types.
* Add/Update AuthRequestService Tests
* Run Formatting
* Switch to 7 Days
* Add Test Covering ResponseDate Being Set
* Address PR Feedback
- Create helper for checking if date is expired
- Move validation logic into smaller methods
* Switch to User Event Type
- Make RequestDeviceApproval user type
- User types will log for each org user is in
* [PM-2998] Move Approving Device Check (#3101)
* Move Check for Approving Devices
- Exclude currently logging in device
- Remove old way of checking
- Add tests asserting behavior
* Update DeviceType list
* Update Naming & Address PR Feedback
* Fix Tests
* Address PR Feedback
* Formatting
* Now Fully Update Naming?
* Feature/auth/pm 2759/add can reset password to user decryption options (#3113)
* PM-2759 - BaseRequestValidator.cs - CreateUserDecryptionOptionsAsync - Add new hasManageResetPasswordPermission for post SSO redirect logic required on client.
* PM-2759 - Update IdentityServerSsoTests.cs to all pass based on the addition of HasManageResetPasswordPermission to TrustedDeviceUserDecryptionOption
* IdentityServerSsoTests.cs - fix typo in test name: LoggingApproval --> LoginApproval
* PM1259 - Add test case for verifying that TrustedDeviceOption.hasManageResetPasswordPermission is set properly based on user permission
* dotnet format run
* Feature/auth/pm 2759/add can reset password to user decryption options fix jit users (#3120)
* PM-2759 - IdentityServer - CreateUserDecryptionOptionsAsync - hasManageResetPasswordPermission set logic was broken for JIT provisioned users as I assumed we would always have a list of at least 1 org during the SSO process. Added TODO for future test addition but getting this out there now as QA is blocked by being unable to create JIT provisioned users.
* dotnet format
* Tiny tweak
* [PM-1339] Allow Rotating Device Keys (#3096)
* Allow Rotation of Trusted Device Keys
- Add endpoint for getting keys relating to rotation
- Add endpoint for rotating your current device
- In the same endpoint allow a list of other devices to rotate
* Formatting
* Use Extension Method
* Add Tests from PR
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
---------
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
* Check the user directly if they have the ResetPasswordKey (#3153)
* PM-3327 - UpdateKeyAsync must exempt the currently calling device from the logout notification in order to prevent prematurely logging the user out before the client side key rotation process can complete. The calling device will log itself out once it is done. (#3170)
* Allow OTP Requests When Users Are On TDE (#3184)
* [PM-3356][PM-3292] Allow OTP For All (#3188)
* Allow OTP For All
- On a trusted device isn't a good check because a user might be using a trusted device locally but not trusted it long term
- The logic wasn't working for KC users anyways
* Remove Old Comment
* [AC-1601] Added RequireSso policy as a dependency of TDE (#3209)
* Added RequireSso policy as a dependency of TDE.
* Added test for RequireSso for TDE.
* Added save.
* Fixed policy name.
---------
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: Vincent Salucci <vincesalucci21@gmail.com>
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
* Rewrite Icon fetching
* Move validation to IconUri, Uri, or UriBuilder
* `dotnet format` 🤖
* PR suggestions
* Add not null compiler hint
* Add twitter to test case
* Move Uri manipulation to UriService
* Implement MockedHttpClient
Presents better, fluent handling of message matching and response
building.
* Add redirect handling tests
* Add testing to models
* More aggressively dispose content in icon link
* Format 🤖
* Update icon lockfile
* Convert to cloned stream for HttpResponseBuilder
Content was being disposed when HttResponseMessage was being disposed.
This avoids losing our reference to our content and allows multiple
usages of the same `MockedHttpMessageResponse`
* Move services to extension
Extension is shared by testing and allows access to services from
our service tests
* Remove unused `using`
* Prefer awaiting asyncs for better exception handling
* `dotnet format` 🤖
* Await async
* Update tests to use test TLD and ip ranges
* Remove unused interfaces
* Make assignments static when possible
* Prefer invariant comparer to downcasing
* Prefer injecting interface services to implementations
* Prefer comparer set in HashSet initialization
* Allow SVG icons
* Filter out icons with unknown formats
* Seek to beginning of MemoryStream after writing it
* More appropriate to not return icon if it's invalid
* Add svg icon test
* [AC-1443] Changed CurrentContext.ViewAllCollections to only check if the user can edit or delete any collection
* [AC-1443] Renamed ICollectionService.GetOrganizationCollections to GetOrganizationCollectionsAsync
* [AC-1443] Changed CollectionService.GetOrganizationCollectionsAsync to first check CurrentContext.ViewAssignedCollections instead Added unit tests
* [AC-1443] Added new unit test to check for Exception when user does not have permission
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem (#3037)
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem
- Add a helper method to determine the appropriate addon type based on the subscription items StripeId
* [AC-1423] Add helper to StaticStore.cs to find a Plan by StripePlanId
* [AC-1423] Use the helper method to set SubscriptionInfo.BitwardenProduct
* Add SecretsManagerBilling feature flag to Constants
* [AC 1409] Secrets Manager Subscription Stripe Integration (#3019)
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Changes for secret manager signup and upgradeplan
* Changes for secrets manager signup and upgrade
* refactoring the code
* Format whitespace
* remove unnecessary using directive
* Resolve the PR comment on Subscription creation
* Resolve PR comment
* Add password manager to the error message
* Add UseSecretsManager to the event log
* Resolve PR comment on plan validation
* Resolving pr comments for service account count
* Resolving pr comments for service account count
* Resolve the pr comments
* Remove the store procedure that is no-longer needed
* Rename a property properly
* Resolving the PR comment
* Resolve PR comments
* Resolving PR comments
* Resolving the Pr comments
* Resolving some PR comments
* Resolving the PR comments
* Resolving the build identity build
* Add additional Validation
* Resolve the Lint issues
* remove unnecessary using directive
* Remove the white spaces
* Adding unit test for the stripe payment
* Remove the incomplete test
* Fixing the failing test
* Fix the failing test
* Fix the fail test on organization service
* Fix the failing unit test
* Fix the whitespace format
* Fix the failing test
* Fix the whitespace format
* resolve pr comments
* Fix the lint message
* Resolve the PR comments
* resolve pr comments
* Resolve pr comments
* Resolve the pr comments
* remove unused code
* Added for sm validation test
* Fix the whitespace format issues
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* SM-802: Add SecretsManagerBetaColumn SQL migration and Org table update
* SM-802: Run EF Migrations for SecretsManagerBeta
* SM-802: Update the two Org procs and View, and move data migration to a separate file
* SM-802: Add missing comma to Organization_Create
* [AC-1418] Add missing SecretsManagerPlan property to OrganizationResponseModel (#3055)
* SM-802: Remove extra GO statement from data migration script
* [AC 1460] Update Stripe Configuration (#3070)
* change the stripeseat id
* change service accountId to align with new product
* make all the Id name for consistent
* SM-802: Add SecretsManagerBeta to OrganizationResponseModel
* SM-802: Move SecretsManagerBeta from OrganizationResponseModel to OrganizationSubscriptionResponseModel. Use sp_refreshview instead of sp_refreshsqlmodule in the migration script.
* SM-802: Remove OrganizationUserOrganizationDetailsView.sql changes
* [AC 1410] Secrets Manager subscription adjustment back-end changes (#3036)
* Create UpgradeSecretsManagerSubscription command
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* SM-802: Remove SecretsManagerBetaColumn migration
* SM-802: Add SecretsManagerBetaColumn migration
* SM-802: Remove OrganizationUserOrganizationDetailsView update
* [AC-1495] Extract UpgradePlanAsync into a command (#3081)
* This is a pure lift & shift with no refactors
* Only register subscription commands in Api
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
* [AC-1503] Fix Stripe integration on organization upgrade (#3084)
* Fix SM parameters not being passed to Stripe
* Fix flaky test
* Fix error message
* [AC-1504] Allow SM max autoscale limits to be disabled (#3085)
* [AC-1488] Changed SM Signup and Upgrade paths to set SmServiceAccounts to include the plan BaseServiceAccount (#3086)
* [AC-1510] Enable access to Secrets Manager to Organization owner for new Subscription (#3089)
* Revert changes to ReferenceEvent code (#3091)
* Revert changes to ReferenceEvent code
This will be done in AC-1481
* Revert ReferenceEventType change
* Move NoopServiceAccountRepository to SM and update namespace
* [AC-1462] Add secrets manager service accounts autoscaling commands (#3059)
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Changes for secret manager signup and upgradeplan
* Changes for secrets manager signup and upgrade
* refactoring the code
* Format whitespace
* remove unnecessary using directive
* Changes for subscription Update
* Update the seatAdjustment and update
* Resolve the PR comment on Subscription creation
* Resolve PR comment
* Add password manager to the error message
* Add UseSecretsManager to the event log
* Resolve PR comment on plan validation
* Resolving pr comments for service account count
* Resolving pr comments for service account count
* Resolve the pr comments
* Remove the store procedure that is no-longer needed
* Add a new class for update subscription
* Modify the Update subscription for sm
* Add the missing property
* Rename a property properly
* Resolving the PR comment
* Resolve PR comments
* Resolving PR comments
* Resolving the Pr comments
* Resolving some PR comments
* Resolving the PR comments
* Resolving the build identity build
* Add additional Validation
* Resolve the Lint issues
* remove unnecessary using directive
* Remove the white spaces
* Adding unit test for the stripe payment
* Remove the incomplete test
* Fixing the failing test
* Fix the failing test
* Fix the fail test on organization service
* Fix the failing unit test
* Fix the whitespace format
* Fix the failing test
* Fix the whitespace format
* resolve pr comments
* Fix the lint message
* refactor the code
* Fix the failing Test
* adding a new endpoint
* Remove the unwanted code
* Changes for Command and Queries
* changes for command and queries
* Fix the Lint issues
* Fix imports ordering
* Resolve the PR comments
* resolve pr comments
* Resolve pr comments
* Fix the failing test on adjustSeatscommandtests
* Fix the failing test
* Fix the whitespaces
* resolve failing test
* rename a property
* Resolve the pr comments
* refactoring the existing implementation
* Resolve the whitespaces format issue
* Resolve the pr comments
* [AC-1462] Created IAvailableServiceAccountsQuery along its implementation and with unit tests
* [AC-1462] Renamed ICountNewServiceAccountSlotsRequiredQuery
* [AC-1462] Added IAutoscaleServiceAccountsCommand and implementation
* Add more unit testing
* fix the whitespaces issues
* [AC-1462] Added unit tests for AutoscaleServiceAccountsCommand
* Add more unit test
* Remove unnecessary directive
* Resolve some pr comments
* Adding more unit test
* adding more test
* add more test
* Resolving some pr comments
* Resolving some pr comments
* Resolving some pr comments
* resolve some pr comments
* Resolving pr comments
* remove whitespaces
* remove white spaces
* Resolving pr comments
* resolving pr comments and fixing white spaces
* resolving the lint error
* Run dotnet format
* resolving the pr comments
* Add a missing properties to plan response model
* Add the email sender for sm seat and service acct
* Add the email sender for sm seat and service acct
* Fix the failing test after email sender changes
* Add staticstorewrapper to properly test the plans
* Add more test and validate the existing test
* Fix the white spaces issues
* Remove staticstorewrapper and fix the test
* fix a null issue on autoscaling
* Suggestion: do all seat calculations in update model
* Resolve some pr comments
* resolving some pr comments
* Return value is unnecessary
* Resolve the failing test
* resolve pr comments
* Resolve the pr comments
* Resolving admin api failure and adding more test
* Resolve the issue failing admin project
* Fixing the failed test
* Clarify naming and add comments
* Clarify naming conventions
* Dotnet format
* Fix the failing dependency
* remove similar test
* [AC-1462] Rewrote AutoscaleServiceAccountsCommand to use UpdateSecretsManagerSubscriptionCommand which has the same logic
* [AC-1462] Deleted IAutoscaleServiceAccountsCommand as the logic will be moved to UpdateSecretsManagerSubscriptionCommand
* [AC-1462] Created method AdjustSecretsManagerServiceAccountsAsync
* [AC-1462] Changed SecretsManagerSubscriptionUpdate to only be set by its constructor
* [AC-1462] Added check to CountNewServiceAccountSlotsRequiredQuery and revised unit tests
* [AC-1462] Revised logic for CountNewServiceAccountSlotsRequiredQuery and fixed unit tests
* [AC-1462] Changed SecretsManagerSubscriptionUpdate to receive Organization as a parameter and fixed the unit tests
* [AC-1462] Renamed IUpdateSecretsManagerSubscriptionCommand methods UpdateSubscriptionAsync and AdjustServiceAccountsAsync
* [AC-1462] Rewrote unit test UpdateSubscriptionAsync_ValidInput_Passes
* [AC-1462] Registered CountNewServiceAccountSlotsRequiredQuery for dependency injection
* [AC-1462] Added parameter names to SecretsManagerSubscriptionUpdateRequestModel
* [AC-1462] Updated SecretsManagerSubscriptionUpdate logic to handle null parameters. Revised the unit tests to test null values
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Add UsePasswordManager to sync data (#3114)
* [AC-1522] Fix service account check on upgrading (#3111)
* Resolved the checkmarx issues
* [AC-1521] Address checkmarx security feedback (#3124)
* Reinstate target attribute but add noopener noreferrer
* Update date on migration script
* Remove unused constant
* Revert "Remove unused constant"
This reverts commit 4fcb9da4d6.
This is required to make feature flags work on the client
* [AC-1458] Add Endpoint And Service Logic for secrets manager to existing subscription (#3087)
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* Remove duplicate migrations from incorrectly resolved merge
* [AC-1468] Modified CountNewServiceAccountSlotsRequiredQuery to return zero if organization has SecretsManagerBeta == true (#3112)
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [Ac 1563] Unable to load billing and subscription related pages for non-enterprise organizations (#3138)
* Resolve the failing family plan
* resolve issues
* Resolve code related pr comments
* Resolve test related comments
* Resolving or comments
* [SM-809] Add service account slot limit check (#3093)
* Add service account slot limit check
* Add query to DI
* [AC-1462] Registered CountNewServiceAccountSlotsRequiredQuery for dependency injection
* remove duplicate DI entry
* Update unit tests
* Remove comment
* Code review updates
---------
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Rui Tome <rtome@bitwarden.com>
* [AC-1461] Secrets manager seat autoscaling (#3121)
* Add autoscaling code to invite user, save user, and bulk enable SM
flows
* Add tests
* Delete command for BulkEnableSecretsManager
* circular dependency between OrganizationService and
UpdateSecretsManagerSubscriptionCommand - fixed by temporarily
duplicating ReplaceAndUpdateCache
* Unresolvable dependencies in other services - fixed by temporarily
registering noop services and moving around some DI code
All should be resolved in PM-1880
* Refactor: improve the update object and use it to adjust values,
remove excess interfaces on the command
* Handle autoscaling-specific errors
---------
Co-authored-by: Rui Tomé <108268980+r-tome@users.noreply.github.com>
* Move bitwarden_license include reference into conditional block
* [AC 1526]Show current SM seat and service account usage in Bitwarden Portal (#3142)
* changes base on the tickets request
* Code refactoring
* Removed the unwanted method
* Add implementation to the new method
* Resolve some pr comments
* resolve lint issue
* resolve pr comments
* add the new noop files
* Add new noop file and resolve some pr comments
* resolve pr comments
* removed unused method
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Co-authored-by: Colton Hurst <colton@coltonhurst.com>
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Rui Tomé <108268980+r-tome@users.noreply.github.com>
Co-authored-by: Conner Turnbull <cturnbull@bitwarden.com>
Co-authored-by: Rui Tome <rtome@bitwarden.com>
Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com>
* [AC-1344] Added method PutRestoreManyAdmin to CiphersController and refactored PutRestoreMany
* [AC-1344] Fixed unit test
* [AC-1344] Removed comment
* [AC-1344] Fixed sql.csproj
* [AC-1344] Added check for empty or null array; added more unit tests
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem (#3037)
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem
* [AC-1423] Add helper to StaticStore.cs to find a Plan by StripePlanId
* [AC-1423] Use the helper method to set SubscriptionInfo.BitwardenProduct
* Add SecretsManagerBilling feature flag to Constants
* [AC 1409] Secrets Manager Subscription Stripe Integration (#3019)
* [AC-1418] Add missing SecretsManagerPlan property to OrganizationResponseModel (#3055)
* [AC 1460] Update Stripe Configuration (#3070)
* [AC 1410] Secrets Manager subscription adjustment back-end changes (#3036)
* Create UpgradeSecretsManagerSubscription command
* [AC-1495] Extract UpgradePlanAsync into a command (#3081)
* This is a pure lift & shift with no refactors
* [AC-1503] Fix Stripe integration on organization upgrade (#3084)
* Fix SM parameters not being passed to Stripe
* [AC-1504] Allow SM max autoscale limits to be disabled (#3085)
* [AC-1488] Changed SM Signup and Upgrade paths to set SmServiceAccounts to include the plan BaseServiceAccount (#3086)
* [AC-1510] Enable access to Secrets Manager to Organization owner for new Subscription (#3089)
* Revert changes to ReferenceEvent code (#3091)
This will be done in AC-1481
* Add UsePasswordManager to sync data (#3114)
* [AC-1522] Fix service account check on upgrading (#3111)
* [AC-1521] Address checkmarx security feedback (#3124)
* Reinstate target attribute but add noopener noreferrer
* Update date on migration script
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: cyprain-okeke <cokeke@bitwarden.com>
Co-authored-by: Rui Tomé <108268980+r-tome@users.noreply.github.com>
Co-authored-by: Conner Turnbull <cturnbull@bitwarden.com>
Co-authored-by: Rui Tome <rtome@bitwarden.com>
* Added region to customer metadata
* Updated webhook to filter out events for other DCs
* Flipped ternary to be positive, fixed indentation
* Updated to allow for unit testing andupdated tests
---------
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
* [AC-1435] Automatically enable Single Org policy when selecting TDE
* [AC-1435] Add test for automatic policy enablement
* [AC-1435] Prevent disabling single org when account recovery is enabled
* [AC-1435] Require Single Org policy when enabling Account recovery
* [AC-1435] Add unit test to check for account recovery policy when attempting to disable single org
* [AC-1435] Add test to verify single org policy is enabled for account recovery policy
* [AC-1435] Fix failing test
* Swagger fixes
Co-Authored-By: Oscar Hinton <Hinton@users.noreply.github.com>
* Make Response Models return Guids instead of strings
* Change strings into guids in ScimApplicationFactory
---------
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Extract authorization from project delete command
* Support service account write access
---------
Co-authored-by: Matt Bishop <mbishop@bitwarden.com>
* SM-768: Update EFCore and related packages to >= 7.0
* SM-768: Update more packages for the EF 7 upgrade
* SM-768: Update the PostgreSQL package
* SM-768: Run dotnet restore --force-evaluate
* SM-768: Revert package upgrades for 3 projects
* SM-768: Update the dotnet-ef tool
* feat: add new command for updating request and emailing user, refs AC-1191
* feat: inject service with organization service collection extensions, refs AC-1191
* feat: add function to send admin approval email to mail services (interface/noop/handlebars), refs AC-1191
* feat: add html/text mail templates and add view model for email data, refs AC-1191
* feat: update org auth request controller to use new command during auth request update, refs AC-1191
* fix: dotnet format, refs AC-1191
* refactor: update user not found error, FirstOrDefault for enum type display name, refs AC-1191
* refactor: update user not found to log error instead of throws, refs AC-1191
* fix: remove whitespace lint errors, refs AC-1191
* refactor: update hardcoded UTC timezone string, refs AC-1191
* refactor: add unit test for new command, refs AC-1191
* refactor: improve enum name fallback and identifier string creation, refs AC-1191
* refactor: add addtional unit tests, refs AC-1191
* refactor: update success test to use more generated params, refs AC-1191
* fix: dotnet format...again, refs AC-1191
* refactor: make UTC display a constant for handlebars mail service, refs AC-1191
* refactor: update displayTypeIdentifer to displayTypeAndIdentifier for clarity, refs AC-1191
* Fix Setting Organization Folders
* Fix Formatting
* Added ReplaceAsync Test
* Fix SQL Server Test
* Update Replace Call Also
* Be Case Insensitive With Guids
* Fix Assignment to Cipher
* Add PasswordlessAuth Settings
* Update Repository Method to Take TimeSpan
* Update AuthRequest_DeleteIfExpired
- Take Configurable Expiration
- Add Special Cases for AdminApproval AuthRequests
* Add AuthRequestRepositoryTests
* Run Formatting
* Remove Comment
* Fix Bug in EF Repo
* Add Test Covering Expired Rejected AuthRequest
* Use Longer Param Names
* Use Longer Names in Test Helpers
* adding ability for service account to have write access
* Suggested changes
* fixing tests
* dotnet format changes
* Adding RunAsServiceAccountWIthPermission logic to ProjectAuthorizationhandlerTests
* Removing logic that prevents deleting and updating a secret. Adding Service Account logic to tests inside of secretAuthorizationhandlerTests.
* Removing Service Account from CanUpdateSecret_NotSupportedClientTypes_DoesNotSuceed because it is a supported client type now :)
* thomas sugested changes
* using Arg.Any<AccessClientType>() instead of default in tests
* merge conflict changes and code updates to remove service account tests that are outdated
* fixing tests
* removing extra spaces that lint hates
* health check services added
* health check extension added
* added get connection string
* made changes to hrslth check method
* Added database health check
* added identity server health check
* added identity server health check
* Added logger publisher
* latest changes
* removed file
* Added mail server check for dev
* Added authorization to health check url path
* commented
* Added exception to switch
* Removed exclude code coverage
* Added health check for redis
* Added todos
* Added storage queue checks
* Added checks for mail
* Removed unused references and fixed linting issue
* Lint issues
* Moved healthchecks to sharedWeb project and exposed builder as a parameter to configure more health checks based on a project
* Added health check to API project
* dependencies updated
* Removed ef core health check dependencies
* Added checks to only add a health check when the connection string exists, moved health check from startup to extension class
* Merged with master and fixed conflicts
* Fixed lint issues
* Added check for amazon ses
* merged with master
* fixed lint
* Removed Amazon SES health check
* Init ClientSecret migration
* Fix unit tests
* Move to src/Sql/dbo_future
* Formatting changes
* Update migration date for next release
* Swap to just executing sp_refreshview
* Fix formatting
* Add EF Migrations
* Rename to ClientSecretHash
* Fix unit test
* EF column rename
* Batch the migration
* Fix formatting
* Add deprecation notice to property
* Move data migration
* Swap to CREATE OR ALTER
* Include Member Decryption Type
* Make ICurrentContext protected from base class
* Return MemberDecryptionType
* Extend WebApplicationFactoryBase
- Allow for service subsitution
* Create SSO Tests
- Mock IAuthorizationCodeStore so the SSO process can be limited to Identity
* Add MemberDecryptionOptions
* Remove Unused Property Assertion
* Make MemberDecryptionOptions an Array
* Address PR Feedback
* Make HasAdminApproval Policy Aware
* Format
* Use Object Instead
* Add UserDecryptionOptions File
* Adding the Secret manager to the Plan List
* Adding the unit test for the StaticStoreTests class
* Fix whitespace formatting
* Fix whitespace formatting
* Price update
* Resolving the PR comments
* Resolving PR comments
* Fixing the whitespace
* only password manager plans are return for now
* format whitespace
* Resolve the test issue
* Fixing the failing test
* Refactoring the Plan separation
* add a unit test for SingleOrDefault
* Fix the whitespace format
* Separate the PM and SM plans
* Fixing the whitespace
* Remove unnecessary directive
* Fix imports ordering
* Fix imports ordering
* Resolve imports ordering
* Fixing imports ordering
* Fix response model, add MaxProjects
* Fix filename
* Fix format
* Fix: seat price should match annual/monthly
* Fix service account annual pricing
* Name the sm service account planId properly
* Update the secrets manager plan
* correcting the wrong amount for the seats
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [AC-1192] Create new OrganizationAuthRequestsController.cs
* [AC-1192] Introduce OrganizationAdminAuthRequest model
* [AC-1192] Add GetManyPendingByOrganizationId method to AuthRequest repository
* [AC-1192] Add new list pending organization auth requests endpoint
* [AC-1192] Add new GetManyAdminApprovalsByManyIdsAsync method to the AuthRequestRepository
* [AC-1192] Make the response device identifier optional for admin approval requests
* [AC-1192] Add endpoint for bulk denying admin device auth requests
* [AC-1192] Add OrganizationUserId to PendingOrganizationAuthRequestResponseModel
* [AC-1192] Add UpdateAuthRequest endpoint and logic to OrganizationAuthRequestsController
* [AC-1192] Secure new endpoints behind TDE feature flag
* [AC-1192] Formatting
* [AC-1192] Add sql migration script
* [AC-1192] Add optional OrganizationId column to AuthRequest entity
- Rename migration script to match existing formatting
- Add new column
- Add migration scripts
- Update new sprocs to filter/join on OrganizationId
- Update old sprocs to include OrganizationId
* [AC-1192] Format migration scripts
* [AC-1192] Fix failing AuthRequest EF unit test
* [AC-1192] Make OrganizationId optional in updated AuthRequest sprocs for backwards compatability
* [AC-1192] Fix missing comma in migration file
* [AC-1192] Rename Key to EncryptedUserKey to be more descriptive
* [AC-1192] Move request validation into helper method to reduce repetition
* [AC-1192] Return UnauthorizedAccessException instead of NotFound when user is missing permission
* [AC-1192] Introduce FeatureUnavailableException
* [AC-1192] Introduce RequireFeatureAttribute
* [AC-1192] Utilize the new RequireFeatureAttribute in the OrganizationAuthRequestsController
* [AC-1192] Attempt to fix out of sync database migration by moving new OrganizationId column
* [AC-1192] More attempts to sync database migrations
* [AC-1192] Formatting
* [AC-1192] Remove unused reference to FeatureService
* [AC-1192] Change Id types from String to Guid
* [AC-1192] Add EncryptedString attribute
* [AC-1192] Remove redundant OrganizationId property
* [AC-1192] Switch to projection for OrganizationAdminAuthRequest mapping
- Add new OrganizationUser relationship to EF entity
- Replace AuthRequest DBContext config with new IEntityTypeConfiguration
- Add navigation property to AuthRequest entity configuration for OrganizationUser
- Update EF AuthRequestRepository to use new mapping and navigation properties
* [AC-1192] Remove OrganizationUser navigation property
* [PM-1270] Updated PolicyService to throw an exception in case TDE is enabled and the user is trying to turn off the master password reset policy or tries to remove auto-enrollment
* [PM-1270] Added unit tests around the checks for turning off the master password reset policy or removing auto-enrollment
* [PM-1270] Fixed existing unit test SaveAsync_NewPolicy_Created
* [PM-1270] Removed unused method mock on unit test
* Move to access query for project commands
* Swap to hasAccess method per action
* Swap to authorization handler pattern
* Move ProjectOperationRequirement to Core
* Add default throw + tests
* Extract authorization out of commands
* Unit tests for authorization handler
* Formatting
* Swap to reflection for testing switch
* Swap to check read & reflections in test
* fix wording on exception
* Refactor GetAccessClient into its own query
* Use accessClientQuery in project handler
* Move keys into FreshDeskSettings class
* Add configurable custom fields for user and org
In FreshDesk we currently use the custom fields `cf_user` and `cf_org`.
- For the US instance these will be set to those values.
- For the EU instance these will likely be configured to `cf_user_eu` and `cf_org_eu`
* Fix file encoding
* Add region to notes
* Use customizable org field value in condition check
* [AC-621] Added possibility of adding users through SCIM to an Organization without a confirmed Owner
* [AC-621] Passing EventSystemUser argument for HasConfirmedOwnersExceptAsync in user delete actions by SCIM
* [AC-624] Removed EventSystemUser parameter from IOrganizationService.HasConfirmedOwnersExceptAsync
* [AC-621] Added IProviderUserRepository.GetManyOrganizationDetailsByOrganizationAsync
* [AC-621] Updated OrganizationService.HasConfirmedOwnersExceptAsync to use IProviderUserRepository.GetManyOrganizationDetailsByOrganizationAsync to check for any confirmed provider users
* [AC-621] Removed unused EventSystemUser parameters
* [AC-621] Refactored ProviderUserRepository.GetManyByOrganizationAsync to return ProviderUser objects
* [AC-621] Removed default parameter value for Status
* [PM-1879] Replaced JsonSerializer.Serialize with CoreHelpers.ClassToJsonData
* [PM-1879] Changed OrganizationService.SaveUserAsync to check Custom permissions
* [PM-1879] Added unit tests for saving Custom permissions using a Custom user
* [PM-1879] Added method OrganizationUser.GetPermissions to deserialize the Permissions property
* [PM-1879] Refactored ValidateCustomPermissionsGrant to return bool
* [PM-1879] Added unit test SaveUser_WithCustomPermission_WhenUpgradingToAdmin_Throws
* [AC-358] Add constant for grace period length
* [AC-358] Add SubscriptionExpiration to OrganizationLicense.cs and increment Current_License_File_Version
* [AC-358] Update org subscription response model
- Add new SelfHostSubscriptionExpiration field that does not include a grace period
- Add optional License argument to constructor for self host responses
- Use the License, if available, to populate the expiration/subscription expiration fields
- Maintain backwards compatability by falling back to organization expiration date
* [AC-358] Read organization license file for self hosted subscription response
* [AC-358] Decrement current license file version and add comment documenting why
* [AC-358] Clarify name for new expiration without grace period field
* [EC-787] Add new stored procedure OrganizationUser_ReadByUserIdWithPolicyDetails
* [EC-787] Add new method IOrganizationUserRepository.GetByUserIdWithPolicyDetailsAsync
* [EC-787] Add OrganizationUserPolicyDetails to represent policies applicable to a specific user
* [EC-787] Add method IPolicyService.GetPoliciesApplicableToUser to filter the obtained policy data
* [EC-787] Returning PolicyData on stored procedures
* [EC-787] Changed GetPoliciesApplicableToUserAsync to return ICollection
* [EC-787] Switched all usings of IPolicyRepository.GetManyByTypeApplicableToUserIdAsync to IPolicyService.GetPoliciesApplicableToUserAsync
* [EC-787] Removed policy logic from BaseRequestValidator and added usage of IPolicyService.GetPoliciesApplicableToUserAsync
* [EC-787] Added unit tests for IPolicyService.GetPoliciesApplicableToUserAsync
* [EC-787] Added unit tests for OrganizationUserRepository.GetByUserIdWithPolicyDetailsAsync
* [EC-787] Changed integration test to check for single result
* [EC-787] Marked IPolicyRepository methods GetManyByTypeApplicableToUserIdAsync and GetCountByTypeApplicableToUserIdAsync as obsolete
* [EC-787] Returning OrganizationUserId on OrganizationUser_ReadByUserIdWithPolicyDetails
* [EC-787] Remove deprecated stored procedures Policy_CountByTypeApplicableToUser, Policy_ReadByTypeApplicableToUser and function PolicyApplicableToUser
* [EC-787] Added method IPolicyService.AnyPoliciesApplicableToUserAsync
* [EC-787] Removed 'OrganizationUserType' parameter from queries
* [EC-787] Formatted OrganizationUserPolicyDetailsCompare
* [EC-787] Renamed SQL migration files
* [EC-787] Changed OrganizationUser_ReadByUserIdWithPolicyDetails to return Permissions json
* [EC-787] Refactored excluded user types for each Policy
* [EC-787] Updated dates on dbo_future files
* [EC-787] Remove dbo_future files from sql proj
* [EC-787] Added parameter PolicyType to IOrganizationUserRepository.GetByUserIdWithPolicyDetailsAsync
* [EC-787] Rewrote OrganizationUser_ReadByUserIdWithPolicyDetails and added parameter for PolicyType
* Update util/Migrator/DbScripts/2023-03-10_00_OrganizationUserReadByUserIdWithPolicyDetails.sql
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* [AC-1145] Add TDE feature flag
* [AC-1145] Update .gitignore to ignore flags.json in the Api project
* [AC-1145] Introduce MemberDecryptionType property on SsoConfigurationData
* [AC-1145] Add MemberDecryptionType to the SsoConfigurationDataRequest model
* [AC-1145] Automatically enable password reset policy on TDE selection
* [AC-1145] Remove references to obsolete KeyConnectorEnabled field
* [AC-1145] Formatting
* [AC-1145] Update XML doc reference to MemberDecryptionType
* Refactor AuthRequest Logic into Service
* Add Tests & Run Formatting
* Register Service
* Add Tests From PR Feedback
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
---------
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
* Move to access query for project commands
* Swap to hasAccess method per action
* Swap to authorization handler pattern
* Move ProjectOperationRequirement to Core
* Add default throw + tests
* Swap to reflection for testing switch
* [PM-1188] move ef auth files to auth folder
* [PM-1188] rename ef models namespace
* [PM-1188] fix auth ef model imports
* [PM-1188] fix ef model usings
* Extract Import-Api endpoints into separate controller
Moved ciphers/import and ciphers/import-organization into new ImportController
Paths have been kept intact for now (no changes on clients needed)
Moved request-models used for import into tools-subfolder
* Update CODEOWNERS for team-tools-dev
* Move HibpController (reports) to tools
* Moving files related to Send
* Moving files related to ReferenceEvent
* Removed unneeded newline
* [EC-1070] Add API endpoint to retrieve all policies for the current user
The additional API endpoint is required to avoid forcing a full sync call before every login for master password policy enforcement on login.
* [EC-1070] Add MasterPasswordPolicyData model
* [EC-1070] Move PolicyResponseModel to Core project
The response model is used by both the Identity and Api projects.
* [EC-1070] Supply master password polices as a custom identity token response
* [EC-1070] Include master password policies in 2FA token response
* [EC-1070] Add response model to verify-password endpoint that includes master password policies
* [AC-1070] Introduce MasterPasswordPolicyResponseModel
* [AC-1070] Add policy service method to retrieve a user's master password policy
* [AC-1070] User new policy service method
- Update BaseRequestValidator
- Update AccountsController for /verify-password endpoint
- Update VerifyMasterPasswordResponseModel to accept MasterPasswordPolicyData
* [AC-1070] Cleanup new policy service method
- Use User object instead of Guid
- Remove TODO message
- Use `PolicyRepository.GetManyByTypeApplicableToUserIdAsync` instead of filtering locally
* [AC-1070] Cleanup MasterPasswordPolicy models
- Remove default values from both models
- Add missing `RequireLower`
- Fix mismatched properties in `CombineWith` method
- Make properties nullable in response model
* [AC-1070] Remove now un-used GET /policies endpoint
* [AC-1070] Update policy service method to use GetManyByUserIdAsync
* [AC-1070] Ensure existing value is not null before comparison
* [AC-1070] Remove redundant VerifyMasterPasswordResponse model
* [AC-1070] Fix service typo in constructor
* SM-695: Block create or update for admins on secrets outside of the org
* SM-695: Update test, org is required on project
* SM-695: Update tests to set matching org id in project
* SM-695: Ensure there is no more than 1 project connected to a secret, plus remove org admin check in the CreateSecretCommand.
* SM-695: Add integration tests for create and update secrets security fixes
* SM-695: Update Create and Update secret tests, a secret can only be in one project at a time
* [EC-1014] Create Organization Status (Pending/Created) (#2610)
* [EC-427] Add columns 'Type' and 'BillingPhone' to Provider table
* [EC-427] Provider table Type and BillingPhone MySql migrations
* [EC-427] Provider table Type and BillingPhone Postgres migrations
* [EC-427] Add mysql migration script
* [EC-427] Add mysql migration script
* [EC-427] Updated Provider sql script to include default column value
* [EC-427] Removed default value from Provider.Type column
* [EC-427] Changed migration script to include a default value constraint instead of updating the null type
* [EC-427] Updated Sql project Provider table script
* [EC-427] Changed migration script to use 'Create OR Alter' for views and sprocs
* [EC-427] Added default values for 'BillingPhone' and 'Type' fields on sprocs [dbo].[Provider_Create] and [dbo].[Provider_Update]
* [EC-427] Adjusting metadata in migration script
* [EC-427] Updated Provider sprocs SQL script files
* [EC-427] Fixed migration script
* [EC-427] Added sqlite migration
* [EC-427] Add missing Provider_Update sproc default value
* [EC-427] Added missing GO action to migration script
* [EC-428] Redirect to Edit after creating Provider
* Revert "[EC-428] Redirect to Edit after creating Provider"
This reverts commit 6347bca1ed.
* [EC-1014] Create OrganizationStatusType and add Status column to Organizations table
* [EC-1014] Added EF migrations
* [EC-1014] dotnet format
* [EC-1014] Changed Organization.Status from SMALLINT to TINYINT
* [EC-1014] Set Organization.Status default value = 1
* [EC-1014] Setting Organization.Status default value as 1
* [EC-459 / EC-428] Admin panel: Add Provider Type to list and creation flow (#2593)
* [EC-427] Add columns 'Type' and 'BillingPhone' to Provider table
* [EC-427] Provider table Type and BillingPhone MySql migrations
* [EC-427] Provider table Type and BillingPhone Postgres migrations
* [EC-427] Add mysql migration script
* [EC-427] Add mysql migration script
* [EC-427] Updated Provider sql script to include default column value
* [EC-427] Removed default value from Provider.Type column
* [EC-427] Changed migration script to include a default value constraint instead of updating the null type
* [EC-427] Updated Sql project Provider table script
* [EC-427] Changed migration script to use 'Create OR Alter' for views and sprocs
* [EC-427] Added default values for 'BillingPhone' and 'Type' fields on sprocs [dbo].[Provider_Create] and [dbo].[Provider_Update]
* [EC-427] Adjusting metadata in migration script
* [EC-427] Updated Provider sprocs SQL script files
* [EC-427] Fixed migration script
* [EC-427] Added sqlite migration
* [EC-427] Add missing Provider_Update sproc default value
* [EC-427] Added missing GO action to migration script
* [EC-459] Added Type column to Providers list
* [EC-428] Added Type, BusinessName and BillingEmail to CreateProviderModel
* [EC-428] Updated Create Provider view to include new fields
* [EC-428] Updated ProviderService to not create a ProviderUser for the type Reseller
* [EC-428] Added custom validation for Provider fields depending on selected Type
* [EC-428] Redirect to Edit after creating Provider
* [EC-428] Setting Provider status as Created for Resellers
* [EC-428] Redirect on Provider creation depending if self host server
* [EC-428] Split ProviderService.CreateAsync into two methods: CreateMspAsync and CreateResellerAsync
* [EC-428] Created ICreateProviderCommand and added service for injection on Admin.Startup
* [EC-428] Modified Provider views to use DisplayName attribute values
* [EC-428] Moved ICreateProviderCommand to Core project
* [EC-428] Adding ICreateProviderCommand injection next to IProviderService
* [EC-428] Moved CreateProviderCommand to Commercial.Core project
* [EC-459] Added Type column to Providers list
* [EC-428] Added Type, BusinessName and BillingEmail to CreateProviderModel
* [EC-428] Updated Create Provider view to include new fields
* [EC-428] Updated ProviderService to not create a ProviderUser for the type Reseller
* [EC-428] Added custom validation for Provider fields depending on selected Type
* [EC-428] Redirect to Edit after creating Provider
* [EC-428] Setting Provider status as Created for Resellers
* [EC-428] Redirect on Provider creation depending if self host server
* [EC-428] Split ProviderService.CreateAsync into two methods: CreateMspAsync and CreateResellerAsync
* [EC-428] Created ICreateProviderCommand and added service for injection on Admin.Startup
* [EC-428] Modified Provider views to use DisplayName attribute values
* [EC-428] Moved ICreateProviderCommand to Core project
* [EC-428] Adding ICreateProviderCommand injection next to IProviderService
* [EC-428] Moved CreateProviderCommand to Commercial.Core project
* [EC-428] Moved CreateProviderCommand to namespace Bit.Commercial.Core.Providers
* [EC-429] Provider details screen updated with Type, BillingPhone and Organization details (#2666)
* [EC-430] Admin portal: Update organization information screen (#2672)
* [EC-430] Added ProviderOrganizationProviderDetailsView to get Provider details for an Organization
* [EC-430] Added Provider information to Organization Edit/View on Admin panel
* [EC-430] Remove "Add to Reseller" button
* [EC-430] Removed unused property OrganizationEditModel.ClientOwnerEmail
* [EC-430] Replaced IProviderOrganizationRepository.GetProviderDetailsByOrganizationAsync with IProviderRepository.GetByOrganizationIdAsync
* [EC-430] Deleted ProviderOrganizationProviderDetails and ProviderOrganizationProviderDetailsReadByOrganizationIdQuery
* [EC-429] Only show Create/Add Existing Organization buttons for Reseller providers (#2723)
* [EC-432] Add existing Organizations to Provider (#2683)
* [EC-432] Added ProviderOrganizationUnassignedOrganizationDetails_Search stored procedure
* [EC-432] Added IProviderOrganizationRepository.SearchAsync
* [EC-432] Created controller ProviderOrganizationsController to assign Organizations to a Provider
* [EC-432] Filter existing organizations by plans Enterprise or Team
* [EC-432] Existing Organization name links to edit page
* [EC-432] EF filtering out existing organizations by plan type enterprise or teams
* [EC-432] Creating multiple ProviderOrganization records
* [EC-432] Added ProviderOrganizationUnassignedOrganizationDetails_Search stored procedure
* [EC-432] Added IProviderOrganizationRepository.SearchAsync
* [EC-432] Created controller ProviderOrganizationsController to assign Organizations to a Provider
* [EC-432] Filter existing organizations by plans Enterprise or Team
* [EC-432] Existing Organization name links to edit page
* [EC-432] EF filtering out existing organizations by plan type enterprise or teams
* [EC-432] Creating multiple ProviderOrganization records
* [EC-432] Renamed migration script and added missing sproc
* [EC-432] Saving multiple events for the created ProviderOrganizations
* [EC-432] Included unit testing for ProviderService.AddOrganizations and EventService.LogProviderOrganizationEventsAsync
* [EC-432] Removed async from NoopEventService.LogProviderOrganizationEventsAsync
* [EC-432] Remove unused dependency setup in ProviderServiceTests.AddOrganizations_Success
* [EC-432] Renamed AddOrganizations to AddOrganizationsToReseller and removed addingUserId and key arguments
* [EC-432] Added DisplayName attributes to ProviderOrganizationViewModel and used them in the view
* [EC-432] Reverted changes to input fields
* [EC-432] Moved unassigned organizations search to Organizations repo
* [EC-432] Moved AddExistingOrganization action to ProvidersController
* [EC-432] dotnet format
* [EC-432] Fixed unit test issues
* [EC-432] Removed unnecessary Html.DisplayNameFor for labels
* [EC-432] Renamed OrganizationSearchViewModel to OrganizationUnassignedToProviderSearchViewModel
* [EC-432] Modified IEventService.LogProviderOrganizationEventsAsync to receive an IEnumerable as parameter
* [EC-432] Updated IProviderOrganizationRepository and replaced CreateWithManyOrganizations method with CreateManyAsync
* [EC-432] Deleted ProviderOrganization_CreateWithManyOrganizations
* [AC-432] Simplified Organization_UnassignedToProviderSearch query
* [AC-432] Removed unnecessary setup
* [EC-432] Checking if stored procedure exists before creating
* [EC-432] Renamed migration file to recent date
* [EC-435] Admin Portal: Add new Organization creation flow UI (#2707)
* [EC-435] Created _OrganizationForm partial view. Added actions for creating an Organization assigned to a provider
* [EC-435] Remove logic for creating an organization
* [EC-435] Created partial view _OrganizationFormScripts
* [EC-435] Remove unused ReferenceEventType
* [EC-435] Added TODO comment on Organization Create
* [EC-435] Checking if Provider type is Reseller on creating new assigned organization
* [EC-435] Setting the Organization plan type as TeamsMonthly by default when adding to a provider
* [EC-435] Removing unused buttons
* [EC-435] Switched hidden fields to form submit route value
* [EC-435] Moved _OrganizationForm and _OrganizationFormScripts to Shared folder
* [EC-435] Moved Create organization actions from OrganizationsController to ProvidersController
* [EC-435] Fixing bug on saving Organization that would have BillingEmail as null
* [EC-435] Added null check to Provider
* [EC-435] Moved trial buttons script logic to Edit view
* [AC-431] Add new organization invite process (#2737)
* [EC-435] Created _OrganizationForm partial view. Added actions for creating an Organization assigned to a provider
* [EC-435] Remove logic for creating an organization
* [EC-435] Created partial view _OrganizationFormScripts
* [EC-435] Remove unused ReferenceEventType
* [EC-435] Added TODO comment on Organization Create
* [EC-435] Checking if Provider type is Reseller on creating new assigned organization
* [EC-435] Setting the Organization plan type as TeamsMonthly by default when adding to a provider
* [EC-435] Removing unused buttons
* [EC-435] Switched hidden fields to form submit route value
* [EC-435] Moved _OrganizationForm and _OrganizationFormScripts to Shared folder
* [EC-435] Moved Create organization actions from OrganizationsController to ProvidersController
* [AC-431] Added new ReferenceEventType OrganizationCreatedByAdmin
* [AC-431] Added method IOrganizationService.CreateOrganization
* [AC-431] Creating new Organization with Pending status and assigning to Provider
* [AC-431] Added method to IMailService to send invitation to initialize org
* [AC-431] Added methods CreatePendingOrganization and InitPendingOrganization to IOrganizationService
* [AC-431] Org invite includes initOrganization parameter
* [AC-431] Modified existing Accept organization user action to initialize org
* [AC-431] Updated ProvidersController method name
* [AC-431] Created OrganizationUserInitInvitedViewModel to link to 'accept-init-organization' url
* [AC-431] Added action AcceptInit to OrganizationUsersController
* [AC-431] Resend owner invite
* [AC-431] dotnet format
* [AC-431] Removed unused parameter 'addingUserId' from IProviderService.AddOrganization
* [AC-431] Removed setting manual values for CreationDate and RevisionDate
* [AC-431] Updated OrganizationService.InitPendingOrganization to throw exceptions when the Organization does not meet the required criteria
* [AC-431] Modified OrganizationUserInitInvitedViewModel to inherit properties from OrganizationUserInvitedViewModel
* [AC-431] Removed unecessary parameter check
* [AC-431] Moved method description to IOrganizationService.InitPendingOrganization
* [AC-431] Moved ApplicationCacheService.UpsertOrganizationAbilityAsync and ReferenceEventService.RaiseEventAsync to OrganizationService
* [AC-431] Creating collection after creating organization
* [EC-435] Fixing bug on saving Organization that would have BillingEmail as null
* [AC-431] Deleted OrganizationUserInitInvitedViewModel and added parameter InitOrganization to OrganizationUserInvitedViewModel.cs
* [AC-431] Checking if the user has any existing SingleOrg policies before initializing an Org
* [AC-431] Remove commented code
* [EC-435] Added null check to Provider
* [EC-435] Moved trial buttons script logic to Edit view
* [AC-431] Added EncryptedString attribute to OrganizationUserAcceptInitRequestModel.CollectionName
* [AC-431] Refactored plan check condition
* [AC-431] Remove duplicate _applicationCacheService.UpsertOrganizationAbilityAsync call
* [AC-431] Removed IMailService.SendOrganizationInitInviteEmailAsync
* [AC-431] Added parameters ClaimsPrincipal and IUserService to IOrganizationService.CreatePendingOrganization
* [AC-434] Hide Billing screen for Reseller clients (#2783)
* [AC-434] Added ProviderType to ProfileOrganizationResponseModel
* [AC-434] Migration script
* [AC-434] Fixed indentation on migration script
* [AC-434] Hiding sensitive subscription data if the user does not have permissions
* [AC-434] Fixed missing dependency in unit test
* [AC-434] Altered BillingSubscription.Amount and BillingSubscriptionUpcomingInvoice.Amount to nullable
* [AC-434] Replaced CurrentContext.ManageBilling with ViewBillingHistory, ViewSubscription, EditSubscription and EditPaymentMethods
* [AC-434] Reverted change on BillingSubscription.Amount and now setting Subscription.Items = null when User does not have permission
* [AC-434] Added ProviderOrganizationProviderDetails_ReadByUserId
* [AC-434] Added IProviderOrganizationRepository.GetManyByUserAsync
* [AC-434] Added CurrentContext.GetOrganizationProviderDetails
* [AC-434] Remove unneeded join Organization table
* [AC-1255] Search Existing Organizations by partial Email (#2830)
* [AC-1255] Added email search field input validation
* [AC-1255] Reverted added email pattern
* [AC-1255] Modified Organization search by Email to search using substring
* [AC-1276] Displaying an Organizations pending owners if the Organization is in a Pending status (#2834)
* [AC-432] Checking that an existing Organization is not assigned to any Provider before being assigned (#2840)
* [AC-432] Checking if any of the selected Organizations is already assigned to a Provider
* [AC-432] Changed ProviderOrganization_ReadByOrganizationIds to only get count
* [AC-432] Replaced IProviderOrganizationRepository.GetCountByOrganizationIdsAsync with call to IProviderOrganizationRepository.GetByOrganizationId
* [AC-432] undo new line
* [AC-432] Fixed unit test
* Revert "[AC-432] Replaced IProviderOrganizationRepository.GetCountByOrganizationIdsAsync with call to IProviderOrganizationRepository.GetByOrganizationId"
This reverts commit ee6e095e88.
# Conflicts:
# util/Migrator/DbScripts/2023-03-22_00_ProviderAddExistingOrganizations.sql
* [AC-432] Created new migration script for ProviderOrganization_ReadCountByOrganizationIds
* Adding discount coupon on provider org creation
* Change the provider discount Id
* Fixing the whitespace format
* Remove discount at subscription and apply to customer
* resolving a failing test
* Remove white spaces
* Adding organization name on subscription and update
* Changes after running dotnet format -v diag
* Change the OrganizationName to GetName
* Change GetName to OwnerName
* Change the OwnerName to SubscriberName
* Reverting the changes made by dotnet format-v diag
* Removing extract space
* resolve the lint issue
* Fix whitespace formatting issue
* Resolving pr comment on changing organization
* Fixing the failing test
* Using the ISubscriber interface for consistent
* fixing the whitescapes
* Resolving the PR comments
* resolving the whitespace format
* Remove unnecessary directive
* Resolving the whitespace issue
* changes for organization instead of subscriber
* resolving the failing test
* Resolve lint issue by removing unnecessary directive
* Resolve the PR comment
* remove these blank lines
* Fixing whitespace formatting
* Wire up read/write for secret list and secret response
* Fix trash
* Remove UserHasReadPermission
* Fix list by project
* Implement admin and service accounts for AccessToSecretAsync
* Resolve feedback
* Fix tests
* Rename function
* Change create to return true, true
* Remove duplicated access check
* [SG-994] Add import Open Sans font to full template
* [SG-994] Update organization user invite email template to new UI
* [SG-994] update alt text for mobile app download buttons
* [SG-994] Update copy. Add hyperlinks to stores.
* [SG-944] Improve layout responsiveness
* [PM-1095][PM-1104] Add new template for title and contact us. Add new template for user organization invite
* [PM-1095][PM-1104] Remove wrong text from free invite
* [PM-1104][PM-1095] Add bold class. Add margin.
* [PM-1104][PM-1095] Change font type to previously used
* [PM-1104][PM-1095] Remove Open Sans font
* [PM-1104][PM-1095] Improve browsers rendering compatibility
* [PM-1104][PM-1095] Fixed margins
* [PM-1095][PM-1104] Remove unnecessary string sanitise.
* Use all organization memberships for LaunchDarkly context
* Use simpler null check
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Remove unnecessary interpolation
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Remove unnecessary interpolation
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Fully spell out organizations
* Use client type for context separation decisions
---------
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* SM-655: Add Authorize attribute for secrets on the SM Porting Controller
* SM-655: Add access secrets manager check to SM Import and Export
* SM-655: Add tests for export and import endpoints
* [AC-1110] add deleteAnyCollection permission to bulk delete
* [AC-1110] call collection service instead of repo for user collections
* [AC-1110] fix tests
* [AC-1110] fix more tests
* SM-561: Update secret revision date on restore
* SM-561: Update secret revision dates when a project is deleted
* SM-561: Fix bug when updating revision dates for secrets when their parent project is deleted
* SM-561: Handle case when there are no secrets in the projects that are being deleted
* SM-561: Rename func to GetManyWithSecretsByIds and move UpdateRevisionDates call from ProjectsController to projects delete command
* SM-561: update secret ids before project deletion
* SM-561: Refactor out command in command call to follow CQRS pattern
* SM-561: Remove null check
* LaunchDarkly service
* Load file-based flag values, properly support offline only when self-host
* Simplify tests
* Use interface for LD settings
* Remove tests that will provide inconsistent results depending on machine setup and file fallback
* Fall back to offline mode more actively
* Drive fallback file path with setting
* Add endpoints to check current user's permission
* Swap to adding current user permission onto GET
* Cleanup DI
* Add ProjectPermissionDetails DTO and query
* code review updates
* Remove assert recent for longer running creates
* move UpdateLicenseAsync from service to command
* create new SelfHostedOrganizationDetails view model and move license validation logic there
* move occupied seat count logic to database level
* [SM-66] Create Secret Database Table (#2144)
Objective
The purpose of this PR is to create a database table, entity, and repository for the new Secret database table.
The new Secret table will use entity framework for all database providers.
* [SM-67] Get all secrets by org ID (#2163)
Add a controller to fetch secrets associated with an organization ID.
To note, the [SecretsManager] attribute makes this controller only available for local development.
* [SM-68] Add API endpoints for getting, creating, and editing secrets (#2201)
The purpose of this PR is to add API endpoints for getting, creating, and editing secrets for the Secrets Manager project.
* Move interfaces to core (#2211)
* [SM-63] Read UTC DateTimes from databases via EF and order by revision date (#2206)
* Read UTC DateTimes from db and order by revision
* Move orderby to repo layer
* [SM-185] Add EE_Testing_env to server (#2222)
* Sm 104 project Database (#2192)
* Project DB addition and sprocs
* Adding spaces to the end of each file, fixing minor issues
* removing useless comments
* Adding soft delete proc to migration
* Project EF Scaffold
* Additional changes to use EF instead of procedures
* Adding dependency injection
* Fixing lint errors
* Bug fixes
* Adding migration scripts, removing sproc files, and setting up Entity framework code
* Adding back accidentally deleted sproc
* Removing files that shouldn't have been created
* Lint
* Small changes based on Oscar's rec (#2215)
* Migrations for making CreateDate not null
* adding space to end of file
* Making Revision date not null
* dotnet format
* Adding nonclustered indexes to SQL
* SM-104: Update PR with changes Thomas proposed
Co-authored-by: CarleyDiaz-Bitwarden <103955722+CarleyDiaz-Bitwarden@users.noreply.github.com>
Co-authored-by: Thomas Avery <tavery@bitwarden.com>
Co-authored-by: Colton Hurst <colton@coltonhurst.com>
* Removing org ID from create request body (#2243)
* SM-114: Add create & update project endpoints (#2251)
* SM-114: Initial commit with create project endpoint (for SM)
* SM-114: Add Update Project route (for SM)
* SM-114: Fix file encodings
* Fix DI issue for SM Project Create/Update commands
* Fix import ordering for linter
* SM-114: Remove unneeded lines setting DeletedDate, as it should already be null
* SM-114: Only have OrgId in route for CreateProject
* Remove unneeded using
* SM-114: Initial commit with create project endpoint (for SM)
* SM-114: Add Update Project route (for SM)
* SM-114: Fix file encodings
* Fix DI issue for SM Project Create/Update commands
* Fix import ordering for linter
* SM-114: Remove unneeded lines setting DeletedDate, as it should already be null
* SM-114: Only have OrgId in route for CreateProject
* Remove unneeded using
* Fully remove OrgId from ProjectCreateRequestModel
* [SM-64] Soft Delete Secrets (#2253)
* Bulk delete secrets with command unit tests
* Controller unit tests
* Optimize conditionals
* SM-64 bulk delete integration test
* fix test
* SM-64 code review updated
* [SM-65] Fix return empty secrets list (#2281)
* Secrets return empty list
* [SM-246] Use repository in integration test (#2285)
* [SM-190] Add integration tests to Secrets (#2292)
* Adding integration tests for the SecretsController
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* Sm 95 - Adding GetProjects endpoint (#2295)
* SM-114: Initial commit with create project endpoint (for SM)
* SM-114: Add Update Project route (for SM)
* SM-114: Fix file encodings
* Fix DI issue for SM Project Create/Update commands
* Adding GetProjectsByOrg
* fixing merge conflicts
* fix
* Updating to return empty list
* removing null check
Co-authored-by: Colton Hurst <colton@coltonhurst.com>
Co-authored-by: CarleyDiaz-Bitwarden <103955722+CarleyDiaz-Bitwarden@users.noreply.github.com>
* [SM-191] Create ServiceAccount Table (#2301)
* SM-191 Create ServiceAccount Table
* [SM-207] API for listing service accounts by organization (#2307)
* SM-207 list service accounts by org
* SM-96: Add ability to get project by id (#2314)
* SM-96: Small change to allow getting project by id
* Fix whitespace issue
* Add first integration test and fix date bug
* Ensure tests are consistent
* Add more project controller integration tests
* Remove commented delete for now
* [SM-187] Create ServiceAccounts (#2323)
* SM-187 Create & Update ServiceAccounts
* Remove extra new line src/Api/Controllers/ServiceAccountsController.cs
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* [SM-218] [SM-219] SM Auth flow (#2297)
* SM-282 Delete Projects (#2335)
* SM-282 delete & bulk delete projects
* Have delete commands return tuple with object
* Fix admin project not working after secrets manager changes (#2339)
* [SM-150] proj and secrets mapping (#2286)
* Beggining of changes for Project Secrets mapping
* Beggining of changes for project and secrets mapping
* Inital changes to add Mapping table for Project Secrets
* Resolve migration not working properly
* Indent sql
* Changes to try and return projects in the GetManyByOrganizaationIDAsync on SecretRepository.
* Changes made with Oscar
* Add reversemap
* running lint and removing comments
* Lint fixes
* fixing merge issues
* Trying to fix the DB issue
* DB fixes
* fixes
* removing unused space
* fixing lint issue
* final lint fix I hope
* removing manually added sql.sqlproj
* Lint changes and fixing the sql proj issues
* adding ServiceAccount to sql proj
* Removing ON DELETE CASCADE
* remove On delete cascade
* changes for deleting project and secret inside of the Organization_DeleteById procedure.
* changes for deleting project and secret inside of the Organization_DeleteById procedure.
* migration changes
* Updating constraints
* removing void
* remove spaces
* updating cipherRepo tests to be task instead of void
* fixing
* fixing
* test
* fix
* fix
* changes to remove circular dependency
* fixes
* sending guid and string name of the project over
* Update src/Sql/dbo/Tables/Secret.sql
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Update src/Sql/dbo/Tables/Project.sql
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* removing unused code
* Potential refactor (#2340)
* migrations
* Postgres migraiton
* Update src/Api/SecretManagerFeatures/Models/Response/SecretResponseModel.cs
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* rename file
* Update util/Migrator/DbScripts/2022-09-19_00_ProjectSecret.sql
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Lint fixes
* removing extra semi colon
* removing circular references with projects and secrets
* adding back projects
* Add ProjectFixture
* Update util/Migrator/DbScripts/2022-09-19_00_ProjectSecret.sql
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Update util/Migrator/DbScripts/2022-09-19_00_ProjectSecret.sql
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
Co-authored-by: CarleyDiaz-Bitwarden <103955722+CarleyDiaz-Bitwarden@users.noreply.github.com>
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* [SM-300] Access token endpoint (#2377)
* [SM-324] Add Organization to JWT claim (#2379)
* [SM-259] Add create access token endpoint for service accounts (#2411)
* Add create access token for service accounts
* [SM-259] Fix create access token scope initialization (#2418)
* Fix namespace for ServiceAccount command tests
* Remove "this" from SecretsManager requests
* Fix have scope be assigned a JSON list
* SM-99: Individual Project / Secrets Tab (#2399)
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* [SM-361] Add Support for never expiring ApiKeys (#2450)
* Update database to support never expiring ApiKey
* Update Api to support never expiring ApiKeys
* Fix unit test variable naming
* Remove required from model
* Fix spacing
* Add EF migrations
* Run dotnet format
* Update util/Migrator/DbScripts/2022-11-29_00_ApiKey_Never_Expire.sql
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* [SM-359] Fix project secrets migration (#2443)
* [SM-299] Add UseSecretsManager flag (#2413)
* [SM-193] Access Policy (#2359)
* [SM-371] Fix and re-enable parallel integration tests (#2460)
* Fix and re-enable parallel integration tests
* Fix package lock files
* Move fix to ApiApplicationFactory
* Run dotnet restore --force
* Run dotnet format
* Reset packages.lock.json files
* Add project access checks for listing
* SM-99: Add CreateSecretWithProject Integration Test (#2452)
* Add GetSecretsByProjectAsync endpoint
* Add GetManyByProjectIdAsync endpoint
* Update response model for GetSecretsByProjectAsync
* Include projects when returning secrets by project id
* SM-99: Add ability to specify projectId when creating a secret
* SM-99: Update tests to accomodate for new create secret parameter
* Fix failing test
* SM-99: Handle optional projectId for new secret in ToSecret()
* SM-99: Filter out deleted secrets on GetManyByProjectIdAsync() and small refactorings
* SM-99: make CreateAsync for secret more clear
* Add CreateSecretWithProject integration test
* Fix CreateSecretWithProject integration test for SM-99
* Run dotnet format
* Undo added space
* Refactor test
* Refactor CreateSecretWithProject API Integration test again
* Change to boolean flag
* [SM-379] Add SDK device type (#2486)
* Add support for service accounts
* Improve logic for project repository
* Add remaining client types
* Experiment with separate enum for access control
* Add access checks to update project
* Rework AccessClientType
* Add access checks to fetching project
* Add checks to delete project command (untested)
* Remove some service account stuff
* Add ServiceAccount to AccessClientType
* Change CS8509 to error and 8424 to ignore
* Remove unused utcNow
* Fix delete tests
* SM-73 changes (#2422)
* testing
* test2
* testing
* trying to save the projects associated with the secret
* changes
* more changes
* Fix EF error
* Second attempt
* Replace AddIfNotExists with Add.
* changes
* fixing await issue
* lint
* lint fixes
* suggested changes
* suggested changes
* updating tests
* fixing tests 2
* fixing tests
* fixing test
* fixing test
* fixing tests
* test
* testing
* fixing tests for the millionth time
* fixing tests
* allowing nulls for projectIds, fixing lint
* fixing tests
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* fixing tests
* fixing tests
* [SM-222] [SM-357] Squash Secrets Manager migrations (#2540)
* Fix tables not being cleaned up
* Fix migration
* Squash secrets manager migrations
* Reset EF to pre SM state
* Add EF migrations
* Fix unified docker
* Add missed copy
* Fix all unit tests
* draft changes to add access checks to secrets
* updating code
* more changes
* fixing issues
* updating logic for access checks
* updating secrets controller
* changes
* changes
* merging more
* changes
* updateS
* removing unused comment
* changes requested by Thomas
* more changes suggested by Thomas
* making thomas's suggested changes
* final changes
* Run dotnet format
* fixes
* run dotnet format
* Updating tests
* Suggested changes
* lint fixes
* Test updates
* Changes
* Fixes for tests, and dotnet format
* Fixes
* test fixes
* changes
* fix
* fix
* test fix
* removing duplicate
* Removing dupe
---------
Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com>
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
Co-authored-by: CarleyDiaz-Bitwarden <103955722+CarleyDiaz-Bitwarden@users.noreply.github.com>
Co-authored-by: Thomas Avery <tavery@bitwarden.com>
Co-authored-by: Colton Hurst <colton@coltonhurst.com>
* [SG-696] Organization Domain Claiming DB Objects and Migrations (#2394)
* model organization domain claiming
* Added migration scripts and db objects for mssql
* create and implement sql repository abstraction
* Added ef migrations for mysql and postgres. Removed time without timezone in previous migration
* made update on sql migration to use create or alter statement
* removed active column from OrganizationDomain table and decided to go with the hard delete approach
* Ran dotnet restore evaluate
* created DNS service verification using DNSClient (#2401)
* [SG-678] Api Endpoints for Domain Claiming (#2430)
* Added stored procedure to read claimed domains
* Updated Organization Domain Repository to include method to get claimed domains
* Updated domain entity and added request model
* Implemented organization domain respository and regsitered it in the various extensions
* Added create endpoint, request, responses and command
* Added endpoint to get domain by domain entry id
* Ran lint fix
* Added new stored procedure to get domains by organizattion id
* Moved migration scripts to init migration and added new procedure
* Renamed from domainId to Id
* Added and implemented GetDomainByOrganizationId
* Completed GetDomainByOrgId endpoint and started work on verify domain endpoint
* Updated the OrganizationDomain update procedure
* Added delete command and include other endpoints in the controller
* Remove test item from controller
* Remove test item from controller
* Changed access to allow admin, owners and manage sso roles
* changed logic for setting the initial value for the NextRunCount
* Renamed NextRunCount to JobRunCount
* Renamed NextRunCount to JobRunCount on mysql
* Renamed NextRunCount to JobRunCount on postgres
* Removed chaining pattern and added logic to get next run date
* Lint fix
* Added stored procedure to get organization sso details by email address
* Added endpoint to get sso details of an organization with email
* Added organizationDomainRepository to OrganizationController test
* merged with master and fixed conflicts
* [SG-661] Background Domain Verification Service (#2455)
* Added stored procedure to read claimed domains
* Updated Organization Domain Repository to include method to get claimed domains
* Updated domain entity and added request model
* Implemented organization domain respository and regsitered it in the various extensions
* Added create endpoint, request, responses and command
* Added endpoint to get domain by domain entry id
* Ran lint fix
* Added new stored procedure to get domains by organizattion id
* Moved migration scripts to init migration and added new procedure
* Renamed from domainId to Id
* Added and implemented GetDomainByOrganizationId
* Completed GetDomainByOrgId endpoint and started work on verify domain endpoint
* Updated the OrganizationDomain update procedure
* Added delete command and include other endpoints in the controller
* Remove test item from controller
* Remove test item from controller
* Changed access to allow admin, owners and manage sso roles
* Added stored procedure to get unverified domains by nextrundate
* Renamed stored procedure name
* Added domain verification service interface
* Added GetManyByNextRunDate to repository
* Added verification domain service implementation
* changed logic for setting the initial value for the NextRunCount
* This commit should be signed using my SSH key
* Renamed NextRunCount to JobRunCount
* Renamed NextRunCount to JobRunCount on mysql
* Renamed NextRunCount to JobRunCount on postgres
* Removed chaining pattern and added logic to get next run date
* Lint fix
* Implemented EF core version on the repository
* Created background job implementation and logic
* popped stash
* Updated stored procedure and EF script
* Lint fix
* Added logic to set next job count and the next run date when a verification is false
* Added logic to set next job count and the next run date when a verification is false
* Updated stored procedure name on repository
* Removed test trigger
* Lint fix
* Added trigger for job
* Added job count update after successful domain verification
* Lint fix
* Lint fix
* [SG-682] Add Event Log Entries to Organization Domain (#2492)
* Added domain name property to Event related objects
* Added organization domain claiming event types
* Created migration script and updated related event scripts to include domanName
* Added EF Migrations
* Renamed postres script file extension
* Added DomainName property to response model
* Added abstraction to interface
* Added system name to enum
* dotnet formattinfg fix
* Added events to organization domain actions
* Added LastCheckedDate property to domain
* Migrations and stored procedure updates with new column
* Added new stored procedure to get domain by org id and domain name
* Log organization domain event abstract method
* Ef migrattion to add new LastCheckedDate column
* Added duplicate domain exception
* Modified create command to include domain verification and last checked date and renamed methods used
* removed variable
* changed service lifetime
* Renamed trigger
* Initialed property in constructor
* Ensured domain name is stored as lower case
* Fixed suggestions from review
* Fixed suggestions from review
* Return Conflict Status on Organization Domain APIs (#2498)
* Added conflict response to end point to help translate error message on the client better
* Added conflict response to end point to help translate error message on the client better
* Set message with exception message or generic message
* Added last check date to response model (#2499)
* Fix/Check to throw exception when domain is claimed by another organization (#2503)
* Added check to ensure domain claimed by another organization cannot be verified
* Made error message consistent
* [SG-660] Organization Domain Maintenance (#2502)
* Added email template
* Mail service abstraction and implementation
* Mail template model
* Initial delete job commit
* Added SPs to get all unverifed domains after 72 hours and another to delete unverified domains after 7 days
* Moved all organization domain scripts to single file
* Added new scripts implementation for sqlserver and EF core
* Renamed service
* Formatting fix
* Added background service to send warning email and delete expired domains
* Renamed variable
* Added implementation for email warning to organization admins and for deleting expired domains after 7 days
* Added formatting
* Modified read if expired script to limit result to 4 days
* Added send mail abstract method and implementation
* Model used in build mail body
* Completed maintenace service
* Added comment to make logic clear
* Fixed cron expression (#2505)
* Modified procedure and methods to handle flexible verification adn expiration period (#2517)
* Merged with master
* [SG-908] Unit Tests for Organization Domain Claiming Feature (#2522)
* added test controlleer class
* added unit test for create command
* Added query tests
* Added tests for delete and verify command
* Formated code and added some more unit tests
* Fixed lint
* Added log event assertion to create command tests
* Added log event assertion to delete command tests
* Added unit tests for organization domain controller
* Added unit tests for organization domain service
* Modified test after merge
* fixed comment
* fixed comment
* fixed lint
* Defect/SG-977 - Org domain event logs missing details (#2573)
* SG-977 - (1) Refactor EventSystemUser.SSO to be EventSystemUser.DomainVerification to better match SCIM property and for easier display and translation on web client (2) Add new DeviceType of Server to be used on SCIM and Domain Verification logs so event log will show Server as client.
* SG-977 - SCIM bugfix - Restoring / Revoking user access via Jumpcloud activation / suspension did not properly log the events as SCIM events so the client side showed Unknown for both Client and Member.
* Run autoformat to fix lint errors
* SG-977 - Fixed broken test due to new device type logic in event service
* SG-976 - Add admin log and clean up log verbiage for domain verification (#2574)
* SG-976 - Add admin log and clean up log verbiage for domain verification
* SG-976 - (1) Use logInformation extension without exception (2) Clarify verbiage of logs
* SG-955 - On domain verification error or failure, set last checked da… (#2541)
* SG-955 - On domain verification error or failure, set last checked date on the org domain.
* SG-955 - Refactoring VerifyOrganizationDomain event logging to avoid duplication and increase efficiency (based on Gbubemi's PR feedback)
* Org Domain Background Verification service - set last checked date (#2599)
* Refactored OrganizationDomain repository to work with latest changes on code base
* Fixed formatting
* [SG-957] Cannot Delete Organizations due to FK Constraint (#2602)
* Added stored procedure to fix FX contstraint issue when deleting an organization
* Update stored procedures related to organization delete with OrganizationDomain_OrganizationDelete SP
* Fixed formatting
* Updated SP
* SG-990 - Log expired domains that are going to be deleted.
* Fix lint errors with auto format
* /home/runner/work/server/server/src/Core/OrganizationFeatures/OrganizationServiceCollectionExtensions.cs(107,2): error FINALNEWLINE: Fix final newline. Insert '\n'.
* Added missing bracket to fix compile error.
* Added imports for Domain Claiming classes that were lost on merge.
* Fixing broken unit tests + adding proper behavior for newly added SCIM logic changing device type
* Fix lint errors again
* Included domain name set in constructor (#2618)
* [SG-1001] Error Thrown When Verifying Sub Domains (#2621)
* Renamed exception to a more generic name that receives error message from the dns client and also added updates to job count and next run date
* Improved error logs by adding dns client error message
* Fixed formatting
* [SG-1001] Added event logs when a domain is not verified due to thrown exception (#2623)
* Added eevent logs when a domain is not verified due to thrown exception
* Fixed formatting
* Org Domain Verification - Small refactor to improve method/model name… (#2641)
* Org Domain Verification - Small refactor to improve method/model names and method locations - required refactoring of controller routes (I confirmed all behavior still functional)
* Fixed organization test controller issue
* Fixed lint
* Autoformat org domain controller
* Removing whitespace for lint argh, why does Rider not do this.
---------
Co-authored-by: gbubemismith <gsmithwalter@gmail.com>
* Tweak name of Request model to match Response model for ClaimedOrgDomain call
* [SG-1009] Users with Custom Role and "Manage SSO" permission don't receive verification failed email (#2645)
* Modified condition to pick up unverified domains after said period
* Fix to get emails of custom users with manage sso rights
* Formatted code
* Removed return that made background job exit on successful validation (#2648)
* [SG-1014] Unit Tests for Get Organization Sso Details (#2655)
* Added unit tests for GetOrgDomainSsoDetails
* renamed variable
* Adjust OrganizationDomainSsoDetails_ReadByEmail to use outer join so … (#2657)
* Adjust OrganizationDomainSsoDetails_ReadByEmail to use outer join so that claimed domain results will come back if an org has not yet setup a policy
* Removed migration as not needed
* Updated OrganizationDomainSsoDetails_ReadByEmail from original creation migration to use outer join & handle null policy results (and still return results)
* Fixed lint formatting
---------
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
Co-authored-by: Todd Martin <tmartin@bitwarden.com>
* Add service account access policy endpoints
* Add unit & integration tests for new endpoints
* Fix formatting on response models
* Cleanup unit tests
* Add permission checks to access policy endpoints
* Fix unit tests
* Add service account grant permission checks
* Add service account grant tests
* Add new endpoint unit tests
* Cleanup unit tests add integration tests
* User permission enum in create tests
* Swap to NotFoundException for access checks
* Add filter for potential grantees
* Add in AccessSecretsManager check and test it
* Add code review updates
* Code review updates
* Refactor potential grantees endpoint
* Code review updates
When the user is not part of an organization,
`UserBumpAccountRevisionDateByCipherIdQuery` doesn't work. In that case
we have to use `UserBumpAccountRevisionDateAsync` instead.
This was already done by most parts of the code but a few more were
missing.
Fixes#2615
* [EC-634] Extract GenerateLicenseAsync to a query (#2373)
* [EC-637] Add license sync to server (#2453)
* [EC-1036] Show correct license sync date (#2626)
* Update method name per new pattern
* SG-992 - Provider receives free org prompt when trying to auto scale org seats because plan type was missing and defaulting to free. PlanType has now been added to provider orgs returned as part of the profile sync.
* SG-992 - Updated Stored proc name to match convention
* EC-591 / SG-996 - (1) Update ProviderUserRepo.GetManyDetailsByProviderAsync to accept optional ProviderUserStatusType (2) Update OrganizationService.cs autoscaling user logic to check if an org is a provider org and send owner emails to the confirmed provider users instead of the managed org owners. Prevents scenario where newly created, managed orgs would not have an owner yet, and ownerEmails would be null and the email service would explode.
* EC-591 / SG-996 - Remove comments
* EC-591 / SG-996 - ES lint fix.
* SG-996 - SQL files must have SQL extensions.
* SG-996 / EC-591 - Update alter sql to be actually backwards compatible
* SG-996 - Make Status actually optional and backwards compatible for ProviderUserUserDetails_ReadByProvider.sql
* SG-992 - Update migrations to meet standards - (1) use CREATE OR ALTER and (2) Update view metadata after change if necessary
* EC-591 / SG-996 - Update Stored Proc migration to use proper standards: (1) Remove unnecessary code and (2) Use CREATE OR ALTER instead of just ALTER
* SG-992 / EC-591 / SG-996 - Refactor separate migrations into single migrations file per PR feedback
* SG-992/SG-996 - Add SyncControllerTests.cs with basic test suite + specific test suite to ensure provider orgs have plan type mapped to output product type properly.
* Fix lint issues by removing unnecessary using statements
* SG-992 - Refresh of view metadata has to target the stored procs that reference the view -- not the view itself.
* Add KdfMemory and KDFParallelism fields
* Revise argon2 support
This pull request makes the new attribues for argon2, kdfMemory and
kdfParallelism optional. Furthermore it adds checks for the argon2
parametrs and improves the database migration script.
* Add validation for argon2 in RegisterRequestModel
* update validation messages
* update sql scripts
* register data protection with migration factories
* add ef migrations
* update kdf option validation
* adjust validation
* Centralize and Test KDF Validation
Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>
Co-authored-by: Kyle Spearrin <kyle.spearrin@gmail.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* [EC-19] Move SSO Identifier to Org SSO endpoint (#2184)
* [EC-19] Move SSO identifier to Org SSO config endpoint
* [EC-19] Add Jira tech debt issue reference
* [EC-542] Update email communications (#2348)
* [EC-73] Add users alongside groups for collection details (#2358)
* [EC-73] feat: add new stored procedures
* [EC-73] feat: add migration
* [EC-73] chore: rename collection group details
* [EC-73] fix: migration
* [EC-73] feat: return users from dapper repo
* [EC-73] feat: EF support for collection users
* [EC-73] feat: implement updating users in EF
* [EC-73] feat: new collections with users in EF
* [EC-73] feat: create with users in dapper
* [EC-73] feat: update with users in dapper
* [EC-73] fix: collection service tests
* [EC-73] fix: lint
* [EC-73] feat: add new data model and rename for clarity
* [EC-73] chore: add future migrations
* [EC-16 / EC-86] Implement Groups Table Endpoints (#2280)
* [EC-16] Update Group endpoints/repositories to include necessary collection info
* [EC-16] Add delete many groups endpoint and command
* [EC-16] Add DeleteGroupCommand unit tests
* [EC-16] Update migration script
* [EC-16] Formatting
* [EC-16] Support modifying users via Post Group endpoint
- Add optional Users property to GroupRequestModel
- Add users parameter to the GroupService.SaveAsync() method
- Use the users argument to update the Group via the GroupRepository if present.
* [EC-16] Add/update Sprocs for bulk group deletion
- Add a new bump account revision date by multiple org ids sproc to be used by the delete many group sproc.
- Update the delete many group sproc to no longer require the organization Id as authorization is a business concern.
* [EC-16] No longer require org Id in delete many GroupRepository
The group repository should not care about which organization a group belongs to when being deleted. That is a business logic concern and is not necessary at the repository level.
* [EC-16] Remove org Id from delete many group command
- Remove the organization Id from the delete many method.
- Require Group entities instead of just group Ids so that group retrieval is completed outside the command.
- No longer return deleted groups as they are now being passed into the command.
- Update unit tests
* [EC-16] Remove org id from bulk delete group endpoint
- Remove the Org Id from the endpoint and make use of the updated delete many command
* [EC-16] Rename delete many groups sproc
* [EC-16] Update migration script
* [EC-16] Fix typo in migration script
* [EC-16] Fix order of operations in Group_DeleteByIds sproc
* [EC-16] Formatting
* [EC-86] Fix DeleteManyAsync parameter name
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* [EC-16] Add missing sproc to sqlproj file
* [EC-16] Improve GroupRepository method performance
Use GroupBy before marrying Groups and Collections to avoid iterating over all collections for every group)
* [EC-16] Use ToListAsync() to be consistent in the repository
* [EC-16] Fix collection grouping in the EF repository
* [EC-16] Adjust DeleteGroup command namespace to be less verbose
* [EC-16] Cleanup DeleteGroupCommandTests
* [EC-16] Formatting
* [EC-16] Ensure a non-null group collection list is provided
* [EC-16] Add bulk GroupEvents method to EventService
- Use the new method in the DeleteGroups command
* [EC-16] Remove bulk delete group Api response
The response is unnecessary and not used by the client
* [EC-16] Log OrganizationUser_UpdateGroups event in GroupService
Events are logged for users during both Group creation (all added users) and modification (only changed users).
* [EC-16] Fix failing unit test
* [EC-16] Rename newUsers variable per feedback
* [EC-16] Assert delete many group log events
Explicitly check for the event type and groups that are logged to the event service.
* [EC-16] Update DeleteManyAsync signature
Use ICollection<> instead of IEnumerable<> to avoid ambiguity of possible multiple enumeration
* [EC-16] Increment migration script name
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Add missing GO command to EC-73 migration script (#2433)
* [EC-15] Members Grid Api Support (#2485)
* [EC-15] Update OrganizationUser models to support list of collections and groups
* [EC-15] Add sprocs to query GroupUser and CollectionUser entities
* [EC-15] Update the OrganizationUserRepository to optionally fetch groups/collections
* [EC-15] Formatting
* [EC-15] Remove leftover repository method
* [EC-15] Fix table identifier inconsistency in sproc/migration
* Formatting
* [EC-14]: Server changes for Collection rows in Vault (#2360)
* [EC-14] add collection management methods to repo
- delete many, get many by ids, and get many with groups by org
* [EC-14] connection command tests had wrong folder name
* [EC-14] add collection repo methods to interface
* [EC-14] create DeleteCollectionCommand
* [EC-14] add getManyWithDetails collections endpoint
* [EC-14] add GetManyWithGroupsByUserId
* [EC-14] add call to interface
* [EC-14] add GetOrganizationCollectionsWIthGroups
- gets groups with collections
- add tests as well
* [EC-14] add call to interface
* [EC-14] add new coll call to controller
- gets collections with groups
* [EC-14] use new delete collection command
* [EC-14] add CollectionBulkDeleteRequestModel
* [EC-14] remove org from delete collection cmd
- move all permission checks to controller
- add tests to controller
- remove org check from repository method
* [EC-14] add migration and sprocs
* [EC-14] formatting
* [EC-14] revert delete permission check changes
* [EC-14] rename SelectionReadOnly to CollectionAccessSelection
* [EC-14] move GetOrganizationCollectionsWithGroups to controller
- there's no reason to have this logic in the service layer
- we can still test the permission check in the controller
- also renamed repo methods and changed return types
* [EC-14] include users in collection access details
* [EC-14] fix migration names
* [EC-14] bumpAccountRevisionDate when deleting collections
* [EC-14] new line in collection service
* [EC-14] formatting and add .sql to proc file
* [EC-14] more formatting
* [EC-14] formatting
* [EC-14] fix whitespace
* [EC-14] add datetime to event log of single delete
* [EC-14] remove ToList() from enumerables not returned
* [EC-14] fix permissions on "Create new collection"
- a custom user with "Create new collections" should see all collections
* [EC-14] add bulk events for collections
* [EC-14] group collections from db before iterating
* [EC-14] sql formatting and missing GO
* [EC-14] fix tests
* [EC-14] add null handling to repo methods
* [EC-14] fix account revision call
* [EC-14] formatting
* [EC-548] Member Details Group Tab (#2508)
* [EC-548] Update models to support groups
* [EC-548] Include groups in invite and save organization user methods
* [EC-548] Pass groups to service methods in member/user controllers
* [EC-548] Fix failing tests
* [EC-548] Add option to include groups for GET org user query
* Formatting
* [EC-887] Server fix for managers seeing options to edit/delete Collections they aren't assigned to (#2542)
* [EC-887] Add Assigned property to CollectionResponseModel
A new property to determine if a collection is assigned to the acting user; as some users, have the view all collections permission, but cannot see every collection's items
* [EC-887] Update logic for retrieving GET all collection details
- Only need to check the ViewAllCollections permission
- Calculate new Assigned response property based on the assignedOrgCollections list
* Formatting
* [EC-887] Update unit tests
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: Jacob Fink <jfink@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* ServerProtectedData for user entity
* remove using statements
* formatting
* use data protection libs
* no async
* add data protection to ef user repo
* switch to `SetApplicationName` per ASPNET docs
* null checks
* cleanup
* value converter for EF
* new line at eof
* fix using
* remove folder ref
* restore ctor
* fix lint
* use global constant
* UseApplicationServiceProvider for integration tests
* implement constant for DatabaseFieldProtectedPrefix
* Fix EF IntegrationTest
* restore original values after protect and save
* lint fixes
* Use Constants
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* [EC-758] Add environment variable GlobalSettings.Sso.EnforceSsoPolicyForAllUsers to enforce SSO Policy for all users
* [EC-758] Add integration tests
* [EC-758] Add Entities namespace to resolve ambiguous reference
* [EC-758] dotnet format
* [EC-758] Updated integration tests to check for logins with all user types
* [EC-758] Create new TestServer for each test
* [EC-758] Combine unit tests and refactor to use BitAutoData
* Add Sqlite as EF DB provider
Note: In-memory sqlite does not work across projects, since the migrator
only runs on the Admin project
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
* Include example sqlite connection string
* Add migrator assembly to sqlite connection
* Update initial migration to current schema state
* dotnet format 🤖
* Update package locks
* Respect name set in BW_SSL_KEY for cert generation (#2490)
(cherry picked from commit 2469e10110)
* [PS-2016] Add ability to change UID/GID for Bitwarden unified (#2495)
(cherry picked from commit c6fbe8cc44)
* Add SqliteMigrations project to unified Dockerfile
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
Co-authored-by: accolon <mail@accolon.net>
Co-authored-by: Vince Grassia <593223+vgrassia@users.noreply.github.com>
* [EC-654] Add CreateGroupCommand and UpdateGroupCommand
Added new CQRS commands CreateGroupCommand and UpdateGroupCommand Updated GroupService to use new commands
Edited existing GroupServiceTests and added new tests for the new commands
* [EC-654] dotnet format
* [EC-654] Replace GroupService.SaveAsync with CreateGroup and UpdateGroup commands
* [EC-654] Add assertions to check calls on IReferenceEventService
* [EC-654] Use AssertHelper.AssertRecent for DateTime properties
* [EC-654] Extracted database reads from CreateGroupCommand and UpdateGroupCommand. Added unit tests.
* [EC-654] Changed CreateGroupCommand and UpdateGroupCommand Validate method to private
* [EC-343] Added column 'UseCustomPermissions' to Organization table
* [EC-343] Added 'UseCustomPermissions' to Api responses
* [EC-343] Added 'UseCustomPermissions' to Admin view
* [EC-343] Add constraint to Organization table to have default UseCustomPermissions value
* [EC-343] Recreate OrganizationView to include UseCustomPermissions column
* [EC-343] Add MySql EF migrations
* [EC-343] Add Postgres EF migrations
* Revert "[EC-343] Add Postgres EF migrations"
This reverts commit 8f1654cb7d.
* [EC-343] Add Postgres migrations and script
* [EC-343] dotnet format
* [EC-343] Set 'Custom Permissions' feature as unchecked for teams plan
* [EC-343] Add CustomPermissions to plan upgrades
* [EC-343] Update CURRENT_LICENSE_FILE_VERSION
* [EC-343] Enable 'Custom Permissions' on Enterprise 2019 plan
* [EC-343] Updated migration script to include Enterprise 2019 plan
* [EC-343] Update CURRENT_LICENSE_FILE_VERSION to 10
* [EC-343] Move logic checking if Organization can use custom permissions to OrganizationService
* [EC-343] Add unit tests to validate UseCustomPermissions check
* [EC-343] Revert UseCustomPermissionsFlag migration
* [EC-343] Fix typo in OrganizationUserOrganizationDetailsViewQuery
* [EC-343] Add Postgres migrations without affecting other datetime column
* [EC-343] Create ValidateOrganizationCustomPermissionsEnabledAsync. Add more unit tests around CustomPermissions check
* [EC-343] Add curly brackets to if condition
* [EC-343] Rename unit tests
* Move RevisionDate Bumps to Extension Class
* Add Tests against live databases
* Run Formatting
* Fix Typo
* Fix Test Solution Typo
* Await ReplaceAsync
* Renamed and split up class to only query for an organization key
* Added a command class to create an organization api key
* Updated service registration and controller to include new changes
* Updated test cases to reflect refactor
* fixed lint issues
* Fixed PR comment
* Changed query for device to include userId
(cherry picked from commit 5e3f6db64b)
* Refactored push registration to allow notification on multiple clients
(cherry picked from commit 75d299ae269eeb8ac272c96458815a359ea6d085)
* Linting
(cherry picked from commit f1cf54ebef2019743834f667861f9b34c1661e11)
* Fixed compile error.
* Removed class that I created when refactoring.
* Removed references to PushNotification from DeviceService tests.
* Refactored to not pass back a result on Save
* Refactored to send requestDevice to push notifications.
* Fixed whitespace.
* Added missing Noop services.
(cherry picked from commit bdad6cfadaf2779c2e672027122c95ea64e3cf0b)
* Linting.
* Refactored to put the push token back in SaveAsync.
* Removed constructor parameter.
* Added back in ClearTokenAsync to reduce risk.
* Updated tab for linting.
* [EC-449] Added new Enum EventSystemUser
* [EC-449] Added SystemUser property to Event model
* [EC-449] Added SQL migration to add new column 'SystemUserType' to Event
* [EC-449] EF migrations
* [EC-449] Added EventSystemUser to EventResponseModel
* [EC-449] Saving EventSystemUser.SCIM on SCIM controller actions
* [EC-449] Updated Event_Create stored procedure on Sql project
* [EC-449] Fixed SystemUser column name on Event table
* [EC-507] SCIM CQRS Refactor - Groups/Put (#2269)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-531] Implemented CQRS for Groups Put and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Update PutGroupCommand to return Group
PutGroupCommand returns Group and GroupsController creates ScimGroupResponseModel response
* [EC-507] Remove Queries/Commands folders from Scim and Scim.Tests
* [EC-507] Remove unneeded check on empty provided memberIds
* [EC-507] SCIM CQRS Refactor - Groups/GetList (#2272)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-508] Implemented CQRS for Groups GetList and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions and renamed GetGroupsListCommand to GetGroupsListQuery
* [EC-507] Renamed AddScimCommands to AddScimGroupQueries
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Remove 'Queries' folder from Scim and Scim.Test
* [EC-507] Move ScimListResponseModel from GetGroupsListQuery to Scim.GroupsController
* [EC-507] Remove asserts on IGroupRepository.GetManyByOrganizationIdAsync from unit tests
* [EC-507] SCIM CQRS Refactor - Groups/Get (#2271)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-507] Implemented CQRS for Groups Get and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions and renamed GetGroupCommand to GetGroupQuery
* [EC-507] Renamed AddScimCommands to AddScimGroupQueries
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Sorted order of methods
* [EC-507] Removed GetGroupQuery and moved logic to controller
* [EC-507] Remove 'Queries' folder from Scim and Scim.Test
* [EC-507] SCIM CQRS Refactor - Groups/Patch (#2268)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-532] Implemented CQRS for Groups Patch and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Remove Queries/Commands folders from Scim and Scim.Tests
* [EC-507] Assert group.Name after saving. Assert userIds saved.
* [EC-508] SCIM CQRS Refactor - Users/Delete (#2261)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-539] Implemented CQRS for Users Delete and added unit tests
* [EC-508] Created ScimServiceCollectionExtensions
* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-508] Removed unneeded model from DeleteUserCommand. Removed unneeded dependencies from UsersController
* [EC-508] Removed Bit.Scim.Models dependency from DeleteUserCommandTests
* [EC-508] Deleted 'DeleteUserCommand' from SCIM; Created commands on Core 'DeleteOrganizationUserCommand', 'PushDeleteUserRegistrationOrganizationCommand' and 'OrganizationHasConfirmedOwnersExceptQuery'
* [EC-508] Changed DeleteOrganizationUserCommand back to using IOrganizationService
* [EC-508] Fixed DeleteOrganizationUserCommand unit tests
* [EC-508] Remove unneeded obsolete comments. Update DeleteUserAsync Obsolete comment with ticket reference
* [EC-508] Move DeleteOrganizationUserCommand to OrganizationFeatures folder
* [EC-508] SCIM CQRS Refactor - Users/Post (#2264)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-536] Implemented CQRS for Users Post and added unit tests
* [EC-508] Created ScimServiceCollectionExtensions
* [EC-508] Renamed AddScimCommands to AddScimUserCommands
* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-508] Catching NotFoundException on ExceptionHandlerFilter
* [EC-508] Remove Queries/Commands folders from Scim and Scim.Tests
* [EC-508] SCIM CQRS Refactor - Users/Patch (#2262)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-538] Implemented CQRS for Users Patch and added unit tests
* [EC-508] Added ScimServiceCollectionExtensions
* [EC-508] Removed HandleActiveOperationAsync method from UsersController
* [EC-508] Renamed AddScimCommands to AddScimUserCommands
* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-508] Removed unneeded dependencies from UsersController
* [EC-508] Remove 'Query' folder from Scim and Scim.Test
* [EC-507] SCIM CQRS Refactor - Groups/Post (#2270)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-530] Implemented CQRS for Groups Post and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Remove Queries/Commands folders from Scim and Scim.Test
* [EC-507] Remove unneeded skipIfEmpty argument. Updated unit test to check provided userIds
* [EC-507] Remove UpdateGroupMembersAsync from GroupsController
* [EC-508] SCIM CQRS Refactor - Users/GetList (#2265)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-535] Implemented CQRS for Users GetList and added unit tests
* [EC-508] Created ScimServiceCollectionExtensions and renamed GetUsersListCommand to GetUsersListQuery
* [EC-508] Renamed AddScimCommands to AddScimUserQueries
* [EC-508] Removed unneeded IUserRepository and IOptions<ScimSettings> from UsersController
* [EC-508] Sorted UsersController properties and dependencies
* [EC-508] Remove 'Queries' folder from Scim and Scim.Test
* [EC-508] Move ScimListResponseModel creation to Scim.UsersController
* [EC-508] Move ScimUserResponseModel creation to Scim.UsersController
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [EC-507] SCIM CQRS Refactor - Groups/Delete (#2267)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-533] Implemented CQRS for Groups Delete and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Move DeleteGroupCommand to OrganizationFeatures/OrganizationUsers
* [EC-507] Remove IGetUserQuery and move logic to UsersController. Remove unused references.
* [EC-449] Add overloads for EventService and GroupService methods that accept EventSystemUser as an argument
* [EC-507] Move IDeleteGroupCommand to Groups folder
* [EC-449] Add method overloads in IOrganizationService without EventSystemUser
* [EC-449] Add RevokeUserAsync overload without EventSystemUser
* [EC-449] Reverted OrganizationUsersController to not pass EventSystemUser argument
* [EC-449] Uncomment assertion in GroupServiceTests
* [EC-449] Update method overloads to not have nullable EventSystemUser
* [EC-449] Add unit tests around events that can store EventSystemUser
* [EC-449] Deleted private method GroupService.GroupRepositoryDeleteAsync
* [EC-449] Move Event log call to public DeleteUserAsync methods
* [EC-449] Move call to EventService log to public OrganizationService.InviteUsersAsync methods
* [EC-449] Move EventService call to public OrganizationService.DeleteUserAsync methods
* [EC-449] Move EventService call to OrganizationService.RevokeUserAsync methods
* [EC-449] Move EventService call to OrganizationService.RestoreUserAsync methods
* [EC-449] Add missing comma in SQL script for new SystemUser column on the Event table
* [EC-449] Remove Autofixture hack from OrganizationServiceTests
* [EC-449] Remove invitingUser param when methods expect an EventSystemUser param
* [EC-449] Move DeleteUserAsync validation to private method
* [EC-449] Move revokingUserId from RevokeUserAsync private method
* [EC-449] Move restoringUserId to RestoreUserAsync public method
* [EC-449] Set up OrganizationServiceTest Restore and Revoke tests on a single method
* [EC-449] SaveUsersSendInvitesAsync to return both OrganizationUsers and Events list
* [EC-449] Undo unintended change on CipherRepository
* [EC-449] Add SystemUser value to EventTableEntity
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [EC-507] SCIM CQRS Refactor - Groups/Put (#2269)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-531] Implemented CQRS for Groups Put and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Update PutGroupCommand to return Group
PutGroupCommand returns Group and GroupsController creates ScimGroupResponseModel response
* [EC-507] Remove Queries/Commands folders from Scim and Scim.Tests
* [EC-507] Remove unneeded check on empty provided memberIds
* [EC-507] SCIM CQRS Refactor - Groups/GetList (#2272)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-508] Implemented CQRS for Groups GetList and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions and renamed GetGroupsListCommand to GetGroupsListQuery
* [EC-507] Renamed AddScimCommands to AddScimGroupQueries
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Remove 'Queries' folder from Scim and Scim.Test
* [EC-507] Move ScimListResponseModel from GetGroupsListQuery to Scim.GroupsController
* [EC-507] Remove asserts on IGroupRepository.GetManyByOrganizationIdAsync from unit tests
* [EC-507] SCIM CQRS Refactor - Groups/Get (#2271)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-507] Implemented CQRS for Groups Get and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions and renamed GetGroupCommand to GetGroupQuery
* [EC-507] Renamed AddScimCommands to AddScimGroupQueries
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Sorted order of methods
* [EC-507] Removed GetGroupQuery and moved logic to controller
* [EC-507] Remove 'Queries' folder from Scim and Scim.Test
* [EC-507] SCIM CQRS Refactor - Groups/Patch (#2268)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-532] Implemented CQRS for Groups Patch and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Remove Queries/Commands folders from Scim and Scim.Tests
* [EC-507] Assert group.Name after saving. Assert userIds saved.
* [EC-508] SCIM CQRS Refactor - Users/Delete (#2261)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-539] Implemented CQRS for Users Delete and added unit tests
* [EC-508] Created ScimServiceCollectionExtensions
* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-508] Removed unneeded model from DeleteUserCommand. Removed unneeded dependencies from UsersController
* [EC-508] Removed Bit.Scim.Models dependency from DeleteUserCommandTests
* [EC-508] Deleted 'DeleteUserCommand' from SCIM; Created commands on Core 'DeleteOrganizationUserCommand', 'PushDeleteUserRegistrationOrganizationCommand' and 'OrganizationHasConfirmedOwnersExceptQuery'
* [EC-508] Changed DeleteOrganizationUserCommand back to using IOrganizationService
* [EC-508] Fixed DeleteOrganizationUserCommand unit tests
* [EC-508] Remove unneeded obsolete comments. Update DeleteUserAsync Obsolete comment with ticket reference
* [EC-508] Move DeleteOrganizationUserCommand to OrganizationFeatures folder
* [EC-508] SCIM CQRS Refactor - Users/Post (#2264)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-536] Implemented CQRS for Users Post and added unit tests
* [EC-508] Created ScimServiceCollectionExtensions
* [EC-508] Renamed AddScimCommands to AddScimUserCommands
* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-508] Catching NotFoundException on ExceptionHandlerFilter
* [EC-508] Remove Queries/Commands folders from Scim and Scim.Tests
* [EC-508] SCIM CQRS Refactor - Users/Patch (#2262)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-538] Implemented CQRS for Users Patch and added unit tests
* [EC-508] Added ScimServiceCollectionExtensions
* [EC-508] Removed HandleActiveOperationAsync method from UsersController
* [EC-508] Renamed AddScimCommands to AddScimUserCommands
* [EC-508] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-508] Removed unneeded dependencies from UsersController
* [EC-508] Remove 'Query' folder from Scim and Scim.Test
* [EC-507] SCIM CQRS Refactor - Groups/Post (#2270)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-530] Implemented CQRS for Groups Post and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Remove Queries/Commands folders from Scim and Scim.Test
* [EC-507] Remove unneeded skipIfEmpty argument. Updated unit test to check provided userIds
* [EC-507] Remove UpdateGroupMembersAsync from GroupsController
* [EC-508] SCIM CQRS Refactor - Users/GetList (#2265)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-535] Implemented CQRS for Users GetList and added unit tests
* [EC-508] Created ScimServiceCollectionExtensions and renamed GetUsersListCommand to GetUsersListQuery
* [EC-508] Renamed AddScimCommands to AddScimUserQueries
* [EC-508] Removed unneeded IUserRepository and IOptions<ScimSettings> from UsersController
* [EC-508] Sorted UsersController properties and dependencies
* [EC-508] Remove 'Queries' folder from Scim and Scim.Test
* [EC-508] Move ScimListResponseModel creation to Scim.UsersController
* [EC-508] Move ScimUserResponseModel creation to Scim.UsersController
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [EC-507] SCIM CQRS Refactor - Groups/Delete (#2267)
* [EC-390] Added Scim.Test unit tests project
* [EC-390] Added ConflictException type. Updated BadRequestException to have parameterless constructor. Updated NotFoundException to have constructor with a message parameter
* [EC-533] Implemented CQRS for Groups Delete and added unit tests
* [EC-507] Created ScimServiceCollectionExtensions
* [EC-507] Renamed AddScimCommands to AddScimGroupCommands
* [EC-507] Created ExceptionHandlerFilterAttribute on SCIM project
* [EC-507] Removed unneeded dependencies from GroupsController
* [EC-507] Move DeleteGroupCommand to OrganizationFeatures/OrganizationUsers
* [EC-507] Remove IGetUserQuery and move logic to UsersController. Remove unused references.
* [EC-507] Move IDeleteGroupCommand to Groups folder
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* PS-976 - update PutPartial endpoint to return cipher info, update Cipher_Move sproc to allow users to update a cipher's folder even if they don't have edit permissions
* PS-976- fix formatting errors
* PS-976 - per cr feedback updated EF query to match cipher_move sproc update, and updated cipher tests to align with existing tests
* Add new logic for validating encrypted strings
* Add benchmarks
* Formatting & Comments
* Move Debug assertion to just be a test
* Address PR feedback pt.1
* Address more PR feedback
* Formatting
* merge branch 'master' into 'encrypted-string-perf'
* Revert "merge branch 'master' into 'encrypted-string-perf'"
This reverts commit a20e127c9c.
* [SG-549] Commit Initial AuthRequest Repository (#2174)
* Model Passwordless
* Scaffold database for Passwordless
* Implement SQL Repository
* [SG-167] Base Passwordless API (#2185)
* Implement Passwordless notifications
* Implement Controller
* Add documentation to BaseRequestValidator
* Register AuthRequestRepo
* Remove ExpirationDate from the AuthRequest table
* [SG-407] Create job to delete expired requests (#2187)
* chore: init
* remove exp date
* fix: log name
* [SG-167] Added fingerprint phrase to response model. (#2233)
* Remove FailedLoginAttempt logic
* Block unknown devices
* Add EF Support for passwordless
* Got SignalR working for responses
* Added delete job method to EF repo
* Implement a GetMany API endpoint for AuthRequests
* Ran dotnet format
* Fix a merge issues
* Redated migration scripts
* tried sorting sqlproj
* Remove FailedLoginAttempts from SQL
* Groom Postgres script
* Remove extra commas from migration script
* Correct isSpent()
* [SG-167] Adde identity validation for passwordless requests. Registered IAuthRepository.
* [SG-167] Added origin of the request to response model
* Use display name for device identifier in response
* Add datetime conversions back to postgres migration script
* [SG-655] Add anonymous endpoint for checking if a device & user combo match
* [review] Consolidate error conditions
Co-authored-by: Brandon Maharaj <107377945+BrandonM-Bitwarden@users.noreply.github.com>
Co-authored-by: André Filipe da Silva Bispo <andrefsbispo@hotmail.com>
Co-authored-by: André Bispo <abispo@bitwarden.com>
* [EC-394] Added ScimApplicationFactory to handle tests for Scim controllers
* [EC-394] Added Scim.IntegrationTest project with GroupsControllerTests
* [EC-394] Fixed getting Guid Id from Operation Path
* [EC-394] Added tests for GroupsController Patch action
* [EC-394] Moved tests mock data setup to ScimApplicationFactory
* [EC-394] Updated IntegrationTestCommon packages.lock.json
* [EC-394] Updated ScimApplicationFactory and GroupsControllerTests; Added UsersController Tests
* [EC-394] dotnet format
* [EC-394] Updated Identity.IntegrationTest packages.lock.json
* [EC-394] Updated Scim.IntegrationTest packages.lock.json
* [EC-394] dotnet format
* [EC-394] Reverted change on getting GUID from GetOperationPathId
* [EC-394] Fixed sending userId on Patch_AddSingleMember_Success and Patch_RemoveSingleMember_Success
* [EC-394] Updated test to send request with two operations
* [EC-394] Removed Scim dependency from IntegrationTestCommon
* [EC-394] Reverted changes to packages.lock.json. Ran dotnet format
* [EC-394] Updated Scim.IntegrationTest packages.lock.json
* [EC-394] Updated GroupsControllerTests and UsersControllerTests to implement IAsyncLifetime to cleanup database before each test
* [EC-394] Declared variables for GetList parameters
* [EC-394] Updated AssertHelper.AssertPropertyEqual to compare each item in an IEnumerable property
* [EC-394] Updated AssertHelper.AssertPropertyEqual to check if type is comparable
* [EC-394] Removed unused variable from ScimApplicationFactory
* Apply suggestions from code review
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* [EC-394] Changed test users emails to domain example.com
* [EC-394] Restore solution file
* [EC-394] Added Scim.IntegrationTest to sln
* [EC-394] Updated integration tests to be clearer and check responses in detail
* [EC-394] Using NoopMailService to mock sending email invitations in tests
* [EC-394] Removed multiple references to the same variable ScimApplicationFactory.TestOrganizationId1
* [EC-394] Updated const variable names
* [EC-394] Using AssertPropertyEqualPredicate for IEnumerable properties
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Update ProviderService tests
* Use BitAutoData in CipherService tests
* Simplify UserCipher fixture
Because we use a single customizer for all ciphers, they all have the same userId.
* Clean up more cipher fixtures
* Swap Cipher Fixtures to BitCustomizeAttribute
* Clean up collection fixtures
* Clean up GroupFixtures
* Move SendService Tests to BitAutoData
* Clean up Organization Fixtures
TODO: The customize attributes should not be customizing more than one class
* Name files after the class they contain
* Clear up usage of CustomAutoDataAttribute in tests
* Clean up usages of InlineCustomAutoData
* format
* Manually merge with file-scoped-namespace changes
* Upgrade AspNetCoreRateLimiter and enable redis distributed cache for rate limiting.
- Upgrades AspNetCoreRateLimiter to 4.0.2, which required updating NewtonSoft.Json to 13.0.1.
- Replaces Microsoft.Extensions.Caching.Redis with Microsoft.Extensions.Caching.StackExchangeRedis as the original was deprecated and conflicted with the latest AspNetCoreRateLimiter
- Adds startup task to Program.cs for Api/Identity projects to support AspNetCoreRateLimiters breaking changes for seeding its stores.
- Adds a Redis connection string option to GlobalSettings
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Cleanup Redis distributed cache registration
- Add new AddDistributedCache service collection extension to add either a Memory or Redis distributed cache.
- Remove distributed cache registration from Identity service collection extension.
- Add IpRateLimitSeedStartupService.cs to run at application startup to seed the Ip rate limiting policies.
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Add caching configuration to SSO Startup.cs
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Add ProjectName as an instance name for Redis options
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Use distributed cache in CustomIpRateLimitMiddleware.cs
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Undo changes to Program.cs and launchSettings.json
* Move new service collection extensions to SharedWeb
* Upgrade Caching.StackExchangeRedis package to v6
* Cleanup and fix leftover merge conflicts
* Remove use of Newtonsoft.Json in distributed cache extensions
* Cleanup more formatting
* Fix formatting
* Fix startup issue caused by merge and fix integration test
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Linting fix
Signed-off-by: Shane Melton <smelton@bitwarden.com>
* Using correct ILogger on FreshdeskController
* Submitting custom fields to Freshdesk
* Set up FreshdeskController to use IHttpClientFactory
* Added unit test for FreshdeskController
* Moved ControllerCustomizeAttribute and ControllerCustomization to Common
* Modified FreshdeskController to use FreshdeskWebhookModel; Edited unit tests to use AutoFixture
* scim project stub
* some scim models and v2 controllers
* implement some v2 scim endpoints
* fix spacing
* api key auth
* EC-261 - SCIM Org API Key and connection type config
* EC-261 - Fix lint errors/formatting
* updates for okta implementation testing
* fix var ref
* updates from testing with Okta
* implement scim context via provider parsing
* support single and list of ids for add/remove groups
* log ops not handled
* touch up scim context
* group list filtering
* EC-261 - Additional SCIM provider types
* EC-265 - UseScim flag and license update
* EC-265 - SCIM provider type of default (0)
* EC-265 - Add Scim URL and update connection validation
* EC-265 - Model validation and cleanup for SCIM keys
* implement scim org connection
* EC-265 - Ensure ServiceUrl is not persisted to DB
* EC-265 - Exclude provider type from DB if not configured
* EC-261 - EF Migrations for SCIM
* add docker builds for scim
* EC-261 - Fix failing permissions tests
* EC-261 - Fix unit tests and pgsql migrations
* Formatting fixes from linter
* EC-265 - Remove service URL from scim config
* EC-265 - Fix unit tests, removed wayward validation
* EC-265 - Require self-hosted for billing sync org conn
* EC-265 - Fix formatting issues - whitespace
* EC-261 - PR feedback and cleanup
* scim constants rename
* no scim settings right now
* update project name
* delete package lock
* update appsettings configs for scim
* use default scim provider for context
Co-authored-by: Kyle Spearrin <kyle.spearrin@gmail.com>
Make all email template text left-aligned, excluding call-to-actions buttons which should remain centered
In the emails needing updates, remove font styling from HTML tags other than <td> and <p>
Add an additional margin above and below each call-to-action button
For emails that include only the “ignore” warning below the call-to-action button move the warning up, so the button is the last item displayed
Fix the unit test that allows developers to locally generate test emails
* Fix parameter name to match entity
* Deserialize policy data in object
* Add policy with config type to fixtures
* Return policy with deserialized config
* Use CoreHelper serializers
* Add master password reset on accept request
* Simplify policy data parsing
* Linter
* Added UnknownDeviceVerificationEnabled on User that is turned off when emergency contact takes over the account. Also added endpoints to get and update 2fa device verification settings. And Updated migrations & tests
* Applied dotnet format
* Fixed method rename call on TwoFactorController
* PS-589 Format fixes
* PS-589 changed UnknownDeviceVerificationEnabled to be non-nullable
* Add api integration tests
* Add some stuff
* Make program mockable
* Work on IntegrationTests for Identity
* Formatting
* Update packages.lock.json
* Update more packages.lock.json
* Update all packages.lock.json
* Fix InMemory configuration
* Actually fix test configuration
* Fix tests for CI
* Fix event service
* Force EF EventRepository
* Add client_credentials test
* Remove Api.IntegrationTest
* Remove Api Program changes
* Cleanup
* Add more Auth-Email tests
* Run formatting
* Address some PR feedback
* Move integration stuff to it's own common project
* Ran linter
* Add shared project to test solution
* Remove sln changes
* Clean usings
* Add more coverage
* Address PR feedback
* EC-198 added global setting flag for 2FA email on new device login feature
* EC-198 Removed is development environment check on 2FA email new device login given that we can now rely on the global settings feature flag
* EC-198 Improved IGlobalSettings and UserService code for testing
* Families for enterprise/split up organization sponsorship service (#1829)
* Split OrganizationSponsorshipService into commands
* Use tokenable for token validation
* Use interfaces to set up for DI
* Use commands over services
* Move service tests to command tests
* Value types can't be null
* Run dotnet format
* Update src/Core/OrganizationFeatures/OrganizationSponsorships/FamiliesForEnterprise/CancelSponsorshipCommand.cs
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Fix controller tests
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Families for enterprise/split up organization sponsorship service (#1875)
* Split OrganizationSponsorshipService into commands
* Use tokenable for token validation
* Use interfaces to set up for DI
* Use commands over services
* Move service tests to command tests
* Value types can't be null
* Run dotnet format
* Update src/Core/OrganizationFeatures/OrganizationSponsorships/FamiliesForEnterprise/CancelSponsorshipCommand.cs
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Fix controller tests
* Split create and send sponsorships
* Split up create sponsorship
* Add self hosted commands to dependency injection
* Add field to store cloud billing sync key on self host instances
* Fix typo
* Fix data protector purpose of sponsorship offers
* Split cloud and selfhosted sponsorship offer tokenable
* Generate offer from self hosted with all necessary auth data
* Add Required properties to constructor
* Split up cancel sponsorship command
* Split revoke sponsorship command between cloud and self hosted
* Fix/f4e multiple sponsorships (#1838)
* Use sponosorship from validate to redeem
* Update tests
* Format
* Remove sponsorship service
* Run dotnet format
* Fix self hosted only controller attribute
* Clean up file structure and fixes
* Remove unneeded tokenables
* Remove obsolete commands
* Do not require file/class prefix if unnecessary
* Update Organizaiton sprocs
* Remove unnecessary models
* Fix tests
* Generalize LicenseService path calculation
Use async file read and deserialization
* Use interfaces for testability
* Remove unused usings
* Correct test direction
* Test license reading
* remove unused usings
* Format
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Improve DataProtectorTokenFactory test coverage (#1884)
* Add encstring to server
* Test factory
Co-authored-by: Carlos Muentes <cmuentes@bitwarden.com>
* Format
* Remove SymmetricKeyProtectedString
Not needed
* Set ForcInvalid
Co-authored-by: Carlos Muentes <cmuentes@bitwarden.com>
* Feature/self f4e/api keys (#1896)
* Add in ApiKey
* Work on API Key table
* Work on apikey table
* Fix response model
* Work on information for UI
* Work on last sync date
* Work on sync status
* Work on auth
* Work on tokenable
* Work on merge
* Add custom requirement
* Add policy
* Run formatting
* Work on EF Migrations
* Work on OrganizationConnection
* Work on database
* Work on additional database table
* Run formatting
* Small fixes
* More cleanup
* Cleanup
* Add RevisionDate
* Add GO
* Finish Sql project
* Add newlines
* Fix stored proc file
* Fix sqlproj
* Add newlines
* Fix table
* Add navigation property
* Delete Connections when organization is deleted
* Add connection validation
* Start adding ID column
* Work on ID column
* Work on SQL migration
* Work on migrations
* Run formatting
* Fix test build
* Fix sprocs
* Work on migrations
* Fix Create table
* Fix sproc
* Add prints to migration
* Add default value
* Update EF migrations
* Formatting
* Add to integration tests
* Minor fixes
* Formatting
* Cleanup
* Address PR feedback
* Address more PR feedback
* Fix formatting
* Fix formatting
* Fix
* Address PR feedback
* Remove accidential change
* Fix SQL build
* Run formatting
* Address PR feedback
* Add sync data to OrganizationUserOrgDetails
* Add comments
* Remove OrganizationConnectionService interface
* Remove unused using
* Address PR feedback
* Formatting
* Minor fix
* Feature/self f4e/update db (#1930)
* Fix migration
* Fix TimesRenewed
* Add comments
* Make two properties non-nullable
* Remove need for SponsoredOrg on SH (#1934)
* Remove need for SponsoredOrg on SH
* Add Family prefix
* Add check for enterprise org on BillingSync key (#1936)
* [PS-10] Feature/sponsorships removed at end of term (#1938)
* Rename commands to min unique names
* Inject revoke command based on self hosting
* WIP: Remove/Revoke marks to delete
* Complete WIP
* Improve remove/revoke tests
* PR review
* Fail validation if sponsorship has failed to sync for 6 months
* Feature/do not accept old self host sponsorships (#1939)
* Do not accept >6mo old self-hosted sponsorships
* Give disabled grace period of 3 months
* Fix issues of Sql.proj differing from migration outcome (#1942)
* Fix issues of Sql.proj differing from migration outcome
* Yoink int tests
* Add missing assert helpers
* Feature/org sponsorship sync (#1922)
* Self-hosted side sync first pass
TODO:
* flush out org sponsorship model
* implement cloud side
* process cloud-side response and update self-hosted records
* sync scaffolding second pass
* remove list of Org User ids from sync and begin work on SelfHostedRevokeSponsorship
* allow authenticated http calls from server to return a result
* update models
* add logic for sync and change offer email template
* add billing sync key and hide CreateSponsorship without user
* fix tests
* add job scheduling
* add authorize attributes to endpoints
* separate models into data/model and request/response
* batch sync more, add EnableCloudCommunication for testing
* send emails in bulk
* make userId and sponsorshipType non nullable
* batch more on self hosted side of sync
* remove TODOs and formatting
* changed logic of cloud sync
* let BaseIdentityClientService handle all logging
* call sync from scheduled job on self host
* create bulk db operations for OrganizationSponsorships
* remove SponsoredOrgId from sync, return default from server http call
* validate BillingSyncKey during sync
revert changes to CreateSponsorshipCommand
* revert changes to ICreateSponsorshipCommand
* add some tests
* add DeleteExpiredSponsorshipsJob
* add cloud sync test
* remove extra method
* formatting
* prevent new sponsorships from disabled orgs
* update packages
* - pulled out send sponsorship command dependency from sync on cloud
- don't throw error when sponsorships are empty
- formatting
* formatting models
* more formatting
* remove licensingService dependency from selfhosted sync
* use installation urls and formatting
* create constructor for RequestModel and formatting
* add date parameter to OrganizationSponsorship_DeleteExpired
* add new migration
* formatting
* rename OrganizationCreateSponsorshipRequestModel to OrganizationSponsorshipCreateRequestModel
* prevent whole sync from failing if one sponsorship type is unsupported
* deserialize config and billingsynckey from org connection
* alter log message when sync disabled
* Add grace period to disabled orgs
* return early on self hosted if there are no sponsorships in database
* rename BillingSyncConfig
* send sponsorship offers from controller
* allow config to be a null object
* better exception handling in sync scheduler
* add ef migrations
* formatting
* fix tests
* fix validate test
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Fix OrganizationApiKey issues (#1941)
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Feature/org sponsorship self hosted tests (#1947)
* Self-hosted side sync first pass
TODO:
* flush out org sponsorship model
* implement cloud side
* process cloud-side response and update self-hosted records
* sync scaffolding second pass
* remove list of Org User ids from sync and begin work on SelfHostedRevokeSponsorship
* allow authenticated http calls from server to return a result
* update models
* add logic for sync and change offer email template
* add billing sync key and hide CreateSponsorship without user
* fix tests
* add job scheduling
* add authorize attributes to endpoints
* separate models into data/model and request/response
* batch sync more, add EnableCloudCommunication for testing
* send emails in bulk
* make userId and sponsorshipType non nullable
* batch more on self hosted side of sync
* remove TODOs and formatting
* changed logic of cloud sync
* let BaseIdentityClientService handle all logging
* call sync from scheduled job on self host
* create bulk db operations for OrganizationSponsorships
* remove SponsoredOrgId from sync, return default from server http call
* validate BillingSyncKey during sync
revert changes to CreateSponsorshipCommand
* revert changes to ICreateSponsorshipCommand
* add some tests
* add DeleteExpiredSponsorshipsJob
* add cloud sync test
* remove extra method
* formatting
* prevent new sponsorships from disabled orgs
* update packages
* - pulled out send sponsorship command dependency from sync on cloud
- don't throw error when sponsorships are empty
- formatting
* formatting models
* more formatting
* remove licensingService dependency from selfhosted sync
* use installation urls and formatting
* create constructor for RequestModel and formatting
* add date parameter to OrganizationSponsorship_DeleteExpired
* add new migration
* formatting
* rename OrganizationCreateSponsorshipRequestModel to OrganizationSponsorshipCreateRequestModel
* prevent whole sync from failing if one sponsorship type is unsupported
* deserialize config and billingsynckey from org connection
* add mockHttp nuget package and use httpclientfactory
* fix current tests
* WIP of creating tests
* WIP of new self hosted tests
* WIP self hosted tests
* finish self hosted tests
* formatting
* format of interface
* remove extra config file
* added newlines
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Fix Organization_DeleteById (#1950)
* Fix Organization_Delete
* Fix L
* [PS-4] block enterprise user from sponsoring itself (#1943)
* [PS-248] Feature/add connections enabled endpoint (#1953)
* Move Organization models to sub namespaces
* Add Organization Connection api endpoints
* Get all connections rather than just enabled ones
* Add missing services to DI
* pluralize private api endpoints
* Add type protection to org connection request/response
* Fix route
* Use nullable Id to signify no connection
* Test Get Connections enabled
* Fix data discoverer
* Also drop this sproc for rerunning
* Id is the OUTPUT of create sprocs
* Fix connection config parsing
* Linter fixes
* update sqlproj file name
* Use param xdocs on methods
* Simplify controller path attribute
* Use JsonDocument to avoid escaped json in our response/request strings
* Fix JsonDoc tests
* Linter fixes
* Fix ApiKey Command and add tests (#1949)
* Fix ApiKey command
* Formatting
* Fix test failures introduced in #1943 (#1957)
* Remove "Did you know?" copy from emails. (#1962)
* Remove "Did you know"
* Remove jsonIf helper
* Feature/fix send single sponsorship offer email (#1956)
* Fix sponsorship offer email
* Do not sanitize org name
* PR feedback
* Feature/f4e sync event [PS-75] (#1963)
* Create sponsorship sync event type
* Add InstallationId to Event model
* Add combinatorics-based test case generators
* Log sponsorships sync event on sync
* Linter and test fixes
* Fix failing test
* Migrate sprocs and view
* Remove unused `using`s
* [PS-190] Add manual sync trigger in self hosted (#1955)
* WIP add button to admin project for billing sync
* add connection table to view page
* minor fixes for self hosted side of sync
* fixes number of bugs for cloud side of sync
* deserialize before returning for some reason
* add json attributes to return models
* list of sponsorships parameter is immutable, add secondary list
* change sproc name
* add error handling
* Fix tests
* modify call to connection
* Update src/Admin/Controllers/OrganizationsController.cs
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* undo change to sproc name
* simplify logic
* Update src/Core/OrganizationFeatures/OrganizationSponsorships/FamiliesForEnterprise/Cloud/CloudSyncSponsorshipsCommand.cs
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* register services despite if self hosted or cloud
* remove json properties
* revert merge conflict
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Update OrganizationSponsorship valid until when updating org expirati… (#1966)
* Update OrganizationSponsorship valid until when updating org expiration date
* Linter fixes
* [PS-7] change revert email copy and add ValidUntil to sponsorship (#1965)
* change revert email copy and add ValidUntil to sponsorship
* add 15 days if no ValidUntil
* Chore/merge/self hosted families for enterprise (#1972)
* Log swallowed HttpRequestExceptions (#1866)
Co-authored-by: Hinton <oscar@oscarhinton.com>
* Allow for utilization of readonly db connection (#1937)
* Bump the pin of the download-artifacts action to bypass the broken GitHub api (#1952)
* Bumped version to 1.48.0 (#1958)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* [EC-160] Give Provider Users access to all org ciphers and collections (#1959)
* Bumped version to 1.48.1 (#1961)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Avoid sending "user need confirmation" emails when there are no org admins (#1960)
* Remove noncompliant users for new policies (#1951)
* [PS-284] Allow installation clients to not need a user. (#1968)
* Allow installation clients to not need a user.
* Run formatting
Co-authored-by: Andrei <30410186+Manolachi@users.noreply.github.com>
Co-authored-by: Hinton <oscar@oscarhinton.com>
Co-authored-by: sneakernuts <671942+sneakernuts@users.noreply.github.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Justin Baur <136baur@gmail.com>
* Fix/license file not found (#1974)
* Handle null license
* Throw hint message if license is not found by the admin project.
* Use CloudOrganizationId from Connection config
* Change test to support change
* Fix test
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Feature/f4e selfhosted rename migration to .sql (#1971)
* rename migration to .sql
* format
* Add unit tests to self host F4E (#1975)
* Work on tests
* Added more tests
* Run linting
* Address PR feedback
* Fix AssertRecent
* Linting
* Fixed empty tests
* Fix/misc self hosted f4e (#1973)
* Allow setting of ApiUri
* Return updates sponsorshipsData objects
* Bind arguments by name
* Greedy load sponsorships to email.
When upsert was called, it creates Ids on _all_ records, which meant
that the lazy-evaluation from this call always returned an empty list.
* add scope for sync command DI in job. simplify error logic
* update the sync job to get CloudOrgId from the BillingSyncKey
Co-authored-by: Jacob Fink <jfink@bitwarden.com>
* Chore/merge/self hosted families for enterprise (#1987)
* Log swallowed HttpRequestExceptions (#1866)
Co-authored-by: Hinton <oscar@oscarhinton.com>
* Allow for utilization of readonly db connection (#1937)
* Bump the pin of the download-artifacts action to bypass the broken GitHub api (#1952)
* Bumped version to 1.48.0 (#1958)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* [EC-160] Give Provider Users access to all org ciphers and collections (#1959)
* Bumped version to 1.48.1 (#1961)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Avoid sending "user need confirmation" emails when there are no org admins (#1960)
* Remove noncompliant users for new policies (#1951)
* [PS-284] Allow installation clients to not need a user. (#1968)
* Allow installation clients to not need a user.
* Run formatting
* Use accept flow for sponsorship offers (#1964)
* PS-82 check send 2FA email for new devices on TwoFactorController send-email-login (#1977)
* [Bug] Skip WebAuthn 2fa event logs during login flow (#1978)
* [Bug] Supress WebAuthn 2fa event logs during login process
* Formatting
* Simplified method call with new paramter input
* Update RealIps Description (#1980)
Describe the syntax of the real_ips configuration key with an example, to prevent type errors in the `setup` container when parsing `config.yml`
* add proper URI validation to duo host (#1984)
* captcha scores (#1967)
* captcha scores
* some api fixes
* check bot on captcha attribute
* Update src/Core/Services/Implementations/HCaptchaValidationService.cs
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
* ensure no path specific in duo host (#1985)
Co-authored-by: Andrei <30410186+Manolachi@users.noreply.github.com>
Co-authored-by: Hinton <oscar@oscarhinton.com>
Co-authored-by: sneakernuts <671942+sneakernuts@users.noreply.github.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Justin Baur <136baur@gmail.com>
Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
Co-authored-by: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com>
Co-authored-by: Jordan Cooks <notnamed@users.noreply.github.com>
Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
* Address feedback (#1990)
Co-authored-by: Justin Baur <admin@justinbaur.com>
Co-authored-by: Carlos Muentes <cmuentes@bitwarden.com>
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Co-authored-by: Justin Baur <136baur@gmail.com>
Co-authored-by: Andrei <30410186+Manolachi@users.noreply.github.com>
Co-authored-by: Hinton <oscar@oscarhinton.com>
Co-authored-by: sneakernuts <671942+sneakernuts@users.noreply.github.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
Co-authored-by: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com>
Co-authored-by: Jordan Cooks <notnamed@users.noreply.github.com>
Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
* Handle null user in captch tokenable
* Update test/Core.Test/Models/Business/Tokenables/HCaptchaTokenableTests.cs
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Add 2FA tests for organization
* Move user tests to be in same directory
* Fixed some names and namespace qualifications
* Add GetTwoFactorProviders tests
* Add tests to ensure we can read from name as well
* Start switch to System.Text.Json
* Work on switching to System.Text.Json
* Main work on STJ refactor
* Fix build errors
* Run formatting
* Delete unused file
* Use legacy for two factor providers
* Run formatter
* Add TokenProviderTests
* Run formatting
* Fix merge issues
* Switch to use JsonSerializer
* Address PR feedback
* Fix formatting
* Ran formatter
* Switch to async
* Ensure Enums are serialized as strings
* Fix formatting
* Enqueue single items as arrays
* Remove CreateAsync method on AzureQueueService
* Implement draft token service
* Add tokenizer and factory
* Handle expiring tokens through base class
* Allow direct token validity checks
* Add safe unprotect to tokenizer
* Add interface to tokenizer factory
* Use tokenizer
* Fix rebase
* Handle cleartext prefix in tokenizer base
* Use epoch milliseconds for expiration in tokens
* Use tokenizers
* Test tokens
* Linter fixes
* Add TokenizerFactory to DI services
* Test epoch milliseconds deserialization
* Use separate injectables for each token type
* Fix directory
* Add functional unprotect to token
* Fix namespace and correct object names
* Remove Tokenable interface
* Test remaining Tokens classes
* Dotnet format
* Fix sut provider errors with update
* Remove useless property
Co-authored-by: Hinton <oscar@oscarhinton.com>
* Create common test infrastructure project
* Add helpers to further type PlanTypes
* Enable testing of ASP.net MVC controllers
Controller properties have all kinds of validations in the background.
In general, we don't user properties on our Controllers, so the easiest
way to allow for Autofixture-based testing of our Controllers is to just
omit setting all properties on them.
* Workaround for broken MemberAutoDataAttribute
https://github.com/AutoFixture/AutoFixture/pull/1164 shows that only
the first test case is pulled for this attribute.
This is a workaround that populates the provided parameters, left to
right, using AutoFixture to populate any remaining.
* WIP: Organization sponsorship flow
* Add Attribute to use the Bit Autodata dependency chain
BitAutoDataAttribute is used to mark a Theory as autopopulating
parameters.
Extract common attribute methods to to a helper class. Cannot
inherit a common base, since both require inheriting from different
Xunit base classes to work.
* WIP: scaffolding for families for enterprise sponsorship flow
* Fix broken tests
* Create sponsorship offer (#1688)
* Initial db work (#1687)
* Add organization sponsorship databases to all providers
* Generalize create and update for database, specialize in code
* Add PlanSponsorshipType to db model
* Write valid json for test entries
* Initial scaffolding of emails (#1686)
* Initial scaffolding of emails
* Work on adding models for FamilyForEnterprise emails
* Switch verbage
* Put preliminary copy in emails
* Skip test
* Families for enterprise/stripe integrations (#1699)
* Add PlanSponsorshipType to static store
* Add sponsorship type to token and creates sponsorship
* PascalCase properties
* Require sponsorship for remove
* Create subscription sponsorship helper class
* Handle Sponsored subscription changes
* Add sponsorship id to subscription metadata
* Make sponsoring references nullable
This state indicates that a sponsorship has lapsed, but was not able to
be reverted for billing reasons
* WIP: Validate and remove subscriptions
* Update sponsorships on organization and org user delete
* Add friendly name to organization sponsorship
* Add sponsorship available boolean to orgDetails
* Add sponsorship service to DI
* Use userId to find org users
* Send f4e offer email
* Simplify names of f4e mail messages
* Fix Stripe org default tax rates
* Universal sponsorship redeem api
* Populate user in current context
* Add product type to organization details
* Use upgrade path to change sponsorship
Sponsorships need to be annual to match the GB add-on charge rate
* Use organization and auth to find organization sponsorship
* Add resend sponsorship offer api endpoint
* Fix double email send
* Fix sponsorship upgrade options
* Add is sponsored item to subscription response
* Add sponsorship validation to upcoming invoice webhook
* Add sponsorship validation to upcoming invoice webhook
* Fix organization delete sponsorship hooks
* Test org sponsorship service
* Fix sproc
* Create common test infrastructure project
* Add helpers to further type PlanTypes
* Enable testing of ASP.net MVC controllers
Controller properties have all kinds of validations in the background.
In general, we don't user properties on our Controllers, so the easiest
way to allow for Autofixture-based testing of our Controllers is to just
omit setting all properties on them.
* Workaround for broken MemberAutoDataAttribute
https://github.com/AutoFixture/AutoFixture/pull/1164 shows that only
the first test case is pulled for this attribute.
This is a workaround that populates the provided parameters, left to
right, using AutoFixture to populate any remaining.
* WIP: Organization sponsorship flow
* Add Attribute to use the Bit Autodata dependency chain
BitAutoDataAttribute is used to mark a Theory as autopopulating
parameters.
Extract common attribute methods to to a helper class. Cannot
inherit a common base, since both require inheriting from different
Xunit base classes to work.
* WIP: scaffolding for families for enterprise sponsorship flow
* Fix broken tests
* Create sponsorship offer (#1688)
* Initial db work (#1687)
* Add organization sponsorship databases to all providers
* Generalize create and update for database, specialize in code
* Add PlanSponsorshipType to db model
* Write valid json for test entries
* Initial scaffolding of emails (#1686)
* Initial scaffolding of emails
* Work on adding models for FamilyForEnterprise emails
* Switch verbage
* Put preliminary copy in emails
* Skip test
* Families for enterprise/stripe integrations (#1699)
* Add PlanSponsorshipType to static store
* Add sponsorship type to token and creates sponsorship
* PascalCase properties
* Require sponsorship for remove
* Create subscription sponsorship helper class
* Handle Sponsored subscription changes
* Add sponsorship id to subscription metadata
* Make sponsoring references nullable
This state indicates that a sponsorship has lapsed, but was not able to
be reverted for billing reasons
* WIP: Validate and remove subscriptions
* Update sponsorships on organization and org user delete
* Add friendly name to organization sponsorship
* Add sponsorship available boolean to orgDetails
* Add sponsorship service to DI
* Use userId to find org users
* Send f4e offer email
* Simplify names of f4e mail messages
* Fix Stripe org default tax rates
* Universal sponsorship redeem api
* Populate user in current context
* Add product type to organization details
* Use upgrade path to change sponsorship
Sponsorships need to be annual to match the GB add-on charge rate
* Use organization and auth to find organization sponsorship
* Add resend sponsorship offer api endpoint
* Fix double email send
* Fix sponsorship upgrade options
* Add is sponsored item to subscription response
* Add sponsorship validation to upcoming invoice webhook
* Add sponsorship validation to upcoming invoice webhook
* Fix organization delete sponsorship hooks
* Test org sponsorship service
* Fix sproc
* Fix build error
* Update emails
* Fix tests
* Skip local test
* Add newline
* Fix stripe subscription update
* Finish emails
* Skip test
* Fix unit tests
* Remove unused variable
* Fix unit tests
* Switch to handlebars ifs
* Remove ending email
* Remove reconfirmation template
* Switch naming convention
* Switch naming convention
* Fix migration
* Update copy and links
* Switch to using Guid in the method
* Remove unneeded css styles
* Add sql files to Sql.sqlproj
* Removed old comments
* Made name more verbose
* Fix SQL error
* Move unit tests to service
* Fix sp
* Revert "Move unit tests to service"
This reverts commit 1185bf3ec8.
* Do repository validation in service layer
* Fix tests
* Fix merge conflicts and remove TODO
* Remove unneeded models
* Fix spacing and formatting
* Switch Org -> Organization
* Remove single use variables
* Switch method name
* Fix Controller
* Switch to obfuscating email
* Fix unit tests
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Require SSO Policy to enable Key Connector
* Require that SSO is enabled to use Key Connector
* Fix error messages
"Key Connector" instead of "KeyConnector"
* Refactor dependent policy checks to handle expansion
* Block disabling Sso Policy if using Key Connector
* Update tests for policies required by Key Connector
* Fix tests
* Add test for Key Connector to require Sso Policy
* Add test: Sso config must be enabled to use Key Connector
* Added unit tests for StrictEmailAddressListAttribute in Bit.Core.Utilities
* Fixed list format; added a null test on StrictEmailAddressListAttribute in Utilities
* Check canScale when scaling for sso
* PR review
Use AutoAddSeats to add seats in a consistent way.
This requires moving user check out of that method.
* User logic moved out of method
* SqlServer split manage collection permission
* Clarify names
* Test claims generation
* Test permission serialization
* Simplify claims building
* Use new collections permissions
* Throw on use of deprecated permissions
* Lower case all claims
* Remove todos
* Clean nonexistent project from test solution
* JsonIgnore for both system and newtonsoft json
* Make migrations more robust to multiple runs
* remove duplicate usings
* Remove obsolete permissions
* Test solutions separately to detect failures
* Handle dos line endings
* Fix collections create/update permissions
* Change restore cipher to edit permissions
* Improve formatting
* Simplify map
* Refactor test
* Move policy checking logic inside PolicyService
* Refactor to use currentContext.ManagePolicies
* Make orgUser status check more semantic
* Fix single org user checks
* Use CoreHelper implementation to deserialize json
* Refactor policy checks to use db query
* Use new db query for enforcing 2FA Policy
* Add Policy_ReadByTypeApplicableToUser
* Stub out EF implementations
* Refactor: use PolicyRepository only
* Refactor tests
* Copy SQL queries to proj and update sqlproj file
* Refactor importCiphersAsync to use new method
* Add EF implementations and tests
* Refactor SQL to remove unnecessary operations
* Add autoscale fields to Organization
* Add autoscale setting changes
* Autoscale organizations
updates InviteUsersAsync to support all invite sources.
sends an email to org owners when organization autoscaled
* All organizations autoscale
Disabling autoscaling can be done by setting max seats to current seats.
We only warn about autoscaling on the first autoscaling event.
* Fix tests
* Bug fixes
* Simplify subscription update logic
* Void invoices that fail to delete
Stripe no longer allows deletion of draft invoices that were created as part of subscription updates. It's necessary to void out these invoices without sending tem to the client.
* Notify org owners when their subscription runs out of seats
* Use datetime for notifications
Allows for later re-sending email if we want to periodically remind
owners
* Do not update subscription if it already matches new quatity
* Include all migrations
* Remove unnecessary inline styling
* SubscriptionUpdate handles update decisions
* Remove unnecessary html setter
* PR review
* Use minimum access for class methods
* Adjust email address checking to handle unicode
* ASCII only in local part
* allow unicode in second-level and top-level domain
* Add PunyEncoding/Decoding methods and tests
* Use PunyEncoding for outbound email recipients
* Use MailKit for punycode, handle edge cases
* Punyencode all email addresses in mailServices
* Remove punyencoding from HandlebarsMailService
* Add to punyencoding tests
* Use more inclusive e-mail error
* Fix comment wording
* Apply StrictEmail checking to emergency access invite
* Remove punyDecode helper
* Title case buttons
* Throw if provider tries to add a non-business organization
* Allow only one admin OR owner roll in a free org per user
Boolean operators were not properly assocated
and ownership of an org was precluding confirmation into any other
organization
* Limit email length
* Require email domain with top level domain
* Do not allow email domains to end in invalid characters
* Fix free org tests
* Use StrictEmail validation for changing email
* Add trailing symbols to illegal chars in emails
* Add semicolon as always illegal
* Replace regex with MimeKit parsing, add unit test
* Add more unit tests
* Fix linting
* EF Database Support Init (#1221)
* scaffolding for ef support
* deleted old postgres repos
* added tables to oncreate
* updated all the things to .NET 5
* Addition to #1221: Migrated DockerFiles from dotnet/3.1 to 5.0 (#1223)
* Migrated DockerFiles from dotnet/3.1 to 5.0
* Migrated SSO/Dockerfile from dotnet 3.1 to 5.0
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* EFDatabaseSupport: Updated links and description in README.md and SETUP.md (#1232)
* Updated requirements in README.md
* Updated link to documentation of app-secrets
* upgraded dotnet version to 5.0
* Ef database support implementation examples (#1265)
* mostly finished testing the user repo
* finished testing user repo
* finished org, user, ssoconfig, and ssouser ef implementations
* removed unused prop
* fixed a sql file
* fixed a spacing issue
* fixed a spacing issue
* removed extra database creation
* refactoring
* MsSql => SqlServer
* refactoring
* code review fixes
* build fix
* code review
* continued attempts to fix the the build
* skipped another test
* finished all create test
* initial pass at several repos
* continued building out repos
* initial pass at several repos
* initial pass at device repo
* initial pass at collection repo
* initial run of all Entity Framework implementations
* signup, signin, create/edit ciphers works
* sync working
* all web vault pages seem to load with 100% 200s
* bulkcopy, folders, and favorites
* group and collection management
* sso, groups, emergency access, send
* get basic creates matching on all repos
* got everything building again post merge
* removed some IDE config files
* cleanup
* no more notimplemented methods in the cipher repo
* no more not implementeds everywhere
* cleaned up schema/navigation properties and fixed tests
* removed a sql comment that was written in c# style
* fixed build issues from merge
* removed unsupported db providers
* formatting
* code review refactors
* naming cleanup for queries
* added provider methods
* cipher repo cleanup
* implemented several missing procedures from the EF implementation surround account revision dates, keys, and storage
* fixed the build
* added a null check
* consolidated some cipher repo methods
* formatting fix
* cleaned up indentation of queries
* removed .idea file
* generated postgres migrations
* added mysql migrations
* formatting
* Bug Fixes & Formatting
* Formatting
* fixed a bug with bulk import when using MySql
* code review fixes
* fixed the build
* implemented new methods
* formatting
* fixed the build
* cleaned up select statements in ef queries
* formatting
* formatting
* formatting
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Added SsoConfigService tests
* Cleanup whitespace in SsoConfigServiceTests
* Work on PolicyServiceTests
* Refactor PolicyService to remove uneeded calls
* Implement Code Coverage
* Continued work on PolicyServiceTests
* Revert "Implement Code Coverage"
This reverts commit 4ada179ada.
* Fix PolicyServiceTests after rebasing
* Cleanup unused namespaces
* Added assertions that saving or logging of save aren't happening on exceptions
* Add support for bulk confirm
* Add missing sproc to migration
* Change ConfirmUserAsync to internally use ConfirmUsersAsync
* Refactor to be a bit more readable
* Change BulkReinvite and BulkRemove to return a list of errors/success
* Refactor
* Fix removing owner preventing removing non owners
* Add another unit test
* Use fixtures for OrganizationUser and Policies
* Fix spelling
* Increase organization max seat size from 30k to 2b (#1274)
* Increase organization max seat size from 30k to 2b
* PR review. Do not modify unless state matches expected
* Organization sync simultaneous event reporting (#1275)
* Split up azure messages according to max size
* Allow simultaneous login of organization user events
* Early resolve small event lists
* Clarify logic
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Improve readability
This comes at the cost of multiple serializations, but the
improvement in wire-time should more than make up for this
on message where serialization time matters
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Queue emails (#1286)
* Extract common Azure queue methods
* Do not use internal entity framework namespace
* Prefer IEnumerable to IList unless needed
All of these implementations were just using `Count == 1`,
which is easily replicated. This will be used when abstracting Azure queues
* Add model for azure queue message
* Abstract Azure queue for reuse
* Creat service to enqueue mail messages for later processing
Azure queue mail service uses Azure queues.
Blocking just blocks until all the work is done -- This is
how emailing works today
* Provide mail queue service to DI
* Queue organization invite emails for later processing
All emails can later be added to this queue
* Create Admin hosted service to process enqueued mail messages
* Prefer constructors to static generators
* Mass delete organization users (#1287)
* Add delete many to Organization Users
* Correct formatting
* Remove erroneous migration
* Clarify parameter name
* Formatting fixes
* Simplify bump account revision sproc
* Formatting fixes
* Match file names to objects
* Indicate if large import is expected
* Early pull all existing users we were planning on inviting (#1290)
* Early pull all existing users we were planning on inviting
* Improve sproc name
* Batch upsert org users (#1289)
* Add UpsertMany sprocs to OrganizationUser
* Add method to create TVPs from any object.
Uses DbOrder attribute to generate.
Sproc will fail unless TVP column order matches that of the db type
* Combine migrations
* Correct formatting
* Include sql objects in sql project
* Keep consisten parameter names
* Batch deletes for performance
* Correct formatting
* consolidate migrations
* Use batch methods in OrganizationImport
* Declare @BatchSize
* Transaction names limited to 32 chars
Drop sproc before creating it if it exists
* Update import tests
* Allow for more users in org upgrades
* Fix formatting
* Improve class hierarchy structure
* Use name tuple types
* Fix formatting
* Front load all reflection
* Format constructor
* Simplify ToTvp as class-specific extension
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Add API for bulk removal of org users
* Refactor OrganizationService, extract some common code.
* Add tests for DeleteUserAsync
* Add tests for DeleteUsers
* Formating
* Update test/Core.Test/Services/OrganizationServiceTests.cs
added a space
Co-authored-by: Addison Beck <abeck@bitwarden.com>
* [Reset Password] Organization Key Pair
* Fixed type in Organization_ReadAbilites sproc
* Fixed broken unit test by making sure premium addon was false
* Updated PublicKey decorator and removed unecessary validation
* Add send HideEmail to tables and models
* Respect HideEmail setting for Sends
* Recreate SendView to include new HideEmail column
* Enforce new Send policy
* Insert default value for new HideEmail column
* Delete c95d7598-71cc-4eab-8b08-aced0045198b.json
* Remove unrelated files
* Revert disableSendPolicy, add sendOptionsPolicy
* Minor style fixes
* Update SQL project with Send.HideEmail column
* unit test SendOptionsPolicy.DisableHideEmail
* Add SendOptionsPolicy to Portal
* Make HideEmail nullable, fix migrator script
* Remove NOT NULL constraint from HideEmail
* Fix style
* Make HideEmail nullable
* minor fixes to model and error message
* Move SendOptionsExemption banner
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Get limited life attachment download URL
This change limits url download to a 1min lifetime.
This requires moving to a new container to allow for non-public blob
access.
Clients will have to call GetAttachmentData api function to receive the download
URL. For backwards compatibility, attachment URLs are still present, but will not
work for attachments stored in non-public access blobs.
* Make GlobalSettings interface for testing
* Test LocalAttachmentStorageService equivalence
* Remove comment
* Add missing globalSettings using
* Simplify default attachment container
* Default to attachments containe for existing methods
A new upload method will be made for uploading to attachments-v2.
For compatibility for clients which don't use these new methods, we need
to still use the old container. The new container will be used only for
new uploads
* Remove Default MetaData fixture.
* Keep attachments container blob-level security for all instances
* Close unclosed FileStream
* Favor default value for noop services
* Add Disable Send policy
* Test DisableSend policy
* PR Review
* Update tests for using CurrentContext
This required making an interface for CurrentContext and mocking out
the members used. The interface can be expanded as needed for tests.
I moved CurrentContext to a folder, which changes the namespace
and causes a lot of file touches, but most are just adding a reference
* Fix failing test
* Update exemption to include all exempt users
* Move all CurrentContext usages to ICurrentContext
* PR review. Match messaging with Web
* Null checked org invite collections
* Null checked permissions on org invite
* Gave a static seat count to org invite fixture
* Null checked the right way
* Implemented Custom role and permissions
* Converted permissions columns to a json blob
* Code review fixes for Permissions
* sql build fix
* Update Permissions.cs
* formatting
* Update IOrganizationService.cs
* reworked a conditional
* built out tests for relevant organization service methods
* removed unused usings
* fixed a broken test and a bad empty string init
* removed 'Attribute' from some attribute instances
* Return revised ciphers on restore api call
* Return restored date from restore sproc
* Test Restore updates passed in ciphers
This is necessary for CipherController to appropriately return the
up-to-date ciphers without an extra db call to read them.
* Add missing SELECT
* Sorted usings
* Added CoreHelpersTests
* Added CloneObject test
* Added comments to SelfHostedAttributeTests
* Changed private variable declaration to be inline with the rest of the project
* Changed to SUT naming scheme
* Scaffolded AppleIapServiceTests
* Scaffolded I18nServiceTests.cs
* Scaffolded I18nViewLocalizerTests
* Scaffolded LocalSendStorageServiceTests
* Added tests to ReadableBytesSize_Success
* Add more CleanCertificateThumbprint tests
* Added more tests for the ExtendQuery method
* Removed AppleIapServiceTests
* Removed I18nServiceTests
* Removed I18nViewLocalizerTests
* Removed LocalSendStorageServiceTests
* Converted Batch_Success to theory with InlineData
* Simplified Batch_Success so there is less branching and more accuracy
* Switched to using size variable to format readable bytes for any number lower than 1024
* Fixed test data to work in all locales
* Add last updated validation to cipher replacements
* Add AutoFixture scaffolding.
AutoDataAttributes and ICustomizations are meant to automatically
produce valid test input. Examples are the Cipher customizations,
which enforce the model's mutual exclusivity of UserId and
OrganizationId.
FixtureExtensions create a fluent way to generate SUTs. We currently
use parameter injection to fascilitate service testing, which is nicely
handled by AutoNSubstitute. However, in order to gain access to the
substitutions, we need to Freeze them onto the Fixture. The For fluent
method allows specifying a Freeze to a specific type's constructor and
optionally to a parameter name in that constructor.
* Unit tests for single Cipher update version checks
* Fix test runner
Test runner requires Microsoft.NET.Test.Sdk
* Move to provider model for SUT generation
This model differs from previous in that you no longer need to specify
which dependencies you would like access to. Instead, all are
remembered and can be queried through the sutProvider.
* User cipher provided by Put method reads
Every put method already reads all relevant ciphers from database,
there's no need to re-read them.
JSON serialization of datetimes seems to leave truncate at second
precision. Verify last known date time is within one second rather than
exact.
* validate revision date for share many requests
* Update build script to use Github environment path
Co-authored-by: Matt Gibson <mdgibson@Matts-MBP.lan>
* added column ApiKey to dbo.User
* added dbo.User.ApiKey to User_Update
* added dbo.User.ApiKey to User_Create
* wrote migration script for implementing dbo.User.ApiKey
* Added ApiKey prop to the User table model
* Created AccountsController method for getting a user's API Key
* Created AccountsController method for rotating a user API key
* Added support to ApiClient for passed-through ClientSecrets when the request comes from the cli
* Added a new conditional to ClientStore to account for user API keys
* Wrote unit tests for new user API Key methods
* Added a refresh of dbo.UserView to new migration script for ApiKey
* Let client_credentials grants into the custom token logic
* Cleanup for ApiKey auth in the CLI feature
* Created user API key on registration
* Removed uneeded code for user API keys
* Changed a .Contains() to a .StartsWith() in ClientStore
* Changed index that an array is searched on
* Added more claims to the user apikey clients
* Moved some claim finding logic to a helper method
* Initial commit of accept user during set password flow
* changed new org user from accepted to invited // moved another check to token accept function
* Revised some white space // Moved business logic to UserService
* Fixed UserServiceTest
* Removed some white-space
* Removed more white-space
* Final white-space issues
* facilitate linking/unlinking existing users from an sso enabled org
* added user_identifier to identity methods for sso
* moved sso user delete method to account controller
* fixed a broken test
* Update AccountsController.cs
* facilitate linking/unlinking existing users from an sso enabled org
* added user_identifier to identity methods for sso
* moved sso user delete method to account controller
* fixed a broken test
* added a token to the existing user sso link flow
* added a token to the existing user sso link flow
* fixed a typo
* added an event log for unlink ssoUser records
* fixed a merge issue
* fixed a busted test
* fixed a busted test
* ran a formatter over everything & changed .vscode settings in .gitignore
* chagned a variable to use string interpolation
* removed a blank line
* Changed TokenPurpose enum to a static class of strings
* code review cleanups
* formatting fix
* Changed parameters & logging for delete sso user
* changed th method used to get organization user for deleting sso user records
Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>