Copy disabled (too large)
Download .txt
Showing preview only (17,224K chars total). Download the full file to get everything.
Repository: bitwarden/server
Branch: main
Commit: fae3e95492a6
Files: 6056
Total size: 57.1 MB
Directory structure:
gitextract_xssbbuf5/
├── .checkmarx/
│ └── config.yml
├── .claude/
│ ├── CLAUDE.md
│ ├── commands/
│ │ └── bump-rust-sdk.md
│ ├── hooks/
│ │ ├── README.md
│ │ ├── rust-sdk-surface-check.sh
│ │ └── seeder-docs-check.sh
│ ├── settings.json
│ └── skills/
│ └── bump-rust-sdk/
│ ├── SKILL.md
│ └── references/
│ ├── api-surface.md
│ └── methodology.md
├── .config/
│ └── dotnet-tools.json
├── .devcontainer/
│ ├── bitwarden_common/
│ │ └── docker-compose.yml
│ ├── community_dev/
│ │ ├── devcontainer.json
│ │ └── postCreateCommand.sh
│ └── internal_dev/
│ ├── devcontainer.json
│ ├── docker-compose.override.yml
│ ├── onCreateCommand.sh
│ └── postCreateCommand.sh
├── .dockerignore
├── .editorconfig
├── .git-blame-ignore-revs
├── .git-hooks/
│ └── pre-commit
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yml
│ │ ├── bw-lite.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── codecov.yml
│ ├── renovate.json5
│ └── workflows/
│ ├── _move_edd_db_scripts.yml
│ ├── automatic-issue-responses.yml
│ ├── build.yml
│ ├── build_target.yml
│ ├── cleanup-rc-branch.yml
│ ├── code-references.yml
│ ├── enforce-labels.yml
│ ├── ephemeral-environment.yml
│ ├── load-test.yml
│ ├── protect-files.yml
│ ├── publish.yml
│ ├── release.yml
│ ├── repository-management.yml
│ ├── respond.yml
│ ├── review-code.yml
│ ├── scan.yml
│ ├── stale-bot.yml
│ ├── test-database.yml
│ └── test.yml
├── .gitignore
├── .run/
│ ├── Full Server - Self-hosted.run.xml
│ ├── Full Server.run.xml
│ ├── Min Server - Self-hosted.run.xml
│ └── Min Server.run.xml
├── CONTRIBUTING.md
├── Directory.Build.props
├── LICENSE.txt
├── LICENSE_AGPL.txt
├── LICENSE_BITWARDEN.txt
├── LICENSE_FAQ.md
├── README.md
├── SECURITY.md
├── TRADEMARK_GUIDELINES.md
├── bitwarden-server.sln
├── bitwarden_license/
│ ├── README.md
│ ├── src/
│ │ ├── Commercial.Core/
│ │ │ ├── AdminConsole/
│ │ │ │ ├── Providers/
│ │ │ │ │ ├── CreateProviderCommand.cs
│ │ │ │ │ └── RemoveOrganizationFromProviderCommand.cs
│ │ │ │ └── Services/
│ │ │ │ └── ProviderService.cs
│ │ │ ├── Billing/
│ │ │ │ └── Providers/
│ │ │ │ ├── Models/
│ │ │ │ │ └── ProviderClientInvoiceReportRow.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ └── GetProviderWarningsQuery.cs
│ │ │ │ └── Services/
│ │ │ │ ├── BusinessUnitConverter.cs
│ │ │ │ └── ProviderBillingService.cs
│ │ │ ├── Commercial.Core.csproj
│ │ │ ├── SecretsManager/
│ │ │ │ ├── AuthorizationHandlers/
│ │ │ │ │ ├── AccessPolicies/
│ │ │ │ │ │ ├── ProjectPeopleAccessPoliciesAuthorizationHandler.cs
│ │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesAuthorizationHandler.cs
│ │ │ │ │ │ ├── SecretAccessPoliciesUpdatesAuthorizationHandler.cs
│ │ │ │ │ │ ├── ServiceAccountGrantedPoliciesAuthorizationHandler.cs
│ │ │ │ │ │ └── ServiceAccountPeopleAccessPoliciesAuthorizationHandler.cs
│ │ │ │ │ ├── Projects/
│ │ │ │ │ │ └── ProjectAuthorizationHandler.cs
│ │ │ │ │ ├── Secrets/
│ │ │ │ │ │ ├── BulkSecretAuthorizationHandler.cs
│ │ │ │ │ │ └── SecretAuthorizationHandler.cs
│ │ │ │ │ └── ServiceAccounts/
│ │ │ │ │ └── ServiceAccountAuthorizationHandler.cs
│ │ │ │ ├── Commands/
│ │ │ │ │ ├── AccessPolicies/
│ │ │ │ │ │ ├── UpdateProjectServiceAccountsAccessPoliciesCommand.cs
│ │ │ │ │ │ └── UpdateServiceAccountGrantedPoliciesCommand.cs
│ │ │ │ │ ├── AccessTokens/
│ │ │ │ │ │ └── CreateAccessTokenCommand.cs
│ │ │ │ │ ├── Porting/
│ │ │ │ │ │ └── ImportCommand.cs
│ │ │ │ │ ├── Projects/
│ │ │ │ │ │ ├── CreateProjectCommand.cs
│ │ │ │ │ │ ├── DeleteProjectCommand.cs
│ │ │ │ │ │ └── UpdateProjectCommand.cs
│ │ │ │ │ ├── Requests/
│ │ │ │ │ │ └── RequestSMAccessCommand.cs
│ │ │ │ │ ├── Secrets/
│ │ │ │ │ │ ├── CreateSecretCommand.cs
│ │ │ │ │ │ ├── DeleteSecretCommand.cs
│ │ │ │ │ │ └── UpdateSecretCommand.cs
│ │ │ │ │ ├── ServiceAccounts/
│ │ │ │ │ │ ├── CreateServiceAccountCommand.cs
│ │ │ │ │ │ ├── DeleteServiceAccountsCommand.cs
│ │ │ │ │ │ ├── RevokeAccessTokensCommand.cs
│ │ │ │ │ │ └── UpdateServiceAccountCommand.cs
│ │ │ │ │ └── Trash/
│ │ │ │ │ ├── EmptyTrashCommand.cs
│ │ │ │ │ └── RestoreTrashCommand.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ ├── AccessClientQuery.cs
│ │ │ │ │ ├── AccessPolicies/
│ │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesUpdatesQuery.cs
│ │ │ │ │ │ ├── SameOrganizationQuery.cs
│ │ │ │ │ │ ├── SecretAccessPoliciesUpdatesQuery.cs
│ │ │ │ │ │ └── ServiceAccountGrantedPolicyUpdatesQuery.cs
│ │ │ │ │ ├── Projects/
│ │ │ │ │ │ └── MaxProjectsQuery.cs
│ │ │ │ │ ├── Secrets/
│ │ │ │ │ │ └── SecretsSyncQuery.cs
│ │ │ │ │ └── ServiceAccounts/
│ │ │ │ │ ├── CountNewServiceAccountSlotsRequiredQuery.cs
│ │ │ │ │ └── ServiceAccountSecretsDetailsQuery.cs
│ │ │ │ ├── SecretsManagerCollectionExtensions.cs
│ │ │ │ └── SecretsManagerServiceCollectionExtensions.cs
│ │ │ └── Utilities/
│ │ │ └── ServiceCollectionExtensions.cs
│ │ ├── Commercial.Infrastructure.EntityFramework/
│ │ │ ├── Commercial.Infrastructure.EntityFramework.csproj
│ │ │ └── SecretsManager/
│ │ │ ├── Repositories/
│ │ │ │ ├── AccessPolicyRepository.cs
│ │ │ │ ├── ProjectRepository.cs
│ │ │ │ ├── SecretRepository.cs
│ │ │ │ ├── SecretVersionRepository.cs
│ │ │ │ └── ServiceAccountRepository.cs
│ │ │ └── SecretsManagerEFServiceCollectionExtensions.cs
│ │ ├── Scim/
│ │ │ ├── Context/
│ │ │ │ ├── IScimContext.cs
│ │ │ │ └── ScimContext.cs
│ │ │ ├── Controllers/
│ │ │ │ ├── InfoController.cs
│ │ │ │ └── v2/
│ │ │ │ ├── GroupsController.cs
│ │ │ │ └── UsersController.cs
│ │ │ ├── Dockerfile
│ │ │ ├── Groups/
│ │ │ │ ├── GetGroupsListQuery.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IGetGroupsListQuery.cs
│ │ │ │ │ ├── IPatchGroupCommand.cs
│ │ │ │ │ ├── IPostGroupCommand.cs
│ │ │ │ │ └── IPutGroupCommand.cs
│ │ │ │ ├── PatchGroupCommand.cs
│ │ │ │ ├── PostGroupCommand.cs
│ │ │ │ └── PutGroupCommand.cs
│ │ │ ├── Models/
│ │ │ │ ├── BaseScimGroupModel.cs
│ │ │ │ ├── BaseScimModel.cs
│ │ │ │ ├── BaseScimUserModel.cs
│ │ │ │ ├── GetGroupsQueryParamModel.cs
│ │ │ │ ├── GetUsersQueryParamModel.cs
│ │ │ │ ├── ScimErrorResponseModel.cs
│ │ │ │ ├── ScimGroupRequestModel.cs
│ │ │ │ ├── ScimGroupResponseModel.cs
│ │ │ │ ├── ScimListResponseModel.cs
│ │ │ │ ├── ScimMetaModel.cs
│ │ │ │ ├── ScimPatchModel.cs
│ │ │ │ ├── ScimUserRequestModel.cs
│ │ │ │ └── ScimUserResponseModel.cs
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── Scim.csproj
│ │ │ ├── ScimSettings.cs
│ │ │ ├── Startup.cs
│ │ │ ├── Users/
│ │ │ │ ├── GetUsersListQuery.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IGetUsersListQuery.cs
│ │ │ │ │ ├── IPatchUserCommand.cs
│ │ │ │ │ └── IPostUserCommand.cs
│ │ │ │ ├── PatchUserCommand.cs
│ │ │ │ └── PostUserCommand.cs
│ │ │ ├── Utilities/
│ │ │ │ ├── ApiKeyAuthenticationHandler.cs
│ │ │ │ ├── ApiKeyAuthenticationOptions.cs
│ │ │ │ ├── ExceptionHandlerFilterAttribute.cs
│ │ │ │ ├── ScimConstants.cs
│ │ │ │ ├── ScimContextMiddleware.cs
│ │ │ │ └── ScimServiceCollectionExtensions.cs
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.Production.json
│ │ │ ├── appsettings.QA.json
│ │ │ ├── appsettings.json
│ │ │ ├── build.ps1
│ │ │ ├── build.sh
│ │ │ └── entrypoint.sh
│ │ └── Sso/
│ │ ├── Controllers/
│ │ │ ├── AccountController.cs
│ │ │ ├── HomeController.cs
│ │ │ ├── InfoController.cs
│ │ │ └── MetadataController.cs
│ │ ├── Dockerfile
│ │ ├── IdentityServer/
│ │ │ ├── DistributedCachePersistedGrantStore.cs
│ │ │ └── OidcIdentityClient.cs
│ │ ├── Models/
│ │ │ ├── ErrorViewModel.cs
│ │ │ ├── RedirectViewModel.cs
│ │ │ ├── SamlEnvironment.cs
│ │ │ └── SsoPreValidateResponseModel.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Sass/
│ │ │ ├── site.scss
│ │ │ └── webfonts.css
│ │ ├── Sso.csproj
│ │ ├── Startup.cs
│ │ ├── Utilities/
│ │ │ ├── ClaimsExtensions.cs
│ │ │ ├── DiscoveryResponseGenerator.cs
│ │ │ ├── DynamicAuthenticationScheme.cs
│ │ │ ├── DynamicAuthenticationSchemeProvider.cs
│ │ │ ├── ExtendedOptionsMonitorCache.cs
│ │ │ ├── IDynamicAuthenticationScheme.cs
│ │ │ ├── IExtendedOptionsMonitorCache.cs
│ │ │ ├── OpenIdConnectOptionsExtensions.cs
│ │ │ ├── OpenIdConnectScopes.cs
│ │ │ ├── PersistedGrantsDistributedCacheConstants.cs
│ │ │ ├── Saml2OptionsExtensions.cs
│ │ │ ├── SamlClaimTypes.cs
│ │ │ ├── SamlNameIdFormats.cs
│ │ │ ├── SamlPropertyKeys.cs
│ │ │ ├── ServiceCollectionExtensions.cs
│ │ │ └── SsoAuthenticationMiddleware.cs
│ │ ├── Views/
│ │ │ ├── Shared/
│ │ │ │ ├── Error.cshtml
│ │ │ │ ├── Redirect.cshtml
│ │ │ │ └── _Layout.cshtml
│ │ │ ├── _ViewImports.cshtml
│ │ │ └── _ViewStart.cshtml
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ ├── entrypoint.sh
│ │ ├── package.json
│ │ ├── webfonts.list
│ │ └── webpack.config.js
│ └── test/
│ ├── Bitwarden.License.Tests.proj
│ ├── Commercial.Core.Test/
│ │ ├── AdminConsole/
│ │ │ ├── AutoFixture/
│ │ │ │ └── ProviderUserFixtures.cs
│ │ │ ├── ProviderFeatures/
│ │ │ │ ├── CreateProviderCommandTests.cs
│ │ │ │ └── RemoveOrganizationFromProviderCommandTests.cs
│ │ │ └── Services/
│ │ │ └── ProviderServiceTests.cs
│ │ ├── Billing/
│ │ │ ├── Providers/
│ │ │ │ ├── Queries/
│ │ │ │ │ └── GetProviderWarningsQueryTests.cs
│ │ │ │ └── Services/
│ │ │ │ ├── BusinessUnitConverterTests.cs
│ │ │ │ ├── ProviderBillingServiceTests.cs
│ │ │ │ └── ProviderPriceAdapterTests.cs
│ │ │ └── Tax/
│ │ │ └── TaxServiceTests.cs
│ │ ├── Commercial.Core.Test.csproj
│ │ └── SecretsManager/
│ │ ├── AuthorizationHandlers/
│ │ │ ├── AccessPolicies/
│ │ │ │ ├── ProjectPeopleAccessPoliciesAuthorizationHandlerTests.cs
│ │ │ │ ├── ProjectServiceAccountsAccessPoliciesAuthorizationHandlerTests.cs
│ │ │ │ ├── SecretAccessPoliciesUpdatesAuthorizationHandlerTests.cs
│ │ │ │ ├── ServiceAccountGrantedPoliciesAuthorizationHandlerTests.cs
│ │ │ │ └── ServiceAccountPeopleAccessPoliciesAuthorizationHandlerTests.cs
│ │ │ ├── Projects/
│ │ │ │ └── ProjectAuthorizationHandlerTests.cs
│ │ │ ├── Secrets/
│ │ │ │ ├── BulkSecretAuthorizationHandlerTests.cs
│ │ │ │ └── SecretAuthorizationHandlerTests.cs
│ │ │ └── ServiceAccounts/
│ │ │ └── ServiceAccountAuthorizationHandlerTests.cs
│ │ ├── Commands/
│ │ │ ├── AccessPolicies/
│ │ │ │ ├── UpdateProjectServiceAccountsAccessPoliciesCommandTests.cs
│ │ │ │ └── UpdateServiceAccountGrantedPoliciesCommandTests.cs
│ │ │ ├── AccessTokens/
│ │ │ │ └── CreateAccessTokenCommandTests.cs
│ │ │ ├── Projects/
│ │ │ │ ├── CreateProjectCommandTests.cs
│ │ │ │ ├── DeleteProjectCommandTests.cs
│ │ │ │ └── UpdateProjectCommandTests.cs
│ │ │ ├── Requests/
│ │ │ │ └── RequestSMAccessCommandTests.cs
│ │ │ ├── Secrets/
│ │ │ │ ├── CreateSecretCommandTests.cs
│ │ │ │ ├── DeleteSecretCommandTests.cs
│ │ │ │ └── UpdateSecretCommandTests.cs
│ │ │ ├── ServiceAccounts/
│ │ │ │ ├── CreateServiceAccountCommandTests.cs
│ │ │ │ ├── DeleteServiceAccountsCommandTests.cs
│ │ │ │ ├── RevokeAccessTokenCommandTests.cs
│ │ │ │ └── UpdateServiceAccountCommandTests.cs
│ │ │ └── Trash/
│ │ │ ├── EmptyTrashCommandTests.cs
│ │ │ └── RestoreTrashCommandTests.cs
│ │ ├── Enums/
│ │ │ ├── AccessPolicyType.cs
│ │ │ └── PermissionType.cs
│ │ ├── Queries/
│ │ │ ├── AccessPolicies/
│ │ │ │ ├── ProjectServiceAccountsAccessPoliciesUpdatesQueryTests.cs
│ │ │ │ ├── SameOrganizationQueryTests.cs
│ │ │ │ ├── SecretAccessPoliciesUpdatesQueryTests.cs
│ │ │ │ └── ServiceAccountGrantedPolicyUpdatesQueryTests.cs
│ │ │ ├── Projects/
│ │ │ │ └── MaxProjectsQueryTests.cs
│ │ │ ├── Secrets/
│ │ │ │ └── SecretsSyncQueryTests.cs
│ │ │ └── ServiceAccounts/
│ │ │ ├── CountNewServiceAccountSlotsRequiredQueryTests.cs
│ │ │ └── ServiceAccountSecretsDetailsQueryTests.cs
│ │ └── Repositories/
│ │ └── SecretVersionRepositoryTests.cs
│ ├── SSO.Test/
│ │ ├── Controllers/
│ │ │ └── AccountControllerTest.cs
│ │ ├── IdentityServer/
│ │ │ └── DistributedCachePersistedGrantStoreTests.cs
│ │ └── SSO.Test.csproj
│ ├── Scim.IntegrationTest/
│ │ ├── Controllers/
│ │ │ └── v2/
│ │ │ ├── GroupsControllerPatchTests.cs
│ │ │ ├── GroupsControllerTests.cs
│ │ │ └── UsersControllerTests.cs
│ │ ├── Factories/
│ │ │ └── ScimApplicationFactory.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Scim.IntegrationTest.csproj
│ │ └── appsettings.Development.json
│ ├── Scim.Test/
│ │ ├── Groups/
│ │ │ ├── GetGroupsListQueryTests.cs
│ │ │ ├── PatchGroupCommandTests.cs
│ │ │ ├── PostGroupCommandTests.cs
│ │ │ └── PutGroupCommandTests.cs
│ │ ├── Scim.Test.csproj
│ │ └── Users/
│ │ ├── GetUsersListQueryTests.cs
│ │ ├── PatchUserCommandTests.cs
│ │ └── PostUserCommandTests.cs
│ └── Sso.IntegrationTest/
│ ├── Controllers/
│ │ └── AccountControllerTests.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── Sso.IntegrationTest.csproj
│ └── Utilities/
│ ├── SsoApplicationFactory.cs
│ ├── SsoTestDataBuilder.cs
│ └── SuccessfulAuthResult.cs
├── dev/
│ ├── .gitignore
│ ├── authsources.php.example
│ ├── create_certificates_linux.sh
│ ├── create_certificates_mac.sh
│ ├── create_certificates_windows.ps1
│ ├── docker-compose.yml
│ ├── ef_migrate.ps1
│ ├── generate_openapi_files.ps1
│ ├── migrate.ps1
│ ├── reverse-proxy.conf.example
│ ├── secrets.json.example
│ ├── servicebusemulator_config.json
│ ├── setup_azurite.ps1
│ ├── setup_secrets.ps1
│ └── verify_migrations.ps1
├── global.json
├── perf/
│ ├── MicroBenchmarks/
│ │ ├── Core/
│ │ │ └── EncryptedStringAttributeTests.cs
│ │ ├── Identity/
│ │ │ └── IdentityServer/
│ │ │ ├── PersistedGrantStoreTests.cs
│ │ │ └── StaticClientStoreTests.cs
│ │ ├── MicroBenchmarks.csproj
│ │ └── Program.cs
│ └── load/
│ ├── config.js
│ ├── groups.js
│ ├── helpers/
│ │ └── auth.js
│ ├── login.js
│ └── sync.js
├── src/
│ ├── Admin/
│ │ ├── Admin.csproj
│ │ ├── AdminConsole/
│ │ │ ├── Controllers/
│ │ │ │ ├── OrganizationsController.cs
│ │ │ │ ├── ProviderOrganizationsController.cs
│ │ │ │ └── ProvidersController.cs
│ │ │ ├── Models/
│ │ │ │ ├── CreateBusinessUnitProviderModel.cs
│ │ │ │ ├── CreateMspProviderModel.cs
│ │ │ │ ├── CreateProviderModel.cs
│ │ │ │ ├── CreateResellerProviderModel.cs
│ │ │ │ ├── OrganizationEditModel.cs
│ │ │ │ ├── OrganizationInitiateDeleteModel.cs
│ │ │ │ ├── OrganizationSelectableViewModel.cs
│ │ │ │ ├── OrganizationUnassignedToProviderSearchViewModel.cs
│ │ │ │ ├── OrganizationViewModel.cs
│ │ │ │ ├── OrganizationsModel.cs
│ │ │ │ ├── ProviderEditModel.cs
│ │ │ │ ├── ProviderViewModel.cs
│ │ │ │ └── ProvidersModel.cs
│ │ │ └── Views/
│ │ │ ├── Organizations/
│ │ │ │ ├── Connections.cshtml
│ │ │ │ ├── Edit.cshtml
│ │ │ │ ├── Index.cshtml
│ │ │ │ ├── View.cshtml
│ │ │ │ ├── _ProviderInformation.cshtml
│ │ │ │ └── _ViewInformation.cshtml
│ │ │ ├── Providers/
│ │ │ │ ├── AddExistingOrganization.cshtml
│ │ │ │ ├── Admins.cshtml
│ │ │ │ ├── Create.cshtml
│ │ │ │ ├── CreateBusinessUnit.cshtml
│ │ │ │ ├── CreateMsp.cshtml
│ │ │ │ ├── CreateOrganization.cshtml
│ │ │ │ ├── CreateReseller.cshtml
│ │ │ │ ├── Edit.cshtml
│ │ │ │ ├── Index.cshtml
│ │ │ │ ├── Organizations.cshtml
│ │ │ │ ├── View.cshtml
│ │ │ │ ├── _ProviderOrganizationScripts.cshtml
│ │ │ │ ├── _ProviderScripts.cshtml
│ │ │ │ └── _ViewInformation.cshtml
│ │ │ ├── Shared/
│ │ │ │ ├── _OrganizationForm.cshtml
│ │ │ │ └── _OrganizationFormScripts.cshtml
│ │ │ ├── _ViewImports.cshtml
│ │ │ └── _ViewStart.cshtml
│ │ ├── AdminSettings.cs
│ │ ├── Auth/
│ │ │ ├── Controllers/
│ │ │ │ └── LoginController.cs
│ │ │ ├── IdentityServer/
│ │ │ │ └── PasswordlessSignInManager.cs
│ │ │ ├── Jobs/
│ │ │ │ ├── DatabaseExpiredGrantsJob.cs
│ │ │ │ └── DeleteAuthRequestsJob.cs
│ │ │ ├── Models/
│ │ │ │ └── LoginModel.cs
│ │ │ └── Views/
│ │ │ ├── Login/
│ │ │ │ └── Index.cshtml
│ │ │ ├── _ViewImports.cshtml
│ │ │ └── _ViewStart.cshtml
│ │ ├── Billing/
│ │ │ ├── Controllers/
│ │ │ │ ├── BusinessUnitConversionController.cs
│ │ │ │ ├── ProcessStripeEventsController.cs
│ │ │ │ └── SubscriptionDiscountsController.cs
│ │ │ ├── Models/
│ │ │ │ ├── BusinessUnitConversionModel.cs
│ │ │ │ ├── ProcessStripeEvents/
│ │ │ │ │ ├── EventsFormModel.cs
│ │ │ │ │ ├── EventsRequestBody.cs
│ │ │ │ │ └── EventsResponseBody.cs
│ │ │ │ ├── ProviderPlanViewModel.cs
│ │ │ │ └── SubscriptionDiscount/
│ │ │ │ ├── CreateSubscriptionDiscountModel.cs
│ │ │ │ ├── EditSubscriptionDiscountModel.cs
│ │ │ │ ├── SubscriptionDiscountPagedModel.cs
│ │ │ │ └── SubscriptionDiscountViewModel.cs
│ │ │ └── Views/
│ │ │ ├── BusinessUnitConversion/
│ │ │ │ └── Index.cshtml
│ │ │ ├── ProcessStripeEvents/
│ │ │ │ ├── Index.cshtml
│ │ │ │ └── Results.cshtml
│ │ │ ├── Providers/
│ │ │ │ └── ProviderPlans.cshtml
│ │ │ ├── SubscriptionDiscounts/
│ │ │ │ ├── Create.cshtml
│ │ │ │ ├── Edit.cshtml
│ │ │ │ ├── Index.cshtml
│ │ │ │ └── Partials/
│ │ │ │ ├── _ConfigureDiscountForm.cshtml
│ │ │ │ └── _ImportCouponForm.cshtml
│ │ │ ├── _ViewImports.cshtml
│ │ │ └── _ViewStart.cshtml
│ │ ├── Controllers/
│ │ │ ├── ErrorController.cs
│ │ │ ├── HomeController.cs
│ │ │ ├── InfoController.cs
│ │ │ ├── ToolsController.cs
│ │ │ └── UsersController.cs
│ │ ├── Dockerfile
│ │ ├── Enums/
│ │ │ ├── HtmlHelperExtensions.cs
│ │ │ └── Permissions.cs
│ │ ├── HostedServices/
│ │ │ ├── AzureQueueMailHostedService.cs
│ │ │ └── DatabaseMigrationHostedService.cs
│ │ ├── IdentityServer/
│ │ │ ├── CustomClaimsPrincipalFactory.cs
│ │ │ ├── ReadOnlyEnvIdentityUserStore.cs
│ │ │ ├── ReadOnlyIdentityUserStore.cs
│ │ │ └── ServiceCollectionExtensions.cs
│ │ ├── Jobs/
│ │ │ ├── AliveJob.cs
│ │ │ ├── DatabaseExpiredSponsorshipsJob.cs
│ │ │ ├── DatabaseRebuildlIndexesJob.cs
│ │ │ ├── DatabaseUpdateStatisticsJob.cs
│ │ │ ├── DeleteCiphersJob.cs
│ │ │ ├── DeleteUnverifiedOrganizationDomainsJob.cs
│ │ │ └── JobsHostedService.cs
│ │ ├── Models/
│ │ │ ├── BillingInformationModel.cs
│ │ │ ├── ChargeBraintreeModel.cs
│ │ │ ├── CreateUpdateTransactionModel.cs
│ │ │ ├── CursorPagedModel.cs
│ │ │ ├── ErrorViewModel.cs
│ │ │ ├── HomeModel.cs
│ │ │ ├── LicenseModel.cs
│ │ │ ├── PagedModel.cs
│ │ │ ├── PromoteAdminModel.cs
│ │ │ ├── PromoteProviderServiceUserModel.cs
│ │ │ ├── UserEditModel.cs
│ │ │ ├── UserViewModel.cs
│ │ │ └── UsersModel.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Sass/
│ │ │ ├── site.scss
│ │ │ └── webfonts.scss
│ │ ├── Services/
│ │ │ ├── AccessControlService.cs
│ │ │ └── IAccessControlService.cs
│ │ ├── Startup.cs
│ │ ├── TagHelpers/
│ │ │ ├── ActivePageTagHelper.cs
│ │ │ └── OptionSelectedTagHelper.cs
│ │ ├── Tools/
│ │ │ └── Jobs/
│ │ │ └── DeleteSendsJob.cs
│ │ ├── Utilities/
│ │ │ ├── RequirePermissionAttribute.cs
│ │ │ ├── RolePermissionMapping.cs
│ │ │ └── WebHostEnvironmentExtensions.cs
│ │ ├── Views/
│ │ │ ├── Home/
│ │ │ │ └── Index.cshtml
│ │ │ ├── Shared/
│ │ │ │ ├── Error.cshtml
│ │ │ │ ├── _BillingInformation.cshtml
│ │ │ │ └── _Layout.cshtml
│ │ │ ├── Tools/
│ │ │ │ ├── ChargeBraintree.cshtml
│ │ │ │ ├── CreateUpdateTransaction.cshtml
│ │ │ │ ├── GenerateLicense.cshtml
│ │ │ │ ├── PromoteAdmin.cshtml
│ │ │ │ └── PromoteProviderServiceUser.cshtml
│ │ │ ├── Users/
│ │ │ │ ├── Edit.cshtml
│ │ │ │ ├── Index.cshtml
│ │ │ │ ├── View.cshtml
│ │ │ │ └── _ViewInformation.cshtml
│ │ │ ├── _ViewImports.cshtml
│ │ │ └── _ViewStart.cshtml
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ ├── bundleconfig.json
│ │ ├── entrypoint.sh
│ │ ├── package.json
│ │ ├── webfonts.list
│ │ └── webpack.config.js
│ ├── Api/
│ │ ├── AdminConsole/
│ │ │ ├── Authorization/
│ │ │ │ ├── AuthorizationHandlerCollectionExtensions.cs
│ │ │ │ ├── AuthorizeAttribute.cs
│ │ │ │ ├── HttpContextExtensions.cs
│ │ │ │ ├── IOrganizationRequirement.cs
│ │ │ │ ├── OrganizationClaimsExtensions.cs
│ │ │ │ ├── OrganizationContext.cs
│ │ │ │ ├── OrganizationRequirementHandler.cs
│ │ │ │ ├── RecoverAccountAuthorizationHandler.cs
│ │ │ │ └── Requirements/
│ │ │ │ ├── BasePermissionRequirement.cs
│ │ │ │ ├── ManageGroupsOrUsersRequirement.cs
│ │ │ │ ├── MemberOrProviderRequirement.cs
│ │ │ │ ├── MemberRequirement.cs
│ │ │ │ └── PermissionRequirements.cs
│ │ │ ├── Controllers/
│ │ │ │ ├── BaseAdminConsoleController.cs
│ │ │ │ ├── GroupsController.cs
│ │ │ │ ├── OrganizationAuthRequestsController.cs
│ │ │ │ ├── OrganizationConnectionsController.cs
│ │ │ │ ├── OrganizationDomainController.cs
│ │ │ │ ├── OrganizationUsersController.cs
│ │ │ │ ├── OrganizationsController.cs
│ │ │ │ ├── PoliciesController.cs
│ │ │ │ ├── ProviderClientsController.cs
│ │ │ │ ├── ProviderOrganizationsController.cs
│ │ │ │ ├── ProviderUsersController.cs
│ │ │ │ └── ProvidersController.cs
│ │ │ ├── Jobs/
│ │ │ │ └── OrganizationSubscriptionUpdateJob.cs
│ │ │ ├── Models/
│ │ │ │ ├── Request/
│ │ │ │ │ ├── AdminAuthRequestUpdateRequestModel.cs
│ │ │ │ │ ├── BulkDenyAdminAuthRequestRequestModel.cs
│ │ │ │ │ ├── GroupRequestModel.cs
│ │ │ │ │ ├── OrganizationAuthRequestUpdateManyRequestModel.cs
│ │ │ │ │ ├── OrganizationDomainRequestModel.cs
│ │ │ │ │ ├── Organizations/
│ │ │ │ │ │ ├── OrganizationApiKeyRequestModel.cs
│ │ │ │ │ │ ├── OrganizationConnectionRequestModel.cs
│ │ │ │ │ │ ├── OrganizationCreateRequestModel.cs
│ │ │ │ │ │ ├── OrganizationDomainSsoDetailsRequestModel.cs
│ │ │ │ │ │ ├── OrganizationKeysRequestModel.cs
│ │ │ │ │ │ ├── OrganizationNoPaymentCreateRequest.cs
│ │ │ │ │ │ ├── OrganizationSeatRequestModel.cs
│ │ │ │ │ │ ├── OrganizationUpdateRequestModel.cs
│ │ │ │ │ │ ├── OrganizationUpgradeRequestModel.cs
│ │ │ │ │ │ ├── OrganizationUserRequestModels.cs
│ │ │ │ │ │ ├── OrganizationUserRestoreRequest.cs
│ │ │ │ │ │ └── OrganizationVerifyDeleteRecoverRequestModel.cs
│ │ │ │ │ ├── PolicyRequestModel.cs
│ │ │ │ │ ├── Providers/
│ │ │ │ │ │ ├── ProviderOrganizationAddRequestModel.cs
│ │ │ │ │ │ ├── ProviderOrganizationCreateRequestModel.cs
│ │ │ │ │ │ ├── ProviderSetupRequestModel.cs
│ │ │ │ │ │ ├── ProviderUpdateRequestModel.cs
│ │ │ │ │ │ ├── ProviderUserRequestModels.cs
│ │ │ │ │ │ └── ProviderVerifyDeleteRecoverRequestModel.cs
│ │ │ │ │ └── SavePolicyRequest.cs
│ │ │ │ └── Response/
│ │ │ │ ├── BaseProfileOrganizationResponseModel.cs
│ │ │ │ ├── GroupResponseModel.cs
│ │ │ │ ├── Helpers/
│ │ │ │ │ └── PolicyStatusResponses.cs
│ │ │ │ ├── Organizations/
│ │ │ │ │ ├── OrganizationApiKeyInformationResponseModel.cs
│ │ │ │ │ ├── OrganizationAutoEnrollStatusResponseModel.cs
│ │ │ │ │ ├── OrganizationConnectionResponseModel.cs
│ │ │ │ │ ├── OrganizationDomainResponseModel.cs
│ │ │ │ │ ├── OrganizationDomainSsoDetailsResponseModel.cs
│ │ │ │ │ ├── OrganizationKeysResponseModel.cs
│ │ │ │ │ ├── OrganizationPublicKeyResponseModel.cs
│ │ │ │ │ ├── OrganizationResponseModel.cs
│ │ │ │ │ ├── OrganizationUserResponseModel.cs
│ │ │ │ │ ├── PolicyResponseModel.cs
│ │ │ │ │ ├── PolicyStatusResponseModel.cs
│ │ │ │ │ ├── VerifiedOrganizationDomainSsoDetailResponseModel.cs
│ │ │ │ │ └── VerifiedOrganizationDomainSsoDetailsResponseModel.cs
│ │ │ │ ├── PendingOrganizationAuthRequestResponseModel.cs
│ │ │ │ ├── ProfileOrganizationResponseModel.cs
│ │ │ │ ├── ProfileProviderOrganizationResponseModel.cs
│ │ │ │ └── Providers/
│ │ │ │ ├── ProfileProviderResponseModel.cs
│ │ │ │ ├── ProviderOrganizationResponseModel.cs
│ │ │ │ ├── ProviderResponseModel.cs
│ │ │ │ └── ProviderUserResponseModel.cs
│ │ │ └── Public/
│ │ │ ├── Controllers/
│ │ │ │ ├── GroupsController.cs
│ │ │ │ ├── MembersController.cs
│ │ │ │ ├── OrganizationController.cs
│ │ │ │ └── PoliciesController.cs
│ │ │ └── Models/
│ │ │ ├── AssociationWithPermissionsBaseModel.cs
│ │ │ ├── GroupBaseModel.cs
│ │ │ ├── MemberBaseModel.cs
│ │ │ ├── PermissionsModel.cs
│ │ │ ├── PolicyBaseModel.cs
│ │ │ ├── Request/
│ │ │ │ ├── AssociationWithPermissionsRequestModel.cs
│ │ │ │ ├── GroupCreateUpdateRequestModel.cs
│ │ │ │ ├── MemberCreateRequestModel.cs
│ │ │ │ ├── MemberUpdateRequestModel.cs
│ │ │ │ ├── OrganizationImportRequestModel.cs
│ │ │ │ ├── PolicyUpdateRequestModel.cs
│ │ │ │ ├── UpdateGroupIdsRequestModel.cs
│ │ │ │ └── UpdateMemberIdsRequestModel.cs
│ │ │ └── Response/
│ │ │ ├── AssociationWithPermissionsResponseModel.cs
│ │ │ ├── GroupResponseModel.cs
│ │ │ ├── MemberResponseModel.cs
│ │ │ └── PolicyResponseModel.cs
│ │ ├── Api.csproj
│ │ ├── Auth/
│ │ │ ├── Controllers/
│ │ │ │ ├── AccountsController.cs
│ │ │ │ ├── AuthRequestsController.cs
│ │ │ │ ├── EmergencyAccessController.cs
│ │ │ │ ├── TwoFactorController.cs
│ │ │ │ └── WebAuthnController.cs
│ │ │ ├── Jobs/
│ │ │ │ ├── EmergencyAccessNotificationJob.cs
│ │ │ │ └── EmergencyAccessTimeoutJob.cs
│ │ │ └── Models/
│ │ │ ├── Request/
│ │ │ │ ├── Accounts/
│ │ │ │ │ ├── DeleteRecoverRequestModel.cs
│ │ │ │ │ ├── EmailRequestModel.cs
│ │ │ │ │ ├── EmailTokenRequestModel.cs
│ │ │ │ │ ├── MasterPasswordUnlockDataAndAuthenticationModel.cs
│ │ │ │ │ ├── PasswordHintRequestModel.cs
│ │ │ │ │ ├── PasswordRequestModel.cs
│ │ │ │ │ ├── RegenerateTwoFactorRequestModel.cs
│ │ │ │ │ ├── SecretVerificationRequestModel.cs
│ │ │ │ │ ├── SetInitialPasswordRequestModel.cs
│ │ │ │ │ ├── SetVerifyDevicesRequestModel.cs
│ │ │ │ │ ├── UnauthenticatedSecretVerificationRequestModel.cs
│ │ │ │ │ ├── UpdateKeyRequestModel.cs
│ │ │ │ │ ├── UpdateProfileRequestModel.cs
│ │ │ │ │ ├── UpdateTdeOffboardingPasswordRequestModel.cs
│ │ │ │ │ ├── UpdateTempPasswordRequestModel.cs
│ │ │ │ │ ├── VerifyDeleteRecoverRequestModel.cs
│ │ │ │ │ ├── VerifyEmailRequestModel.cs
│ │ │ │ │ └── VerifyOTPRequestModel.cs
│ │ │ │ ├── EmergencyAccessRequestModels.cs
│ │ │ │ ├── OrganizationSsoRequestModel.cs
│ │ │ │ ├── TwoFactorRequestModels.cs
│ │ │ │ ├── UntrustDevicesModel.cs
│ │ │ │ ├── UpdateDevicesTrustRequestModel.cs
│ │ │ │ └── WebAuthn/
│ │ │ │ ├── WebAuthnLoginCredentialCreatelRequestModel.cs
│ │ │ │ ├── WebAuthnLoginCredentialUpdateRequestModel.cs
│ │ │ │ └── WebAuthnLoginRotateKeyRequestModel.cs
│ │ │ └── Response/
│ │ │ ├── AuthRequestResponseModel.cs
│ │ │ ├── EmergencyAccessResponseModel.cs
│ │ │ ├── OrganizationSsoResponseModel.cs
│ │ │ ├── PendingAuthRequestResponseModel.cs
│ │ │ ├── TwoFactor/
│ │ │ │ ├── TwoFactorAuthenticatorResponseModel.cs
│ │ │ │ ├── TwoFactorDuoResponseModel.cs
│ │ │ │ ├── TwoFactorEmailResponseModel.cs
│ │ │ │ ├── TwoFactorProviderResponseModel.cs
│ │ │ │ ├── TwoFactorRecoverResponseModel.cs
│ │ │ │ ├── TwoFactorWebAuthnResponseModel.cs
│ │ │ │ └── TwoFactorYubiKeyResponseModel.cs
│ │ │ └── WebAuthn/
│ │ │ ├── WebAuthnCredentialCreateOptionsResponseModel.cs
│ │ │ └── WebAuthnCredentialResponseModel.cs
│ │ ├── Billing/
│ │ │ ├── Attributes/
│ │ │ │ ├── InjectOrganizationAttribute.cs
│ │ │ │ ├── InjectProviderAttribute.cs
│ │ │ │ ├── InjectUserAttribute.cs
│ │ │ │ ├── NonTokenizedPaymentMethodTypeValidationAttribute.cs
│ │ │ │ └── TokenizedPaymentMethodTypeValidationAttribute.cs
│ │ │ ├── Controllers/
│ │ │ │ ├── AccountsBillingController.cs
│ │ │ │ ├── AccountsController.cs
│ │ │ │ ├── BaseBillingController.cs
│ │ │ │ ├── BaseProviderController.cs
│ │ │ │ ├── LicensesController.cs
│ │ │ │ ├── OrganizationBillingController.cs
│ │ │ │ ├── OrganizationSponsorshipsController.cs
│ │ │ │ ├── OrganizationsController.cs
│ │ │ │ ├── PlansController.cs
│ │ │ │ ├── PreviewInvoiceController.cs
│ │ │ │ ├── ProviderBillingController.cs
│ │ │ │ ├── StripeController.cs
│ │ │ │ └── VNext/
│ │ │ │ ├── AccountBillingVNextController.cs
│ │ │ │ ├── OrganizationBillingVNextController.cs
│ │ │ │ ├── ProviderBillingVNextController.cs
│ │ │ │ ├── SelfHostedAccountBillingVNextController.cs
│ │ │ │ └── SelfHostedOrganizationBillingVNextController.cs
│ │ │ ├── Models/
│ │ │ │ ├── Requests/
│ │ │ │ │ ├── AddExistingOrganizationRequestBody.cs
│ │ │ │ │ ├── ChangePlanFrequencyRequest.cs
│ │ │ │ │ ├── CreateClientOrganizationRequestBody.cs
│ │ │ │ │ ├── KeyPairRequestBody.cs
│ │ │ │ │ ├── Organizations/
│ │ │ │ │ │ ├── OrganizationSubscriptionPlanChangeRequest.cs
│ │ │ │ │ │ ├── OrganizationSubscriptionPurchaseRequest.cs
│ │ │ │ │ │ └── OrganizationSubscriptionUpdateRequest.cs
│ │ │ │ │ ├── Payment/
│ │ │ │ │ │ ├── BillingAddressRequest.cs
│ │ │ │ │ │ ├── BitPayCreditRequest.cs
│ │ │ │ │ │ ├── CheckoutBillingAddressRequest.cs
│ │ │ │ │ │ ├── MinimalBillingAddressRequest.cs
│ │ │ │ │ │ ├── MinimalTokenizedPaymentMethodRequest.cs
│ │ │ │ │ │ ├── NonTokenizedPaymentMethodRequest.cs
│ │ │ │ │ │ ├── TokenizedPaymentMethodRequest.cs
│ │ │ │ │ │ └── VerifyBankAccountRequest.cs
│ │ │ │ │ ├── Premium/
│ │ │ │ │ │ ├── PremiumCloudHostedSubscriptionRequest.cs
│ │ │ │ │ │ ├── PremiumSelfHostedSubscriptionRequest.cs
│ │ │ │ │ │ └── UpgradePremiumToOrganizationRequest.cs
│ │ │ │ │ ├── PreviewInvoice/
│ │ │ │ │ │ ├── PreviewOrganizationSubscriptionPlanChangeTaxRequest.cs
│ │ │ │ │ │ ├── PreviewOrganizationSubscriptionPurchaseTaxRequest.cs
│ │ │ │ │ │ ├── PreviewOrganizationSubscriptionUpdateTaxRequest.cs
│ │ │ │ │ │ ├── PreviewPremiumSubscriptionPurchaseTaxRequest.cs
│ │ │ │ │ │ └── PreviewPremiumUpgradeProrationRequest.cs
│ │ │ │ │ ├── SetupBusinessUnitRequestBody.cs
│ │ │ │ │ ├── Storage/
│ │ │ │ │ │ └── StorageUpdateRequest.cs
│ │ │ │ │ ├── Subscriptions/
│ │ │ │ │ │ └── RestartSubscriptionRequest.cs
│ │ │ │ │ └── UpdateClientOrganizationRequestBody.cs
│ │ │ │ ├── Requirements/
│ │ │ │ │ └── ManageOrganizationBillingRequirement.cs
│ │ │ │ └── Responses/
│ │ │ │ ├── BillingHistoryResponseModel.cs
│ │ │ │ ├── BillingResponseModel.cs
│ │ │ │ ├── InvoicesResponse.cs
│ │ │ │ ├── Portal/
│ │ │ │ │ └── PortalSessionResponse.cs
│ │ │ │ └── ProviderSubscriptionResponse.cs
│ │ │ └── Public/
│ │ │ ├── Controllers/
│ │ │ │ └── OrganizationController.cs
│ │ │ └── Models/
│ │ │ ├── Request/
│ │ │ │ └── OrganizationSubscriptionUpdateRequestModel.cs
│ │ │ └── Response/
│ │ │ └── OrganizationSubscriptionDetailsResponseModel.cs
│ │ ├── Controllers/
│ │ │ ├── CollectionsController.cs
│ │ │ ├── ConfigController.cs
│ │ │ ├── DevicesController.cs
│ │ │ ├── InfoController.cs
│ │ │ ├── SelfHosted/
│ │ │ │ ├── SelfHostedOrganizationLicensesController.cs
│ │ │ │ └── SelfHostedOrganizationSponsorshipsController.cs
│ │ │ └── SettingsController.cs
│ │ ├── Dirt/
│ │ │ ├── Controllers/
│ │ │ │ ├── EventsController.cs
│ │ │ │ ├── HibpController.cs
│ │ │ │ ├── OrganizationIntegrationConfigurationController.cs
│ │ │ │ ├── OrganizationIntegrationController.cs
│ │ │ │ ├── OrganizationReportsController.cs
│ │ │ │ ├── ReportsController.cs
│ │ │ │ ├── SlackIntegrationController.cs
│ │ │ │ └── TeamsIntegrationController.cs
│ │ │ ├── Models/
│ │ │ │ ├── PasswordHealthReportApplicationModel.cs
│ │ │ │ ├── Request/
│ │ │ │ │ ├── OrganizationIntegrationConfigurationRequestModel.cs
│ │ │ │ │ └── OrganizationIntegrationRequestModel.cs
│ │ │ │ └── Response/
│ │ │ │ ├── EventResponseModel.cs
│ │ │ │ ├── MemberAccessDetailReportResponseModel.cs
│ │ │ │ ├── MemberAccessReportModel.cs
│ │ │ │ ├── MemberCipherDetailsResponseModel.cs
│ │ │ │ ├── OrganizationIntegrationConfigurationResponseModel.cs
│ │ │ │ ├── OrganizationIntegrationResponseModel.cs
│ │ │ │ ├── OrganizationReportResponseModel.cs
│ │ │ │ └── OrganizationReportSummaryModel.cs
│ │ │ └── Public/
│ │ │ ├── Controllers/
│ │ │ │ └── EventsController.cs
│ │ │ └── Models/
│ │ │ ├── EventFilterRequestModel.cs
│ │ │ └── EventResponseModel.cs
│ │ ├── Dockerfile
│ │ ├── Jobs/
│ │ │ ├── AliveJob.cs
│ │ │ ├── JobsHostedService.cs
│ │ │ ├── SelfHostedSponsorshipSyncJob.cs
│ │ │ ├── ValidateOrganizationDomainJob.cs
│ │ │ ├── ValidateOrganizationsJob.cs
│ │ │ └── ValidateUsersJob.cs
│ │ ├── KeyManagement/
│ │ │ ├── Controllers/
│ │ │ │ ├── AccountsKeyManagementController.cs
│ │ │ │ └── UsersController.cs
│ │ │ ├── Models/
│ │ │ │ ├── Requests/
│ │ │ │ │ ├── KeyConnectorEnrollmentRequestModel.cs
│ │ │ │ │ ├── KeyRegenerationRequestModel.cs
│ │ │ │ │ ├── RotateAccountKeysAndDataRequestModel.cs
│ │ │ │ │ ├── SetKeyConnectorKeyRequestModel.cs
│ │ │ │ │ ├── UnlockDataRequestModel.cs
│ │ │ │ │ ├── UserDataRequestModel.cs
│ │ │ │ │ └── V2UpgradeTokenRequestModel.cs
│ │ │ │ └── Responses/
│ │ │ │ └── KeyConnectorConfirmationDetailsResponseModel.cs
│ │ │ └── Validators/
│ │ │ ├── CipherRotationValidator.cs
│ │ │ ├── DeviceRotationValidator.cs
│ │ │ ├── EmergencyAccessRotationValidator.cs
│ │ │ ├── FolderRotationValidator.cs
│ │ │ ├── IRotationValidator.cs
│ │ │ ├── OrganizationUserRotationValidator.cs
│ │ │ ├── SendRotationValidator.cs
│ │ │ └── WebAuthnLoginKeyRotationValidator.cs
│ │ ├── Models/
│ │ │ ├── Public/
│ │ │ │ ├── CollectionBaseModel.cs
│ │ │ │ ├── Request/
│ │ │ │ │ └── CollectionUpdateRequestModel.cs
│ │ │ │ └── Response/
│ │ │ │ ├── CollectionResponseModel.cs
│ │ │ │ ├── ErrorResponseModel.cs
│ │ │ │ ├── IResponseModel.cs
│ │ │ │ ├── ListResponseModel.cs
│ │ │ │ └── PagedListResponseModel.cs
│ │ │ ├── Request/
│ │ │ │ ├── Accounts/
│ │ │ │ │ ├── PremiumRequestModel.cs
│ │ │ │ │ ├── StorageRequestModel.cs
│ │ │ │ │ ├── TaxInfoUpdateRequestModel.cs
│ │ │ │ │ └── UpdateAvatarRequestModel.cs
│ │ │ │ ├── BulkCollectionAccessRequestModel.cs
│ │ │ │ ├── CollectionRequestModel.cs
│ │ │ │ ├── DeviceRequestModels.cs
│ │ │ │ ├── DeviceVerificationRequestModel.cs
│ │ │ │ ├── ExpandedTaxInfoUpdateRequestModel.cs
│ │ │ │ ├── LicenseRequestModel.cs
│ │ │ │ ├── Organizations/
│ │ │ │ │ ├── OrganizationCollectionManagementUpdateRequestModel.cs
│ │ │ │ │ ├── OrganizationCreateLicenseRequestModel.cs
│ │ │ │ │ ├── OrganizationSponsorshipCreateRequestModel.cs
│ │ │ │ │ ├── OrganizationSponsorshipRedeemRequestModel.cs
│ │ │ │ │ ├── OrganizationSubscriptionUpdateRequestModel.cs
│ │ │ │ │ ├── OrganizationUserResetPasswordRequestModel.cs
│ │ │ │ │ ├── SecretsManagerSubscribeRequestModel.cs
│ │ │ │ │ └── SecretsManagerSubscriptionUpdateRequestModel.cs
│ │ │ │ ├── PaymentRequestModel.cs
│ │ │ │ ├── SelectionReadOnlyRequestModel.cs
│ │ │ │ ├── SubscriptionCancellationRequestModel.cs
│ │ │ │ └── UpdateDomainsRequestModel.cs
│ │ │ └── Response/
│ │ │ ├── ApiKeyResponseModel.cs
│ │ │ ├── CollectionResponseModel.cs
│ │ │ ├── ConfigResponseModel.cs
│ │ │ ├── DeviceResponseModel.cs
│ │ │ ├── DeviceVerificationResponseModel.cs
│ │ │ ├── DomainsResponseModel.cs
│ │ │ ├── KeysResponseModel.cs
│ │ │ ├── ListResponseModel.cs
│ │ │ ├── Organizations/
│ │ │ │ └── OrganizationSponsorshipSyncStatusResponseModel.cs
│ │ │ ├── PaymentResponseModel.cs
│ │ │ ├── PlanResponseModel.cs
│ │ │ ├── ProfileResponseModel.cs
│ │ │ ├── SelectionReadOnlyResponseModel.cs
│ │ │ ├── SubscriptionResponseModel.cs
│ │ │ ├── TaxInfoResponseModel.cs
│ │ │ └── UserKeyResponseModel.cs
│ │ ├── NotificationCenter/
│ │ │ ├── Controllers/
│ │ │ │ └── NotificationsController.cs
│ │ │ └── Models/
│ │ │ ├── Request/
│ │ │ │ └── NotificationFilterRequestModel.cs
│ │ │ └── Response/
│ │ │ └── NotificationResponseModel.cs
│ │ ├── Platform/
│ │ │ ├── Installations/
│ │ │ │ ├── Controllers/
│ │ │ │ │ └── InstallationsController.cs
│ │ │ │ └── Models/
│ │ │ │ ├── InstallationRequestModel.cs
│ │ │ │ └── InstallationResponseModel.cs
│ │ │ ├── Push/
│ │ │ │ ├── Controllers/
│ │ │ │ │ └── PushController.cs
│ │ │ │ └── PushTechnologyType.cs
│ │ │ └── SsoCookieVendor/
│ │ │ └── Controllers/
│ │ │ └── SsoCookieVendorController.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Public/
│ │ │ └── Controllers/
│ │ │ └── CollectionsController.cs
│ │ ├── SecretsManager/
│ │ │ ├── Controllers/
│ │ │ │ ├── AccessPoliciesController.cs
│ │ │ │ ├── CountsController.cs
│ │ │ │ ├── ProjectsController.cs
│ │ │ │ ├── RequestSMAccessController.cs
│ │ │ │ ├── SecretVersionsController.cs
│ │ │ │ ├── SecretsController.cs
│ │ │ │ ├── SecretsManagerEventsController.cs
│ │ │ │ ├── SecretsManagerPortingController.cs
│ │ │ │ ├── SecretsTrashController.cs
│ │ │ │ └── ServiceAccountsController.cs
│ │ │ ├── Jobs/
│ │ │ │ └── EmptySecretsManagerTrashJob.cs
│ │ │ ├── Models/
│ │ │ │ ├── Request/
│ │ │ │ │ ├── AccessPolicyRequest.cs
│ │ │ │ │ ├── AccessTokenCreateRequestModel.cs
│ │ │ │ │ ├── GetSecretsRequestModel.cs
│ │ │ │ │ ├── GrantedAccessPolicyRequest.cs
│ │ │ │ │ ├── PeopleAccessPoliciesRequestModel.cs
│ │ │ │ │ ├── ProjectCreateRequestModel.cs
│ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesRequestModel.cs
│ │ │ │ │ ├── ProjectUpdateRequestModel.cs
│ │ │ │ │ ├── RequestSMAccessRequestModel.cs
│ │ │ │ │ ├── RestoreSecretVersionRequestModel.cs
│ │ │ │ │ ├── RevokeAccessTokensRequest.cs
│ │ │ │ │ ├── SMImportRequestModel.cs
│ │ │ │ │ ├── SecretAccessPoliciesRequestsModel.cs
│ │ │ │ │ ├── SecretCreateRequestModel.cs
│ │ │ │ │ ├── SecretUpdateRequestModel.cs
│ │ │ │ │ ├── SerivceAccountUpdateRequestModel.cs
│ │ │ │ │ ├── ServiceAccountCreateRequestModel.cs
│ │ │ │ │ └── ServiceAccountGrantedPoliciesRequestModel.cs
│ │ │ │ └── Response/
│ │ │ │ ├── AccessPolicyResponseModel.cs
│ │ │ │ ├── AccessTokenCreationResponseModel.cs
│ │ │ │ ├── AccessTokenResponseModel.cs
│ │ │ │ ├── BaseSecretResponseModel.cs
│ │ │ │ ├── BulkDeleteResponseModel.cs
│ │ │ │ ├── GrantedProjectAccessPolicyPermissionDetailsResponseModel.cs
│ │ │ │ ├── OrganizationCountsResponseModel.cs
│ │ │ │ ├── PotentialGranteeResponseModel.cs
│ │ │ │ ├── ProjectCountsResponseModel.cs
│ │ │ │ ├── ProjectPeopleAccessPoliciesResponseModel.cs
│ │ │ │ ├── ProjectResponseModel.cs
│ │ │ │ ├── ProjectServiceAccountsAccessPoliciesResponseModel.cs
│ │ │ │ ├── SMExportResponseModel.cs
│ │ │ │ ├── SMImportResponseModel.cs
│ │ │ │ ├── SecretAccessPoliciesResponseModel.cs
│ │ │ │ ├── SecretResponseModel.cs
│ │ │ │ ├── SecretVersionResponseModel.cs
│ │ │ │ ├── SecretWithProjectsListResponseModel.cs
│ │ │ │ ├── SecretsSyncResponseModel.cs
│ │ │ │ ├── ServiceAccountCountsResponseModel.cs
│ │ │ │ ├── ServiceAccountGrantedPoliciesPermissionDetailsResponseModel.cs
│ │ │ │ ├── ServiceAccountPeopleAccessPoliciesResponseModel.cs
│ │ │ │ └── ServiceAccountResponseModel.cs
│ │ │ └── Utilities/
│ │ │ └── AccessPolicyHelpers.cs
│ │ ├── Startup.cs
│ │ ├── Tools/
│ │ │ ├── Authorization/
│ │ │ │ ├── VaultExportAuthorizationHandler.cs
│ │ │ │ └── VaultExportOperations.cs
│ │ │ ├── Controllers/
│ │ │ │ ├── ImportCiphersController.cs
│ │ │ │ ├── OrganizationExportController.cs
│ │ │ │ └── SendsController.cs
│ │ │ ├── Models/
│ │ │ │ ├── Request/
│ │ │ │ │ ├── Accounts/
│ │ │ │ │ │ └── ImportCiphersRequestModel.cs
│ │ │ │ │ ├── Organizations/
│ │ │ │ │ │ └── ImportOrganizationCiphersRequestModel.cs
│ │ │ │ │ ├── SendAccessRequestModel.cs
│ │ │ │ │ └── SendRequestModel.cs
│ │ │ │ ├── Response/
│ │ │ │ │ ├── OrganizationExportResponseModel.cs
│ │ │ │ │ ├── SendAccessResponseModel.cs
│ │ │ │ │ ├── SendFileDownloadDataResponseModel.cs
│ │ │ │ │ ├── SendFileUploadDataResponseModel.cs
│ │ │ │ │ └── SendResponseModel.cs
│ │ │ │ ├── SendFileModel.cs
│ │ │ │ └── SendTextModel.cs
│ │ │ └── Utilities/
│ │ │ └── InferAuthType.cs
│ │ ├── Utilities/
│ │ │ ├── ApiExplorerGroupConvention.cs
│ │ │ ├── ApiHelpers.cs
│ │ │ ├── DiagnosticTools/
│ │ │ │ └── EventDiagnosticLogger.cs
│ │ │ ├── DisableFormValueModelBindingAttribute.cs
│ │ │ ├── EnumMatchesAttribute.cs
│ │ │ ├── ExceptionHandlerFilterAttribute.cs
│ │ │ ├── ModelStateValidationFilterAttribute.cs
│ │ │ ├── MultipartFormDataHelper.cs
│ │ │ ├── PublicApiControllersModelConvention.cs
│ │ │ ├── ServiceCollectionExtensions.cs
│ │ │ └── StringMatchesAttribute.cs
│ │ ├── Vault/
│ │ │ ├── AuthorizationHandlers/
│ │ │ │ └── Collections/
│ │ │ │ ├── BulkCollectionAuthorizationHandler.cs
│ │ │ │ ├── BulkCollectionOperations.cs
│ │ │ │ ├── CollectionAuthorizationHandler.cs
│ │ │ │ └── CollectionOperations.cs
│ │ │ ├── Controllers/
│ │ │ │ ├── CiphersController.cs
│ │ │ │ ├── FoldersController.cs
│ │ │ │ ├── SecurityTaskController.cs
│ │ │ │ └── SyncController.cs
│ │ │ └── Models/
│ │ │ ├── CipherAttachmentModel.cs
│ │ │ ├── CipherCardModel.cs
│ │ │ ├── CipherFido2CredentialModel.cs
│ │ │ ├── CipherFieldModel.cs
│ │ │ ├── CipherIdentityModel.cs
│ │ │ ├── CipherLoginModel.cs
│ │ │ ├── CipherPasswordHistoryModel.cs
│ │ │ ├── CipherSSHKeyModel.cs
│ │ │ ├── CipherSecureNoteModel.cs
│ │ │ ├── Request/
│ │ │ │ ├── AttachmentRequestModel.cs
│ │ │ │ ├── BulkCreateSecurityTasksRequestModel.cs
│ │ │ │ ├── CipherBulkUpdateCollectionsRequestModel.cs
│ │ │ │ ├── CipherPartialRequestModel.cs
│ │ │ │ ├── CipherRequestModel.cs
│ │ │ │ └── FolderRequestModel.cs
│ │ │ └── Response/
│ │ │ ├── AttachmentResponseModel.cs
│ │ │ ├── AttachmentUploadDataResponseModel.cs
│ │ │ ├── CipherPermissionsResponseModel.cs
│ │ │ ├── CipherResponseModel.cs
│ │ │ ├── DeleteAttachmentResponseModel.cs
│ │ │ ├── FolderResponseModel.cs
│ │ │ ├── OptionalCipherDetailsResponseModel.cs
│ │ │ ├── SecurityTaskMetricsResponseModel.cs
│ │ │ ├── SecurityTasksResponseModel.cs
│ │ │ └── SyncResponseModel.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ ├── entrypoint.sh
│ │ └── runtimeconfig.template.json
│ ├── Billing/
│ │ ├── Billing.csproj
│ │ ├── BillingSettings.cs
│ │ ├── Constants/
│ │ │ ├── BitPayNotificationCode.cs
│ │ │ ├── HandledStripeWebhook.cs
│ │ │ ├── StripeInvoiceStatus.cs
│ │ │ └── StripeSubscriptionStatus.cs
│ │ ├── Controllers/
│ │ │ ├── AppleController.cs
│ │ │ ├── BitPayController.cs
│ │ │ ├── InfoController.cs
│ │ │ ├── JobsController.cs
│ │ │ ├── PayPalController.cs
│ │ │ ├── RecoveryController.cs
│ │ │ └── StripeController.cs
│ │ ├── Dockerfile
│ │ ├── Jobs/
│ │ │ ├── AliveJob.cs
│ │ │ ├── JobsHostedService.cs
│ │ │ ├── ProviderOrganizationDisableJob.cs
│ │ │ ├── ReconcileAdditionalStorageJob.cs
│ │ │ └── SubscriptionCancellationJob.cs
│ │ ├── Models/
│ │ │ ├── BitPayEventModel.cs
│ │ │ ├── LoginModel.cs
│ │ │ ├── PayPalIPNTransactionModel.cs
│ │ │ ├── Recovery/
│ │ │ │ ├── EventsRequestBody.cs
│ │ │ │ └── EventsResponseBody.cs
│ │ │ └── StripeWebhookDeliveryContainer.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Services/
│ │ │ ├── IPayPalIPNClient.cs
│ │ │ ├── IProviderEventService.cs
│ │ │ ├── IPushNotificationAdapter.cs
│ │ │ ├── IStripeEventProcessor.cs
│ │ │ ├── IStripeEventService.cs
│ │ │ ├── IStripeEventUtilityService.cs
│ │ │ ├── IStripeFacade.cs
│ │ │ ├── IStripeWebhookHandler.cs
│ │ │ └── Implementations/
│ │ │ ├── ChargeRefundedHandler.cs
│ │ │ ├── ChargeSucceededHandler.cs
│ │ │ ├── CouponDeletedHandler.cs
│ │ │ ├── CustomerUpdatedHandler.cs
│ │ │ ├── InvoiceCreatedHandler.cs
│ │ │ ├── InvoiceFinalizedHandler.cs
│ │ │ ├── PayPalIPNClient.cs
│ │ │ ├── PaymentFailedHandler.cs
│ │ │ ├── PaymentMethodAttachedHandler.cs
│ │ │ ├── PaymentSucceededHandler.cs
│ │ │ ├── ProviderEventService.cs
│ │ │ ├── PushNotificationAdapter.cs
│ │ │ ├── SetupIntentSucceededHandler.cs
│ │ │ ├── StripeEventProcessor.cs
│ │ │ ├── StripeEventService.cs
│ │ │ ├── StripeEventUtilityService.cs
│ │ │ ├── StripeFacade.cs
│ │ │ ├── SubscriptionDeletedHandler.cs
│ │ │ ├── SubscriptionUpdatedHandler.cs
│ │ │ └── UpcomingInvoiceHandler.cs
│ │ ├── Startup.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ └── entrypoint.sh
│ ├── Core/
│ │ ├── AdminConsole/
│ │ │ ├── AbilitiesCache/
│ │ │ │ ├── IApplicationCacheServiceBusMessaging.cs
│ │ │ │ ├── IVCurrentInMemoryApplicationCacheService.cs
│ │ │ │ ├── NoOpApplicationCacheMessaging.cs
│ │ │ │ └── ServiceBusApplicationCacheMessaging.cs
│ │ │ ├── Context/
│ │ │ │ ├── CurrentContextOrganization.cs
│ │ │ │ └── CurrentContextProvider.cs
│ │ │ ├── Entities/
│ │ │ │ ├── Group.cs
│ │ │ │ ├── GroupUser.cs
│ │ │ │ ├── Organization.cs
│ │ │ │ ├── OrganizationUser.cs
│ │ │ │ ├── Policy.cs
│ │ │ │ └── Provider/
│ │ │ │ ├── Provider.cs
│ │ │ │ ├── ProviderOrganization.cs
│ │ │ │ └── ProviderUser.cs
│ │ │ ├── Enums/
│ │ │ │ ├── OrganizationStatusType.cs
│ │ │ │ ├── OrganizationUserStatusType.cs
│ │ │ │ ├── OrganizationUserType.cs
│ │ │ │ ├── PolicyType.cs
│ │ │ │ ├── Provider/
│ │ │ │ │ ├── ProviderStatusType.cs
│ │ │ │ │ ├── ProviderType.cs
│ │ │ │ │ ├── ProviderUserStatusType.cs
│ │ │ │ │ └── ProviderUserType.cs
│ │ │ │ └── ScimProviderType.cs
│ │ │ ├── Interfaces/
│ │ │ │ └── IOrganizationUser.cs
│ │ │ ├── Models/
│ │ │ │ ├── Business/
│ │ │ │ │ ├── ImportedGroup.cs
│ │ │ │ │ ├── ImportedOrganizationUser.cs
│ │ │ │ │ ├── InviteOrganization.cs
│ │ │ │ │ ├── OrganizationCollectionManagementSettings.cs
│ │ │ │ │ ├── OrganizationUserInvite.cs
│ │ │ │ │ ├── Provider/
│ │ │ │ │ │ └── ProviderUserInvite.cs
│ │ │ │ │ └── Tokenables/
│ │ │ │ │ ├── OrgDeleteTokenable.cs
│ │ │ │ │ └── ProviderDeleteTokenable.cs
│ │ │ │ ├── Data/
│ │ │ │ │ ├── GroupWithCollections.cs
│ │ │ │ │ ├── IActingUser.cs
│ │ │ │ │ ├── IProfileOrganizationDetails.cs
│ │ │ │ │ ├── OrganizationUsers/
│ │ │ │ │ │ └── AcceptedOrganizationUserToConfirm.cs
│ │ │ │ │ ├── Organizations/
│ │ │ │ │ │ ├── OrganizationSubscriptionUpdate.cs
│ │ │ │ │ │ ├── OrganizationUsers/
│ │ │ │ │ │ │ ├── OrganizationUserInviteData.cs
│ │ │ │ │ │ │ ├── OrganizationUserOrganizationDetails.cs
│ │ │ │ │ │ │ ├── OrganizationUserPolicyDetails.cs
│ │ │ │ │ │ │ ├── OrganizationUserPublicKey.cs
│ │ │ │ │ │ │ ├── OrganizationUserResetPasswordDetails.cs
│ │ │ │ │ │ │ ├── OrganizationUserUserDetails.cs
│ │ │ │ │ │ │ └── OrganizationUserWithCollections.cs
│ │ │ │ │ │ ├── Policies/
│ │ │ │ │ │ │ ├── IPolicyDataModel.cs
│ │ │ │ │ │ │ ├── MasterPasswordPolicyData.cs
│ │ │ │ │ │ │ ├── OrganizationPolicyDetails.cs
│ │ │ │ │ │ │ ├── PolicyDetails.cs
│ │ │ │ │ │ │ ├── PolicyStatus.cs
│ │ │ │ │ │ │ ├── ResetPasswordDataModel.cs
│ │ │ │ │ │ │ └── SendOptionsPolicyData.cs
│ │ │ │ │ │ └── SelfHostedOrganizationDetails.cs
│ │ │ │ │ ├── Permissions.cs
│ │ │ │ │ ├── Provider/
│ │ │ │ │ │ ├── ProviderAbility.cs
│ │ │ │ │ │ ├── ProviderOrganizationOrganizationDetails.cs
│ │ │ │ │ │ ├── ProviderOrganizationProviderDetails.cs
│ │ │ │ │ │ ├── ProviderUserOrganizationDetails.cs
│ │ │ │ │ │ ├── ProviderUserProviderDetails.cs
│ │ │ │ │ │ ├── ProviderUserPublicKey.cs
│ │ │ │ │ │ └── ProviderUserUserDetails.cs
│ │ │ │ │ ├── StandardUser.cs
│ │ │ │ │ └── SystemUser.cs
│ │ │ │ ├── Mail/
│ │ │ │ │ ├── DeviceApprovalRequestedViewModel.cs
│ │ │ │ │ └── Mailer/
│ │ │ │ │ ├── OrganizationConfirmation/
│ │ │ │ │ │ ├── OrganizationConfirmationBaseView.cs
│ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.cs
│ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.html.hbs
│ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.text.hbs
│ │ │ │ │ │ ├── OrganizationConfirmationFamilyFreeView.cs
│ │ │ │ │ │ ├── OrganizationConfirmationFamilyFreeView.html.hbs
│ │ │ │ │ │ └── OrganizationConfirmationFamilyFreeView.text.hbs
│ │ │ │ │ ├── OrganizationInvite/
│ │ │ │ │ │ ├── OrganizationInviteBaseView.cs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.cs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.cs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.cs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.cs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteFreeView.cs
│ │ │ │ │ │ ├── OrganizationInviteFreeView.html.hbs
│ │ │ │ │ │ └── OrganizationInviteFreeView.text.hbs
│ │ │ │ │ └── OrganizationUserAutoConfirmation/
│ │ │ │ │ ├── OrganizationAutoConfirmationEnabledView.cs
│ │ │ │ │ ├── OrganizationAutoConfirmationEnabledView.html.hbs
│ │ │ │ │ └── OrganizationAutoConfirmationEnabledView.text.hbs
│ │ │ │ └── OrganizationConnectionConfigs/
│ │ │ │ └── ScimConfig.cs
│ │ │ ├── OrganizationAuth/
│ │ │ │ ├── Interfaces/
│ │ │ │ │ └── IUpdateOrganizationAuthRequestCommand.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── ApprovedAuthRequestIsMissingKeyException.cs
│ │ │ │ │ ├── AuthRequestUpdateCouldNotBeProcessedException.cs
│ │ │ │ │ ├── AuthRequestUpdateProcessingException.cs
│ │ │ │ │ ├── AuthRequestUpdateProcessor.cs
│ │ │ │ │ ├── AuthRequestUpdateProcessorConfiguration.cs
│ │ │ │ │ ├── BatchAuthRequestUpdateProcessor.cs
│ │ │ │ │ └── OrganizationAuthRequestUpdate.cs
│ │ │ │ └── UpdateOrganizationAuthRequestCommand.cs
│ │ │ ├── OrganizationFeatures/
│ │ │ │ ├── AccountRecovery/
│ │ │ │ │ ├── AdminRecoverAccountCommand.cs
│ │ │ │ │ └── IAdminRecoverAccountCommand.cs
│ │ │ │ ├── Collections/
│ │ │ │ │ └── CollectionUtils.cs
│ │ │ │ ├── Groups/
│ │ │ │ │ ├── Authorization/
│ │ │ │ │ │ ├── GroupAuthorizationHandler.cs
│ │ │ │ │ │ └── GroupOperations.cs
│ │ │ │ │ ├── CreateGroupCommand.cs
│ │ │ │ │ ├── DeleteGroupCommand.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ICreateGroupCommand.cs
│ │ │ │ │ │ ├── IDeleteGroupCommand.cs
│ │ │ │ │ │ └── IUpdateGroupCommand.cs
│ │ │ │ │ └── UpdateGroupCommand.cs
│ │ │ │ ├── Import/
│ │ │ │ │ ├── IImportOrganizationUserAndGroupsCommand.cs
│ │ │ │ │ ├── ImportOrganizationUsersAndGroupsCommand.cs
│ │ │ │ │ ├── OrganizationGroupImportData.cs
│ │ │ │ │ └── OrganizationUserImportData.cs
│ │ │ │ ├── OrganizationAbility/
│ │ │ │ │ ├── OrganizationAbility.cs
│ │ │ │ │ └── README.md
│ │ │ │ ├── OrganizationApiKeys/
│ │ │ │ │ ├── CreateOrganizationApiKeyCommand.cs
│ │ │ │ │ ├── GetOrganizationApiKeyQuery.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ICreateOrganizationApiKeyCommand.cs
│ │ │ │ │ │ ├── IGetOrganizationApiKeyQuery.cs
│ │ │ │ │ │ └── IRotateOrganizationApiKeyCommand.cs
│ │ │ │ │ └── RotateOrganizationApiKeyCommand.cs
│ │ │ │ ├── OrganizationConnections/
│ │ │ │ │ ├── CreateOrganizationConnectionCommand.cs
│ │ │ │ │ ├── DeleteOrganizationConnectionCommand.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ICreateOrganizationConnectionCommand.cs
│ │ │ │ │ │ ├── IDeleteOrganizationConnectionCommand.cs
│ │ │ │ │ │ ├── IUpdateOrganizationConnectionCommand.cs
│ │ │ │ │ │ └── IValidateBillingSyncKeyCommand.cs
│ │ │ │ │ ├── UpdateOrganizationConnectionCommand.cs
│ │ │ │ │ └── ValidateBillingSyncKeyCommand.cs
│ │ │ │ ├── OrganizationDomains/
│ │ │ │ │ ├── CreateOrganizationDomainCommand.cs
│ │ │ │ │ ├── DeleteOrganizationDomainCommand.cs
│ │ │ │ │ ├── GetOrganizationDomainByIdOrganizationIdQuery.cs
│ │ │ │ │ ├── GetOrganizationDomainByOrganizationIdQuery.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ICreateOrganizationDomainCommand.cs
│ │ │ │ │ │ ├── IDeleteOrganizationDomainCommand.cs
│ │ │ │ │ │ ├── IGetOrganizationDomainByIdOrganizationIdQuery.cs
│ │ │ │ │ │ ├── IGetOrganizationDomainByOrganizationIdQuery.cs
│ │ │ │ │ │ ├── IOrganizationHasVerifiedDomainsQuery.cs
│ │ │ │ │ │ └── IVerifyOrganizationDomainCommand.cs
│ │ │ │ │ ├── OrganizationHasVerifiedDomainsQuery.cs
│ │ │ │ │ └── VerifyOrganizationDomainCommand.cs
│ │ │ │ ├── OrganizationUsers/
│ │ │ │ │ ├── AcceptOrgUserCommand.cs
│ │ │ │ │ ├── Authorization/
│ │ │ │ │ │ ├── OrganizationUserUserDetailsAuthorizationHandler.cs
│ │ │ │ │ │ ├── OrganizationUserUserDetailsOperations.cs
│ │ │ │ │ │ └── OrganizationUserUserMiniDetailsOperations.cs
│ │ │ │ │ ├── AutoConfirmUser/
│ │ │ │ │ │ ├── AutomaticallyConfirmOrganizationUserCommand.cs
│ │ │ │ │ │ ├── AutomaticallyConfirmOrganizationUserRequest.cs
│ │ │ │ │ │ ├── AutomaticallyConfirmOrganizationUsersValidator.cs
│ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ ├── IAutomaticallyConfirmOrganizationUsersValidator.cs
│ │ │ │ │ │ ├── OrganizationAutoConfirmEnabledNotificationCommand.cs
│ │ │ │ │ │ └── README.md
│ │ │ │ │ ├── ConfirmOrganizationUserCommand.cs
│ │ │ │ │ ├── CountNewSmSeatsRequiredQuery.cs
│ │ │ │ │ ├── DeleteClaimedAccount/
│ │ │ │ │ │ ├── DeleteClaimedOrganizationUserAccountCommand.cs
│ │ │ │ │ │ ├── DeleteClaimedOrganizationUserAccountValidator.cs
│ │ │ │ │ │ ├── DeleteUserValidationRequest.cs
│ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ ├── IDeleteClaimedOrganizationUserAccountCommand.cs
│ │ │ │ │ │ └── IDeleteClaimedOrganizationUserAccountValidator.cs
│ │ │ │ │ ├── GetOrganizationUsersClaimedStatusQuery.cs
│ │ │ │ │ ├── HasConfirmedOwnersExceptQuery.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── IAcceptOrgUserCommand.cs
│ │ │ │ │ │ ├── IAutomaticallyConfirmOrganizationUserCommand.cs
│ │ │ │ │ │ ├── IConfirmOrganizationUserCommand.cs
│ │ │ │ │ │ ├── ICountNewSmSeatsRequiredQuery.cs
│ │ │ │ │ │ ├── IGetOrganizationUsersClaimedStatusQuery.cs
│ │ │ │ │ │ ├── IHasConfirmedOwnersExceptQuery.cs
│ │ │ │ │ │ ├── IOrganizationUserUserDetailsQuery.cs
│ │ │ │ │ │ ├── IPushAutoConfirmNotificationCommand.cs
│ │ │ │ │ │ ├── IRemoveOrganizationUserCommand.cs
│ │ │ │ │ │ ├── IRevokeNonCompliantOrganizationUserCommand.cs
│ │ │ │ │ │ ├── IUpdateOrganizationUserCommand.cs
│ │ │ │ │ │ └── IUpdateOrganizationUserGroupsCommand.cs
│ │ │ │ │ ├── InviteUsers/
│ │ │ │ │ │ ├── BulkResendOrganizationInvitesCommand.cs
│ │ │ │ │ │ ├── Errors/
│ │ │ │ │ │ │ ├── ErrorMapper.cs
│ │ │ │ │ │ │ ├── FailedToInviteUsersError.cs
│ │ │ │ │ │ │ ├── NoUsersToInviteError.cs
│ │ │ │ │ │ │ └── UserAlreadyExistsError.cs
│ │ │ │ │ │ ├── IBulkResendOrganizationInvitesCommand.cs
│ │ │ │ │ │ ├── IInviteOrganizationUsersCommand.cs
│ │ │ │ │ │ ├── IResendOrganizationInviteCommand.cs
│ │ │ │ │ │ ├── ISendOrganizationInvitesCommand.cs
│ │ │ │ │ │ ├── InviteOrganizationUsersCommand.cs
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── CreateOrganizationUser.cs
│ │ │ │ │ │ │ ├── CreateOrganizationUserExtensions.cs
│ │ │ │ │ │ │ ├── InviteOrganizationUserErrorMessages.cs
│ │ │ │ │ │ │ ├── InviteOrganizationUsersRequest.cs
│ │ │ │ │ │ │ ├── InviteOrganizationUsersResponse.cs
│ │ │ │ │ │ │ ├── InviteOrganizationUsersValidationRequest.cs
│ │ │ │ │ │ │ ├── OrganizationUserInviteCommandModel.cs
│ │ │ │ │ │ │ └── SendInvitesRequest.cs
│ │ │ │ │ │ ├── ResendOrganizationInviteCommand.cs
│ │ │ │ │ │ ├── SendOrganizationInvitesCommand.cs
│ │ │ │ │ │ └── Validation/
│ │ │ │ │ │ ├── CollectionAccessSelectionExtensions.cs
│ │ │ │ │ │ ├── GlobalSettings/
│ │ │ │ │ │ │ ├── CannotAutoScaleOnSelfHostError.cs
│ │ │ │ │ │ │ ├── EnvironmentRequest.cs
│ │ │ │ │ │ │ └── InviteUsersEnvironmentValidator.cs
│ │ │ │ │ │ ├── InviteOrganizationUserValidator.cs
│ │ │ │ │ │ ├── Organization/
│ │ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ │ └── InviteUsersOrganizationValidator.cs
│ │ │ │ │ │ ├── PasswordManager/
│ │ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ │ ├── InviteUsersPasswordManagerValidator.cs
│ │ │ │ │ │ │ └── PasswordManagerSubscriptionUpdate.cs
│ │ │ │ │ │ ├── Payments/
│ │ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ │ ├── InviteUserPaymentValidation.cs
│ │ │ │ │ │ │ └── PaymentsSubscription.cs
│ │ │ │ │ │ └── Provider/
│ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ ├── InviteOrganizationProvider.cs
│ │ │ │ │ │ └── InvitingUserOrganizationProviderValidator.cs
│ │ │ │ │ ├── OrganizationConfirmation/
│ │ │ │ │ │ ├── ISendOrganizationConfirmationCommand.cs
│ │ │ │ │ │ └── SendOrganizationConfirmationCommand.cs
│ │ │ │ │ ├── OrganizationUserUserDetailsQuery.cs
│ │ │ │ │ ├── PushAutoConfirmNotificationCommand.cs
│ │ │ │ │ ├── RemoveOrganizationUserCommand.cs
│ │ │ │ │ ├── Requests/
│ │ │ │ │ │ ├── OrganizationUserUserDetailsQueryRequest.cs
│ │ │ │ │ │ └── RevokeOrganizationUserRequest.cs
│ │ │ │ │ ├── RestoreUser/
│ │ │ │ │ │ └── v1/
│ │ │ │ │ │ ├── IRestoreOrganizationUserCommand.cs
│ │ │ │ │ │ └── RestoreOrganizationUserCommand.cs
│ │ │ │ │ ├── RevokeNonCompliantOrganizationUserCommand.cs
│ │ │ │ │ ├── RevokeUser/
│ │ │ │ │ │ ├── v1/
│ │ │ │ │ │ │ ├── IRevokeOrganizationUserCommand.cs
│ │ │ │ │ │ │ └── RevokeOrganizationUserCommand.cs
│ │ │ │ │ │ └── v2/
│ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ ├── IRevokeOrganizationUserCommand.cs
│ │ │ │ │ │ ├── IRevokeOrganizationUserValidator.cs
│ │ │ │ │ │ ├── RevokeOrganizationUserCommand.cs
│ │ │ │ │ │ ├── RevokeOrganizationUsersRequest.cs
│ │ │ │ │ │ └── RevokeOrganizationUsersValidator.cs
│ │ │ │ │ ├── SelfRevokeUser/
│ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ ├── ISelfRevokeOrganizationUserCommand.cs
│ │ │ │ │ │ └── SelfRevokeOrganizationUserCommand.cs
│ │ │ │ │ ├── UpdateOrganizationUserCommand.cs
│ │ │ │ │ └── UpdateOrganizationUserGroupsCommand.cs
│ │ │ │ ├── Organizations/
│ │ │ │ │ ├── BulkUpdateOrganizationSubscriptionsCommand.cs
│ │ │ │ │ ├── CloudOrganizationSignUpCommand.cs
│ │ │ │ │ ├── Errors.cs
│ │ │ │ │ ├── GetOrganizationSubscriptionsToUpdateQuery.cs
│ │ │ │ │ ├── InitPendingOrganizationCommand.cs
│ │ │ │ │ ├── InitPendingOrganizationRequest.cs
│ │ │ │ │ ├── InitPendingOrganizationValidator.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── IBulkUpdateOrganizationSubscriptionsCommand.cs
│ │ │ │ │ │ ├── IGetOrganizationSubscriptionsToUpdateQuery.cs
│ │ │ │ │ │ ├── IInitPendingOrganizationCommand.cs
│ │ │ │ │ │ ├── IOrganizationDeleteCommand.cs
│ │ │ │ │ │ ├── IOrganizationDisableCommand.cs
│ │ │ │ │ │ ├── IOrganizationEnableCommand.cs
│ │ │ │ │ │ ├── IOrganizationInitiateDeleteCommand.cs
│ │ │ │ │ │ ├── IOrganizationUpdateCommand.cs
│ │ │ │ │ │ ├── IOrganizationUpdateKeysCommand.cs
│ │ │ │ │ │ └── ISelfHostedOrganizationSignUpCommand.cs
│ │ │ │ │ ├── OrganizationDeleteCommand.cs
│ │ │ │ │ ├── OrganizationDisableCommand.cs
│ │ │ │ │ ├── OrganizationEnableCommand.cs
│ │ │ │ │ ├── OrganizationExtensions.cs
│ │ │ │ │ ├── OrganizationInitiateDeleteCommand.cs
│ │ │ │ │ ├── OrganizationUpdateKeysCommand.cs
│ │ │ │ │ ├── ProviderClientOrganizationSignUpCommand.cs
│ │ │ │ │ ├── ResellerClientOrganizationSignUpCommand.cs
│ │ │ │ │ ├── SelfHostedOrganizationSignUpCommand.cs
│ │ │ │ │ └── Update/
│ │ │ │ │ ├── OrganizationUpdateCommand.cs
│ │ │ │ │ └── OrganizationUpdateRequest.cs
│ │ │ │ ├── Policies/
│ │ │ │ │ ├── Enforcement/
│ │ │ │ │ │ └── AutoConfirm/
│ │ │ │ │ │ ├── AutomaticUserConfirmationOrganizationPolicyComplianceValidator.cs
│ │ │ │ │ │ ├── AutomaticUserConfirmationOrganizationPolicyComplianceValidatorRequest.cs
│ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyEnforcementRequest.cs
│ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyEnforcementValidator.cs
│ │ │ │ │ │ ├── Errors.cs
│ │ │ │ │ │ ├── IAutomaticUserConfirmationOrganizationPolicyComplianceValidator.cs
│ │ │ │ │ │ └── IAutomaticUserConfirmationPolicyEnforcementValidator.cs
│ │ │ │ │ ├── IPolicyQuery.cs
│ │ │ │ │ ├── IPolicyRequirementQuery.cs
│ │ │ │ │ ├── IPolicyValidator.cs
│ │ │ │ │ ├── IPostSavePolicySideEffect.cs
│ │ │ │ │ ├── ISavePolicyCommand.cs
│ │ │ │ │ ├── Implementations/
│ │ │ │ │ │ ├── PolicyQuery.cs
│ │ │ │ │ │ ├── PolicyRequirementQuery.cs
│ │ │ │ │ │ ├── SavePolicyCommand.cs
│ │ │ │ │ │ └── VNextSavePolicyCommand.cs
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── EmptyMetadataModel.cs
│ │ │ │ │ │ ├── IPolicyMetadataModel.cs
│ │ │ │ │ │ ├── OrganizationModelOwnershipPolicyModel.cs
│ │ │ │ │ │ ├── PolicyUpdate.cs
│ │ │ │ │ │ └── SavePolicyModel.cs
│ │ │ │ │ ├── PolicyRequirements/
│ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyRequirement.cs
│ │ │ │ │ │ ├── BasePolicyRequirementFactory.cs
│ │ │ │ │ │ ├── DisableSendPolicyRequirement.cs
│ │ │ │ │ │ ├── Errors/
│ │ │ │ │ │ │ └── SingleOrganizationPolicyErrors.cs
│ │ │ │ │ │ ├── IPolicyRequirement.cs
│ │ │ │ │ │ ├── IPolicyRequirementFactory.cs
│ │ │ │ │ │ ├── OrganizationDataOwnershipPolicyRequirement.cs
│ │ │ │ │ │ ├── PolicyRequirementHelpers.cs
│ │ │ │ │ │ ├── RequireSsoPolicyRequirement.cs
│ │ │ │ │ │ ├── RequireTwoFactorPolicyRequirement.cs
│ │ │ │ │ │ ├── ResetPasswordPolicyRequirement.cs
│ │ │ │ │ │ ├── SendOptionsPolicyRequirement.cs
│ │ │ │ │ │ └── SingleOrganizationPolicyRequirement.cs
│ │ │ │ │ ├── PolicyServiceCollectionExtensions.cs
│ │ │ │ │ ├── PolicyUpdateEvents/
│ │ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ │ ├── IEnforceDependentPoliciesEvent.cs
│ │ │ │ │ │ │ ├── IOnPolicyPostUpdateEvent.cs
│ │ │ │ │ │ │ ├── IOnPolicyPreUpdateEvent.cs
│ │ │ │ │ │ │ ├── IPolicyEventHandlerFactory.cs
│ │ │ │ │ │ │ ├── IPolicyUpdateEvent.cs
│ │ │ │ │ │ │ ├── IPolicyValidationEvent.cs
│ │ │ │ │ │ │ └── IVNextSavePolicyCommand.cs
│ │ │ │ │ │ └── PolicyEventHandlerHandlerFactory.cs
│ │ │ │ │ └── PolicyValidators/
│ │ │ │ │ ├── AutomaticUserConfirmationPolicyEventHandler.cs
│ │ │ │ │ ├── BlockClaimedDomainAccountCreationPolicyValidator.cs
│ │ │ │ │ ├── FreeFamiliesForEnterprisePolicyValidator.cs
│ │ │ │ │ ├── MaximumVaultTimeoutPolicyValidator.cs
│ │ │ │ │ ├── OrganizationDataOwnershipPolicyValidator.cs
│ │ │ │ │ ├── OrganizationPolicyValidator.cs
│ │ │ │ │ ├── PolicyValidatorHelpers.cs
│ │ │ │ │ ├── RequireSsoPolicyValidator.cs
│ │ │ │ │ ├── ResetPasswordPolicyValidator.cs
│ │ │ │ │ ├── SingleOrgPolicyValidator.cs
│ │ │ │ │ ├── TwoFactorAuthenticationPolicyValidator.cs
│ │ │ │ │ └── UriMatchDefaultPolicyValidator.cs
│ │ │ │ └── Shared/
│ │ │ │ └── Authorization/
│ │ │ │ └── OrganizationScope.cs
│ │ │ ├── Providers/
│ │ │ │ └── Interfaces/
│ │ │ │ ├── ICreateProviderCommand.cs
│ │ │ │ └── IRemoveOrganizationFromProviderCommand.cs
│ │ │ ├── Repositories/
│ │ │ │ ├── IGroupRepository.cs
│ │ │ │ ├── IOrganizationRepository.cs
│ │ │ │ ├── IOrganizationUserRepository.cs
│ │ │ │ ├── IPolicyRepository.cs
│ │ │ │ ├── IProviderOrganizationRepository.cs
│ │ │ │ ├── IProviderRepository.cs
│ │ │ │ └── IProviderUserRepository.cs
│ │ │ ├── Services/
│ │ │ │ ├── IEventService.cs
│ │ │ │ ├── IGroupService.cs
│ │ │ │ ├── IOrganizationDomainService.cs
│ │ │ │ ├── IOrganizationService.cs
│ │ │ │ ├── IPolicyService.cs
│ │ │ │ ├── IProviderService.cs
│ │ │ │ ├── Implementations/
│ │ │ │ │ ├── GroupService.cs
│ │ │ │ │ ├── OrganizationDomainService.cs
│ │ │ │ │ ├── OrganizationService.cs
│ │ │ │ │ └── PolicyService.cs
│ │ │ │ ├── NoopImplementations/
│ │ │ │ │ └── NoopProviderService.cs
│ │ │ │ └── OrganizationFactory.cs
│ │ │ └── Utilities/
│ │ │ ├── Commands/
│ │ │ │ └── CommandResult.cs
│ │ │ ├── DebuggingInstruments/
│ │ │ │ └── UserInviteDebuggingLogger.cs
│ │ │ ├── Errors/
│ │ │ │ ├── Error.cs
│ │ │ │ ├── InsufficientPermissionsError.cs
│ │ │ │ ├── InvalidResultTypeError.cs
│ │ │ │ └── RecordNotFoundError.cs
│ │ │ ├── IntegrationTemplateProcessor.cs
│ │ │ ├── PolicyDataValidator.cs
│ │ │ ├── Validation/
│ │ │ │ ├── IValidator.cs
│ │ │ │ └── ValidationResult.cs
│ │ │ └── v2/
│ │ │ ├── Errors.cs
│ │ │ ├── Results/
│ │ │ │ └── CommandResult.cs
│ │ │ └── Validation/
│ │ │ └── ValidationResult.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Auth/
│ │ │ ├── Attributes/
│ │ │ │ └── MarketingInitiativeValidationAttribute.cs
│ │ │ ├── Entities/
│ │ │ │ ├── AuthRequest.cs
│ │ │ │ ├── EmergencyAccess.cs
│ │ │ │ ├── Grant.cs
│ │ │ │ ├── SsoConfig.cs
│ │ │ │ ├── SsoUser.cs
│ │ │ │ └── WebAuthnCredential.cs
│ │ │ ├── Enums/
│ │ │ │ ├── AuthRequestType.cs
│ │ │ │ ├── EmergencyAccessStatusType.cs
│ │ │ │ ├── EmergencyAccessType.cs
│ │ │ │ ├── MemberDecryptionType.cs
│ │ │ │ ├── Saml2BindingType.cs
│ │ │ │ ├── Saml2NameIdFormat.cs
│ │ │ │ ├── Saml2SigningBehavior.cs
│ │ │ │ ├── SsoType.cs
│ │ │ │ ├── TwoFactorEmailPurpose.cs
│ │ │ │ ├── TwoFactorProviderType.cs
│ │ │ │ ├── WebAuthnLoginAssertionOptionsScope.cs
│ │ │ │ └── WebAuthnPrfStatus.cs
│ │ │ ├── Exceptions/
│ │ │ │ └── DuplicateAuthRequestException.cs
│ │ │ ├── Identity/
│ │ │ │ ├── Claims.cs
│ │ │ │ ├── CustomIdentityServiceCollectionExtensions.cs
│ │ │ │ ├── IdentityClientType.cs
│ │ │ │ ├── LowerInvariantLookupNormalizer.cs
│ │ │ │ ├── Policies.cs
│ │ │ │ ├── RoleStore.cs
│ │ │ │ ├── TokenProviders/
│ │ │ │ │ ├── AuthenticatorTokenProvider.cs
│ │ │ │ │ ├── DuoUniversalTokenProvider.cs
│ │ │ │ │ ├── DuoUniversalTokenService.cs
│ │ │ │ │ ├── EmailTokenProvider.cs
│ │ │ │ │ ├── EmailTwoFactorTokenProvider.cs
│ │ │ │ │ ├── IOrganizationTwoFactorTokenProvider.cs
│ │ │ │ │ ├── OrganizationDuoUniversalTokenProvider.cs
│ │ │ │ │ ├── OtpTokenProvider/
│ │ │ │ │ │ ├── IOtpTokenProvider.cs
│ │ │ │ │ │ ├── OtpTokenProvider.cs
│ │ │ │ │ │ ├── OtpTokenProviderOptions.cs
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── TwoFactorRememberTokenProvider.cs
│ │ │ │ │ ├── WebAuthnTokenProvider.cs
│ │ │ │ │ └── YubicoOtpTokenProvider.cs
│ │ │ │ └── UserStore.cs
│ │ │ ├── IdentityServer/
│ │ │ │ ├── ApiScopes.cs
│ │ │ │ ├── ConfigureOpenIdConnectDistributedOptions.cs
│ │ │ │ ├── DistributedCacheCookieManager.cs
│ │ │ │ ├── DistributedCacheTicketDataFormatter.cs
│ │ │ │ ├── DistributedCacheTicketStore.cs
│ │ │ │ └── TokenRetrieval.cs
│ │ │ ├── Models/
│ │ │ │ ├── Api/
│ │ │ │ │ ├── Request/
│ │ │ │ │ │ ├── Accounts/
│ │ │ │ │ │ │ ├── KeysRequestModel.cs
│ │ │ │ │ │ │ ├── MarketingInitiativeConstants.cs
│ │ │ │ │ │ │ ├── RegisterFinishRequestModel.cs
│ │ │ │ │ │ │ ├── RegisterSendVerificationEmailRequestModel.cs
│ │ │ │ │ │ │ └── RegisterVerificationEmailClickedRequestModel.cs
│ │ │ │ │ │ ├── AuthRequest/
│ │ │ │ │ │ │ ├── AuthRequestCreateRequestModel.cs
│ │ │ │ │ │ │ └── AuthRequestUpdateRequestModel.cs
│ │ │ │ │ │ └── DeviceKeysUpdateRequestModel.cs
│ │ │ │ │ └── Response/
│ │ │ │ │ ├── Accounts/
│ │ │ │ │ │ └── WebAuthnLoginAssertionOptionsResponseModel.cs
│ │ │ │ │ ├── DeviceAuthRequestResponseModel.cs
│ │ │ │ │ ├── ProtectedDeviceResponseModel.cs
│ │ │ │ │ └── UserDecryptionOptions.cs
│ │ │ │ ├── Business/
│ │ │ │ │ ├── ExpiringToken.cs
│ │ │ │ │ └── Tokenables/
│ │ │ │ │ ├── DuoUserStateTokenable.cs
│ │ │ │ │ ├── EmergencyAccessInviteTokenable.cs
│ │ │ │ │ ├── IOrgUserInviteTokenableFactory.cs
│ │ │ │ │ ├── OrgUserInviteTokenable.cs
│ │ │ │ │ ├── OrgUserInviteTokenableFactory.cs
│ │ │ │ │ ├── RegistrationEmailVerificationTokenable.cs
│ │ │ │ │ ├── SsoEmail2faSessionTokenable.cs
│ │ │ │ │ ├── SsoTokenable.cs
│ │ │ │ │ ├── TwoFactorAuthenticatorUserVerificationTokenable.cs
│ │ │ │ │ ├── WebAuthnCredentialCreateOptionsTokenable.cs
│ │ │ │ │ └── WebAuthnLoginAssertionOptionsTokenable.cs
│ │ │ │ ├── Data/
│ │ │ │ │ ├── DeviceAuthDetails.cs
│ │ │ │ │ ├── EmergencyAccessDetails.cs
│ │ │ │ │ ├── EmergencyAccessNotify.cs
│ │ │ │ │ ├── EmergencyAccessViewData.cs
│ │ │ │ │ ├── GrantItem.cs
│ │ │ │ │ ├── IGrant.cs
│ │ │ │ │ ├── OrganizationAdminAuthRequest.cs
│ │ │ │ │ ├── PendingAuthRequestDetails.cs
│ │ │ │ │ ├── SetInitialMasterPasswordDataModel.cs
│ │ │ │ │ ├── SsoConfigurationData.cs
│ │ │ │ │ └── WebAuthnLoginRotateKeyData.cs
│ │ │ │ ├── ITwoFactorProvidersUser.cs
│ │ │ │ ├── Mail/
│ │ │ │ │ ├── CannotDeleteClaimedAccountViewModel.cs
│ │ │ │ │ ├── EmergencyAccessAcceptedViewModel.cs
│ │ │ │ │ ├── EmergencyAccessApprovedViewModel.cs
│ │ │ │ │ ├── EmergencyAccessConfirmedViewModel.cs
│ │ │ │ │ ├── EmergencyAccessInvitedViewModel.cs
│ │ │ │ │ ├── EmergencyAccessRecoveryTimedOutViewModel.cs
│ │ │ │ │ ├── EmergencyAccessRecoveryViewModel.cs
│ │ │ │ │ ├── EmergencyAccessRejectedViewModel.cs
│ │ │ │ │ ├── FailedAuthAttemptModel.cs
│ │ │ │ │ ├── MasterPasswordHintViewModel.cs
│ │ │ │ │ ├── PasswordlessSignInModel.cs
│ │ │ │ │ ├── RecoverTwoFactorModel.cs
│ │ │ │ │ ├── RegisterVerifyEmail.cs
│ │ │ │ │ ├── VerifyDeleteModel.cs
│ │ │ │ │ └── VerifyEmailModel.cs
│ │ │ │ └── TwoFactorProvider.cs
│ │ │ ├── Repositories/
│ │ │ │ ├── Cosmos/
│ │ │ │ │ ├── Base64IdStringConverter.cs
│ │ │ │ │ └── GrantRepository.cs
│ │ │ │ ├── IAuthRequestRepository.cs
│ │ │ │ ├── IEmergencyAccessRepository.cs
│ │ │ │ ├── IGrantRepository.cs
│ │ │ │ ├── ISsoConfigRepository.cs
│ │ │ │ ├── ISsoUserRepository.cs
│ │ │ │ └── IWebAuthnCredentialRepository.cs
│ │ │ ├── Services/
│ │ │ │ ├── IAuthRequestService.cs
│ │ │ │ ├── ISsoConfigService.cs
│ │ │ │ ├── ITwoFactorEmailService.cs
│ │ │ │ └── Implementations/
│ │ │ │ ├── AuthRequestService.cs
│ │ │ │ ├── SsoConfigService.cs
│ │ │ │ └── TwoFactorEmailService.cs
│ │ │ ├── Settings/
│ │ │ │ ├── IPasswordlessAuthSettings.cs
│ │ │ │ └── ISsoSettings.cs
│ │ │ ├── Sso/
│ │ │ │ ├── IUserSsoOrganizationIdentifierQuery.cs
│ │ │ │ ├── SamlSigningAlgorithms.cs
│ │ │ │ └── UserSsoOrganizationIdentifierQuery.cs
│ │ │ ├── UserFeatures/
│ │ │ │ ├── DeviceTrust/
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ └── IUntrustDevicesCommand.cs
│ │ │ │ │ └── UntrustDevicesCommand.cs
│ │ │ │ ├── EmergencyAccess/
│ │ │ │ │ ├── Commands/
│ │ │ │ │ │ └── DeleteEmergencyAccessCommand.cs
│ │ │ │ │ ├── EmergencyAccessService.cs
│ │ │ │ │ ├── IEmergencyAccessService.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ └── IDeleteEmergencyAccessCommand.cs
│ │ │ │ │ ├── Mail/
│ │ │ │ │ │ ├── EmergencyAccessRemoveGranteesMailView.cs
│ │ │ │ │ │ ├── EmergencyAccessRemoveGranteesMailView.html.hbs
│ │ │ │ │ │ └── EmergencyAccessRemoveGranteesMailView.text.hbs
│ │ │ │ │ └── readme.md
│ │ │ │ ├── PasswordValidation/
│ │ │ │ │ └── PasswordValidationConstants.cs
│ │ │ │ ├── Registration/
│ │ │ │ │ ├── IRegisterUserCommand.cs
│ │ │ │ │ ├── ISendVerificationEmailForRegistrationCommand.cs
│ │ │ │ │ └── Implementations/
│ │ │ │ │ ├── RegisterUserCommand.cs
│ │ │ │ │ └── SendVerificationEmailForRegistrationCommand.cs
│ │ │ │ ├── SendAccess/
│ │ │ │ │ └── SendAccessClaimsPrincipalExtensions.cs
│ │ │ │ ├── TdeOffboardingPassword/
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ └── ITdeOffboardingPasswordCommand.cs
│ │ │ │ │ └── TdeOffboardingPasswordCommand.cs
│ │ │ │ ├── TwoFactorAuth/
│ │ │ │ │ ├── ICompleteTwoFactorWebAuthnRegistrationCommand.cs
│ │ │ │ │ ├── IDeleteTwoFactorWebAuthnCredentialCommand.cs
│ │ │ │ │ ├── IStartTwoFactorWebAuthnRegistrationCommand.cs
│ │ │ │ │ ├── ITwoFactorIsEnabledQuery.cs
│ │ │ │ │ └── Implementations/
│ │ │ │ │ ├── CompleteTwoFactorWebAuthnRegistrationCommand.cs
│ │ │ │ │ ├── DeleteTwoFactorWebAuthnCredentialCommand.cs
│ │ │ │ │ ├── StartTwoFactorWebAuthnRegistrationCommand.cs
│ │ │ │ │ └── TwoFactorIsEnabledQuery.cs
│ │ │ │ ├── UserMasterPassword/
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ISetInitialMasterPasswordCommand.cs
│ │ │ │ │ │ ├── ISetInitialMasterPasswordCommandV1.cs
│ │ │ │ │ │ └── ITdeSetPasswordCommand.cs
│ │ │ │ │ ├── SetInitialMasterPasswordCommand.cs
│ │ │ │ │ ├── SetInitialMasterPasswordCommandV1.cs
│ │ │ │ │ └── TdeSetPasswordCommand.cs
│ │ │ │ ├── UserServiceCollectionExtensions.cs
│ │ │ │ └── WebAuthnLogin/
│ │ │ │ ├── IAssertWebAuthnLoginCredentialCommand.cs
│ │ │ │ ├── ICreateWebAuthnLoginCredentialCommand.cs
│ │ │ │ ├── IGetWebAuthnLoginCredentialAssertionOptionsCommand.cs
│ │ │ │ ├── IGetWebAuthnLoginCredentialCreateOptionsCommand.cs
│ │ │ │ └── Implementations/
│ │ │ │ ├── AssertWebAuthnLoginCredentialCommand.cs
│ │ │ │ ├── CreateWebAuthnLoginCredentialCommand.cs
│ │ │ │ ├── GetWebAuthnLoginCredentialAssertionOptionsCommand.cs
│ │ │ │ └── GetWebAuthnLoginCredentialCreateOptionsCommand.cs
│ │ │ └── Utilities/
│ │ │ ├── DeviceExtensions.cs
│ │ │ └── GuidUtilities.cs
│ │ ├── Billing/
│ │ │ ├── BillingException.cs
│ │ │ ├── Commands/
│ │ │ │ ├── BaseBillingCommand.cs
│ │ │ │ └── BillingCommandResult.cs
│ │ │ ├── Constants/
│ │ │ │ ├── BitPayConstants.cs
│ │ │ │ ├── PlanConstants.cs
│ │ │ │ └── StripeConstants.cs
│ │ │ ├── Enums/
│ │ │ │ ├── DiscountAudienceType.cs
│ │ │ │ ├── DiscountTierType.cs
│ │ │ │ ├── PlanCadenceType.cs
│ │ │ │ ├── PlanType.cs
│ │ │ │ ├── ProductTierType.cs
│ │ │ │ └── ProductType.cs
│ │ │ ├── Extensions/
│ │ │ │ ├── BillingExtensions.cs
│ │ │ │ ├── CurrencyExtensions.cs
│ │ │ │ ├── CustomerExtensions.cs
│ │ │ │ ├── DiscountExtensions.cs
│ │ │ │ ├── InvoiceExtensions.cs
│ │ │ │ ├── ServiceCollectionExtensions.cs
│ │ │ │ ├── SubscriberExtensions.cs
│ │ │ │ ├── SubscriptionExtensions.cs
│ │ │ │ └── SubscriptionUpdateOptionsExtensions.cs
│ │ │ ├── Licenses/
│ │ │ │ ├── Extensions/
│ │ │ │ │ ├── LicenseExtensions.cs
│ │ │ │ │ └── LicenseServiceCollectionExtensions.cs
│ │ │ │ ├── LicenseConstants.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── Api/
│ │ │ │ │ │ └── Response/
│ │ │ │ │ │ └── LicenseResponseModel.cs
│ │ │ │ │ └── LicenseContext.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ └── GetUserLicenseQuery.cs
│ │ │ │ ├── Registrations.cs
│ │ │ │ └── Services/
│ │ │ │ ├── ILicenseClaimsFactory.cs
│ │ │ │ └── Implementations/
│ │ │ │ ├── OrganizationLicenseClaimsFactory.cs
│ │ │ │ └── UserLicenseClaimsFactory.cs
│ │ │ ├── Models/
│ │ │ │ ├── Api/
│ │ │ │ │ ├── Requests/
│ │ │ │ │ │ └── Accounts/
│ │ │ │ │ │ └── TrialSendVerificationEmailRequestModel.cs
│ │ │ │ │ └── Response/
│ │ │ │ │ └── SubscriptionDiscountResponseModel.cs
│ │ │ │ ├── BillingHistoryInfo.cs
│ │ │ │ ├── BillingInfo.cs
│ │ │ │ ├── Business/
│ │ │ │ │ ├── ILicense.cs
│ │ │ │ │ └── UserLicense.cs
│ │ │ │ ├── DiscountEligibility.cs
│ │ │ │ ├── Mail/
│ │ │ │ │ └── TrialInititaionVerifyEmail.cs
│ │ │ │ ├── OffboardingSurveyResponse.cs
│ │ │ │ ├── PaymentMethod.cs
│ │ │ │ ├── PaymentSource.cs
│ │ │ │ ├── PremiumStatusPushNotification.cs
│ │ │ │ ├── PreviewInvoiceInfo.cs
│ │ │ │ ├── Sales/
│ │ │ │ │ ├── CustomerSetup.cs
│ │ │ │ │ ├── PremiumUserSale.cs
│ │ │ │ │ └── SubscriptionSetup.cs
│ │ │ │ ├── SponsoredPlans.cs
│ │ │ │ ├── StaticStore/
│ │ │ │ │ ├── Plan.cs
│ │ │ │ │ └── SponsoredPlan.cs
│ │ │ │ ├── SubscriptionSuspension.cs
│ │ │ │ └── TokenizedPaymentSource.cs
│ │ │ ├── Organizations/
│ │ │ │ ├── Commands/
│ │ │ │ │ ├── PreviewOrganizationTaxCommand.cs
│ │ │ │ │ ├── UpdateOrganizationLicenseCommand.cs
│ │ │ │ │ ├── UpdateOrganizationSubscriptionCommand.cs
│ │ │ │ │ └── UpgradeOrganizationPlanVNextCommand.cs
│ │ │ │ ├── Entities/
│ │ │ │ │ └── OrganizationInstallation.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── OrganizationLicense.cs
│ │ │ │ │ ├── OrganizationMetadata.cs
│ │ │ │ │ ├── OrganizationSale.cs
│ │ │ │ │ ├── OrganizationSubscriptionChangeSet.cs
│ │ │ │ │ ├── OrganizationSubscriptionPlanChange.cs
│ │ │ │ │ ├── OrganizationSubscriptionPurchase.cs
│ │ │ │ │ ├── OrganizationSubscriptionUpdate.cs
│ │ │ │ │ ├── OrganizationWarnings.cs
│ │ │ │ │ └── SponsorOrganizationSubscriptionUpdate.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ ├── GetCloudOrganizationLicenseQuery.cs
│ │ │ │ │ ├── GetOrganizationMetadataQuery.cs
│ │ │ │ │ ├── GetOrganizationWarningsQuery.cs
│ │ │ │ │ └── GetSelfHostedOrganizationLicenseQuery.cs
│ │ │ │ ├── Repositories/
│ │ │ │ │ └── IOrganizationInstallationRepository.cs
│ │ │ │ └── Services/
│ │ │ │ ├── IOrganizationBillingService.cs
│ │ │ │ └── OrganizationBillingService.cs
│ │ │ ├── Payment/
│ │ │ │ ├── Clients/
│ │ │ │ │ └── BitPayClient.cs
│ │ │ │ ├── Commands/
│ │ │ │ │ ├── CreateBitPayInvoiceForCreditCommand.cs
│ │ │ │ │ ├── UpdateBillingAddressCommand.cs
│ │ │ │ │ └── UpdatePaymentMethodCommand.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── BillingAddress.cs
│ │ │ │ │ ├── MaskedPaymentMethod.cs
│ │ │ │ │ ├── NonTokenizedPaymentMethod.cs
│ │ │ │ │ ├── PaymentMethod.cs
│ │ │ │ │ ├── ProductUsageType.cs
│ │ │ │ │ ├── TokenizablePaymentMethodType.cs
│ │ │ │ │ └── TokenizedPaymentMethod.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ ├── GetApplicableDiscountsQuery.cs
│ │ │ │ │ ├── GetBillingAddressQuery.cs
│ │ │ │ │ ├── GetCreditQuery.cs
│ │ │ │ │ ├── GetPaymentMethodQuery.cs
│ │ │ │ │ └── HasPaymentMethodQuery.cs
│ │ │ │ └── Registrations.cs
│ │ │ ├── Portal/
│ │ │ │ └── Commands/
│ │ │ │ └── CreateBillingPortalSessionCommand.cs
│ │ │ ├── Premium/
│ │ │ │ ├── Commands/
│ │ │ │ │ ├── CreatePremiumCloudHostedSubscriptionCommand.cs
│ │ │ │ │ ├── CreatePremiumSelfHostedSubscriptionCommand.cs
│ │ │ │ │ ├── PreviewPremiumTaxCommand.cs
│ │ │ │ │ ├── PreviewPremiumUpgradeProrationCommand.cs
│ │ │ │ │ ├── UpdatePremiumStorageCommand.cs
│ │ │ │ │ └── UpgradePremiumToOrganizationCommand.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── PremiumPurchasePreview.cs
│ │ │ │ │ ├── PremiumSubscriptionPurchase.cs
│ │ │ │ │ ├── PremiumUpgradeProration.cs
│ │ │ │ │ └── UserPremiumAccess.cs
│ │ │ │ └── Queries/
│ │ │ │ ├── HasPremiumAccessQuery.cs
│ │ │ │ └── IHasPremiumAccessQuery.cs
│ │ │ ├── Pricing/
│ │ │ │ ├── IPricingClient.cs
│ │ │ │ ├── Organizations/
│ │ │ │ │ ├── Feature.cs
│ │ │ │ │ ├── Plan.cs
│ │ │ │ │ ├── PlanAdapter.cs
│ │ │ │ │ └── Purchasable.cs
│ │ │ │ ├── Premium/
│ │ │ │ │ ├── Plan.cs
│ │ │ │ │ └── Purchasable.cs
│ │ │ │ ├── PricingClient.cs
│ │ │ │ └── ServiceCollectionExtensions.cs
│ │ │ ├── Providers/
│ │ │ │ ├── Entities/
│ │ │ │ │ ├── ClientOrganizationMigrationRecord.cs
│ │ │ │ │ ├── ProviderInvoiceItem.cs
│ │ │ │ │ └── ProviderPlan.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── AddableOrganization.cs
│ │ │ │ │ ├── ChangeProviderPlansCommand.cs
│ │ │ │ │ ├── ConfiguredProviderPlan.cs
│ │ │ │ │ ├── ProviderWarnings.cs
│ │ │ │ │ └── UpdateProviderSeatMinimumsCommand.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ └── IGetProviderWarningsQuery.cs
│ │ │ │ ├── Repositories/
│ │ │ │ │ ├── IClientOrganizationMigrationRecordRepository.cs
│ │ │ │ │ ├── IProviderInvoiceItemRepository.cs
│ │ │ │ │ └── IProviderPlanRepository.cs
│ │ │ │ └── Services/
│ │ │ │ ├── IBusinessUnitConverter.cs
│ │ │ │ ├── IProviderBillingService.cs
│ │ │ │ └── ProviderPriceAdapter.cs
│ │ │ ├── Services/
│ │ │ │ ├── DiscountAudienceFilters/
│ │ │ │ │ ├── AllUsersFilter.cs
│ │ │ │ │ ├── DiscountAudienceFilterFactory.cs
│ │ │ │ │ ├── IDiscountAudienceFilter.cs
│ │ │ │ │ ├── IDiscountAudienceFilterFactory.cs
│ │ │ │ │ └── UserHasNoPreviousSubscriptionsFilter.cs
│ │ │ │ ├── ILicensingService.cs
│ │ │ │ ├── IPaymentHistoryService.cs
│ │ │ │ ├── IPremiumUserBillingService.cs
│ │ │ │ ├── IStripeAdapter.cs
│ │ │ │ ├── IStripePaymentService.cs
│ │ │ │ ├── IStripeSyncService.cs
│ │ │ │ ├── ISubscriberService.cs
│ │ │ │ ├── ISubscriptionDiscountService.cs
│ │ │ │ ├── Implementations/
│ │ │ │ │ ├── LicensingService.cs
│ │ │ │ │ ├── PaymentHistoryService.cs
│ │ │ │ │ ├── PremiumUserBillingService.cs
│ │ │ │ │ ├── StripeAdapter.cs
│ │ │ │ │ ├── StripePaymentService.cs
│ │ │ │ │ ├── StripeSyncService.cs
│ │ │ │ │ ├── SubscriberService.cs
│ │ │ │ │ └── SubscriptionDiscountService.cs
│ │ │ │ └── NoopImplementations/
│ │ │ │ └── NoopLicensingService.cs
│ │ │ ├── Subscriptions/
│ │ │ │ ├── Commands/
│ │ │ │ │ ├── ReinstateSubscriptionCommand.cs
│ │ │ │ │ └── RestartSubscriptionCommand.cs
│ │ │ │ ├── Entities/
│ │ │ │ │ └── SubscriptionDiscount.cs
│ │ │ │ ├── Models/
│ │ │ │ │ ├── BitwardenDiscount.cs
│ │ │ │ │ ├── BitwardenSubscription.cs
│ │ │ │ │ ├── Cart.cs
│ │ │ │ │ ├── Storage.cs
│ │ │ │ │ └── SubscriberId.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ └── GetBitwardenSubscriptionQuery.cs
│ │ │ │ └── Repositories/
│ │ │ │ └── ISubscriptionDiscountRepository.cs
│ │ │ ├── Tax/
│ │ │ │ ├── Models/
│ │ │ │ │ ├── AutomaticTaxFactoryParameters.cs
│ │ │ │ │ ├── TaxIdType.cs
│ │ │ │ │ └── TaxInformation.cs
│ │ │ │ ├── Requests/
│ │ │ │ │ ├── PreviewIndividualInvoiceRequestModel.cs
│ │ │ │ │ ├── PreviewOrganizationInvoiceRequestModel.cs
│ │ │ │ │ └── TaxInformationRequestModel.cs
│ │ │ │ ├── Responses/
│ │ │ │ │ └── PreviewInvoiceResponseModel.cs
│ │ │ │ ├── Services/
│ │ │ │ │ ├── ITaxService.cs
│ │ │ │ │ └── Implementations/
│ │ │ │ │ └── TaxService.cs
│ │ │ │ └── Utilities/
│ │ │ │ └── TaxHelpers.cs
│ │ │ ├── TrialInitiation/
│ │ │ │ ├── Registration/
│ │ │ │ │ ├── ISendTrialInitiationEmailForRegistrationCommand.cs
│ │ │ │ │ └── Implementations/
│ │ │ │ │ └── SendTrialInitiationEmailForRegistrationCommand.cs
│ │ │ │ └── TrialInitiationCollectionExtensions.cs
│ │ │ └── Utilities.cs
│ │ ├── Constants.cs
│ │ ├── Context/
│ │ │ ├── CurrentContext.cs
│ │ │ └── ICurrentContext.cs
│ │ ├── Core.csproj
│ │ ├── Dirt/
│ │ │ ├── Entities/
│ │ │ │ ├── Event.cs
│ │ │ │ ├── OrganizationApplication.cs
│ │ │ │ ├── OrganizationIntegration.cs
│ │ │ │ ├── OrganizationIntegrationConfiguration.cs
│ │ │ │ ├── OrganizationReport.cs
│ │ │ │ └── PasswordHealthReportApplication.cs
│ │ │ ├── Enums/
│ │ │ │ ├── EventSystemUser.cs
│ │ │ │ ├── EventType.cs
│ │ │ │ ├── IntegrationType.cs
│ │ │ │ └── OrganizationIntegrationStatus.cs
│ │ │ ├── EventIntegrations/
│ │ │ │ ├── EventIntegrationsServiceCollectionExtensions.cs
│ │ │ │ ├── OrganizationIntegrationConfigurations/
│ │ │ │ │ ├── CreateOrganizationIntegrationConfigurationCommand.cs
│ │ │ │ │ ├── DeleteOrganizationIntegrationConfigurationCommand.cs
│ │ │ │ │ ├── GetOrganizationIntegrationConfigurationsQuery.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ICreateOrganizationIntegrationConfigurationCommand.cs
│ │ │ │ │ │ ├── IDeleteOrganizationIntegrationConfigurationCommand.cs
│ │ │ │ │ │ ├── IGetOrganizationIntegrationConfigurationsQuery.cs
│ │ │ │ │ │ └── IUpdateOrganizationIntegrationConfigurationCommand.cs
│ │ │ │ │ └── UpdateOrganizationIntegrationConfigurationCommand.cs
│ │ │ │ ├── OrganizationIntegrations/
│ │ │ │ │ ├── CreateOrganizationIntegrationCommand.cs
│ │ │ │ │ ├── DeleteOrganizationIntegrationCommand.cs
│ │ │ │ │ ├── GetOrganizationIntegrationsQuery.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ICreateOrganizationIntegrationCommand.cs
│ │ │ │ │ │ ├── IDeleteOrganizationIntegrationCommand.cs
│ │ │ │ │ │ ├── IGetOrganizationIntegrationsQuery.cs
│ │ │ │ │ │ └── IUpdateOrganizationIntegrationCommand.cs
│ │ │ │ │ └── UpdateOrganizationIntegrationCommand.cs
│ │ │ │ └── README.md
│ │ │ ├── Models/
│ │ │ │ └── Data/
│ │ │ │ ├── EventIntegrations/
│ │ │ │ │ ├── DatadogIntegration.cs
│ │ │ │ │ ├── DatadogIntegrationConfigurationDetails.cs
│ │ │ │ │ ├── DatadogListenerConfiguration.cs
│ │ │ │ │ ├── HecIntegration.cs
│ │ │ │ │ ├── HecListenerConfiguration.cs
│ │ │ │ │ ├── IEventListenerConfiguration.cs
│ │ │ │ │ ├── IIntegrationListenerConfiguration.cs
│ │ │ │ │ ├── IIntegrationMessage.cs
│ │ │ │ │ ├── IntegrationFailureCategory.cs
│ │ │ │ │ ├── IntegrationFilterGroup.cs
│ │ │ │ │ ├── IntegrationFilterOperation.cs
│ │ │ │ │ ├── IntegrationFilterRule.cs
│ │ │ │ │ ├── IntegrationHandlerResult.cs
│ │ │ │ │ ├── IntegrationMessage.cs
│ │ │ │ │ ├── IntegrationOAuthState.cs
│ │ │ │ │ ├── IntegrationTemplateContext.cs
│ │ │ │ │ ├── ListenerConfiguration.cs
│ │ │ │ │ ├── OrganizationIntegrationConfigurationDetails.cs
│ │ │ │ │ ├── RepositoryListenerConfiguration.cs
│ │ │ │ │ ├── SlackIntegration.cs
│ │ │ │ │ ├── SlackIntegrationConfiguration.cs
│ │ │ │ │ ├── SlackIntegrationConfigurationDetails.cs
│ │ │ │ │ ├── SlackListenerConfiguration.cs
│ │ │ │ │ ├── TeamsIntegration.cs
│ │ │ │ │ ├── TeamsIntegrationConfigurationDetails.cs
│ │ │ │ │ ├── TeamsListenerConfiguration.cs
│ │ │ │ │ ├── WebhookIntegration.cs
│ │ │ │ │ ├── WebhookIntegrationConfiguration.cs
│ │ │ │ │ ├── WebhookIntegrationConfigurationDetails.cs
│ │ │ │ │ └── WebhookListenerConfiguration.cs
│ │ │ │ ├── EventMessage.cs
│ │ │ │ ├── EventTableEntity.cs
│ │ │ │ ├── IEvent.cs
│ │ │ │ ├── MemberAccessCipherDetails.cs
│ │ │ │ ├── MemberAccessReportDetail.cs
│ │ │ │ ├── OrganizationMemberBaseDetail.cs
│ │ │ │ ├── OrganizationReportApplicationDataResponse.cs
│ │ │ │ ├── OrganizationReportDataResponse.cs
│ │ │ │ ├── OrganizationReportMetricsData.cs
│ │ │ │ ├── OrganizationReportSummaryDataResponse.cs
│ │ │ │ ├── ReportFile.cs
│ │ │ │ ├── RiskInsightsReportDetail.cs
│ │ │ │ ├── Slack/
│ │ │ │ │ └── SlackApiResponse.cs
│ │ │ │ └── Teams/
│ │ │ │ ├── TeamsApiResponse.cs
│ │ │ │ └── TeamsBotCredentialProvider.cs
│ │ │ ├── Reports/
│ │ │ │ └── ReportFeatures/
│ │ │ │ ├── AddOrganizationReportCommand.cs
│ │ │ │ ├── AddPasswordHealthReportApplicationCommand.cs
│ │ │ │ ├── DropPasswordHealthReportApplicationCommand.cs
│ │ │ │ ├── GetOrganizationReportApplicationDataQuery.cs
│ │ │ │ ├── GetOrganizationReportDataQuery.cs
│ │ │ │ ├── GetOrganizationReportQuery.cs
│ │ │ │ ├── GetOrganizationReportSummaryDataByDateRangeQuery.cs
│ │ │ │ ├── GetOrganizationReportSummaryDataQuery.cs
│ │ │ │ ├── GetPasswordHealthReportApplicationQuery.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IAddOrganizationReportCommand.cs
│ │ │ │ │ ├── IAddPasswordHealthReportApplicationCommand.cs
│ │ │ │ │ ├── IDropPasswordHealthReportApplicationCommand.cs
│ │ │ │ │ ├── IGetOrganizationReportApplicationDataQuery.cs
│ │ │ │ │ ├── IGetOrganizationReportDataQuery.cs
│ │ │ │ │ ├── IGetOrganizationReportQuery.cs
│ │ │ │ │ ├── IGetOrganizationReportSummaryDataByDateRangeQuery.cs
│ │ │ │ │ ├── IGetOrganizationReportSummaryDataQuery.cs
│ │ │ │ │ ├── IGetPasswordHealthReportApplicationQuery.cs
│ │ │ │ │ ├── IUpdateOrganizationReportApplicationDataCommand.cs
│ │ │ │ │ ├── IUpdateOrganizationReportCommand.cs
│ │ │ │ │ ├── IUpdateOrganizationReportDataCommand.cs
│ │ │ │ │ └── IUpdateOrganizationReportSummaryCommand.cs
│ │ │ │ ├── MemberAccessReportQuery.cs
│ │ │ │ ├── OrganizationReportMembers/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ ├── IMemberAccessReportQuery.cs
│ │ │ │ │ └── IRiskInsightsReportQuery.cs
│ │ │ │ ├── ReportingServiceCollectionExtensions.cs
│ │ │ │ ├── Requests/
│ │ │ │ │ ├── AddOrganizationReportRequest.cs
│ │ │ │ │ ├── AddPasswordHealthReportApplicationRequest.cs
│ │ │ │ │ ├── DropOrganizationReportRequest.cs
│ │ │ │ │ ├── DropPasswordHealthReportApplicationRequest.cs
│ │ │ │ │ ├── GetOrganizationReportSummaryDataByDateRangeRequest.cs
│ │ │ │ │ ├── MemberAccessReportRequest.cs
│ │ │ │ │ ├── OrganizationReportMetricsRequest.cs
│ │ │ │ │ ├── RiskInsightsReportRequest.cs
│ │ │ │ │ ├── UpdateOrganizationReportApplicationDataRequest.cs
│ │ │ │ │ ├── UpdateOrganizationReportDataRequest.cs
│ │ │ │ │ ├── UpdateOrganizationReportRequest.cs
│ │ │ │ │ └── UpdateOrganizationReportSummaryRequest.cs
│ │ │ │ ├── RiskInsightsReportQuery.cs
│ │ │ │ ├── UpdateOrganizationReportApplicationDataCommand.cs
│ │ │ │ ├── UpdateOrganizationReportCommand.cs
│ │ │ │ ├── UpdateOrganizationReportDataCommand.cs
│ │ │ │ └── UpdateOrganizationReportSummaryCommand.cs
│ │ │ ├── Repositories/
│ │ │ │ ├── IEventRepository.cs
│ │ │ │ ├── IOrganizationApplicationRepository.cs
│ │ │ │ ├── IOrganizationIntegrationConfigurationRepository.cs
│ │ │ │ ├── IOrganizationIntegrationRepository.cs
│ │ │ │ ├── IOrganizationMemberBaseDetailRepository.cs
│ │ │ │ ├── IOrganizationReportRepository.cs
│ │ │ │ ├── IPasswordHealthReportApplicationRepository.cs
│ │ │ │ └── TableStorage/
│ │ │ │ └── EventRepository.cs
│ │ │ └── Services/
│ │ │ ├── IAzureServiceBusService.cs
│ │ │ ├── IEventIntegrationPublisher.cs
│ │ │ ├── IEventMessageHandler.cs
│ │ │ ├── IEventWriteService.cs
│ │ │ ├── IIntegrationFilterService.cs
│ │ │ ├── IIntegrationHandler.cs
│ │ │ ├── IOrganizationIntegrationConfigurationValidator.cs
│ │ │ ├── IRabbitMqService.cs
│ │ │ ├── ISlackService.cs
│ │ │ ├── ITeamsService.cs
│ │ │ ├── Implementations/
│ │ │ │ ├── AzureQueueEventWriteService.cs
│ │ │ │ ├── AzureServiceBusEventListenerService.cs
│ │ │ │ ├── AzureServiceBusIntegrationListenerService.cs
│ │ │ │ ├── AzureServiceBusService.cs
│ │ │ │ ├── AzureTableStorageEventHandler.cs
│ │ │ │ ├── DatadogIntegrationHandler.cs
│ │ │ │ ├── EventIntegrationEventWriteService.cs
│ │ │ │ ├── EventIntegrationHandler.cs
│ │ │ │ ├── EventLoggingListenerService.cs
│ │ │ │ ├── EventRepositoryHandler.cs
│ │ │ │ ├── EventService.cs
│ │ │ │ ├── IntegrationFilterFactory.cs
│ │ │ │ ├── IntegrationFilterService.cs
│ │ │ │ ├── OrganizationIntegrationConfigurationValidator.cs
│ │ │ │ ├── RabbitMqEventListenerService.cs
│ │ │ │ ├── RabbitMqIntegrationListenerService.cs
│ │ │ │ ├── RabbitMqService.cs
│ │ │ │ ├── RepositoryEventWriteService.cs
│ │ │ │ ├── SlackIntegrationHandler.cs
│ │ │ │ ├── SlackService.cs
│ │ │ │ ├── TeamsIntegrationHandler.cs
│ │ │ │ ├── TeamsService.cs
│ │ │ │ └── WebhookIntegrationHandler.cs
│ │ │ └── NoopImplementations/
│ │ │ ├── NoopEventService.cs
│ │ │ ├── NoopEventWriteService.cs
│ │ │ ├── NoopSlackService.cs
│ │ │ └── NoopTeamsService.cs
│ │ ├── Entities/
│ │ │ ├── Collection.cs
│ │ │ ├── CollectionCipher.cs
│ │ │ ├── CollectionGroup.cs
│ │ │ ├── CollectionUser.cs
│ │ │ ├── Device.cs
│ │ │ ├── Folder.cs
│ │ │ ├── IRevisable.cs
│ │ │ ├── IStorable.cs
│ │ │ ├── IStorableSubscriber.cs
│ │ │ ├── ISubscriber.cs
│ │ │ ├── ITableObject.cs
│ │ │ ├── OrganizationApiKey.cs
│ │ │ ├── OrganizationConnection.cs
│ │ │ ├── OrganizationDomain.cs
│ │ │ ├── OrganizationSponsorship.cs
│ │ │ ├── PlayItem.cs
│ │ │ ├── Role.cs
│ │ │ ├── TaxRate.cs
│ │ │ ├── Transaction.cs
│ │ │ └── User.cs
│ │ ├── Enums/
│ │ │ ├── AccessClientType.cs
│ │ │ ├── ApplicationCacheMessageType.cs
│ │ │ ├── BitwardenClient.cs
│ │ │ ├── ClientType.cs
│ │ │ ├── CollectionType.cs
│ │ │ ├── DeviceType.cs
│ │ │ ├── EncryptionType.cs
│ │ │ ├── EnumExtensions.cs
│ │ │ ├── FileUploadType.cs
│ │ │ ├── GatewayType.cs
│ │ │ ├── GlobalEquivalentDomainsType.cs
│ │ │ ├── KdfType.cs
│ │ │ ├── LicenseType.cs
│ │ │ ├── NotificationHubType.cs
│ │ │ ├── OrganizationApiKeyType.cs
│ │ │ ├── OrganizationConnectionType.cs
│ │ │ ├── PaymentMethodType.cs
│ │ │ ├── PlanSponsorshipType.cs
│ │ │ ├── PushNotificationLogOutReason.cs
│ │ │ ├── SupportedDatabaseProviders.cs
│ │ │ ├── TransactionType.cs
│ │ │ └── UriMatchType.cs
│ │ ├── Exceptions/
│ │ │ ├── BadRequestException.cs
│ │ │ ├── ConflictException.cs
│ │ │ ├── DnsQueryException.cs
│ │ │ ├── DomainClaimedException.cs
│ │ │ ├── DomainVerifiedException.cs
│ │ │ ├── DuplicateDomainException.cs
│ │ │ ├── FeatureUnavailableException.cs
│ │ │ ├── GatewayException.cs
│ │ │ ├── InvalidEmailException.cs
│ │ │ ├── InvalidGatewayCustomerIdException.cs
│ │ │ └── NotFoundException.cs
│ │ ├── HostedServices/
│ │ │ ├── ApplicationCacheHostedService.cs
│ │ │ └── IpRateLimitSeedStartupService.cs
│ │ ├── Jobs/
│ │ │ ├── BaseJob.cs
│ │ │ ├── BaseJobsHostedService.cs
│ │ │ ├── JobFactory.cs
│ │ │ └── JobListener.cs
│ │ ├── KeyManagement/
│ │ │ ├── Authorization/
│ │ │ │ ├── KeyConnectorAuthorizationHandler.cs
│ │ │ │ └── KeyConnectorOperations.cs
│ │ │ ├── Commands/
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IRegenerateUserAsymmetricKeysCommand.cs
│ │ │ │ │ └── ISetKeyConnectorKeyCommand.cs
│ │ │ │ ├── RegenerateUserAsymmetricKeysCommand.cs
│ │ │ │ └── SetKeyConnectorKeyCommand.cs
│ │ │ ├── Constants.cs
│ │ │ ├── Entities/
│ │ │ │ └── UserSignatureKeyPair.cs
│ │ │ ├── Enums/
│ │ │ │ └── SignatureAlgorithm.cs
│ │ │ ├── Kdf/
│ │ │ │ ├── IChangeKdfCommand.cs
│ │ │ │ └── Implementations/
│ │ │ │ └── ChangeKdfCommand.cs
│ │ │ ├── KeyManagementServiceCollectionExtensions.cs
│ │ │ ├── Models/
│ │ │ │ ├── Api/
│ │ │ │ │ ├── Request/
│ │ │ │ │ │ ├── AccountKeysRequestModel.cs
│ │ │ │ │ │ ├── KdfRequestModel.cs
│ │ │ │ │ │ ├── MasterPasswordAuthenticationDataRequestModel.cs
│ │ │ │ │ │ ├── MasterPasswordUnlockDataRequestModel.cs
│ │ │ │ │ │ ├── PublicKeyEncryptionKeyPairRequestModel.cs
│ │ │ │ │ │ ├── SecurityStateModel.cs
│ │ │ │ │ │ └── SignatureKeyPairRequestModel.cs
│ │ │ │ │ └── Response/
│ │ │ │ │ ├── MasterPasswordUnlockResponseModel.cs
│ │ │ │ │ ├── PrivateKeysResponseModel.cs
│ │ │ │ │ ├── PublicKeyEncryptionKeyPairResponseModel.cs
│ │ │ │ │ ├── PublicKeysResponseModel.cs
│ │ │ │ │ ├── SignatureKeyPairResponseModel.cs
│ │ │ │ │ ├── UserDecryptionResponseModel.cs
│ │ │ │ │ └── V2UpgradeTokenResponseModel.cs
│ │ │ │ └── Data/
│ │ │ │ ├── KdfSettings.cs
│ │ │ │ ├── KeyConnectorConfirmationDetails.cs
│ │ │ │ ├── KeyConnectorKeysData.cs
│ │ │ │ ├── MasterPasswordAuthenticationData.cs
│ │ │ │ ├── MasterPasswordUnlockAndAuthenticationData.cs
│ │ │ │ ├── MasterPasswordUnlockData.cs
│ │ │ │ ├── PublicKeyEncryptionKeyPairData.cs
│ │ │ │ ├── RotateUserAccountKeysData.cs
│ │ │ │ ├── SecurityStateData.cs
│ │ │ │ ├── SignatureKeyPairData.cs
│ │ │ │ ├── UserAccountKeysData.cs
│ │ │ │ ├── UserAsymmetricKeys.cs
│ │ │ │ └── V2UpgradeTokenData.cs
│ │ │ ├── Queries/
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IKeyConnectorConfirmationDetailsQuery.cs
│ │ │ │ │ └── IUserAcountKeysQuery.cs
│ │ │ │ ├── KeyConnectorConfirmationDetailsQuery.cs
│ │ │ │ └── UserAccountKeysQuery.cs
│ │ │ ├── Repositories/
│ │ │ │ ├── IUserAsymmetricKeysRepository.cs
│ │ │ │ └── IUserSignatureKeyPairRepository.cs
│ │ │ ├── Sends/
│ │ │ │ ├── ISendPasswordHasher.cs
│ │ │ │ ├── SendPasswordHasher.cs
│ │ │ │ ├── SendPasswordHasherMarker.cs
│ │ │ │ └── SendPasswordHasherServiceCollectionExtensions.cs
│ │ │ ├── UserKey/
│ │ │ │ ├── IRotateUserAccountKeysCommand.cs
│ │ │ │ └── Implementations/
│ │ │ │ └── RotateUserAccountKeysCommand.cs
│ │ │ └── Utilities/
│ │ │ └── EncryptionParsing.cs
│ │ ├── MailTemplates/
│ │ │ ├── Handlebars/
│ │ │ │ ├── AddedCredit.html.hbs
│ │ │ │ ├── AddedCredit.text.hbs
│ │ │ │ ├── AdminConsole/
│ │ │ │ │ ├── CannotDeleteClaimedAccount.html.hbs
│ │ │ │ │ ├── CannotDeleteClaimedAccount.text.hbs
│ │ │ │ │ ├── DomainClaimedByOrganization.html.hbs
│ │ │ │ │ ├── DomainClaimedByOrganization.text.hbs
│ │ │ │ │ ├── NotifyAdminDeviceApprovalRequested.html.hbs
│ │ │ │ │ ├── NotifyAdminDeviceApprovalRequested.text.hbs
│ │ │ │ │ ├── OrganizationConfirmation/
│ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.html.hbs
│ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.text.hbs
│ │ │ │ │ │ ├── OrganizationConfirmationFamilyFreeView.html.hbs
│ │ │ │ │ │ └── OrganizationConfirmationFamilyFreeView.text.hbs
│ │ │ │ │ ├── OrganizationInvite/
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.html.hbs
│ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.text.hbs
│ │ │ │ │ │ ├── OrganizationInviteFreeView.html.hbs
│ │ │ │ │ │ └── OrganizationInviteFreeView.text.hbs
│ │ │ │ │ ├── OrganizationUserRevokedForSingleOrgPolicy.html.hbs
│ │ │ │ │ ├── OrganizationUserRevokedForSingleOrgPolicy.text.hbs
│ │ │ │ │ ├── OrganizationUserRevokedForTwoFactorPolicy.html.hbs
│ │ │ │ │ ├── OrganizationUserRevokedForTwoFactorPolicy.text.hbs
│ │ │ │ │ ├── SelfHostNotifyAdminDeviceApprovalRequested.html.hbs
│ │ │ │ │ └── SelfHostNotifyAdminDeviceApprovalRequested.text.hbs
│ │ │ │ ├── AdminResetPassword.html.hbs
│ │ │ │ ├── AdminResetPassword.text.hbs
│ │ │ │ ├── Auth/
│ │ │ │ │ ├── EmergencyAccessAccepted.html.hbs
│ │ │ │ │ ├── EmergencyAccessAccepted.text.hbs
│ │ │ │ │ ├── EmergencyAccessApproved.html.hbs
│ │ │ │ │ ├── EmergencyAccessApproved.text.hbs
│ │ │ │ │ ├── EmergencyAccessConfirmed.html.hbs
│ │ │ │ │ ├── EmergencyAccessConfirmed.text.hbs
│ │ │ │ │ ├── EmergencyAccessInvited.html.hbs
│ │ │ │ │ ├── EmergencyAccessInvited.text.hbs
│ │ │ │ │ ├── EmergencyAccessRecovery.html.hbs
│ │ │ │ │ ├── EmergencyAccessRecovery.text.hbs
│ │ │ │ │ ├── EmergencyAccessRecoveryReminder.html.hbs
│ │ │ │ │ ├── EmergencyAccessRecoveryReminder.text.hbs
│ │ │ │ │ ├── EmergencyAccessRecoveryTimedOut.html.hbs
│ │ │ │ │ ├── EmergencyAccessRecoveryTimedOut.text.hbs
│ │ │ │ │ ├── EmergencyAccessRejected.html.hbs
│ │ │ │ │ ├── EmergencyAccessRejected.text.hbs
│ │ │ │ │ ├── FailedTwoFactorAttempt.html.hbs
│ │ │ │ │ ├── FailedTwoFactorAttempt.text.hbs
│ │ │ │ │ ├── MasterPasswordHint.html.hbs
│ │ │ │ │ ├── MasterPasswordHint.text.hbs
│ │ │ │ │ ├── NoMasterPasswordHint.html.hbs
│ │ │ │ │ ├── NoMasterPasswordHint.text.hbs
│ │ │ │ │ ├── OTPEmail.html.hbs
│ │ │ │ │ ├── OTPEmail.text.hbs
│ │ │ │ │ ├── PasswordlessSignIn.html.hbs
│ │ │ │ │ ├── PasswordlessSignIn.text.hbs
│ │ │ │ │ ├── RecoverTwoFactor.html.hbs
│ │ │ │ │ ├── RecoverTwoFactor.text.hbs
│ │ │ │ │ ├── RegistrationVerifyEmail.html.hbs
│ │ │ │ │ ├── RegistrationVerifyEmail.text.hbs
│ │ │ │ │ ├── SendAccessEmailOtpEmail.html.hbs
│ │ │ │ │ ├── SendAccessEmailOtpEmail.text.hbs
│ │ │ │ │ ├── TrustedDeviceAdminApproval.html.hbs
│ │ │ │ │ ├── TrustedDeviceAdminApproval.text.hbs
│ │ │ │ │ ├── TwoFactorEmail.html.hbs
│ │ │ │ │ ├── TwoFactorEmail.text.hbs
│ │ │ │ │ ├── VerifyDelete.html.hbs
│ │ │ │ │ ├── VerifyDelete.text.hbs
│ │ │ │ │ ├── VerifyEmail.html.hbs
│ │ │ │ │ └── VerifyEmail.text.hbs
│ │ │ │ ├── Billing/
│ │ │ │ │ ├── BusinessUnitConversionInvite.html.hbs
│ │ │ │ │ ├── BusinessUnitConversionInvite.text.hbs
│ │ │ │ │ ├── TrialInitiationVerifyEmail.html.hbs
│ │ │ │ │ └── TrialInitiationVerifyEmail.text.hbs
│ │ │ │ ├── ChangeEmail.html.hbs
│ │ │ │ ├── ChangeEmail.text.hbs
│ │ │ │ ├── ChangeEmailAlreadyExists.html.hbs
│ │ │ │ ├── ChangeEmailAlreadyExists.text.hbs
│ │ │ │ ├── FamiliesForEnterprise/
│ │ │ │ │ ├── FamiliesForEnterpriseOfferExistingAccount.html.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseOfferExistingAccount.text.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseOfferNewAccount.html.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseOfferNewAccount.text.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToEnterpriseUser.html.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToEnterpriseUser.text.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToFamilyUser.html.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToFamilyUser.text.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseRemovedFromFamilyUser.html.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseRemovedFromFamilyUser.text.hbs
│ │ │ │ │ ├── FamiliesForEnterpriseSponsorshipReverting.html.hbs
│ │ │ │ │ └── FamiliesForEnterpriseSponsorshipReverting.text.hbs
│ │ │ │ ├── InitiateDeleteOrganzation.html.hbs
│ │ │ │ ├── InitiateDeleteOrganzation.text.hbs
│ │ │ │ ├── InvoiceUpcoming.html.hbs
│ │ │ │ ├── InvoiceUpcoming.text.hbs
│ │ │ │ ├── Layouts/
│ │ │ │ │ ├── Basic.html.hbs
│ │ │ │ │ ├── Basic.text.hbs
│ │ │ │ │ ├── Full.html.hbs
│ │ │ │ │ ├── Full.text.hbs
│ │ │ │ │ ├── FullUpdated.html.hbs
│ │ │ │ │ ├── FullUpdated.text.hbs
│ │ │ │ │ ├── ProviderFull.html.hbs
│ │ │ │ │ ├── SecurityTasks.html.hbs
│ │ │ │ │ ├── SecurityTasks.text.hbs
│ │ │ │ │ ├── TitleContactUs.html.hbs
│ │ │ │ │ └── TitleContactUs.text.hbs
│ │ │ │ ├── LicenseExpired.html.hbs
│ │ │ │ ├── LicenseExpired.text.hbs
│ │ │ │ ├── MJML/
│ │ │ │ │ └── Auth/
│ │ │ │ │ └── Onboarding/
│ │ │ │ │ ├── welcome-family-user.html.hbs
│ │ │ │ │ ├── welcome-family-user.text.hbs
│ │ │ │ │ ├── welcome-individual-user.html.hbs
│ │ │ │ │ ├── welcome-individual-user.text.hbs
│ │ │ │ │ ├── welcome-org-user.html.hbs
│ │ │ │ │ └── welcome-org-user.text.hbs
│ │ │ │ ├── NewDeviceLoggedIn.html.hbs
│ │ │ │ ├── NewDeviceLoggedIn.text.hbs
│ │ │ │ ├── OrganizationDomainUnclaimed.html.hbs
│ │ │ │ ├── OrganizationDomainUnclaimed.text.hbs
│ │ │ │ ├── OrganizationSeatsAutoscaled.html.hbs
│ │ │ │ ├── OrganizationSeatsAutoscaled.text.hbs
│ │ │ │ ├── OrganizationSeatsMaxReached.html.hbs
│ │ │ │ ├── OrganizationSeatsMaxReached.text.hbs
│ │ │ │ ├── OrganizationSmSeatsMaxReached.html.hbs
│ │ │ │ ├── OrganizationSmSeatsMaxReached.text.hbs
│ │ │ │ ├── OrganizationSmServiceAccountsMaxReached.html.hbs
│ │ │ │ ├── OrganizationSmServiceAccountsMaxReached.text.hbs
│ │ │ │ ├── OrganizationUserAccepted.html.hbs
│ │ │ │ ├── OrganizationUserAccepted.text.hbs
│ │ │ │ ├── OrganizationUserConfirmed.html.hbs
│ │ │ │ ├── OrganizationUserConfirmed.text.hbs
│ │ │ │ ├── OrganizationUserInvited.html.hbs
│ │ │ │ ├── OrganizationUserInvited.text.hbs
│ │ │ │ ├── PaymentFailed.html.hbs
│ │ │ │ ├── PaymentFailed.text.hbs
│ │ │ │ ├── Provider/
│ │ │ │ │ ├── InitiateDeleteProvider.html.hbs
│ │ │ │ │ ├── InitiateDeleteProvider.text.hbs
│ │ │ │ │ ├── ProviderSetupInvite.html.hbs
│ │ │ │ │ ├── ProviderSetupInvite.text.hbs
│ │ │ │ │ ├── ProviderUpdatePaymentMethod.html.hbs
│ │ │ │ │ ├── ProviderUpdatePaymentMethod.text.hbs
│ │ │ │ │ ├── ProviderUserConfirmed.html.hbs
│ │ │ │ │ ├── ProviderUserConfirmed.text.hbs
│ │ │ │ │ ├── ProviderUserInvited.html.hbs
│ │ │ │ │ ├── ProviderUserInvited.text.hbs
│ │ │ │ │ ├── ProviderUserRemoved.html.hbs
│ │ │ │ │ └── ProviderUserRemoved.text.hbs
│ │ │ │ ├── ProviderInvoiceUpcoming.html.hbs
│ │ │ │ ├── ProviderInvoiceUpcoming.text.hbs
│ │ │ │ ├── SecretsManagerAccessRequest.html.hbs
│ │ │ │ ├── SecretsManagerAccessRequest.text.hbs
│ │ │ │ ├── SecurityTasksNotification.html.hbs
│ │ │ │ ├── SecurityTasksNotification.text.hbs
│ │ │ │ ├── TrialInitiation.html.hbs
│ │ │ │ ├── TrialInitiation.text.hbs
│ │ │ │ ├── UpdatedTempPassword.html.hbs
│ │ │ │ ├── UpdatedTempPassword.text.hbs
│ │ │ │ ├── Welcome.html.hbs
│ │ │ │ └── Welcome.text.hbs
│ │ │ ├── Mjml/
│ │ │ │ ├── .mjmlconfig
│ │ │ │ ├── README.md
│ │ │ │ ├── build.js
│ │ │ │ ├── components/
│ │ │ │ │ ├── footer.mjml
│ │ │ │ │ ├── head.mjml
│ │ │ │ │ ├── logo.mjml
│ │ │ │ │ ├── mj-bw-hero.js
│ │ │ │ │ ├── mj-bw-icon-row.js
│ │ │ │ │ ├── mj-bw-learn-more-footer.js
│ │ │ │ │ └── mj-bw-simple-hero.js
│ │ │ │ ├── emails/
│ │ │ │ │ ├── AdminConsole/
│ │ │ │ │ │ ├── OrganizationConfirmation/
│ │ │ │ │ │ │ ├── organization-auto-confirm-enabled.mjml
│ │ │ │ │ │ │ ├── organization-confirmation-enterprise-teams.mjml
│ │ │ │ │ │ │ └── organization-confirmation-family-free.mjml
│ │ │ │ │ │ ├── OrganizationInvite/
│ │ │ │ │ │ │ ├── organization-invite-enterprise-teams-existing-user.mjml
│ │ │ │ │ │ │ ├── organization-invite-enterprise-teams-new-user.mjml
│ │ │ │ │ │ │ ├── organization-invite-families-existing-user.mjml
│ │ │ │ │ │ │ ├── organization-invite-families-new-user.mjml
│ │ │ │ │ │ │ └── organization-invite-free.mjml
│ │ │ │ │ │ └── components/
│ │ │ │ │ │ ├── admin-console-head.mjml
│ │ │ │ │ │ ├── mj-bw-ac-hero.js
│ │ │ │ │ │ ├── mj-bw-ac-icon-row-without-bulletins.js
│ │ │ │ │ │ ├── mj-bw-ac-icon-row.js
│ │ │ │ │ │ ├── mj-bw-ac-learn-more-footer.js
│ │ │ │ │ │ ├── mj-bw-inviter-info.js
│ │ │ │ │ │ └── mobile-app-download.mjml
│ │ │ │ │ ├── Auth/
│ │ │ │ │ │ ├── Onboarding/
│ │ │ │ │ │ │ ├── welcome-family-user.mjml
│ │ │ │ │ │ │ ├── welcome-individual-user.mjml
│ │ │ │ │ │ │ └── welcome-org-user.mjml
│ │ │ │ │ │ ├── UserFeatures/
│ │ │ │ │ │ │ └── EmergencyAccess/
│ │ │ │ │ │ │ └── emergency-access-remove-grantees.mjml
│ │ │ │ │ │ ├── send-email-otp.mjml
│ │ │ │ │ │ └── two-factor.mjml
│ │ │ │ │ ├── Billing/
│ │ │ │ │ │ └── Renewals/
│ │ │ │ │ │ ├── families-2019-renewal.mjml
│ │ │ │ │ │ ├── families-2020-renewal.mjml
│ │ │ │ │ │ └── premium-renewal.mjml
│ │ │ │ │ └── invite.mjml
│ │ │ │ └── package.json
│ │ │ └── README.md
│ │ ├── Models/
│ │ │ ├── Api/
│ │ │ │ ├── Request/
│ │ │ │ │ ├── OrganizationLicenses/
│ │ │ │ │ │ └── SelfHostedOrganizationLicenseRequestModel.cs
│ │ │ │ │ ├── OrganizationSponsorships/
│ │ │ │ │ │ ├── OrganizationSponsorshipRequestModel.cs
│ │ │ │ │ │ └── OrganizationSponsorshipSyncRequestModel.cs
│ │ │ │ │ ├── PushDeviceRequestModel.cs
│ │ │ │ │ ├── PushRegistrationRequestModel.cs
│ │ │ │ │ ├── PushSendRequestModel.cs
│ │ │ │ │ └── PushUpdateRequestModel.cs
│ │ │ │ └── Response/
│ │ │ │ ├── Duo/
│ │ │ │ │ └── DuoResponseModel.cs
│ │ │ │ ├── ErrorResponseModel.cs
│ │ │ │ ├── MasterPasswordPolicyResponseModel.cs
│ │ │ │ ├── OrganizationSponsorships/
│ │ │ │ │ ├── OrganizationSponsorshipInvitesResponseModel.cs
│ │ │ │ │ ├── OrganizationSponsorshipResponseModel.cs
│ │ │ │ │ ├── OrganizationSponsorshipSyncResponseModel.cs
│ │ │ │ │ └── PreValidateSponsorshipResponseModel.cs
│ │ │ │ └── ResponseModel.cs
│ │ │ ├── Business/
│ │ │ │ ├── CompleteSubscriptionUpdate.cs
│ │ │ │ ├── OrganizationSignup.cs
│ │ │ │ ├── OrganizationUpgrade.cs
│ │ │ │ ├── SeatSubscriptionUpdate.cs
│ │ │ │ ├── SecretsManagerSubscribeUpdate.cs
│ │ │ │ ├── SecretsManagerSubscriptionUpdate.cs
│ │ │ │ ├── ServiceAccountSubscriptionUpdate.cs
│ │ │ │ ├── SmSeatSubscriptionUpdate.cs
│ │ │ │ ├── StorageSubscriptionUpdate.cs
│ │ │ │ ├── SubscriptionCreateOptions.cs
│ │ │ │ ├── SubscriptionInfo.cs
│ │ │ │ ├── SubscriptionUpdate.cs
│ │ │ │ ├── TaxInfo.cs
│ │ │ │ └── Tokenables/
│ │ │ │ └── OrganizationSponsorshipOfferTokenable.cs
│ │ │ ├── Data/
│ │ │ │ ├── CollectionAccessDetails.cs
│ │ │ │ ├── CollectionAccessSelection.cs
│ │ │ │ ├── CollectionAdminDetails.cs
│ │ │ │ ├── CollectionDetails.cs
│ │ │ │ ├── InstallationDeviceEntity.cs
│ │ │ │ ├── Organizations/
│ │ │ │ │ ├── ClaimedUserDomainClaimedEmails.cs
│ │ │ │ │ ├── OrganizationConnections/
│ │ │ │ │ │ └── OrganizationConnectionData.cs
│ │ │ │ │ ├── OrganizationDomainSsoDetailsData.cs
│ │ │ │ │ ├── OrganizationSponsorships/
│ │ │ │ │ │ ├── OrganizationSponsorshipData.cs
│ │ │ │ │ │ └── OrganizationSponsorshipSyncData.cs
│ │ │ │ │ ├── OrganizationUsers/
│ │ │ │ │ │ └── OrganizationSeatCounts.cs
│ │ │ │ │ └── VerifiedOrganizationDomainSsoDetail.cs
│ │ │ │ ├── PageOptions.cs
│ │ │ │ ├── PagedResult.cs
│ │ │ │ ├── UserKdfInformation.cs
│ │ │ │ └── UserWithCalculatedPremium.cs
│ │ │ ├── IExternal.cs
│ │ │ ├── Mail/
│ │ │ │ ├── AddedCreditViewModel.cs
│ │ │ │ ├── AdminResetPasswordViewModel.cs
│ │ │ │ ├── Auth/
│ │ │ │ │ ├── DefaultEmailOtpViewModel.cs
│ │ │ │ │ └── OrganizationWelcomeEmailViewModel.cs
│ │ │ │ ├── BaseMailModel.cs
│ │ │ │ ├── BaseTitleContactUsMailModel.cs
│ │ │ │ ├── Billing/
│ │ │ │ │ ├── BusinessUnitConversionInviteModel.cs
│ │ │ │ │ └── Renewal/
│ │ │ │ │ ├── Families2019Renewal/
│ │ │ │ │ │ ├── Families2019RenewalMailView.cs
│ │ │ │ │ │ ├── Families2019RenewalMailView.html.hbs
│ │ │ │ │ │ └── Families2019RenewalMailView.text.hbs
│ │ │ │ │ ├── Families2020Renewal/
│ │ │ │ │ │ ├── Families2020RenewalMailView.cs
│ │ │ │ │ │ ├── Families2020RenewalMailView.html.hbs
│ │ │ │ │ │ └── Families2020RenewalMailView.text.hbs
│ │ │ │ │ └── Premium/
│ │ │ │ │ ├── PremiumRenewalMailView.cs
│ │ │ │ │ ├── PremiumRenewalMailView.html.hbs
│ │ │ │ │ └── PremiumRenewalMailView.text.hbs
│ │ │ │ ├── ChangeEmailExistsViewModel.cs
│ │ │ │ ├── ClaimedDomainUserNotificationViewModel.cs
│ │ │ │ ├── FamiliesForEnterprise/
│ │ │ │ │ ├── FamiliesForEnterpriseOfferViewModel.cs
│ │ │ │ │ ├── FamiliesForEnterpriseRemoveOfferViewModel.cs
│ │ │ │ │ └── FamiliesForEnterpriseSponsorshipRevertingViewModel.cs
│ │ │ │ ├── IMailQueueMessage.cs
│ │ │ │ ├── InvoiceUpcomingViewModel.cs
│ │ │ │ ├── LicenseExpiredViewModel.cs
│ │ │ │ ├── MailMessage.cs
│ │ │ │ ├── MailQueueMessage.cs
│ │ │ │ ├── NewDeviceLoggedInModel.cs
│ │ │ │ ├── OrganizationDomainUnverifiedViewModel.cs
│ │ │ │ ├── OrganizationInitiateDeleteModel.cs
│ │ │ │ ├── OrganizationInvitesInfo.cs
│ │ │ │ ├── OrganizationSeatsAutoscaledViewModel.cs
│ │ │ │ ├── OrganizationSeatsMaxReachedViewModel.cs
│ │ │ │ ├── OrganizationServiceAccountsMaxReachedViewModel.cs
│ │ │ │ ├── OrganizationUserAcceptedViewModel.cs
│ │ │ │ ├── OrganizationUserConfirmedViewModel.cs
│ │ │ │ ├── OrganizationUserInvitedViewModel.cs
│ │ │ │ ├── OrganizationUserRemovedForPolicySingleOrgViewModel.cs
│ │ │ │ ├── OrganizationUserRemovedForPolicyTwoStepViewModel.cs
│ │ │ │ ├── OrganizationUserRevokedForPolicySingleOrgViewModel.cs
│ │ │ │ ├── OrganizationUserRevokedForPolicyTwoFactorViewModel.cs
│ │ │ │ ├── PaymentFailedViewModel.cs
│ │ │ │ ├── Provider/
│ │ │ │ │ ├── ProviderInitiateDeleteModel.cs
│ │ │ │ │ ├── ProviderSetupInviteViewModel.cs
│ │ │ │ │ ├── ProviderUpdatePaymentMethodViewModel.cs
│ │ │ │ │ ├── ProviderUserConfirmedViewModel.cs
│ │ │ │ │ ├── ProviderUserInvitedViewModel.cs
│ │ │ │ │ └── ProviderUserRemovedViewModel.cs
│ │ │ │ ├── SecurityTaskNotificationViewModel.cs
│ │ │ │ ├── TrustedDeviceAdminApprovalViewModel.cs
│ │ │ │ ├── TwoFactorEmailTokenViewModel.cs
│ │ │ │ ├── UpdateTempPasswordViewModel.cs
│ │ │ │ └── UserVerificationEmailTokenViewModel.cs
│ │ │ ├── OrganizationConnectionConfigs/
│ │ │ │ ├── BillingSyncConfig.cs
│ │ │ │ └── IConnectionConfig.cs
│ │ │ ├── PushNotification.cs
│ │ │ └── Stripe/
│ │ │ └── StripeInvoiceListOptions.cs
│ │ ├── NotificationCenter/
│ │ │ ├── Authorization/
│ │ │ │ ├── NotificationAuthorizationHandler.cs
│ │ │ │ ├── NotificationOperations.cs
│ │ │ │ ├── NotificationStatusAuthorizationHandler.cs
│ │ │ │ └── NotificationStatusOperations.cs
│ │ │ ├── Commands/
│ │ │ │ ├── CreateNotificationCommand.cs
│ │ │ │ ├── CreateNotificationStatusCommand.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── ICreateNotificationCommand.cs
│ │ │ │ │ ├── ICreateNotificationStatusCommand.cs
│ │ │ │ │ ├── IMarkNotificationDeletedCommand.cs
│ │ │ │ │ ├── IMarkNotificationReadCommand.cs
│ │ │ │ │ └── IUpdateNotificationCommand.cs
│ │ │ │ ├── MarkNotificationDeletedCommand.cs
│ │ │ │ ├── MarkNotificationReadCommand.cs
│ │ │ │ └── UpdateNotificationCommand.cs
│ │ │ ├── Entities/
│ │ │ │ ├── Notification.cs
│ │ │ │ └── NotificationStatus.cs
│ │ │ ├── Enums/
│ │ │ │ └── Priority.cs
│ │ │ ├── Models/
│ │ │ │ ├── Data/
│ │ │ │ │ └── NotificationStatusDetails.cs
│ │ │ │ └── Filter/
│ │ │ │ └── NotificationStatusFilter.cs
│ │ │ ├── NotificationCenterServiceCollectionExtensions.cs
│ │ │ ├── Queries/
│ │ │ │ ├── GetNotificationStatusDetailsForUserQuery.cs
│ │ │ │ ├── GetNotificationStatusForUserQuery.cs
│ │ │ │ └── Interfaces/
│ │ │ │ ├── IGetNotificationStatusDetailsForUserQuery.cs
│ │ │ │ └── IGetNotificationStatusForUserQuery.cs
│ │ │ └── Repositories/
│ │ │ ├── INotificationRepository.cs
│ │ │ └── INotificationStatusRepository.cs
│ │ ├── OrganizationFeatures/
│ │ │ ├── OrganizationCollections/
│ │ │ │ ├── BulkAddCollectionAccessCommand.cs
│ │ │ │ ├── CreateCollectionCommand.cs
│ │ │ │ ├── DeleteCollectionCommand.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IBulkAddCollectionAccessCommand.cs
│ │ │ │ │ ├── ICreateCollectionCommand.cs
│ │ │ │ │ ├── IDeleteCollectionCommand.cs
│ │ │ │ │ └── IUpdateCollectionCommand.cs
│ │ │ │ └── UpdateCollectionCommand.cs
│ │ │ ├── OrganizationServiceCollectionExtensions.cs
│ │ │ ├── OrganizationSponsorships/
│ │ │ │ └── FamiliesForEnterprise/
│ │ │ │ ├── CancelSponsorshipCommand.cs
│ │ │ │ ├── Cloud/
│ │ │ │ │ ├── CloudRevokeSponsorshipCommand.cs
│ │ │ │ │ ├── CloudSyncSponsorshipsCommand.cs
│ │ │ │ │ ├── OrganizationSponsorshipRenewCommand.cs
│ │ │ │ │ ├── RemoveSponsorshipCommand.cs
│ │ │ │ │ ├── SendSponsorshipOfferCommand.cs
│ │ │ │ │ ├── SetUpSponsorshipCommand.cs
│ │ │ │ │ ├── ValidateRedemptionTokenCommand.cs
│ │ │ │ │ └── ValidateSponsorshipCommand.cs
│ │ │ │ ├── CreateSponsorshipCommand.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── ICreateSponsorshipCommand.cs
│ │ │ │ │ ├── IOrganizationSponsorshipRenewCommand.cs
│ │ │ │ │ ├── IRemoveSponsorshipCommand.cs
│ │ │ │ │ ├── IRevokeSponsorshipCommand.cs
│ │ │ │ │ ├── ISendSponsorshipOfferCommand.cs
│ │ │ │ │ ├── ISetUpSponsorshipCommand.cs
│ │ │ │ │ ├── ISyncOrganizationSponsorshipsCommand.cs
│ │ │ │ │ ├── IValidateRedemptionTokenCommand.cs
│ │ │ │ │ └── IValidateSponsorshipCommand.cs
│ │ │ │ └── SelfHosted/
│ │ │ │ ├── SelfHostedRevokeSponsorshipCommand.cs
│ │ │ │ └── SelfHostedSyncSponsorshipsCommand.cs
│ │ │ └── OrganizationSubscriptions/
│ │ │ ├── AddSecretsManagerSubscriptionCommand.cs
│ │ │ ├── Interface/
│ │ │ │ ├── IAddSecretsManagerSubscriptionCommand.cs
│ │ │ │ ├── IUpdateSecretsManagerSubscriptionCommand.cs
│ │ │ │ └── IUpgradeOrganizationPlanCommand.cs
│ │ │ ├── OrganizationSubscriptionServiceCollectionExtensions.cs
│ │ │ ├── UpdateSecretsManagerSubscriptionCommand.cs
│ │ │ └── UpgradeOrganizationPlanCommand.cs
│ │ ├── Platform/
│ │ │ ├── Installations/
│ │ │ │ ├── Commands/
│ │ │ │ │ └── UpdateInstallationActivityDateCommand/
│ │ │ │ │ ├── IUpdateInstallationCommand.cs
│ │ │ │ │ └── UpdateInstallationCommand.cs
│ │ │ │ ├── Entities/
│ │ │ │ │ └── Installation.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ └── GetInstallationQuery/
│ │ │ │ │ ├── GetInstallationQuery.cs
│ │ │ │ │ └── IGetInstallationQuery.cs
│ │ │ │ └── Repositories/
│ │ │ │ └── IInstallationRepository.cs
│ │ │ ├── Mail/
│ │ │ │ ├── Delivery/
│ │ │ │ │ ├── AmazonSesMailDeliveryService.cs
│ │ │ │ │ ├── IMailDeliveryService.cs
│ │ │ │ │ ├── MailKitSmtpMailDeliveryService.cs
│ │ │ │ │ ├── MultiServiceMailDeliveryService.cs
│ │ │ │ │ ├── NoopMailDeliveryService.cs
│ │ │ │ │ └── SendGridMailDeliveryService.cs
│ │ │ │ ├── Enqueuing/
│ │ │ │ │ ├── AzureQueueMailService.cs
│ │ │ │ │ ├── BlockingMailQueueService.cs
│ │ │ │ │ └── IMailEnqueuingService.cs
│ │ │ │ ├── HandlebarsMailService.cs
│ │ │ │ ├── IMailService.cs
│ │ │ │ ├── Mailer/
│ │ │ │ │ ├── BaseMail.cs
│ │ │ │ │ ├── HandlebarMailRenderer.cs
│ │ │ │ │ ├── IMailRenderer.cs
│ │ │ │ │ ├── IMailer.cs
│ │ │ │ │ ├── Mailer.cs
│ │ │ │ │ └── MailerServiceCollectionExtensions.cs
│ │ │ │ ├── NoopMailService.cs
│ │ │ │ └── README.md
│ │ │ ├── PlatformServiceCollectionExtensions.cs
│ │ │ ├── Push/
│ │ │ │ ├── Engines/
│ │ │ │ │ ├── AzureQueuePushEngine.cs
│ │ │ │ │ ├── MultiServicePushNotificationService.cs
│ │ │ │ │ ├── NoopPushEngine.cs
│ │ │ │ │ ├── NotificationsApiPushEngine.cs
│ │ │ │ │ └── RelayPushEngine.cs
│ │ │ │ ├── IPushEngine.cs
│ │ │ │ ├── IPushNotificationService.cs
│ │ │ │ ├── IPushRelayer.cs
│ │ │ │ ├── NotificationHub/
│ │ │ │ │ ├── INotificationHubClientProxy.cs
│ │ │ │ │ ├── INotificationHubPool.cs
│ │ │ │ │ ├── NotificationHubClientProxy.cs
│ │ │ │ │ ├── NotificationHubConnection.cs
│ │ │ │ │ ├── NotificationHubPool.cs
│ │ │ │ │ └── NotificationHubPushEngine.cs
│ │ │ │ ├── NotificationInfoAttribute.cs
│ │ │ │ ├── NotificationTarget.cs
│ │ │ │ ├── PushNotification.cs
│ │ │ │ ├── PushServiceCollectionExtensions.cs
│ │ │ │ ├── PushType.cs
│ │ │ │ └── README.md
│ │ │ └── PushRegistration/
│ │ │ ├── IPushRegistrationService.cs
│ │ │ ├── NoopPushRegistrationService.cs
│ │ │ ├── NotificationHubPushRegistrationService.cs
│ │ │ ├── PushRegistrationData.cs
│ │ │ ├── PushRegistrationServiceCollectionExtensions.cs
│ │ │ ├── README.md
│ │ │ └── RelayPushRegistrationService.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Repositories/
│ │ │ ├── ICollectionCipherRepository.cs
│ │ │ ├── ICollectionRepository.cs
│ │ │ ├── IDeviceRepository.cs
│ │ │ ├── IInstallationDeviceRepository.cs
│ │ │ ├── IMaintenanceRepository.cs
│ │ │ ├── IOrganizationApiKeyRepository.cs
│ │ │ ├── IOrganizationConnectionRepository.cs
│ │ │ ├── IOrganizationDomainRepository.cs
│ │ │ ├── IOrganizationSponsorshipRepository.cs
│ │ │ ├── IPlayItemRepository.cs
│ │ │ ├── IRepository.cs
│ │ │ ├── ITransactionRepository.cs
│ │ │ ├── IUserRepository.cs
│ │ │ ├── Noop/
│ │ │ │ └── InstallationDeviceRepository.cs
│ │ │ └── TableStorage/
│ │ │ └── InstallationDeviceRepository.cs
│ │ ├── Resources/
│ │ │ ├── SharedResources.cs
│ │ │ └── SharedResources.en.resx
│ │ ├── SecretsManager/
│ │ │ ├── AuthorizationRequirements/
│ │ │ │ ├── BulkSecretOperationRequirement.cs
│ │ │ │ ├── ProjectOperationRequirement.cs
│ │ │ │ ├── ProjectPeopleAccessPoliciesOperationRequirement.cs
│ │ │ │ ├── ProjectServiceAccountsAccessPoliciesOperationRequirement.cs
│ │ │ │ ├── SecretAccessPoliciesOperationRequirement.cs
│ │ │ │ ├── SecretOperationRequirement.cs
│ │ │ │ ├── ServiceAccountGrantedPoliciesOperationRequirement.cs
│ │ │ │ ├── ServiceAccountOperationRequirement.cs
│ │ │ │ └── ServiceAccountPeopleAccessPoliciesOperationRequirement.cs
│ │ │ ├── Commands/
│ │ │ │ ├── AccessPolicies/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ ├── IUpdateProjectServiceAccountsAccessPoliciesCommand.cs
│ │ │ │ │ └── IUpdateServiceAccountGrantedPoliciesCommand.cs
│ │ │ │ ├── AccessTokens/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ └── ICreateAccessTokenCommand.cs
│ │ │ │ ├── Porting/
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ └── IImportCommand.cs
│ │ │ │ │ └── SMImport.cs
│ │ │ │ ├── Projects/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ ├── ICreateProjectCommand.cs
│ │ │ │ │ ├── IDeleteProjectCommand.cs
│ │ │ │ │ └── IUpdateProjectCommand.cs
│ │ │ │ ├── Requests/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ └── IRequestSMAccessCommand.cs
│ │ │ │ ├── Secrets/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ ├── ICreateSecretCommand.cs
│ │ │ │ │ ├── IDeleteSecretCommand.cs
│ │ │ │ │ └── IUpdateSecretCommand.cs
│ │ │ │ ├── ServiceAccounts/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ ├── ICreateServiceAccountCommand.cs
│ │ │ │ │ ├── IDeleteServiceAccountsCommand.cs
│ │ │ │ │ ├── IRevokeAccessTokensCommand.cs
│ │ │ │ │ └── IUpdateServiceAccountCommand.cs
│ │ │ │ └── Trash/
│ │ │ │ ├── IEmptyTrashCommand.cs
│ │ │ │ └── IRestoreTrashCommand.cs
│ │ │ ├── Entities/
│ │ │ │ ├── AccessPolicy.cs
│ │ │ │ ├── ApiKey.cs
│ │ │ │ ├── Project.cs
│ │ │ │ ├── Secret.cs
│ │ │ │ ├── SecretVersion.cs
│ │ │ │ └── ServiceAccount.cs
│ │ │ ├── Enums/
│ │ │ │ └── AccessPolicies/
│ │ │ │ └── AccessPolicyOperation.cs
│ │ │ ├── Models/
│ │ │ │ ├── Data/
│ │ │ │ │ ├── AccessPolicyUpdates/
│ │ │ │ │ │ ├── AccessPolicyUpdate.cs
│ │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesUpdates.cs
│ │ │ │ │ │ ├── SecretAccessPoliciesUpdates.cs
│ │ │ │ │ │ └── ServiceAccountProjectAccessPolicyUpdate.cs
│ │ │ │ │ ├── ApiKeyClientSecretDetails.cs
│ │ │ │ │ ├── ApiKeyDetails.cs
│ │ │ │ │ ├── PeopleGrantees.cs
│ │ │ │ │ ├── ProjectCounts.cs
│ │ │ │ │ ├── ProjectPeopleAccessPolicies.cs
│ │ │ │ │ ├── ProjectPermissionDetails.cs
│ │ │ │ │ ├── ProjectServiceAccountsAccessPolicies.cs
│ │ │ │ │ ├── SecretAccessPolicies.cs
│ │ │ │ │ ├── SecretPermissionDetails.cs
│ │ │ │ │ ├── SecretsSyncRequest.cs
│ │ │ │ │ ├── ServiceAccountCounts.cs
│ │ │ │ │ ├── ServiceAccountGrantedPolicies.cs
│ │ │ │ │ ├── ServiceAccountGrantedPoliciesPermissionDetails.cs
│ │ │ │ │ ├── ServiceAccountPeopleAccessPolicies.cs
│ │ │ │ │ └── ServiceAccountSecretsDetails.cs
│ │ │ │ └── Mail/
│ │ │ │ └── RequestSecretsManagerAccessViewModel.cs
│ │ │ ├── Queries/
│ │ │ │ ├── AccessPolicies/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ ├── IProjectServiceAccountsAccessPoliciesUpdatesQuery.cs
│ │ │ │ │ ├── ISameOrganizationQuery.cs
│ │ │ │ │ ├── ISecretAccessPoliciesUpdatesQuery.cs
│ │ │ │ │ └── IServiceAccountGrantedPolicyUpdatesQuery.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ └── IAccessClientQuery.cs
│ │ │ │ ├── Projects/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ └── IMaxProjectsQuery.cs
│ │ │ │ ├── Secrets/
│ │ │ │ │ └── Interfaces/
│ │ │ │ │ └── ISecretsSyncQuery.cs
│ │ │ │ └── ServiceAccounts/
│ │ │ │ └── Interfaces/
│ │ │ │ ├── ICountNewServiceAccountSlotsRequiredQuery.cs
│ │ │ │ └── IServiceAccountSecretsDetailsQuery.cs
│ │ │ └── Repositories/
│ │ │ ├── IAccessPolicyRepository.cs
│ │ │ ├── IApiKeyRepository.cs
│ │ │ ├── IProjectRepository.cs
│ │ │ ├── ISecretRepository.cs
│ │ │ ├── ISecretVersionRepository.cs
│ │ │ ├── IServiceAccountRepository.cs
│ │ │ └── Noop/
│ │ │ ├── NoopProjectRepository.cs
│ │ │ ├── NoopSecretRepository.cs
│ │ │ ├── NoopSecretVersionRepository.cs
│ │ │ └── NoopServiceAccountRepository.cs
│ │ ├── Services/
│ │ │ ├── IApplicationCacheService.cs
│ │ │ ├── IAttachmentStorageService.cs
│ │ │ ├── IBraintreeService.cs
│ │ │ ├── IDeviceService.cs
│ │ │ ├── IDnsResolverService.cs
│ │ │ ├── IFeatureService.cs
│ │ │ ├── II18nService.cs
│ │ │ ├── IUserService.cs
│ │ │ ├── Implementations/
│ │ │ │ ├── AzureQueueService.cs
│ │ │ │ ├── BaseIdentityClientService.cs
│ │ │ │ ├── BraintreeService.cs
│ │ │ │ ├── DeviceService.cs
│ │ │ │ ├── DnsResolverService.cs
│ │ │ │ ├── FeatureRoutedCacheService.cs
│ │ │ │ ├── I18nService.cs
│ │ │ │ ├── I18nViewLocalizer.cs
│ │ │ │ ├── InMemoryApplicationCacheService.cs
│ │ │ │ ├── InMemoryServiceBusApplicationCacheService.cs
│ │ │ │ ├── LaunchDarklyFeatureService.cs
│ │ │ │ └── UserService.cs
│ │ │ └── Play/
│ │ │ ├── IPlayIdService.cs
│ │ │ ├── IPlayItemService.cs
│ │ │ ├── Implementations/
│ │ │ │ ├── NeverPlayIdServices.cs
│ │ │ │ ├── PlayIdService.cs
│ │ │ │ ├── PlayIdSingletonService.cs
│ │ │ │ └── PlayItemService.cs
│ │ │ └── README.md
│ │ ├── Settings/
│ │ │ ├── GlobalSettings.cs
│ │ │ ├── IBaseServiceUriSettings.cs
│ │ │ ├── ICommunicationSettings.cs
│ │ │ ├── IConnectionStringSettings.cs
│ │ │ ├── IDomainVerificationSettings.cs
│ │ │ ├── IFileStorageSettings.cs
│ │ │ ├── IGlobalSettings.cs
│ │ │ ├── IInstallationSettings.cs
│ │ │ ├── ILaunchDarklySettings.cs
│ │ │ ├── ISsoCookieVendorSettings.cs
│ │ │ └── IWebPushSettings.cs
│ │ ├── Tokens/
│ │ │ ├── BadTokenException.cs
│ │ │ ├── DataProtectorTokenFactory.cs
│ │ │ ├── ExpiringTokenable.cs
│ │ │ ├── IBillingSyncTokenable.cs
│ │ │ ├── IDataProtectorTokenFactory.cs
│ │ │ ├── Token.cs
│ │ │ └── Tokenable.cs
│ │ ├── Tools/
│ │ │ ├── Entities/
│ │ │ │ └── Send.cs
│ │ │ ├── Enums/
│ │ │ │ ├── AuthType.cs
│ │ │ │ └── SendType.cs
│ │ │ ├── ImportFeatures/
│ │ │ │ ├── ImportCiphersCommand.cs
│ │ │ │ ├── ImportServiceCollectionExtension.cs
│ │ │ │ └── Interfaces/
│ │ │ │ └── IImportCiphersCommand.cs
│ │ │ ├── Models/
│ │ │ │ └── Data/
│ │ │ │ ├── SendAccessResult.cs
│ │ │ │ ├── SendAuthenticationTypes.cs
│ │ │ │ ├── SendData.cs
│ │ │ │ ├── SendFileData.cs
│ │ │ │ └── SendTextData.cs
│ │ │ ├── Repositories/
│ │ │ │ └── ISendRepository.cs
│ │ │ ├── SendFeatures/
│ │ │ │ ├── Commands/
│ │ │ │ │ ├── AnonymousSendCommand.cs
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── IAnonymousSendCommand.cs
│ │ │ │ │ │ └── INonAnonymousSendCommand.cs
│ │ │ │ │ └── NonAnonymousSendCommand.cs
│ │ │ │ ├── Queries/
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ ├── ISendAuthenticationQuery.cs
│ │ │ │ │ │ └── ISendOwnerQuery.cs
│ │ │ │ │ ├── SendAuthenticationQuery.cs
│ │ │ │ │ └── SendOwnerQuery.cs
│ │ │ │ ├── SendServiceCollectionExtension.cs
│ │ │ │ └── Services/
│ │ │ │ ├── AzureSendFileStorageService.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── ISendAuthorizationService.cs
│ │ │ │ │ ├── ISendCoreHelperService.cs
│ │ │ │ │ ├── ISendStorageService.cs
│ │ │ │ │ └── ISendValidationService.cs
│ │ │ │ ├── LocalSendStorageService.cs
│ │ │ │ ├── SendAuthorizationService.cs
│ │ │ │ ├── SendCoreHelperService.cs
│ │ │ │ ├── SendFileSettingHelper.cs
│ │ │ │ └── SendValidationService.cs
│ │ │ └── Services/
│ │ │ └── NoopImplementations/
│ │ │ └── NoopSendFileStorageService.cs
│ │ ├── Utilities/
│ │ │ ├── AssemblyHelpers.cs
│ │ │ ├── AuthorizationServiceExtensions.cs
│ │ │ ├── BillingHelpers.cs
│ │ │ ├── BulkAuthorizationHandler.cs
│ │ │ ├── CACHING.md
│ │ │ ├── ClaimsExtensions.cs
│ │ │ ├── CoreHelpers.cs
│ │ │ ├── CurrentContextMiddleware.cs
│ │ │ ├── CustomIpRateLimitMiddleware.cs
│ │ │ ├── CustomRedisProcessingStrategy.cs
│ │ │ ├── DeviceTypes.cs
│ │ │ ├── DistributedCacheExtensions.cs
│ │ │ ├── DomainNameAttribute.cs
│ │ │ ├── EmailValidation.cs
│ │ │ ├── EncryptedStringAttribute.cs
│ │ │ ├── EncryptedStringLengthAttribute.cs
│ │ │ ├── EnumMemberJsonConverter.cs
│ │ │ ├── EnumerationProtectionHelpers.cs
│ │ │ ├── EpochDateTimeJsonConverter.cs
│ │ │ ├── EventIntegrationsCacheConstants.cs
│ │ │ ├── ExtendedCacheServiceCollectionExtensions.cs
│ │ │ ├── HandlebarsObjectJsonConverter.cs
│ │ │ ├── HostBuilderExtensions.cs
│ │ │ ├── IDbMigrator.cs
│ │ │ ├── JsonHelpers.cs
│ │ │ ├── KdfSettingsValidator.cs
│ │ │ ├── LoggerFactoryExtensions.cs
│ │ │ ├── LoggingExceptionHandlerFilterAttribute.cs
│ │ │ ├── ModelStateExtensions.cs
│ │ │ ├── OrganizationReportCacheConstants.cs
│ │ │ ├── RequireFeatureAttribute.cs
│ │ │ ├── RequireLowerEnvironmentAttribute.cs
│ │ │ ├── SecurityHeadersMiddleware.cs
│ │ │ ├── SelfHostedAttribute.cs
│ │ │ ├── SpanExtensions.cs
│ │ │ ├── StaticStore.cs
│ │ │ ├── StrictEmailAddressAttribute.cs
│ │ │ ├── StrictEmailAddressListAttribute.cs
│ │ │ └── SystemTextJsonCosmosSerializer.cs
│ │ ├── Vault/
│ │ │ ├── Authorization/
│ │ │ │ ├── Permissions/
│ │ │ │ │ └── NormalCipherPermissions.cs
│ │ │ │ └── SecurityTasks/
│ │ │ │ ├── SecurityTaskAuthorizationHandler.cs
│ │ │ │ ├── SecurityTaskOperationRequirement.cs
│ │ │ │ └── SecurityTaskOrganizationAuthorizationHandler.cs
│ │ │ ├── Commands/
│ │ │ │ ├── ArchiveCiphersCommand.cs
│ │ │ │ ├── CreateManyTaskNotificationsCommand.cs
│ │ │ │ ├── CreateManyTasksCommand.cs
│ │ │ │ ├── Interfaces/
│ │ │ │ │ ├── IArchiveCiphersCommand.cs
│ │ │ │ │ ├── ICreateManyTaskNotificationsCommand.cs
│ │ │ │ │ ├── ICreateManyTasksCommand.cs
│ │ │ │ │ ├── IMarkNotificationsForTaskAsDeletedCommand.cs
│ │ │ │ │ ├── IMarkTaskAsCompleteCommand.cs
│ │ │ │ │ └── IUnarchiveCiphersCommand.cs
│ │ │ │ ├── MarkNotificationsForTaskAsDeletedCommand.cs
│ │ │ │ ├── MarkTaskAsCompletedCommand.cs
│ │ │ │ └── UnarchiveCiphersCommand.cs
│ │ │ ├── Entities/
│ │ │ │ ├── Cipher.cs
│ │ │ │ ├── SecurityTask.cs
│ │ │ │ └── SecurityTaskMetrics.cs
│ │ │ ├── Enums/
│ │ │ │ ├── CipherRepromptType.cs
│ │ │ │ ├── CipherStateAction.cs
│ │ │ │ ├── CipherType.cs
│ │ │ │ ├── FieldType.cs
│ │ │ │ ├── SecureNoteType.cs
│ │ │ │ ├── SecurityTaskStatus.cs
│ │ │ │ └── SecurityTaskType.cs
│ │ │ ├── Models/
│ │ │ │ ├── Api/
│ │ │ │ │ └── SecurityTaskCreateRequest.cs
│ │ │ │ └── Data/
│ │ │ │ ├── AttachmentResponseData.cs
│ │ │ │ ├── CipherAttachment.cs
│ │ │ │ ├── CipherCardData.cs
│ │ │ │ ├── CipherData.cs
│ │ │ │ ├── CipherDetails.cs
│ │ │ │ ├── CipherFieldData.cs
│ │ │ │ ├── CipherIdentityData.cs
│ │ │ │ ├── CipherLoginData.cs
│ │ │ │ ├── CipherLoginFido2CredentialData.cs
│ │ │ │ ├── CipherOrganizationDetails.cs
│ │ │ │ ├── CipherPasswordHistoryData.cs
│ │ │ │ ├── CipherSSHKeyData.cs
│ │ │ │ ├── CipherSecureNoteData.cs
│ │ │ │ ├── DeleteAttachmentReponseData.cs
│ │ │ │ ├── OrganizationCipherPermission.cs
│ │ │ │ ├── UserCipherForTask.cs
│ │ │ │ ├── UserSecurityTaskCipher.cs
│ │ │ │ └── UserSecurityTasksCount.cs
│ │ │ ├── Queries/
│ │ │ │ ├── GetCipherPermissionsForUserQuery.cs
│ │ │ │ ├── GetSecurityTasksNotificationDetailsQuery.cs
│ │ │ │ ├── GetTaskDetailsForUserQuery.cs
│ │ │ │ ├── GetTaskMetricsForOrganizationQuery.cs
│ │ │ │ ├── GetTasksForOrganizationQuery.cs
│ │ │ │ ├── IGetCipherPermissionsForUserQuery.cs
│ │ │ │ ├── IGetSecurityTasksNotificationDetailsQuery.cs
│ │ │ │ ├── IGetTaskDetailsForUserQuery.cs
│ │ │ │ ├── IGetTaskMetricsForOrganizationQuery.cs
│ │ │ │ ├── IGetTasksForOrganizationQuery.cs
│ │ │ │ ├── IOrganizationCiphersQuery.cs
│ │ │ │ └── OrganizationCiphersQuery.cs
│ │ │ ├── Repositories/
│ │ │ │ ├── ICipherRepository.cs
│ │ │ │ ├── IFolderRepository.cs
│ │ │ │ └── ISecurityTaskRepository.cs
│ │ │ ├── Services/
│ │ │ │ ├── ICipherService.cs
│ │ │ │ ├── Implementations/
│ │ │ │ │ ├── AzureAttachmentStorageService.cs
│ │ │ │ │ ├── CipherService.cs
│ │ │ │ │ └── LocalAttachmentStorageService.cs
│ │ │ │ └── NoopImplementations/
│ │ │ │ └── NoopAttachmentStorageService.cs
│ │ │ └── VaultServiceCollectionExtensions.cs
│ │ ├── licensing.cer
│ │ └── licensing_dev.cer
│ ├── Events/
│ │ ├── Controllers/
│ │ │ ├── CollectController.cs
│ │ │ └── InfoController.cs
│ │ ├── Dockerfile
│ │ ├── Events.csproj
│ │ ├── Models/
│ │ │ └── EventModel.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Startup.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ └── entrypoint.sh
│ ├── EventsProcessor/
│ │ ├── AzureQueueHostedService.cs
│ │ ├── Dockerfile
│ │ ├── EventsProcessor.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Startup.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ └── entrypoint.sh
│ ├── Icons/
│ │ ├── Controllers/
│ │ │ ├── ChangePasswordUriController.cs
│ │ │ ├── IconsController.cs
│ │ │ └── InfoController.cs
│ │ ├── Dockerfile
│ │ ├── Icons.csproj
│ │ ├── IconsSettings.cs
│ │ ├── Models/
│ │ │ ├── ChangePasswordUriResponse.cs
│ │ │ ├── ChangePasswordUriSettings.cs
│ │ │ ├── DomainIcons.cs
│ │ │ ├── DomainName.cs
│ │ │ ├── Icon.cs
│ │ │ ├── IconHttpRequest.cs
│ │ │ ├── IconHttpResponse.cs
│ │ │ ├── IconLink.cs
│ │ │ └── IconUri.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Services/
│ │ │ ├── ChangePasswordUriService.cs
│ │ │ ├── DomainMappingService.cs
│ │ │ ├── IChangePasswordUriService.cs
│ │ │ ├── IDomainMappingService.cs
│ │ │ ├── IIconFetchingService.cs
│ │ │ ├── IUriService.cs
│ │ │ ├── IconFetchingService.cs
│ │ │ └── UriService.cs
│ │ ├── Startup.cs
│ │ ├── Util/
│ │ │ ├── IPAddressExtension.cs
│ │ │ ├── ServiceCollectionExtension.cs
│ │ │ ├── UriBuilderExtension.cs
│ │ │ └── UriExtension.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.sh
│ │ └── entrypoint.sh
│ ├── Identity/
│ │ ├── Billing/
│ │ │ └── Controller/
│ │ │ └── AccountsController.cs
│ │ ├── Controllers/
│ │ │ ├── AccountsController.cs
│ │ │ ├── InfoController.cs
│ │ │ └── SsoController.cs
│ │ ├── Dockerfile
│ │ ├── Identity.csproj
│ │ ├── IdentityServer/
│ │ │ ├── ApiClient.cs
│ │ │ ├── ApiResources.cs
│ │ │ ├── AuthorizationCodeStore.cs
│ │ │ ├── ClientProviders/
│ │ │ │ ├── InstallationClientProvider.cs
│ │ │ │ ├── InternalClientProvider.cs
│ │ │ │ ├── OrganizationClientProvider.cs
│ │ │ │ ├── SecretsManagerApiKeyProvider.cs
│ │ │ │ └── UserClientProvider.cs
│ │ │ ├── Constants/
│ │ │ │ └── RequestValidationConstants.cs
│ │ │ ├── CustomValidatorRequestContext.cs
│ │ │ ├── DynamicClientStore.cs
│ │ │ ├── Enums/
│ │ │ │ ├── CustomGrantTypes.cs
│ │ │ │ └── DeviceValidationResultType.cs
│ │ │ ├── IUserDecryptionOptionsBuilder.cs
│ │ │ ├── PersistedGrantStore.cs
│ │ │ ├── ProfileService.cs
│ │ │ ├── RequestValidators/
│ │ │ │ ├── BaseRequestValidator.cs
│ │ │ │ ├── ClientVersionValidator.cs
│ │ │ │ ├── CustomTokenRequestValidator.cs
│ │ │ │ ├── DeviceValidator.cs
│ │ │ │ ├── IDeviceValidator.cs
│ │ │ │ ├── ISsoRequestValidator.cs
│ │ │ │ ├── ITwoFactorAuthenticationValidator.cs
│ │ │ │ ├── ResourceOwnerPasswordValidator.cs
│ │ │ │ ├── SendAccess/
│ │ │ │ │ ├── ISendAuthenticationMethodValidator.cs
│ │ │ │ │ ├── SendAccessConstants.cs
│ │ │ │ │ ├── SendAccessGrantValidator.cs
│ │ │ │ │ ├── SendEmailOtpRequestValidator.cs
│ │ │ │ │ ├── SendNeverAuthenticateRequestValidator.cs
│ │ │ │ │ ├── SendPasswordRequestValidator.cs
│ │ │ │ │ └── readme.md
│ │ │ │ ├── SsoRequestValidator.cs
│ │ │ │ ├── TwoFactorAuthenticationValidator.cs
│ │ │ │ └── WebAuthnGrantValidator.cs
│ │ │ ├── ServiceCollectionExtensions.cs
│ │ │ ├── StaticClientStore.cs
│ │ │ ├── StaticClients/
│ │ │ │ └── SendClientBuilder.cs
│ │ │ ├── UserDecryptionOptionsBuilder.cs
│ │ │ └── VaultCorsPolicyService.cs
│ │ ├── Models/
│ │ │ ├── RedirectViewModel.cs
│ │ │ ├── Request/
│ │ │ │ └── Accounts/
│ │ │ │ └── PasswordPreloginRequestModel.cs
│ │ │ └── Response/
│ │ │ └── Accounts/
│ │ │ ├── PasswordPreloginResponseModel.cs
│ │ │ └── RegisterFinishResponseModel.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Startup.cs
│ │ ├── Utilities/
│ │ │ ├── DiscoveryResponseGenerator.cs
│ │ │ ├── LoginApprovingClientTypes.cs
│ │ │ └── ServiceCollectionExtensions.cs
│ │ ├── Views/
│ │ │ └── Shared/
│ │ │ └── Redirect.cshtml
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ └── entrypoint.sh
│ ├── Infrastructure.Dapper/
│ │ ├── AdminConsole/
│ │ │ ├── Helpers/
│ │ │ │ └── BulkResourceCreationService.cs
│ │ │ └── Repositories/
│ │ │ ├── GroupRepository.cs
│ │ │ ├── OrganizationRepository.cs
│ │ │ ├── OrganizationUserRepository.cs
│ │ │ ├── PolicyRepository.cs
│ │ │ ├── ProviderOrganizationRepository.cs
│ │ │ ├── ProviderRepository.cs
│ │ │ └── ProviderUserRepository.cs
│ │ ├── Auth/
│ │ │ ├── Helpers/
│ │ │ │ └── EmergencyAccessHelpers.cs
│ │ │ └── Repositories/
│ │ │ ├── AuthRequestRepository.cs
│ │ │ ├── EmergencyAccessRepository.cs
│ │ │ ├── GrantRepository.cs
│ │ │ ├── SsoConfigRepository.cs
│ │ │ ├── SsoUserRepository.cs
│ │ │ └── WebAuthnCredentialRepository.cs
│ │ ├── Billing/
│ │ │ └── Repositories/
│ │ │ ├── ClientOrganizationMigrationRecordRepository.cs
│ │ │ ├── OrganizationInstallationRepository.cs
│ │ │ ├── ProviderInvoiceItemRepository.cs
│ │ │ ├── ProviderPlanRepository.cs
│ │ │ └── SubscriptionDiscountRepository.cs
│ │ ├── DapperHelpers.cs
│ │ ├── DapperServiceCollectionExtensions.cs
│ │ ├── Dirt/
│ │ │ ├── OrganizationApplicationRepository.cs
│ │ │ ├── OrganizationMemberBaseDetailRepository.cs
│ │ │ ├── OrganizationReportRepository.cs
│ │ │ ├── PasswordHealthReportApplicationRepository.cs
│ │ │ └── Repositories/
│ │ │ ├── EventRepository.cs
│ │ │ ├── OrganizationIntegrationConfigurationRepository.cs
│ │ │ └── OrganizationIntegrationRepository.cs
│ │ ├── Infrastructure.Dapper.csproj
│ │ ├── KeyManagement/
│ │ │ └── Repositories/
│ │ │ ├── UserAsymmetricKeysRepository.cs
│ │ │ └── UserSignatureKeyPairRepository.cs
│ │ ├── NotificationCenter/
│ │ │ └── Repositories/
│ │ │ ├── NotificationRepository.cs
│ │ │ └── NotificationStatusRepository.cs
│ │ ├── Platform/
│ │ │ └── Installations/
│ │ │ └── Repositories/
│ │ │ └── InstallationRepository.cs
│ │ ├── Repositories/
│ │ │ ├── BaseRepository.cs
│ │ │ ├── CollectionCipherRepository.cs
│ │ │ ├── CollectionRepository.cs
│ │ │ ├── DateTimeHandler.cs
│ │ │ ├── DeviceRepository.cs
│ │ │ ├── JsonCollectionTypeHandler.cs
│ │ │ ├── MaintenanceRepository.cs
│ │ │ ├── OrganizationApiKeyRepository.cs
│ │ │ ├── OrganizationConnectionRepository.cs
│ │ │ ├── OrganizationDomainRepository.cs
│ │ │ ├── OrganizationSponsorshipRepository.cs
│ │ │ ├── PlayItemRepository.cs
│ │ │ ├── Repository.cs
│ │ │ ├── TransactionRepository.cs
│ │ │ └── UserRepository.cs
│ │ ├── SecretsManager/
│ │ │ └── Repositories/
│ │ │ └── ApiKeyRepository.cs
│ │ ├── Tools/
│ │ │ ├── Helpers/
│ │ │ │ └── SendHelpers.cs
│ │ │ └── Repositories/
│ │ │ └── SendRepository.cs
│ │ ├── Utilities/
│ │ │ └── SqlGuidHelpers.cs
│ │ └── Vault/
│ │ ├── Helpers/
│ │ │ ├── CipherHelpers.cs
│ │ │ └── FolderHelpers.cs
│ │ └── Repositories/
│ │ ├── CipherRepository.cs
│ │ ├── FolderRepository.cs
│ │ └── SecurityTaskRepository.cs
│ ├── Infrastructure.EntityFramework/
│ │ ├── AdminConsole/
│ │ │ ├── Configurations/
│ │ │ │ ├── OrganizationEntityTypeConfiguration.cs
│ │ │ │ ├── OrganizationIntegrationConfigurationEntityTypeConfiguration.cs
│ │ │ │ ├── OrganizationIntegrationEntityTypeConfiguration.cs
│ │ │ │ ├── PolicyEntityTypeConfiguration.cs
│ │ │ │ └── ProviderEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ ├── Organization.cs
│ │ │ │ ├── Policy.cs
│ │ │ │ └── Provider/
│ │ │ │ ├── Provider.cs
│ │ │ │ ├── ProviderOrganization.cs
│ │ │ │ └── ProviderUser.cs
│ │ │ └── Repositories/
│ │ │ ├── GroupRepository.cs
│ │ │ ├── OrganizationRepository.cs
│ │ │ ├── OrganizationUserRepository.cs
│ │ │ ├── PolicyRepository.cs
│ │ │ ├── ProviderOrganizationRepository.cs
│ │ │ ├── ProviderRepository.cs
│ │ │ ├── ProviderUserRepository.cs
│ │ │ └── Queries/
│ │ │ ├── OrganizationUserOrganizationDetailsViewQuery.cs
│ │ │ ├── OrganizationUserReadByClaimedOrganizationDomainsQuery.cs
│ │ │ ├── OrganizationUserReadCountByFreeOrganizationAdminUserQuery.cs
│ │ │ ├── OrganizationUserReadCountByOrganizationIdEmailQuery.cs
│ │ │ ├── OrganizationUserReadCountByOrganizationIdQuery.cs
│ │ │ ├── OrganizationUserReadOccupiedSmSeatCountByOrganizationIdQuery.cs
│ │ │ ├── OrganizationUserUpdateWithCollectionsQuery.cs
│ │ │ ├── OrganizationUserUserViewQuery.cs
│ │ │ ├── PolicyReadByUserIdQuery.cs
│ │ │ ├── ProviderOrganizationCountByOrganizationIdsQuery.cs
│ │ │ ├── ProviderOrganizationOrganizationDetailsReadByProviderIdQuery.cs
│ │ │ ├── ProviderOrganizationReadByUserIdQuery.cs
│ │ │ ├── ProviderUserOrganizationDetailsViewQuery.cs
│ │ │ └── ProviderUserProviderDetailsReadByUserIdStatusQuery.cs
│ │ ├── Auth/
│ │ │ ├── Configurations/
│ │ │ │ ├── AuthRequestConfiguration.cs
│ │ │ │ ├── GrantEntityTypeConfiguration.cs
│ │ │ │ └── SsoUserEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ ├── AuthRequest.cs
│ │ │ │ ├── EmergencyAccess.cs
│ │ │ │ ├── Grant.cs
│ │ │ │ ├── SsoConfig.cs
│ │ │ │ ├── SsoUser.cs
│ │ │ │ └── WebAuthnCredential.cs
│ │ │ └── Repositories/
│ │ │ ├── AuthRequestRepository.cs
│ │ │ ├── EmergencyAccessRepository.cs
│ │ │ ├── GrantRepository.cs
│ │ │ ├── Queries/
│ │ │ │ ├── DeviceWithPendingAuthByUserIdQuery.cs
│ │ │ │ ├── EmergencyAccessDetailsViewQuery.cs
│ │ │ │ └── EmergencyAccessReadCountByGrantorIdEmailQuery.cs
│ │ │ ├── SsoConfigRepository.cs
│ │ │ ├── SsoUserRepository.cs
│ │ │ └── WebAuthnCredentialRepository.cs
│ │ ├── Billing/
│ │ │ ├── Configurations/
│ │ │ │ ├── ClientOrganizationMigrationRecordEntityTypeConfiguration.cs
│ │ │ │ ├── OrganizationInstallationEntityTypeConfiguration.cs
│ │ │ │ ├── ProviderInvoiceItemEntityTypeConfiguration.cs
│ │ │ │ ├── ProviderPlanEntityTypeConfiguration.cs
│ │ │ │ └── SubscriptionDiscountEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ ├── ClientOrganizationMigrationRecord.cs
│ │ │ │ ├── OrganizationInstallation.cs
│ │ │ │ ├── ProviderInvoiceItem.cs
│ │ │ │ ├── ProviderPlan.cs
│ │ │ │ └── SubscriptionDiscount.cs
│ │ │ └── Repositories/
│ │ │ ├── ClientOrganizationMigrationRecordRepository.cs
│ │ │ ├── OrganizationInstallationRepository.cs
│ │ │ ├── ProviderInvoiceItemRepository.cs
│ │ │ ├── ProviderPlanRepository.cs
│ │ │ └── SubscriptionDiscountRepository.cs
│ │ ├── Configurations/
│ │ │ ├── CacheEntityTypeConfiguration.cs
│ │ │ ├── DeviceEntityTypeConfiguration.cs
│ │ │ ├── OrganizationSponsorshipEntityTypeConfiguration.cs
│ │ │ ├── OrganizationUserEntityTypeConfiguration.cs
│ │ │ ├── PlayItemEntityTypeConfiguration.cs
│ │ │ ├── TransactionEntityTypeConfiguration.cs
│ │ │ └── UserEntityTypeConfiguration.cs
│ │ ├── Converters/
│ │ │ └── DataProtectionConverter.cs
│ │ ├── Dirt/
│ │ │ ├── Configurations/
│ │ │ │ ├── EventEntityTypeConfiguration.cs
│ │ │ │ ├── OrganizationApplicationEntityTypeConfiguration.cs
│ │ │ │ ├── OrganizationReportEntityTypeConfiguration.cs
│ │ │ │ └── PasswordHealthReportApplicationEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ ├── Event.cs
│ │ │ │ ├── OrganizationApplication.cs
│ │ │ │ ├── OrganizationIntegration.cs
│ │ │ │ ├── OrganizationIntegrationConfiguration.cs
│ │ │ │ ├── OrganizationReport.cs
│ │ │ │ └── PasswordHealthReportApplication.cs
│ │ │ ├── OrganizationMemberBaseDetailRepository.cs
│ │ │ └── Repositories/
│ │ │ ├── EventRepository.cs
│ │ │ ├── OrganizationApplicationRepository.cs
│ │ │ ├── OrganizationIntegrationConfigurationRepository.cs
│ │ │ ├── OrganizationIntegrationRepository.cs
│ │ │ ├── OrganizationReportRepository.cs
│ │ │ ├── PasswordHealthReportApplicationRepository.cs
│ │ │ └── Queries/
│ │ │ ├── EventReadPageByCipherIdQuery.cs
│ │ │ ├── EventReadPageByOrganizationIdActingUserIdQuery.cs
│ │ │ ├── EventReadPageByOrganizationIdQuery.cs
│ │ │ ├── EventReadPageByOrganizationIdServiceAccountIdQuery.cs
│ │ │ ├── EventReadPageByProjectIdQuery.cs
│ │ │ ├── EventReadPageByProviderIdActingUserIdQuery.cs
│ │ │ ├── EventReadPageByProviderIdQuery.cs
│ │ │ ├── EventReadPageBySecretIdQuery.cs
│ │ │ ├── EventReadPageByServiceAccountIdQuery.cs
│ │ │ ├── EventReadPageByUserIdQuery.cs
│ │ │ ├── OrganizationIntegrationConfigurationDetailsReadManyByEventTypeOrganizationIdIntegrationTypeQuery.cs
│ │ │ ├── OrganizationIntegrationConfigurationDetailsReadManyQuery.cs
│ │ │ ├── OrganizationIntegrationConfigurationReadManyByOrganizationIntegrationIdQuery.cs
│ │ │ ├── OrganizationIntegrationReadByTeamsConfigurationTenantIdTeamIdQuery.cs
│ │ │ └── OrganizationIntegrationReadManyByOrganizationIdQuery.cs
│ │ ├── EfExtensions.cs
│ │ ├── EntityFrameworkCache.cs
│ │ ├── EntityFrameworkServiceCollectionExtensions.cs
│ │ ├── Infrastructure.EntityFramework.csproj
│ │ ├── KeyManagement/
│ │ │ ├── Configurations/
│ │ │ │ └── UserSignatureKeyPairEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ └── UserSignatureKeyPair.cs
│ │ │ └── Repositories/
│ │ │ ├── UserAsymmetricKeysRepository.cs
│ │ │ └── UserSignatureKeyPairRepository.cs
│ │ ├── Models/
│ │ │ ├── Cache.cs
│ │ │ ├── Collection.cs
│ │ │ ├── CollectionCipher.cs
│ │ │ ├── CollectionGroup.cs
│ │ │ ├── CollectionUser.cs
│ │ │ ├── Device.cs
│ │ │ ├── Group.cs
│ │ │ ├── GroupUser.cs
│ │ │ ├── OrganizationApiKey.cs
│ │ │ ├── OrganizationConnection.cs
│ │ │ ├── OrganizationDomain.cs
│ │ │ ├── OrganizationSponsorship.cs
│ │ │ ├── OrganizationUser.cs
│ │ │ ├── PlayItem.cs
│ │ │ ├── Role.cs
│ │ │ ├── TaxRate.cs
│ │ │ ├── Transaction.cs
│ │ │ └── User.cs
│ │ ├── NotificationCenter/
│ │ │ ├── Configurations/
│ │ │ │ ├── NotificationEntityTypeConfiguration.cs
│ │ │ │ └── NotificationStatusEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ ├── Notification.cs
│ │ │ │ └── NotificationStatus.cs
│ │ │ └── Repositories/
│ │ │ ├── NotificationRepository.cs
│ │ │ ├── NotificationStatusRepository.cs
│ │ │ └── Queries/
│ │ │ └── NotificationStatusDetailsViewQuery.cs
│ │ ├── Platform/
│ │ │ └── Installations/
│ │ │ ├── Models/
│ │ │ │ └── Installation.cs
│ │ │ └── Repositories/
│ │ │ └── InstallationRepository.cs
│ │ ├── Repositories/
│ │ │ ├── BaseEntityFrameworkRepository.cs
│ │ │ ├── CollectionCipherRepository.cs
│ │ │ ├── CollectionRepository.cs
│ │ │ ├── DatabaseContext.cs
│ │ │ ├── DatabaseContextExtensions.cs
│ │ │ ├── DeviceRepository.cs
│ │ │ ├── MaintenanceRepository.cs
│ │ │ ├── OrganizationApiKeyRepository.cs
│ │ │ ├── OrganizationConnectionRepository.cs
│ │ │ ├── OrganizationDomainRepository.cs
│ │ │ ├── OrganizationSponsorshipRepository.cs
│ │ │ ├── PlayItemRepository.cs
│ │ │ ├── Queries/
│ │ │ │ ├── CollectionAdminDetailsQuery.cs
│ │ │ │ ├── CollectionCipherReadByUserIdCipherIdQuery.cs
│ │ │ │ ├── CollectionCipherReadByUserIdQuery.cs
│ │ │ │ ├── CollectionReadCountByOrganizationIdQuery.cs
│ │ │ │ ├── CollectionUserUpdateUsersQuery.cs
│ │ │ │ ├── CollectionsReadByOrganizationIdUserIdQuery.cs
│ │ │ │ ├── GroupUserUpdateGroupsQuery.cs
│ │ │ │ ├── IQuery.cs
│ │ │ │ ├── UserBumpAccountRevisionDateByCipherIdQuery.cs
│ │ │ │ ├── UserBumpAccountRevisionDateByOrganizationIdQuery.cs
│ │ │ │ ├── UserCipherDetailsQuery.cs
│ │ │ │ ├── UserCollectionDetailsQuery.cs
│ │ │ │ └── UserReadPublicKeysByProviderUserIdsQuery.cs
│ │ │ ├── Repository.cs
│ │ │ ├── TransactionRepository.cs
│ │ │ └── UserRepository.cs
│ │ ├── SecretsManager/
│ │ │ ├── Configurations/
│ │ │ │ ├── AccessPolicyEntityTypeConfiguration.cs
│ │ │ │ ├── ApiKeyEntityTypeConfiguration.cs
│ │ │ │ ├── ProjectEntityTypeConfiguration.cs
│ │ │ │ ├── SecretEntityTypeConfiguration.cs
│ │ │ │ ├── SecretVersionEntityTypeConfiguration.cs
│ │ │ │ └── ServiceAccountEntityTypeConfiguration.cs
│ │ │ ├── Discriminators/
│ │ │ │ └── AccessPolicyDiscriminator.cs
│ │ │ ├── Models/
│ │ │ │ ├── AccessPolicy.cs
│ │ │ │ ├── ApiKey.cs
│ │ │ │ ├── Project.cs
│ │ │ │ ├── Secret.cs
│ │ │ │ ├── SecretVersion.cs
│ │ │ │ └── ServiceAccount.cs
│ │ │ └── Repositories/
│ │ │ └── ApiKeyRepository.cs
│ │ ├── Tools/
│ │ │ ├── Configurations/
│ │ │ │ └── SendEntityTypeConfiguration.cs
│ │ │ ├── Models/
│ │ │ │ └── Send.cs
│ │ │ └── Repositories/
│ │ │ └── SendRepository.cs
│ │ └── Vault/
│ │ ├── Configurations/
│ │ │ └── SecurityTaskEntityTypeConfiguration.cs
│ │ ├── Models/
│ │ │ ├── Cipher.cs
│ │ │ ├── Folder.cs
│ │ │ └── SecurityTask.cs
│ │ └── Repositories/
│ │ ├── CipherRepository.cs
│ │ ├── FolderRepository.cs
│ │ ├── Queries/
│ │ │ ├── CipherDetailsQuery.cs
│ │ │ ├── CipherOrganizationDetailsReadByIdQuery.cs
│ │ │ ├── CipherOrganizationDetailsReadByOrganizationIdQuery.cs
│ │ │ ├── CipherOrganizationPermissionsQuery.cs
│ │ │ ├── CipherReadCanEditByIdUserIdQuery.cs
│ │ │ ├── SecurityTaskReadByUserIdStatusQuery.cs
│ │ │ └── UserSecurityTasksByCipherIdsQuery.cs
│ │ └── SecurityTaskRepository.cs
│ ├── Notifications/
│ │ ├── AnonymousNotificationsHub.cs
│ │ ├── AzureQueueHostedService.cs
│ │ ├── ConnectionCounter.cs
│ │ ├── Controllers/
│ │ │ ├── InfoController.cs
│ │ │ └── SendController.cs
│ │ ├── Dockerfile
│ │ ├── HeartbeatHostedService.cs
│ │ ├── HubHelpers.cs
│ │ ├── INotificationHub.cs
│ │ ├── Jobs/
│ │ │ ├── JobsHostedService.cs
│ │ │ └── LogConnectionCounterJob.cs
│ │ ├── Notifications.csproj
│ │ ├── NotificationsHub.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── Startup.cs
│ │ ├── SubjectUserIdProvider.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.Production.json
│ │ ├── appsettings.QA.json
│ │ ├── appsettings.SelfHosted.json
│ │ ├── appsettings.json
│ │ ├── build.sh
│ │ └── entrypoint.sh
│ ├── SharedWeb/
│ │ ├── Health/
│ │ │ └── HealthCheckServiceExtensions.cs
│ │ ├── Play/
│ │ │ ├── PlayServiceCollectionExtensions.cs
│ │ │ └── Repositories/
│ │ │ ├── DapperTestOrganizationTrackingOrganizationRepository.cs
│ │ │ ├── DapperTestUserTrackingUserRepository.cs
│ │ │ ├── EFTestOrganizationTrackingOrganizationRepository.cs
│ │ │ └── EFTestUserTrackingUserRepository.cs
│ │ ├── SharedWeb.csproj
│ │ ├── Swagger/
│ │ │ ├── ActionNameOperationFilter.cs
│ │ │ ├── Base64UrlSchemaFilter.cs
│ │ │ ├── CheckDuplicateOperationIdsDocumentFilter.cs
│ │ │ ├── EncryptedStringSchemaFilter.cs
│ │ │ ├── EnumSchemaFilter.cs
│ │ │ ├── GitCommitDocumentFilter.cs
│ │ │ ├── SourceFileLineOperationFilter.cs
│ │ │ └── SwaggerGenOptionsExt.cs
│ │ └── Utilities/
│ │ ├── DisplayAttributeHelpers.cs
│ │ ├── ExceptionHandlerFilterAttribute.cs
│ │ ├── ModelStateValidationFilterAttribute.cs
│ │ ├── PlayIdMiddleware.cs
│ │ ├── RequestLoggingMiddleware.cs
│ │ └── ServiceCollectionExtensions.cs
│ └── Sql/
│ ├── Sql.sqlproj
│ ├── dbo/
│ │ ├── AdminConsole/
│ │ │ └── Stored Procedures/
│ │ │ └── Collection_CreateDefaultCollections.sql
│ │ ├── Auth/
│ │ │ ├── Stored Procedures/
│ │ │ │ ├── AuthRequest_Create.sql
│ │ │ │ ├── AuthRequest_DeleteById.sql
│ │ │ │ ├── AuthRequest_DeleteIfExpired.sql
│ │ │ │ ├── AuthRequest_ReadAdminApprovalsByIds.sql
│ │ │ │ ├── AuthRequest_ReadById.sql
│ │ │ │ ├── AuthRequest_ReadByUserId.sql
│ │ │ │ ├── AuthRequest_ReadPendingByOrganizationId.sql
│ │ │ │ ├── AuthRequest_ReadPendingByUserId.sql
│ │ │ │ ├── AuthRequest_Update.sql
│ │ │ │ ├── AuthRequest_UpdateMany.sql
│ │ │ │ ├── Device_ReadActiveWithPendingAuthRequestsByUserId.sql
│ │ │ │ ├── EmergencyAccessDetails_ReadByGranteeId.sql
│ │ │ │ ├── EmergencyAccessDetails_ReadByGrantorId.sql
│ │ │ │ ├── EmergencyAccessDetails_ReadById.sql
│ │ │ │ ├── EmergencyAccessDetails_ReadByIdGrantorId.sql
│ │ │ │ ├── EmergencyAccessDetails_ReadExpiredRecoveries.sql
│ │ │ │ ├── EmergencyAccessDetails_ReadManyByUserIds.sql
│ │ │ │ ├── EmergencyAccess_Create.sql
│ │ │ │ ├── EmergencyAccess_DeleteById.sql
│ │ │ │ ├── EmergencyAccess_DeleteManyById.sql
│ │ │ │ ├── EmergencyAccess_ReadById.sql
│ │ │ │ ├── EmergencyAccess_ReadCountByGrantorIdEmail.sql
│ │ │ │ ├── EmergencyAccess_ReadToNotify.sql
│ │ │ │ ├── EmergencyAccess_Update.sql
│ │ │ │ ├── Grant_Delete.sql
│ │ │ │ ├── Grant_DeleteByKey.sql
│ │ │ │ ├── Grant_DeleteExpired.sql
│ │ │ │ ├── Grant_Read.sql
│ │ │ │ ├── Grant_ReadByKey.sql
│ │ │ │ ├── Grant_Save.sql
│ │ │ │ ├── SsoConfig_Create.sql
│ │ │ │ ├── SsoConfig_DeleteById.sql
│ │ │ │ ├── SsoConfig_ReadById.sql
│ │ │ │ ├── SsoConfig_ReadByIdentifier.sql
│ │ │ │ ├── SsoConfig_ReadByOrganizationId.sql
│ │ │ │ ├── SsoConfig_ReadManyByNotBeforeRevisionDate.sql
│ │ │ │ ├── SsoConfig_Update.sql
│ │ │ │ ├── SsoUser_Create.sql
│ │ │ │ ├── SsoUser_Delete.sql
│ │ │ │ ├── SsoUser_DeleteById.sql
│ │ │ │ ├── SsoUser_DeleteMany.sql
│ │ │ │ ├── SsoUser_ReadById.sql
│ │ │ │ ├── SsoUser_ReadByUserIdOrganizationId.sql
│ │ │ │ ├── SsoUser_Update.sql
│ │ │ │ └── User_BumpAccountRevisionDateByEmergencyAccessGranteeId.sql
│ │ │ ├── Tables/
│ │ │ │ ├── AuthRequest.sql
│ │ │ │ ├── EmergencyAccess.sql
│ │ │ │ ├── Grant.sql
│ │ │ │ ├── SsoConfig.sql
│ │ │ │ └── SsoUser.sql
│ │ │ └── Views/
│ │ │ ├── AuthRequestPendingDetailsView.sql
│ │ │ ├── AuthRequestView.sql
│ │ │ ├── EmergencyAccessDetailsView.sql
│ │ │ ├── GrantView.sql
│ │ │ ├── SsoConfigView.sql
│ │ │ └── SsoUserView.sql
│ │ ├── Billing/
│ │ │ ├── Stored Procedures/
│ │ │ │ ├── ClientOrganizationMigrationRecord_Create.sql
│ │ │ │ ├── ClientOrganizationMigrationRecord_DeleteById.sql
│ │ │ │ ├── ClientOrganizationMigrationRecord_ReadById.sql
│ │ │ │ ├── ClientOrganizationMigrationRecord_ReadByOrganizationId.sql
│ │ │ │ ├── ClientOrganizationMigrationRecord_ReadByProviderId.sql
│ │ │ │ ├── ClientOrganizationMigrationRecord_Update.sql
│ │ │ │ ├── OrganizationInstallation_Create.sql
│ │ │ │ ├── OrganizationInstallation_DeleteById.sql
│ │ │ │ ├── OrganizationInstallation_ReadById.sql
│ │ │ │ ├── OrganizationInstallation_ReadByInstallationId.sql
│ │ │ │ ├── OrganizationInstallation_ReadByOrganizationId.sql
│ │ │ │ ├── OrganizationInstallation_Update.sql
│ │ │ │ ├── ProviderInvoiceItem_Create.sql
│ │ │ │ ├── ProviderInvoiceItem_DeleteById.sql
│ │ │ │ ├── ProviderInvoiceItem_ReadById.sql
│ │ │ │ ├── ProviderInvoiceItem_ReadByInvoiceId.sql
│ │ │ │ ├── ProviderInvoiceItem_ReadByProviderId.sql
│ │ │ │ ├── ProviderInvoiceItem_Update.sql
│ │ │ │ ├── ProviderPlan_Create.sql
│ │ │ │ ├── ProviderPlan_DeleteById.sql
│ │ │ │ ├── ProviderPlan_ReadById.sql
│ │ │ │ ├── ProviderPlan_ReadByProviderId.sql
│ │ │ │ └── ProviderPlan_Update.sql
│ │ │ ├── Tables/
│ │ │ │ ├── ClientOrganizationMigrationRecord.sql
│ │ │ │ ├── OrganizationInstallation.sql
│ │ │ │ ├── ProviderInvoiceItem.sql
│ │ │ │ └── ProviderPlan.sql
│ │ │ └── Views/
│ │ │ ├── ClientOrganizationMigrationRecordView.sql
│ │ │ ├── OrganizationInstallationView.sql
│ │ │ ├── ProviderInvoiceItemView.sql
│ │ │ └── ProviderPlanView.sql
│ │ ├── Dirt/
│ │ │ ├── Stored Procedures/
│ │ │ │ ├── Event_Create.sql
│ │ │ │ ├── Event_ReadById.sql
│ │ │ │ ├── Event_ReadPageByCipherId.sql
│ │ │ │ ├── Event_ReadPageByOrganizationId.sql
│ │ │ │ ├── Event_ReadPageByOrganizationIdActingUserId.sql
│ │ │ │ ├── Event_ReadPageByProviderId.sql
│ │ │ │ ├── Event_ReadPageByProviderIdActingUserId.sql
│ │ │ │ ├── Event_ReadPageByUserId.sql
│ │ │ │ ├── MemberAccessDetail_GetMemberAccessDetailByOrganizationId.sql
│ │ │ │ ├── OrganizationApplication_Create.sql
│ │ │ │ ├── OrganizationApplication_DeleteById.sql
│ │ │ │ ├── OrganizationApplication_ReadById.sql
│ │ │ │ ├── OrganizationApplication_ReadByOrganizationId.sql
│ │ │ │ ├── OrganizationApplication_Update.sql
│ │ │ │ ├── OrganizationReport_Create.sql
│ │ │ │ ├── OrganizationReport_DeleteById.sql
│ │ │ │ ├── OrganizationReport_GetApplicationDataById.sql
│ │ │ │ ├── OrganizationReport_GetLatestByOrganizationId.sql
│ │ │ │ ├── OrganizationReport_GetReportDataById.sql
│ │ │ │ ├── OrganizationReport_GetSummaryDataById.sql
│ │ │ │ ├── OrganizationReport_ReadById.sql
│ │ │ │ ├── OrganizationReport_ReadByOrganizationIdAndRevisionDate.sql
│ │ │ │ ├── OrganizationReport_Update.sql
│ │ │ │ ├── OrganizationReport_UpdateApplicationData.sql
│ │ │ │ ├── OrganizationReport_UpdateMetrics.sql
│ │ │ │ ├── OrganizationReport_UpdateReportData.sql
│ │ │ │ └── OrganizationReport_UpdateSummaryData.sql
│ │ │ ├── Tables/
│ │ │ │ ├── Event.sql
│ │ │ │ ├── OrganizationApplication.sql
│ │ │ │ └── OrganizationReport.sql
│ │ │ └── Views/
│ │ │ ├── EventView.sql
│ │ │ ├── OrganizationApplicationView.sql
│ │ │ └── OrganizationReportView.sql
│ │ ├── Functions/
│ │ │ └── UserCollectionDetails.sql
│ │ ├── KeyManagement/
│ │ │ ├── Stored Procedures/
│ │ │ │ ├── UserAsymmetricKeys_Regenerate.sql
│ │ │ │ ├── UserSignatureKeyPair_ReadByUserId.sql
│ │ │ │ ├── UserSignatureKeyPair_SetForRotation.sql
│ │ │ │ ├── UserSignatureKeyPair_UpdateForRotation.sql
│ │ │ │ ├── User_UpdateKeyConnectorUserKey.sql
│ │ │ │ └── User_UpdateMasterPassword.sql
│ │ │ ├── Tables/
│ │ │ │ └── UserSignatureKeyPair.sql
│ │ │ └── Views/
│ │ │ └── UserSignatureKeyPairView.sql
│ │ ├── Platform/
│ │ │ ├── Stored Procedures/
│ │ │ │ ├── Installation_Create.sql
│ │ │ │ ├── Installation_DeleteById.sql
│ │ │ │ ├── Installation_ReadById.sql
│ │ │ │ └── Installation_Update.sql
│ │ │ ├── Tables/
│ │ │ │ └── Installation.sql
│ │ │ └── Views/
│ │ │ └── InstallationView.sql
│ │ ├── SecretsManager/
│ │ │ ├── Stored Procedures/
│ │ │ │ ├── ApiKey/
│ │ │ │ │ ├── ApiKeyDetails_ReadById.sql
│ │ │ │ │ ├── ApiKey_Create.sql
│ │ │ │ │ ├── ApiKey_DeleteByIds.sql
│ │ │ │ │ └── ApiKey_ReadByServiceAccountId.sql
│ │ │ │ └── Event/
│ │ │ │ ├── Event_ReadPageByOrganizationIdServiceAccountId.sql
│ │ │ │ ├── Event_ReadPageByProjectId.sql
│ │ │ │ ├── Event_ReadPageBySecretId.sql
│ │ │ │ └── Event_ReadPageByServiceAccountId.sql
│ │ │ ├── Tables/
│ │ │ │ ├── AccessPolicy.sql
│ │ │ │ ├── ApiKey.sql
│ │ │ │ ├── Project.sql
│ │ │ │ ├── ProjectSecret.sql
│ │ │ │ ├── Secret.sql
│ │ │ │ ├── SecretVersion.sql
│ │ │ │ └── ServiceAccount.sql
│ │ │ └── Views/
│ │ │ ├── ApiKeyDetailsView.sql
│ │ │ └── ApiKeyView.sql
│ │ ├── Stored Procedures/
│ │ │ ├── AzureSQLMaintenance.sql
│ │ │ ├── CipherOrganizationDetails_ReadByOrganizationIdExcludingDefaultCollections.sql
│ │ │ ├── CollectionCipher_Create.sql
│ │ │ ├── CollectionCipher_Delete.sql
│ │ │ ├── CollectionCipher_ReadByOrganizationId.sql
│ │ │ ├── CollectionCipher_ReadByUserId.sql
│ │ │ ├── CollectionCipher_ReadByUserIdCipherId.sql
│ │ │ ├── CollectionCipher_ReadSharedByOrganizationId.sql
│ │ │ ├── CollectionCipher_UpdateCollections.sql
│ │ │ ├── CollectionCipher_UpdateCollectionsAdmin.sql
│ │ │ ├── CollectionCipher_UpdateCollectionsForCiphers.sql
│ │ │ ├── CollectionGroup_ReadByCollectionId.sql
│ │ │ ├── CollectionGroup_ReadByOrganizationId.sql
│ │ │ ├── CollectionUser_Delete.sql
│ │ │ ├── CollectionUser_ReadByCollectionId.sql
│ │ │ ├── CollectionUser_ReadByOrganizationId.sql
│ │ │ ├── CollectionUser_ReadSharedCollectionsByOrganizationUserIds.sql
│ │ │ ├── CollectionUser_UpdateUsers.sql
│ │ │ ├── Collection_Create.sql
│ │ │ ├── Collection_CreateOrUpdateAccessForMany.sql
│ │ │ ├── Collection_CreateWithGroupsAndUsers.sql
│ │ │ ├── Collection_DeleteById.sql
│ │ │ ├── Collection_DeleteByIds.sql
│ │ │ ├── Collection_ReadById.sql
│ │ │ ├── Collection_ReadByIds.sql
│ │ │ ├── Collection_ReadByOrganizationId.sql
│ │ │ ├── Collection_ReadByUserId.sql
│ │ │ ├── Collection_ReadCountByOrganizationId.sql
│ │ │ ├── Collection_ReadSharedCollectionsByOrganizationId.sql
│ │ │ ├── Collection_ReadWithGroupsAndUsersById.sql
│ │ │ ├── Collection_ReadWithGroupsAndUsersByOrganizationId.sql
│ │ │ ├── Collection_Update.sql
│ │ │ ├── Collection_UpdateWithGroups.sql
│ │ │ ├── Collection_UpdateWithGroupsAndUsers.sql
│ │ │ ├── Collection_UpdateWithUsers.sql
│ │ │ ├── Device_ClearPushTokenById.sql
│ │ │ ├── Device_Create.sql
│ │ │ ├── Device_ReadById.sql
│ │ │ ├── Device_ReadByIdentifier.sql
│ │ │ ├── Device_ReadByIdentifierUserId.sql
│ │ │ ├── Device_ReadByUserId.sql
│ │ │ ├── Device_Update.sql
│ │ │ ├── GroupUser_AddUsers.sql
│ │ │ ├── GroupUser_Delete.sql
│ │ │ ├── GroupUser_ReadByOrganizationId.sql
│ │ │ ├── GroupUser_ReadByOrganizationUserIds.sql
│ │ │ ├── GroupUser_ReadGroupIdsByOrganizationUserId.sql
│ │ │ ├── GroupUser_ReadOrganizationUserIdsByGroupId.sql
│ │ │ ├── GroupUser_UpdateGroups.sql
│ │ │ ├── GroupUser_UpdateUsers.sql
│ │ │ ├── Group_Create.sql
│ │ │ ├── Group_CreateWithCollections.sql
│ │ │ ├── Group_DeleteById.sql
│ │ │ ├── Group_DeleteByIds.sql
│ │ │ ├── Group_ReadById.sql
│ │ │ ├── Group_ReadByIds.sql
│ │ │ ├── Group_ReadByOrganizationId.sql
│ │ │ ├── Group_ReadCountByOrganizationId.sql
│ │ │ ├── Group_ReadWithCollectionsById.sql
│ │ │ ├── Group_ReadWithCollectionsByOrganizationId.sql
│ │ │ ├── Group_Update.sql
│ │ │ ├── Group_UpdateWithCollections.sql
│ │ │ ├── NotificationStatus_Create.sql
│ │ │ ├── NotificationStatus_ReadByNotificationIdAndUserId.sql
│ │ │ ├── NotificationStatus_Update.sql
│ │ │ ├── Notification_Create.sql
│ │ │ ├── Notification_MarkAsDeletedByTask.sql
│ │ │ ├── Notification_ReadById.sql
│ │ │ ├── Notification_ReadByUserIdAndStatus.sql
│ │ │ ├── Notification_Update.sql
│ │ │ ├── OrganizationApiKey_Create.sql
│ │ │ ├── OrganizationApiKey_DeleteById.sql
│ │ │ ├── OrganizationApiKey_OrganizationDeleted.sql
│ │ │ ├── OrganizationApiKey_ReadManyByOrganizationIdType.sql
│ │ │ ├── OrganizationApiKey_Update.sql
│ │ │ ├── OrganizationConnection_Create.sql
│ │ │ ├── OrganizationConnection_DeleteById.sql
│ │ │ ├── OrganizationConnection_OrganizationDeleted.sql
│ │ │ ├── OrganizationConnection_ReadById.sql
│ │ │ ├── OrganizationConnection_ReadByIdOrganizationId.sql
│ │ │ ├── OrganizationConnection_ReadByOrganizationIdType.sql
│ │ │ ├── OrganizationConnection_Update.sql
│ │ │ ├── OrganizationDomainSsoDetails_ReadByEmail.sql
│ │ │ ├── OrganizationDomain_Create.sql
│ │ │ ├── OrganizationDomain_DeleteById.sql
│ │ │ ├── OrganizationDomain_DeleteIfExpired.sql
│ │ │ ├── OrganizationDomain_HasVerifiedDomainWithBlockPolicy.sql
│ │ │ ├── OrganizationDomain_OrganizationDeleted.sql
│ │ │ ├── OrganizationDomain_ReadByClaimedDomain.sql
│ │ │ ├── OrganizationDomain_ReadById.sql
│ │ │ ├── OrganizationDomain_ReadByIdOrganizationId.sql
│ │ │ ├── OrganizationDomain_ReadByNextRunDate.sql
│ │ │ ├── OrganizationDomain_ReadByOrganizationId.sql
│ │ │ ├── OrganizationDomain_ReadByOrganizationIds.sql
│ │ │ ├── OrganizationDomain_ReadDomainByOrgIdAndDomainName.sql
│ │ │ ├── OrganizationDomain_ReadIfExpired.sql
│ │ │ ├── OrganizationDomain_Update.sql
│ │ │ ├── OrganizationIntegrationConfigurationDetails_ReadMany.sql
│ │ │ ├── OrganizationIntegrationConfigurationDetails_ReadManyByEventTypeOrganizationIdIntegrationType.sql
│ │ │ ├── OrganizationIntegrationConfiguration_Create.sql
│ │ │ ├── OrganizationIntegrationConfiguration_DeleteById.sql
│ │ │ ├── OrganizationIntegrationConfiguration_ReadById.sql
│ │ │ ├── OrganizationIntegrationConfiguration_ReadManyByOrganizationIntegrationId.sql
│ │ │ ├── OrganizationIntegrationConfiguration_Update.sql
│ │ │ ├── OrganizationIntegration_Create.sql
│ │ │ ├── OrganizationIntegration_DeleteById.sql
│ │ │ ├── OrganizationIntegration_OrganizationDeleted.sql
│ │ │ ├── OrganizationIntegration_ReadById.sql
│ │ │ ├── OrganizationIntegration_ReadByTeamsConfigurationTenantIdTeamId.sql
│ │ │ ├── OrganizationIntegration_ReadManyByOrganizationId.sql
│ │ │ ├── OrganizationIntegration_Update.sql
│ │ │ ├── OrganizationSponsorship_Create.sql
│ │ │ ├── OrganizationSponsorship_CreateMany.sql
│ │ │ ├── OrganizationSponsorship_DeleteById.sql
│ │ │ ├── OrganizationSponsorship_DeleteByIds.sql
│ │ │ ├── OrganizationSponsorship_DeleteExpired.sql
│ │ │ ├── OrganizationSponsorship_OrganizationDeleted.sql
│ │ │ ├── OrganizationSponsorship_OrganizationUserDeleted.sql
│ │ │ ├── OrganizationSponsorship_OrganizationUsersDeleted.sql
│ │ │ ├── OrganizationSponsorship_ReadById.sql
│ │ │ ├── OrganizationSponsorship_ReadByOfferedToEmail.sql
│ │ │ ├── OrganizationSponsorship_ReadBySponsoredOrganizationId.sql
│ │ │ ├── OrganizationSponsorship_ReadBySponsoringOrganizationId.sql
│ │ │ ├── OrganizationSponsorship_ReadBySponsoringOrganizationUserId.sql
│ │ │ ├── OrganizationSponsorship_ReadLatestBySponsoringOrganizationId.sql
│ │ │ ├── OrganizationSponsorship_Update.sql
│ │ │ ├── OrganizationSponsorship_UpdateMany.sql
│ │ │ ├── OrganizationUserOrganizationDetails_ReadByUserIdStatus.sql
│ │ │ ├── OrganizationUserOrganizationDetails_ReadByUserIdStatusOrganizationId.sql
│ │ │ ├── OrganizationUserUserDetails_ReadById.sql
│ │ │ ├── OrganizationUserUserDetails_ReadByOrganizationId.sql
│ │ │ ├── OrganizationUserUserDetails_ReadByOrganizationIdUserId.sql
│ │ │ ├── OrganizationUserUserDetails_ReadByOrganizationId_V2.sql
│ │ │ ├── OrganizationUserUserDetails_ReadWithSharedCollectionsById.sql
│ │ │ ├── OrganizationUser_Activate.sql
│ │ │ ├── OrganizationUser_ConfirmById.sql
│ │ │ ├── OrganizationUser_Create.sql
│ │ │ ├── OrganizationUser_CreateMany.sql
│ │ │ ├── OrganizationUser_CreateManyWithCollectionsGroups.sql
│ │ │ ├── OrganizationUser_CreateWithCollections.sql
│ │ │ ├── OrganizationUser_Deactivate.sql
│ │ │ ├── OrganizationUser_DeleteById.sql
│ │ │ ├── OrganizationUser_DeleteByIds.sql
│ │ │ ├── OrganizationUser_MigrateDefaultCollection.sql
│ │ │ ├── OrganizationUser_ReadById.sql
│ │ │ ├── OrganizationUser_ReadByIds.sql
│ │ │ ├── OrganizationUser_ReadByMinimumRole.sql
│ │ │ ├── OrganizationUser_ReadByOrganizationId.sql
│ │ │ ├── OrganizationUser_ReadByOrganizationIdEmail.sql
│ │ │ ├── OrganizationUser_ReadByOrganizationIdUserId.sql
│ │ │ ├── OrganizationUser_ReadByOrganizationIdWithClaimedDomains.sql
│ │ │ ├── OrganizationUser_ReadByOrganizationIdWithClaimedDomains_V2.sql
│ │ │ ├── OrganizationUser_ReadByUserId.sql
│ │ │ ├── OrganizationUser_ReadByUserIdWithPolicyDetails.sql
│ │ │ ├── OrganizationUser_ReadByUserIds.sql
│ │ │ ├── OrganizationUser_ReadCountByFreeOrganizationAdminUser.sql
│ │ │ ├── OrganizationUser_ReadCountByOnlyOwner.sql
│ │ │ ├── OrganizationUser_ReadCountByOrganizationId.sql
│ │ │ ├── OrganizationUser_ReadCountByOrganizationIdEmail.sql
│ │ │ ├── OrganizationUser_ReadManyAccountRecoveryDetailsByOrganizationUserIds.sql
│ │ │ ├── OrganizationUser_ReadManyDetailsByRole.sql
│ │ │ ├── OrganizationUser_ReadOccupiedSeatCountByOrganizationId.sql
│ │ │ ├── OrganizationUser_ReadOccupiedSmSeatCountByOrganizationId.sql
│ │ │ ├── OrganizationUser_ReadWithCollectionsById.sql
│ │ │ ├── OrganizationUser_SelectKnownEmails.sql
│ │ │ ├── OrganizationUser_SetStatusForUsersByGuidIdArray.sql
│ │ │ ├── OrganizationUser_Update.sql
│ │ │ ├── OrganizationUser_UpdateDataForKeyRotation.sql
│ │ │ ├── OrganizationUser_UpdateMany.sql
│ │ │ ├── OrganizationUser_UpdateWithCollections.sql
│ │ │ ├── Organization_Create.sql
│ │ │ ├── Organization_DeleteById.sql
│ │ │ ├── Organization_GetOrganizationsForSubscriptionSync.sql
│ │ │ ├── Organization_IncrementSeatCount.sql
│ │ │ ├── Organization_ReadAbilities.sql
│ │ │ ├── Organization_ReadAddableToProviderByUserId.sql
│ │ │ ├── Organization_ReadByClaimedUserEmailDomain.sql
│ │ │ ├── Organization_ReadByEnabled.sql
│ │ │ ├── Organization_ReadByGatewayCustomerId.sql
│ │ │ ├── Organization_ReadByGatewaySubscriptionId.sql
│ │ │ ├── Organization_ReadById.sql
│ │ │ ├── Organization_ReadByIdentifier.sql
│ │ │ ├── Organization_Rea
================================================
FILE CONTENTS
================================================
================================================
FILE: .checkmarx/config.yml
================================================
version: 1
# Checkmarx configuration file
#
# https://checkmarx.com/resource/documents/en/34965-68549-configuring-projects-using-config-as-code-files.html
checkmarx:
scan:
configs:
sast:
# Exclude test directory
filter: "!test"
kics:
filter: "!dev,!.devcontainer"
sca:
filter: "!dev,!.devcontainer"
containers:
filter: "!dev,!.devcontainer"
================================================
FILE: .claude/CLAUDE.md
================================================
# Bitwarden Server - Claude Code Configuration
## Project Context Files
**Read these files before reviewing to ensure that you fully understand the project and contributing guidelines**
1. @README.md
2. @CONTRIBUTING.md
3. @.github/PULL_REQUEST_TEMPLATE.md
## Critical Rules
- **NEVER** use code regions: If complexity suggests regions, refactor for better readability
- **NEVER** compromise zero-knowledge principles: User vault data must remain encrypted and inaccessible to Bitwarden
- **NEVER** log or expose sensitive data: No PII, passwords, keys, or vault data in logs or error messages
- **ALWAYS** use secure communication channels: Enforce confidentiality, integrity, and authenticity
- **ALWAYS** encrypt sensitive data: All vault data must be encrypted at rest, in transit, and in use
- **ALWAYS** prioritize cryptographic integrity and data protection
- **ALWAYS** add unit tests (with mocking) for any new feature development
## Project Structure
- **Source Code**: `/src/` - Services and core infrastructure
- **Tests**: `/test/` - Test logic aligning with the source structure, albeit with a `.Test` suffix
- **Utilities**: `/util/` - Migration tools, seeders, and setup scripts
- **Dev Tools**: `/dev/` - Local development helpers
- **Configuration**: `appsettings.{Environment}.json`, `/dev/secrets.json` for local development
## Security Requirements
- **Compliance**: SOC 2 Type II, SOC 3, HIPAA, ISO 27001, GDPR, CCPA
- **Principles**: Zero-knowledge, end-to-end encryption, secure defaults
- **Validation**: Input sanitization, parameterized queries, rate limiting
- **Logging**: Structured logs, no PII/sensitive data in logs
## Common Commands
- **Build**: `dotnet build`
- **Test**: `dotnet test`
- **Run locally**: `dotnet run --project src/Api`
- **Database update**: `pwsh dev/migrate.ps1`
- **Generate OpenAPI**: `pwsh dev/generate_openapi_files.ps1`
## Development Workflow
- Security impact assessed
- xUnit tests added / updated
- Performance impact considered
- Error handling implemented
- Breaking changes documented
- CI passes: build, test, lint
- Feature flags considered for new features
- CODEOWNERS file respected
### Key Architectural Decisions
- Use .NET nullable reference types (ADR 0024)
- TryAdd dependency injection pattern (ADR 0026)
- Authorization patterns (ADR 0022)
- OpenTelemetry for observability (ADR 0020)
- Log to standard output (ADR 0021)
## References
- [Server architecture](https://contributing.bitwarden.com/architecture/server/)
- [Architectural Decision Records (ADRs)](https://contributing.bitwarden.com/architecture/adr/)
- [Contributing guidelines](https://contributing.bitwarden.com/contributing/)
- [Setup guide](https://contributing.bitwarden.com/getting-started/server/guide/)
- [Code style](https://contributing.bitwarden.com/contributing/code-style/)
- [Bitwarden security whitepaper](https://bitwarden.com/help/bitwarden-security-white-paper/)
- [Bitwarden security definitions](https://contributing.bitwarden.com/architecture/security/definitions)
================================================
FILE: .claude/commands/bump-rust-sdk.md
================================================
---
description: Bump sdk-internal Rust crate dependencies in util/RustSdk to align with a Bitwarden clients release
argument-hint: [clients-release-tag]
allowed-tools: Read, Write, Edit, Glob, Grep, Bash(cargo *), Bash(dotnet *), Bash(git *), Bash(gh *)
---
Bump the sdk-internal Rust crate dependencies in `util/RustSdk/rust/Cargo.toml` to align with
the Bitwarden clients production release specified by `$ARGUMENTS`. If no release tag is given,
determine the latest `web-v*` release tag from `bitwarden/clients`.
Invoke the `bump-rust-sdk` skill using the task tool for the full methodology, API surface reference, and worked examples.
## Required Context
Before starting, read these files to understand the current state:
- `util/RustSdk/rust/Cargo.toml` — current rev pins
- `util/RustSdk/rust/src/*.rs` — current API usage
- `.claude/skills/bump-rust-sdk/references/api-surface.md` — documented API surface
- `.claude/skills/bump-rust-sdk/references/methodology.md` — detailed process
## Execution
Follow the skill's process in order:
1. **Identify target** — Find the `@bitwarden/sdk-internal` NPM version at the release tag
2. **Map to git SHA** — Query the GitHub Actions API for the publish workflow run number
3. **Analyze breaking changes** — Compare old rev to new rev across the three crates, using the API surface reference
4. **Apply changes** — Update Cargo.toml, fix compilation errors, handle deprecations
5. **Build and verify** — `cargo build`, `cargo test`, `dotnet test test/SeederApi.IntegrationTest/`, `cargo fmt --check`
6. **Human verification** — Present the SeederUtility and SeederApi test commands to the human. **Do NOT run these yourself.** Wait for the human to confirm.
7. **Regenerate API surface** — Read all `.rs` files in `util/RustSdk/rust/src/` and update `.claude/skills/bump-rust-sdk/references/api-surface.md` to reflect the current imports, types, and traits. This step is mandatory — the reference must always match the actual code.
## Important Rules
- All three crate rev pins MUST be the same SHA
- Do NOT make unrelated formatting or style changes to the Rust source files
- Do NOT run SeederUtility or SeederApi yourself — the human performs all end-to-end testing
- Do NOT skip the API surface regeneration step — a Stop hook will block if it is missed
- `util/RustSdk/NativeMethods.g.cs` should NOT change — verify with `git diff` after build
- `util/RustSdk/rust/Cargo.lock` will change and must be included alongside the other changes
================================================
FILE: .claude/hooks/README.md
================================================
# Claude Code Hooks
All hooks are Stop hooks — they fire when Claude finishes responding and check
whether documentation or references need updating based on what was changed.
## Configuration
Register hooks in `.claude/settings.local.json` — not `settings.json`. Local settings are gitignored, keeping your personal hook configuration out of source control.
## Requirements
- `jq` must be installed (`brew install jq`)
- Must be run from within a git repository
## Testing & Debugging
- **Verbose mode**: Press `Ctrl+O` in Claude Code to see hook execution details
- **Debug mode**: Run `claude --debug` for full execution logging
## Disabling
- Use the `/hooks` menu in Claude Code to toggle individual hooks
- Or set `"disableAllHooks": true` in `.claude/settings.local.json`
---
## seeder-docs-check.sh
**Event:** Stop
**Purpose:** Reminds developers to update Seeder documentation when code in
`util/Seeder/`, `util/SeederApi/`, or `util/SeederUtility/` was modified but no
`.md` files in those directories were touched.
**How it works:**
1. Runs `git diff` to detect all changed files
2. If non-markdown files were changed under a Seeder project AND no `.md` files
in any of the three Seeder projects were modified, blocks the stop with a
reminder (intentionally cross-project — a doc update anywhere in the Seeder
subsystem satisfies the check)
3. The reminder lists all `.md` files in the affected projects (discovered dynamically)
4. On the next stop, `stop_hook_active` is true, so the hook allows through
5. Result: one reminder per stop, then the developer decides
---
## rust-sdk-surface-check.sh
**Event:** Stop
**Purpose:** Ensures the RustSdk API surface reference stays current when the
sdk-internal dependency rev is bumped. Prevents `.claude/skills/bump-rust-sdk/references/api-surface.md`
from going stale.
**How it works:**
1. Runs `git diff` to detect all changed files
2. If `util/RustSdk/rust/Cargo.toml` was modified BUT
`.claude/skills/bump-rust-sdk/references/api-surface.md` was NOT, blocks the
stop with a reminder to regenerate the API surface inventory
3. On the next stop, `stop_hook_active` is true, so the hook allows through
4. Result: one reminder per stop — Claude reads the `.rs` source files and
regenerates the reference
================================================
FILE: .claude/hooks/rust-sdk-surface-check.sh
================================================
#!/bin/bash
# rust-sdk-surface-check.sh
# Stop hook: reminds developers to update the RustSdk API surface reference
# when Cargo.toml rev pins were modified but api-surface.md was not touched.
#
# Behavior: blocks Claude from stopping exactly once with a reminder.
# On the second stop (stop_hook_active=true), allows through.
set -euo pipefail
INPUT=$(cat)
# Guard: if a Stop hook already blocked this turn, allow through.
STOP_HOOK_ACTIVE=$(echo "$INPUT" | jq -r '.stop_hook_active // false')
if [[ "$STOP_HOOK_ACTIVE" == "true" ]]; then
exit 0
fi
CWD=$(echo "$INPUT" | jq -r '.cwd')
# Gather all changed files (staged, unstaged, and untracked) relative to repo root.
DIFF_HEAD=$(git -C "$CWD" diff --name-only HEAD 2>/dev/null || true)
UNTRACKED=$(git -C "$CWD" ls-files --others --exclude-standard 2>/dev/null || true)
ALL_CHANGED=$(printf "%s\n%s" "$DIFF_HEAD" "$UNTRACKED" | sort -u | grep -v '^$' || true)
if [[ -z "$ALL_CHANGED" ]]; then
exit 0
fi
# Check if the RustSdk Cargo.toml was modified.
if ! echo "$ALL_CHANGED" | grep -q '^util/RustSdk/rust/Cargo.toml$'; then
exit 0
fi
# Check if the API surface reference was already updated.
if echo "$ALL_CHANGED" | grep -q '^\.claude/skills/bump-rust-sdk/references/api-surface.md$'; then
exit 0
fi
REASON="util/RustSdk/rust/Cargo.toml was modified but the API surface reference was not updated. Read all .rs files in util/RustSdk/rust/src/ and regenerate .claude/skills/bump-rust-sdk/references/api-surface.md to reflect the current imports, types, and traits used from bitwarden-core, bitwarden-crypto, and bitwarden-vault."
jq -n --arg reason "$REASON" '{ "decision": "block", "reason": $reason }'
================================================
FILE: .claude/hooks/seeder-docs-check.sh
================================================
#!/bin/bash
# seeder-docs-check.sh
# Stop hook: reminds developers to update Seeder documentation when
# Seeder code was modified but no documentation files were touched.
#
# Behavior: blocks Claude from stopping exactly once with a reminder.
# On the second stop (stop_hook_active=true), allows through.
set -euo pipefail
INPUT=$(cat)
# Guard: if a Stop hook already blocked this turn, allow through.
STOP_HOOK_ACTIVE=$(echo "$INPUT" | jq -r '.stop_hook_active // false')
if [[ "$STOP_HOOK_ACTIVE" == "true" ]]; then
exit 0
fi
CWD=$(echo "$INPUT" | jq -r '.cwd')
# Gather all changed files (staged, unstaged, and untracked) relative to repo root.
DIFF_HEAD=$(git -C "$CWD" diff --name-only HEAD 2>/dev/null || true)
UNTRACKED=$(git -C "$CWD" ls-files --others --exclude-standard 2>/dev/null || true)
ALL_CHANGED=$(printf "%s\n%s" "$DIFF_HEAD" "$UNTRACKED" | sort -u | grep -v '^$' || true)
if [[ -z "$ALL_CHANGED" ]]; then
exit 0
fi
# Check which Seeder projects have non-markdown code changes.
SEEDER_CODE_CHANGED=false
SEEDER_PROJECTS_CHANGED=()
for project in "util/Seeder/" "util/SeederApi/" "util/SeederUtility/"; do
if echo "$ALL_CHANGED" | grep -q "^${project}" && \
echo "$ALL_CHANGED" | grep "^${project}" | grep -qv '\.md$'; then
SEEDER_CODE_CHANGED=true
SEEDER_PROJECTS_CHANGED+=("$project")
fi
done
if [[ "$SEEDER_CODE_CHANGED" == "false" ]]; then
exit 0
fi
# Check if any Seeder .md files were already modified.
if echo "$ALL_CHANGED" | grep -qE '^util/(Seeder|SeederApi|SeederUtility)/.*\.md$'; then
exit 0
fi
# Dynamically discover all .md files in each modified project.
DOCS_LIST=""
for project in "${SEEDER_PROJECTS_CHANGED[@]}"; do
while IFS= read -r md_file; do
DOCS_LIST="${DOCS_LIST}\n - ${md_file}"
done < <(find "$CWD/$project" -name "*.md" | sed "s|^$CWD/||" | sort)
done
REASON=$(printf "Seeder code was modified but no Seeder documentation was updated. Please check whether any of these docs need updating:%b\n\nIf the docs are already accurate, let the user know you verified them." "$DOCS_LIST")
jq -n --arg reason "$REASON" '{ "decision": "block", "reason": $reason }'
================================================
FILE: .claude/settings.json
================================================
{
"attribution": {
"commit": "",
"pr": ""
},
"extraKnownMarketplaces": {
"bitwarden-marketplace": {
"source": {
"source": "github",
"repo": "bitwarden/ai-plugins"
}
}
}
}
================================================
FILE: .claude/skills/bump-rust-sdk/SKILL.md
================================================
---
name: bump-rust-sdk
description: This skill should be used when the user asks to "bump the Rust SDK", "update sdk-internal", "bump bitwarden-crypto", "update RustSdk dependencies", "align server SDK with clients", or needs to update the bitwarden/sdk-internal git rev pins in util/RustSdk/rust/Cargo.toml. Provides the methodology for mapping client NPM versions to git commit SHAs, analyzing breaking changes, auditing the API surface, and verifying the bump end-to-end.
---
# Bump sdk-internal Rust Crate Dependencies
## Overview
The server's `util/RustSdk/rust/Cargo.toml` pins `bitwarden-crypto` from the
`bitwarden/sdk-internal` repository by git rev. This must be periodically bumped to stay
aligned with the Bitwarden client applications.
The RustSdk is used by the Seeder to produce cryptographically correct Protected Data for
integration testing. It is NOT part of the production server runtime. The Rust layer provides
generic field-level encryption (`encrypt_string`, `decrypt_string`, `encrypt_fields`) and
key generation — the C# Seeder drives which fields to encrypt via `EncryptPropertyAttribute`.
## Key Challenge: NPM-to-Git-Rev Mapping
The clients consume sdk-internal via **NPM packages** (`@bitwarden/sdk-internal`), while the
server consumes it via **Rust git rev pins**. The NPM version (e.g., `0.2.0-main.522`) does not
directly correspond to a git tag — it encodes a GitHub Actions **workflow run number**.
### Version Format
```
0.2.0-main.522
│ │ │
│ │ └── GitHub Actions run number for publish-wasm-internal workflow
│ └── Branch name (/ replaced with -)
└── Base version from sdk-internal
```
### How to Find the Git Rev
1. Determine the target NPM version from the clients repo (see Step 1 below)
2. Find the `Publish @bitwarden/sdk-internal` workflow ID in the sdk-internal repo
3. Query the GitHub Actions API for the specific run number
4. Extract the `head_sha` — that is the git rev to pin in Cargo.toml
The specific API queries are documented in `references/methodology.md`.
## Process Overview
### Step 1: Identify Target Version
Determine which sdk-internal version to target. Check the latest production release tag from
`bitwarden/clients` (e.g., `web-v2026.2.0`):
```bash
cd /path/to/clients
git show web-v2026.2.0:package.json | grep sdk-internal
```
This gives the NPM version (e.g., `0.2.0-main.522`). Extract the run number (522).
### Step 2: Map NPM Version to Git SHA
Query the GitHub Actions API to find the commit that produced that NPM build. See
`references/methodology.md` for the exact commands.
### Step 3: Analyze Breaking Changes
Compare the current pinned rev against the target rev, focusing on `bitwarden-crypto`:
```bash
cd /path/to/sdk-internal
git log --oneline <old-rev>..<new-rev> -- crates/bitwarden-crypto
```
Cross-reference each commit against the API surface documented in `references/api-surface.md`.
### Step 4: Apply Changes
1. Update `Cargo.toml` — bump the `bitwarden-crypto` rev pin to the new SHA
2. Fix any compilation errors from breaking changes (type renames, new parameters, etc.)
3. Add `#[allow(deprecated)]` for any newly-deprecated APIs (with a comment explaining why)
### Step 5: Build and Verify (Claude)
```bash
cd util/RustSdk/rust
cargo build # Must compile cleanly
cargo test # All tests must pass (roundtrip test is critical)
cargo fmt --check # Formatting must be clean
git diff ../NativeMethods.g.cs # FFI signatures should be unchanged
```
Also run the C# integration tests:
```bash
dotnet test test/SeederApi.IntegrationTest/
```
### Step 6: Human Verification (HUMAN ONLY)
**Claude does NOT perform this step.** Present these commands to the human engineer and wait
for confirmation before proceeding.
The human runs SeederUtility and SeederApi to verify Protected Data is correctly produced and
decryptable by the web client. See `references/methodology.md` for the specific test commands
and validation criteria.
## Security Notes
- The RustSdk lives in `util/` (test infrastructure), not `src/` (production)
- The server never decrypts Vault Data — zero-knowledge invariant is unaffected
- Aligning with the production client release ensures the Seeder produces Protected Data
using the same cryptographic primitives as real clients
- Review `Cargo.lock` diff for unexpected transitive crypto crate changes (rsa, aes, sha2, etc.)
## Keeping References Current
The API surface reference (`references/api-surface.md`) must always reflect the actual code.
Two mechanisms enforce this:
1. **Post-bump step** — The `/bump-rust-sdk` command includes a mandatory final step to
regenerate `api-surface.md` by reading the actual `*.rs` source files.
2. **Stop hook** — `.claude/hooks/rust-sdk-surface-check.sh` blocks if `Cargo.toml` was
modified but `api-surface.md` was not updated in the same session.
To regenerate: read all `.rs` files in `util/RustSdk/rust/src/`, extract every `use` statement
from `bitwarden_crypto`, and rewrite `references/api-surface.md` to match.
## Additional Resources
### Reference Files
- **`references/methodology.md`** — Detailed step-by-step commands including GitHub Actions API
queries, breaking change analysis checklist, human verification commands, and a worked example
from the Feb 2026 bump
- **`references/api-surface.md`** — Complete inventory of types, traits, and functions the RustSdk
imports from `bitwarden-crypto`, used to assess breaking change impact
## Files Modified in a Typical Bump
| File | Change |
| --------------------------------- | ----------------------------------------------- |
| `util/RustSdk/rust/Cargo.toml` | `bitwarden-crypto` rev pin update |
| `util/RustSdk/rust/src/*.rs` | Type renames, new parameters, deprecation fixes |
| `util/RustSdk/rust/Cargo.lock` | Auto-regenerated (commit alongside) |
| `util/RustSdk/NativeMethods.g.cs` | Should NOT change (verify) |
================================================
FILE: .claude/skills/bump-rust-sdk/references/api-surface.md
================================================
# RustSdk API Surface Inventory
> **Auto-generated from actual source files.** Last updated: 2026-02-25
> Pinned rev: `abba7fdab687753268b63248ec22639dff35d07c`
This documents every type, trait, and function the server's RustSdk imports from
`bitwarden-crypto`. Use this to assess breaking change impact when bumping revs.
**Location:** `util/RustSdk/rust/src/`
## bitwarden-crypto
### Types Used — lib.rs (key generation and management)
| Type | Usage |
| ------------------------- | -------------------------------------------------------------------------------------------- |
| `BitwardenLegacyKeyBytes` | `BitwardenLegacyKeyBytes::from()` — wraps raw key bytes for `SymmetricCryptoKey::try_from()` |
| `HashPurpose` | `HashPurpose::ServerAuthorization` enum variant |
| `Kdf` | `Kdf::PBKDF2 { iterations }` enum variant with `NonZeroU32` |
| `MasterKey` | `MasterKey::derive()`, `.derive_master_key_hash()`, `.make_user_key()` |
| `PrivateKey` | `PrivateKey::from_pem()`, `.to_public_key()`, `.to_der()` |
| `PublicKey` | `PublicKey::from_der()` |
| `RsaKeyPair` | Struct literal: `RsaKeyPair { private, public }` |
| `SpkiPublicKeyBytes` | `SpkiPublicKeyBytes::from()` — wraps public key DER bytes |
| `SymmetricCryptoKey` | `.make_aes256_cbc_hmac_key()`, `::try_from()`, `.to_base64()` |
| `UnsignedSharedKey` | `::encapsulate_key_unsigned()` (deprecated — wrapped with `#[allow(deprecated)]`) |
| `UserKey` | `UserKey::new()`, `.make_key_pair()`, `.0` field access |
### Types Used — cipher.rs (field-level encryption)
| Type | Usage |
| ------------------------- | ----------------------------------------------------------------------------------------------- |
| `BitwardenLegacyKeyBytes` | `BitwardenLegacyKeyBytes::from()` — wraps raw key bytes for `SymmetricCryptoKey::try_from()` |
| `EncString` | `enc_str.parse::<EncString>()`, `.to_string()` — parsed from and serialized to EncString format |
| `SymmetricCryptoKey` | `::try_from()`, `.make_aes256_cbc_hmac_key()`, `.to_base64()` — key construction and testing |
### Traits Used
| Trait | File | Methods Called |
| ---------------- | --------- | -------------------------------------------------------------------- |
| `KeyEncryptable` | lib.rs | `.encrypt_with_key(&key)` — encrypts DER bytes and strings |
| `KeyEncryptable` | cipher.rs | `.encrypt_with_key(&key)` — encrypts plaintext strings to EncStrings |
| `KeyDecryptable` | cipher.rs | `.decrypt_with_key(&key)` — decrypts EncString back to plaintext |
## FFI Functions Exposed
The Rust layer exposes these functions to C# via csbindgen:
| Function | File | Purpose |
| -------------------------------- | --------- | --------------------------------------------------------- |
| `generate_user_keys` | lib.rs | Derive master key, user key, key pair from email/password |
| `generate_organization_keys` | lib.rs | Generate org symmetric key + RSA key pair |
| `generate_user_organization_key` | lib.rs | Encapsulate org key with user's public key (unsigned) |
| `encrypt_string` | cipher.rs | Encrypt a single plaintext string with a symmetric key |
| `decrypt_string` | cipher.rs | Decrypt an EncString with a symmetric key |
| `encrypt_fields` | cipher.rs | Encrypt specified fields in a JSON object by dot-path |
| `free_c_string` | lib.rs | Free a C string returned by any of the above functions |
## Breaking Change Risk Matrix
When reviewing upstream commits, prioritize checking for changes to:
**Critical (compilation failure):**
- Any type rename or removal listed above
- Changes to `EncString` parsing or serialization format
- Changes to `KeyEncryptable` or `KeyDecryptable` trait method signatures
- Changes to `SymmetricCryptoKey::try_from()` or `BitwardenLegacyKeyBytes`
**High (runtime failure):**
- Changes to `Kdf::PBKDF2` enum variant
- Changes to `HashPurpose::ServerAuthorization`
- Changes to `MasterKey::derive()` or key derivation behavior
- Changes to `UnsignedSharedKey::encapsulate_key_unsigned()` signature
**Medium (deprecation warnings):**
- Functions annotated with `#[deprecated]` — suppress with `#[allow(deprecated)]`
and add a comment explaining why and what the migration path is
**Low (transparent):**
- Internal implementation changes that don't affect the public API
- New methods added to existing types (additive, non-breaking)
## How to Check for Changes
```bash
cd /path/to/sdk-internal
# bitwarden-crypto public API
git diff <old>..<new> -- crates/bitwarden-crypto/src/lib.rs crates/bitwarden-crypto/src/keys/mod.rs
```
================================================
FILE: .claude/skills/bump-rust-sdk/references/methodology.md
================================================
# Bump sdk-internal: Detailed Methodology
## Step-by-Step Process
### 1. Identify the Current Server Pin
```bash
grep 'rev = ' util/RustSdk/rust/Cargo.toml
```
### 2. Identify the Target Version from Clients
Determine the latest production release tag from the clients repo:
```bash
# Check latest web release
gh release list --repo bitwarden/clients --limit 5 | grep web-v
# Get the sdk-internal NPM version at that tag
cd /path/to/clients
git show <tag>:package.json | grep sdk-internal
```
Example output: `"@bitwarden/sdk-internal": "0.2.0-main.522"`
The run number is **522** — the last segment after the branch name.
### 3. Map NPM Run Number to Git SHA
The NPM version encodes a GitHub Actions workflow run number, not a git tag. Query the API:
```bash
# Find the publish workflow ID
gh api "repos/bitwarden/sdk-internal/actions/workflows" \
--jq '.workflows[] | "\(.id) \(.name)"' | grep -i "Publish.*sdk-internal"
# Query for the specific run number (replace WORKFLOW_ID and RUN_NUMBER)
gh api "repos/bitwarden/sdk-internal/actions/workflows/WORKFLOW_ID/runs?per_page=100" \
--jq '.workflow_runs[] | select(.run_number == RUN_NUMBER) | "\(.run_number) \(.head_sha) \(.created_at) \(.head_branch)"'
```
The `head_sha` in the output is the git commit to pin in Cargo.toml.
**If the run is older than 100 runs ago**, paginate:
```bash
gh api "repos/bitwarden/sdk-internal/actions/workflows/WORKFLOW_ID/runs?per_page=100&page=2" \
--jq '.workflow_runs[] | select(.run_number == RUN_NUMBER) | ...'
```
### 4. Verify the Current Pin (for context)
```bash
cd /path/to/sdk-internal
git log --oneline -1 <current-rev>
```
This shows when the current pin was made and what commit it corresponds to.
### 5. Analyze Breaking Changes
List all commits touching `bitwarden-crypto` between the old and new revs:
```bash
cd /path/to/sdk-internal
git log --oneline <old-rev>..<new-rev> -- crates/bitwarden-crypto
```
For each commit, check for:
- **Type renames** (e.g., `AsymmetricCryptoKey` -> `PrivateKey`)
- **Removed or deprecated functions** (look for `#[deprecated]` annotations)
- **Changed function signatures** (parameter types, return types)
- **Trait changes** (new required methods, changed generic bounds)
To check the public API diff:
```bash
git diff <old-rev>..<new-rev> -- crates/bitwarden-crypto/src/keys/mod.rs
git diff <old-rev>..<new-rev> -- crates/bitwarden-crypto/src/lib.rs
```
Cross-reference findings against `references/api-surface.md` to assess impact.
### 6. Apply Code Changes
1. **Cargo.toml** — Update the `bitwarden-crypto` `rev = "..."` to the new SHA
2. **Rust source files** — Fix compilation errors from breaking changes
3. **Deprecation warnings** — Add `#[allow(deprecated)]` with a comment explaining why
4. Do NOT make unrelated formatting or style changes
### 7. Build and Test (Claude)
```bash
cd util/RustSdk/rust
# Compile
cargo build
# Review transitive dependency changes (focus on crypto crates)
git diff Cargo.lock | grep "^[+-]name\|^[+-]version" | head -40
# Verify FFI signatures unchanged
git diff ../NativeMethods.g.cs
# Run Rust tests (roundtrip test is critical)
cargo test
# Run C# integration tests
dotnet test test/SeederApi.IntegrationTest/
# Format checks
cargo fmt --check
```
**Key validation:** The `encrypt_string_decrypt_string_roundtrip` test proves the new SDK
version correctly encrypts and decrypts data. If this passes, the crypto is working.
### 8. Human Verification (HUMAN ONLY — Claude does NOT run these)
Present these commands to the human engineer. Wait for confirmation before proceeding.
**SeederUtility — seed an org with vault data:**
```bash
cd util/SeederUtility
dotnet run -- organization -n SdkBumpTest -d sdk-bump-test.example -u 3 -c 10 -g 5 -o Traditional -m
```
**SeederUtility — seed a fixture preset:**
```bash
dotnet run -- seed --preset dunder-mifflin-enterprise-full --mangle
```
**SeederApi — start and seed via HTTP:**
You need to replace the empty password argument with at least an 8-character master password for the fake user account
```bash
cd util/SeederApi
dotnet run
# In another terminal:
curl -X POST http://localhost:5000/seed \
-H "Content-Type: application/json" \
-H "X-Play-Id: sdk-bump-test" \
-d '{"template": "SingleUserScene", "arguments": {"email": "test@example.com", "password": ""}}'
```
**SeederApi — cleanup:**
```bash
curl -X DELETE http://localhost:5000/seed/sdk-bump-test
```
**Validation criteria (human checks):**
- Seeded users can log in to the web vault with the fake master password
- See `util/SeederUtility/README.md` for the default master password used by Seeder
- Vault Data (ciphers) is visible and decryptable in the web client
- No errors in SeederUtility or SeederApi output
- SeederApi cleanup deletes all tracked entities
---
## Worked Example: February 2026 Bump
This section documents the actual bump performed in Feb 2026 as a reference.
### Context
- **Old rev:** `7080159154a42b59028ccb9f5af62bf087e565f9` (2025-11-20)
- **Target:** `web-v2026.2.0` production release
- **NPM version:** `@bitwarden/sdk-internal` `0.2.0-main.522`
- **Workflow ID:** `126086102` (Publish @bitwarden/sdk-internal)
- **New rev:** `abba7fdab687753268b63248ec22639dff35d07c` (2026-02-05)
### Breaking Changes Found
| Change | Impact | Fix |
| ----------------------------------------------------- | -------------------------------- | ---------------------------------------- |
| `AsymmetricCryptoKey` renamed to `PrivateKey` | Import + usage in lib.rs | Rename type |
| `AsymmetricPublicCryptoKey` renamed to `PublicKey` | Import + usage in lib.rs | Rename type |
| `PrivateKey::to_der()` returns `Pkcs8PrivateKeyBytes` | Low risk — auto-refs | No code change needed |
| `encapsulate_key_unsigned` deprecated | Deprecation warning | `#[allow(deprecated)]` + comment |
### Cargo.lock Review
- All bitwarden-\* crates: `1.0.0` -> `2.0.0` (workspace version bump — expected)
- `coset`: `0.3.8` -> `0.4.1` (COSE library — minor bump)
- New transitive deps: `mockall`, `predicates`, `tracing-attributes` (test/dev deps)
- **No changes to core crypto crates** (rsa, aes, sha2, hmac, pbkdf2)
### Results
- All Rust unit tests passed
- All C# integration tests passed
- NativeMethods.g.cs unchanged
- Human verification: login, vault decryption, seeding all confirmed working
================================================
FILE: .config/dotnet-tools.json
================================================
{
"version": 1,
"isRoot": true,
"tools": {
"swashbuckle.aspnetcore.cli": {
"version": "10.1.0",
"commands": ["swagger"]
},
"dotnet-ef": {
"version": "8.0.8",
"commands": ["dotnet-ef"]
}
}
}
================================================
FILE: .devcontainer/bitwarden_common/docker-compose.yml
================================================
services:
bitwarden_server:
image: mcr.microsoft.com/devcontainers/dotnet:8.0
volumes:
- ../../:/workspace:cached
env_file:
- path: ../../dev/.env
required: false
# Overrides default command so things don't shut down after the process ends.
command: sleep infinity
bitwarden_mssql:
image: mcr.microsoft.com/mssql/server:2022-latest
platform: linux/amd64
restart: unless-stopped
env_file:
- path: ../../dev/.env
required: false
environment:
ACCEPT_EULA: "Y"
MSSQL_PID: Developer
volumes:
- mssql_dev_data:/var/opt/mssql
- ../../util/Migrator:/mnt/migrator/
- ../../dev/helpers/mssql:/mnt/helpers
- ../../dev/.data/mssql:/mnt/data
network_mode: service:bitwarden_server
bitwarden_mail:
image: sj26/mailcatcher:latest
restart: unless-stopped
network_mode: service:bitwarden_server
volumes:
mssql_dev_data:
================================================
FILE: .devcontainer/community_dev/devcontainer.json
================================================
{
"name": "Bitwarden Community Dev",
"dockerComposeFile": "../../.devcontainer/bitwarden_common/docker-compose.yml",
"service": "bitwarden_server",
"workspaceFolder": "/workspace",
"initializeCommand": "mkdir -p dev/.data/keys dev/.data/mssql dev/.data/azurite dev/helpers/mssql",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "22"
},
"ghcr.io/devcontainers/features/rust:1": {}
},
"mounts": [
{
"source": "../../dev/.data/keys",
"target": "/home/vscode/.aspnet/DataProtection-Keys",
"type": "bind"
}
],
"customizations": {
"vscode": {
"settings": {},
"extensions": ["ms-dotnettools.csdevkit"]
}
},
"postCreateCommand": "bash .devcontainer/community_dev/postCreateCommand.sh",
"forwardPorts": [1080, 1433, 3306, 5432],
"portsAttributes": {
"default": {
"onAutoForward": "ignore"
},
"1080": {
"label": "Mail Catcher",
"onAutoForward": "notify"
},
"1433": {
"label": "SQL Server",
"onAutoForward": "notify"
},
"3306": {
"label": "MySQL",
"onAutoForward": "notify"
},
"5432": {
"label": "PostgreSQL",
"onAutoForward": "notify"
}
}
}
================================================
FILE: .devcontainer/community_dev/postCreateCommand.sh
================================================
#!/usr/bin/env bash
export DEV_DIR=/workspace/dev
export CONTAINER_CONFIG=/workspace/.devcontainer/community_dev
git config --global --add safe.directory /workspace
if [[ -z "${CODESPACES}" ]]; then
allow_interactive=1
else
echo "Doing non-interactive setup"
allow_interactive=0
fi
get_option() {
# Helper function for reading the value of an environment variable
# primarily but then falling back to an interactive question if allowed
# and lastly falling back to a default value input when either other
# option is available.
name_of_var="$1"
question_text="$2"
default_value="$3"
is_secret="$4"
if [[ -n "${!name_of_var}" ]]; then
# If the env variable they gave us has a value, then use that value
echo "${!name_of_var}"
elif [[ "$allow_interactive" == 1 ]]; then
# If we can be interactive, then use the text they gave us to request input
if [[ "$is_secret" == 1 ]]; then
read -r -s -p "$question_text" response
echo "$response"
else
read -r -p "$question_text" response
echo "$response"
fi
else
# If no environment variable and not interactive, then just give back default value
echo "$default_value"
fi
}
get_installation_id_and_key() {
pushd ./dev >/dev/null || exit
echo "Please enter your installation id and key from https://bitwarden.com/host:"
INSTALLATION_ID="$(get_option "INSTALLATION_ID" "Installation id: " "00000000-0000-0000-0000-000000000001")"
INSTALLATION_KEY="$(get_option "INSTALLATION_KEY" "Installation key: " "" 1)"
jq ".globalSettings.installation.id = \"$INSTALLATION_ID\" |
.globalSettings.installation.key = \"$INSTALLATION_KEY\"" \
secrets.json.example >secrets.json # create/overwrite secrets.json
popd >/dev/null || exit
}
configure_other_vars() {
pushd ./dev >/dev/null || exit
cp secrets.json .secrets.json.tmp
# set DB_PASSWORD equal to .services.mssql.environment.MSSQL_SA_PASSWORD, accounting for quotes
DB_PASSWORD="$(grep -oP 'MSSQL_SA_PASSWORD=["'"'"']?\K[^"'"'"'\s]+' $DEV_DIR/.env)"
SQL_CONNECTION_STRING="Server=localhost;Database=vault_dev;User Id=SA;Password=$DB_PASSWORD;Encrypt=True;TrustServerCertificate=True"
jq \
".globalSettings.sqlServer.connectionString = \"$SQL_CONNECTION_STRING\" |
.globalSettings.postgreSql.connectionString = \"Host=localhost;Username=postgres;Password=$DB_PASSWORD;Database=vault_dev;Include Error Detail=true\" |
.globalSettings.mySql.connectionString = \"server=localhost;uid=root;pwd=$DB_PASSWORD;database=vault_dev\"" \
.secrets.json.tmp >secrets.json
rm -f .secrets.json.tmp
popd >/dev/null || exit
}
one_time_setup() {
do_secrets_json_setup="$(get_option "SETUP_SECRETS_JSON" "Would you like to configure your secrets and certificates for the first time?
WARNING: This will overwrite any existing secrets.json and certificate files.
Proceed? [y/N] " "n")"
if [[ "$do_secrets_json_setup" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
echo "Running one-time setup script..."
sleep 1
get_installation_id_and_key
configure_other_vars
pushd ./dev >/dev/null || exit
pwsh ./setup_secrets.ps1 || true
popd >/dev/null || exit
echo "Running migrations..."
sleep 5 # wait for DB container to start
dotnet run --project ./util/MsSqlMigratorUtility "$SQL_CONNECTION_STRING"
fi
}
one_time_setup
================================================
FILE: .devcontainer/internal_dev/devcontainer.json
================================================
{
"name": "Bitwarden Dev",
"dockerComposeFile": [
"../../.devcontainer/bitwarden_common/docker-compose.yml",
"../../.devcontainer/internal_dev/docker-compose.override.yml"
],
"service": "bitwarden_server",
"workspaceFolder": "/workspace",
"initializeCommand": "mkdir -p dev/.data/keys dev/.data/mssql dev/.data/azurite dev/helpers/mssql",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "22"
},
"ghcr.io/devcontainers/features/rust:1": {}
},
"mounts": [
{
"source": "../../dev/.data/keys",
"target": "/home/vscode/.aspnet/DataProtection-Keys",
"type": "bind"
}
],
"customizations": {
"vscode": {
"settings": {},
"extensions": ["ms-dotnettools.csdevkit"]
}
},
"onCreateCommand": "bash .devcontainer/internal_dev/onCreateCommand.sh",
"postCreateCommand": "bash .devcontainer/internal_dev/postCreateCommand.sh",
"forwardPorts": [
1080, 1433, 3306, 5432, 10000, 10001, 10002,
4000, 4001, 33656, 33657, 44519, 44559,
46273, 46274, 50024, 51822, 51823,
54103, 61840, 61841, 62911, 62912
],
"portsAttributes": {
"default": {
"onAutoForward": "ignore"
},
"1080": {
"label": "Mail Catcher",
"onAutoForward": "notify"
},
"1433": {
"label": "SQL Server",
"onAutoForward": "notify"
},
"3306": {
"label": "MySQL",
"onAutoForward": "notify"
},
"5432": {
"label": "PostgreSQL",
"onAutoForward": "notify"
},
"10000": {
"label": "Azurite Storage Blob",
"onAutoForward": "notify"
},
"10001": {
"label": "Azurite Storage Queue",
"onAutoForward": "notify"
},
"10002": {
"label": "Azurite Storage Table",
"onAutoForward": "notify"
},
"4000": {
"label": "Api (Cloud)",
"onAutoForward": "notify"
},
"4001": {
"label": "Api (SelfHost)",
"onAutoForward": "notify"
},
"33656": {
"label": "Identity (Cloud)",
"onAutoForward": "notify"
},
"33657": {
"label": "Identity (SelfHost)",
"onAutoForward": "notify"
},
"44519": {
"label": "Billing",
"onAutoForward": "notify"
},
"44559": {
"label": "Scim",
"onAutoForward": "notify"
},
"46273": {
"label": "Events (Cloud)",
"onAutoForward": "notify"
},
"46274": {
"label": "Events (SelfHost)",
"onAutoForward": "notify"
},
"50024": {
"label": "Icons",
"onAutoForward": "notify"
},
"51822": {
"label": "Sso (Cloud)",
"onAutoForward": "notify"
},
"51823": {
"label": "Sso (SelfHost)",
"onAutoForward": "notify"
},
"54103": {
"label": "EventsProcessor",
"onAutoForward": "notify"
},
"61840": {
"label": "Notifications (Cloud)",
"onAutoForward": "notify"
},
"61841": {
"label": "Notifications (SelfHost)",
"onAutoForward": "notify"
},
"62911": {
"label": "Admin (Cloud)",
"onAutoForward": "notify"
},
"62912": {
"label": "Admin (SelfHost)",
"onAutoForward": "notify"
}
}
}
================================================
FILE: .devcontainer/internal_dev/docker-compose.override.yml
================================================
services:
bitwarden_storage:
image: mcr.microsoft.com/azure-storage/azurite:latest
restart: unless-stopped
volumes:
- ../../dev/.data/azurite:/data
network_mode: service:bitwarden_server
================================================
FILE: .devcontainer/internal_dev/onCreateCommand.sh
================================================
#!/usr/bin/env bash
export REPO_ROOT="$(git rev-parse --show-toplevel)"
file="$REPO_ROOT/dev/custom-root-ca.crt"
if [ -e "$file" ]; then
echo "Adding custom root CA"
sudo cp "$file" /usr/local/share/ca-certificates/
sudo update-ca-certificates
else
echo "No custom root CA found, skipping..."
fi
================================================
FILE: .devcontainer/internal_dev/postCreateCommand.sh
================================================
#!/usr/bin/env bash
export REPO_ROOT="$(git rev-parse --show-toplevel)"
export CONTAINER_CONFIG=/workspace/.devcontainer/internal_dev
git config --global --add safe.directory /workspace
if [[ -z "${CODESPACES}" ]]; then
allow_interactive=1
else
echo "Doing non-interactive setup"
allow_interactive=0
fi
get_option() {
# Helper function for reading the value of an environment variable
# primarily but then falling back to an interactive question if allowed
# and lastly falling back to a default value input when either other
# option is available.
name_of_var="$1"
question_text="$2"
default_value="$3"
is_secret="$4"
if [[ -n "${!name_of_var}" ]]; then
# If the env variable they gave us has a value, then use that value
echo "${!name_of_var}"
elif [[ "$allow_interactive" == 1 ]]; then
# If we can be interactive, then use the text they gave us to request input
if [[ "$is_secret" == 1 ]]; then
read -r -s -p "$question_text" response
echo "$response"
else
read -r -p "$question_text" response
echo "$response"
fi
else
# If no environment variable and not interactive, then just give back default value
echo "$default_value"
fi
}
remove_comments() {
# jq will not parse files with comments
file="$1"
if [[ -f "$file" ]]; then
sed -e '/^\/\//d' -e 's@[[:blank:]]\{1,\}//.*@@' "$file" >"$file.tmp"
mv "$file.tmp" "$file"
fi
}
configure_other_vars() {
pushd ./dev >/dev/null || exit
cp "$REPO_ROOT/dev/secrets.json" "$REPO_ROOT/dev/.secrets.json.tmp"
# set DB_PASSWORD equal to .services.mssql.environment.MSSQL_SA_PASSWORD, accounting for quotes
DB_PASSWORD="$(grep -oP 'MSSQL_SA_PASSWORD=["'"'"']?\K[^"'"'"'\s]+' $REPO_ROOT/dev/.env)"
SQL_CONNECTION_STRING="Server=localhost;Database=vault_dev;User Id=SA;Password=$DB_PASSWORD;Encrypt=True;TrustServerCertificate=True"
jq \
".globalSettings.sqlServer.connectionString = \"$SQL_CONNECTION_STRING\" |
.globalSettings.postgreSql.connectionString = \"Host=localhost;Username=postgres;Password=$DB_PASSWORD;Database=vault_dev;Include Error Detail=true\" |
.globalSettings.mySql.connectionString = \"server=localhost;uid=root;pwd=$DB_PASSWORD;database=vault_dev\"" \
.secrets.json.tmp >secrets.json
rm "$REPO_ROOT/dev/.secrets.json.tmp"
popd >/dev/null || exit
}
one_time_setup() {
if [[ ! -f "$REPO_ROOT/dev/dev.pfx" ]]; then
# We do not have the cert file
if [[ ! -z "${DEV_CERT_CONTENTS}" ]]; then
# Make file for them
echo "Making $REPO_ROOT/dev/dev.pfx file for you based on DEV_CERT_CONTENTS environment variable."
# Assume content is base64 encoded
echo "$DEV_CERT_CONTENTS" | base64 -d > "$REPO_ROOT/dev/dev.pfx"
else
if [[ $allow_interactive -eq 1 ]]; then
read -r -p \
"Place the dev.pfx files from our shared Collection in the $REPO_ROOT/dev directory.
Press <Enter> to continue."
fi
fi
fi
if [[ -f "$REPO_ROOT/dev/dev.pfx" ]]; then
dotnet tool install dotnet-certificate-tool -g >/dev/null
cert_password="$(get_option "DEV_CERT_PASSWORD" "Paste the \"Licensing Certificate - Dev\" password: " "" 1)"
certificate-tool add --file "$REPO_ROOT/dev/dev.pfx" --password "$cert_password"
else
echo "You don't have a $REPO_ROOT/dev/dev.pfx file setup." >/dev/stderr
fi
do_secrets_json_setup="$(get_option "SETUP_SECRETS_JSON" "Would you like us to setup your secrets.json file for you? [y/N] " "n")"
if [[ "$do_secrets_json_setup" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
remove_comments "$REPO_ROOT/dev/secrets.json"
configure_other_vars
# setup_secrets needs to be ran from the dev folder
pushd "$REPO_ROOT/dev" >/dev/null || exit
echo "Injecting dotnet secrets..."
pwsh "$REPO_ROOT/dev/setup_secrets.ps1" || true
popd >/dev/null || exit
fi
do_azurite_setup="$(get_option "SETUP_AZURITE" "Would you like us to setup your azurite environment? [y/N] " "n")"
if [[ "$do_azurite_setup" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
echo "Installing Az module. This will take ~a minute..."
pwsh -Command "Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force"
pwsh "$REPO_ROOT/dev/setup_azurite.ps1"
fi
run_mssql_migrations="$(get_option "RUN_MSSQL_MIGRATIONS" "Would you like us to run MSSQL Migrations for you? [y/N] " "n")"
if [[ "$run_mssql_migrations" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
echo "Running migrations..."
sleep 5 # wait for DB container to start
dotnet run --project "$REPO_ROOT/util/MsSqlMigratorUtility" "$SQL_CONNECTION_STRING"
fi
stripe_response="$(get_option "INSTALL_STRIPE_CLI" "Would you like to install the Stripe CLI? [y/N] " "n")"
if [[ "$stripe_response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
install_stripe_cli
fi
}
# Install Stripe CLI
install_stripe_cli() {
echo "Installing Stripe CLI..."
# Add Stripe CLI GPG key so that apt can verify the packages authenticity.
# If Stripe ever changes the key, we'll need to update this. Visit https://docs.stripe.com/stripe-cli?install-method=apt if so
curl -s https://packages.stripe.dev/api/security/keypair/stripe-cli-gpg/public | gpg --dearmor | sudo tee /usr/share/keyrings/stripe.gpg >/dev/null
# Add Stripe CLI repository to apt sources
echo "deb [signed-by=/usr/share/keyrings/stripe.gpg] https://packages.stripe.dev/stripe-cli-debian-local stable main" | sudo tee -a /etc/apt/sources.list.d/stripe.list >/dev/null
sudo apt update
sudo apt install -y stripe
}
one_time_setup
================================================
FILE: .dockerignore
================================================
**/bin
**/obj
**/node_modules
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Don't use tabs for indentation.
[*]
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
guidelines = 120
# (Please don't specify an indent_size here; that has too many unintended consequences.)
# Code files
[*.{cs,csx,vb,vbx}]
indent_size = 4
charset = utf-8-bom
# Xml project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
indent_size = 2
# Xml config files
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
indent_size = 2
# JSON files
[*.json]
indent_size = 2
# Dotnet code style settings:
[*.{cs,vb}]
# Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true
# Avoid "this." and "Me." if not necessary
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion
# Use language keywords instead of framework type names for type references
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
# Suggest more modern language features when available
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
# Prefix private members with underscore
dotnet_naming_rule.private_members_with_underscore.symbols = private_fields
dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
# Async methods should have "Async" suffix
dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_rule.async_methods_end_in_async.severity = suggestion
dotnet_naming_symbols.any_async_methods.applicable_kinds = method
dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
dotnet_naming_symbols.any_async_methods.required_modifiers = async
dotnet_naming_style.end_in_async.required_prefix =
dotnet_naming_style.end_in_async.required_suffix = Async
dotnet_naming_style.end_in_async.capitalization = pascal_case
dotnet_naming_style.end_in_async.word_separator =
# Obsolete warnings, this should be removed or changed to warning once we address some of the obsolete items.
dotnet_diagnostic.CS0618.severity = suggestion
# Obsolete warnings, this should be removed or changed to warning once we address some of the obsolete items.
dotnet_diagnostic.CS0612.severity = suggestion
# Remove unnecessary using directives https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0005
dotnet_diagnostic.IDE0005.severity = warning
# Specify CultureInfo https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1304
dotnet_diagnostic.CA1304.severity = warning
# Specify IFormatProvider https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1305
dotnet_diagnostic.CA1305.severity = warning
# CSharp code style settings:
[*.cs]
# Prefer "var" everywhere
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
# Prefer method-like constructs to have a expression-body
csharp_style_expression_bodied_methods = true:none
csharp_style_expression_bodied_constructors = true:none
csharp_style_expression_bodied_operators = true:none
# Prefer property-like constructs to have an expression-body
csharp_style_expression_bodied_properties = true:none
csharp_style_expression_bodied_indexers = true:none
csharp_style_expression_bodied_accessors = true:none
# Suggest more modern language features when available
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
# Newline settings
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
# Namespace settings
csharp_style_namespace_declarations = file_scoped:warning
# Switch expression
dotnet_diagnostic.CS8509.severity = error # missing switch case for named enum value
dotnet_diagnostic.CS8524.severity = none # missing switch case for unnamed enum value
# CA2253: Named placeholders should nto be numeric values
dotnet_diagnostic.CA2253.severity = suggestion
# CA2254: Template should be a static expression
dotnet_diagnostic.CA2254.severity = warning
# CA1727: Use PascalCase for named placeholders
dotnet_diagnostic.CA1727.severity = suggestion
================================================
FILE: .git-blame-ignore-revs
================================================
# Apply .NET format https://github.com/bitwarden/server/pull/1764
23b0a1f9df25058ab29785ecad9a233113c10889
# Turn on file scoped namespaces (gets reverted) https://github.com/bitwarden/server/pull/2225
34fb4cca2aa78deb84d4cbc359992a7c6bba7ea5
# Revert filescoped https://github.com/bitwarden/server/pull/2227
bae03feffecbef488cb52f5f5bc133dfdbbaa316
# Run formatting for file scoped namespaces https://github.com/bitwarden/server/pull/2230
7f5f010e1eea400300c47f776604ecf46c4b4f2d
================================================
FILE: .git-hooks/pre-commit
================================================
#!/bin/bash
FILES=$(git diff --cached --name-only --diff-filter=ACM "*.cs")
if [ -n "$FILES" ]
then
dotnet format ./bitwarden-server.sln --no-restore --include $FILES
echo "$FILES" | xargs git add
fi
================================================
FILE: .gitattributes
================================================
*.sh eol=lf
*.cs eol=lf
.dockerignore eol=lf
dockerfile eol=lf
================================================
FILE: .github/CODEOWNERS
================================================
# Please sort into logical groups with comment headers. Sort groups in order of specificity.
# For example, default owners should always be the first group.
# Sort lines alphabetically within these groups to avoid accidentally adding duplicates.
#
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
## Docker-related files
**/Dockerfile @bitwarden/team-appsec @bitwarden/dept-shot
**/*.Dockerfile @bitwarden/team-appsec @bitwarden/dept-shot
**/*.dockerignore @bitwarden/team-appsec @bitwarden/dept-shot
**/docker-compose.yml @bitwarden/team-appsec @bitwarden/dept-shot
**/entrypoint.sh @bitwarden/team-appsec @bitwarden/dept-shot
# Scanning tools
.checkmarx/ @bitwarden/team-appsec
## BRE team owns these workflows ##
.github/workflows/publish.yml @bitwarden/dept-bre
## These are shared workflows ##
.github/workflows/_move_edd_db_scripts.yml
.github/workflows/release.yml
# Database Operations for database changes
src/Sql/** @bitwarden/dept-dbops
util/EfShared/** @bitwarden/dept-dbops
util/Migrator/** @bitwarden/team-platform-dev # The Platform team owns the Migrator project code
util/Migrator/DbScripts/** @bitwarden/dept-dbops
util/Migrator/DbScripts_finalization/** @bitwarden/dept-dbops
util/Migrator/DbScripts_transition/** @bitwarden/dept-dbops
util/Migrator/MySql/** @bitwarden/dept-dbops
util/MySqlMigrations/** @bitwarden/dept-dbops
util/PostgresMigrations/** @bitwarden/dept-dbops
util/SqlServerEFScaffold/** @bitwarden/dept-dbops
util/SqliteMigrations/** @bitwarden/dept-dbops
# Shared util projects
util/MsSqlMigratorUtility/** @bitwarden/team-platform-dev
util/Setup/** @bitwarden/dept-shot @bitwarden/team-platform-dev
# UIF
src/Core/MailTemplates/Mjml @bitwarden/team-ui-foundation # Teams are expected to own sub-directories of this project
src/Core/MailTemplates/Mjml/.mjmlconfig # This change allows teams to add components within their own subdirectories without requiring a code review from UIF.
# Auth team
**/Auth @bitwarden/team-auth-dev
bitwarden_license/src/Sso @bitwarden/team-auth-dev
src/Identity @bitwarden/team-auth-dev
src/Core/Identity @bitwarden/team-auth-dev
src/Core/IdentityServer @bitwarden/team-auth-dev
# Autofill team
src/Core/Utilities/StaticStore.cs @bitwarden/team-autofill-dev
src/Core/Enums/GlobalEquivalentDomainsType.cs @bitwarden/team-autofill-dev
# Key Management team
**/KeyManagement @bitwarden/team-key-management-dev
# Tools team
**/Tools @bitwarden/team-tools-dev
# Dirt (Data Insights & Reporting) team
**/Dirt @bitwarden/team-data-insights-and-reporting-dev
src/Events @bitwarden/team-data-insights-and-reporting-dev
src/EventsProcessor @bitwarden/team-data-insights-and-reporting-dev
test/Events.IntegrationTest @bitwarden/team-data-insights-and-reporting-dev
test/Events.Test @bitwarden/team-data-insights-and-reporting-dev
test/EventsProcessor.Test @bitwarden/team-data-insights-and-reporting-dev
# Vault team
**/Vault @bitwarden/team-vault-dev
**/Vault/AuthorizationHandlers @bitwarden/team-vault-dev @bitwarden/team-admin-console-dev # joint ownership over authorization handlers that affect organization users
# Admin Console team
**/AdminConsole @bitwarden/team-admin-console-dev
bitwarden_license/src/Scim @bitwarden/team-admin-console-dev
bitwarden_license/src/test/Scim.IntegrationTest @bitwarden/team-admin-console-dev
bitwarden_license/src/test/Scim.ScimTest @bitwarden/team-admin-console-dev
# Billing team
**/*billing* @bitwarden/team-billing-dev
**/*bitpay* @bitwarden/team-billing-dev
**/*braintree* @bitwarden/team-billing-dev
**/*freshdesk* @bitwarden/team-billing-dev
**/*freshsales* @bitwarden/team-billing-dev
**/*paypal* @bitwarden/team-billing-dev
**/*stripe* @bitwarden/team-billing-dev
**/*subscription* @bitwarden/team-billing-dev
**/*payment* @bitwarden/team-billing-dev
**/*invoice* @bitwarden/team-billing-dev
**/*OrganizationLicense* @bitwarden/team-billing-dev
**/Billing @bitwarden/team-billing-dev
src/Admin/Controllers/ToolsController.cs @bitwarden/team-billing-dev
src/Admin/Views/Tools @bitwarden/team-billing-dev
# Platform team
.github/workflows/build.yml @bitwarden/team-platform-dev
.github/workflows/build_target.yml @bitwarden/team-platform-dev
.github/workflows/cleanup-after-pr.yml @bitwarden/team-platform-dev
.github/workflows/cleanup-rc-branch.yml @bitwarden/team-platform-dev
.github/workflows/repository-management.yml @bitwarden/team-platform-dev
.github/workflows/test-database.yml @bitwarden/team-platform-dev
.github/workflows/test.yml @bitwarden/team-platform-dev
**/*Platform* @bitwarden/team-platform-dev
# The PushType enum is expected to be editted by anyone without need for Platform review
src/Core/Platform/Push/PushType.cs
# SDK
util/RustSdk @bitwarden/team-sdk-sme
# Multiple owners - DO NOT REMOVE (BRE)
**/packages.lock.json
Directory.Build.props
.devcontainer/**
dev/docker-compose.yml
# Claude related files
.claude/ @bitwarden/team-ai-sme
.github/workflows/respond.yml @bitwarden/team-ai-sme
.github/workflows/review-code.yml @bitwarden/team-ai-sme
================================================
FILE: .github/ISSUE_TEMPLATE/bug.yml
================================================
name: Server Bug Report
description: File a bug report
labels: [bug]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
Please do not submit feature requests. The [Community Forums](https://community.bitwarden.com) has a section for submitting, voting for, and discussing product feature requests.
- type: textarea
id: reproduce
attributes:
label: Steps To Reproduce
description: How can we reproduce the behavior.
value: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. Click on '...'
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Result
description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual Result
description: A clear and concise description of what is happening.
validations:
required: true
- type: textarea
id: screenshots
attributes:
label: Screenshots or Videos
description: If applicable, add screenshots and/or a short video to help explain your problem.
- type: textarea
id: additional-context
attributes:
label: Additional Context
description: Add any other context about the problem here.
- type: input
id: version
attributes:
label: Build Version
description: What version of our software are you running?
validations:
required: true
- type: dropdown
id: environment
attributes:
label: Environment
description: Which environment (Cloud / Self-Hosted) are you using?
multiple: true
options:
- Cloud (bitwarden.com)
- Self-Hosted
validations:
required: true
- type: textarea
id: environment-details
attributes:
label: Environment Details
description: If Self-Hosted please provide some additional environment details.
placeholder: |
- Operating system: [e.g. Windows 10, Mac OS Catalina]
- Environment: [e.g. Docker, EKS, ECS, K8S]
- Hardware: [e.g. Intel 6-core, 8GB RAM]
- type: checkboxes
id: issue-tracking-info
attributes:
label: Issue Tracking Info
description: |
Issue tracking information
options:
- label: I understand that work is tracked outside of Github. A PR will be linked to this issue should one be opened to address it, but Bitwarden doesn't use fields like "assigned", "milestone", or "project" to track progress.
================================================
FILE: .github/ISSUE_TEMPLATE/bw-lite.yml
================================================
name: Bitwarden lite Deployment Bug Report
description: File a bug report
labels: [bug, bw-lite-deploy]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
Please do not submit feature requests. The [Community Forums](https://community.bitwarden.com) has a section for submitting, voting for, and discussing product feature requests.
- type: textarea
id: reproduce
attributes:
label: Steps To Reproduce
description: How can we reproduce the behavior.
value: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. Click on '...'
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Result
description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual Result
description: A clear and concise description of what is happening.
validations:
required: true
- type: textarea
id: screenshots
attributes:
label: Screenshots or Videos
description: If applicable, add screenshots and/or a short video to help explain your problem.
- type: textarea
id: additional-context
attributes:
label: Additional Context
description: Add any other context about the problem here.
- type: input
id: version
attributes:
label: Githash Version
description: Please go to https://{your-bitwarden-domain}/api/config and copy the gitHash version
validations:
required: true
- type: textarea
id: environment-details
attributes:
label: Environment Details
description: If Self-Hosted please provide some additional environment details.
placeholder: |
- Operating system: [e.g. Windows 10, Mac OS Catalina]
- Environment: [e.g. Docker, EKS, ECS, K8S]
- Hardware: [e.g. Intel 6-core, 8GB RAM]
- type: textarea
id: database-image
attributes:
label: Database Image
description: Please include the image and version of your database
placeholder: |
# MariaDB Example
mariadb:10
# Postgres Example
postgres:14
- type: checkboxes
id: issue-tracking-info
attributes:
label: Issue Tracking Info
description: |
Issue tracking information
options:
- label: I understand that work is tracked outside of Github. A PR will be linked to this issue should one be opened to address it, but Bitwarden doesn't use fields like "assigned", "milestone", or "project" to track progress.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Feature Requests
url: https://community.bitwarden.com/c/feature-requests/
about: Request new features using the Community Forums. Please search existing feature requests before making a new one.
- name: Bitwarden Community Forums
url: https://community.bitwarden.com
about: Please visit the community forums for general community discussion, support and the development roadmap.
- name: Customer Support
url: https://bitwarden.com/contact/
about: Please contact our customer support for account issues and general customer support.
- name: Security Issues
url: https://hackerone.com/bitwarden
about: We use HackerOne to manage security disclosures.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## 🎟️ Tracking
<!-- Paste the link to the Jira or GitHub issue or otherwise describe / point to where this change is coming from. -->
## 📔 Objective
<!-- Describe what the purpose of this PR is, for example what bug you're fixing or new feature you're adding. -->
## 📸 Screenshots
<!-- Required for any UI changes; delete if not applicable. Use fixed width images for better display. -->
================================================
FILE: .github/codecov.yml
================================================
ignore:
- "test" # Tests
- "util" # Utils (migrators)
================================================
FILE: .github/renovate.json5
================================================
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
extends: ["github>bitwarden/renovate-config"], // Extends our default configuration for pinned dependencies
enabledManagers: [
"cargo",
"dockerfile",
"docker-compose",
"github-actions",
"npm",
"nuget",
],
packageRules: [
// ==================== Team Ownership Rules ====================
{
matchManagers: ["dockerfile", "docker-compose"],
commitMessagePrefix: "[deps] BRE:",
},
{
matchPackageNames: ["DnsClient"],
description: "Admin Console owned dependencies",
commitMessagePrefix: "[deps] AC:",
reviewers: ["team:team-admin-console-dev"],
},
{
matchPackageNames: [
"DuoUniversal",
"Fido2.AspNet",
"Duende.IdentityServer",
"Microsoft.AspNetCore.Authentication.JwtBearer",
"Microsoft.Extensions.Caching.Cosmos",
"Microsoft.Extensions.Identity.Stores",
"Otp.NET",
"Sustainsys.Saml2.AspNetCore2",
"YubicoDotNetClient",
],
description: "Auth owned dependencies",
commitMessagePrefix: "[deps] Auth:",
reviewers: ["team:team-auth-dev"],
},
{
matchPackageNames: [
"AutoFixture.AutoNSubstitute",
"AutoFixture.Xunit2",
"BenchmarkDotNet",
"BitPay.Light",
"Braintree",
"coverlet.collector",
"CsvHelper",
"Kralizek.AutoFixture.Extensions.MockHttp",
"Microsoft.AspNetCore.Mvc.Testing",
"Newtonsoft.Json",
"NSubstitute",
"Serilog.Extensions.Logging.File",
"Stripe.net",
"Swashbuckle.AspNetCore",
"Swashbuckle.AspNetCore.SwaggerGen",
"xunit",
"xunit.runner.visualstudio",
],
description: "Billing owned dependencies",
commitMessagePrefix: "[deps] Billing:",
reviewers: ["team:team-billing-dev"],
},
{
matchPackageNames: [
"Dapper",
"dbup-sqlserver",
"dotnet-ef",
"linq2db.EntityFrameworkCore",
"Microsoft.Azure.Cosmos",
"Microsoft.Data.SqlClient",
"Microsoft.EntityFrameworkCore.Design",
"Microsoft.EntityFrameworkCore.InMemory",
"Microsoft.EntityFrameworkCore.Relational",
"Microsoft.EntityFrameworkCore.Sqlite",
"Microsoft.EntityFrameworkCore.SqlServer",
"Npgsql.EntityFrameworkCore.PostgreSQL",
"Pomelo.EntityFrameworkCore.MySql",
],
description: "DbOps owned dependencies",
commitMessagePrefix: "[deps] DbOps:",
reviewers: ["team:dept-dbops"],
},
{
matchPackageNames: ["YamlDotNet"],
description: "BRE owned dependencies",
commitMessagePrefix: "[deps] BRE:",
reviewers: ["team:dept-bre"],
},
{
matchPackageNames: [
"AspNetCoreRateLimit",
"AspNetCoreRateLimit.Redis",
"Azure.Data.Tables",
"Azure.Extensions.AspNetCore.DataProtection.Blobs",
"Azure.Messaging.EventGrid",
"Azure.Messaging.ServiceBus",
"Azure.Storage.Blobs",
"Azure.Storage.Queues",
"LaunchDarkly.ServerSdk",
"MessagePack",
"Microsoft.AspNetCore.Http",
"Microsoft.AspNetCore.SignalR.Protocols.MessagePack",
"Microsoft.AspNetCore.SignalR.StackExchangeRedis",
"Microsoft.Extensions.Configuration.EnvironmentVariables",
"Microsoft.Extensions.Configuration.UserSecrets",
"Microsoft.Extensions.Configuration",
"Microsoft.Extensions.DependencyInjection.Abstractions",
"Microsoft.Extensions.DependencyInjection",
"Microsoft.Extensions.Logging",
"Microsoft.Extensions.Logging.Console",
"Microsoft.Extensions.Caching.SqlServer",
"Microsoft.Extensions.Caching.StackExchangeRedis",
"Quartz",
],
description: "Platform owned dependencies",
commitMessagePrefix: "[deps] Platform:",
reviewers: ["team:team-platform-dev"],
},
{
matchUpdateTypes: ["lockFileMaintenance"],
description: "Platform owns lock file maintenance",
commitMessagePrefix: "[deps] Platform:",
reviewers: ["team:team-platform-dev"],
},
{
matchPackageNames: [
"AutoMapper.Extensions.Microsoft.DependencyInjection",
"AWSSDK.SimpleEmail",
"AWSSDK.SQS",
"Handlebars.Net",
"MailKit",
"Microsoft.Azure.NotificationHubs",
"SendGrid",
],
description: "Tools owned dependencies",
commitMessagePrefix: "[deps] Tools:",
reviewers: ["team:team-tools-dev"],
},
{
matchPackageNames: [
"AngleSharp",
"AspNetCore.HealthChecks.AzureServiceBus",
"AspNetCore.HealthChecks.AzureStorage",
"AspNetCore.HealthChecks.Network",
"AspNetCore.HealthChecks.Redis",
"AspNetCore.HealthChecks.SendGrid",
"AspNetCore.HealthChecks.SqlServer",
"AspNetCore.HealthChecks.Uris",
],
description: "Vault owned dependencies",
commitMessagePrefix: "[deps] Vault:",
reviewers: ["team:team-vault-dev"],
},
// ==================== Grouping Rules ====================
// These come after any specific team assignment rules to ensure
// that grouping is not overridden by subsequent rule definitions.
{
groupName: "cargo minor",
matchManagers: ["cargo"],
matchUpdateTypes: ["minor"],
},
{
groupName: "dockerfile minor",
matchManagers: ["dockerfile"],
matchUpdateTypes: ["minor"],
},
{
groupName: "docker-compose minor",
matchManagers: ["docker-compose"],
matchUpdateTypes: ["minor"],
},
{
groupName: "github-action minor",
matchManagers: ["github-actions"],
matchUpdateTypes: ["minor"],
addLabels: ["hold"],
},
{
groupName: "Admin and SSO npm dependencies",
matchFileNames: ["src/Admin/package.json", "src/Sso/package.json"],
matchUpdateTypes: ["minor", "patch"],
description: "Admin & SSO npm packages",
commitMessagePrefix: "[deps] Auth:",
reviewers: ["team:team-auth-dev"],
},
{
matchPackageNames: ["/^Microsoft\\.EntityFrameworkCore\\./", "/^dotnet-ef/"],
groupName: "EntityFrameworkCore",
description: "Group EntityFrameworkCore to exclude them from the dotnet monorepo preset",
},
{
matchPackageNames: ["https://github.com/bitwarden/sdk-internal.git"],
groupName: "sdk-internal",
dependencyDashboardApproval: true
},
// ==================== Dashboard Rules ====================
{
// For any Microsoft.Extensions.* and Microsoft.AspNetCore.* packages, we want to create PRs for patch updates.
// This overrides the default that ignores patch updates for nuget dependencies.
matchPackageNames: [
"/^Microsoft\\.Extensions\\./",
"/^Microsoft\\.AspNetCore\\./",
],
matchUpdateTypes: ["patch"],
dependencyDashboardApproval: false,
},
{
// For the Platform-owned dependencies below, we have decided we will only be creating PRs
// for major updates, and sending minor (as well as patch, inherited from base config) to the dashboard.
// This rule comes AFTER grouping rules so that groups are respected while still
// sending minor/patch updates to the dependency dashboard for approval.
matchPackageNames: [
"AspNetCoreRateLimit",
"AspNetCoreRateLimit.Redis",
"Azure.Data.Tables",
"Azure.Extensions.AspNetCore.DataProtection.Blobs",
"Azure.Messaging.EventGrid",
"Azure.Messaging.ServiceBus",
"Azure.Storage.Blobs",
"Azure.Storage.Queues",
"LaunchDarkly.ServerSdk",
"Quartz",
],
matchUpdateTypes: ["minor"],
dependencyDashboardApproval: true,
},
],
ignoreDeps: ["dotnet-sdk"],
}
================================================
FILE: .github/workflows/_move_edd_db_scripts.yml
================================================
name: _move_edd_db_scripts
run-name: Move EDD database scripts
on:
workflow_call:
permissions:
pull-requests: write
contents: write
jobs:
setup:
name: Setup
runs-on: ubuntu-22.04
permissions:
contents: read
id-token: write
outputs:
migration_filename_prefix: ${{ steps.prefix.outputs.prefix }}
copy_edd_scripts: ${{ steps.check-script-existence.outputs.copy_edd_scripts }}
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: "bitwarden-ci"
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Check out branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ steps.retrieve-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
persist-credentials: false
- name: Get script prefix
id: prefix
run: echo "prefix=$(date +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"
- name: Check if any files in DB transition or finalization directories
id: check-script-existence
run: |
if [ -f util/Migrator/DbScripts_transition/* -o -f util/Migrator/DbScripts_finalization/* ]; then
echo "copy_edd_scripts=true" >> "$GITHUB_OUTPUT"
else
echo "copy_edd_scripts=false" >> "$GITHUB_OUTPUT"
fi
move-scripts:
name: Move scripts
runs-on: ubuntu-22.04
needs: setup
permissions:
contents: write
pull-requests: write
id-token: write
actions: read
if: ${{ needs.setup.outputs.copy_edd_scripts == 'true' }}
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
persist-credentials: true
- name: Generate branch name
id: branch_name
env:
PREFIX: ${{ needs.setup.outputs.migration_filename_prefix }}
run: echo "branch_name=move_edd_db_scripts_$PREFIX" >> "$GITHUB_OUTPUT"
- name: "Create branch"
env:
BRANCH: ${{ steps.branch_name.outputs.branch_name }}
run: git switch -c "$BRANCH"
- name: Move scripts and finalization database schema
id: move-files
env:
PREFIX: ${{ needs.setup.outputs.migration_filename_prefix }}
run: |
# scripts
moved_files="Migration scripts moved:\n\n"
src_dirs="util/Migrator/DbScripts_transition,util/Migrator/DbScripts_finalization"
dest_dir="util/Migrator/DbScripts"
i=0
for src_dir in ${src_dirs//,/ }; do
for file in "$src_dir"/*; do
filenumber=$(printf "%02d" $i)
filename=$(basename "$file")
new_filename="${PREFIX}_${filenumber}_${filename}"
dest_file="$dest_dir/$new_filename"
# Replace any finalization references due to the move
sed -i -e 's/dbo_finalization/dbo/g' "$file"
mv "$file" "$dest_file"
moved_files="$moved_files \n $filename -> $new_filename"
i=$((i+1))
done
done
# schema
moved_files="$moved_files\n\nFinalization scripts moved:\n\n"
src_dir="src/Sql/dbo_finalization"
dest_dir="src/Sql/dbo"
# sync finalization schema back to dbo, maintaining structure
rsync -r "$src_dir/" "$dest_dir/"
rm -rf "${src_dir}"/*
# Replace any finalization references due to the move
find ./src/Sql/dbo -name "*.sql" -type f -exec sed -i \
-e 's/\[dbo_finalization\]/[dbo]/g' \
-e 's/dbo_finalization\./dbo./g' {} +
for file in "$src_dir"/**/*; do
moved_files="$moved_files \n $file"
done
echo "moved_files=$moved_files" >> "$GITHUB_OUTPUT"
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: "bitwarden-ci"
secrets: "github-gpg-private-key,
github-gpg-private-key-passphrase,
devops-alerts-slack-webhook-url"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Import GPG keys
uses: crazy-max/ghaction-import-gpg@e89d40939c28e39f97cf32126055eeae86ba74ec # v6.3.0
with:
gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }}
passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }}
git_user_signingkey: true
git_commit_gpgsign: true
- name: Commit and push changes
id: commit
env:
BRANCH_NAME: ${{ steps.branch_name.outputs.branch_name }}
run: |
git config --local user.email "106330231+bitwarden-devops-bot@users.noreply.github.com"
git config --local user.name "bitwarden-devops-bot"
if [ -n "$(git status --porcelain)" ]; then
git add .
git commit -m "Move EDD database scripts" -a
git push -u origin "${BRANCH_NAME}"
echo "pr_needed=true" >> "$GITHUB_OUTPUT"
else
echo "No changes to commit!";
echo "pr_needed=false" >> "$GITHUB_OUTPUT"
echo "### :mega: No changes to commit! PR was ommited." >> "$GITHUB_STEP_SUMMARY"
fi
- name: Create PR for ${{ steps.branch_name.outputs.branch_name }}
if: ${{ steps.commit.outputs.pr_needed == 'true' }}
id: create-pr
env:
BRANCH: ${{ steps.branch_name.outputs.branch_name }}
GH_TOKEN: ${{ github.token }}
MOVED_FILES: ${{ steps.move-files.outputs.moved_files }}
TITLE: "Move EDD database scripts"
run: |
PR_URL=$(gh pr create --title "$TITLE" \
--base "main" \
--head "$BRANCH" \
--label "automated pr" \
--body "
Automated movement of EDD database scripts.
Files moved:
$(echo -e "$MOVED_FILES")
")
echo "pr_url=${PR_URL}" >> "$GITHUB_OUTPUT"
- name: Notify Slack about creation of PR
if: ${{ steps.commit.outputs.pr_needed == 'true' }}
uses: act10ns/slack@44541246747a30eb3102d87f7a4cc5471b0ffb7d # v2.1.0
env:
SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }}
with:
message: "Created PR for moving EDD database scripts: ${{ steps.create-pr.outputs.pr_url }}"
status: ${{ job.status }}
================================================
FILE: .github/workflows/automatic-issue-responses.yml
================================================
name: Automatic responses
on:
issues:
types:
- labeled
jobs:
close-issue:
name: Close issue with automatic response
runs-on: ubuntu-22.04
permissions:
issues: write
steps:
# Feature request
- if: github.event.label.name == 'feature-request'
name: Feature request
uses: peter-evans/close-issue@276d7966e389d888f011539a86c8920025ea0626 # v3.0.1
with:
comment: |
We use GitHub issues as a place to track bugs and other development related issues. The [Bitwarden Community Forums](https://community.bitwarden.com/) has a [Feature Requests](https://community.bitwarden.com/c/feature-requests) section for submitting, voting for, and discussing requests like this one.
Please [sign up on our forums](https://community.bitwarden.com/signup) and search to see if this request already exists. If so, you can vote for it and contribute to any discussions about it. If not, you can re-create the request there so that it can be properly tracked.
This issue will now be closed. Thanks!
# Intended behavior
- if: github.event.label.name == 'intended-behavior'
name: Intended behavior
uses: peter-evans/close-issue@276d7966e389d888f011539a86c8920025ea0626 # v3.0.1
with:
comment: |
Your issue appears to be describing the intended behavior of the software. If you want this to be changed, it would be a feature request.
We use GitHub issues as a place to track bugs and other development related issues. The [Bitwarden Community Forums](https://community.bitwarden.com/) has a [Feature Requests](https://community.bitwarden.com/c/feature-requests) section for submitting, voting for, and discussing requests like this one.
Please [sign up on our forums](https://community.bitwarden.com/signup) and search to see if this request already exists. If so, you can vote for it and contribute to any discussions about it. If not, you can re-create the request there so that it can be properly tracked.
This issue will now be closed. Thanks!
# Customer support request
- if: github.event.label.name == 'customer-support'
name: Customer Support request
uses: peter-evans/close-issue@276d7966e389d888f011539a86c8920025ea0626 # v3.0.1
with:
comment: |
We use GitHub issues as a place to track bugs and other development related issues. Your issue appears to be a support request, or would otherwise be better handled by our dedicated Customer Success team.
Please contact us using our [Contact page](https://bitwarden.com/contact). You can include a link to this issue in the message content.
Alternatively, you can also search for an answer in our [help documentation](https://bitwarden.com/help/) or get help from other Bitwarden users on our [community forums](https://community.bitwarden.com/c/support/). The issue here will be closed.
# Resolved
- if: github.event.label.name == 'resolved'
name: Resolved
uses: peter-evans/close-issue@276d7966e389d888f011539a86c8920025ea0626 # v3.0.1
with:
comment: |
We’ve closed this issue, as it appears the original problem has been resolved. If this happens again or continues to be an problem, please respond to this issue with any additional detail to assist with reproduction and root cause analysis.
# Stale
- if: github.event.label.name == 'stale'
name: Stale
uses: peter-evans/close-issue@276d7966e389d888f011539a86c8920025ea0626 # v3.0.1
with:
comment: |
As we haven’t heard from you about this problem in some time, this issue will now be closed.
If this happens again or continues to be an problem, please respond to this issue with any additional detail to assist with reproduction and root cause analysis.
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
workflow_dispatch:
push:
branches:
- "main"
- "rc"
- "hotfix-rc"
pull_request:
types: [opened, synchronize]
workflow_call:
inputs: {}
permissions:
contents: read
env:
_AZ_REGISTRY: "bitwardenprod.azurecr.io"
_GITHUB_PR_REPO_NAME: ${{ github.event.pull_request.head.repo.full_name }}
jobs:
lint:
name: Lint
runs-on: ubuntu-22.04
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Verify format
run: dotnet format --verify-no-changes
build-artifacts:
name: Build Docker images
runs-on: ubuntu-22.04
needs: lint
outputs:
has_secrets: ${{ steps.check-secrets.outputs.has_secrets }}
permissions:
security-events: write
id-token: write
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
include:
- project_name: Admin
base_path: ./src
dotnet: true
node: true
- project_name: Api
base_path: ./src
dotnet: true
- project_name: Attachments
base_path: ./util
- project_name: Billing
base_path: ./src
dotnet: true
- project_name: Events
base_path: ./src
dotnet: true
- project_name: EventsProcessor
base_path: ./src
dotnet: true
- project_name: Icons
base_path: ./src
dotnet: true
- project_name: Identity
base_path: ./src
dotnet: true
- project_name: MsSql
base_path: ./util
- project_name: MsSqlMigratorUtility
base_path: ./util
dotnet: true
- project_name: Nginx
base_path: ./util
- project_name: Notifications
base_path: ./src
dotnet: true
- project_name: Scim
base_path: ./bitwarden_license/src
dotnet: true
- project_name: SeederApi
base_path: ./util
platforms: linux/amd64,linux/arm64
dotnet: true
- project_name: Setup
base_path: ./util
dotnet: true
- project_name: Sso
base_path: ./bitwarden_license/src
dotnet: true
steps:
- name: Check secrets
id: check-secrets
run: |
has_secrets=${{ secrets.AZURE_CLIENT_ID != '' }}
echo "has_secrets=$has_secrets" >> "$GITHUB_OUTPUT"
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: Check branch to publish
env:
PUBLISH_BRANCHES: "main,rc,hotfix-rc"
id: publish-branch-check
run: |
IFS="," read -a publish_branches <<< "$PUBLISH_BRANCHES"
if [[ " ${publish_branches[*]} " =~ " ${GITHUB_REF:11} " ]]; then
echo "is_publish_branch=true" >> "$GITHUB_ENV"
else
echo "is_publish_branch=false" >> "$GITHUB_ENV"
fi
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Set up Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
cache: "npm"
cache-dependency-path: "**/package-lock.json"
node-version: "24"
- name: Print environment
run: |
whoami
dotnet --info
node --version
npm --version
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
- name: Build node
if: ${{ matrix.node }}
working-directory: ${{ matrix.base_path }}/${{ matrix.project_name }}
run: |
npm ci
npm run build
- name: Publish project
working-directory: ${{ matrix.base_path }}/${{ matrix.project_name }}
if: ${{ matrix.dotnet }}
run: |
echo "Publish"
dotnet publish -c "Release" -o obj/build-output/publish
cd obj/build-output/publish
zip -r ${{ matrix.project_name }}.zip .
mv ${{ matrix.project_name }}.zip ../../../
pwd
ls -atlh ../../../
- name: Upload project artifact
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: ${{ matrix.dotnet }}
with:
name: ${{ matrix.project_name }}.zip
path: ${{ matrix.base_path }}/${{ matrix.project_name }}/${{ matrix.project_name }}.zip
if-no-files-found: error
########## Set up Docker ##########
- name: Set up QEMU emulators
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
########## ACRs ##########
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Log in to ACR - production subscription
run: az acr login -n bitwardenprod
########## Generate image tag and build Docker image ##########
- name: Generate Docker image tag
id: tag
run: |
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" || "${GITHUB_EVENT_NAME}" == "pull_request_target" ]]; then
IMAGE_TAG=$(echo "${GITHUB_HEAD_REF}" | sed "s/[^a-zA-Z0-9]/-/g") # Sanitize branch name to alphanumeric only
else
IMAGE_TAG=$(echo "${GITHUB_REF:11}" | sed "s#/#-#g")
fi
if [[ "${{ github.event.pull_request.head.repo.fork }}" == "true" ]]; then
SANITIZED_REPO_NAME=$(echo "$_GITHUB_PR_REPO_NAME" | sed "s/[^a-zA-Z0-9]/-/g") # Sanitize repo name to alphanumeric only
IMAGE_TAG=$SANITIZED_REPO_NAME-$IMAGE_TAG # Add repo name to the tag
IMAGE_TAG=${IMAGE_TAG:0:128} # Limit to 128 characters, as that's the max length for Docker image tags
fi
if [[ "$IMAGE_TAG" == "main" ]]; then
IMAGE_TAG=dev
fi
echo "image_tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT"
echo "### :mega: Docker Image Tag: $IMAGE_TAG" >> "$GITHUB_STEP_SUMMARY"
- name: Set up project name
id: setup
run: |
PROJECT_NAME=$(echo "${{ matrix.project_name }}" | awk '{print tolower($0)}')
echo "Matrix name: ${{ matrix.project_name }}"
echo "PROJECT_NAME: $PROJECT_NAME"
echo "project_name=$PROJECT_NAME" >> "$GITHUB_OUTPUT"
echo "platforms: ${{ matrix.platforms }}" >> "$GITHUB_STEP_SUMMARY"
- name: Generate image tags(s)
id: image-tags
env:
IMAGE_TAG: ${{ steps.tag.outputs.image_tag }}
PROJECT_NAME: ${{ steps.setup.outputs.project_name }}
SHA: ${{ github.sha }}
run: |
TAGS="${_AZ_REGISTRY}/${PROJECT_NAME}:${IMAGE_TAG}"
echo "primary_tag=$TAGS" >> "$GITHUB_OUTPUT"
if [[ "${IMAGE_TAG}" == "dev" ]]; then
SHORT_SHA=$(git rev-parse --short "${SHA}")
TAGS=$TAGS",${_AZ_REGISTRY}/${PROJECT_NAME}:dev-${SHORT_SHA}"
fi
echo "tags=$TAGS" >> "$GITHUB_OUTPUT"
- name: Set platforms
id: platforms
run: |
PLATFORMS="${{ matrix.platforms }}"
if [ -z "$PLATFORMS" ]; then
PLATFORMS="linux/amd64,linux/arm/v7,linux/arm64"
fi
echo "platforms=$PLATFORMS" >> "$GITHUB_OUTPUT"
- name: Build Docker image
id: build-artifacts
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
with:
context: .
file: ${{ matrix.base_path }}/${{ matrix.project_name }}/Dockerfile
platforms: ${{ steps.platforms.outputs.platforms }}
push: true
tags: ${{ steps.image-tags.outputs.tags }}
- name: Install Cosign
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
- name: Sign image with Cosign
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
env:
DIGEST: ${{ steps.build-artifacts.outputs.digest }}
TAGS: ${{ steps.image-tags.outputs.tags }}
run: |
IFS=',' read -r -a tags_array <<< "${TAGS}"
images=()
for tag in "${tags_array[@]}"; do
images+=("${tag}@${DIGEST}")
done
cosign sign --yes ${images[@]}
echo "images=${images[*]}" >> "$GITHUB_OUTPUT"
- name: Scan Docker image
id: container-scan
uses: anchore/scan-action@7037fa011853d5a11690026fb85feee79f4c946c # v7.3.2
with:
image: ${{ steps.image-tags.outputs.primary_tag }}
fail-build: false
output-format: sarif
- name: Upload Grype results to GitHub
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
with:
sarif_file: ${{ steps.container-scan.outputs.sarif }}
sha: ${{ contains(github.event_name, 'pull_request') && github.event.pull_request.head.sha || github.sha }}
ref: ${{ contains(github.event_name, 'pull_request') && format('refs/pull/{0}/head', github.event.pull_request.number) || github.ref }}
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
upload:
name: Upload
runs-on: ubuntu-22.04
needs: build-artifacts
permissions:
id-token: write
actions: read
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Log in to ACR - production subscription
run: az acr login -n "$_AZ_REGISTRY" --only-show-errors
- name: Make Docker stubs
if: |
github.event_name != 'pull_request'
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc')
run: |
# Set proper setup image based on branch
case "$GITHUB_REF" in
"refs/heads/main")
SETUP_IMAGE="$_AZ_REGISTRY/setup:dev"
;;
"refs/heads/rc")
SETUP_IMAGE="$_AZ_REGISTRY/setup:rc"
;;
"refs/heads/hotfix-rc")
SETUP_IMAGE="$_AZ_REGISTRY/setup:hotfix-rc"
;;
esac
STUB_OUTPUT=$(pwd)/docker-stub
# Run setup
docker run -i --rm --name setup -v "$STUB_OUTPUT/US:/bitwarden" "$SETUP_IMAGE" \
/app/Setup -stub 1 -install 1 -domain bitwarden.example.com -os lin -cloud-region US
docker run -i --rm --name setup -v "$STUB_OUTPUT/EU:/bitwarden" "$SETUP_IMAGE" \
/app/Setup -stub 1 -install 1 -domain bitwarden.example.com -os lin -cloud-region EU
sudo chown -R "$(whoami):$(whoami)" "$STUB_OUTPUT"
# Remove extra directories and files
rm -rf "$STUB_OUTPUT/US/letsencrypt"
rm -rf "$STUB_OUTPUT/EU/letsencrypt"
rm "$STUB_OUTPUT/US/env/uid.env" "$STUB_OUTPUT/US/config.yml"
rm "$STUB_OUTPUT/EU/env/uid.env" "$STUB_OUTPUT/EU/config.yml"
# Create uid environment files
touch "$STUB_OUTPUT/US/env/uid.env"
touch "$STUB_OUTPUT/EU/env/uid.env"
# Zip up the Docker stub files
cd docker-stub/US; zip -r ../../docker-stub-US.zip ./*; cd ../..
cd docker-stub/EU; zip -r ../../docker-stub-EU.zip ./*; cd ../..
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Upload Docker stub US artifact
if: |
github.event_name != 'pull_request'
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc')
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: docker-stub-US.zip
path: docker-stub-US.zip
if-no-files-found: error
- name: Upload Docker stub EU artifact
if: |
github.event_name != 'pull_request'
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc')
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: docker-stub-EU.zip
path: docker-stub-EU.zip
if-no-files-found: error
- name: Build Swagger files
run: |
cd ./dev
pwsh ./generate_openapi_files.ps1
- name: Upload Public API Swagger artifact
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: swagger.json
path: api.public.json
if-no-files-found: error
- name: Upload Internal API Swagger artifact
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: internal.json
path: api.json
if-no-files-found: error
- name: Upload Identity Swagger artifact
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: identity.json
path: identity.json
if-no-files-found: error
build-mssqlmigratorutility:
name: Build MSSQL migrator utility
runs-on: ubuntu-22.04
needs: lint
defaults:
run:
shell: bash
working-directory: "util/MsSqlMigratorUtility"
strategy:
fail-fast: false
matrix:
target:
- osx-x64
- linux-x64
- win-x64
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Print environment
run: |
whoami
dotnet --info
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
- name: Publish project
run: |
dotnet publish -c "Release" -o obj/build-output/publish -r ${{ matrix.target }} -p:PublishSingleFile=true \
-p:IncludeNativeLibrariesForSelfExtract=true --self-contained true
- name: Upload project artifact for Windows
if: ${{ contains(matrix.target, 'win') == true }}
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: MsSqlMigratorUtility-${{ matrix.target }}
path: util/MsSqlMigratorUtility/obj/build-output/publish/MsSqlMigratorUtility.exe
if-no-files-found: error
- name: Upload project artifact
if: ${{ contains(matrix.target, 'win') == false }}
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: MsSqlMigratorUtility-${{ matrix.target }}
path: util/MsSqlMigratorUtility/obj/build-output/publish/MsSqlMigratorUtility
if-no-files-found: error
bitwarden-lite-build:
name: Trigger Bitwarden lite build
if: |
github.event_name != 'pull_request'
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc')
runs-on: ubuntu-22.04
needs: build-artifacts
permissions:
id-token: write
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Get Azure Key Vault secrets
id: get-kv-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: gh-org-bitwarden
secrets: "BW-GHAPP-ID,BW-GHAPP-KEY"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Generate GH App token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
id: app-token
with:
app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }}
private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }}
owner: ${{ github.repository_owner }}
repositories: self-host
- name: Trigger Bitwarden lite build
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: 'bitwarden',
repo: 'self-host',
workflow_id: 'build-bitwarden-lite.yml',
ref: 'main',
inputs: {
server_branch: process.env.GITHUB_REF
}
});
trigger-k8s-deploy:
name: Trigger K8s deploy
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
runs-on: ubuntu-22.04
needs: build-artifacts
permissions:
id-token: write
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Get Azure Key Vault secrets
id: get-kv-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: gh-org-bitwarden
secrets: "BW-GHAPP-ID,BW-GHAPP-KEY"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Generate GH App token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
id: app-token
with:
app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }}
private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }}
owner: ${{ github.repository_owner }}
repositories: devops
- name: Trigger K8s deploy
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: 'bitwarden',
repo: 'devops',
workflow_id: 'deploy-k8s.yml',
ref: 'main',
inputs: {
environment: 'US-DEV Cloud',
tag: 'main'
}
})
setup-ephemeral-environment:
name: Setup Ephemeral Environment
needs: build-artifacts
if: |
needs.build-artifacts.outputs.has_secrets == 'true'
&& github.event_name == 'pull_request'
&& contains(github.event.pull_request.labels.*.name, 'ephemeral-environment')
uses: bitwarden/gh-actions/.github/workflows/_ephemeral_environment_manager.yml@main
with:
project: server
pull_request_number: ${{ github.event.number || 0 }}
secrets: inherit
permissions:
contents: read
id-token: write
check-failures:
name: Check for failures
if: always()
runs-on: ubuntu-22.04
needs:
- lint
- build-artifacts
- upload
- build-mssqlmigratorutility
- bitwarden-lite-build
- trigger-k8s-deploy
permissions:
id-token: write
steps:
- name: Check if any job failed
if: |
github.event_name != 'pull_request'
&& (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc')
&& contains(needs.*.result, 'failure')
run: exit 1
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
if: failure()
with:
keyvault: "bitwarden-ci"
secrets: "devops-alerts-slack-webhook-url"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Notify Slack on failure
uses: act10ns/slack@44541246747a30eb3102d87f7a4cc5471b0ffb7d # v2.1.0
if: failure()
env:
SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }}
with:
status: ${{ job.status }}
================================================
FILE: .github/workflows/build_target.yml
================================================
name: Build on PR Target
on:
pull_request_target:
types: [opened, synchronize, reopened]
branches:
- "main"
defaults:
run:
shell: bash
jobs:
check-run:
name: Check PR run
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
permissions:
contents: read
run-workflow:
name: Run Build on PR Target
needs: check-run
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
uses: ./.github/workflows/build.yml
secrets: inherit
permissions:
contents: read
actions: read
id-token: write
security-events: write
================================================
FILE: .github/workflows/cleanup-rc-branch.yml
================================================
name: Cleanup RC Branch
on:
push:
tags:
- v**
jobs:
delete-rc:
name: Delete RC Branch
runs-on: ubuntu-22.04
permissions:
contents: write
id-token: write
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Retrieve bot secrets
id: retrieve-bot-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: bitwarden-ci
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Checkout main
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: main
token: ${{ steps.retrieve-bot-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
persist-credentials: false
fetch-depth: 0
- name: Check if a RC branch exists
id: branch-check
run: |
hotfix_rc_branch_check=$(git ls-remote --heads origin hotfix-rc | wc -l)
rc_branch_check=$(git ls-remote --heads origin rc | wc -l)
if [[ "${hotfix_rc_branch_check}" -gt 0 ]]; then
echo "hotfix-rc branch exists." | tee -a "$GITHUB_STEP_SUMMARY"
echo "name=hotfix-rc" >> "$GITHUB_OUTPUT"
elif [[ "${rc_branch_check}" -gt 0 ]]; then
echo "rc branch exists." | tee -a "$GITHUB_STEP_SUMMARY"
echo "name=rc" >> "$GITHUB_OUTPUT"
fi
- name: Delete RC branch
env:
BRANCH_NAME: ${{ steps.branch-check.outputs.name }}
run: |
if ! [[ -z "$BRANCH_NAME" ]]; then
git push --quiet origin --delete "$BRANCH_NAME"
echo "Deleted $BRANCH_NAME branch." | tee -a "$GITHUB_STEP_SUMMARY"
fi
================================================
FILE: .github/workflows/code-references.yml
================================================
name: Collect code references
on:
push:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
check-secret-access:
name: Check for secret access
runs-on: ubuntu-22.04
outputs:
available: ${{ steps.check-secret-access.outputs.available }}
permissions: {}
steps:
- name: Check
id: check-secret-access
run: |
if [ "${{ secrets.AZURE_CLIENT_ID }}" != '' ]; then
echo "available=true" >> "$GITHUB_OUTPUT";
else
echo "available=false" >> "$GITHUB_OUTPUT";
fi
refs:
name: Code reference collection
runs-on: ubuntu-22.04
needs: check-secret-access
if: ${{ needs.check-secret-access.outputs.available == 'true' }}
permissions:
contents: read
pull-requests: write
id-token: write
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Get Azure Key Vault secrets
id: get-kv-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: gh-server
secrets: "LD-ACCESS-TOKEN"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Collect
id: collect
uses: launchdarkly/find-code-references@89a7d362d1d4b3725fe0fe0ccd0dc69e3bdcba58 # v2.14.0
with:
accessToken: ${{ steps.get-kv-secrets.outputs.LD-ACCESS-TOKEN }}
projKey: default
allowTags: true
- name: Add label
if: steps.collect.outputs.any-changed == 'true'
run: gh pr edit "$PR_NUMBER" --add-label feature-flag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
- name: Remove label
if: steps.collect.outputs.any-changed == 'false'
run: gh pr edit "$PR_NUMBER" --remove-label feature-flag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
================================================
FILE: .github/workflows/enforce-labels.yml
================================================
name: Enforce PR labels
on:
workflow_call:
pull_request:
types: [labeled, unlabeled, opened, reopened, synchronize]
permissions: {}
jobs:
enforce-label:
if: ${{ contains(github.event.*.labels.*.name, 'hold') || contains(github.event.*.labels.*.name, 'needs-qa') || contains(github.event.*.labels.*.name, 'DB-migrations-changed') || contains(github.event.*.labels.*.name, 'ephemeral-environment') }}
name: Enforce label
runs-on: ubuntu-22.04
steps:
- name: Check for label
run: |
echo "PRs with the hold, needs-qa or ephemeral-environment labels cannot be merged"
echo "### :x: PRs with the hold, needs-qa or ephemeral-environment labels cannot be merged" >> "$GITHUB_STEP_SUMMARY"
exit 1
================================================
FILE: .github/workflows/ephemeral-environment.yml
================================================
name: Ephemeral Environment
on:
pull_request:
types: [labeled]
permissions:
contents: read
id-token: write
jobs:
setup-ephemeral-environment:
name: Setup Ephemeral Environment
if: github.event.label.name == 'ephemeral-environment'
uses: bitwarden/gh-actions/.github/workflows/_ephemeral_environment_manager.yml@main
with:
project: server
pull_request_number: ${{ github.event.number }}
sync_environment: false
secrets: inherit
================================================
FILE: .github/workflows/load-test.yml
================================================
name: Load test
on:
schedule:
- cron: "0 0 * * 1" # Run every Monday at 00:00
workflow_dispatch:
inputs:
test-id:
type: string
description: "Identifier label for Datadog metrics"
default: "server-load-test"
k6-test-path:
type: string
description: "Path to load test files"
default: "perf/load/*.js"
k6-flags:
type: string
description: "Additional k6 flags"
api-env-url:
type: string
description: "URL of the API environment"
default: "https://api.qa.bitwarden.pw"
identity-env-url:
type: string
description: "URL of the Identity environment"
default: "https://identity.qa.bitwarden.pw"
permissions:
contents: read
id-token: write
env:
# Secret configuration
AZURE_KEY_VAULT_NAME: gh-server
AZURE_KEY_VAULT_SECRETS: DD-API-KEY, K6-CLIENT-ID, K6-AUTH-USER-EMAIL, K6-AUTH-USER-PASSWORD-HASH
# Specify defaults for scheduled runs
TEST_ID: ${{ inputs.test-id || 'server-load-test' }}
K6_TEST_PATH: ${{ inputs.k6-test-path || 'perf/load/*.js' }}
API_ENV_URL: ${{ inputs.api-env-url || 'https://api.qa.bitwarden.pw' }}
IDENTITY_ENV_URL: ${{ inputs.identity-env-url || 'https://identity.qa.bitwarden.pw' }}
jobs:
run-tests:
name: Run load tests
runs-on: ubuntu-24.04
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Get Azure Key Vault secrets
id: get-kv-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: ${{ env.AZURE_KEY_VAULT_NAME }}
secrets: ${{ env.AZURE_KEY_VAULT_SECRETS }}
- name: Log out of Azure
uses: bitwarden/gh-actions/azure-logout@main
# Datadog agent for collecting OTEL metrics from k6
- name: Start Datadog agent
env:
DD_API_KEY: ${{ steps.get-kv-secrets.outputs.DD-API-KEY }}
run: |
docker run --detach \
--name datadog-agent \
-p 4317:4317 \
-p 5555:5555 \
-e DD_SITE=us3.datadoghq.com \
-e DD_API_KEY="${DD_API_KEY}" \
-e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=1 \
-e DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT=0.0.0.0:4317 \
-e DD_HEALTH_PORT=5555 \
-e HOST_PROC=/proc \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
--volume /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
--health-cmd "curl -f http://localhost:5555/health || exit 1" \
--health-interval 10s \
--health-timeout 5s \
--health-retries 10 \
--health-start-period 30s \
--pid host \
datadog/agent:7-full@sha256:7ea933dec3b8baa8c19683b1c3f6f801dbf3291f748d9ed59234accdaac4e479
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set up k6
uses: grafana/setup-k6-action@ffe7d7290dfa715e48c2ccc924d068444c94bde2 # v1.1.0
- name: Run k6 tests
uses: grafana/run-k6-action@a15e2072ede004e8d46141e33d7f7dad8ad08d9d # v1.3.1
continue-on-error: false
env:
K6_OTEL_METRIC_PREFIX: k6_
K6_OTEL_GRPC_EXPORTER_INSECURE: true
# Load test specific environment variables
API_URL: ${{ env.API_ENV_URL }}
IDENTITY_URL: ${{ env.IDENTITY_ENV_URL }}
CLIENT_ID: ${{ steps.get-kv-secrets.outputs.K6-CLIENT-ID }}
AUTH_USER_EMAIL: ${{ steps.get-kv-secrets.outputs.K6-AUTH-USER-EMAIL }}
AUTH_USER_PASSWORD_HASH: ${{ steps.get-kv-secrets.outputs.K6-AUTH-USER-PASSWORD-HASH }}
with:
flags: >-
--tag test-id=${{ env.TEST_ID }}
-o experimental-opentelemetry
${{ inputs.k6-flags }}
path: ${{ env.K6_TEST_PATH }}
================================================
FILE: .github/workflows/protect-files.yml
================================================
# Runs if there are changes to the paths: list.
# Starts a matrix job to check for modified files, then sets output based on the results.
# The input decides if the label job is ran, adding a label to the PR.
name: Protect files
on:
pull_request:
types:
- opened
- synchronize
- unlabeled
paths:
- "util/Migrator/DbScripts/**.sql"
jobs:
changed-files:
name: Check for file changes
runs-on: ubuntu-22.04
permissions:
contents: read
pull-requests: write
outputs:
changes: ${{steps.check-changes.outputs.changes_detected}}
strategy:
fail-fast: true
matrix:
include:
- name: Database Scripts
path: util/Migrator/DbScripts
label: "DB-migrations-changed"
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 2
persist-credentials: false
- name: Check for file changes
id: check-changes
run: |
MODIFIED_FILES=$(git diff --name-only --diff-filter=M HEAD~1)
for file in $MODIFIED_FILES
do
if [[ $file == *"${{ matrix.path }}"* ]]; then
echo "changes_detected=true" >> "$GITHUB_OUTPUT"
break
else echo "changes_detected=false" >> "$GITHUB_OUTPUT"
fi
done
- name: Add label to pull request
if: contains(steps.check-changes.outputs.changes_detected, 'true')
uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4
with:
add-labels: ${{ matrix.label }}
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish
run-name: Publish ${{ inputs.dry_run && '(Dry Run)' || '' }}
on:
workflow_dispatch:
inputs:
version:
description: 'Version to publish (default: latest release)'
required: true
type: string
default: latest
branch:
description: "Branch to publish from"
required: true
type: choice
options:
- rc
- hotfix-rc
default: rc
dry_run:
description: "Dry Run"
type: boolean
default: false
env:
_AZ_REGISTRY: "bitwardenprod.azurecr.io"
jobs:
setup:
name: Setup
runs-on: ubuntu-22.04
permissions:
deployments: write
outputs:
deployment-id: ${{ steps.deployment.outputs.deployment_id }}
release-version: ${{ steps.version-output.outputs.version }}
steps:
- name: Version output
id: version-output
env:
INPUT_VERSION: ${{ inputs.version }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [[ "${INPUT_VERSION}" == "latest" || "${INPUT_VERSION}" == "" ]]; then
VERSION=$(gh api repos/bitwarden/server/releases/latest --jq '.tag_name | ltrimstr("v")')
echo "Latest Released Version: $VERSION"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
else
VERSION="${INPUT_VERSION#v}"
echo "Release Version: ${VERSION}"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
fi
- name: Create GitHub deployment
if: ${{ !inputs.dry_run }}
uses: chrnorm/deployment-action@55729fcebec3d284f60f5bcabbd8376437d696b1 # v2.0.7
id: deployment
with:
token: '${{ secrets.GITHUB_TOKEN }}'
initial-status: 'in_progress'
environment: 'production'
description: 'Deployment ${{ steps.version-output.outputs.release-version }} from branch ${{ github.ref_name }}'
task: release
publish-docker:
name: Publish Docker images
runs-on: ubuntu-22.04
needs: setup
permissions:
contents: read
id-token: write
env:
_RELEASE_VERSION: ${{ needs.setup.outputs.release-version }}
_BRANCH_NAME: ${{ inputs.branch }}
strategy:
fail-fast: false
matrix:
include:
- project_name: Admin
- project_name: Api
- project_name: Attachments
- project_name: Billing
- project_name: Events
- project_name: EventsProcessor
- project_name: Icons
- project_name: Identity
- project_name: MsSql
- project_name: MsSqlMigratorUtility
- project_name: Nginx
- project_name: Notifications
- project_name: Scim
- project_name: Setup
- project_name: Sso
steps:
- name: Print environment
run: |
whoami
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
echo "Dry Run: ${{ inputs.dry_run }}"
- name: Set up project name
id: setup
run: |
PROJECT_NAME=$(echo "${{ matrix.project_name }}" | awk '{print tolower($0)}')
echo "Matrix name: ${{ matrix.project_name }}"
echo "PROJECT_NAME: $PROJECT_NAME"
echo "project_name=$PROJECT_NAME" >> "$GITHUB_OUTPUT"
########## ACR PROD ##########
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Log in to Azure ACR
run: az acr login -n "$_AZ_REGISTRY" --only-show-errors
- name: Push version and latest image
env:
PROJECT_NAME: ${{ steps.setup.outputs.project_name }}
run: |
if [[ "${{ inputs.dry_run }}" == "true" ]]; then
skopeo copy --all \
"docker://$_AZ_REGISTRY/$PROJECT_NAME:latest" \
"docker://$_AZ_REGISTRY/$PROJECT_NAME:dryrun"
else
skopeo copy --all \
"docker://$_AZ_REGISTRY/$PROJECT_NAME:$_BRANCH_NAME" \
"docker://$_AZ_REGISTRY/$PROJECT_NAME:$_RELEASE_VERSION"
skopeo copy --all \
"docker://$_AZ_REGISTRY/$PROJECT_NAME:$_BRANCH_NAME" \
"docker://$_AZ_REGISTRY/$PROJECT_NAME:latest"
fi
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
update-deployment:
name: Update Deployment Status
runs-on: ubuntu-22.04
needs:
- setup
- publish-docker
permissions:
deployments: write
if: ${{ always() && !inputs.dry_run }}
steps:
- name: Check if any job failed
if: contains(needs.*.result, 'failure')
run: exit 1
- name: Update deployment status to Success
if: success()
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
with:
token: '${{ secrets.GITHUB_TOKEN }}'
state: 'success'
deployment-id: ${{ needs.setup.outputs.deployment-id }}
- name: Update deployment status to Failure
if: failure()
uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3
with:
token: '${{ secrets.GITHUB_TOKEN }}'
state: 'failure'
deployment-id: ${{ needs.setup.outputs.deployment-id }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
run-name: Release ${{ inputs.release_type }}
on:
workflow_dispatch:
inputs:
release_type:
description: "Release Options"
required: true
default: "Initial Release"
type: choice
options:
- Initial Release
- Redeploy
- Dry Run
env:
_AZ_REGISTRY: "bitwardenprod.azurecr.io"
permissions:
contents: read
jobs:
setup:
name: Setup
runs-on: ubuntu-22.04
outputs:
release_version: ${{ steps.version.outputs.version }}
branch-name: ${{ steps.branch.outputs.branch-name }}
steps:
- name: Branch check
if: ${{ inputs.release_type != 'Dry Run' }}
run: |
if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc" ]]; then
echo "==================================="
echo "[!] Can only release from the 'rc' or 'hotfix-rc' branches"
echo "==================================="
exit 1
fi
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
persist-credentials: false
- name: Check release version
id: version
uses: bitwarden/gh-actions/release-version-check@main
with:
release-type: ${{ inputs.release_type }}
project-type: dotnet
file: Directory.Build.props
- name: Get branch name
id: branch
run: |
BRANCH_NAME=$(basename "${GITHUB_REF}")
echo "branch-name=$BRANCH_NAME" >> "$GITHUB_OUTPUT"
release:
name: Create GitHub release
runs-on: ubuntu-22.04
needs: setup
permissions:
contents: write
steps:
- name: Download latest release Docker stubs
if: ${{ inputs.release_type != 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@main
with:
workflow: build.yml
workflow_conclusion: success
branch: ${{ needs.setup.outputs.branch-name }}
artifacts: "docker-stub-US.zip,
docker-stub-EU.zip,
swagger.json"
- name: Dry Run - Download latest release Docker stubs
if: ${{ inputs.release_type == 'Dry Run' }}
uses: bitwarden/gh-actions/download-artifacts@main
with:
workflow: build.yml
workflow_conclusion: success
branch: main
artifacts: "docker-stub-US.zip,
docker-stub-EU.zip,
swagger.json"
- name: Create release
if: ${{ inputs.release_type != 'Dry Run' }}
uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1.20.0
with:
artifacts: "docker-stub-US.zip,
docker-stub-EU.zip,
swagger.json"
commit: ${{ github.sha }}
tag: "v${{ needs.setup.outputs.release_version }}"
name: "Version ${{ needs.setup.outputs.release_version }}"
body: "<insert release notes here>"
token: ${{ secrets.GITHUB_TOKEN }}
draft: true
================================================
FILE: .github/workflows/repository-management.yml
================================================
name: Repository management
on:
workflow_dispatch:
inputs:
task:
default: "Version Bump"
description: "Task to execute"
options:
- "Version Bump"
- "Version Bump and Cut rc"
- "Version Bump and Cut hotfix-rc"
required: true
type: choice
target_ref:
default: "main"
description: "Branch/Tag to target for cut"
required: true
type: string
version_number_override:
description: "New version override (leave blank for automatic calculation, example: '2024.1.0')"
required: false
type: string
permissions: {}
jobs:
setup:
name: Setup
runs-on: ubuntu-24.04
outputs:
branch: ${{ steps.set-branch.outputs.branch }}
permissions: {}
steps:
- name: Set branch
id: set-branch
env:
TASK: ${{ inputs.task }}
run: |
if [[ "$TASK" == "Version Bump" ]]; then
BRANCH="none"
elif [[ "$TASK" == "Version Bump and Cut rc" ]]; then
BRANCH="rc"
elif [[ "$TASK" == "Version Bump and Cut hotfix-rc" ]]; then
BRANCH="hotfix-rc"
fi
echo "branch=$BRANCH" >> "$GITHUB_OUTPUT"
bump_version:
name: Bump Version
if: ${{ always() }}
runs-on: ubuntu-24.04
needs:
- setup
outputs:
version: ${{ steps.set-final-version-output.outputs.version }}
permissions:
id-token: write
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Get Azure Key Vault secrets
id: get-kv-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: gh-org-bitwarden
secrets: "BW-GHAPP-ID,BW-GHAPP-KEY"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Validate version input format
if: ${{ inputs.version_number_override != '' }}
uses: bitwarden/gh-actions/version-check@main
with:
version: ${{ inputs.version_number_override }}
- name: Generate GH App token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
id: app-token
with:
app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }}
private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }}
permission-contents: write
- name: Check out branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: main
token: ${{ steps.app-token.outputs.token }}
persist-credentials: true
- name: Configure Git
run: |
git config --local user.email "actions@github.com"
git config --local user.name "Github Actions"
- name: Install xmllint
run: |
sudo apt-get update
sudo apt-get install -y libxml2-utils
- name: Get current version
id: current-version
run: |
CURRENT_VERSION=$(xmllint -xpath "/Project/PropertyGroup/Version/text()" Directory.Build.props)
echo "version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT"
- name: Verify input version
if: ${{ inputs.version_number_override != '' }}
env:
CURRENT_VERSION: ${{ steps.current-version.outputs.version }}
NEW_VERSION: ${{ inputs.version_number_override }}
run: |
# Error if version has not changed.
if [[ "$NEW_VERSION" == "$CURRENT_VERSION" ]]; then
echo "Specified override version is the same as the current version." >> "$GITHUB_STEP_SUMMARY"
exit 1
fi
# Check if version is newer.
if printf '%s\n' "${CURRENT_VERSION}" "${NEW_VERSION}" | sort -C -V; then
echo "Version is newer than the current version."
else
echo "Version is older than the current version." >> "$GITHUB_STEP_SUMMARY"
exit 1
fi
- name: Calculate next release version
if: ${{ inputs.version_number_override == '' }}
id: calculate-next-version
uses: bitwarden/gh-actions/version-next@main
with:
version: ${{ steps.current-version.outputs.version }}
- name: Bump version props - Version Override
if: ${{ inputs.version_number_override != '' }}
id: bump-version-override
uses: bitwarden/gh-actions/version-bump@main
with:
file_path: "Directory.Build.props"
version: ${{ inputs.version_number_override }}
- name: Bump version props - Automatic Calculation
if: ${{ inputs.version_number_override == '' }}
id: bump-version-automatic
uses: bitwarden/gh-actions/version-bump@main
with:
file_path: "Directory.Build.props"
version: ${{ steps.calculate-next-version.outputs.version }}
- name: Set final version output
id: set-final-version-output
env:
VERSION: ${{ inputs.version_number_override }}
BUMP_VERSION_OVERRIDE_OUTCOME: ${{ steps.bump-version-override.outcome }}
BUMP_VERSION_AUTOMATIC_OUTCOME: ${{ steps.bump-version-automatic.outcome }}
CALCULATE_NEXT_VERSION: ${{ steps.calculate-next-version.outputs.version }}
run: |
if [[ "${BUMP_VERSION_OVERRIDE_OUTCOME}" = "success" ]]; then
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
elif [[ "${BUMP_VERSION_AUTOMATIC_OUTCOME}" = "success" ]]; then
echo "version=${CALCULATE_NEXT_VERSION}" >> "$GITHUB_OUTPUT"
fi
- name: Commit files
env:
FINAL_VERSION: ${{ steps.set-final-version-output.outputs.version }}
run: git commit -m "Bumped version to $FINAL_VERSION" -a
- name: Push changes
run: git push
cut_branch:
name: Cut branch
if: ${{ needs.setup.outputs.branch != 'none' }}
needs:
- setup
- bump_version
runs-on: ubuntu-24.04
permissions:
id-token: write
steps:
- name: Log in to Azure
uses: bitwarden/gh-actions/azure-login@main
with:
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Get Azure Key Vault secrets
id: get-kv-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@main
with:
keyvault: gh-org-bitwarden
secrets: "BW-GHAPP-ID,BW-GHAPP-KEY"
- name: Log out from Azure
uses: bitwarden/gh-actions/azure-logout@main
- name: Generate GH App token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
id: app-token
with:
app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }}
private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }}
permission-contents: write
- name: Check out target ref
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.target_ref }}
token: ${{ steps.app-token.outputs.token }}
persist-credentials: true
fetch-depth: 0
- name: Check if ${{ needs.setup.outputs.branch }} branch exists
env:
BRANCH_NAME: ${{ needs.setup.outputs.branch }}
run: |
if [[ $(git ls-remote --heads origin "$BRANCH_NAME") ]]; then
echo "$BRANCH_NAME already exists! Please delete $BRANCH_NAME before running again." >> "$GITHUB_STEP_SUMMARY"
exit 1
fi
- name: Cut branch
env:
BRANCH_NAME: ${{ needs.setup.outputs.branch }}
run: |
git switch --quiet --create "$BRANCH_NAME"
git push --quiet --set-upstream origin "$BRANCH_NAME"
move_edd_db_scripts:
name: Move EDD database scripts
needs: cut_branch
permissions: {}
uses: ./.github/workflows/_move_edd_db_scripts.yml
================================================
FILE: .github/workflows/respond.yml
================================================
name: Respond
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
permissions: {}
jobs:
respond:
name: Respond
uses: bitwarden/gh-actions/.github/workflows/_respond.yml@main
secrets:
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
permissions:
actions: read
contents: write
id-token: write
issues: write
pull-requests: write
================================================
FILE: .github/workflows/review-code.yml
================================================
name: Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions: {}
jobs:
review:
name: Review
uses: bitwarden/gh-actions/.github/workflows/_review-code.yml@main
secrets:
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
permissions:
actions: read
contents: read
id-token: write
pull-requests: write
================================================
FILE: .github/workflows/scan.yml
================================================
name: Scan
on:
workflow_dispatch:
push:
branches:
- "main"
- "rc"
- "hotfix-rc"
pull_request:
types: [opened, synchronize, reopened]
branches-ignore:
- main
pull_request_target:
types: [opened, synchronize, reopened]
branches:
- "main"
permissions: {}
jobs:
check-run:
name: Check PR run
uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main
permissions:
contents: read
sast:
name: Checkmarx
uses: bitwarden/gh-actions/.github/workflows/_checkmarx.yml@main
needs: check-run
secrets:
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
permissions:
contents: read
pull-requests: write
security-events: write
id-token: write
quality:
name: Sonar
uses: bitwarden/gh-actions/.github/workflows/_sonar.yml@main
needs: check-run
secrets:
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
permissions:
contents: read
pull-requests: write
id-token: write
with:
sonar-config: "dotnet"
================================================
FILE: .github/workflows/stale-bot.yml
================================================
name: Staleness
on:
workflow_dispatch:
schedule: # Run once a day at 5.23am (arbitrary but should avoid peak loads on the hour)
- cron: "23 5 * * *"
jobs:
stale:
name: Check for stale issues and PRs
runs-on: ubuntu-22.04
permissions:
actions: write
contents: read
issues: write
pull-requests: write
steps:
- name: Check
uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
with:
stale-issue-label: "needs-reply"
stale-pr-label: "needs-changes"
days-before-stale: -1 # Do not apply the stale labels automatically, this is a manual process
days-before-issue-close: 14 # Close issue if no further activity after X days
days-before-pr-close: 21 # Close PR if no further activity after X days
close-issue-message: |
We need more information before we can help you with your problem. As we haven’t heard from you recently, this issue will be closed.
If this happens again or continues to be an problem, please respond to this issue with the information we’ve requested and anything else relevant.
close-pr-message: |
We can’t merge your pull request until you make the changes we’ve requested. As we haven’t heard from you recently, this pull request will be closed.
If you’re still working on this, please respond here after you’ve made the changes we’ve requested and our team will re-open it for further review.
Please make sure to resolve any conflicts with the main branch before requesting another review.
================================================
FILE: .github/workflows/test-database.yml
================================================
name: Database testing
on:
workflow_dispatch:
push:
branches:
- "main"
- "rc"
- "hotfix-rc"
paths:
- ".github/workflows/test-database.yml" # This file
- "src/Sql/**" # SQL Server Database Changes
- "util/Migrator/**" # New SQL Server Migrations
- "util/MySqlMigrations/**" # Changes to MySQL
- "util/PostgresMigrations/**" # Changes to Postgres
- "util/SqliteMigrations/**" # Changes to Sqlite
- "src/Infrastructure.Dapper/**" # Changes to SQL Server Dapper Repository Layer
- "src/Infrastructure.EntityFramework/**" # Changes to Entity Framework Repository Layer
- "test/Infrastructure.IntegrationTest/**" # Any changes to the tests
- "src/**/Entities/**/*.cs" # Database entity definitions
pull_request:
paths:
- ".github/workflows/test-database.yml" # This file
- "src/Sql/**" # SQL Server Database Changes
- "util/Migrator/**" # New SQL Server Migrations
- "util/MySqlMigrations/**" # Changes to MySQL
- "util/PostgresMigrations/**" # Changes to Postgres
- "util/SqliteMigrations/**" # Changes to Sqlite
- "src/Infrastructure.Dapper/**" # Changes to SQL Server Dapper Repository Layer
- "src/Infrastructure.EntityFramework/**" # Changes to Entity Framework Repository Layer
- "test/Infrastructure.IntegrationTest/**" # Any changes to the tests
- "src/**/Entities/**/*.cs" # Database entity definitions
permissions:
contents: read
jobs:
test:
name: Run tests
runs-on: ubuntu-22.04
permissions:
contents: read
actions: read
checks: write
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Restore tools
run: dotnet tool restore
- name: Docker Compose databases
working-directory: "dev"
# We could think about not using profiles and pulling images directly to cover multiple versions
run: |
cp .env.example .env
docker compose --profile mssql --profile postgres --profile mysql up -d
shell: pwsh
- name: Add MariaDB for Bitwarden lite
# Use a different port than MySQL
run: |
docker run --detach --name mariadb --env MARIADB_ROOT_PASSWORD=mariadb-password -p 4306:3306 mariadb:10
# I've seen the SQL Server container not be ready for commands right after starting up and just needing a bit longer to be ready
- name: Sleep
run: sleep 15s
- name: Checking pending model changes (MySQL)
working-directory: "util/MySqlMigrations"
run: 'dotnet ef migrations has-pending-model-changes -- --GlobalSettings:MySql:ConnectionString="$CONN_STR"'
env:
CONN_STR: "server=localhost;uid=root;pwd=SET_A_PASSWORD_HERE_123;database=vault_dev;Allow User Variables=true"
- name: Checking pending model changes (Postgres)
working-directory: "util/PostgresMigrations"
run: 'dotnet ef migrations has-pending-model-changes -- --GlobalSettings:PostgreSql:ConnectionString="$CONN_STR"'
env:
CONN_STR: "Host=localhost;Username=postgres;Password=SET_A_PASSWORD_HERE_123;Database=vault_dev"
- name: Checking pending model changes (SQLite)
working-directory: "util/SqliteMigrations"
run: 'dotnet ef migrations has-pending-model-changes -- --GlobalSettings:Sqlite:ConnectionString="$CONN_STR"'
env:
CONN_STR: "Data Source=${{ runner.temp }}/test.db"
- name: Migrate SQL Server
run: 'dotnet run --project util/MsSqlMigratorUtility/ "$CONN_STR"'
env:
CONN_STR: "Server=localhost;Database=vault_dev;User Id=SA;Password=SET_A_PASSWORD_HERE_123;Encrypt=True;TrustServerCertificate=True;"
- name: Migrate MySQL
working-directory: "util/MySqlMigrations"
run: 'dotnet ef database update --connection "$CONN_STR" -- --GlobalSettings:MySql:ConnectionString="$CONN_STR"'
env:
CONN_STR: "server=localhost;uid=root;pwd=SET_A_PASSWORD_HERE_123;database=vault_dev;Allow User Variables=true"
- name: Migrate MariaDB
working-directory: "util/MySqlMigrations"
run: 'dotnet ef database update --connection "$CONN_STR" -- --GlobalSettings:MySql:ConnectionString="$CONN_STR"'
env:
CONN_STR: "server=localhost;port=4306;uid=root;pwd=mariadb-password;database=vault_dev;Allow User Variables=true"
- name: Migrate Postgres
working-directory: "util/PostgresMigrations"
run: 'dotnet ef database update --connection "$CONN_STR" -- --GlobalSettings:PostgreSql:ConnectionString="$CONN_STR"'
env:
CONN_STR: "Host=localhost;Username=postgres;Password=SET_A_PASSWORD_HERE_123;Database=vault_dev"
- name: Migrate SQLite
working-directory: "util/SqliteMigrations"
run: 'dotnet ef database update --connection "$CONN_STR" -- --GlobalSettings:Sqlite:ConnectionString="$CONN_STR"'
env:
CONN_STR: "Data Source=${{ runner.temp }}/test.db"
- name: Run tests
working-directory: "test/Infrastructure.IntegrationTest"
env:
# Default Postgres:
BW_TEST_DATABASES__0__TYPE: "Postgres"
BW_TEST_DATABASES__0__CONNECTIONSTRING: "Host=localhost;Username=postgres;Password=SET_A_PASSWORD_HERE_123;Database=vault_dev"
# Default MySql
BW_TEST_DATABASES__1__TYPE: "MySql"
BW_TEST_DATABASES__1__CONNECTIONSTRING: "server=localhost;uid=root;pwd=SET_A_PASSWORD_HERE_123;database=vault_dev"
# Default Dapper SqlServer
BW_TEST_DATABASES__2__TYPE: "SqlServer"
BW_TEST_DATABASES__2__CONNECTIONSTRING: "Server=localhost;Database=vault_dev;User Id=SA;Password=SET_A_PASSWORD_HERE_123;Encrypt=True;TrustServerCertificate=True;"
# Default Sqlite
BW_TEST_DATABASES__3__TYPE: "Sqlite"
BW_TEST_DATABASES__3__CONNECTIONSTRING: "Data Source=${{ runner.temp }}/test.db"
# Bitwarden lite MariaDB
BW_TEST_DATABASES__4__TYPE: "MySql"
BW_TEST_DATABASES__4__CONNECTIONSTRING: "server=localhost;port=4306;uid=root;pwd=mariadb-password;database=vault_dev;Allow User Variables=true"
run: dotnet test --logger "trx;LogFileName=infrastructure-test-results.trx" /p:CoverletOutputFormatter="cobertura" --collect:"XPlat Code Coverage"
shell: pwsh
- name: Print MySQL Logs
if: failure()
run: 'docker logs "$(docker ps --quiet --filter "name=mysql")"'
- name: Print MariaDB Logs
if: failure()
run: 'docker logs "$(docker ps --quiet --filter "name=mariadb")"'
- name: Print Postgres Logs
if: failure()
run: 'docker logs "$(docker ps --quiet --filter "name=postgres")"'
- name: Print MSSQL Logs
if: failure()
run: 'docker logs "$(docker ps --quiet --filter "name=mssql")"'
- name: Report test results
uses: dorny/test-reporter@b082adf0eced0765477756c2a610396589b8c637 # v2.5.0
if: ${{ github.event.pull_request.head.repo.full_name == github.repository && !cancelled() }}
with:
name: Test Results
path: "./**/*-test-results.trx"
reporter: dotnet-trx
fail-on-error: true
- name: Upload to codecov.io
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
- name: Docker Compose down
if: always()
working-directory: "dev"
run: docker compose down
shell: pwsh
validate:
name: Run validation
runs-on: ubuntu-22.04
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Print environment
run: |
dotnet --info
nuget help | grep Version
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
- name: Build DACPAC
run: dotnet build src/Sql --configuration Release --verbosity minimal --output .
shell: pwsh
- name: Upload DACPAC
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: sql.dacpac
path: Sql.dacpac
- name: Docker Compose up
working-directory: "dev"
run: |
cp .env.example .env
docker compose --profile mssql up -d
shell: pwsh
- name: Migrate
run: 'dotnet run --project util/MsSqlMigratorUtility/ "$CONN_STR"'
env:
CONN_STR: "Server=localhost;Database=vault_dev;User Id=SA;Password=SET_A_PASSWORD_HERE_123;Encrypt=True;TrustServerCertificate=True;"
- name: Diff .sqlproj to migrations
run: /usr/local/sqlpackage/sqlpackage /action:DeployReport /SourceFile:"Sql.dacpac" /TargetConnectionString:"Server=localhost;Database=vault_dev;User Id=SA;Password=SET_A_PASSWORD_HERE_123;Encrypt=True;TrustServerCertificate=True;" /OutputPath:"report.xml" /p:IgnoreColumnOrder=True /p:IgnoreComments=True
shell: pwsh
- name: Generate SQL file
run: /usr/local/sqlpackage/sqlpackage /action:Script /SourceFile:"Sql.dacpac" /TargetConnectionString:"Server=localhost;Database=vault_dev;User Id=SA;Password=SET_A_PASSWORD_HERE_123;Encrypt=True;TrustServerCertificate=True;" /OutputPath:"diff.sql" /p:IgnoreColumnOrder=True /p:IgnoreComments=True
shell: pwsh
- name: Report validation results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: report.xml
path: |
report.xml
diff.sql
- name: Validate XML
run: |
if grep -q "<Operations>" "report.xml"; then
echo "ERROR: Migration files are not in sync with the SQL project"
echo ""
echo "Check these locations:"
echo " - Migration scripts: util/Migrator/DbScripts/"
echo " - SQL project files: src/Sql/"
echo " - Download 'report.xml' artifact for full details"
echo ""
# Show actual SQL differences - exclude database setup commands
if [ -s "diff.sql" ]; then
echo "Key SQL differences:"
# Show meaningful schema differences, filtering out database setup noise
grep -E "^(CREATE|DROP|ALTER)" diff.sql | grep -v "ALTER DATABASE" | grep -v "DatabaseName" | head -5
echo ""
fi
echo "Common causes: naming differences (underscores, case), missing objects, or definition mismatches"
exit 1
else
echo "SUCCESS: Database validation passed"
fi
shell: bash
- name: Docker Compose down
if: ${{ always() }}
working-directory: "dev"
run: docker compose down
shell: pwsh
validate-migration-naming:
name: Validate new migration naming and order
runs-on: ubuntu-22.04
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
persist-credentials: false
- name: Validate new migrations for pull request
if: github.event_name == 'pull_request'
run: |
git fetch origin main:main
pwsh dev/verify_migrations.ps1 -BaseRef main
shell: pwsh
- name: Validate new migrations for push
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
run: pwsh dev/verify_migrations.ps1 -BaseRef HEAD~1
shell: pwsh
================================================
FILE: .github/workflows/test.yml
================================================
name: Testing
on:
workflow_dispatch:
push:
branches:
- "main"
- "rc"
- "hotfix-rc"
pull_request:
env:
_AZ_REGISTRY: "bitwardenprod.azurecr.io"
jobs:
testing:
name: Run tests
if: ${{ startsWith(github.head_ref, 'version_bump_') == false }}
runs-on: ubuntu-22.04
permissions:
checks: write
contents: read
pull-requests: write
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set up .NET
uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0
- name: Install rust
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable
with:
toolchain: stable
- name: Cache cargo registry
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
- name: Print environment
run: |
dotnet --info
nuget help | grep Version
echo "GitHub ref: $GITHUB_REF"
echo "GitHub event: $GITHUB_EVENT"
- name: Remove SQL project
run: dotnet sln bitwarden-server.sln remove src/Sql/Sql.sqlproj
- name: Test OSS solution
run: dotnet test ./test --configuration Debug --logger "trx;LogFileName=oss-test-results.trx" /p:CoverletOutputFormatter="cobertura" --collect:"XPlat Code Coverage"
- name: Test Bitwarden solution
run: dotnet test ./bitwarden_license/test --configuration Debug --logger "trx;LogFileName=bw-test-results.trx" /p:CoverletOutputFormatter="cobertura" --collect:"XPlat Code Coverage"
- name: Report test results
uses: dorny/test-reporter@b082adf0eced0765477756c2a610396589b8c637 # v2.5.0
if: ${{ github.event.pull_request.head.repo.full_name == github.repository && !cancelled() }}
with:
name: Test Results
path: "**/*-test-results.trx"
reporter: dotnet-trx
fail-on-error: true
- name: Upload to codecov.io
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
# Visual Studo 2015 cache/options directory
.vs/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding addin-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
PublishProfiles/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
*.[Cc]ache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Other
project.lock.json
*.jfm
mail_dist/
*.refactorlog
*.scmp
src/Core/Properties/launchSettings.json
*.override.env
**/*.DS_Store
src/Admin/wwwroot/assets
.vscode/*
**/.vscode/*
bitwarden_license/src/Sso/wwwroot/assets
.github/test/build.secrets
**/CoverageOutput/
.idea/*
**/**.swp
.mono
src/Core/MailTemplates/Mjml/out
src/Core/MailTemplates/Mjml/out-hbs
NativeMethods.g.cs
util/RustSdk/rust/target
src/Admin/Admin.zip
src/Api/Api.zip
src/Billing/Billing.zip
src/Events/Events.zip
src/EventsProcessor/EventsProcessor.zip
src/Identity/Identity.zip
src/Notifications/Notifications.zip
bitwarden_license/src/Portal/Portal.zip
bitwarden_license/src/Sso/Sso.zip
**/src/**/flags.json
# Generated swagger specs
/identity.json
/api.json
/api.public.json
# Serena
.serena/
# Claude Code
CLAUDE.local.md
.worktrees/
================================================
FILE: .run/Full Server - Self-hosted.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Full Server - Self-hosted" type="CompoundRunConfigurationType">
<toRun name="Admin: Admin-SelfHost" type="LaunchSettings" />
<toRun name="Api: Api-SelfHost" type="LaunchSettings" />
<toRun name="Events: Events-SelfHost" type="LaunchSettings" />
<toRun name="Identity: Identity-SelfHost" type="LaunchSettings" />
<toRun name="Notifications: Notifications-SelfHost" type="LaunchSettings" />
<toRun name="Sso: Sso-SelfHost" type="LaunchSettings" />
<method v="2" />
</configuration>
</component>
================================================
FILE: .run/Full Server.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Full Server" type="CompoundRunConfigurationType">
<toRun name="Admin" type="LaunchSettings" />
<toRun name="Api" type="LaunchSettings" />
<toRun name="Billing" type="LaunchSettings" />
<toRun name="Events" type="LaunchSettings" />
<toRun name="EventsProcessor" type="LaunchSettings" />
<toRun name="Icons" type="LaunchSettings" />
<toRun name="Identity" type="LaunchSettings" />
<toRun name="Notifications" type="LaunchSettings" />
<toRun name="Sso" type="LaunchSettings" />
<method v="2" />
</configuration>
</component>
================================================
FILE: .run/Min Server - Self-hosted.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Min Server - Self-hosted" type="CompoundRunConfigurationType">
<toRun name="Api: Api-SelfHost" type="LaunchSettings" />
<toRun name="Identity: Identity-SelfHost" type="LaunchSettings" />
<method v="2" />
</configuration>
</component>
================================================
FILE: .run/Min Server.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Min Server" type="CompoundRunConfigurationType">
<toRun name="Api" type="LaunchSettings" />
<toRun name="Identity" type="LaunchSettings" />
<method v="2" />
</configuration>
</component>
================================================
FILE: CONTRIBUTING.md
================================================
# How to Contribute
Our [Contributing Guidelines](https://contributing.bitwarden.com/contributing/) are located in our [Contributing Documentation](https://contributing.bitwarden.com/). The documentation also includes recommended tooling, code style tips, and lots of other great information to get you started.
================================================
FILE: Directory.Build.props
================================================
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>2026.3.1</Version>
<RootNamespace>Bit.$(MSBuildProjectName)</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<IsTestProject Condition="'$(IsTestProject)' == '' and ($(MSBuildProjectName.EndsWith('.Test')) or $(MSBuildProjectName.EndsWith('.IntegrationTest')))">true</IsTestProject>
<Nullable Condition="'$(Nullable)' == '' and '$(IsTestProject)' == 'true'">annotations</Nullable>
<Nullable Condition="'$(Nullable)' == '' and '$(IsTestProject)' != 'true'">enable</Nullable>
<TreatWarningsAsErrors Condition="'$(TreatWarningsAsErrors)' == ''">true</TreatWarningsAsErrors>
</PropertyGroup>
<PropertyGroup>
<BitIncludeAuthentication>false</BitIncludeAuthentication>
<BitIncludeFeatures>false</BitIncludeFeatures>
</PropertyGroup>
<PropertyGroup>
<MicrosoftNetTestSdkVersion>18.0.1</MicrosoftNetTestSdkVersion>
<XUnitVersion>2.6.6</XUnitVersion>
<XUnitRunnerVisualStudioVersion>2.5.6</XUnitRunnerVisualStudioVersion>
<CoverletCollectorVersion>6.0.0</CoverletCollectorVersion>
<NSubstituteVersion>5.1.0</NSubstituteVersion>
<AutoFixtureXUnit2Version>4.18.1</AutoFixtureXUnit2Version>
<AutoFixtureAutoNSubstituteVersion>4.18.1</AutoFixtureAutoNSubstituteVersion>
</PropertyGroup>
</Project>
================================================
FILE: LICENSE.txt
================================================
Source code in this repository is covered by one of two licenses: (i) the GNU
Affero General Public License (AGPL) v3.0 (ii) the Bitwarden License v1.0. The
default license throughout the repository is AGPL v3.0 unless the header
specifies another license. Bitwarden Licensed code is found only in the
/bitwarden_license directory.
AGPL v3.0:
https://github.com/bitwarden/server/blob/main/LICENSE_AGPL.txt
Bitwarden License v1.0:
https://github.com/bitwarden/server/blob/main/LICENSE_BITWARDEN.txt
No grant of any rights in the trademarks, service marks, or logos of Bitwarden is
made (except as may be necessary to comply with the notice requirements as
applicable), and use of any Bitwarden trademarks must comply with Bitwarden
Trademark Guidelines
<https://github.com/bitwarden/server/blob/main/TRADEMARK_GUIDELINES.md>.
================================================
FILE: LICENSE_AGPL.txt
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF
Showing preview only (364K chars total). Download the full file or copy to clipboard to get everything.
gitextract_xssbbuf5/ ├── .checkmarx/ │ └── config.yml ├── .claude/ │ ├── CLAUDE.md │ ├── commands/ │ │ └── bump-rust-sdk.md │ ├── hooks/ │ │ ├── README.md │ │ ├── rust-sdk-surface-check.sh │ │ └── seeder-docs-check.sh │ ├── settings.json │ └── skills/ │ └── bump-rust-sdk/ │ ├── SKILL.md │ └── references/ │ ├── api-surface.md │ └── methodology.md ├── .config/ │ └── dotnet-tools.json ├── .devcontainer/ │ ├── bitwarden_common/ │ │ └── docker-compose.yml │ ├── community_dev/ │ │ ├── devcontainer.json │ │ └── postCreateCommand.sh │ └── internal_dev/ │ ├── devcontainer.json │ ├── docker-compose.override.yml │ ├── onCreateCommand.sh │ └── postCreateCommand.sh ├── .dockerignore ├── .editorconfig ├── .git-blame-ignore-revs ├── .git-hooks/ │ └── pre-commit ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yml │ │ ├── bw-lite.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── codecov.yml │ ├── renovate.json5 │ └── workflows/ │ ├── _move_edd_db_scripts.yml │ ├── automatic-issue-responses.yml │ ├── build.yml │ ├── build_target.yml │ ├── cleanup-rc-branch.yml │ ├── code-references.yml │ ├── enforce-labels.yml │ ├── ephemeral-environment.yml │ ├── load-test.yml │ ├── protect-files.yml │ ├── publish.yml │ ├── release.yml │ ├── repository-management.yml │ ├── respond.yml │ ├── review-code.yml │ ├── scan.yml │ ├── stale-bot.yml │ ├── test-database.yml │ └── test.yml ├── .gitignore ├── .run/ │ ├── Full Server - Self-hosted.run.xml │ ├── Full Server.run.xml │ ├── Min Server - Self-hosted.run.xml │ └── Min Server.run.xml ├── CONTRIBUTING.md ├── Directory.Build.props ├── LICENSE.txt ├── LICENSE_AGPL.txt ├── LICENSE_BITWARDEN.txt ├── LICENSE_FAQ.md ├── README.md ├── SECURITY.md ├── TRADEMARK_GUIDELINES.md ├── bitwarden-server.sln ├── bitwarden_license/ │ ├── README.md │ ├── src/ │ │ ├── Commercial.Core/ │ │ │ ├── AdminConsole/ │ │ │ │ ├── Providers/ │ │ │ │ │ ├── CreateProviderCommand.cs │ │ │ │ │ └── RemoveOrganizationFromProviderCommand.cs │ │ │ │ └── Services/ │ │ │ │ └── ProviderService.cs │ │ │ ├── Billing/ │ │ │ │ └── Providers/ │ │ │ │ ├── Models/ │ │ │ │ │ └── ProviderClientInvoiceReportRow.cs │ │ │ │ ├── Queries/ │ │ │ │ │ └── GetProviderWarningsQuery.cs │ │ │ │ └── Services/ │ │ │ │ ├── BusinessUnitConverter.cs │ │ │ │ └── ProviderBillingService.cs │ │ │ ├── Commercial.Core.csproj │ │ │ ├── SecretsManager/ │ │ │ │ ├── AuthorizationHandlers/ │ │ │ │ │ ├── AccessPolicies/ │ │ │ │ │ │ ├── ProjectPeopleAccessPoliciesAuthorizationHandler.cs │ │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesAuthorizationHandler.cs │ │ │ │ │ │ ├── SecretAccessPoliciesUpdatesAuthorizationHandler.cs │ │ │ │ │ │ ├── ServiceAccountGrantedPoliciesAuthorizationHandler.cs │ │ │ │ │ │ └── ServiceAccountPeopleAccessPoliciesAuthorizationHandler.cs │ │ │ │ │ ├── Projects/ │ │ │ │ │ │ └── ProjectAuthorizationHandler.cs │ │ │ │ │ ├── Secrets/ │ │ │ │ │ │ ├── BulkSecretAuthorizationHandler.cs │ │ │ │ │ │ └── SecretAuthorizationHandler.cs │ │ │ │ │ └── ServiceAccounts/ │ │ │ │ │ └── ServiceAccountAuthorizationHandler.cs │ │ │ │ ├── Commands/ │ │ │ │ │ ├── AccessPolicies/ │ │ │ │ │ │ ├── UpdateProjectServiceAccountsAccessPoliciesCommand.cs │ │ │ │ │ │ └── UpdateServiceAccountGrantedPoliciesCommand.cs │ │ │ │ │ ├── AccessTokens/ │ │ │ │ │ │ └── CreateAccessTokenCommand.cs │ │ │ │ │ ├── Porting/ │ │ │ │ │ │ └── ImportCommand.cs │ │ │ │ │ ├── Projects/ │ │ │ │ │ │ ├── CreateProjectCommand.cs │ │ │ │ │ │ ├── DeleteProjectCommand.cs │ │ │ │ │ │ └── UpdateProjectCommand.cs │ │ │ │ │ ├── Requests/ │ │ │ │ │ │ └── RequestSMAccessCommand.cs │ │ │ │ │ ├── Secrets/ │ │ │ │ │ │ ├── CreateSecretCommand.cs │ │ │ │ │ │ ├── DeleteSecretCommand.cs │ │ │ │ │ │ └── UpdateSecretCommand.cs │ │ │ │ │ ├── ServiceAccounts/ │ │ │ │ │ │ ├── CreateServiceAccountCommand.cs │ │ │ │ │ │ ├── DeleteServiceAccountsCommand.cs │ │ │ │ │ │ ├── RevokeAccessTokensCommand.cs │ │ │ │ │ │ └── UpdateServiceAccountCommand.cs │ │ │ │ │ └── Trash/ │ │ │ │ │ ├── EmptyTrashCommand.cs │ │ │ │ │ └── RestoreTrashCommand.cs │ │ │ │ ├── Queries/ │ │ │ │ │ ├── AccessClientQuery.cs │ │ │ │ │ ├── AccessPolicies/ │ │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesUpdatesQuery.cs │ │ │ │ │ │ ├── SameOrganizationQuery.cs │ │ │ │ │ │ ├── SecretAccessPoliciesUpdatesQuery.cs │ │ │ │ │ │ └── ServiceAccountGrantedPolicyUpdatesQuery.cs │ │ │ │ │ ├── Projects/ │ │ │ │ │ │ └── MaxProjectsQuery.cs │ │ │ │ │ ├── Secrets/ │ │ │ │ │ │ └── SecretsSyncQuery.cs │ │ │ │ │ └── ServiceAccounts/ │ │ │ │ │ ├── CountNewServiceAccountSlotsRequiredQuery.cs │ │ │ │ │ └── ServiceAccountSecretsDetailsQuery.cs │ │ │ │ ├── SecretsManagerCollectionExtensions.cs │ │ │ │ └── SecretsManagerServiceCollectionExtensions.cs │ │ │ └── Utilities/ │ │ │ └── ServiceCollectionExtensions.cs │ │ ├── Commercial.Infrastructure.EntityFramework/ │ │ │ ├── Commercial.Infrastructure.EntityFramework.csproj │ │ │ └── SecretsManager/ │ │ │ ├── Repositories/ │ │ │ │ ├── AccessPolicyRepository.cs │ │ │ │ ├── ProjectRepository.cs │ │ │ │ ├── SecretRepository.cs │ │ │ │ ├── SecretVersionRepository.cs │ │ │ │ └── ServiceAccountRepository.cs │ │ │ └── SecretsManagerEFServiceCollectionExtensions.cs │ │ ├── Scim/ │ │ │ ├── Context/ │ │ │ │ ├── IScimContext.cs │ │ │ │ └── ScimContext.cs │ │ │ ├── Controllers/ │ │ │ │ ├── InfoController.cs │ │ │ │ └── v2/ │ │ │ │ ├── GroupsController.cs │ │ │ │ └── UsersController.cs │ │ │ ├── Dockerfile │ │ │ ├── Groups/ │ │ │ │ ├── GetGroupsListQuery.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IGetGroupsListQuery.cs │ │ │ │ │ ├── IPatchGroupCommand.cs │ │ │ │ │ ├── IPostGroupCommand.cs │ │ │ │ │ └── IPutGroupCommand.cs │ │ │ │ ├── PatchGroupCommand.cs │ │ │ │ ├── PostGroupCommand.cs │ │ │ │ └── PutGroupCommand.cs │ │ │ ├── Models/ │ │ │ │ ├── BaseScimGroupModel.cs │ │ │ │ ├── BaseScimModel.cs │ │ │ │ ├── BaseScimUserModel.cs │ │ │ │ ├── GetGroupsQueryParamModel.cs │ │ │ │ ├── GetUsersQueryParamModel.cs │ │ │ │ ├── ScimErrorResponseModel.cs │ │ │ │ ├── ScimGroupRequestModel.cs │ │ │ │ ├── ScimGroupResponseModel.cs │ │ │ │ ├── ScimListResponseModel.cs │ │ │ │ ├── ScimMetaModel.cs │ │ │ │ ├── ScimPatchModel.cs │ │ │ │ ├── ScimUserRequestModel.cs │ │ │ │ └── ScimUserResponseModel.cs │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── Scim.csproj │ │ │ ├── ScimSettings.cs │ │ │ ├── Startup.cs │ │ │ ├── Users/ │ │ │ │ ├── GetUsersListQuery.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IGetUsersListQuery.cs │ │ │ │ │ ├── IPatchUserCommand.cs │ │ │ │ │ └── IPostUserCommand.cs │ │ │ │ ├── PatchUserCommand.cs │ │ │ │ └── PostUserCommand.cs │ │ │ ├── Utilities/ │ │ │ │ ├── ApiKeyAuthenticationHandler.cs │ │ │ │ ├── ApiKeyAuthenticationOptions.cs │ │ │ │ ├── ExceptionHandlerFilterAttribute.cs │ │ │ │ ├── ScimConstants.cs │ │ │ │ ├── ScimContextMiddleware.cs │ │ │ │ └── ScimServiceCollectionExtensions.cs │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.Production.json │ │ │ ├── appsettings.QA.json │ │ │ ├── appsettings.json │ │ │ ├── build.ps1 │ │ │ ├── build.sh │ │ │ └── entrypoint.sh │ │ └── Sso/ │ │ ├── Controllers/ │ │ │ ├── AccountController.cs │ │ │ ├── HomeController.cs │ │ │ ├── InfoController.cs │ │ │ └── MetadataController.cs │ │ ├── Dockerfile │ │ ├── IdentityServer/ │ │ │ ├── DistributedCachePersistedGrantStore.cs │ │ │ └── OidcIdentityClient.cs │ │ ├── Models/ │ │ │ ├── ErrorViewModel.cs │ │ │ ├── RedirectViewModel.cs │ │ │ ├── SamlEnvironment.cs │ │ │ └── SsoPreValidateResponseModel.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Sass/ │ │ │ ├── site.scss │ │ │ └── webfonts.css │ │ ├── Sso.csproj │ │ ├── Startup.cs │ │ ├── Utilities/ │ │ │ ├── ClaimsExtensions.cs │ │ │ ├── DiscoveryResponseGenerator.cs │ │ │ ├── DynamicAuthenticationScheme.cs │ │ │ ├── DynamicAuthenticationSchemeProvider.cs │ │ │ ├── ExtendedOptionsMonitorCache.cs │ │ │ ├── IDynamicAuthenticationScheme.cs │ │ │ ├── IExtendedOptionsMonitorCache.cs │ │ │ ├── OpenIdConnectOptionsExtensions.cs │ │ │ ├── OpenIdConnectScopes.cs │ │ │ ├── PersistedGrantsDistributedCacheConstants.cs │ │ │ ├── Saml2OptionsExtensions.cs │ │ │ ├── SamlClaimTypes.cs │ │ │ ├── SamlNameIdFormats.cs │ │ │ ├── SamlPropertyKeys.cs │ │ │ ├── ServiceCollectionExtensions.cs │ │ │ └── SsoAuthenticationMiddleware.cs │ │ ├── Views/ │ │ │ ├── Shared/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Redirect.cshtml │ │ │ │ └── _Layout.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ ├── entrypoint.sh │ │ ├── package.json │ │ ├── webfonts.list │ │ └── webpack.config.js │ └── test/ │ ├── Bitwarden.License.Tests.proj │ ├── Commercial.Core.Test/ │ │ ├── AdminConsole/ │ │ │ ├── AutoFixture/ │ │ │ │ └── ProviderUserFixtures.cs │ │ │ ├── ProviderFeatures/ │ │ │ │ ├── CreateProviderCommandTests.cs │ │ │ │ └── RemoveOrganizationFromProviderCommandTests.cs │ │ │ └── Services/ │ │ │ └── ProviderServiceTests.cs │ │ ├── Billing/ │ │ │ ├── Providers/ │ │ │ │ ├── Queries/ │ │ │ │ │ └── GetProviderWarningsQueryTests.cs │ │ │ │ └── Services/ │ │ │ │ ├── BusinessUnitConverterTests.cs │ │ │ │ ├── ProviderBillingServiceTests.cs │ │ │ │ └── ProviderPriceAdapterTests.cs │ │ │ └── Tax/ │ │ │ └── TaxServiceTests.cs │ │ ├── Commercial.Core.Test.csproj │ │ └── SecretsManager/ │ │ ├── AuthorizationHandlers/ │ │ │ ├── AccessPolicies/ │ │ │ │ ├── ProjectPeopleAccessPoliciesAuthorizationHandlerTests.cs │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesAuthorizationHandlerTests.cs │ │ │ │ ├── SecretAccessPoliciesUpdatesAuthorizationHandlerTests.cs │ │ │ │ ├── ServiceAccountGrantedPoliciesAuthorizationHandlerTests.cs │ │ │ │ └── ServiceAccountPeopleAccessPoliciesAuthorizationHandlerTests.cs │ │ │ ├── Projects/ │ │ │ │ └── ProjectAuthorizationHandlerTests.cs │ │ │ ├── Secrets/ │ │ │ │ ├── BulkSecretAuthorizationHandlerTests.cs │ │ │ │ └── SecretAuthorizationHandlerTests.cs │ │ │ └── ServiceAccounts/ │ │ │ └── ServiceAccountAuthorizationHandlerTests.cs │ │ ├── Commands/ │ │ │ ├── AccessPolicies/ │ │ │ │ ├── UpdateProjectServiceAccountsAccessPoliciesCommandTests.cs │ │ │ │ └── UpdateServiceAccountGrantedPoliciesCommandTests.cs │ │ │ ├── AccessTokens/ │ │ │ │ └── CreateAccessTokenCommandTests.cs │ │ │ ├── Projects/ │ │ │ │ ├── CreateProjectCommandTests.cs │ │ │ │ ├── DeleteProjectCommandTests.cs │ │ │ │ └── UpdateProjectCommandTests.cs │ │ │ ├── Requests/ │ │ │ │ └── RequestSMAccessCommandTests.cs │ │ │ ├── Secrets/ │ │ │ │ ├── CreateSecretCommandTests.cs │ │ │ │ ├── DeleteSecretCommandTests.cs │ │ │ │ └── UpdateSecretCommandTests.cs │ │ │ ├── ServiceAccounts/ │ │ │ │ ├── CreateServiceAccountCommandTests.cs │ │ │ │ ├── DeleteServiceAccountsCommandTests.cs │ │ │ │ ├── RevokeAccessTokenCommandTests.cs │ │ │ │ └── UpdateServiceAccountCommandTests.cs │ │ │ └── Trash/ │ │ │ ├── EmptyTrashCommandTests.cs │ │ │ └── RestoreTrashCommandTests.cs │ │ ├── Enums/ │ │ │ ├── AccessPolicyType.cs │ │ │ └── PermissionType.cs │ │ ├── Queries/ │ │ │ ├── AccessPolicies/ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesUpdatesQueryTests.cs │ │ │ │ ├── SameOrganizationQueryTests.cs │ │ │ │ ├── SecretAccessPoliciesUpdatesQueryTests.cs │ │ │ │ └── ServiceAccountGrantedPolicyUpdatesQueryTests.cs │ │ │ ├── Projects/ │ │ │ │ └── MaxProjectsQueryTests.cs │ │ │ ├── Secrets/ │ │ │ │ └── SecretsSyncQueryTests.cs │ │ │ └── ServiceAccounts/ │ │ │ ├── CountNewServiceAccountSlotsRequiredQueryTests.cs │ │ │ └── ServiceAccountSecretsDetailsQueryTests.cs │ │ └── Repositories/ │ │ └── SecretVersionRepositoryTests.cs │ ├── SSO.Test/ │ │ ├── Controllers/ │ │ │ └── AccountControllerTest.cs │ │ ├── IdentityServer/ │ │ │ └── DistributedCachePersistedGrantStoreTests.cs │ │ └── SSO.Test.csproj │ ├── Scim.IntegrationTest/ │ │ ├── Controllers/ │ │ │ └── v2/ │ │ │ ├── GroupsControllerPatchTests.cs │ │ │ ├── GroupsControllerTests.cs │ │ │ └── UsersControllerTests.cs │ │ ├── Factories/ │ │ │ └── ScimApplicationFactory.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Scim.IntegrationTest.csproj │ │ └── appsettings.Development.json │ ├── Scim.Test/ │ │ ├── Groups/ │ │ │ ├── GetGroupsListQueryTests.cs │ │ │ ├── PatchGroupCommandTests.cs │ │ │ ├── PostGroupCommandTests.cs │ │ │ └── PutGroupCommandTests.cs │ │ ├── Scim.Test.csproj │ │ └── Users/ │ │ ├── GetUsersListQueryTests.cs │ │ ├── PatchUserCommandTests.cs │ │ └── PostUserCommandTests.cs │ └── Sso.IntegrationTest/ │ ├── Controllers/ │ │ └── AccountControllerTests.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── Sso.IntegrationTest.csproj │ └── Utilities/ │ ├── SsoApplicationFactory.cs │ ├── SsoTestDataBuilder.cs │ └── SuccessfulAuthResult.cs ├── dev/ │ ├── .gitignore │ ├── authsources.php.example │ ├── create_certificates_linux.sh │ ├── create_certificates_mac.sh │ ├── create_certificates_windows.ps1 │ ├── docker-compose.yml │ ├── ef_migrate.ps1 │ ├── generate_openapi_files.ps1 │ ├── migrate.ps1 │ ├── reverse-proxy.conf.example │ ├── secrets.json.example │ ├── servicebusemulator_config.json │ ├── setup_azurite.ps1 │ ├── setup_secrets.ps1 │ └── verify_migrations.ps1 ├── global.json ├── perf/ │ ├── MicroBenchmarks/ │ │ ├── Core/ │ │ │ └── EncryptedStringAttributeTests.cs │ │ ├── Identity/ │ │ │ └── IdentityServer/ │ │ │ ├── PersistedGrantStoreTests.cs │ │ │ └── StaticClientStoreTests.cs │ │ ├── MicroBenchmarks.csproj │ │ └── Program.cs │ └── load/ │ ├── config.js │ ├── groups.js │ ├── helpers/ │ │ └── auth.js │ ├── login.js │ └── sync.js ├── src/ │ ├── Admin/ │ │ ├── Admin.csproj │ │ ├── AdminConsole/ │ │ │ ├── Controllers/ │ │ │ │ ├── OrganizationsController.cs │ │ │ │ ├── ProviderOrganizationsController.cs │ │ │ │ └── ProvidersController.cs │ │ │ ├── Models/ │ │ │ │ ├── CreateBusinessUnitProviderModel.cs │ │ │ │ ├── CreateMspProviderModel.cs │ │ │ │ ├── CreateProviderModel.cs │ │ │ │ ├── CreateResellerProviderModel.cs │ │ │ │ ├── OrganizationEditModel.cs │ │ │ │ ├── OrganizationInitiateDeleteModel.cs │ │ │ │ ├── OrganizationSelectableViewModel.cs │ │ │ │ ├── OrganizationUnassignedToProviderSearchViewModel.cs │ │ │ │ ├── OrganizationViewModel.cs │ │ │ │ ├── OrganizationsModel.cs │ │ │ │ ├── ProviderEditModel.cs │ │ │ │ ├── ProviderViewModel.cs │ │ │ │ └── ProvidersModel.cs │ │ │ └── Views/ │ │ │ ├── Organizations/ │ │ │ │ ├── Connections.cshtml │ │ │ │ ├── Edit.cshtml │ │ │ │ ├── Index.cshtml │ │ │ │ ├── View.cshtml │ │ │ │ ├── _ProviderInformation.cshtml │ │ │ │ └── _ViewInformation.cshtml │ │ │ ├── Providers/ │ │ │ │ ├── AddExistingOrganization.cshtml │ │ │ │ ├── Admins.cshtml │ │ │ │ ├── Create.cshtml │ │ │ │ ├── CreateBusinessUnit.cshtml │ │ │ │ ├── CreateMsp.cshtml │ │ │ │ ├── CreateOrganization.cshtml │ │ │ │ ├── CreateReseller.cshtml │ │ │ │ ├── Edit.cshtml │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Organizations.cshtml │ │ │ │ ├── View.cshtml │ │ │ │ ├── _ProviderOrganizationScripts.cshtml │ │ │ │ ├── _ProviderScripts.cshtml │ │ │ │ └── _ViewInformation.cshtml │ │ │ ├── Shared/ │ │ │ │ ├── _OrganizationForm.cshtml │ │ │ │ └── _OrganizationFormScripts.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── AdminSettings.cs │ │ ├── Auth/ │ │ │ ├── Controllers/ │ │ │ │ └── LoginController.cs │ │ │ ├── IdentityServer/ │ │ │ │ └── PasswordlessSignInManager.cs │ │ │ ├── Jobs/ │ │ │ │ ├── DatabaseExpiredGrantsJob.cs │ │ │ │ └── DeleteAuthRequestsJob.cs │ │ │ ├── Models/ │ │ │ │ └── LoginModel.cs │ │ │ └── Views/ │ │ │ ├── Login/ │ │ │ │ └── Index.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── Billing/ │ │ │ ├── Controllers/ │ │ │ │ ├── BusinessUnitConversionController.cs │ │ │ │ ├── ProcessStripeEventsController.cs │ │ │ │ └── SubscriptionDiscountsController.cs │ │ │ ├── Models/ │ │ │ │ ├── BusinessUnitConversionModel.cs │ │ │ │ ├── ProcessStripeEvents/ │ │ │ │ │ ├── EventsFormModel.cs │ │ │ │ │ ├── EventsRequestBody.cs │ │ │ │ │ └── EventsResponseBody.cs │ │ │ │ ├── ProviderPlanViewModel.cs │ │ │ │ └── SubscriptionDiscount/ │ │ │ │ ├── CreateSubscriptionDiscountModel.cs │ │ │ │ ├── EditSubscriptionDiscountModel.cs │ │ │ │ ├── SubscriptionDiscountPagedModel.cs │ │ │ │ └── SubscriptionDiscountViewModel.cs │ │ │ └── Views/ │ │ │ ├── BusinessUnitConversion/ │ │ │ │ └── Index.cshtml │ │ │ ├── ProcessStripeEvents/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── Results.cshtml │ │ │ ├── Providers/ │ │ │ │ └── ProviderPlans.cshtml │ │ │ ├── SubscriptionDiscounts/ │ │ │ │ ├── Create.cshtml │ │ │ │ ├── Edit.cshtml │ │ │ │ ├── Index.cshtml │ │ │ │ └── Partials/ │ │ │ │ ├── _ConfigureDiscountForm.cshtml │ │ │ │ └── _ImportCouponForm.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── Controllers/ │ │ │ ├── ErrorController.cs │ │ │ ├── HomeController.cs │ │ │ ├── InfoController.cs │ │ │ ├── ToolsController.cs │ │ │ └── UsersController.cs │ │ ├── Dockerfile │ │ ├── Enums/ │ │ │ ├── HtmlHelperExtensions.cs │ │ │ └── Permissions.cs │ │ ├── HostedServices/ │ │ │ ├── AzureQueueMailHostedService.cs │ │ │ └── DatabaseMigrationHostedService.cs │ │ ├── IdentityServer/ │ │ │ ├── CustomClaimsPrincipalFactory.cs │ │ │ ├── ReadOnlyEnvIdentityUserStore.cs │ │ │ ├── ReadOnlyIdentityUserStore.cs │ │ │ └── ServiceCollectionExtensions.cs │ │ ├── Jobs/ │ │ │ ├── AliveJob.cs │ │ │ ├── DatabaseExpiredSponsorshipsJob.cs │ │ │ ├── DatabaseRebuildlIndexesJob.cs │ │ │ ├── DatabaseUpdateStatisticsJob.cs │ │ │ ├── DeleteCiphersJob.cs │ │ │ ├── DeleteUnverifiedOrganizationDomainsJob.cs │ │ │ └── JobsHostedService.cs │ │ ├── Models/ │ │ │ ├── BillingInformationModel.cs │ │ │ ├── ChargeBraintreeModel.cs │ │ │ ├── CreateUpdateTransactionModel.cs │ │ │ ├── CursorPagedModel.cs │ │ │ ├── ErrorViewModel.cs │ │ │ ├── HomeModel.cs │ │ │ ├── LicenseModel.cs │ │ │ ├── PagedModel.cs │ │ │ ├── PromoteAdminModel.cs │ │ │ ├── PromoteProviderServiceUserModel.cs │ │ │ ├── UserEditModel.cs │ │ │ ├── UserViewModel.cs │ │ │ └── UsersModel.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Sass/ │ │ │ ├── site.scss │ │ │ └── webfonts.scss │ │ ├── Services/ │ │ │ ├── AccessControlService.cs │ │ │ └── IAccessControlService.cs │ │ ├── Startup.cs │ │ ├── TagHelpers/ │ │ │ ├── ActivePageTagHelper.cs │ │ │ └── OptionSelectedTagHelper.cs │ │ ├── Tools/ │ │ │ └── Jobs/ │ │ │ └── DeleteSendsJob.cs │ │ ├── Utilities/ │ │ │ ├── RequirePermissionAttribute.cs │ │ │ ├── RolePermissionMapping.cs │ │ │ └── WebHostEnvironmentExtensions.cs │ │ ├── Views/ │ │ │ ├── Home/ │ │ │ │ └── Index.cshtml │ │ │ ├── Shared/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── _BillingInformation.cshtml │ │ │ │ └── _Layout.cshtml │ │ │ ├── Tools/ │ │ │ │ ├── ChargeBraintree.cshtml │ │ │ │ ├── CreateUpdateTransaction.cshtml │ │ │ │ ├── GenerateLicense.cshtml │ │ │ │ ├── PromoteAdmin.cshtml │ │ │ │ └── PromoteProviderServiceUser.cshtml │ │ │ ├── Users/ │ │ │ │ ├── Edit.cshtml │ │ │ │ ├── Index.cshtml │ │ │ │ ├── View.cshtml │ │ │ │ └── _ViewInformation.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ ├── bundleconfig.json │ │ ├── entrypoint.sh │ │ ├── package.json │ │ ├── webfonts.list │ │ └── webpack.config.js │ ├── Api/ │ │ ├── AdminConsole/ │ │ │ ├── Authorization/ │ │ │ │ ├── AuthorizationHandlerCollectionExtensions.cs │ │ │ │ ├── AuthorizeAttribute.cs │ │ │ │ ├── HttpContextExtensions.cs │ │ │ │ ├── IOrganizationRequirement.cs │ │ │ │ ├── OrganizationClaimsExtensions.cs │ │ │ │ ├── OrganizationContext.cs │ │ │ │ ├── OrganizationRequirementHandler.cs │ │ │ │ ├── RecoverAccountAuthorizationHandler.cs │ │ │ │ └── Requirements/ │ │ │ │ ├── BasePermissionRequirement.cs │ │ │ │ ├── ManageGroupsOrUsersRequirement.cs │ │ │ │ ├── MemberOrProviderRequirement.cs │ │ │ │ ├── MemberRequirement.cs │ │ │ │ └── PermissionRequirements.cs │ │ │ ├── Controllers/ │ │ │ │ ├── BaseAdminConsoleController.cs │ │ │ │ ├── GroupsController.cs │ │ │ │ ├── OrganizationAuthRequestsController.cs │ │ │ │ ├── OrganizationConnectionsController.cs │ │ │ │ ├── OrganizationDomainController.cs │ │ │ │ ├── OrganizationUsersController.cs │ │ │ │ ├── OrganizationsController.cs │ │ │ │ ├── PoliciesController.cs │ │ │ │ ├── ProviderClientsController.cs │ │ │ │ ├── ProviderOrganizationsController.cs │ │ │ │ ├── ProviderUsersController.cs │ │ │ │ └── ProvidersController.cs │ │ │ ├── Jobs/ │ │ │ │ └── OrganizationSubscriptionUpdateJob.cs │ │ │ ├── Models/ │ │ │ │ ├── Request/ │ │ │ │ │ ├── AdminAuthRequestUpdateRequestModel.cs │ │ │ │ │ ├── BulkDenyAdminAuthRequestRequestModel.cs │ │ │ │ │ ├── GroupRequestModel.cs │ │ │ │ │ ├── OrganizationAuthRequestUpdateManyRequestModel.cs │ │ │ │ │ ├── OrganizationDomainRequestModel.cs │ │ │ │ │ ├── Organizations/ │ │ │ │ │ │ ├── OrganizationApiKeyRequestModel.cs │ │ │ │ │ │ ├── OrganizationConnectionRequestModel.cs │ │ │ │ │ │ ├── OrganizationCreateRequestModel.cs │ │ │ │ │ │ ├── OrganizationDomainSsoDetailsRequestModel.cs │ │ │ │ │ │ ├── OrganizationKeysRequestModel.cs │ │ │ │ │ │ ├── OrganizationNoPaymentCreateRequest.cs │ │ │ │ │ │ ├── OrganizationSeatRequestModel.cs │ │ │ │ │ │ ├── OrganizationUpdateRequestModel.cs │ │ │ │ │ │ ├── OrganizationUpgradeRequestModel.cs │ │ │ │ │ │ ├── OrganizationUserRequestModels.cs │ │ │ │ │ │ ├── OrganizationUserRestoreRequest.cs │ │ │ │ │ │ └── OrganizationVerifyDeleteRecoverRequestModel.cs │ │ │ │ │ ├── PolicyRequestModel.cs │ │ │ │ │ ├── Providers/ │ │ │ │ │ │ ├── ProviderOrganizationAddRequestModel.cs │ │ │ │ │ │ ├── ProviderOrganizationCreateRequestModel.cs │ │ │ │ │ │ ├── ProviderSetupRequestModel.cs │ │ │ │ │ │ ├── ProviderUpdateRequestModel.cs │ │ │ │ │ │ ├── ProviderUserRequestModels.cs │ │ │ │ │ │ └── ProviderVerifyDeleteRecoverRequestModel.cs │ │ │ │ │ └── SavePolicyRequest.cs │ │ │ │ └── Response/ │ │ │ │ ├── BaseProfileOrganizationResponseModel.cs │ │ │ │ ├── GroupResponseModel.cs │ │ │ │ ├── Helpers/ │ │ │ │ │ └── PolicyStatusResponses.cs │ │ │ │ ├── Organizations/ │ │ │ │ │ ├── OrganizationApiKeyInformationResponseModel.cs │ │ │ │ │ ├── OrganizationAutoEnrollStatusResponseModel.cs │ │ │ │ │ ├── OrganizationConnectionResponseModel.cs │ │ │ │ │ ├── OrganizationDomainResponseModel.cs │ │ │ │ │ ├── OrganizationDomainSsoDetailsResponseModel.cs │ │ │ │ │ ├── OrganizationKeysResponseModel.cs │ │ │ │ │ ├── OrganizationPublicKeyResponseModel.cs │ │ │ │ │ ├── OrganizationResponseModel.cs │ │ │ │ │ ├── OrganizationUserResponseModel.cs │ │ │ │ │ ├── PolicyResponseModel.cs │ │ │ │ │ ├── PolicyStatusResponseModel.cs │ │ │ │ │ ├── VerifiedOrganizationDomainSsoDetailResponseModel.cs │ │ │ │ │ └── VerifiedOrganizationDomainSsoDetailsResponseModel.cs │ │ │ │ ├── PendingOrganizationAuthRequestResponseModel.cs │ │ │ │ ├── ProfileOrganizationResponseModel.cs │ │ │ │ ├── ProfileProviderOrganizationResponseModel.cs │ │ │ │ └── Providers/ │ │ │ │ ├── ProfileProviderResponseModel.cs │ │ │ │ ├── ProviderOrganizationResponseModel.cs │ │ │ │ ├── ProviderResponseModel.cs │ │ │ │ └── ProviderUserResponseModel.cs │ │ │ └── Public/ │ │ │ ├── Controllers/ │ │ │ │ ├── GroupsController.cs │ │ │ │ ├── MembersController.cs │ │ │ │ ├── OrganizationController.cs │ │ │ │ └── PoliciesController.cs │ │ │ └── Models/ │ │ │ ├── AssociationWithPermissionsBaseModel.cs │ │ │ ├── GroupBaseModel.cs │ │ │ ├── MemberBaseModel.cs │ │ │ ├── PermissionsModel.cs │ │ │ ├── PolicyBaseModel.cs │ │ │ ├── Request/ │ │ │ │ ├── AssociationWithPermissionsRequestModel.cs │ │ │ │ ├── GroupCreateUpdateRequestModel.cs │ │ │ │ ├── MemberCreateRequestModel.cs │ │ │ │ ├── MemberUpdateRequestModel.cs │ │ │ │ ├── OrganizationImportRequestModel.cs │ │ │ │ ├── PolicyUpdateRequestModel.cs │ │ │ │ ├── UpdateGroupIdsRequestModel.cs │ │ │ │ └── UpdateMemberIdsRequestModel.cs │ │ │ └── Response/ │ │ │ ├── AssociationWithPermissionsResponseModel.cs │ │ │ ├── GroupResponseModel.cs │ │ │ ├── MemberResponseModel.cs │ │ │ └── PolicyResponseModel.cs │ │ ├── Api.csproj │ │ ├── Auth/ │ │ │ ├── Controllers/ │ │ │ │ ├── AccountsController.cs │ │ │ │ ├── AuthRequestsController.cs │ │ │ │ ├── EmergencyAccessController.cs │ │ │ │ ├── TwoFactorController.cs │ │ │ │ └── WebAuthnController.cs │ │ │ ├── Jobs/ │ │ │ │ ├── EmergencyAccessNotificationJob.cs │ │ │ │ └── EmergencyAccessTimeoutJob.cs │ │ │ └── Models/ │ │ │ ├── Request/ │ │ │ │ ├── Accounts/ │ │ │ │ │ ├── DeleteRecoverRequestModel.cs │ │ │ │ │ ├── EmailRequestModel.cs │ │ │ │ │ ├── EmailTokenRequestModel.cs │ │ │ │ │ ├── MasterPasswordUnlockDataAndAuthenticationModel.cs │ │ │ │ │ ├── PasswordHintRequestModel.cs │ │ │ │ │ ├── PasswordRequestModel.cs │ │ │ │ │ ├── RegenerateTwoFactorRequestModel.cs │ │ │ │ │ ├── SecretVerificationRequestModel.cs │ │ │ │ │ ├── SetInitialPasswordRequestModel.cs │ │ │ │ │ ├── SetVerifyDevicesRequestModel.cs │ │ │ │ │ ├── UnauthenticatedSecretVerificationRequestModel.cs │ │ │ │ │ ├── UpdateKeyRequestModel.cs │ │ │ │ │ ├── UpdateProfileRequestModel.cs │ │ │ │ │ ├── UpdateTdeOffboardingPasswordRequestModel.cs │ │ │ │ │ ├── UpdateTempPasswordRequestModel.cs │ │ │ │ │ ├── VerifyDeleteRecoverRequestModel.cs │ │ │ │ │ ├── VerifyEmailRequestModel.cs │ │ │ │ │ └── VerifyOTPRequestModel.cs │ │ │ │ ├── EmergencyAccessRequestModels.cs │ │ │ │ ├── OrganizationSsoRequestModel.cs │ │ │ │ ├── TwoFactorRequestModels.cs │ │ │ │ ├── UntrustDevicesModel.cs │ │ │ │ ├── UpdateDevicesTrustRequestModel.cs │ │ │ │ └── WebAuthn/ │ │ │ │ ├── WebAuthnLoginCredentialCreatelRequestModel.cs │ │ │ │ ├── WebAuthnLoginCredentialUpdateRequestModel.cs │ │ │ │ └── WebAuthnLoginRotateKeyRequestModel.cs │ │ │ └── Response/ │ │ │ ├── AuthRequestResponseModel.cs │ │ │ ├── EmergencyAccessResponseModel.cs │ │ │ ├── OrganizationSsoResponseModel.cs │ │ │ ├── PendingAuthRequestResponseModel.cs │ │ │ ├── TwoFactor/ │ │ │ │ ├── TwoFactorAuthenticatorResponseModel.cs │ │ │ │ ├── TwoFactorDuoResponseModel.cs │ │ │ │ ├── TwoFactorEmailResponseModel.cs │ │ │ │ ├── TwoFactorProviderResponseModel.cs │ │ │ │ ├── TwoFactorRecoverResponseModel.cs │ │ │ │ ├── TwoFactorWebAuthnResponseModel.cs │ │ │ │ └── TwoFactorYubiKeyResponseModel.cs │ │ │ └── WebAuthn/ │ │ │ ├── WebAuthnCredentialCreateOptionsResponseModel.cs │ │ │ └── WebAuthnCredentialResponseModel.cs │ │ ├── Billing/ │ │ │ ├── Attributes/ │ │ │ │ ├── InjectOrganizationAttribute.cs │ │ │ │ ├── InjectProviderAttribute.cs │ │ │ │ ├── InjectUserAttribute.cs │ │ │ │ ├── NonTokenizedPaymentMethodTypeValidationAttribute.cs │ │ │ │ └── TokenizedPaymentMethodTypeValidationAttribute.cs │ │ │ ├── Controllers/ │ │ │ │ ├── AccountsBillingController.cs │ │ │ │ ├── AccountsController.cs │ │ │ │ ├── BaseBillingController.cs │ │ │ │ ├── BaseProviderController.cs │ │ │ │ ├── LicensesController.cs │ │ │ │ ├── OrganizationBillingController.cs │ │ │ │ ├── OrganizationSponsorshipsController.cs │ │ │ │ ├── OrganizationsController.cs │ │ │ │ ├── PlansController.cs │ │ │ │ ├── PreviewInvoiceController.cs │ │ │ │ ├── ProviderBillingController.cs │ │ │ │ ├── StripeController.cs │ │ │ │ └── VNext/ │ │ │ │ ├── AccountBillingVNextController.cs │ │ │ │ ├── OrganizationBillingVNextController.cs │ │ │ │ ├── ProviderBillingVNextController.cs │ │ │ │ ├── SelfHostedAccountBillingVNextController.cs │ │ │ │ └── SelfHostedOrganizationBillingVNextController.cs │ │ │ ├── Models/ │ │ │ │ ├── Requests/ │ │ │ │ │ ├── AddExistingOrganizationRequestBody.cs │ │ │ │ │ ├── ChangePlanFrequencyRequest.cs │ │ │ │ │ ├── CreateClientOrganizationRequestBody.cs │ │ │ │ │ ├── KeyPairRequestBody.cs │ │ │ │ │ ├── Organizations/ │ │ │ │ │ │ ├── OrganizationSubscriptionPlanChangeRequest.cs │ │ │ │ │ │ ├── OrganizationSubscriptionPurchaseRequest.cs │ │ │ │ │ │ └── OrganizationSubscriptionUpdateRequest.cs │ │ │ │ │ ├── Payment/ │ │ │ │ │ │ ├── BillingAddressRequest.cs │ │ │ │ │ │ ├── BitPayCreditRequest.cs │ │ │ │ │ │ ├── CheckoutBillingAddressRequest.cs │ │ │ │ │ │ ├── MinimalBillingAddressRequest.cs │ │ │ │ │ │ ├── MinimalTokenizedPaymentMethodRequest.cs │ │ │ │ │ │ ├── NonTokenizedPaymentMethodRequest.cs │ │ │ │ │ │ ├── TokenizedPaymentMethodRequest.cs │ │ │ │ │ │ └── VerifyBankAccountRequest.cs │ │ │ │ │ ├── Premium/ │ │ │ │ │ │ ├── PremiumCloudHostedSubscriptionRequest.cs │ │ │ │ │ │ ├── PremiumSelfHostedSubscriptionRequest.cs │ │ │ │ │ │ └── UpgradePremiumToOrganizationRequest.cs │ │ │ │ │ ├── PreviewInvoice/ │ │ │ │ │ │ ├── PreviewOrganizationSubscriptionPlanChangeTaxRequest.cs │ │ │ │ │ │ ├── PreviewOrganizationSubscriptionPurchaseTaxRequest.cs │ │ │ │ │ │ ├── PreviewOrganizationSubscriptionUpdateTaxRequest.cs │ │ │ │ │ │ ├── PreviewPremiumSubscriptionPurchaseTaxRequest.cs │ │ │ │ │ │ └── PreviewPremiumUpgradeProrationRequest.cs │ │ │ │ │ ├── SetupBusinessUnitRequestBody.cs │ │ │ │ │ ├── Storage/ │ │ │ │ │ │ └── StorageUpdateRequest.cs │ │ │ │ │ ├── Subscriptions/ │ │ │ │ │ │ └── RestartSubscriptionRequest.cs │ │ │ │ │ └── UpdateClientOrganizationRequestBody.cs │ │ │ │ ├── Requirements/ │ │ │ │ │ └── ManageOrganizationBillingRequirement.cs │ │ │ │ └── Responses/ │ │ │ │ ├── BillingHistoryResponseModel.cs │ │ │ │ ├── BillingResponseModel.cs │ │ │ │ ├── InvoicesResponse.cs │ │ │ │ ├── Portal/ │ │ │ │ │ └── PortalSessionResponse.cs │ │ │ │ └── ProviderSubscriptionResponse.cs │ │ │ └── Public/ │ │ │ ├── Controllers/ │ │ │ │ └── OrganizationController.cs │ │ │ └── Models/ │ │ │ ├── Request/ │ │ │ │ └── OrganizationSubscriptionUpdateRequestModel.cs │ │ │ └── Response/ │ │ │ └── OrganizationSubscriptionDetailsResponseModel.cs │ │ ├── Controllers/ │ │ │ ├── CollectionsController.cs │ │ │ ├── ConfigController.cs │ │ │ ├── DevicesController.cs │ │ │ ├── InfoController.cs │ │ │ ├── SelfHosted/ │ │ │ │ ├── SelfHostedOrganizationLicensesController.cs │ │ │ │ └── SelfHostedOrganizationSponsorshipsController.cs │ │ │ └── SettingsController.cs │ │ ├── Dirt/ │ │ │ ├── Controllers/ │ │ │ │ ├── EventsController.cs │ │ │ │ ├── HibpController.cs │ │ │ │ ├── OrganizationIntegrationConfigurationController.cs │ │ │ │ ├── OrganizationIntegrationController.cs │ │ │ │ ├── OrganizationReportsController.cs │ │ │ │ ├── ReportsController.cs │ │ │ │ ├── SlackIntegrationController.cs │ │ │ │ └── TeamsIntegrationController.cs │ │ │ ├── Models/ │ │ │ │ ├── PasswordHealthReportApplicationModel.cs │ │ │ │ ├── Request/ │ │ │ │ │ ├── OrganizationIntegrationConfigurationRequestModel.cs │ │ │ │ │ └── OrganizationIntegrationRequestModel.cs │ │ │ │ └── Response/ │ │ │ │ ├── EventResponseModel.cs │ │ │ │ ├── MemberAccessDetailReportResponseModel.cs │ │ │ │ ├── MemberAccessReportModel.cs │ │ │ │ ├── MemberCipherDetailsResponseModel.cs │ │ │ │ ├── OrganizationIntegrationConfigurationResponseModel.cs │ │ │ │ ├── OrganizationIntegrationResponseModel.cs │ │ │ │ ├── OrganizationReportResponseModel.cs │ │ │ │ └── OrganizationReportSummaryModel.cs │ │ │ └── Public/ │ │ │ ├── Controllers/ │ │ │ │ └── EventsController.cs │ │ │ └── Models/ │ │ │ ├── EventFilterRequestModel.cs │ │ │ └── EventResponseModel.cs │ │ ├── Dockerfile │ │ ├── Jobs/ │ │ │ ├── AliveJob.cs │ │ │ ├── JobsHostedService.cs │ │ │ ├── SelfHostedSponsorshipSyncJob.cs │ │ │ ├── ValidateOrganizationDomainJob.cs │ │ │ ├── ValidateOrganizationsJob.cs │ │ │ └── ValidateUsersJob.cs │ │ ├── KeyManagement/ │ │ │ ├── Controllers/ │ │ │ │ ├── AccountsKeyManagementController.cs │ │ │ │ └── UsersController.cs │ │ │ ├── Models/ │ │ │ │ ├── Requests/ │ │ │ │ │ ├── KeyConnectorEnrollmentRequestModel.cs │ │ │ │ │ ├── KeyRegenerationRequestModel.cs │ │ │ │ │ ├── RotateAccountKeysAndDataRequestModel.cs │ │ │ │ │ ├── SetKeyConnectorKeyRequestModel.cs │ │ │ │ │ ├── UnlockDataRequestModel.cs │ │ │ │ │ ├── UserDataRequestModel.cs │ │ │ │ │ └── V2UpgradeTokenRequestModel.cs │ │ │ │ └── Responses/ │ │ │ │ └── KeyConnectorConfirmationDetailsResponseModel.cs │ │ │ └── Validators/ │ │ │ ├── CipherRotationValidator.cs │ │ │ ├── DeviceRotationValidator.cs │ │ │ ├── EmergencyAccessRotationValidator.cs │ │ │ ├── FolderRotationValidator.cs │ │ │ ├── IRotationValidator.cs │ │ │ ├── OrganizationUserRotationValidator.cs │ │ │ ├── SendRotationValidator.cs │ │ │ └── WebAuthnLoginKeyRotationValidator.cs │ │ ├── Models/ │ │ │ ├── Public/ │ │ │ │ ├── CollectionBaseModel.cs │ │ │ │ ├── Request/ │ │ │ │ │ └── CollectionUpdateRequestModel.cs │ │ │ │ └── Response/ │ │ │ │ ├── CollectionResponseModel.cs │ │ │ │ ├── ErrorResponseModel.cs │ │ │ │ ├── IResponseModel.cs │ │ │ │ ├── ListResponseModel.cs │ │ │ │ └── PagedListResponseModel.cs │ │ │ ├── Request/ │ │ │ │ ├── Accounts/ │ │ │ │ │ ├── PremiumRequestModel.cs │ │ │ │ │ ├── StorageRequestModel.cs │ │ │ │ │ ├── TaxInfoUpdateRequestModel.cs │ │ │ │ │ └── UpdateAvatarRequestModel.cs │ │ │ │ ├── BulkCollectionAccessRequestModel.cs │ │ │ │ ├── CollectionRequestModel.cs │ │ │ │ ├── DeviceRequestModels.cs │ │ │ │ ├── DeviceVerificationRequestModel.cs │ │ │ │ ├── ExpandedTaxInfoUpdateRequestModel.cs │ │ │ │ ├── LicenseRequestModel.cs │ │ │ │ ├── Organizations/ │ │ │ │ │ ├── OrganizationCollectionManagementUpdateRequestModel.cs │ │ │ │ │ ├── OrganizationCreateLicenseRequestModel.cs │ │ │ │ │ ├── OrganizationSponsorshipCreateRequestModel.cs │ │ │ │ │ ├── OrganizationSponsorshipRedeemRequestModel.cs │ │ │ │ │ ├── OrganizationSubscriptionUpdateRequestModel.cs │ │ │ │ │ ├── OrganizationUserResetPasswordRequestModel.cs │ │ │ │ │ ├── SecretsManagerSubscribeRequestModel.cs │ │ │ │ │ └── SecretsManagerSubscriptionUpdateRequestModel.cs │ │ │ │ ├── PaymentRequestModel.cs │ │ │ │ ├── SelectionReadOnlyRequestModel.cs │ │ │ │ ├── SubscriptionCancellationRequestModel.cs │ │ │ │ └── UpdateDomainsRequestModel.cs │ │ │ └── Response/ │ │ │ ├── ApiKeyResponseModel.cs │ │ │ ├── CollectionResponseModel.cs │ │ │ ├── ConfigResponseModel.cs │ │ │ ├── DeviceResponseModel.cs │ │ │ ├── DeviceVerificationResponseModel.cs │ │ │ ├── DomainsResponseModel.cs │ │ │ ├── KeysResponseModel.cs │ │ │ ├── ListResponseModel.cs │ │ │ ├── Organizations/ │ │ │ │ └── OrganizationSponsorshipSyncStatusResponseModel.cs │ │ │ ├── PaymentResponseModel.cs │ │ │ ├── PlanResponseModel.cs │ │ │ ├── ProfileResponseModel.cs │ │ │ ├── SelectionReadOnlyResponseModel.cs │ │ │ ├── SubscriptionResponseModel.cs │ │ │ ├── TaxInfoResponseModel.cs │ │ │ └── UserKeyResponseModel.cs │ │ ├── NotificationCenter/ │ │ │ ├── Controllers/ │ │ │ │ └── NotificationsController.cs │ │ │ └── Models/ │ │ │ ├── Request/ │ │ │ │ └── NotificationFilterRequestModel.cs │ │ │ └── Response/ │ │ │ └── NotificationResponseModel.cs │ │ ├── Platform/ │ │ │ ├── Installations/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── InstallationsController.cs │ │ │ │ └── Models/ │ │ │ │ ├── InstallationRequestModel.cs │ │ │ │ └── InstallationResponseModel.cs │ │ │ ├── Push/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── PushController.cs │ │ │ │ └── PushTechnologyType.cs │ │ │ └── SsoCookieVendor/ │ │ │ └── Controllers/ │ │ │ └── SsoCookieVendorController.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Public/ │ │ │ └── Controllers/ │ │ │ └── CollectionsController.cs │ │ ├── SecretsManager/ │ │ │ ├── Controllers/ │ │ │ │ ├── AccessPoliciesController.cs │ │ │ │ ├── CountsController.cs │ │ │ │ ├── ProjectsController.cs │ │ │ │ ├── RequestSMAccessController.cs │ │ │ │ ├── SecretVersionsController.cs │ │ │ │ ├── SecretsController.cs │ │ │ │ ├── SecretsManagerEventsController.cs │ │ │ │ ├── SecretsManagerPortingController.cs │ │ │ │ ├── SecretsTrashController.cs │ │ │ │ └── ServiceAccountsController.cs │ │ │ ├── Jobs/ │ │ │ │ └── EmptySecretsManagerTrashJob.cs │ │ │ ├── Models/ │ │ │ │ ├── Request/ │ │ │ │ │ ├── AccessPolicyRequest.cs │ │ │ │ │ ├── AccessTokenCreateRequestModel.cs │ │ │ │ │ ├── GetSecretsRequestModel.cs │ │ │ │ │ ├── GrantedAccessPolicyRequest.cs │ │ │ │ │ ├── PeopleAccessPoliciesRequestModel.cs │ │ │ │ │ ├── ProjectCreateRequestModel.cs │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesRequestModel.cs │ │ │ │ │ ├── ProjectUpdateRequestModel.cs │ │ │ │ │ ├── RequestSMAccessRequestModel.cs │ │ │ │ │ ├── RestoreSecretVersionRequestModel.cs │ │ │ │ │ ├── RevokeAccessTokensRequest.cs │ │ │ │ │ ├── SMImportRequestModel.cs │ │ │ │ │ ├── SecretAccessPoliciesRequestsModel.cs │ │ │ │ │ ├── SecretCreateRequestModel.cs │ │ │ │ │ ├── SecretUpdateRequestModel.cs │ │ │ │ │ ├── SerivceAccountUpdateRequestModel.cs │ │ │ │ │ ├── ServiceAccountCreateRequestModel.cs │ │ │ │ │ └── ServiceAccountGrantedPoliciesRequestModel.cs │ │ │ │ └── Response/ │ │ │ │ ├── AccessPolicyResponseModel.cs │ │ │ │ ├── AccessTokenCreationResponseModel.cs │ │ │ │ ├── AccessTokenResponseModel.cs │ │ │ │ ├── BaseSecretResponseModel.cs │ │ │ │ ├── BulkDeleteResponseModel.cs │ │ │ │ ├── GrantedProjectAccessPolicyPermissionDetailsResponseModel.cs │ │ │ │ ├── OrganizationCountsResponseModel.cs │ │ │ │ ├── PotentialGranteeResponseModel.cs │ │ │ │ ├── ProjectCountsResponseModel.cs │ │ │ │ ├── ProjectPeopleAccessPoliciesResponseModel.cs │ │ │ │ ├── ProjectResponseModel.cs │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesResponseModel.cs │ │ │ │ ├── SMExportResponseModel.cs │ │ │ │ ├── SMImportResponseModel.cs │ │ │ │ ├── SecretAccessPoliciesResponseModel.cs │ │ │ │ ├── SecretResponseModel.cs │ │ │ │ ├── SecretVersionResponseModel.cs │ │ │ │ ├── SecretWithProjectsListResponseModel.cs │ │ │ │ ├── SecretsSyncResponseModel.cs │ │ │ │ ├── ServiceAccountCountsResponseModel.cs │ │ │ │ ├── ServiceAccountGrantedPoliciesPermissionDetailsResponseModel.cs │ │ │ │ ├── ServiceAccountPeopleAccessPoliciesResponseModel.cs │ │ │ │ └── ServiceAccountResponseModel.cs │ │ │ └── Utilities/ │ │ │ └── AccessPolicyHelpers.cs │ │ ├── Startup.cs │ │ ├── Tools/ │ │ │ ├── Authorization/ │ │ │ │ ├── VaultExportAuthorizationHandler.cs │ │ │ │ └── VaultExportOperations.cs │ │ │ ├── Controllers/ │ │ │ │ ├── ImportCiphersController.cs │ │ │ │ ├── OrganizationExportController.cs │ │ │ │ └── SendsController.cs │ │ │ ├── Models/ │ │ │ │ ├── Request/ │ │ │ │ │ ├── Accounts/ │ │ │ │ │ │ └── ImportCiphersRequestModel.cs │ │ │ │ │ ├── Organizations/ │ │ │ │ │ │ └── ImportOrganizationCiphersRequestModel.cs │ │ │ │ │ ├── SendAccessRequestModel.cs │ │ │ │ │ └── SendRequestModel.cs │ │ │ │ ├── Response/ │ │ │ │ │ ├── OrganizationExportResponseModel.cs │ │ │ │ │ ├── SendAccessResponseModel.cs │ │ │ │ │ ├── SendFileDownloadDataResponseModel.cs │ │ │ │ │ ├── SendFileUploadDataResponseModel.cs │ │ │ │ │ └── SendResponseModel.cs │ │ │ │ ├── SendFileModel.cs │ │ │ │ └── SendTextModel.cs │ │ │ └── Utilities/ │ │ │ └── InferAuthType.cs │ │ ├── Utilities/ │ │ │ ├── ApiExplorerGroupConvention.cs │ │ │ ├── ApiHelpers.cs │ │ │ ├── DiagnosticTools/ │ │ │ │ └── EventDiagnosticLogger.cs │ │ │ ├── DisableFormValueModelBindingAttribute.cs │ │ │ ├── EnumMatchesAttribute.cs │ │ │ ├── ExceptionHandlerFilterAttribute.cs │ │ │ ├── ModelStateValidationFilterAttribute.cs │ │ │ ├── MultipartFormDataHelper.cs │ │ │ ├── PublicApiControllersModelConvention.cs │ │ │ ├── ServiceCollectionExtensions.cs │ │ │ └── StringMatchesAttribute.cs │ │ ├── Vault/ │ │ │ ├── AuthorizationHandlers/ │ │ │ │ └── Collections/ │ │ │ │ ├── BulkCollectionAuthorizationHandler.cs │ │ │ │ ├── BulkCollectionOperations.cs │ │ │ │ ├── CollectionAuthorizationHandler.cs │ │ │ │ └── CollectionOperations.cs │ │ │ ├── Controllers/ │ │ │ │ ├── CiphersController.cs │ │ │ │ ├── FoldersController.cs │ │ │ │ ├── SecurityTaskController.cs │ │ │ │ └── SyncController.cs │ │ │ └── Models/ │ │ │ ├── CipherAttachmentModel.cs │ │ │ ├── CipherCardModel.cs │ │ │ ├── CipherFido2CredentialModel.cs │ │ │ ├── CipherFieldModel.cs │ │ │ ├── CipherIdentityModel.cs │ │ │ ├── CipherLoginModel.cs │ │ │ ├── CipherPasswordHistoryModel.cs │ │ │ ├── CipherSSHKeyModel.cs │ │ │ ├── CipherSecureNoteModel.cs │ │ │ ├── Request/ │ │ │ │ ├── AttachmentRequestModel.cs │ │ │ │ ├── BulkCreateSecurityTasksRequestModel.cs │ │ │ │ ├── CipherBulkUpdateCollectionsRequestModel.cs │ │ │ │ ├── CipherPartialRequestModel.cs │ │ │ │ ├── CipherRequestModel.cs │ │ │ │ └── FolderRequestModel.cs │ │ │ └── Response/ │ │ │ ├── AttachmentResponseModel.cs │ │ │ ├── AttachmentUploadDataResponseModel.cs │ │ │ ├── CipherPermissionsResponseModel.cs │ │ │ ├── CipherResponseModel.cs │ │ │ ├── DeleteAttachmentResponseModel.cs │ │ │ ├── FolderResponseModel.cs │ │ │ ├── OptionalCipherDetailsResponseModel.cs │ │ │ ├── SecurityTaskMetricsResponseModel.cs │ │ │ ├── SecurityTasksResponseModel.cs │ │ │ └── SyncResponseModel.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ ├── entrypoint.sh │ │ └── runtimeconfig.template.json │ ├── Billing/ │ │ ├── Billing.csproj │ │ ├── BillingSettings.cs │ │ ├── Constants/ │ │ │ ├── BitPayNotificationCode.cs │ │ │ ├── HandledStripeWebhook.cs │ │ │ ├── StripeInvoiceStatus.cs │ │ │ └── StripeSubscriptionStatus.cs │ │ ├── Controllers/ │ │ │ ├── AppleController.cs │ │ │ ├── BitPayController.cs │ │ │ ├── InfoController.cs │ │ │ ├── JobsController.cs │ │ │ ├── PayPalController.cs │ │ │ ├── RecoveryController.cs │ │ │ └── StripeController.cs │ │ ├── Dockerfile │ │ ├── Jobs/ │ │ │ ├── AliveJob.cs │ │ │ ├── JobsHostedService.cs │ │ │ ├── ProviderOrganizationDisableJob.cs │ │ │ ├── ReconcileAdditionalStorageJob.cs │ │ │ └── SubscriptionCancellationJob.cs │ │ ├── Models/ │ │ │ ├── BitPayEventModel.cs │ │ │ ├── LoginModel.cs │ │ │ ├── PayPalIPNTransactionModel.cs │ │ │ ├── Recovery/ │ │ │ │ ├── EventsRequestBody.cs │ │ │ │ └── EventsResponseBody.cs │ │ │ └── StripeWebhookDeliveryContainer.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ ├── IPayPalIPNClient.cs │ │ │ ├── IProviderEventService.cs │ │ │ ├── IPushNotificationAdapter.cs │ │ │ ├── IStripeEventProcessor.cs │ │ │ ├── IStripeEventService.cs │ │ │ ├── IStripeEventUtilityService.cs │ │ │ ├── IStripeFacade.cs │ │ │ ├── IStripeWebhookHandler.cs │ │ │ └── Implementations/ │ │ │ ├── ChargeRefundedHandler.cs │ │ │ ├── ChargeSucceededHandler.cs │ │ │ ├── CouponDeletedHandler.cs │ │ │ ├── CustomerUpdatedHandler.cs │ │ │ ├── InvoiceCreatedHandler.cs │ │ │ ├── InvoiceFinalizedHandler.cs │ │ │ ├── PayPalIPNClient.cs │ │ │ ├── PaymentFailedHandler.cs │ │ │ ├── PaymentMethodAttachedHandler.cs │ │ │ ├── PaymentSucceededHandler.cs │ │ │ ├── ProviderEventService.cs │ │ │ ├── PushNotificationAdapter.cs │ │ │ ├── SetupIntentSucceededHandler.cs │ │ │ ├── StripeEventProcessor.cs │ │ │ ├── StripeEventService.cs │ │ │ ├── StripeEventUtilityService.cs │ │ │ ├── StripeFacade.cs │ │ │ ├── SubscriptionDeletedHandler.cs │ │ │ ├── SubscriptionUpdatedHandler.cs │ │ │ └── UpcomingInvoiceHandler.cs │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ └── entrypoint.sh │ ├── Core/ │ │ ├── AdminConsole/ │ │ │ ├── AbilitiesCache/ │ │ │ │ ├── IApplicationCacheServiceBusMessaging.cs │ │ │ │ ├── IVCurrentInMemoryApplicationCacheService.cs │ │ │ │ ├── NoOpApplicationCacheMessaging.cs │ │ │ │ └── ServiceBusApplicationCacheMessaging.cs │ │ │ ├── Context/ │ │ │ │ ├── CurrentContextOrganization.cs │ │ │ │ └── CurrentContextProvider.cs │ │ │ ├── Entities/ │ │ │ │ ├── Group.cs │ │ │ │ ├── GroupUser.cs │ │ │ │ ├── Organization.cs │ │ │ │ ├── OrganizationUser.cs │ │ │ │ ├── Policy.cs │ │ │ │ └── Provider/ │ │ │ │ ├── Provider.cs │ │ │ │ ├── ProviderOrganization.cs │ │ │ │ └── ProviderUser.cs │ │ │ ├── Enums/ │ │ │ │ ├── OrganizationStatusType.cs │ │ │ │ ├── OrganizationUserStatusType.cs │ │ │ │ ├── OrganizationUserType.cs │ │ │ │ ├── PolicyType.cs │ │ │ │ ├── Provider/ │ │ │ │ │ ├── ProviderStatusType.cs │ │ │ │ │ ├── ProviderType.cs │ │ │ │ │ ├── ProviderUserStatusType.cs │ │ │ │ │ └── ProviderUserType.cs │ │ │ │ └── ScimProviderType.cs │ │ │ ├── Interfaces/ │ │ │ │ └── IOrganizationUser.cs │ │ │ ├── Models/ │ │ │ │ ├── Business/ │ │ │ │ │ ├── ImportedGroup.cs │ │ │ │ │ ├── ImportedOrganizationUser.cs │ │ │ │ │ ├── InviteOrganization.cs │ │ │ │ │ ├── OrganizationCollectionManagementSettings.cs │ │ │ │ │ ├── OrganizationUserInvite.cs │ │ │ │ │ ├── Provider/ │ │ │ │ │ │ └── ProviderUserInvite.cs │ │ │ │ │ └── Tokenables/ │ │ │ │ │ ├── OrgDeleteTokenable.cs │ │ │ │ │ └── ProviderDeleteTokenable.cs │ │ │ │ ├── Data/ │ │ │ │ │ ├── GroupWithCollections.cs │ │ │ │ │ ├── IActingUser.cs │ │ │ │ │ ├── IProfileOrganizationDetails.cs │ │ │ │ │ ├── OrganizationUsers/ │ │ │ │ │ │ └── AcceptedOrganizationUserToConfirm.cs │ │ │ │ │ ├── Organizations/ │ │ │ │ │ │ ├── OrganizationSubscriptionUpdate.cs │ │ │ │ │ │ ├── OrganizationUsers/ │ │ │ │ │ │ │ ├── OrganizationUserInviteData.cs │ │ │ │ │ │ │ ├── OrganizationUserOrganizationDetails.cs │ │ │ │ │ │ │ ├── OrganizationUserPolicyDetails.cs │ │ │ │ │ │ │ ├── OrganizationUserPublicKey.cs │ │ │ │ │ │ │ ├── OrganizationUserResetPasswordDetails.cs │ │ │ │ │ │ │ ├── OrganizationUserUserDetails.cs │ │ │ │ │ │ │ └── OrganizationUserWithCollections.cs │ │ │ │ │ │ ├── Policies/ │ │ │ │ │ │ │ ├── IPolicyDataModel.cs │ │ │ │ │ │ │ ├── MasterPasswordPolicyData.cs │ │ │ │ │ │ │ ├── OrganizationPolicyDetails.cs │ │ │ │ │ │ │ ├── PolicyDetails.cs │ │ │ │ │ │ │ ├── PolicyStatus.cs │ │ │ │ │ │ │ ├── ResetPasswordDataModel.cs │ │ │ │ │ │ │ └── SendOptionsPolicyData.cs │ │ │ │ │ │ └── SelfHostedOrganizationDetails.cs │ │ │ │ │ ├── Permissions.cs │ │ │ │ │ ├── Provider/ │ │ │ │ │ │ ├── ProviderAbility.cs │ │ │ │ │ │ ├── ProviderOrganizationOrganizationDetails.cs │ │ │ │ │ │ ├── ProviderOrganizationProviderDetails.cs │ │ │ │ │ │ ├── ProviderUserOrganizationDetails.cs │ │ │ │ │ │ ├── ProviderUserProviderDetails.cs │ │ │ │ │ │ ├── ProviderUserPublicKey.cs │ │ │ │ │ │ └── ProviderUserUserDetails.cs │ │ │ │ │ ├── StandardUser.cs │ │ │ │ │ └── SystemUser.cs │ │ │ │ ├── Mail/ │ │ │ │ │ ├── DeviceApprovalRequestedViewModel.cs │ │ │ │ │ └── Mailer/ │ │ │ │ │ ├── OrganizationConfirmation/ │ │ │ │ │ │ ├── OrganizationConfirmationBaseView.cs │ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.cs │ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.html.hbs │ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.text.hbs │ │ │ │ │ │ ├── OrganizationConfirmationFamilyFreeView.cs │ │ │ │ │ │ ├── OrganizationConfirmationFamilyFreeView.html.hbs │ │ │ │ │ │ └── OrganizationConfirmationFamilyFreeView.text.hbs │ │ │ │ │ ├── OrganizationInvite/ │ │ │ │ │ │ ├── OrganizationInviteBaseView.cs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.cs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.cs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.cs │ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.cs │ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteFreeView.cs │ │ │ │ │ │ ├── OrganizationInviteFreeView.html.hbs │ │ │ │ │ │ └── OrganizationInviteFreeView.text.hbs │ │ │ │ │ └── OrganizationUserAutoConfirmation/ │ │ │ │ │ ├── OrganizationAutoConfirmationEnabledView.cs │ │ │ │ │ ├── OrganizationAutoConfirmationEnabledView.html.hbs │ │ │ │ │ └── OrganizationAutoConfirmationEnabledView.text.hbs │ │ │ │ └── OrganizationConnectionConfigs/ │ │ │ │ └── ScimConfig.cs │ │ │ ├── OrganizationAuth/ │ │ │ │ ├── Interfaces/ │ │ │ │ │ └── IUpdateOrganizationAuthRequestCommand.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── ApprovedAuthRequestIsMissingKeyException.cs │ │ │ │ │ ├── AuthRequestUpdateCouldNotBeProcessedException.cs │ │ │ │ │ ├── AuthRequestUpdateProcessingException.cs │ │ │ │ │ ├── AuthRequestUpdateProcessor.cs │ │ │ │ │ ├── AuthRequestUpdateProcessorConfiguration.cs │ │ │ │ │ ├── BatchAuthRequestUpdateProcessor.cs │ │ │ │ │ └── OrganizationAuthRequestUpdate.cs │ │ │ │ └── UpdateOrganizationAuthRequestCommand.cs │ │ │ ├── OrganizationFeatures/ │ │ │ │ ├── AccountRecovery/ │ │ │ │ │ ├── AdminRecoverAccountCommand.cs │ │ │ │ │ └── IAdminRecoverAccountCommand.cs │ │ │ │ ├── Collections/ │ │ │ │ │ └── CollectionUtils.cs │ │ │ │ ├── Groups/ │ │ │ │ │ ├── Authorization/ │ │ │ │ │ │ ├── GroupAuthorizationHandler.cs │ │ │ │ │ │ └── GroupOperations.cs │ │ │ │ │ ├── CreateGroupCommand.cs │ │ │ │ │ ├── DeleteGroupCommand.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ICreateGroupCommand.cs │ │ │ │ │ │ ├── IDeleteGroupCommand.cs │ │ │ │ │ │ └── IUpdateGroupCommand.cs │ │ │ │ │ └── UpdateGroupCommand.cs │ │ │ │ ├── Import/ │ │ │ │ │ ├── IImportOrganizationUserAndGroupsCommand.cs │ │ │ │ │ ├── ImportOrganizationUsersAndGroupsCommand.cs │ │ │ │ │ ├── OrganizationGroupImportData.cs │ │ │ │ │ └── OrganizationUserImportData.cs │ │ │ │ ├── OrganizationAbility/ │ │ │ │ │ ├── OrganizationAbility.cs │ │ │ │ │ └── README.md │ │ │ │ ├── OrganizationApiKeys/ │ │ │ │ │ ├── CreateOrganizationApiKeyCommand.cs │ │ │ │ │ ├── GetOrganizationApiKeyQuery.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ICreateOrganizationApiKeyCommand.cs │ │ │ │ │ │ ├── IGetOrganizationApiKeyQuery.cs │ │ │ │ │ │ └── IRotateOrganizationApiKeyCommand.cs │ │ │ │ │ └── RotateOrganizationApiKeyCommand.cs │ │ │ │ ├── OrganizationConnections/ │ │ │ │ │ ├── CreateOrganizationConnectionCommand.cs │ │ │ │ │ ├── DeleteOrganizationConnectionCommand.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ICreateOrganizationConnectionCommand.cs │ │ │ │ │ │ ├── IDeleteOrganizationConnectionCommand.cs │ │ │ │ │ │ ├── IUpdateOrganizationConnectionCommand.cs │ │ │ │ │ │ └── IValidateBillingSyncKeyCommand.cs │ │ │ │ │ ├── UpdateOrganizationConnectionCommand.cs │ │ │ │ │ └── ValidateBillingSyncKeyCommand.cs │ │ │ │ ├── OrganizationDomains/ │ │ │ │ │ ├── CreateOrganizationDomainCommand.cs │ │ │ │ │ ├── DeleteOrganizationDomainCommand.cs │ │ │ │ │ ├── GetOrganizationDomainByIdOrganizationIdQuery.cs │ │ │ │ │ ├── GetOrganizationDomainByOrganizationIdQuery.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ICreateOrganizationDomainCommand.cs │ │ │ │ │ │ ├── IDeleteOrganizationDomainCommand.cs │ │ │ │ │ │ ├── IGetOrganizationDomainByIdOrganizationIdQuery.cs │ │ │ │ │ │ ├── IGetOrganizationDomainByOrganizationIdQuery.cs │ │ │ │ │ │ ├── IOrganizationHasVerifiedDomainsQuery.cs │ │ │ │ │ │ └── IVerifyOrganizationDomainCommand.cs │ │ │ │ │ ├── OrganizationHasVerifiedDomainsQuery.cs │ │ │ │ │ └── VerifyOrganizationDomainCommand.cs │ │ │ │ ├── OrganizationUsers/ │ │ │ │ │ ├── AcceptOrgUserCommand.cs │ │ │ │ │ ├── Authorization/ │ │ │ │ │ │ ├── OrganizationUserUserDetailsAuthorizationHandler.cs │ │ │ │ │ │ ├── OrganizationUserUserDetailsOperations.cs │ │ │ │ │ │ └── OrganizationUserUserMiniDetailsOperations.cs │ │ │ │ │ ├── AutoConfirmUser/ │ │ │ │ │ │ ├── AutomaticallyConfirmOrganizationUserCommand.cs │ │ │ │ │ │ ├── AutomaticallyConfirmOrganizationUserRequest.cs │ │ │ │ │ │ ├── AutomaticallyConfirmOrganizationUsersValidator.cs │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ ├── IAutomaticallyConfirmOrganizationUsersValidator.cs │ │ │ │ │ │ ├── OrganizationAutoConfirmEnabledNotificationCommand.cs │ │ │ │ │ │ └── README.md │ │ │ │ │ ├── ConfirmOrganizationUserCommand.cs │ │ │ │ │ ├── CountNewSmSeatsRequiredQuery.cs │ │ │ │ │ ├── DeleteClaimedAccount/ │ │ │ │ │ │ ├── DeleteClaimedOrganizationUserAccountCommand.cs │ │ │ │ │ │ ├── DeleteClaimedOrganizationUserAccountValidator.cs │ │ │ │ │ │ ├── DeleteUserValidationRequest.cs │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ ├── IDeleteClaimedOrganizationUserAccountCommand.cs │ │ │ │ │ │ └── IDeleteClaimedOrganizationUserAccountValidator.cs │ │ │ │ │ ├── GetOrganizationUsersClaimedStatusQuery.cs │ │ │ │ │ ├── HasConfirmedOwnersExceptQuery.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── IAcceptOrgUserCommand.cs │ │ │ │ │ │ ├── IAutomaticallyConfirmOrganizationUserCommand.cs │ │ │ │ │ │ ├── IConfirmOrganizationUserCommand.cs │ │ │ │ │ │ ├── ICountNewSmSeatsRequiredQuery.cs │ │ │ │ │ │ ├── IGetOrganizationUsersClaimedStatusQuery.cs │ │ │ │ │ │ ├── IHasConfirmedOwnersExceptQuery.cs │ │ │ │ │ │ ├── IOrganizationUserUserDetailsQuery.cs │ │ │ │ │ │ ├── IPushAutoConfirmNotificationCommand.cs │ │ │ │ │ │ ├── IRemoveOrganizationUserCommand.cs │ │ │ │ │ │ ├── IRevokeNonCompliantOrganizationUserCommand.cs │ │ │ │ │ │ ├── IUpdateOrganizationUserCommand.cs │ │ │ │ │ │ └── IUpdateOrganizationUserGroupsCommand.cs │ │ │ │ │ ├── InviteUsers/ │ │ │ │ │ │ ├── BulkResendOrganizationInvitesCommand.cs │ │ │ │ │ │ ├── Errors/ │ │ │ │ │ │ │ ├── ErrorMapper.cs │ │ │ │ │ │ │ ├── FailedToInviteUsersError.cs │ │ │ │ │ │ │ ├── NoUsersToInviteError.cs │ │ │ │ │ │ │ └── UserAlreadyExistsError.cs │ │ │ │ │ │ ├── IBulkResendOrganizationInvitesCommand.cs │ │ │ │ │ │ ├── IInviteOrganizationUsersCommand.cs │ │ │ │ │ │ ├── IResendOrganizationInviteCommand.cs │ │ │ │ │ │ ├── ISendOrganizationInvitesCommand.cs │ │ │ │ │ │ ├── InviteOrganizationUsersCommand.cs │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── CreateOrganizationUser.cs │ │ │ │ │ │ │ ├── CreateOrganizationUserExtensions.cs │ │ │ │ │ │ │ ├── InviteOrganizationUserErrorMessages.cs │ │ │ │ │ │ │ ├── InviteOrganizationUsersRequest.cs │ │ │ │ │ │ │ ├── InviteOrganizationUsersResponse.cs │ │ │ │ │ │ │ ├── InviteOrganizationUsersValidationRequest.cs │ │ │ │ │ │ │ ├── OrganizationUserInviteCommandModel.cs │ │ │ │ │ │ │ └── SendInvitesRequest.cs │ │ │ │ │ │ ├── ResendOrganizationInviteCommand.cs │ │ │ │ │ │ ├── SendOrganizationInvitesCommand.cs │ │ │ │ │ │ └── Validation/ │ │ │ │ │ │ ├── CollectionAccessSelectionExtensions.cs │ │ │ │ │ │ ├── GlobalSettings/ │ │ │ │ │ │ │ ├── CannotAutoScaleOnSelfHostError.cs │ │ │ │ │ │ │ ├── EnvironmentRequest.cs │ │ │ │ │ │ │ └── InviteUsersEnvironmentValidator.cs │ │ │ │ │ │ ├── InviteOrganizationUserValidator.cs │ │ │ │ │ │ ├── Organization/ │ │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ │ └── InviteUsersOrganizationValidator.cs │ │ │ │ │ │ ├── PasswordManager/ │ │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ │ ├── InviteUsersPasswordManagerValidator.cs │ │ │ │ │ │ │ └── PasswordManagerSubscriptionUpdate.cs │ │ │ │ │ │ ├── Payments/ │ │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ │ ├── InviteUserPaymentValidation.cs │ │ │ │ │ │ │ └── PaymentsSubscription.cs │ │ │ │ │ │ └── Provider/ │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ ├── InviteOrganizationProvider.cs │ │ │ │ │ │ └── InvitingUserOrganizationProviderValidator.cs │ │ │ │ │ ├── OrganizationConfirmation/ │ │ │ │ │ │ ├── ISendOrganizationConfirmationCommand.cs │ │ │ │ │ │ └── SendOrganizationConfirmationCommand.cs │ │ │ │ │ ├── OrganizationUserUserDetailsQuery.cs │ │ │ │ │ ├── PushAutoConfirmNotificationCommand.cs │ │ │ │ │ ├── RemoveOrganizationUserCommand.cs │ │ │ │ │ ├── Requests/ │ │ │ │ │ │ ├── OrganizationUserUserDetailsQueryRequest.cs │ │ │ │ │ │ └── RevokeOrganizationUserRequest.cs │ │ │ │ │ ├── RestoreUser/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ ├── IRestoreOrganizationUserCommand.cs │ │ │ │ │ │ └── RestoreOrganizationUserCommand.cs │ │ │ │ │ ├── RevokeNonCompliantOrganizationUserCommand.cs │ │ │ │ │ ├── RevokeUser/ │ │ │ │ │ │ ├── v1/ │ │ │ │ │ │ │ ├── IRevokeOrganizationUserCommand.cs │ │ │ │ │ │ │ └── RevokeOrganizationUserCommand.cs │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ ├── IRevokeOrganizationUserCommand.cs │ │ │ │ │ │ ├── IRevokeOrganizationUserValidator.cs │ │ │ │ │ │ ├── RevokeOrganizationUserCommand.cs │ │ │ │ │ │ ├── RevokeOrganizationUsersRequest.cs │ │ │ │ │ │ └── RevokeOrganizationUsersValidator.cs │ │ │ │ │ ├── SelfRevokeUser/ │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ ├── ISelfRevokeOrganizationUserCommand.cs │ │ │ │ │ │ └── SelfRevokeOrganizationUserCommand.cs │ │ │ │ │ ├── UpdateOrganizationUserCommand.cs │ │ │ │ │ └── UpdateOrganizationUserGroupsCommand.cs │ │ │ │ ├── Organizations/ │ │ │ │ │ ├── BulkUpdateOrganizationSubscriptionsCommand.cs │ │ │ │ │ ├── CloudOrganizationSignUpCommand.cs │ │ │ │ │ ├── Errors.cs │ │ │ │ │ ├── GetOrganizationSubscriptionsToUpdateQuery.cs │ │ │ │ │ ├── InitPendingOrganizationCommand.cs │ │ │ │ │ ├── InitPendingOrganizationRequest.cs │ │ │ │ │ ├── InitPendingOrganizationValidator.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── IBulkUpdateOrganizationSubscriptionsCommand.cs │ │ │ │ │ │ ├── IGetOrganizationSubscriptionsToUpdateQuery.cs │ │ │ │ │ │ ├── IInitPendingOrganizationCommand.cs │ │ │ │ │ │ ├── IOrganizationDeleteCommand.cs │ │ │ │ │ │ ├── IOrganizationDisableCommand.cs │ │ │ │ │ │ ├── IOrganizationEnableCommand.cs │ │ │ │ │ │ ├── IOrganizationInitiateDeleteCommand.cs │ │ │ │ │ │ ├── IOrganizationUpdateCommand.cs │ │ │ │ │ │ ├── IOrganizationUpdateKeysCommand.cs │ │ │ │ │ │ └── ISelfHostedOrganizationSignUpCommand.cs │ │ │ │ │ ├── OrganizationDeleteCommand.cs │ │ │ │ │ ├── OrganizationDisableCommand.cs │ │ │ │ │ ├── OrganizationEnableCommand.cs │ │ │ │ │ ├── OrganizationExtensions.cs │ │ │ │ │ ├── OrganizationInitiateDeleteCommand.cs │ │ │ │ │ ├── OrganizationUpdateKeysCommand.cs │ │ │ │ │ ├── ProviderClientOrganizationSignUpCommand.cs │ │ │ │ │ ├── ResellerClientOrganizationSignUpCommand.cs │ │ │ │ │ ├── SelfHostedOrganizationSignUpCommand.cs │ │ │ │ │ └── Update/ │ │ │ │ │ ├── OrganizationUpdateCommand.cs │ │ │ │ │ └── OrganizationUpdateRequest.cs │ │ │ │ ├── Policies/ │ │ │ │ │ ├── Enforcement/ │ │ │ │ │ │ └── AutoConfirm/ │ │ │ │ │ │ ├── AutomaticUserConfirmationOrganizationPolicyComplianceValidator.cs │ │ │ │ │ │ ├── AutomaticUserConfirmationOrganizationPolicyComplianceValidatorRequest.cs │ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyEnforcementRequest.cs │ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyEnforcementValidator.cs │ │ │ │ │ │ ├── Errors.cs │ │ │ │ │ │ ├── IAutomaticUserConfirmationOrganizationPolicyComplianceValidator.cs │ │ │ │ │ │ └── IAutomaticUserConfirmationPolicyEnforcementValidator.cs │ │ │ │ │ ├── IPolicyQuery.cs │ │ │ │ │ ├── IPolicyRequirementQuery.cs │ │ │ │ │ ├── IPolicyValidator.cs │ │ │ │ │ ├── IPostSavePolicySideEffect.cs │ │ │ │ │ ├── ISavePolicyCommand.cs │ │ │ │ │ ├── Implementations/ │ │ │ │ │ │ ├── PolicyQuery.cs │ │ │ │ │ │ ├── PolicyRequirementQuery.cs │ │ │ │ │ │ ├── SavePolicyCommand.cs │ │ │ │ │ │ └── VNextSavePolicyCommand.cs │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── EmptyMetadataModel.cs │ │ │ │ │ │ ├── IPolicyMetadataModel.cs │ │ │ │ │ │ ├── OrganizationModelOwnershipPolicyModel.cs │ │ │ │ │ │ ├── PolicyUpdate.cs │ │ │ │ │ │ └── SavePolicyModel.cs │ │ │ │ │ ├── PolicyRequirements/ │ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyRequirement.cs │ │ │ │ │ │ ├── BasePolicyRequirementFactory.cs │ │ │ │ │ │ ├── DisableSendPolicyRequirement.cs │ │ │ │ │ │ ├── Errors/ │ │ │ │ │ │ │ └── SingleOrganizationPolicyErrors.cs │ │ │ │ │ │ ├── IPolicyRequirement.cs │ │ │ │ │ │ ├── IPolicyRequirementFactory.cs │ │ │ │ │ │ ├── OrganizationDataOwnershipPolicyRequirement.cs │ │ │ │ │ │ ├── PolicyRequirementHelpers.cs │ │ │ │ │ │ ├── RequireSsoPolicyRequirement.cs │ │ │ │ │ │ ├── RequireTwoFactorPolicyRequirement.cs │ │ │ │ │ │ ├── ResetPasswordPolicyRequirement.cs │ │ │ │ │ │ ├── SendOptionsPolicyRequirement.cs │ │ │ │ │ │ └── SingleOrganizationPolicyRequirement.cs │ │ │ │ │ ├── PolicyServiceCollectionExtensions.cs │ │ │ │ │ ├── PolicyUpdateEvents/ │ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ │ ├── IEnforceDependentPoliciesEvent.cs │ │ │ │ │ │ │ ├── IOnPolicyPostUpdateEvent.cs │ │ │ │ │ │ │ ├── IOnPolicyPreUpdateEvent.cs │ │ │ │ │ │ │ ├── IPolicyEventHandlerFactory.cs │ │ │ │ │ │ │ ├── IPolicyUpdateEvent.cs │ │ │ │ │ │ │ ├── IPolicyValidationEvent.cs │ │ │ │ │ │ │ └── IVNextSavePolicyCommand.cs │ │ │ │ │ │ └── PolicyEventHandlerHandlerFactory.cs │ │ │ │ │ └── PolicyValidators/ │ │ │ │ │ ├── AutomaticUserConfirmationPolicyEventHandler.cs │ │ │ │ │ ├── BlockClaimedDomainAccountCreationPolicyValidator.cs │ │ │ │ │ ├── FreeFamiliesForEnterprisePolicyValidator.cs │ │ │ │ │ ├── MaximumVaultTimeoutPolicyValidator.cs │ │ │ │ │ ├── OrganizationDataOwnershipPolicyValidator.cs │ │ │ │ │ ├── OrganizationPolicyValidator.cs │ │ │ │ │ ├── PolicyValidatorHelpers.cs │ │ │ │ │ ├── RequireSsoPolicyValidator.cs │ │ │ │ │ ├── ResetPasswordPolicyValidator.cs │ │ │ │ │ ├── SingleOrgPolicyValidator.cs │ │ │ │ │ ├── TwoFactorAuthenticationPolicyValidator.cs │ │ │ │ │ └── UriMatchDefaultPolicyValidator.cs │ │ │ │ └── Shared/ │ │ │ │ └── Authorization/ │ │ │ │ └── OrganizationScope.cs │ │ │ ├── Providers/ │ │ │ │ └── Interfaces/ │ │ │ │ ├── ICreateProviderCommand.cs │ │ │ │ └── IRemoveOrganizationFromProviderCommand.cs │ │ │ ├── Repositories/ │ │ │ │ ├── IGroupRepository.cs │ │ │ │ ├── IOrganizationRepository.cs │ │ │ │ ├── IOrganizationUserRepository.cs │ │ │ │ ├── IPolicyRepository.cs │ │ │ │ ├── IProviderOrganizationRepository.cs │ │ │ │ ├── IProviderRepository.cs │ │ │ │ └── IProviderUserRepository.cs │ │ │ ├── Services/ │ │ │ │ ├── IEventService.cs │ │ │ │ ├── IGroupService.cs │ │ │ │ ├── IOrganizationDomainService.cs │ │ │ │ ├── IOrganizationService.cs │ │ │ │ ├── IPolicyService.cs │ │ │ │ ├── IProviderService.cs │ │ │ │ ├── Implementations/ │ │ │ │ │ ├── GroupService.cs │ │ │ │ │ ├── OrganizationDomainService.cs │ │ │ │ │ ├── OrganizationService.cs │ │ │ │ │ └── PolicyService.cs │ │ │ │ ├── NoopImplementations/ │ │ │ │ │ └── NoopProviderService.cs │ │ │ │ └── OrganizationFactory.cs │ │ │ └── Utilities/ │ │ │ ├── Commands/ │ │ │ │ └── CommandResult.cs │ │ │ ├── DebuggingInstruments/ │ │ │ │ └── UserInviteDebuggingLogger.cs │ │ │ ├── Errors/ │ │ │ │ ├── Error.cs │ │ │ │ ├── InsufficientPermissionsError.cs │ │ │ │ ├── InvalidResultTypeError.cs │ │ │ │ └── RecordNotFoundError.cs │ │ │ ├── IntegrationTemplateProcessor.cs │ │ │ ├── PolicyDataValidator.cs │ │ │ ├── Validation/ │ │ │ │ ├── IValidator.cs │ │ │ │ └── ValidationResult.cs │ │ │ └── v2/ │ │ │ ├── Errors.cs │ │ │ ├── Results/ │ │ │ │ └── CommandResult.cs │ │ │ └── Validation/ │ │ │ └── ValidationResult.cs │ │ ├── AssemblyInfo.cs │ │ ├── Auth/ │ │ │ ├── Attributes/ │ │ │ │ └── MarketingInitiativeValidationAttribute.cs │ │ │ ├── Entities/ │ │ │ │ ├── AuthRequest.cs │ │ │ │ ├── EmergencyAccess.cs │ │ │ │ ├── Grant.cs │ │ │ │ ├── SsoConfig.cs │ │ │ │ ├── SsoUser.cs │ │ │ │ └── WebAuthnCredential.cs │ │ │ ├── Enums/ │ │ │ │ ├── AuthRequestType.cs │ │ │ │ ├── EmergencyAccessStatusType.cs │ │ │ │ ├── EmergencyAccessType.cs │ │ │ │ ├── MemberDecryptionType.cs │ │ │ │ ├── Saml2BindingType.cs │ │ │ │ ├── Saml2NameIdFormat.cs │ │ │ │ ├── Saml2SigningBehavior.cs │ │ │ │ ├── SsoType.cs │ │ │ │ ├── TwoFactorEmailPurpose.cs │ │ │ │ ├── TwoFactorProviderType.cs │ │ │ │ ├── WebAuthnLoginAssertionOptionsScope.cs │ │ │ │ └── WebAuthnPrfStatus.cs │ │ │ ├── Exceptions/ │ │ │ │ └── DuplicateAuthRequestException.cs │ │ │ ├── Identity/ │ │ │ │ ├── Claims.cs │ │ │ │ ├── CustomIdentityServiceCollectionExtensions.cs │ │ │ │ ├── IdentityClientType.cs │ │ │ │ ├── LowerInvariantLookupNormalizer.cs │ │ │ │ ├── Policies.cs │ │ │ │ ├── RoleStore.cs │ │ │ │ ├── TokenProviders/ │ │ │ │ │ ├── AuthenticatorTokenProvider.cs │ │ │ │ │ ├── DuoUniversalTokenProvider.cs │ │ │ │ │ ├── DuoUniversalTokenService.cs │ │ │ │ │ ├── EmailTokenProvider.cs │ │ │ │ │ ├── EmailTwoFactorTokenProvider.cs │ │ │ │ │ ├── IOrganizationTwoFactorTokenProvider.cs │ │ │ │ │ ├── OrganizationDuoUniversalTokenProvider.cs │ │ │ │ │ ├── OtpTokenProvider/ │ │ │ │ │ │ ├── IOtpTokenProvider.cs │ │ │ │ │ │ ├── OtpTokenProvider.cs │ │ │ │ │ │ ├── OtpTokenProviderOptions.cs │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── TwoFactorRememberTokenProvider.cs │ │ │ │ │ ├── WebAuthnTokenProvider.cs │ │ │ │ │ └── YubicoOtpTokenProvider.cs │ │ │ │ └── UserStore.cs │ │ │ ├── IdentityServer/ │ │ │ │ ├── ApiScopes.cs │ │ │ │ ├── ConfigureOpenIdConnectDistributedOptions.cs │ │ │ │ ├── DistributedCacheCookieManager.cs │ │ │ │ ├── DistributedCacheTicketDataFormatter.cs │ │ │ │ ├── DistributedCacheTicketStore.cs │ │ │ │ └── TokenRetrieval.cs │ │ │ ├── Models/ │ │ │ │ ├── Api/ │ │ │ │ │ ├── Request/ │ │ │ │ │ │ ├── Accounts/ │ │ │ │ │ │ │ ├── KeysRequestModel.cs │ │ │ │ │ │ │ ├── MarketingInitiativeConstants.cs │ │ │ │ │ │ │ ├── RegisterFinishRequestModel.cs │ │ │ │ │ │ │ ├── RegisterSendVerificationEmailRequestModel.cs │ │ │ │ │ │ │ └── RegisterVerificationEmailClickedRequestModel.cs │ │ │ │ │ │ ├── AuthRequest/ │ │ │ │ │ │ │ ├── AuthRequestCreateRequestModel.cs │ │ │ │ │ │ │ └── AuthRequestUpdateRequestModel.cs │ │ │ │ │ │ └── DeviceKeysUpdateRequestModel.cs │ │ │ │ │ └── Response/ │ │ │ │ │ ├── Accounts/ │ │ │ │ │ │ └── WebAuthnLoginAssertionOptionsResponseModel.cs │ │ │ │ │ ├── DeviceAuthRequestResponseModel.cs │ │ │ │ │ ├── ProtectedDeviceResponseModel.cs │ │ │ │ │ └── UserDecryptionOptions.cs │ │ │ │ ├── Business/ │ │ │ │ │ ├── ExpiringToken.cs │ │ │ │ │ └── Tokenables/ │ │ │ │ │ ├── DuoUserStateTokenable.cs │ │ │ │ │ ├── EmergencyAccessInviteTokenable.cs │ │ │ │ │ ├── IOrgUserInviteTokenableFactory.cs │ │ │ │ │ ├── OrgUserInviteTokenable.cs │ │ │ │ │ ├── OrgUserInviteTokenableFactory.cs │ │ │ │ │ ├── RegistrationEmailVerificationTokenable.cs │ │ │ │ │ ├── SsoEmail2faSessionTokenable.cs │ │ │ │ │ ├── SsoTokenable.cs │ │ │ │ │ ├── TwoFactorAuthenticatorUserVerificationTokenable.cs │ │ │ │ │ ├── WebAuthnCredentialCreateOptionsTokenable.cs │ │ │ │ │ └── WebAuthnLoginAssertionOptionsTokenable.cs │ │ │ │ ├── Data/ │ │ │ │ │ ├── DeviceAuthDetails.cs │ │ │ │ │ ├── EmergencyAccessDetails.cs │ │ │ │ │ ├── EmergencyAccessNotify.cs │ │ │ │ │ ├── EmergencyAccessViewData.cs │ │ │ │ │ ├── GrantItem.cs │ │ │ │ │ ├── IGrant.cs │ │ │ │ │ ├── OrganizationAdminAuthRequest.cs │ │ │ │ │ ├── PendingAuthRequestDetails.cs │ │ │ │ │ ├── SetInitialMasterPasswordDataModel.cs │ │ │ │ │ ├── SsoConfigurationData.cs │ │ │ │ │ └── WebAuthnLoginRotateKeyData.cs │ │ │ │ ├── ITwoFactorProvidersUser.cs │ │ │ │ ├── Mail/ │ │ │ │ │ ├── CannotDeleteClaimedAccountViewModel.cs │ │ │ │ │ ├── EmergencyAccessAcceptedViewModel.cs │ │ │ │ │ ├── EmergencyAccessApprovedViewModel.cs │ │ │ │ │ ├── EmergencyAccessConfirmedViewModel.cs │ │ │ │ │ ├── EmergencyAccessInvitedViewModel.cs │ │ │ │ │ ├── EmergencyAccessRecoveryTimedOutViewModel.cs │ │ │ │ │ ├── EmergencyAccessRecoveryViewModel.cs │ │ │ │ │ ├── EmergencyAccessRejectedViewModel.cs │ │ │ │ │ ├── FailedAuthAttemptModel.cs │ │ │ │ │ ├── MasterPasswordHintViewModel.cs │ │ │ │ │ ├── PasswordlessSignInModel.cs │ │ │ │ │ ├── RecoverTwoFactorModel.cs │ │ │ │ │ ├── RegisterVerifyEmail.cs │ │ │ │ │ ├── VerifyDeleteModel.cs │ │ │ │ │ └── VerifyEmailModel.cs │ │ │ │ └── TwoFactorProvider.cs │ │ │ ├── Repositories/ │ │ │ │ ├── Cosmos/ │ │ │ │ │ ├── Base64IdStringConverter.cs │ │ │ │ │ └── GrantRepository.cs │ │ │ │ ├── IAuthRequestRepository.cs │ │ │ │ ├── IEmergencyAccessRepository.cs │ │ │ │ ├── IGrantRepository.cs │ │ │ │ ├── ISsoConfigRepository.cs │ │ │ │ ├── ISsoUserRepository.cs │ │ │ │ └── IWebAuthnCredentialRepository.cs │ │ │ ├── Services/ │ │ │ │ ├── IAuthRequestService.cs │ │ │ │ ├── ISsoConfigService.cs │ │ │ │ ├── ITwoFactorEmailService.cs │ │ │ │ └── Implementations/ │ │ │ │ ├── AuthRequestService.cs │ │ │ │ ├── SsoConfigService.cs │ │ │ │ └── TwoFactorEmailService.cs │ │ │ ├── Settings/ │ │ │ │ ├── IPasswordlessAuthSettings.cs │ │ │ │ └── ISsoSettings.cs │ │ │ ├── Sso/ │ │ │ │ ├── IUserSsoOrganizationIdentifierQuery.cs │ │ │ │ ├── SamlSigningAlgorithms.cs │ │ │ │ └── UserSsoOrganizationIdentifierQuery.cs │ │ │ ├── UserFeatures/ │ │ │ │ ├── DeviceTrust/ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ └── IUntrustDevicesCommand.cs │ │ │ │ │ └── UntrustDevicesCommand.cs │ │ │ │ ├── EmergencyAccess/ │ │ │ │ │ ├── Commands/ │ │ │ │ │ │ └── DeleteEmergencyAccessCommand.cs │ │ │ │ │ ├── EmergencyAccessService.cs │ │ │ │ │ ├── IEmergencyAccessService.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ └── IDeleteEmergencyAccessCommand.cs │ │ │ │ │ ├── Mail/ │ │ │ │ │ │ ├── EmergencyAccessRemoveGranteesMailView.cs │ │ │ │ │ │ ├── EmergencyAccessRemoveGranteesMailView.html.hbs │ │ │ │ │ │ └── EmergencyAccessRemoveGranteesMailView.text.hbs │ │ │ │ │ └── readme.md │ │ │ │ ├── PasswordValidation/ │ │ │ │ │ └── PasswordValidationConstants.cs │ │ │ │ ├── Registration/ │ │ │ │ │ ├── IRegisterUserCommand.cs │ │ │ │ │ ├── ISendVerificationEmailForRegistrationCommand.cs │ │ │ │ │ └── Implementations/ │ │ │ │ │ ├── RegisterUserCommand.cs │ │ │ │ │ └── SendVerificationEmailForRegistrationCommand.cs │ │ │ │ ├── SendAccess/ │ │ │ │ │ └── SendAccessClaimsPrincipalExtensions.cs │ │ │ │ ├── TdeOffboardingPassword/ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ └── ITdeOffboardingPasswordCommand.cs │ │ │ │ │ └── TdeOffboardingPasswordCommand.cs │ │ │ │ ├── TwoFactorAuth/ │ │ │ │ │ ├── ICompleteTwoFactorWebAuthnRegistrationCommand.cs │ │ │ │ │ ├── IDeleteTwoFactorWebAuthnCredentialCommand.cs │ │ │ │ │ ├── IStartTwoFactorWebAuthnRegistrationCommand.cs │ │ │ │ │ ├── ITwoFactorIsEnabledQuery.cs │ │ │ │ │ └── Implementations/ │ │ │ │ │ ├── CompleteTwoFactorWebAuthnRegistrationCommand.cs │ │ │ │ │ ├── DeleteTwoFactorWebAuthnCredentialCommand.cs │ │ │ │ │ ├── StartTwoFactorWebAuthnRegistrationCommand.cs │ │ │ │ │ └── TwoFactorIsEnabledQuery.cs │ │ │ │ ├── UserMasterPassword/ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ISetInitialMasterPasswordCommand.cs │ │ │ │ │ │ ├── ISetInitialMasterPasswordCommandV1.cs │ │ │ │ │ │ └── ITdeSetPasswordCommand.cs │ │ │ │ │ ├── SetInitialMasterPasswordCommand.cs │ │ │ │ │ ├── SetInitialMasterPasswordCommandV1.cs │ │ │ │ │ └── TdeSetPasswordCommand.cs │ │ │ │ ├── UserServiceCollectionExtensions.cs │ │ │ │ └── WebAuthnLogin/ │ │ │ │ ├── IAssertWebAuthnLoginCredentialCommand.cs │ │ │ │ ├── ICreateWebAuthnLoginCredentialCommand.cs │ │ │ │ ├── IGetWebAuthnLoginCredentialAssertionOptionsCommand.cs │ │ │ │ ├── IGetWebAuthnLoginCredentialCreateOptionsCommand.cs │ │ │ │ └── Implementations/ │ │ │ │ ├── AssertWebAuthnLoginCredentialCommand.cs │ │ │ │ ├── CreateWebAuthnLoginCredentialCommand.cs │ │ │ │ ├── GetWebAuthnLoginCredentialAssertionOptionsCommand.cs │ │ │ │ └── GetWebAuthnLoginCredentialCreateOptionsCommand.cs │ │ │ └── Utilities/ │ │ │ ├── DeviceExtensions.cs │ │ │ └── GuidUtilities.cs │ │ ├── Billing/ │ │ │ ├── BillingException.cs │ │ │ ├── Commands/ │ │ │ │ ├── BaseBillingCommand.cs │ │ │ │ └── BillingCommandResult.cs │ │ │ ├── Constants/ │ │ │ │ ├── BitPayConstants.cs │ │ │ │ ├── PlanConstants.cs │ │ │ │ └── StripeConstants.cs │ │ │ ├── Enums/ │ │ │ │ ├── DiscountAudienceType.cs │ │ │ │ ├── DiscountTierType.cs │ │ │ │ ├── PlanCadenceType.cs │ │ │ │ ├── PlanType.cs │ │ │ │ ├── ProductTierType.cs │ │ │ │ └── ProductType.cs │ │ │ ├── Extensions/ │ │ │ │ ├── BillingExtensions.cs │ │ │ │ ├── CurrencyExtensions.cs │ │ │ │ ├── CustomerExtensions.cs │ │ │ │ ├── DiscountExtensions.cs │ │ │ │ ├── InvoiceExtensions.cs │ │ │ │ ├── ServiceCollectionExtensions.cs │ │ │ │ ├── SubscriberExtensions.cs │ │ │ │ ├── SubscriptionExtensions.cs │ │ │ │ └── SubscriptionUpdateOptionsExtensions.cs │ │ │ ├── Licenses/ │ │ │ │ ├── Extensions/ │ │ │ │ │ ├── LicenseExtensions.cs │ │ │ │ │ └── LicenseServiceCollectionExtensions.cs │ │ │ │ ├── LicenseConstants.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── Api/ │ │ │ │ │ │ └── Response/ │ │ │ │ │ │ └── LicenseResponseModel.cs │ │ │ │ │ └── LicenseContext.cs │ │ │ │ ├── Queries/ │ │ │ │ │ └── GetUserLicenseQuery.cs │ │ │ │ ├── Registrations.cs │ │ │ │ └── Services/ │ │ │ │ ├── ILicenseClaimsFactory.cs │ │ │ │ └── Implementations/ │ │ │ │ ├── OrganizationLicenseClaimsFactory.cs │ │ │ │ └── UserLicenseClaimsFactory.cs │ │ │ ├── Models/ │ │ │ │ ├── Api/ │ │ │ │ │ ├── Requests/ │ │ │ │ │ │ └── Accounts/ │ │ │ │ │ │ └── TrialSendVerificationEmailRequestModel.cs │ │ │ │ │ └── Response/ │ │ │ │ │ └── SubscriptionDiscountResponseModel.cs │ │ │ │ ├── BillingHistoryInfo.cs │ │ │ │ ├── BillingInfo.cs │ │ │ │ ├── Business/ │ │ │ │ │ ├── ILicense.cs │ │ │ │ │ └── UserLicense.cs │ │ │ │ ├── DiscountEligibility.cs │ │ │ │ ├── Mail/ │ │ │ │ │ └── TrialInititaionVerifyEmail.cs │ │ │ │ ├── OffboardingSurveyResponse.cs │ │ │ │ ├── PaymentMethod.cs │ │ │ │ ├── PaymentSource.cs │ │ │ │ ├── PremiumStatusPushNotification.cs │ │ │ │ ├── PreviewInvoiceInfo.cs │ │ │ │ ├── Sales/ │ │ │ │ │ ├── CustomerSetup.cs │ │ │ │ │ ├── PremiumUserSale.cs │ │ │ │ │ └── SubscriptionSetup.cs │ │ │ │ ├── SponsoredPlans.cs │ │ │ │ ├── StaticStore/ │ │ │ │ │ ├── Plan.cs │ │ │ │ │ └── SponsoredPlan.cs │ │ │ │ ├── SubscriptionSuspension.cs │ │ │ │ └── TokenizedPaymentSource.cs │ │ │ ├── Organizations/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── PreviewOrganizationTaxCommand.cs │ │ │ │ │ ├── UpdateOrganizationLicenseCommand.cs │ │ │ │ │ ├── UpdateOrganizationSubscriptionCommand.cs │ │ │ │ │ └── UpgradeOrganizationPlanVNextCommand.cs │ │ │ │ ├── Entities/ │ │ │ │ │ └── OrganizationInstallation.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── OrganizationLicense.cs │ │ │ │ │ ├── OrganizationMetadata.cs │ │ │ │ │ ├── OrganizationSale.cs │ │ │ │ │ ├── OrganizationSubscriptionChangeSet.cs │ │ │ │ │ ├── OrganizationSubscriptionPlanChange.cs │ │ │ │ │ ├── OrganizationSubscriptionPurchase.cs │ │ │ │ │ ├── OrganizationSubscriptionUpdate.cs │ │ │ │ │ ├── OrganizationWarnings.cs │ │ │ │ │ └── SponsorOrganizationSubscriptionUpdate.cs │ │ │ │ ├── Queries/ │ │ │ │ │ ├── GetCloudOrganizationLicenseQuery.cs │ │ │ │ │ ├── GetOrganizationMetadataQuery.cs │ │ │ │ │ ├── GetOrganizationWarningsQuery.cs │ │ │ │ │ └── GetSelfHostedOrganizationLicenseQuery.cs │ │ │ │ ├── Repositories/ │ │ │ │ │ └── IOrganizationInstallationRepository.cs │ │ │ │ └── Services/ │ │ │ │ ├── IOrganizationBillingService.cs │ │ │ │ └── OrganizationBillingService.cs │ │ │ ├── Payment/ │ │ │ │ ├── Clients/ │ │ │ │ │ └── BitPayClient.cs │ │ │ │ ├── Commands/ │ │ │ │ │ ├── CreateBitPayInvoiceForCreditCommand.cs │ │ │ │ │ ├── UpdateBillingAddressCommand.cs │ │ │ │ │ └── UpdatePaymentMethodCommand.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── BillingAddress.cs │ │ │ │ │ ├── MaskedPaymentMethod.cs │ │ │ │ │ ├── NonTokenizedPaymentMethod.cs │ │ │ │ │ ├── PaymentMethod.cs │ │ │ │ │ ├── ProductUsageType.cs │ │ │ │ │ ├── TokenizablePaymentMethodType.cs │ │ │ │ │ └── TokenizedPaymentMethod.cs │ │ │ │ ├── Queries/ │ │ │ │ │ ├── GetApplicableDiscountsQuery.cs │ │ │ │ │ ├── GetBillingAddressQuery.cs │ │ │ │ │ ├── GetCreditQuery.cs │ │ │ │ │ ├── GetPaymentMethodQuery.cs │ │ │ │ │ └── HasPaymentMethodQuery.cs │ │ │ │ └── Registrations.cs │ │ │ ├── Portal/ │ │ │ │ └── Commands/ │ │ │ │ └── CreateBillingPortalSessionCommand.cs │ │ │ ├── Premium/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── CreatePremiumCloudHostedSubscriptionCommand.cs │ │ │ │ │ ├── CreatePremiumSelfHostedSubscriptionCommand.cs │ │ │ │ │ ├── PreviewPremiumTaxCommand.cs │ │ │ │ │ ├── PreviewPremiumUpgradeProrationCommand.cs │ │ │ │ │ ├── UpdatePremiumStorageCommand.cs │ │ │ │ │ └── UpgradePremiumToOrganizationCommand.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── PremiumPurchasePreview.cs │ │ │ │ │ ├── PremiumSubscriptionPurchase.cs │ │ │ │ │ ├── PremiumUpgradeProration.cs │ │ │ │ │ └── UserPremiumAccess.cs │ │ │ │ └── Queries/ │ │ │ │ ├── HasPremiumAccessQuery.cs │ │ │ │ └── IHasPremiumAccessQuery.cs │ │ │ ├── Pricing/ │ │ │ │ ├── IPricingClient.cs │ │ │ │ ├── Organizations/ │ │ │ │ │ ├── Feature.cs │ │ │ │ │ ├── Plan.cs │ │ │ │ │ ├── PlanAdapter.cs │ │ │ │ │ └── Purchasable.cs │ │ │ │ ├── Premium/ │ │ │ │ │ ├── Plan.cs │ │ │ │ │ └── Purchasable.cs │ │ │ │ ├── PricingClient.cs │ │ │ │ └── ServiceCollectionExtensions.cs │ │ │ ├── Providers/ │ │ │ │ ├── Entities/ │ │ │ │ │ ├── ClientOrganizationMigrationRecord.cs │ │ │ │ │ ├── ProviderInvoiceItem.cs │ │ │ │ │ └── ProviderPlan.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── AddableOrganization.cs │ │ │ │ │ ├── ChangeProviderPlansCommand.cs │ │ │ │ │ ├── ConfiguredProviderPlan.cs │ │ │ │ │ ├── ProviderWarnings.cs │ │ │ │ │ └── UpdateProviderSeatMinimumsCommand.cs │ │ │ │ ├── Queries/ │ │ │ │ │ └── IGetProviderWarningsQuery.cs │ │ │ │ ├── Repositories/ │ │ │ │ │ ├── IClientOrganizationMigrationRecordRepository.cs │ │ │ │ │ ├── IProviderInvoiceItemRepository.cs │ │ │ │ │ └── IProviderPlanRepository.cs │ │ │ │ └── Services/ │ │ │ │ ├── IBusinessUnitConverter.cs │ │ │ │ ├── IProviderBillingService.cs │ │ │ │ └── ProviderPriceAdapter.cs │ │ │ ├── Services/ │ │ │ │ ├── DiscountAudienceFilters/ │ │ │ │ │ ├── AllUsersFilter.cs │ │ │ │ │ ├── DiscountAudienceFilterFactory.cs │ │ │ │ │ ├── IDiscountAudienceFilter.cs │ │ │ │ │ ├── IDiscountAudienceFilterFactory.cs │ │ │ │ │ └── UserHasNoPreviousSubscriptionsFilter.cs │ │ │ │ ├── ILicensingService.cs │ │ │ │ ├── IPaymentHistoryService.cs │ │ │ │ ├── IPremiumUserBillingService.cs │ │ │ │ ├── IStripeAdapter.cs │ │ │ │ ├── IStripePaymentService.cs │ │ │ │ ├── IStripeSyncService.cs │ │ │ │ ├── ISubscriberService.cs │ │ │ │ ├── ISubscriptionDiscountService.cs │ │ │ │ ├── Implementations/ │ │ │ │ │ ├── LicensingService.cs │ │ │ │ │ ├── PaymentHistoryService.cs │ │ │ │ │ ├── PremiumUserBillingService.cs │ │ │ │ │ ├── StripeAdapter.cs │ │ │ │ │ ├── StripePaymentService.cs │ │ │ │ │ ├── StripeSyncService.cs │ │ │ │ │ ├── SubscriberService.cs │ │ │ │ │ └── SubscriptionDiscountService.cs │ │ │ │ └── NoopImplementations/ │ │ │ │ └── NoopLicensingService.cs │ │ │ ├── Subscriptions/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── ReinstateSubscriptionCommand.cs │ │ │ │ │ └── RestartSubscriptionCommand.cs │ │ │ │ ├── Entities/ │ │ │ │ │ └── SubscriptionDiscount.cs │ │ │ │ ├── Models/ │ │ │ │ │ ├── BitwardenDiscount.cs │ │ │ │ │ ├── BitwardenSubscription.cs │ │ │ │ │ ├── Cart.cs │ │ │ │ │ ├── Storage.cs │ │ │ │ │ └── SubscriberId.cs │ │ │ │ ├── Queries/ │ │ │ │ │ └── GetBitwardenSubscriptionQuery.cs │ │ │ │ └── Repositories/ │ │ │ │ └── ISubscriptionDiscountRepository.cs │ │ │ ├── Tax/ │ │ │ │ ├── Models/ │ │ │ │ │ ├── AutomaticTaxFactoryParameters.cs │ │ │ │ │ ├── TaxIdType.cs │ │ │ │ │ └── TaxInformation.cs │ │ │ │ ├── Requests/ │ │ │ │ │ ├── PreviewIndividualInvoiceRequestModel.cs │ │ │ │ │ ├── PreviewOrganizationInvoiceRequestModel.cs │ │ │ │ │ └── TaxInformationRequestModel.cs │ │ │ │ ├── Responses/ │ │ │ │ │ └── PreviewInvoiceResponseModel.cs │ │ │ │ ├── Services/ │ │ │ │ │ ├── ITaxService.cs │ │ │ │ │ └── Implementations/ │ │ │ │ │ └── TaxService.cs │ │ │ │ └── Utilities/ │ │ │ │ └── TaxHelpers.cs │ │ │ ├── TrialInitiation/ │ │ │ │ ├── Registration/ │ │ │ │ │ ├── ISendTrialInitiationEmailForRegistrationCommand.cs │ │ │ │ │ └── Implementations/ │ │ │ │ │ └── SendTrialInitiationEmailForRegistrationCommand.cs │ │ │ │ └── TrialInitiationCollectionExtensions.cs │ │ │ └── Utilities.cs │ │ ├── Constants.cs │ │ ├── Context/ │ │ │ ├── CurrentContext.cs │ │ │ └── ICurrentContext.cs │ │ ├── Core.csproj │ │ ├── Dirt/ │ │ │ ├── Entities/ │ │ │ │ ├── Event.cs │ │ │ │ ├── OrganizationApplication.cs │ │ │ │ ├── OrganizationIntegration.cs │ │ │ │ ├── OrganizationIntegrationConfiguration.cs │ │ │ │ ├── OrganizationReport.cs │ │ │ │ └── PasswordHealthReportApplication.cs │ │ │ ├── Enums/ │ │ │ │ ├── EventSystemUser.cs │ │ │ │ ├── EventType.cs │ │ │ │ ├── IntegrationType.cs │ │ │ │ └── OrganizationIntegrationStatus.cs │ │ │ ├── EventIntegrations/ │ │ │ │ ├── EventIntegrationsServiceCollectionExtensions.cs │ │ │ │ ├── OrganizationIntegrationConfigurations/ │ │ │ │ │ ├── CreateOrganizationIntegrationConfigurationCommand.cs │ │ │ │ │ ├── DeleteOrganizationIntegrationConfigurationCommand.cs │ │ │ │ │ ├── GetOrganizationIntegrationConfigurationsQuery.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ICreateOrganizationIntegrationConfigurationCommand.cs │ │ │ │ │ │ ├── IDeleteOrganizationIntegrationConfigurationCommand.cs │ │ │ │ │ │ ├── IGetOrganizationIntegrationConfigurationsQuery.cs │ │ │ │ │ │ └── IUpdateOrganizationIntegrationConfigurationCommand.cs │ │ │ │ │ └── UpdateOrganizationIntegrationConfigurationCommand.cs │ │ │ │ ├── OrganizationIntegrations/ │ │ │ │ │ ├── CreateOrganizationIntegrationCommand.cs │ │ │ │ │ ├── DeleteOrganizationIntegrationCommand.cs │ │ │ │ │ ├── GetOrganizationIntegrationsQuery.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ICreateOrganizationIntegrationCommand.cs │ │ │ │ │ │ ├── IDeleteOrganizationIntegrationCommand.cs │ │ │ │ │ │ ├── IGetOrganizationIntegrationsQuery.cs │ │ │ │ │ │ └── IUpdateOrganizationIntegrationCommand.cs │ │ │ │ │ └── UpdateOrganizationIntegrationCommand.cs │ │ │ │ └── README.md │ │ │ ├── Models/ │ │ │ │ └── Data/ │ │ │ │ ├── EventIntegrations/ │ │ │ │ │ ├── DatadogIntegration.cs │ │ │ │ │ ├── DatadogIntegrationConfigurationDetails.cs │ │ │ │ │ ├── DatadogListenerConfiguration.cs │ │ │ │ │ ├── HecIntegration.cs │ │ │ │ │ ├── HecListenerConfiguration.cs │ │ │ │ │ ├── IEventListenerConfiguration.cs │ │ │ │ │ ├── IIntegrationListenerConfiguration.cs │ │ │ │ │ ├── IIntegrationMessage.cs │ │ │ │ │ ├── IntegrationFailureCategory.cs │ │ │ │ │ ├── IntegrationFilterGroup.cs │ │ │ │ │ ├── IntegrationFilterOperation.cs │ │ │ │ │ ├── IntegrationFilterRule.cs │ │ │ │ │ ├── IntegrationHandlerResult.cs │ │ │ │ │ ├── IntegrationMessage.cs │ │ │ │ │ ├── IntegrationOAuthState.cs │ │ │ │ │ ├── IntegrationTemplateContext.cs │ │ │ │ │ ├── ListenerConfiguration.cs │ │ │ │ │ ├── OrganizationIntegrationConfigurationDetails.cs │ │ │ │ │ ├── RepositoryListenerConfiguration.cs │ │ │ │ │ ├── SlackIntegration.cs │ │ │ │ │ ├── SlackIntegrationConfiguration.cs │ │ │ │ │ ├── SlackIntegrationConfigurationDetails.cs │ │ │ │ │ ├── SlackListenerConfiguration.cs │ │ │ │ │ ├── TeamsIntegration.cs │ │ │ │ │ ├── TeamsIntegrationConfigurationDetails.cs │ │ │ │ │ ├── TeamsListenerConfiguration.cs │ │ │ │ │ ├── WebhookIntegration.cs │ │ │ │ │ ├── WebhookIntegrationConfiguration.cs │ │ │ │ │ ├── WebhookIntegrationConfigurationDetails.cs │ │ │ │ │ └── WebhookListenerConfiguration.cs │ │ │ │ ├── EventMessage.cs │ │ │ │ ├── EventTableEntity.cs │ │ │ │ ├── IEvent.cs │ │ │ │ ├── MemberAccessCipherDetails.cs │ │ │ │ ├── MemberAccessReportDetail.cs │ │ │ │ ├── OrganizationMemberBaseDetail.cs │ │ │ │ ├── OrganizationReportApplicationDataResponse.cs │ │ │ │ ├── OrganizationReportDataResponse.cs │ │ │ │ ├── OrganizationReportMetricsData.cs │ │ │ │ ├── OrganizationReportSummaryDataResponse.cs │ │ │ │ ├── ReportFile.cs │ │ │ │ ├── RiskInsightsReportDetail.cs │ │ │ │ ├── Slack/ │ │ │ │ │ └── SlackApiResponse.cs │ │ │ │ └── Teams/ │ │ │ │ ├── TeamsApiResponse.cs │ │ │ │ └── TeamsBotCredentialProvider.cs │ │ │ ├── Reports/ │ │ │ │ └── ReportFeatures/ │ │ │ │ ├── AddOrganizationReportCommand.cs │ │ │ │ ├── AddPasswordHealthReportApplicationCommand.cs │ │ │ │ ├── DropPasswordHealthReportApplicationCommand.cs │ │ │ │ ├── GetOrganizationReportApplicationDataQuery.cs │ │ │ │ ├── GetOrganizationReportDataQuery.cs │ │ │ │ ├── GetOrganizationReportQuery.cs │ │ │ │ ├── GetOrganizationReportSummaryDataByDateRangeQuery.cs │ │ │ │ ├── GetOrganizationReportSummaryDataQuery.cs │ │ │ │ ├── GetPasswordHealthReportApplicationQuery.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IAddOrganizationReportCommand.cs │ │ │ │ │ ├── IAddPasswordHealthReportApplicationCommand.cs │ │ │ │ │ ├── IDropPasswordHealthReportApplicationCommand.cs │ │ │ │ │ ├── IGetOrganizationReportApplicationDataQuery.cs │ │ │ │ │ ├── IGetOrganizationReportDataQuery.cs │ │ │ │ │ ├── IGetOrganizationReportQuery.cs │ │ │ │ │ ├── IGetOrganizationReportSummaryDataByDateRangeQuery.cs │ │ │ │ │ ├── IGetOrganizationReportSummaryDataQuery.cs │ │ │ │ │ ├── IGetPasswordHealthReportApplicationQuery.cs │ │ │ │ │ ├── IUpdateOrganizationReportApplicationDataCommand.cs │ │ │ │ │ ├── IUpdateOrganizationReportCommand.cs │ │ │ │ │ ├── IUpdateOrganizationReportDataCommand.cs │ │ │ │ │ └── IUpdateOrganizationReportSummaryCommand.cs │ │ │ │ ├── MemberAccessReportQuery.cs │ │ │ │ ├── OrganizationReportMembers/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ ├── IMemberAccessReportQuery.cs │ │ │ │ │ └── IRiskInsightsReportQuery.cs │ │ │ │ ├── ReportingServiceCollectionExtensions.cs │ │ │ │ ├── Requests/ │ │ │ │ │ ├── AddOrganizationReportRequest.cs │ │ │ │ │ ├── AddPasswordHealthReportApplicationRequest.cs │ │ │ │ │ ├── DropOrganizationReportRequest.cs │ │ │ │ │ ├── DropPasswordHealthReportApplicationRequest.cs │ │ │ │ │ ├── GetOrganizationReportSummaryDataByDateRangeRequest.cs │ │ │ │ │ ├── MemberAccessReportRequest.cs │ │ │ │ │ ├── OrganizationReportMetricsRequest.cs │ │ │ │ │ ├── RiskInsightsReportRequest.cs │ │ │ │ │ ├── UpdateOrganizationReportApplicationDataRequest.cs │ │ │ │ │ ├── UpdateOrganizationReportDataRequest.cs │ │ │ │ │ ├── UpdateOrganizationReportRequest.cs │ │ │ │ │ └── UpdateOrganizationReportSummaryRequest.cs │ │ │ │ ├── RiskInsightsReportQuery.cs │ │ │ │ ├── UpdateOrganizationReportApplicationDataCommand.cs │ │ │ │ ├── UpdateOrganizationReportCommand.cs │ │ │ │ ├── UpdateOrganizationReportDataCommand.cs │ │ │ │ └── UpdateOrganizationReportSummaryCommand.cs │ │ │ ├── Repositories/ │ │ │ │ ├── IEventRepository.cs │ │ │ │ ├── IOrganizationApplicationRepository.cs │ │ │ │ ├── IOrganizationIntegrationConfigurationRepository.cs │ │ │ │ ├── IOrganizationIntegrationRepository.cs │ │ │ │ ├── IOrganizationMemberBaseDetailRepository.cs │ │ │ │ ├── IOrganizationReportRepository.cs │ │ │ │ ├── IPasswordHealthReportApplicationRepository.cs │ │ │ │ └── TableStorage/ │ │ │ │ └── EventRepository.cs │ │ │ └── Services/ │ │ │ ├── IAzureServiceBusService.cs │ │ │ ├── IEventIntegrationPublisher.cs │ │ │ ├── IEventMessageHandler.cs │ │ │ ├── IEventWriteService.cs │ │ │ ├── IIntegrationFilterService.cs │ │ │ ├── IIntegrationHandler.cs │ │ │ ├── IOrganizationIntegrationConfigurationValidator.cs │ │ │ ├── IRabbitMqService.cs │ │ │ ├── ISlackService.cs │ │ │ ├── ITeamsService.cs │ │ │ ├── Implementations/ │ │ │ │ ├── AzureQueueEventWriteService.cs │ │ │ │ ├── AzureServiceBusEventListenerService.cs │ │ │ │ ├── AzureServiceBusIntegrationListenerService.cs │ │ │ │ ├── AzureServiceBusService.cs │ │ │ │ ├── AzureTableStorageEventHandler.cs │ │ │ │ ├── DatadogIntegrationHandler.cs │ │ │ │ ├── EventIntegrationEventWriteService.cs │ │ │ │ ├── EventIntegrationHandler.cs │ │ │ │ ├── EventLoggingListenerService.cs │ │ │ │ ├── EventRepositoryHandler.cs │ │ │ │ ├── EventService.cs │ │ │ │ ├── IntegrationFilterFactory.cs │ │ │ │ ├── IntegrationFilterService.cs │ │ │ │ ├── OrganizationIntegrationConfigurationValidator.cs │ │ │ │ ├── RabbitMqEventListenerService.cs │ │ │ │ ├── RabbitMqIntegrationListenerService.cs │ │ │ │ ├── RabbitMqService.cs │ │ │ │ ├── RepositoryEventWriteService.cs │ │ │ │ ├── SlackIntegrationHandler.cs │ │ │ │ ├── SlackService.cs │ │ │ │ ├── TeamsIntegrationHandler.cs │ │ │ │ ├── TeamsService.cs │ │ │ │ └── WebhookIntegrationHandler.cs │ │ │ └── NoopImplementations/ │ │ │ ├── NoopEventService.cs │ │ │ ├── NoopEventWriteService.cs │ │ │ ├── NoopSlackService.cs │ │ │ └── NoopTeamsService.cs │ │ ├── Entities/ │ │ │ ├── Collection.cs │ │ │ ├── CollectionCipher.cs │ │ │ ├── CollectionGroup.cs │ │ │ ├── CollectionUser.cs │ │ │ ├── Device.cs │ │ │ ├── Folder.cs │ │ │ ├── IRevisable.cs │ │ │ ├── IStorable.cs │ │ │ ├── IStorableSubscriber.cs │ │ │ ├── ISubscriber.cs │ │ │ ├── ITableObject.cs │ │ │ ├── OrganizationApiKey.cs │ │ │ ├── OrganizationConnection.cs │ │ │ ├── OrganizationDomain.cs │ │ │ ├── OrganizationSponsorship.cs │ │ │ ├── PlayItem.cs │ │ │ ├── Role.cs │ │ │ ├── TaxRate.cs │ │ │ ├── Transaction.cs │ │ │ └── User.cs │ │ ├── Enums/ │ │ │ ├── AccessClientType.cs │ │ │ ├── ApplicationCacheMessageType.cs │ │ │ ├── BitwardenClient.cs │ │ │ ├── ClientType.cs │ │ │ ├── CollectionType.cs │ │ │ ├── DeviceType.cs │ │ │ ├── EncryptionType.cs │ │ │ ├── EnumExtensions.cs │ │ │ ├── FileUploadType.cs │ │ │ ├── GatewayType.cs │ │ │ ├── GlobalEquivalentDomainsType.cs │ │ │ ├── KdfType.cs │ │ │ ├── LicenseType.cs │ │ │ ├── NotificationHubType.cs │ │ │ ├── OrganizationApiKeyType.cs │ │ │ ├── OrganizationConnectionType.cs │ │ │ ├── PaymentMethodType.cs │ │ │ ├── PlanSponsorshipType.cs │ │ │ ├── PushNotificationLogOutReason.cs │ │ │ ├── SupportedDatabaseProviders.cs │ │ │ ├── TransactionType.cs │ │ │ └── UriMatchType.cs │ │ ├── Exceptions/ │ │ │ ├── BadRequestException.cs │ │ │ ├── ConflictException.cs │ │ │ ├── DnsQueryException.cs │ │ │ ├── DomainClaimedException.cs │ │ │ ├── DomainVerifiedException.cs │ │ │ ├── DuplicateDomainException.cs │ │ │ ├── FeatureUnavailableException.cs │ │ │ ├── GatewayException.cs │ │ │ ├── InvalidEmailException.cs │ │ │ ├── InvalidGatewayCustomerIdException.cs │ │ │ └── NotFoundException.cs │ │ ├── HostedServices/ │ │ │ ├── ApplicationCacheHostedService.cs │ │ │ └── IpRateLimitSeedStartupService.cs │ │ ├── Jobs/ │ │ │ ├── BaseJob.cs │ │ │ ├── BaseJobsHostedService.cs │ │ │ ├── JobFactory.cs │ │ │ └── JobListener.cs │ │ ├── KeyManagement/ │ │ │ ├── Authorization/ │ │ │ │ ├── KeyConnectorAuthorizationHandler.cs │ │ │ │ └── KeyConnectorOperations.cs │ │ │ ├── Commands/ │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IRegenerateUserAsymmetricKeysCommand.cs │ │ │ │ │ └── ISetKeyConnectorKeyCommand.cs │ │ │ │ ├── RegenerateUserAsymmetricKeysCommand.cs │ │ │ │ └── SetKeyConnectorKeyCommand.cs │ │ │ ├── Constants.cs │ │ │ ├── Entities/ │ │ │ │ └── UserSignatureKeyPair.cs │ │ │ ├── Enums/ │ │ │ │ └── SignatureAlgorithm.cs │ │ │ ├── Kdf/ │ │ │ │ ├── IChangeKdfCommand.cs │ │ │ │ └── Implementations/ │ │ │ │ └── ChangeKdfCommand.cs │ │ │ ├── KeyManagementServiceCollectionExtensions.cs │ │ │ ├── Models/ │ │ │ │ ├── Api/ │ │ │ │ │ ├── Request/ │ │ │ │ │ │ ├── AccountKeysRequestModel.cs │ │ │ │ │ │ ├── KdfRequestModel.cs │ │ │ │ │ │ ├── MasterPasswordAuthenticationDataRequestModel.cs │ │ │ │ │ │ ├── MasterPasswordUnlockDataRequestModel.cs │ │ │ │ │ │ ├── PublicKeyEncryptionKeyPairRequestModel.cs │ │ │ │ │ │ ├── SecurityStateModel.cs │ │ │ │ │ │ └── SignatureKeyPairRequestModel.cs │ │ │ │ │ └── Response/ │ │ │ │ │ ├── MasterPasswordUnlockResponseModel.cs │ │ │ │ │ ├── PrivateKeysResponseModel.cs │ │ │ │ │ ├── PublicKeyEncryptionKeyPairResponseModel.cs │ │ │ │ │ ├── PublicKeysResponseModel.cs │ │ │ │ │ ├── SignatureKeyPairResponseModel.cs │ │ │ │ │ ├── UserDecryptionResponseModel.cs │ │ │ │ │ └── V2UpgradeTokenResponseModel.cs │ │ │ │ └── Data/ │ │ │ │ ├── KdfSettings.cs │ │ │ │ ├── KeyConnectorConfirmationDetails.cs │ │ │ │ ├── KeyConnectorKeysData.cs │ │ │ │ ├── MasterPasswordAuthenticationData.cs │ │ │ │ ├── MasterPasswordUnlockAndAuthenticationData.cs │ │ │ │ ├── MasterPasswordUnlockData.cs │ │ │ │ ├── PublicKeyEncryptionKeyPairData.cs │ │ │ │ ├── RotateUserAccountKeysData.cs │ │ │ │ ├── SecurityStateData.cs │ │ │ │ ├── SignatureKeyPairData.cs │ │ │ │ ├── UserAccountKeysData.cs │ │ │ │ ├── UserAsymmetricKeys.cs │ │ │ │ └── V2UpgradeTokenData.cs │ │ │ ├── Queries/ │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IKeyConnectorConfirmationDetailsQuery.cs │ │ │ │ │ └── IUserAcountKeysQuery.cs │ │ │ │ ├── KeyConnectorConfirmationDetailsQuery.cs │ │ │ │ └── UserAccountKeysQuery.cs │ │ │ ├── Repositories/ │ │ │ │ ├── IUserAsymmetricKeysRepository.cs │ │ │ │ └── IUserSignatureKeyPairRepository.cs │ │ │ ├── Sends/ │ │ │ │ ├── ISendPasswordHasher.cs │ │ │ │ ├── SendPasswordHasher.cs │ │ │ │ ├── SendPasswordHasherMarker.cs │ │ │ │ └── SendPasswordHasherServiceCollectionExtensions.cs │ │ │ ├── UserKey/ │ │ │ │ ├── IRotateUserAccountKeysCommand.cs │ │ │ │ └── Implementations/ │ │ │ │ └── RotateUserAccountKeysCommand.cs │ │ │ └── Utilities/ │ │ │ └── EncryptionParsing.cs │ │ ├── MailTemplates/ │ │ │ ├── Handlebars/ │ │ │ │ ├── AddedCredit.html.hbs │ │ │ │ ├── AddedCredit.text.hbs │ │ │ │ ├── AdminConsole/ │ │ │ │ │ ├── CannotDeleteClaimedAccount.html.hbs │ │ │ │ │ ├── CannotDeleteClaimedAccount.text.hbs │ │ │ │ │ ├── DomainClaimedByOrganization.html.hbs │ │ │ │ │ ├── DomainClaimedByOrganization.text.hbs │ │ │ │ │ ├── NotifyAdminDeviceApprovalRequested.html.hbs │ │ │ │ │ ├── NotifyAdminDeviceApprovalRequested.text.hbs │ │ │ │ │ ├── OrganizationConfirmation/ │ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.html.hbs │ │ │ │ │ │ ├── OrganizationConfirmationEnterpriseTeamsView.text.hbs │ │ │ │ │ │ ├── OrganizationConfirmationFamilyFreeView.html.hbs │ │ │ │ │ │ └── OrganizationConfirmationFamilyFreeView.text.hbs │ │ │ │ │ ├── OrganizationInvite/ │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsExistingUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteEnterpriseTeamsNewUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesExistingUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.html.hbs │ │ │ │ │ │ ├── OrganizationInviteFamiliesNewUserView.text.hbs │ │ │ │ │ │ ├── OrganizationInviteFreeView.html.hbs │ │ │ │ │ │ └── OrganizationInviteFreeView.text.hbs │ │ │ │ │ ├── OrganizationUserRevokedForSingleOrgPolicy.html.hbs │ │ │ │ │ ├── OrganizationUserRevokedForSingleOrgPolicy.text.hbs │ │ │ │ │ ├── OrganizationUserRevokedForTwoFactorPolicy.html.hbs │ │ │ │ │ ├── OrganizationUserRevokedForTwoFactorPolicy.text.hbs │ │ │ │ │ ├── SelfHostNotifyAdminDeviceApprovalRequested.html.hbs │ │ │ │ │ └── SelfHostNotifyAdminDeviceApprovalRequested.text.hbs │ │ │ │ ├── AdminResetPassword.html.hbs │ │ │ │ ├── AdminResetPassword.text.hbs │ │ │ │ ├── Auth/ │ │ │ │ │ ├── EmergencyAccessAccepted.html.hbs │ │ │ │ │ ├── EmergencyAccessAccepted.text.hbs │ │ │ │ │ ├── EmergencyAccessApproved.html.hbs │ │ │ │ │ ├── EmergencyAccessApproved.text.hbs │ │ │ │ │ ├── EmergencyAccessConfirmed.html.hbs │ │ │ │ │ ├── EmergencyAccessConfirmed.text.hbs │ │ │ │ │ ├── EmergencyAccessInvited.html.hbs │ │ │ │ │ ├── EmergencyAccessInvited.text.hbs │ │ │ │ │ ├── EmergencyAccessRecovery.html.hbs │ │ │ │ │ ├── EmergencyAccessRecovery.text.hbs │ │ │ │ │ ├── EmergencyAccessRecoveryReminder.html.hbs │ │ │ │ │ ├── EmergencyAccessRecoveryReminder.text.hbs │ │ │ │ │ ├── EmergencyAccessRecoveryTimedOut.html.hbs │ │ │ │ │ ├── EmergencyAccessRecoveryTimedOut.text.hbs │ │ │ │ │ ├── EmergencyAccessRejected.html.hbs │ │ │ │ │ ├── EmergencyAccessRejected.text.hbs │ │ │ │ │ ├── FailedTwoFactorAttempt.html.hbs │ │ │ │ │ ├── FailedTwoFactorAttempt.text.hbs │ │ │ │ │ ├── MasterPasswordHint.html.hbs │ │ │ │ │ ├── MasterPasswordHint.text.hbs │ │ │ │ │ ├── NoMasterPasswordHint.html.hbs │ │ │ │ │ ├── NoMasterPasswordHint.text.hbs │ │ │ │ │ ├── OTPEmail.html.hbs │ │ │ │ │ ├── OTPEmail.text.hbs │ │ │ │ │ ├── PasswordlessSignIn.html.hbs │ │ │ │ │ ├── PasswordlessSignIn.text.hbs │ │ │ │ │ ├── RecoverTwoFactor.html.hbs │ │ │ │ │ ├── RecoverTwoFactor.text.hbs │ │ │ │ │ ├── RegistrationVerifyEmail.html.hbs │ │ │ │ │ ├── RegistrationVerifyEmail.text.hbs │ │ │ │ │ ├── SendAccessEmailOtpEmail.html.hbs │ │ │ │ │ ├── SendAccessEmailOtpEmail.text.hbs │ │ │ │ │ ├── TrustedDeviceAdminApproval.html.hbs │ │ │ │ │ ├── TrustedDeviceAdminApproval.text.hbs │ │ │ │ │ ├── TwoFactorEmail.html.hbs │ │ │ │ │ ├── TwoFactorEmail.text.hbs │ │ │ │ │ ├── VerifyDelete.html.hbs │ │ │ │ │ ├── VerifyDelete.text.hbs │ │ │ │ │ ├── VerifyEmail.html.hbs │ │ │ │ │ └── VerifyEmail.text.hbs │ │ │ │ ├── Billing/ │ │ │ │ │ ├── BusinessUnitConversionInvite.html.hbs │ │ │ │ │ ├── BusinessUnitConversionInvite.text.hbs │ │ │ │ │ ├── TrialInitiationVerifyEmail.html.hbs │ │ │ │ │ └── TrialInitiationVerifyEmail.text.hbs │ │ │ │ ├── ChangeEmail.html.hbs │ │ │ │ ├── ChangeEmail.text.hbs │ │ │ │ ├── ChangeEmailAlreadyExists.html.hbs │ │ │ │ ├── ChangeEmailAlreadyExists.text.hbs │ │ │ │ ├── FamiliesForEnterprise/ │ │ │ │ │ ├── FamiliesForEnterpriseOfferExistingAccount.html.hbs │ │ │ │ │ ├── FamiliesForEnterpriseOfferExistingAccount.text.hbs │ │ │ │ │ ├── FamiliesForEnterpriseOfferNewAccount.html.hbs │ │ │ │ │ ├── FamiliesForEnterpriseOfferNewAccount.text.hbs │ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToEnterpriseUser.html.hbs │ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToEnterpriseUser.text.hbs │ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToFamilyUser.html.hbs │ │ │ │ │ ├── FamiliesForEnterpriseRedeemedToFamilyUser.text.hbs │ │ │ │ │ ├── FamiliesForEnterpriseRemovedFromFamilyUser.html.hbs │ │ │ │ │ ├── FamiliesForEnterpriseRemovedFromFamilyUser.text.hbs │ │ │ │ │ ├── FamiliesForEnterpriseSponsorshipReverting.html.hbs │ │ │ │ │ └── FamiliesForEnterpriseSponsorshipReverting.text.hbs │ │ │ │ ├── InitiateDeleteOrganzation.html.hbs │ │ │ │ ├── InitiateDeleteOrganzation.text.hbs │ │ │ │ ├── InvoiceUpcoming.html.hbs │ │ │ │ ├── InvoiceUpcoming.text.hbs │ │ │ │ ├── Layouts/ │ │ │ │ │ ├── Basic.html.hbs │ │ │ │ │ ├── Basic.text.hbs │ │ │ │ │ ├── Full.html.hbs │ │ │ │ │ ├── Full.text.hbs │ │ │ │ │ ├── FullUpdated.html.hbs │ │ │ │ │ ├── FullUpdated.text.hbs │ │ │ │ │ ├── ProviderFull.html.hbs │ │ │ │ │ ├── SecurityTasks.html.hbs │ │ │ │ │ ├── SecurityTasks.text.hbs │ │ │ │ │ ├── TitleContactUs.html.hbs │ │ │ │ │ └── TitleContactUs.text.hbs │ │ │ │ ├── LicenseExpired.html.hbs │ │ │ │ ├── LicenseExpired.text.hbs │ │ │ │ ├── MJML/ │ │ │ │ │ └── Auth/ │ │ │ │ │ └── Onboarding/ │ │ │ │ │ ├── welcome-family-user.html.hbs │ │ │ │ │ ├── welcome-family-user.text.hbs │ │ │ │ │ ├── welcome-individual-user.html.hbs │ │ │ │ │ ├── welcome-individual-user.text.hbs │ │ │ │ │ ├── welcome-org-user.html.hbs │ │ │ │ │ └── welcome-org-user.text.hbs │ │ │ │ ├── NewDeviceLoggedIn.html.hbs │ │ │ │ ├── NewDeviceLoggedIn.text.hbs │ │ │ │ ├── OrganizationDomainUnclaimed.html.hbs │ │ │ │ ├── OrganizationDomainUnclaimed.text.hbs │ │ │ │ ├── OrganizationSeatsAutoscaled.html.hbs │ │ │ │ ├── OrganizationSeatsAutoscaled.text.hbs │ │ │ │ ├── OrganizationSeatsMaxReached.html.hbs │ │ │ │ ├── OrganizationSeatsMaxReached.text.hbs │ │ │ │ ├── OrganizationSmSeatsMaxReached.html.hbs │ │ │ │ ├── OrganizationSmSeatsMaxReached.text.hbs │ │ │ │ ├── OrganizationSmServiceAccountsMaxReached.html.hbs │ │ │ │ ├── OrganizationSmServiceAccountsMaxReached.text.hbs │ │ │ │ ├── OrganizationUserAccepted.html.hbs │ │ │ │ ├── OrganizationUserAccepted.text.hbs │ │ │ │ ├── OrganizationUserConfirmed.html.hbs │ │ │ │ ├── OrganizationUserConfirmed.text.hbs │ │ │ │ ├── OrganizationUserInvited.html.hbs │ │ │ │ ├── OrganizationUserInvited.text.hbs │ │ │ │ ├── PaymentFailed.html.hbs │ │ │ │ ├── PaymentFailed.text.hbs │ │ │ │ ├── Provider/ │ │ │ │ │ ├── InitiateDeleteProvider.html.hbs │ │ │ │ │ ├── InitiateDeleteProvider.text.hbs │ │ │ │ │ ├── ProviderSetupInvite.html.hbs │ │ │ │ │ ├── ProviderSetupInvite.text.hbs │ │ │ │ │ ├── ProviderUpdatePaymentMethod.html.hbs │ │ │ │ │ ├── ProviderUpdatePaymentMethod.text.hbs │ │ │ │ │ ├── ProviderUserConfirmed.html.hbs │ │ │ │ │ ├── ProviderUserConfirmed.text.hbs │ │ │ │ │ ├── ProviderUserInvited.html.hbs │ │ │ │ │ ├── ProviderUserInvited.text.hbs │ │ │ │ │ ├── ProviderUserRemoved.html.hbs │ │ │ │ │ └── ProviderUserRemoved.text.hbs │ │ │ │ ├── ProviderInvoiceUpcoming.html.hbs │ │ │ │ ├── ProviderInvoiceUpcoming.text.hbs │ │ │ │ ├── SecretsManagerAccessRequest.html.hbs │ │ │ │ ├── SecretsManagerAccessRequest.text.hbs │ │ │ │ ├── SecurityTasksNotification.html.hbs │ │ │ │ ├── SecurityTasksNotification.text.hbs │ │ │ │ ├── TrialInitiation.html.hbs │ │ │ │ ├── TrialInitiation.text.hbs │ │ │ │ ├── UpdatedTempPassword.html.hbs │ │ │ │ ├── UpdatedTempPassword.text.hbs │ │ │ │ ├── Welcome.html.hbs │ │ │ │ └── Welcome.text.hbs │ │ │ ├── Mjml/ │ │ │ │ ├── .mjmlconfig │ │ │ │ ├── README.md │ │ │ │ ├── build.js │ │ │ │ ├── components/ │ │ │ │ │ ├── footer.mjml │ │ │ │ │ ├── head.mjml │ │ │ │ │ ├── logo.mjml │ │ │ │ │ ├── mj-bw-hero.js │ │ │ │ │ ├── mj-bw-icon-row.js │ │ │ │ │ ├── mj-bw-learn-more-footer.js │ │ │ │ │ └── mj-bw-simple-hero.js │ │ │ │ ├── emails/ │ │ │ │ │ ├── AdminConsole/ │ │ │ │ │ │ ├── OrganizationConfirmation/ │ │ │ │ │ │ │ ├── organization-auto-confirm-enabled.mjml │ │ │ │ │ │ │ ├── organization-confirmation-enterprise-teams.mjml │ │ │ │ │ │ │ └── organization-confirmation-family-free.mjml │ │ │ │ │ │ ├── OrganizationInvite/ │ │ │ │ │ │ │ ├── organization-invite-enterprise-teams-existing-user.mjml │ │ │ │ │ │ │ ├── organization-invite-enterprise-teams-new-user.mjml │ │ │ │ │ │ │ ├── organization-invite-families-existing-user.mjml │ │ │ │ │ │ │ ├── organization-invite-families-new-user.mjml │ │ │ │ │ │ │ └── organization-invite-free.mjml │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── admin-console-head.mjml │ │ │ │ │ │ ├── mj-bw-ac-hero.js │ │ │ │ │ │ ├── mj-bw-ac-icon-row-without-bulletins.js │ │ │ │ │ │ ├── mj-bw-ac-icon-row.js │ │ │ │ │ │ ├── mj-bw-ac-learn-more-footer.js │ │ │ │ │ │ ├── mj-bw-inviter-info.js │ │ │ │ │ │ └── mobile-app-download.mjml │ │ │ │ │ ├── Auth/ │ │ │ │ │ │ ├── Onboarding/ │ │ │ │ │ │ │ ├── welcome-family-user.mjml │ │ │ │ │ │ │ ├── welcome-individual-user.mjml │ │ │ │ │ │ │ └── welcome-org-user.mjml │ │ │ │ │ │ ├── UserFeatures/ │ │ │ │ │ │ │ └── EmergencyAccess/ │ │ │ │ │ │ │ └── emergency-access-remove-grantees.mjml │ │ │ │ │ │ ├── send-email-otp.mjml │ │ │ │ │ │ └── two-factor.mjml │ │ │ │ │ ├── Billing/ │ │ │ │ │ │ └── Renewals/ │ │ │ │ │ │ ├── families-2019-renewal.mjml │ │ │ │ │ │ ├── families-2020-renewal.mjml │ │ │ │ │ │ └── premium-renewal.mjml │ │ │ │ │ └── invite.mjml │ │ │ │ └── package.json │ │ │ └── README.md │ │ ├── Models/ │ │ │ ├── Api/ │ │ │ │ ├── Request/ │ │ │ │ │ ├── OrganizationLicenses/ │ │ │ │ │ │ └── SelfHostedOrganizationLicenseRequestModel.cs │ │ │ │ │ ├── OrganizationSponsorships/ │ │ │ │ │ │ ├── OrganizationSponsorshipRequestModel.cs │ │ │ │ │ │ └── OrganizationSponsorshipSyncRequestModel.cs │ │ │ │ │ ├── PushDeviceRequestModel.cs │ │ │ │ │ ├── PushRegistrationRequestModel.cs │ │ │ │ │ ├── PushSendRequestModel.cs │ │ │ │ │ └── PushUpdateRequestModel.cs │ │ │ │ └── Response/ │ │ │ │ ├── Duo/ │ │ │ │ │ └── DuoResponseModel.cs │ │ │ │ ├── ErrorResponseModel.cs │ │ │ │ ├── MasterPasswordPolicyResponseModel.cs │ │ │ │ ├── OrganizationSponsorships/ │ │ │ │ │ ├── OrganizationSponsorshipInvitesResponseModel.cs │ │ │ │ │ ├── OrganizationSponsorshipResponseModel.cs │ │ │ │ │ ├── OrganizationSponsorshipSyncResponseModel.cs │ │ │ │ │ └── PreValidateSponsorshipResponseModel.cs │ │ │ │ └── ResponseModel.cs │ │ │ ├── Business/ │ │ │ │ ├── CompleteSubscriptionUpdate.cs │ │ │ │ ├── OrganizationSignup.cs │ │ │ │ ├── OrganizationUpgrade.cs │ │ │ │ ├── SeatSubscriptionUpdate.cs │ │ │ │ ├── SecretsManagerSubscribeUpdate.cs │ │ │ │ ├── SecretsManagerSubscriptionUpdate.cs │ │ │ │ ├── ServiceAccountSubscriptionUpdate.cs │ │ │ │ ├── SmSeatSubscriptionUpdate.cs │ │ │ │ ├── StorageSubscriptionUpdate.cs │ │ │ │ ├── SubscriptionCreateOptions.cs │ │ │ │ ├── SubscriptionInfo.cs │ │ │ │ ├── SubscriptionUpdate.cs │ │ │ │ ├── TaxInfo.cs │ │ │ │ └── Tokenables/ │ │ │ │ └── OrganizationSponsorshipOfferTokenable.cs │ │ │ ├── Data/ │ │ │ │ ├── CollectionAccessDetails.cs │ │ │ │ ├── CollectionAccessSelection.cs │ │ │ │ ├── CollectionAdminDetails.cs │ │ │ │ ├── CollectionDetails.cs │ │ │ │ ├── InstallationDeviceEntity.cs │ │ │ │ ├── Organizations/ │ │ │ │ │ ├── ClaimedUserDomainClaimedEmails.cs │ │ │ │ │ ├── OrganizationConnections/ │ │ │ │ │ │ └── OrganizationConnectionData.cs │ │ │ │ │ ├── OrganizationDomainSsoDetailsData.cs │ │ │ │ │ ├── OrganizationSponsorships/ │ │ │ │ │ │ ├── OrganizationSponsorshipData.cs │ │ │ │ │ │ └── OrganizationSponsorshipSyncData.cs │ │ │ │ │ ├── OrganizationUsers/ │ │ │ │ │ │ └── OrganizationSeatCounts.cs │ │ │ │ │ └── VerifiedOrganizationDomainSsoDetail.cs │ │ │ │ ├── PageOptions.cs │ │ │ │ ├── PagedResult.cs │ │ │ │ ├── UserKdfInformation.cs │ │ │ │ └── UserWithCalculatedPremium.cs │ │ │ ├── IExternal.cs │ │ │ ├── Mail/ │ │ │ │ ├── AddedCreditViewModel.cs │ │ │ │ ├── AdminResetPasswordViewModel.cs │ │ │ │ ├── Auth/ │ │ │ │ │ ├── DefaultEmailOtpViewModel.cs │ │ │ │ │ └── OrganizationWelcomeEmailViewModel.cs │ │ │ │ ├── BaseMailModel.cs │ │ │ │ ├── BaseTitleContactUsMailModel.cs │ │ │ │ ├── Billing/ │ │ │ │ │ ├── BusinessUnitConversionInviteModel.cs │ │ │ │ │ └── Renewal/ │ │ │ │ │ ├── Families2019Renewal/ │ │ │ │ │ │ ├── Families2019RenewalMailView.cs │ │ │ │ │ │ ├── Families2019RenewalMailView.html.hbs │ │ │ │ │ │ └── Families2019RenewalMailView.text.hbs │ │ │ │ │ ├── Families2020Renewal/ │ │ │ │ │ │ ├── Families2020RenewalMailView.cs │ │ │ │ │ │ ├── Families2020RenewalMailView.html.hbs │ │ │ │ │ │ └── Families2020RenewalMailView.text.hbs │ │ │ │ │ └── Premium/ │ │ │ │ │ ├── PremiumRenewalMailView.cs │ │ │ │ │ ├── PremiumRenewalMailView.html.hbs │ │ │ │ │ └── PremiumRenewalMailView.text.hbs │ │ │ │ ├── ChangeEmailExistsViewModel.cs │ │ │ │ ├── ClaimedDomainUserNotificationViewModel.cs │ │ │ │ ├── FamiliesForEnterprise/ │ │ │ │ │ ├── FamiliesForEnterpriseOfferViewModel.cs │ │ │ │ │ ├── FamiliesForEnterpriseRemoveOfferViewModel.cs │ │ │ │ │ └── FamiliesForEnterpriseSponsorshipRevertingViewModel.cs │ │ │ │ ├── IMailQueueMessage.cs │ │ │ │ ├── InvoiceUpcomingViewModel.cs │ │ │ │ ├── LicenseExpiredViewModel.cs │ │ │ │ ├── MailMessage.cs │ │ │ │ ├── MailQueueMessage.cs │ │ │ │ ├── NewDeviceLoggedInModel.cs │ │ │ │ ├── OrganizationDomainUnverifiedViewModel.cs │ │ │ │ ├── OrganizationInitiateDeleteModel.cs │ │ │ │ ├── OrganizationInvitesInfo.cs │ │ │ │ ├── OrganizationSeatsAutoscaledViewModel.cs │ │ │ │ ├── OrganizationSeatsMaxReachedViewModel.cs │ │ │ │ ├── OrganizationServiceAccountsMaxReachedViewModel.cs │ │ │ │ ├── OrganizationUserAcceptedViewModel.cs │ │ │ │ ├── OrganizationUserConfirmedViewModel.cs │ │ │ │ ├── OrganizationUserInvitedViewModel.cs │ │ │ │ ├── OrganizationUserRemovedForPolicySingleOrgViewModel.cs │ │ │ │ ├── OrganizationUserRemovedForPolicyTwoStepViewModel.cs │ │ │ │ ├── OrganizationUserRevokedForPolicySingleOrgViewModel.cs │ │ │ │ ├── OrganizationUserRevokedForPolicyTwoFactorViewModel.cs │ │ │ │ ├── PaymentFailedViewModel.cs │ │ │ │ ├── Provider/ │ │ │ │ │ ├── ProviderInitiateDeleteModel.cs │ │ │ │ │ ├── ProviderSetupInviteViewModel.cs │ │ │ │ │ ├── ProviderUpdatePaymentMethodViewModel.cs │ │ │ │ │ ├── ProviderUserConfirmedViewModel.cs │ │ │ │ │ ├── ProviderUserInvitedViewModel.cs │ │ │ │ │ └── ProviderUserRemovedViewModel.cs │ │ │ │ ├── SecurityTaskNotificationViewModel.cs │ │ │ │ ├── TrustedDeviceAdminApprovalViewModel.cs │ │ │ │ ├── TwoFactorEmailTokenViewModel.cs │ │ │ │ ├── UpdateTempPasswordViewModel.cs │ │ │ │ └── UserVerificationEmailTokenViewModel.cs │ │ │ ├── OrganizationConnectionConfigs/ │ │ │ │ ├── BillingSyncConfig.cs │ │ │ │ └── IConnectionConfig.cs │ │ │ ├── PushNotification.cs │ │ │ └── Stripe/ │ │ │ └── StripeInvoiceListOptions.cs │ │ ├── NotificationCenter/ │ │ │ ├── Authorization/ │ │ │ │ ├── NotificationAuthorizationHandler.cs │ │ │ │ ├── NotificationOperations.cs │ │ │ │ ├── NotificationStatusAuthorizationHandler.cs │ │ │ │ └── NotificationStatusOperations.cs │ │ │ ├── Commands/ │ │ │ │ ├── CreateNotificationCommand.cs │ │ │ │ ├── CreateNotificationStatusCommand.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── ICreateNotificationCommand.cs │ │ │ │ │ ├── ICreateNotificationStatusCommand.cs │ │ │ │ │ ├── IMarkNotificationDeletedCommand.cs │ │ │ │ │ ├── IMarkNotificationReadCommand.cs │ │ │ │ │ └── IUpdateNotificationCommand.cs │ │ │ │ ├── MarkNotificationDeletedCommand.cs │ │ │ │ ├── MarkNotificationReadCommand.cs │ │ │ │ └── UpdateNotificationCommand.cs │ │ │ ├── Entities/ │ │ │ │ ├── Notification.cs │ │ │ │ └── NotificationStatus.cs │ │ │ ├── Enums/ │ │ │ │ └── Priority.cs │ │ │ ├── Models/ │ │ │ │ ├── Data/ │ │ │ │ │ └── NotificationStatusDetails.cs │ │ │ │ └── Filter/ │ │ │ │ └── NotificationStatusFilter.cs │ │ │ ├── NotificationCenterServiceCollectionExtensions.cs │ │ │ ├── Queries/ │ │ │ │ ├── GetNotificationStatusDetailsForUserQuery.cs │ │ │ │ ├── GetNotificationStatusForUserQuery.cs │ │ │ │ └── Interfaces/ │ │ │ │ ├── IGetNotificationStatusDetailsForUserQuery.cs │ │ │ │ └── IGetNotificationStatusForUserQuery.cs │ │ │ └── Repositories/ │ │ │ ├── INotificationRepository.cs │ │ │ └── INotificationStatusRepository.cs │ │ ├── OrganizationFeatures/ │ │ │ ├── OrganizationCollections/ │ │ │ │ ├── BulkAddCollectionAccessCommand.cs │ │ │ │ ├── CreateCollectionCommand.cs │ │ │ │ ├── DeleteCollectionCommand.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IBulkAddCollectionAccessCommand.cs │ │ │ │ │ ├── ICreateCollectionCommand.cs │ │ │ │ │ ├── IDeleteCollectionCommand.cs │ │ │ │ │ └── IUpdateCollectionCommand.cs │ │ │ │ └── UpdateCollectionCommand.cs │ │ │ ├── OrganizationServiceCollectionExtensions.cs │ │ │ ├── OrganizationSponsorships/ │ │ │ │ └── FamiliesForEnterprise/ │ │ │ │ ├── CancelSponsorshipCommand.cs │ │ │ │ ├── Cloud/ │ │ │ │ │ ├── CloudRevokeSponsorshipCommand.cs │ │ │ │ │ ├── CloudSyncSponsorshipsCommand.cs │ │ │ │ │ ├── OrganizationSponsorshipRenewCommand.cs │ │ │ │ │ ├── RemoveSponsorshipCommand.cs │ │ │ │ │ ├── SendSponsorshipOfferCommand.cs │ │ │ │ │ ├── SetUpSponsorshipCommand.cs │ │ │ │ │ ├── ValidateRedemptionTokenCommand.cs │ │ │ │ │ └── ValidateSponsorshipCommand.cs │ │ │ │ ├── CreateSponsorshipCommand.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── ICreateSponsorshipCommand.cs │ │ │ │ │ ├── IOrganizationSponsorshipRenewCommand.cs │ │ │ │ │ ├── IRemoveSponsorshipCommand.cs │ │ │ │ │ ├── IRevokeSponsorshipCommand.cs │ │ │ │ │ ├── ISendSponsorshipOfferCommand.cs │ │ │ │ │ ├── ISetUpSponsorshipCommand.cs │ │ │ │ │ ├── ISyncOrganizationSponsorshipsCommand.cs │ │ │ │ │ ├── IValidateRedemptionTokenCommand.cs │ │ │ │ │ └── IValidateSponsorshipCommand.cs │ │ │ │ └── SelfHosted/ │ │ │ │ ├── SelfHostedRevokeSponsorshipCommand.cs │ │ │ │ └── SelfHostedSyncSponsorshipsCommand.cs │ │ │ └── OrganizationSubscriptions/ │ │ │ ├── AddSecretsManagerSubscriptionCommand.cs │ │ │ ├── Interface/ │ │ │ │ ├── IAddSecretsManagerSubscriptionCommand.cs │ │ │ │ ├── IUpdateSecretsManagerSubscriptionCommand.cs │ │ │ │ └── IUpgradeOrganizationPlanCommand.cs │ │ │ ├── OrganizationSubscriptionServiceCollectionExtensions.cs │ │ │ ├── UpdateSecretsManagerSubscriptionCommand.cs │ │ │ └── UpgradeOrganizationPlanCommand.cs │ │ ├── Platform/ │ │ │ ├── Installations/ │ │ │ │ ├── Commands/ │ │ │ │ │ └── UpdateInstallationActivityDateCommand/ │ │ │ │ │ ├── IUpdateInstallationCommand.cs │ │ │ │ │ └── UpdateInstallationCommand.cs │ │ │ │ ├── Entities/ │ │ │ │ │ └── Installation.cs │ │ │ │ ├── Queries/ │ │ │ │ │ └── GetInstallationQuery/ │ │ │ │ │ ├── GetInstallationQuery.cs │ │ │ │ │ └── IGetInstallationQuery.cs │ │ │ │ └── Repositories/ │ │ │ │ └── IInstallationRepository.cs │ │ │ ├── Mail/ │ │ │ │ ├── Delivery/ │ │ │ │ │ ├── AmazonSesMailDeliveryService.cs │ │ │ │ │ ├── IMailDeliveryService.cs │ │ │ │ │ ├── MailKitSmtpMailDeliveryService.cs │ │ │ │ │ ├── MultiServiceMailDeliveryService.cs │ │ │ │ │ ├── NoopMailDeliveryService.cs │ │ │ │ │ └── SendGridMailDeliveryService.cs │ │ │ │ ├── Enqueuing/ │ │ │ │ │ ├── AzureQueueMailService.cs │ │ │ │ │ ├── BlockingMailQueueService.cs │ │ │ │ │ └── IMailEnqueuingService.cs │ │ │ │ ├── HandlebarsMailService.cs │ │ │ │ ├── IMailService.cs │ │ │ │ ├── Mailer/ │ │ │ │ │ ├── BaseMail.cs │ │ │ │ │ ├── HandlebarMailRenderer.cs │ │ │ │ │ ├── IMailRenderer.cs │ │ │ │ │ ├── IMailer.cs │ │ │ │ │ ├── Mailer.cs │ │ │ │ │ └── MailerServiceCollectionExtensions.cs │ │ │ │ ├── NoopMailService.cs │ │ │ │ └── README.md │ │ │ ├── PlatformServiceCollectionExtensions.cs │ │ │ ├── Push/ │ │ │ │ ├── Engines/ │ │ │ │ │ ├── AzureQueuePushEngine.cs │ │ │ │ │ ├── MultiServicePushNotificationService.cs │ │ │ │ │ ├── NoopPushEngine.cs │ │ │ │ │ ├── NotificationsApiPushEngine.cs │ │ │ │ │ └── RelayPushEngine.cs │ │ │ │ ├── IPushEngine.cs │ │ │ │ ├── IPushNotificationService.cs │ │ │ │ ├── IPushRelayer.cs │ │ │ │ ├── NotificationHub/ │ │ │ │ │ ├── INotificationHubClientProxy.cs │ │ │ │ │ ├── INotificationHubPool.cs │ │ │ │ │ ├── NotificationHubClientProxy.cs │ │ │ │ │ ├── NotificationHubConnection.cs │ │ │ │ │ ├── NotificationHubPool.cs │ │ │ │ │ └── NotificationHubPushEngine.cs │ │ │ │ ├── NotificationInfoAttribute.cs │ │ │ │ ├── NotificationTarget.cs │ │ │ │ ├── PushNotification.cs │ │ │ │ ├── PushServiceCollectionExtensions.cs │ │ │ │ ├── PushType.cs │ │ │ │ └── README.md │ │ │ └── PushRegistration/ │ │ │ ├── IPushRegistrationService.cs │ │ │ ├── NoopPushRegistrationService.cs │ │ │ ├── NotificationHubPushRegistrationService.cs │ │ │ ├── PushRegistrationData.cs │ │ │ ├── PushRegistrationServiceCollectionExtensions.cs │ │ │ ├── README.md │ │ │ └── RelayPushRegistrationService.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Repositories/ │ │ │ ├── ICollectionCipherRepository.cs │ │ │ ├── ICollectionRepository.cs │ │ │ ├── IDeviceRepository.cs │ │ │ ├── IInstallationDeviceRepository.cs │ │ │ ├── IMaintenanceRepository.cs │ │ │ ├── IOrganizationApiKeyRepository.cs │ │ │ ├── IOrganizationConnectionRepository.cs │ │ │ ├── IOrganizationDomainRepository.cs │ │ │ ├── IOrganizationSponsorshipRepository.cs │ │ │ ├── IPlayItemRepository.cs │ │ │ ├── IRepository.cs │ │ │ ├── ITransactionRepository.cs │ │ │ ├── IUserRepository.cs │ │ │ ├── Noop/ │ │ │ │ └── InstallationDeviceRepository.cs │ │ │ └── TableStorage/ │ │ │ └── InstallationDeviceRepository.cs │ │ ├── Resources/ │ │ │ ├── SharedResources.cs │ │ │ └── SharedResources.en.resx │ │ ├── SecretsManager/ │ │ │ ├── AuthorizationRequirements/ │ │ │ │ ├── BulkSecretOperationRequirement.cs │ │ │ │ ├── ProjectOperationRequirement.cs │ │ │ │ ├── ProjectPeopleAccessPoliciesOperationRequirement.cs │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesOperationRequirement.cs │ │ │ │ ├── SecretAccessPoliciesOperationRequirement.cs │ │ │ │ ├── SecretOperationRequirement.cs │ │ │ │ ├── ServiceAccountGrantedPoliciesOperationRequirement.cs │ │ │ │ ├── ServiceAccountOperationRequirement.cs │ │ │ │ └── ServiceAccountPeopleAccessPoliciesOperationRequirement.cs │ │ │ ├── Commands/ │ │ │ │ ├── AccessPolicies/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ ├── IUpdateProjectServiceAccountsAccessPoliciesCommand.cs │ │ │ │ │ └── IUpdateServiceAccountGrantedPoliciesCommand.cs │ │ │ │ ├── AccessTokens/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ └── ICreateAccessTokenCommand.cs │ │ │ │ ├── Porting/ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ └── IImportCommand.cs │ │ │ │ │ └── SMImport.cs │ │ │ │ ├── Projects/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ ├── ICreateProjectCommand.cs │ │ │ │ │ ├── IDeleteProjectCommand.cs │ │ │ │ │ └── IUpdateProjectCommand.cs │ │ │ │ ├── Requests/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ └── IRequestSMAccessCommand.cs │ │ │ │ ├── Secrets/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ ├── ICreateSecretCommand.cs │ │ │ │ │ ├── IDeleteSecretCommand.cs │ │ │ │ │ └── IUpdateSecretCommand.cs │ │ │ │ ├── ServiceAccounts/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ ├── ICreateServiceAccountCommand.cs │ │ │ │ │ ├── IDeleteServiceAccountsCommand.cs │ │ │ │ │ ├── IRevokeAccessTokensCommand.cs │ │ │ │ │ └── IUpdateServiceAccountCommand.cs │ │ │ │ └── Trash/ │ │ │ │ ├── IEmptyTrashCommand.cs │ │ │ │ └── IRestoreTrashCommand.cs │ │ │ ├── Entities/ │ │ │ │ ├── AccessPolicy.cs │ │ │ │ ├── ApiKey.cs │ │ │ │ ├── Project.cs │ │ │ │ ├── Secret.cs │ │ │ │ ├── SecretVersion.cs │ │ │ │ └── ServiceAccount.cs │ │ │ ├── Enums/ │ │ │ │ └── AccessPolicies/ │ │ │ │ └── AccessPolicyOperation.cs │ │ │ ├── Models/ │ │ │ │ ├── Data/ │ │ │ │ │ ├── AccessPolicyUpdates/ │ │ │ │ │ │ ├── AccessPolicyUpdate.cs │ │ │ │ │ │ ├── ProjectServiceAccountsAccessPoliciesUpdates.cs │ │ │ │ │ │ ├── SecretAccessPoliciesUpdates.cs │ │ │ │ │ │ └── ServiceAccountProjectAccessPolicyUpdate.cs │ │ │ │ │ ├── ApiKeyClientSecretDetails.cs │ │ │ │ │ ├── ApiKeyDetails.cs │ │ │ │ │ ├── PeopleGrantees.cs │ │ │ │ │ ├── ProjectCounts.cs │ │ │ │ │ ├── ProjectPeopleAccessPolicies.cs │ │ │ │ │ ├── ProjectPermissionDetails.cs │ │ │ │ │ ├── ProjectServiceAccountsAccessPolicies.cs │ │ │ │ │ ├── SecretAccessPolicies.cs │ │ │ │ │ ├── SecretPermissionDetails.cs │ │ │ │ │ ├── SecretsSyncRequest.cs │ │ │ │ │ ├── ServiceAccountCounts.cs │ │ │ │ │ ├── ServiceAccountGrantedPolicies.cs │ │ │ │ │ ├── ServiceAccountGrantedPoliciesPermissionDetails.cs │ │ │ │ │ ├── ServiceAccountPeopleAccessPolicies.cs │ │ │ │ │ └── ServiceAccountSecretsDetails.cs │ │ │ │ └── Mail/ │ │ │ │ └── RequestSecretsManagerAccessViewModel.cs │ │ │ ├── Queries/ │ │ │ │ ├── AccessPolicies/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ ├── IProjectServiceAccountsAccessPoliciesUpdatesQuery.cs │ │ │ │ │ ├── ISameOrganizationQuery.cs │ │ │ │ │ ├── ISecretAccessPoliciesUpdatesQuery.cs │ │ │ │ │ └── IServiceAccountGrantedPolicyUpdatesQuery.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ └── IAccessClientQuery.cs │ │ │ │ ├── Projects/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ └── IMaxProjectsQuery.cs │ │ │ │ ├── Secrets/ │ │ │ │ │ └── Interfaces/ │ │ │ │ │ └── ISecretsSyncQuery.cs │ │ │ │ └── ServiceAccounts/ │ │ │ │ └── Interfaces/ │ │ │ │ ├── ICountNewServiceAccountSlotsRequiredQuery.cs │ │ │ │ └── IServiceAccountSecretsDetailsQuery.cs │ │ │ └── Repositories/ │ │ │ ├── IAccessPolicyRepository.cs │ │ │ ├── IApiKeyRepository.cs │ │ │ ├── IProjectRepository.cs │ │ │ ├── ISecretRepository.cs │ │ │ ├── ISecretVersionRepository.cs │ │ │ ├── IServiceAccountRepository.cs │ │ │ └── Noop/ │ │ │ ├── NoopProjectRepository.cs │ │ │ ├── NoopSecretRepository.cs │ │ │ ├── NoopSecretVersionRepository.cs │ │ │ └── NoopServiceAccountRepository.cs │ │ ├── Services/ │ │ │ ├── IApplicationCacheService.cs │ │ │ ├── IAttachmentStorageService.cs │ │ │ ├── IBraintreeService.cs │ │ │ ├── IDeviceService.cs │ │ │ ├── IDnsResolverService.cs │ │ │ ├── IFeatureService.cs │ │ │ ├── II18nService.cs │ │ │ ├── IUserService.cs │ │ │ ├── Implementations/ │ │ │ │ ├── AzureQueueService.cs │ │ │ │ ├── BaseIdentityClientService.cs │ │ │ │ ├── BraintreeService.cs │ │ │ │ ├── DeviceService.cs │ │ │ │ ├── DnsResolverService.cs │ │ │ │ ├── FeatureRoutedCacheService.cs │ │ │ │ ├── I18nService.cs │ │ │ │ ├── I18nViewLocalizer.cs │ │ │ │ ├── InMemoryApplicationCacheService.cs │ │ │ │ ├── InMemoryServiceBusApplicationCacheService.cs │ │ │ │ ├── LaunchDarklyFeatureService.cs │ │ │ │ └── UserService.cs │ │ │ └── Play/ │ │ │ ├── IPlayIdService.cs │ │ │ ├── IPlayItemService.cs │ │ │ ├── Implementations/ │ │ │ │ ├── NeverPlayIdServices.cs │ │ │ │ ├── PlayIdService.cs │ │ │ │ ├── PlayIdSingletonService.cs │ │ │ │ └── PlayItemService.cs │ │ │ └── README.md │ │ ├── Settings/ │ │ │ ├── GlobalSettings.cs │ │ │ ├── IBaseServiceUriSettings.cs │ │ │ ├── ICommunicationSettings.cs │ │ │ ├── IConnectionStringSettings.cs │ │ │ ├── IDomainVerificationSettings.cs │ │ │ ├── IFileStorageSettings.cs │ │ │ ├── IGlobalSettings.cs │ │ │ ├── IInstallationSettings.cs │ │ │ ├── ILaunchDarklySettings.cs │ │ │ ├── ISsoCookieVendorSettings.cs │ │ │ └── IWebPushSettings.cs │ │ ├── Tokens/ │ │ │ ├── BadTokenException.cs │ │ │ ├── DataProtectorTokenFactory.cs │ │ │ ├── ExpiringTokenable.cs │ │ │ ├── IBillingSyncTokenable.cs │ │ │ ├── IDataProtectorTokenFactory.cs │ │ │ ├── Token.cs │ │ │ └── Tokenable.cs │ │ ├── Tools/ │ │ │ ├── Entities/ │ │ │ │ └── Send.cs │ │ │ ├── Enums/ │ │ │ │ ├── AuthType.cs │ │ │ │ └── SendType.cs │ │ │ ├── ImportFeatures/ │ │ │ │ ├── ImportCiphersCommand.cs │ │ │ │ ├── ImportServiceCollectionExtension.cs │ │ │ │ └── Interfaces/ │ │ │ │ └── IImportCiphersCommand.cs │ │ │ ├── Models/ │ │ │ │ └── Data/ │ │ │ │ ├── SendAccessResult.cs │ │ │ │ ├── SendAuthenticationTypes.cs │ │ │ │ ├── SendData.cs │ │ │ │ ├── SendFileData.cs │ │ │ │ └── SendTextData.cs │ │ │ ├── Repositories/ │ │ │ │ └── ISendRepository.cs │ │ │ ├── SendFeatures/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── AnonymousSendCommand.cs │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── IAnonymousSendCommand.cs │ │ │ │ │ │ └── INonAnonymousSendCommand.cs │ │ │ │ │ └── NonAnonymousSendCommand.cs │ │ │ │ ├── Queries/ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ ├── ISendAuthenticationQuery.cs │ │ │ │ │ │ └── ISendOwnerQuery.cs │ │ │ │ │ ├── SendAuthenticationQuery.cs │ │ │ │ │ └── SendOwnerQuery.cs │ │ │ │ ├── SendServiceCollectionExtension.cs │ │ │ │ └── Services/ │ │ │ │ ├── AzureSendFileStorageService.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── ISendAuthorizationService.cs │ │ │ │ │ ├── ISendCoreHelperService.cs │ │ │ │ │ ├── ISendStorageService.cs │ │ │ │ │ └── ISendValidationService.cs │ │ │ │ ├── LocalSendStorageService.cs │ │ │ │ ├── SendAuthorizationService.cs │ │ │ │ ├── SendCoreHelperService.cs │ │ │ │ ├── SendFileSettingHelper.cs │ │ │ │ └── SendValidationService.cs │ │ │ └── Services/ │ │ │ └── NoopImplementations/ │ │ │ └── NoopSendFileStorageService.cs │ │ ├── Utilities/ │ │ │ ├── AssemblyHelpers.cs │ │ │ ├── AuthorizationServiceExtensions.cs │ │ │ ├── BillingHelpers.cs │ │ │ ├── BulkAuthorizationHandler.cs │ │ │ ├── CACHING.md │ │ │ ├── ClaimsExtensions.cs │ │ │ ├── CoreHelpers.cs │ │ │ ├── CurrentContextMiddleware.cs │ │ │ ├── CustomIpRateLimitMiddleware.cs │ │ │ ├── CustomRedisProcessingStrategy.cs │ │ │ ├── DeviceTypes.cs │ │ │ ├── DistributedCacheExtensions.cs │ │ │ ├── DomainNameAttribute.cs │ │ │ ├── EmailValidation.cs │ │ │ ├── EncryptedStringAttribute.cs │ │ │ ├── EncryptedStringLengthAttribute.cs │ │ │ ├── EnumMemberJsonConverter.cs │ │ │ ├── EnumerationProtectionHelpers.cs │ │ │ ├── EpochDateTimeJsonConverter.cs │ │ │ ├── EventIntegrationsCacheConstants.cs │ │ │ ├── ExtendedCacheServiceCollectionExtensions.cs │ │ │ ├── HandlebarsObjectJsonConverter.cs │ │ │ ├── HostBuilderExtensions.cs │ │ │ ├── IDbMigrator.cs │ │ │ ├── JsonHelpers.cs │ │ │ ├── KdfSettingsValidator.cs │ │ │ ├── LoggerFactoryExtensions.cs │ │ │ ├── LoggingExceptionHandlerFilterAttribute.cs │ │ │ ├── ModelStateExtensions.cs │ │ │ ├── OrganizationReportCacheConstants.cs │ │ │ ├── RequireFeatureAttribute.cs │ │ │ ├── RequireLowerEnvironmentAttribute.cs │ │ │ ├── SecurityHeadersMiddleware.cs │ │ │ ├── SelfHostedAttribute.cs │ │ │ ├── SpanExtensions.cs │ │ │ ├── StaticStore.cs │ │ │ ├── StrictEmailAddressAttribute.cs │ │ │ ├── StrictEmailAddressListAttribute.cs │ │ │ └── SystemTextJsonCosmosSerializer.cs │ │ ├── Vault/ │ │ │ ├── Authorization/ │ │ │ │ ├── Permissions/ │ │ │ │ │ └── NormalCipherPermissions.cs │ │ │ │ └── SecurityTasks/ │ │ │ │ ├── SecurityTaskAuthorizationHandler.cs │ │ │ │ ├── SecurityTaskOperationRequirement.cs │ │ │ │ └── SecurityTaskOrganizationAuthorizationHandler.cs │ │ │ ├── Commands/ │ │ │ │ ├── ArchiveCiphersCommand.cs │ │ │ │ ├── CreateManyTaskNotificationsCommand.cs │ │ │ │ ├── CreateManyTasksCommand.cs │ │ │ │ ├── Interfaces/ │ │ │ │ │ ├── IArchiveCiphersCommand.cs │ │ │ │ │ ├── ICreateManyTaskNotificationsCommand.cs │ │ │ │ │ ├── ICreateManyTasksCommand.cs │ │ │ │ │ ├── IMarkNotificationsForTaskAsDeletedCommand.cs │ │ │ │ │ ├── IMarkTaskAsCompleteCommand.cs │ │ │ │ │ └── IUnarchiveCiphersCommand.cs │ │ │ │ ├── MarkNotificationsForTaskAsDeletedCommand.cs │ │ │ │ ├── MarkTaskAsCompletedCommand.cs │ │ │ │ └── UnarchiveCiphersCommand.cs │ │ │ ├── Entities/ │ │ │ │ ├── Cipher.cs │ │ │ │ ├── SecurityTask.cs │ │ │ │ └── SecurityTaskMetrics.cs │ │ │ ├── Enums/ │ │ │ │ ├── CipherRepromptType.cs │ │ │ │ ├── CipherStateAction.cs │ │ │ │ ├── CipherType.cs │ │ │ │ ├── FieldType.cs │ │ │ │ ├── SecureNoteType.cs │ │ │ │ ├── SecurityTaskStatus.cs │ │ │ │ └── SecurityTaskType.cs │ │ │ ├── Models/ │ │ │ │ ├── Api/ │ │ │ │ │ └── SecurityTaskCreateRequest.cs │ │ │ │ └── Data/ │ │ │ │ ├── AttachmentResponseData.cs │ │ │ │ ├── CipherAttachment.cs │ │ │ │ ├── CipherCardData.cs │ │ │ │ ├── CipherData.cs │ │ │ │ ├── CipherDetails.cs │ │ │ │ ├── CipherFieldData.cs │ │ │ │ ├── CipherIdentityData.cs │ │ │ │ ├── CipherLoginData.cs │ │ │ │ ├── CipherLoginFido2CredentialData.cs │ │ │ │ ├── CipherOrganizationDetails.cs │ │ │ │ ├── CipherPasswordHistoryData.cs │ │ │ │ ├── CipherSSHKeyData.cs │ │ │ │ ├── CipherSecureNoteData.cs │ │ │ │ ├── DeleteAttachmentReponseData.cs │ │ │ │ ├── OrganizationCipherPermission.cs │ │ │ │ ├── UserCipherForTask.cs │ │ │ │ ├── UserSecurityTaskCipher.cs │ │ │ │ └── UserSecurityTasksCount.cs │ │ │ ├── Queries/ │ │ │ │ ├── GetCipherPermissionsForUserQuery.cs │ │ │ │ ├── GetSecurityTasksNotificationDetailsQuery.cs │ │ │ │ ├── GetTaskDetailsForUserQuery.cs │ │ │ │ ├── GetTaskMetricsForOrganizationQuery.cs │ │ │ │ ├── GetTasksForOrganizationQuery.cs │ │ │ │ ├── IGetCipherPermissionsForUserQuery.cs │ │ │ │ ├── IGetSecurityTasksNotificationDetailsQuery.cs │ │ │ │ ├── IGetTaskDetailsForUserQuery.cs │ │ │ │ ├── IGetTaskMetricsForOrganizationQuery.cs │ │ │ │ ├── IGetTasksForOrganizationQuery.cs │ │ │ │ ├── IOrganizationCiphersQuery.cs │ │ │ │ └── OrganizationCiphersQuery.cs │ │ │ ├── Repositories/ │ │ │ │ ├── ICipherRepository.cs │ │ │ │ ├── IFolderRepository.cs │ │ │ │ └── ISecurityTaskRepository.cs │ │ │ ├── Services/ │ │ │ │ ├── ICipherService.cs │ │ │ │ ├── Implementations/ │ │ │ │ │ ├── AzureAttachmentStorageService.cs │ │ │ │ │ ├── CipherService.cs │ │ │ │ │ └── LocalAttachmentStorageService.cs │ │ │ │ └── NoopImplementations/ │ │ │ │ └── NoopAttachmentStorageService.cs │ │ │ └── VaultServiceCollectionExtensions.cs │ │ ├── licensing.cer │ │ └── licensing_dev.cer │ ├── Events/ │ │ ├── Controllers/ │ │ │ ├── CollectController.cs │ │ │ └── InfoController.cs │ │ ├── Dockerfile │ │ ├── Events.csproj │ │ ├── Models/ │ │ │ └── EventModel.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ └── entrypoint.sh │ ├── EventsProcessor/ │ │ ├── AzureQueueHostedService.cs │ │ ├── Dockerfile │ │ ├── EventsProcessor.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ └── entrypoint.sh │ ├── Icons/ │ │ ├── Controllers/ │ │ │ ├── ChangePasswordUriController.cs │ │ │ ├── IconsController.cs │ │ │ └── InfoController.cs │ │ ├── Dockerfile │ │ ├── Icons.csproj │ │ ├── IconsSettings.cs │ │ ├── Models/ │ │ │ ├── ChangePasswordUriResponse.cs │ │ │ ├── ChangePasswordUriSettings.cs │ │ │ ├── DomainIcons.cs │ │ │ ├── DomainName.cs │ │ │ ├── Icon.cs │ │ │ ├── IconHttpRequest.cs │ │ │ ├── IconHttpResponse.cs │ │ │ ├── IconLink.cs │ │ │ └── IconUri.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ ├── ChangePasswordUriService.cs │ │ │ ├── DomainMappingService.cs │ │ │ ├── IChangePasswordUriService.cs │ │ │ ├── IDomainMappingService.cs │ │ │ ├── IIconFetchingService.cs │ │ │ ├── IUriService.cs │ │ │ ├── IconFetchingService.cs │ │ │ └── UriService.cs │ │ ├── Startup.cs │ │ ├── Util/ │ │ │ ├── IPAddressExtension.cs │ │ │ ├── ServiceCollectionExtension.cs │ │ │ ├── UriBuilderExtension.cs │ │ │ └── UriExtension.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.sh │ │ └── entrypoint.sh │ ├── Identity/ │ │ ├── Billing/ │ │ │ └── Controller/ │ │ │ └── AccountsController.cs │ │ ├── Controllers/ │ │ │ ├── AccountsController.cs │ │ │ ├── InfoController.cs │ │ │ └── SsoController.cs │ │ ├── Dockerfile │ │ ├── Identity.csproj │ │ ├── IdentityServer/ │ │ │ ├── ApiClient.cs │ │ │ ├── ApiResources.cs │ │ │ ├── AuthorizationCodeStore.cs │ │ │ ├── ClientProviders/ │ │ │ │ ├── InstallationClientProvider.cs │ │ │ │ ├── InternalClientProvider.cs │ │ │ │ ├── OrganizationClientProvider.cs │ │ │ │ ├── SecretsManagerApiKeyProvider.cs │ │ │ │ └── UserClientProvider.cs │ │ │ ├── Constants/ │ │ │ │ └── RequestValidationConstants.cs │ │ │ ├── CustomValidatorRequestContext.cs │ │ │ ├── DynamicClientStore.cs │ │ │ ├── Enums/ │ │ │ │ ├── CustomGrantTypes.cs │ │ │ │ └── DeviceValidationResultType.cs │ │ │ ├── IUserDecryptionOptionsBuilder.cs │ │ │ ├── PersistedGrantStore.cs │ │ │ ├── ProfileService.cs │ │ │ ├── RequestValidators/ │ │ │ │ ├── BaseRequestValidator.cs │ │ │ │ ├── ClientVersionValidator.cs │ │ │ │ ├── CustomTokenRequestValidator.cs │ │ │ │ ├── DeviceValidator.cs │ │ │ │ ├── IDeviceValidator.cs │ │ │ │ ├── ISsoRequestValidator.cs │ │ │ │ ├── ITwoFactorAuthenticationValidator.cs │ │ │ │ ├── ResourceOwnerPasswordValidator.cs │ │ │ │ ├── SendAccess/ │ │ │ │ │ ├── ISendAuthenticationMethodValidator.cs │ │ │ │ │ ├── SendAccessConstants.cs │ │ │ │ │ ├── SendAccessGrantValidator.cs │ │ │ │ │ ├── SendEmailOtpRequestValidator.cs │ │ │ │ │ ├── SendNeverAuthenticateRequestValidator.cs │ │ │ │ │ ├── SendPasswordRequestValidator.cs │ │ │ │ │ └── readme.md │ │ │ │ ├── SsoRequestValidator.cs │ │ │ │ ├── TwoFactorAuthenticationValidator.cs │ │ │ │ └── WebAuthnGrantValidator.cs │ │ │ ├── ServiceCollectionExtensions.cs │ │ │ ├── StaticClientStore.cs │ │ │ ├── StaticClients/ │ │ │ │ └── SendClientBuilder.cs │ │ │ ├── UserDecryptionOptionsBuilder.cs │ │ │ └── VaultCorsPolicyService.cs │ │ ├── Models/ │ │ │ ├── RedirectViewModel.cs │ │ │ ├── Request/ │ │ │ │ └── Accounts/ │ │ │ │ └── PasswordPreloginRequestModel.cs │ │ │ └── Response/ │ │ │ └── Accounts/ │ │ │ ├── PasswordPreloginResponseModel.cs │ │ │ └── RegisterFinishResponseModel.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── Utilities/ │ │ │ ├── DiscoveryResponseGenerator.cs │ │ │ ├── LoginApprovingClientTypes.cs │ │ │ └── ServiceCollectionExtensions.cs │ │ ├── Views/ │ │ │ └── Shared/ │ │ │ └── Redirect.cshtml │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.ps1 │ │ ├── build.sh │ │ └── entrypoint.sh │ ├── Infrastructure.Dapper/ │ │ ├── AdminConsole/ │ │ │ ├── Helpers/ │ │ │ │ └── BulkResourceCreationService.cs │ │ │ └── Repositories/ │ │ │ ├── GroupRepository.cs │ │ │ ├── OrganizationRepository.cs │ │ │ ├── OrganizationUserRepository.cs │ │ │ ├── PolicyRepository.cs │ │ │ ├── ProviderOrganizationRepository.cs │ │ │ ├── ProviderRepository.cs │ │ │ └── ProviderUserRepository.cs │ │ ├── Auth/ │ │ │ ├── Helpers/ │ │ │ │ └── EmergencyAccessHelpers.cs │ │ │ └── Repositories/ │ │ │ ├── AuthRequestRepository.cs │ │ │ ├── EmergencyAccessRepository.cs │ │ │ ├── GrantRepository.cs │ │ │ ├── SsoConfigRepository.cs │ │ │ ├── SsoUserRepository.cs │ │ │ └── WebAuthnCredentialRepository.cs │ │ ├── Billing/ │ │ │ └── Repositories/ │ │ │ ├── ClientOrganizationMigrationRecordRepository.cs │ │ │ ├── OrganizationInstallationRepository.cs │ │ │ ├── ProviderInvoiceItemRepository.cs │ │ │ ├── ProviderPlanRepository.cs │ │ │ └── SubscriptionDiscountRepository.cs │ │ ├── DapperHelpers.cs │ │ ├── DapperServiceCollectionExtensions.cs │ │ ├── Dirt/ │ │ │ ├── OrganizationApplicationRepository.cs │ │ │ ├── OrganizationMemberBaseDetailRepository.cs │ │ │ ├── OrganizationReportRepository.cs │ │ │ ├── PasswordHealthReportApplicationRepository.cs │ │ │ └── Repositories/ │ │ │ ├── EventRepository.cs │ │ │ ├── OrganizationIntegrationConfigurationRepository.cs │ │ │ └── OrganizationIntegrationRepository.cs │ │ ├── Infrastructure.Dapper.csproj │ │ ├── KeyManagement/ │ │ │ └── Repositories/ │ │ │ ├── UserAsymmetricKeysRepository.cs │ │ │ └── UserSignatureKeyPairRepository.cs │ │ ├── NotificationCenter/ │ │ │ └── Repositories/ │ │ │ ├── NotificationRepository.cs │ │ │ └── NotificationStatusRepository.cs │ │ ├── Platform/ │ │ │ └── Installations/ │ │ │ └── Repositories/ │ │ │ └── InstallationRepository.cs │ │ ├── Repositories/ │ │ │ ├── BaseRepository.cs │ │ │ ├── CollectionCipherRepository.cs │ │ │ ├── CollectionRepository.cs │ │ │ ├── DateTimeHandler.cs │ │ │ ├── DeviceRepository.cs │ │ │ ├── JsonCollectionTypeHandler.cs │ │ │ ├── MaintenanceRepository.cs │ │ │ ├── OrganizationApiKeyRepository.cs │ │ │ ├── OrganizationConnectionRepository.cs │ │ │ ├── OrganizationDomainRepository.cs │ │ │ ├── OrganizationSponsorshipRepository.cs │ │ │ ├── PlayItemRepository.cs │ │ │ ├── Repository.cs │ │ │ ├── TransactionRepository.cs │ │ │ └── UserRepository.cs │ │ ├── SecretsManager/ │ │ │ └── Repositories/ │ │ │ └── ApiKeyRepository.cs │ │ ├── Tools/ │ │ │ ├── Helpers/ │ │ │ │ └── SendHelpers.cs │ │ │ └── Repositories/ │ │ │ └── SendRepository.cs │ │ ├── Utilities/ │ │ │ └── SqlGuidHelpers.cs │ │ └── Vault/ │ │ ├── Helpers/ │ │ │ ├── CipherHelpers.cs │ │ │ └── FolderHelpers.cs │ │ └── Repositories/ │ │ ├── CipherRepository.cs │ │ ├── FolderRepository.cs │ │ └── SecurityTaskRepository.cs │ ├── Infrastructure.EntityFramework/ │ │ ├── AdminConsole/ │ │ │ ├── Configurations/ │ │ │ │ ├── OrganizationEntityTypeConfiguration.cs │ │ │ │ ├── OrganizationIntegrationConfigurationEntityTypeConfiguration.cs │ │ │ │ ├── OrganizationIntegrationEntityTypeConfiguration.cs │ │ │ │ ├── PolicyEntityTypeConfiguration.cs │ │ │ │ └── ProviderEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ ├── Organization.cs │ │ │ │ ├── Policy.cs │ │ │ │ └── Provider/ │ │ │ │ ├── Provider.cs │ │ │ │ ├── ProviderOrganization.cs │ │ │ │ └── ProviderUser.cs │ │ │ └── Repositories/ │ │ │ ├── GroupRepository.cs │ │ │ ├── OrganizationRepository.cs │ │ │ ├── OrganizationUserRepository.cs │ │ │ ├── PolicyRepository.cs │ │ │ ├── ProviderOrganizationRepository.cs │ │ │ ├── ProviderRepository.cs │ │ │ ├── ProviderUserRepository.cs │ │ │ └── Queries/ │ │ │ ├── OrganizationUserOrganizationDetailsViewQuery.cs │ │ │ ├── OrganizationUserReadByClaimedOrganizationDomainsQuery.cs │ │ │ ├── OrganizationUserReadCountByFreeOrganizationAdminUserQuery.cs │ │ │ ├── OrganizationUserReadCountByOrganizationIdEmailQuery.cs │ │ │ ├── OrganizationUserReadCountByOrganizationIdQuery.cs │ │ │ ├── OrganizationUserReadOccupiedSmSeatCountByOrganizationIdQuery.cs │ │ │ ├── OrganizationUserUpdateWithCollectionsQuery.cs │ │ │ ├── OrganizationUserUserViewQuery.cs │ │ │ ├── PolicyReadByUserIdQuery.cs │ │ │ ├── ProviderOrganizationCountByOrganizationIdsQuery.cs │ │ │ ├── ProviderOrganizationOrganizationDetailsReadByProviderIdQuery.cs │ │ │ ├── ProviderOrganizationReadByUserIdQuery.cs │ │ │ ├── ProviderUserOrganizationDetailsViewQuery.cs │ │ │ └── ProviderUserProviderDetailsReadByUserIdStatusQuery.cs │ │ ├── Auth/ │ │ │ ├── Configurations/ │ │ │ │ ├── AuthRequestConfiguration.cs │ │ │ │ ├── GrantEntityTypeConfiguration.cs │ │ │ │ └── SsoUserEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ ├── AuthRequest.cs │ │ │ │ ├── EmergencyAccess.cs │ │ │ │ ├── Grant.cs │ │ │ │ ├── SsoConfig.cs │ │ │ │ ├── SsoUser.cs │ │ │ │ └── WebAuthnCredential.cs │ │ │ └── Repositories/ │ │ │ ├── AuthRequestRepository.cs │ │ │ ├── EmergencyAccessRepository.cs │ │ │ ├── GrantRepository.cs │ │ │ ├── Queries/ │ │ │ │ ├── DeviceWithPendingAuthByUserIdQuery.cs │ │ │ │ ├── EmergencyAccessDetailsViewQuery.cs │ │ │ │ └── EmergencyAccessReadCountByGrantorIdEmailQuery.cs │ │ │ ├── SsoConfigRepository.cs │ │ │ ├── SsoUserRepository.cs │ │ │ └── WebAuthnCredentialRepository.cs │ │ ├── Billing/ │ │ │ ├── Configurations/ │ │ │ │ ├── ClientOrganizationMigrationRecordEntityTypeConfiguration.cs │ │ │ │ ├── OrganizationInstallationEntityTypeConfiguration.cs │ │ │ │ ├── ProviderInvoiceItemEntityTypeConfiguration.cs │ │ │ │ ├── ProviderPlanEntityTypeConfiguration.cs │ │ │ │ └── SubscriptionDiscountEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ ├── ClientOrganizationMigrationRecord.cs │ │ │ │ ├── OrganizationInstallation.cs │ │ │ │ ├── ProviderInvoiceItem.cs │ │ │ │ ├── ProviderPlan.cs │ │ │ │ └── SubscriptionDiscount.cs │ │ │ └── Repositories/ │ │ │ ├── ClientOrganizationMigrationRecordRepository.cs │ │ │ ├── OrganizationInstallationRepository.cs │ │ │ ├── ProviderInvoiceItemRepository.cs │ │ │ ├── ProviderPlanRepository.cs │ │ │ └── SubscriptionDiscountRepository.cs │ │ ├── Configurations/ │ │ │ ├── CacheEntityTypeConfiguration.cs │ │ │ ├── DeviceEntityTypeConfiguration.cs │ │ │ ├── OrganizationSponsorshipEntityTypeConfiguration.cs │ │ │ ├── OrganizationUserEntityTypeConfiguration.cs │ │ │ ├── PlayItemEntityTypeConfiguration.cs │ │ │ ├── TransactionEntityTypeConfiguration.cs │ │ │ └── UserEntityTypeConfiguration.cs │ │ ├── Converters/ │ │ │ └── DataProtectionConverter.cs │ │ ├── Dirt/ │ │ │ ├── Configurations/ │ │ │ │ ├── EventEntityTypeConfiguration.cs │ │ │ │ ├── OrganizationApplicationEntityTypeConfiguration.cs │ │ │ │ ├── OrganizationReportEntityTypeConfiguration.cs │ │ │ │ └── PasswordHealthReportApplicationEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ ├── Event.cs │ │ │ │ ├── OrganizationApplication.cs │ │ │ │ ├── OrganizationIntegration.cs │ │ │ │ ├── OrganizationIntegrationConfiguration.cs │ │ │ │ ├── OrganizationReport.cs │ │ │ │ └── PasswordHealthReportApplication.cs │ │ │ ├── OrganizationMemberBaseDetailRepository.cs │ │ │ └── Repositories/ │ │ │ ├── EventRepository.cs │ │ │ ├── OrganizationApplicationRepository.cs │ │ │ ├── OrganizationIntegrationConfigurationRepository.cs │ │ │ ├── OrganizationIntegrationRepository.cs │ │ │ ├── OrganizationReportRepository.cs │ │ │ ├── PasswordHealthReportApplicationRepository.cs │ │ │ └── Queries/ │ │ │ ├── EventReadPageByCipherIdQuery.cs │ │ │ ├── EventReadPageByOrganizationIdActingUserIdQuery.cs │ │ │ ├── EventReadPageByOrganizationIdQuery.cs │ │ │ ├── EventReadPageByOrganizationIdServiceAccountIdQuery.cs │ │ │ ├── EventReadPageByProjectIdQuery.cs │ │ │ ├── EventReadPageByProviderIdActingUserIdQuery.cs │ │ │ ├── EventReadPageByProviderIdQuery.cs │ │ │ ├── EventReadPageBySecretIdQuery.cs │ │ │ ├── EventReadPageByServiceAccountIdQuery.cs │ │ │ ├── EventReadPageByUserIdQuery.cs │ │ │ ├── OrganizationIntegrationConfigurationDetailsReadManyByEventTypeOrganizationIdIntegrationTypeQuery.cs │ │ │ ├── OrganizationIntegrationConfigurationDetailsReadManyQuery.cs │ │ │ ├── OrganizationIntegrationConfigurationReadManyByOrganizationIntegrationIdQuery.cs │ │ │ ├── OrganizationIntegrationReadByTeamsConfigurationTenantIdTeamIdQuery.cs │ │ │ └── OrganizationIntegrationReadManyByOrganizationIdQuery.cs │ │ ├── EfExtensions.cs │ │ ├── EntityFrameworkCache.cs │ │ ├── EntityFrameworkServiceCollectionExtensions.cs │ │ ├── Infrastructure.EntityFramework.csproj │ │ ├── KeyManagement/ │ │ │ ├── Configurations/ │ │ │ │ └── UserSignatureKeyPairEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ └── UserSignatureKeyPair.cs │ │ │ └── Repositories/ │ │ │ ├── UserAsymmetricKeysRepository.cs │ │ │ └── UserSignatureKeyPairRepository.cs │ │ ├── Models/ │ │ │ ├── Cache.cs │ │ │ ├── Collection.cs │ │ │ ├── CollectionCipher.cs │ │ │ ├── CollectionGroup.cs │ │ │ ├── CollectionUser.cs │ │ │ ├── Device.cs │ │ │ ├── Group.cs │ │ │ ├── GroupUser.cs │ │ │ ├── OrganizationApiKey.cs │ │ │ ├── OrganizationConnection.cs │ │ │ ├── OrganizationDomain.cs │ │ │ ├── OrganizationSponsorship.cs │ │ │ ├── OrganizationUser.cs │ │ │ ├── PlayItem.cs │ │ │ ├── Role.cs │ │ │ ├── TaxRate.cs │ │ │ ├── Transaction.cs │ │ │ └── User.cs │ │ ├── NotificationCenter/ │ │ │ ├── Configurations/ │ │ │ │ ├── NotificationEntityTypeConfiguration.cs │ │ │ │ └── NotificationStatusEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ ├── Notification.cs │ │ │ │ └── NotificationStatus.cs │ │ │ └── Repositories/ │ │ │ ├── NotificationRepository.cs │ │ │ ├── NotificationStatusRepository.cs │ │ │ └── Queries/ │ │ │ └── NotificationStatusDetailsViewQuery.cs │ │ ├── Platform/ │ │ │ └── Installations/ │ │ │ ├── Models/ │ │ │ │ └── Installation.cs │ │ │ └── Repositories/ │ │ │ └── InstallationRepository.cs │ │ ├── Repositories/ │ │ │ ├── BaseEntityFrameworkRepository.cs │ │ │ ├── CollectionCipherRepository.cs │ │ │ ├── CollectionRepository.cs │ │ │ ├── DatabaseContext.cs │ │ │ ├── DatabaseContextExtensions.cs │ │ │ ├── DeviceRepository.cs │ │ │ ├── MaintenanceRepository.cs │ │ │ ├── OrganizationApiKeyRepository.cs │ │ │ ├── OrganizationConnectionRepository.cs │ │ │ ├── OrganizationDomainRepository.cs │ │ │ ├── OrganizationSponsorshipRepository.cs │ │ │ ├── PlayItemRepository.cs │ │ │ ├── Queries/ │ │ │ │ ├── CollectionAdminDetailsQuery.cs │ │ │ │ ├── CollectionCipherReadByUserIdCipherIdQuery.cs │ │ │ │ ├── CollectionCipherReadByUserIdQuery.cs │ │ │ │ ├── CollectionReadCountByOrganizationIdQuery.cs │ │ │ │ ├── CollectionUserUpdateUsersQuery.cs │ │ │ │ ├── CollectionsReadByOrganizationIdUserIdQuery.cs │ │ │ │ ├── GroupUserUpdateGroupsQuery.cs │ │ │ │ ├── IQuery.cs │ │ │ │ ├── UserBumpAccountRevisionDateByCipherIdQuery.cs │ │ │ │ ├── UserBumpAccountRevisionDateByOrganizationIdQuery.cs │ │ │ │ ├── UserCipherDetailsQuery.cs │ │ │ │ ├── UserCollectionDetailsQuery.cs │ │ │ │ └── UserReadPublicKeysByProviderUserIdsQuery.cs │ │ │ ├── Repository.cs │ │ │ ├── TransactionRepository.cs │ │ │ └── UserRepository.cs │ │ ├── SecretsManager/ │ │ │ ├── Configurations/ │ │ │ │ ├── AccessPolicyEntityTypeConfiguration.cs │ │ │ │ ├── ApiKeyEntityTypeConfiguration.cs │ │ │ │ ├── ProjectEntityTypeConfiguration.cs │ │ │ │ ├── SecretEntityTypeConfiguration.cs │ │ │ │ ├── SecretVersionEntityTypeConfiguration.cs │ │ │ │ └── ServiceAccountEntityTypeConfiguration.cs │ │ │ ├── Discriminators/ │ │ │ │ └── AccessPolicyDiscriminator.cs │ │ │ ├── Models/ │ │ │ │ ├── AccessPolicy.cs │ │ │ │ ├── ApiKey.cs │ │ │ │ ├── Project.cs │ │ │ │ ├── Secret.cs │ │ │ │ ├── SecretVersion.cs │ │ │ │ └── ServiceAccount.cs │ │ │ └── Repositories/ │ │ │ └── ApiKeyRepository.cs │ │ ├── Tools/ │ │ │ ├── Configurations/ │ │ │ │ └── SendEntityTypeConfiguration.cs │ │ │ ├── Models/ │ │ │ │ └── Send.cs │ │ │ └── Repositories/ │ │ │ └── SendRepository.cs │ │ └── Vault/ │ │ ├── Configurations/ │ │ │ └── SecurityTaskEntityTypeConfiguration.cs │ │ ├── Models/ │ │ │ ├── Cipher.cs │ │ │ ├── Folder.cs │ │ │ └── SecurityTask.cs │ │ └── Repositories/ │ │ ├── CipherRepository.cs │ │ ├── FolderRepository.cs │ │ ├── Queries/ │ │ │ ├── CipherDetailsQuery.cs │ │ │ ├── CipherOrganizationDetailsReadByIdQuery.cs │ │ │ ├── CipherOrganizationDetailsReadByOrganizationIdQuery.cs │ │ │ ├── CipherOrganizationPermissionsQuery.cs │ │ │ ├── CipherReadCanEditByIdUserIdQuery.cs │ │ │ ├── SecurityTaskReadByUserIdStatusQuery.cs │ │ │ └── UserSecurityTasksByCipherIdsQuery.cs │ │ └── SecurityTaskRepository.cs │ ├── Notifications/ │ │ ├── AnonymousNotificationsHub.cs │ │ ├── AzureQueueHostedService.cs │ │ ├── ConnectionCounter.cs │ │ ├── Controllers/ │ │ │ ├── InfoController.cs │ │ │ └── SendController.cs │ │ ├── Dockerfile │ │ ├── HeartbeatHostedService.cs │ │ ├── HubHelpers.cs │ │ ├── INotificationHub.cs │ │ ├── Jobs/ │ │ │ ├── JobsHostedService.cs │ │ │ └── LogConnectionCounterJob.cs │ │ ├── Notifications.csproj │ │ ├── NotificationsHub.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── SubjectUserIdProvider.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.QA.json │ │ ├── appsettings.SelfHosted.json │ │ ├── appsettings.json │ │ ├── build.sh │ │ └── entrypoint.sh │ ├── SharedWeb/ │ │ ├── Health/ │ │ │ └── HealthCheckServiceExtensions.cs │ │ ├── Play/ │ │ │ ├── PlayServiceCollectionExtensions.cs │ │ │ └── Repositories/ │ │ │ ├── DapperTestOrganizationTrackingOrganizationRepository.cs │ │ │ ├── DapperTestUserTrackingUserRepository.cs │ │ │ ├── EFTestOrganizationTrackingOrganizationRepository.cs │ │ │ └── EFTestUserTrackingUserRepository.cs │ │ ├── SharedWeb.csproj │ │ ├── Swagger/ │ │ │ ├── ActionNameOperationFilter.cs │ │ │ ├── Base64UrlSchemaFilter.cs │ │ │ ├── CheckDuplicateOperationIdsDocumentFilter.cs │ │ │ ├── EncryptedStringSchemaFilter.cs │ │ │ ├── EnumSchemaFilter.cs │ │ │ ├── GitCommitDocumentFilter.cs │ │ │ ├── SourceFileLineOperationFilter.cs │ │ │ └── SwaggerGenOptionsExt.cs │ │ └── Utilities/ │ │ ├── DisplayAttributeHelpers.cs │ │ ├── ExceptionHandlerFilterAttribute.cs │ │ ├── ModelStateValidationFilterAttribute.cs │ │ ├── PlayIdMiddleware.cs │ │ ├── RequestLoggingMiddleware.cs │ │ └── ServiceCollectionExtensions.cs │ └── Sql/ │ ├── Sql.sqlproj │ ├── dbo/ │ │ ├── AdminConsole/ │ │ │ └── Stored Procedures/ │ │ │ └── Collection_CreateDefaultCollections.sql │ │ ├── Auth/ │ │ │ ├── Stored Procedures/ │ │ │ │ ├── AuthRequest_Create.sql │ │ │ │ ├── AuthRequest_DeleteById.sql │ │ │ │ ├── AuthRequest_DeleteIfExpired.sql │ │ │ │ ├── AuthRequest_ReadAdminApprovalsByIds.sql │ │ │ │ ├── AuthRequest_ReadById.sql │ │ │ │ ├── AuthRequest_ReadByUserId.sql │ │ │ │ ├── AuthRequest_ReadPendingByOrganizationId.sql │ │ │ │ ├── AuthRequest_ReadPendingByUserId.sql │ │ │ │ ├── AuthRequest_Update.sql │ │ │ │ ├── AuthRequest_UpdateMany.sql │ │ │ │ ├── Device_ReadActiveWithPendingAuthRequestsByUserId.sql │ │ │ │ ├── EmergencyAccessDetails_ReadByGranteeId.sql │ │ │ │ ├── EmergencyAccessDetails_ReadByGrantorId.sql │ │ │ │ ├── EmergencyAccessDetails_ReadById.sql │ │ │ │ ├── EmergencyAccessDetails_ReadByIdGrantorId.sql │ │ │ │ ├── EmergencyAccessDetails_ReadExpiredRecoveries.sql │ │ │ │ ├── EmergencyAccessDetails_ReadManyByUserIds.sql │ │ │ │ ├── EmergencyAccess_Create.sql │ │ │ │ ├── EmergencyAccess_DeleteById.sql │ │ │ │ ├── EmergencyAccess_DeleteManyById.sql │ │ │ │ ├── EmergencyAccess_ReadById.sql │ │ │ │ ├── EmergencyAccess_ReadCountByGrantorIdEmail.sql │ │ │ │ ├── EmergencyAccess_ReadToNotify.sql │ │ │ │ ├── EmergencyAccess_Update.sql │ │ │ │ ├── Grant_Delete.sql │ │ │ │ ├── Grant_DeleteByKey.sql │ │ │ │ ├── Grant_DeleteExpired.sql │ │ │ │ ├── Grant_Read.sql │ │ │ │ ├── Grant_ReadByKey.sql │ │ │ │ ├── Grant_Save.sql │ │ │ │ ├── SsoConfig_Create.sql │ │ │ │ ├── SsoConfig_DeleteById.sql │ │ │ │ ├── SsoConfig_ReadById.sql │ │ │ │ ├── SsoConfig_ReadByIdentifier.sql │ │ │ │ ├── SsoConfig_ReadByOrganizationId.sql │ │ │ │ ├── SsoConfig_ReadManyByNotBeforeRevisionDate.sql │ │ │ │ ├── SsoConfig_Update.sql │ │ │ │ ├── SsoUser_Create.sql │ │ │ │ ├── SsoUser_Delete.sql │ │ │ │ ├── SsoUser_DeleteById.sql │ │ │ │ ├── SsoUser_DeleteMany.sql │ │ │ │ ├── SsoUser_ReadById.sql │ │ │ │ ├── SsoUser_ReadByUserIdOrganizationId.sql │ │ │ │ ├── SsoUser_Update.sql │ │ │ │ └── User_BumpAccountRevisionDateByEmergencyAccessGranteeId.sql │ │ │ ├── Tables/ │ │ │ │ ├── AuthRequest.sql │ │ │ │ ├── EmergencyAccess.sql │ │ │ │ ├── Grant.sql │ │ │ │ ├── SsoConfig.sql │ │ │ │ └── SsoUser.sql │ │ │ └── Views/ │ │ │ ├── AuthRequestPendingDetailsView.sql │ │ │ ├── AuthRequestView.sql │ │ │ ├── EmergencyAccessDetailsView.sql │ │ │ ├── GrantView.sql │ │ │ ├── SsoConfigView.sql │ │ │ └── SsoUserView.sql │ │ ├── Billing/ │ │ │ ├── Stored Procedures/ │ │ │ │ ├── ClientOrganizationMigrationRecord_Create.sql │ │ │ │ ├── ClientOrganizationMigrationRecord_DeleteById.sql │ │ │ │ ├── ClientOrganizationMigrationRecord_ReadById.sql │ │ │ │ ├── ClientOrganizationMigrationRecord_ReadByOrganizationId.sql │ │ │ │ ├── ClientOrganizationMigrationRecord_ReadByProviderId.sql │ │ │ │ ├── ClientOrganizationMigrationRecord_Update.sql │ │ │ │ ├── OrganizationInstallation_Create.sql │ │ │ │ ├── OrganizationInstallation_DeleteById.sql │ │ │ │ ├── OrganizationInstallation_ReadById.sql │ │ │ │ ├── OrganizationInstallation_ReadByInstallationId.sql │ │ │ │ ├── OrganizationInstallation_ReadByOrganizationId.sql │ │ │ │ ├── OrganizationInstallation_Update.sql │ │ │ │ ├── ProviderInvoiceItem_Create.sql │ │ │ │ ├── ProviderInvoiceItem_DeleteById.sql │ │ │ │ ├── ProviderInvoiceItem_ReadById.sql │ │ │ │ ├── ProviderInvoiceItem_ReadByInvoiceId.sql │ │ │ │ ├── ProviderInvoiceItem_ReadByProviderId.sql │ │ │ │ ├── ProviderInvoiceItem_Update.sql │ │ │ │ ├── ProviderPlan_Create.sql │ │ │ │ ├── ProviderPlan_DeleteById.sql │ │ │ │ ├── ProviderPlan_ReadById.sql │ │ │ │ ├── ProviderPlan_ReadByProviderId.sql │ │ │ │ └── ProviderPlan_Update.sql │ │ │ ├── Tables/ │ │ │ │ ├── ClientOrganizationMigrationRecord.sql │ │ │ │ ├── OrganizationInstallation.sql │ │ │ │ ├── ProviderInvoiceItem.sql │ │ │ │ └── ProviderPlan.sql │ │ │ └── Views/ │ │ │ ├── ClientOrganizationMigrationRecordView.sql │ │ │ ├── OrganizationInstallationView.sql │ │ │ ├── ProviderInvoiceItemView.sql │ │ │ └── ProviderPlanView.sql │ │ ├── Dirt/ │ │ │ ├── Stored Procedures/ │ │ │ │ ├── Event_Create.sql │ │ │ │ ├── Event_ReadById.sql │ │ │ │ ├── Event_ReadPageByCipherId.sql │ │ │ │ ├── Event_ReadPageByOrganizationId.sql │ │ │ │ ├── Event_ReadPageByOrganizationIdActingUserId.sql │ │ │ │ ├── Event_ReadPageByProviderId.sql │ │ │ │ ├── Event_ReadPageByProviderIdActingUserId.sql │ │ │ │ ├── Event_ReadPageByUserId.sql │ │ │ │ ├── MemberAccessDetail_GetMemberAccessDetailByOrganizationId.sql │ │ │ │ ├── OrganizationApplication_Create.sql │ │ │ │ ├── OrganizationApplication_DeleteById.sql │ │ │ │ ├── OrganizationApplication_ReadById.sql │ │ │ │ ├── OrganizationApplication_ReadByOrganizationId.sql │ │ │ │ ├── OrganizationApplication_Update.sql │ │ │ │ ├── OrganizationReport_Create.sql │ │ │ │ ├── OrganizationReport_DeleteById.sql │ │ │ │ ├── OrganizationReport_GetApplicationDataById.sql │ │ │ │ ├── OrganizationReport_GetLatestByOrganizationId.sql │ │ │ │ ├── OrganizationReport_GetReportDataById.sql │ │ │ │ ├── OrganizationReport_GetSummaryDataById.sql │ │ │ │ ├── OrganizationReport_ReadById.sql │ │ │ │ ├── OrganizationReport_ReadByOrganizationIdAndRevisionDate.sql │ │ │ │ ├── OrganizationReport_Update.sql │ │ │ │ ├── OrganizationReport_UpdateApplicationData.sql │ │ │ │ ├── OrganizationReport_UpdateMetrics.sql │ │ │ │ ├── OrganizationReport_UpdateReportData.sql │ │ │ │ └── OrganizationReport_UpdateSummaryData.sql │ │ │ ├── Tables/ │ │ │ │ ├── Event.sql │ │ │ │ ├── OrganizationApplication.sql │ │ │ │ └── OrganizationReport.sql │ │ │ └── Views/ │ │ │ ├── EventView.sql │ │ │ ├── OrganizationApplicationView.sql │ │ │ └── OrganizationReportView.sql │ │ ├── Functions/ │ │ │ └── UserCollectionDetails.sql │ │ ├── KeyManagement/ │ │ │ ├── Stored Procedures/ │ │ │ │ ├── UserAsymmetricKeys_Regenerate.sql │ │ │ │ ├── UserSignatureKeyPair_ReadByUserId.sql │ │ │ │ ├── UserSignatureKeyPair_SetForRotation.sql │ │ │ │ ├── UserSignatureKeyPair_UpdateForRotation.sql │ │ │ │ ├── User_UpdateKeyConnectorUserKey.sql │ │ │ │ └── User_UpdateMasterPassword.sql │ │ │ ├── Tables/ │ │ │ │ └── UserSignatureKeyPair.sql │ │ │ └── Views/ │ │ │ └── UserSignatureKeyPairView.sql │ │ ├── Platform/ │ │ │ ├── Stored Procedures/ │ │ │ │ ├── Installation_Create.sql │ │ │ │ ├── Installation_DeleteById.sql │ │ │ │ ├── Installation_ReadById.sql │ │ │ │ └── Installation_Update.sql │ │ │ ├── Tables/ │ │ │ │ └── Installation.sql │ │ │ └── Views/ │ │ │ └── InstallationView.sql │ │ ├── SecretsManager/ │ │ │ ├── Stored Procedures/ │ │ │ │ ├── ApiKey/ │ │ │ │ │ ├── ApiKeyDetails_ReadById.sql │ │ │ │ │ ├── ApiKey_Create.sql │ │ │ │ │ ├── ApiKey_DeleteByIds.sql │ │ │ │ │ └── ApiKey_ReadByServiceAccountId.sql │ │ │ │ └── Event/ │ │ │ │ ├── Event_ReadPageByOrganizationIdServiceAccountId.sql │ │ │ │ ├── Event_ReadPageByProjectId.sql │ │ │ │ ├── Event_ReadPageBySecretId.sql │ │ │ │ └── Event_ReadPageByServiceAccountId.sql │ │ │ ├── Tables/ │ │ │ │ ├── AccessPolicy.sql │ │ │ │ ├── ApiKey.sql │ │ │ │ ├── Project.sql │ │ │ │ ├── ProjectSecret.sql │ │ │ │ ├── Secret.sql │ │ │ │ ├── SecretVersion.sql │ │ │ │ └── ServiceAccount.sql │ │ │ └── Views/ │ │ │ ├── ApiKeyDetailsView.sql │ │ │ └── ApiKeyView.sql │ │ ├── Stored Procedures/ │ │ │ ├── AzureSQLMaintenance.sql │ │ │ ├── CipherOrganizationDetails_ReadByOrganizationIdExcludingDefaultCollections.sql │ │ │ ├── CollectionCipher_Create.sql │ │ │ ├── CollectionCipher_Delete.sql │ │ │ ├── CollectionCipher_ReadByOrganizationId.sql │ │ │ ├── CollectionCipher_ReadByUserId.sql │ │ │ ├── CollectionCipher_ReadByUserIdCipherId.sql │ │ │ ├── CollectionCipher_ReadSharedByOrganizationId.sql │ │ │ ├── CollectionCipher_UpdateCollections.sql │ │ │ ├── CollectionCipher_UpdateCollectionsAdmin.sql │ │ │ ├── CollectionCipher_UpdateCollectionsForCiphers.sql │ │ │ ├── CollectionGroup_ReadByCollectionId.sql │ │ │ ├── CollectionGroup_ReadByOrganizationId.sql │ │ │ ├── CollectionUser_Delete.sql │ │ │ ├── CollectionUser_ReadByCollectionId.sql │ │ │ ├── CollectionUser_ReadByOrganizationId.sql │ │ │ ├── CollectionUser_ReadSharedCollectionsByOrganizationUserIds.sql │ │ │ ├── CollectionUser_UpdateUsers.sql │ │ │ ├── Collection_Create.sql │ │ │ ├── Collection_CreateOrUpdateAccessForMany.sql │ │ │ ├── Collection_CreateWithGroupsAndUsers.sql │ │ │ ├── Collection_DeleteById.sql │ │ │ ├── Collection_DeleteByIds.sql │ │ │ ├── Collection_ReadById.sql │ │ │ ├── Collection_ReadByIds.sql │ │ │ ├── Collection_ReadByOrganizationId.sql │ │ │ ├── Collection_ReadByUserId.sql │ │ │ ├── Collection_ReadCountByOrganizationId.sql │ │ │ ├── Collection_ReadSharedCollectionsByOrganizationId.sql │ │ │ ├── Collection_ReadWithGroupsAndUsersById.sql │ │ │ ├── Collection_ReadWithGroupsAndUsersByOrganizationId.sql │ │ │ ├── Collection_Update.sql │ │ │ ├── Collection_UpdateWithGroups.sql │ │ │ ├── Collection_UpdateWithGroupsAndUsers.sql │ │ │ ├── Collection_UpdateWithUsers.sql │ │ │ ├── Device_ClearPushTokenById.sql │ │ │ ├── Device_Create.sql │ │ │ ├── Device_ReadById.sql │ │ │ ├── Device_ReadByIdentifier.sql │ │ │ ├── Device_ReadByIdentifierUserId.sql │ │ │ ├── Device_ReadByUserId.sql │ │ │ ├── Device_Update.sql │ │ │ ├── GroupUser_AddUsers.sql │ │ │ ├── GroupUser_Delete.sql │ │ │ ├── GroupUser_ReadByOrganizationId.sql │ │ │ ├── GroupUser_ReadByOrganizationUserIds.sql │ │ │ ├── GroupUser_ReadGroupIdsByOrganizationUserId.sql │ │ │ ├── GroupUser_ReadOrganizationUserIdsByGroupId.sql │ │ │ ├── GroupUser_UpdateGroups.sql │ │ │ ├── GroupUser_UpdateUsers.sql │ │ │ ├── Group_Create.sql │ │ │ ├── Group_CreateWithCollections.sql │ │ │ ├── Group_DeleteById.sql │ │ │ ├── Group_DeleteByIds.sql │ │ │ ├── Group_ReadById.sql │ │ │ ├── Group_ReadByIds.sql │ │ │ ├── Group_ReadByOrganizationId.sql │ │ │ ├── Group_ReadCountByOrganizationId.sql │ │ │ ├── Group_ReadWithCollectionsById.sql │ │ │ ├── Group_ReadWithCollectionsByOrganizationId.sql │ │ │ ├── Group_Update.sql │ │ │ ├── Group_UpdateWithCollections.sql │ │ │ ├── NotificationStatus_Create.sql │ │ │ ├── NotificationStatus_ReadByNotificationIdAndUserId.sql │ │ │ ├── NotificationStatus_Update.sql │ │ │ ├── Notification_Create.sql │ │ │ ├── Notification_MarkAsDeletedByTask.sql │ │ │ ├── Notification_ReadById.sql │ │ │ ├── Notification_ReadByUserIdAndStatus.sql │ │ │ ├── Notification_Update.sql │ │ │ ├── OrganizationApiKey_Create.sql │ │ │ ├── OrganizationApiKey_DeleteById.sql │ │ │ ├── OrganizationApiKey_OrganizationDeleted.sql │ │ │ ├── OrganizationApiKey_ReadManyByOrganizationIdType.sql │ │ │ ├── OrganizationApiKey_Update.sql │ │ │ ├── OrganizationConnection_Create.sql │ │ │ ├── OrganizationConnection_DeleteById.sql │ │ │ ├── OrganizationConnection_OrganizationDeleted.sql │ │ │ ├── OrganizationConnection_ReadById.sql │ │ │ ├── OrganizationConnection_ReadByIdOrganizationId.sql │ │ │ ├── OrganizationConnection_ReadByOrganizationIdType.sql │ │ │ ├── OrganizationConnection_Update.sql │ │ │ ├── OrganizationDomainSsoDetails_ReadByEmail.sql │ │ │ ├── OrganizationDomain_Create.sql │ │ │ ├── OrganizationDomain_DeleteById.sql │ │ │ ├── OrganizationDomain_DeleteIfExpired.sql │ │ │ ├── OrganizationDomain_HasVerifiedDomainWithBlockPolicy.sql │ │ │ ├── OrganizationDomain_OrganizationDeleted.sql │ │ │ ├── OrganizationDomain_ReadByClaimedDomain.sql │ │ │ ├── OrganizationDomain_ReadById.sql │ │ │ ├── OrganizationDomain_ReadByIdOrganizationId.sql │ │ │ ├── OrganizationDomain_ReadByNextRunDate.sql │ │ │ ├── OrganizationDomain_ReadByOrganizationId.sql │ │ │ ├── OrganizationDomain_ReadByOrganizationIds.sql │ │ │ ├── OrganizationDomain_ReadDomainByOrgIdAndDomainName.sql │ │ │ ├── OrganizationDomain_ReadIfExpired.sql │ │ │ ├── OrganizationDomain_Update.sql │ │ │ ├── OrganizationIntegrationConfigurationDetails_ReadMany.sql │ │ │ ├── OrganizationIntegrationConfigurationDetails_ReadManyByEventTypeOrganizationIdIntegrationType.sql │ │ │ ├── OrganizationIntegrationConfiguration_Create.sql │ │ │ ├── OrganizationIntegrationConfiguration_DeleteById.sql │ │ │ ├── OrganizationIntegrationConfiguration_ReadById.sql │ │ │ ├── OrganizationIntegrationConfiguration_ReadManyByOrganizationIntegrationId.sql │ │ │ ├── OrganizationIntegrationConfiguration_Update.sql │ │ │ ├── OrganizationIntegration_Create.sql │ │ │ ├── OrganizationIntegration_DeleteById.sql │ │ │ ├── OrganizationIntegration_OrganizationDeleted.sql │ │ │ ├── OrganizationIntegration_ReadById.sql │ │ │ ├── OrganizationIntegration_ReadByTeamsConfigurationTenantIdTeamId.sql │ │ │ ├── OrganizationIntegration_ReadManyByOrganizationId.sql │ │ │ ├── OrganizationIntegration_Update.sql │ │ │ ├── OrganizationSponsorship_Create.sql │ │ │ ├── OrganizationSponsorship_CreateMany.sql │ │ │ ├── OrganizationSponsorship_DeleteById.sql │ │ │ ├── OrganizationSponsorship_DeleteByIds.sql │ │ │ ├── OrganizationSponsorship_DeleteExpired.sql │ │ │ ├── OrganizationSponsorship_OrganizationDeleted.sql │ │ │ ├── OrganizationSponsorship_OrganizationUserDeleted.sql │ │ │ ├── OrganizationSponsorship_OrganizationUsersDeleted.sql │ │ │ ├── OrganizationSponsorship_ReadById.sql │ │ │ ├── OrganizationSponsorship_ReadByOfferedToEmail.sql │ │ │ ├── OrganizationSponsorship_ReadBySponsoredOrganizationId.sql │ │ │ ├── OrganizationSponsorship_ReadBySponsoringOrganizationId.sql │ │ │ ├── OrganizationSponsorship_ReadBySponsoringOrganizationUserId.sql │ │ │ ├── OrganizationSponsorship_ReadLatestBySponsoringOrganizationId.sql │ │ │ ├── OrganizationSponsorship_Update.sql │ │ │ ├── OrganizationSponsorship_UpdateMany.sql │ │ │ ├── OrganizationUserOrganizationDetails_ReadByUserIdStatus.sql │ │ │ ├── OrganizationUserOrganizationDetails_ReadByUserIdStatusOrganizationId.sql │ │ │ ├── OrganizationUserUserDetails_ReadById.sql │ │ │ ├── OrganizationUserUserDetails_ReadByOrganizationId.sql │ │ │ ├── OrganizationUserUserDetails_ReadByOrganizationIdUserId.sql │ │ │ ├── OrganizationUserUserDetails_ReadByOrganizationId_V2.sql │ │ │ ├── OrganizationUserUserDetails_ReadWithSharedCollectionsById.sql │ │ │ ├── OrganizationUser_Activate.sql │ │ │ ├── OrganizationUser_ConfirmById.sql │ │ │ ├── OrganizationUser_Create.sql │ │ │ ├── OrganizationUser_CreateMany.sql │ │ │ ├── OrganizationUser_CreateManyWithCollectionsGroups.sql │ │ │ ├── OrganizationUser_CreateWithCollections.sql │ │ │ ├── OrganizationUser_Deactivate.sql │ │ │ ├── OrganizationUser_DeleteById.sql │ │ │ ├── OrganizationUser_DeleteByIds.sql │ │ │ ├── OrganizationUser_MigrateDefaultCollection.sql │ │ │ ├── OrganizationUser_ReadById.sql │ │ │ ├── OrganizationUser_ReadByIds.sql │ │ │ ├── OrganizationUser_ReadByMinimumRole.sql │ │ │ ├── OrganizationUser_ReadByOrganizationId.sql │ │ │ ├── OrganizationUser_ReadByOrganizationIdEmail.sql │ │ │ ├── OrganizationUser_ReadByOrganizationIdUserId.sql │ │ │ ├── OrganizationUser_ReadByOrganizationIdWithClaimedDomains.sql │ │ │ ├── OrganizationUser_ReadByOrganizationIdWithClaimedDomains_V2.sql │ │ │ ├── OrganizationUser_ReadByUserId.sql │ │ │ ├── OrganizationUser_ReadByUserIdWithPolicyDetails.sql │ │ │ ├── OrganizationUser_ReadByUserIds.sql │ │ │ ├── OrganizationUser_ReadCountByFreeOrganizationAdminUser.sql │ │ │ ├── OrganizationUser_ReadCountByOnlyOwner.sql │ │ │ ├── OrganizationUser_ReadCountByOrganizationId.sql │ │ │ ├── OrganizationUser_ReadCountByOrganizationIdEmail.sql │ │ │ ├── OrganizationUser_ReadManyAccountRecoveryDetailsByOrganizationUserIds.sql │ │ │ ├── OrganizationUser_ReadManyDetailsByRole.sql │ │ │ ├── OrganizationUser_ReadOccupiedSeatCountByOrganizationId.sql │ │ │ ├── OrganizationUser_ReadOccupiedSmSeatCountByOrganizationId.sql │ │ │ ├── OrganizationUser_ReadWithCollectionsById.sql │ │ │ ├── OrganizationUser_SelectKnownEmails.sql │ │ │ ├── OrganizationUser_SetStatusForUsersByGuidIdArray.sql │ │ │ ├── OrganizationUser_Update.sql │ │ │ ├── OrganizationUser_UpdateDataForKeyRotation.sql │ │ │ ├── OrganizationUser_UpdateMany.sql │ │ │ ├── OrganizationUser_UpdateWithCollections.sql │ │ │ ├── Organization_Create.sql │ │ │ ├── Organization_DeleteById.sql │ │ │ ├── Organization_GetOrganizationsForSubscriptionSync.sql │ │ │ ├── Organization_IncrementSeatCount.sql │ │ │ ├── Organization_ReadAbilities.sql │ │ │ ├── Organization_ReadAddableToProviderByUserId.sql │ │ │ ├── Organization_ReadByClaimedUserEmailDomain.sql │ │ │ ├── Organization_ReadByEnabled.sql │ │ │ ├── Organization_ReadByGatewayCustomerId.sql │ │ │ ├── Organization_ReadByGatewaySubscriptionId.sql │ │ │ ├── Organization_ReadById.sql │ │ │ ├── Organization_ReadByIdentifier.sql │ │ │ ├── Organization_ReadByLicenseKey.sql │ │ │ ├── Organization_ReadByProviderId.sql │ │ │ ├── Organization_ReadByUserId
Showing preview only (2,066K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (18171 symbols across 3275 files)
FILE: bitwarden_license/src/Commercial.Core/AdminConsole/Providers/CreateProviderCommand.cs
class CreateProviderCommand (line 15) | public class CreateProviderCommand : ICreateProviderCommand
method CreateProviderCommand (line 23) | public CreateProviderCommand(
method CreateMspAsync (line 37) | public async Task CreateMspAsync(Provider provider, string ownerEmail,...
method CreateResellerAsync (line 46) | public async Task CreateResellerAsync(Provider provider)
method CreateBusinessUnitAsync (line 51) | public async Task CreateBusinessUnitAsync(Provider provider, string ow...
method CreateProviderAsync (line 58) | private async Task<Guid> CreateProviderAsync(Provider provider, string...
method ProviderRepositoryCreateAsync (line 84) | private async Task ProviderRepositoryCreateAsync(Provider provider, Pr...
method CreateProviderPlanAsync (line 92) | private async Task CreateProviderPlanAsync(Guid providerId, PlanType p...
FILE: bitwarden_license/src/Commercial.Core/AdminConsole/Providers/RemoveOrganizationFromProviderCommand.cs
class RemoveOrganizationFromProviderCommand (line 22) | public class RemoveOrganizationFromProviderCommand : IRemoveOrganization...
method RemoveOrganizationFromProviderCommand (line 35) | public RemoveOrganizationFromProviderCommand(
method RemoveOrganizationFromProvider (line 59) | public async Task RemoveOrganizationFromProvider(
method ResetOrganizationBillingAsync (line 102) | private async Task ResetOrganizationBillingAsync(
FILE: bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs
class ProviderService (line 38) | public class ProviderService : IProviderService
method ProviderService (line 68) | public ProviderService(IProviderRepository providerRepository, IProvid...
method CompleteSetupAsync (line 101) | public async Task<Provider> CompleteSetupAsync(Provider provider, Guid...
method UpdateAsync (line 151) | public async Task UpdateAsync(Provider provider, bool updateBilling = ...
method InviteUserAsync (line 169) | public async Task<List<ProviderUser>> InviteUserAsync(ProviderUserInvi...
method ResendInvitesAsync (line 219) | public async Task<List<Tuple<ProviderUser, string>>> ResendInvitesAsyn...
method AcceptUserAsync (line 245) | public async Task<ProviderUser> AcceptUserAsync(Guid providerUserId, U...
method ConfirmUsersAsync (line 291) | public async Task<List<Tuple<ProviderUser, string>>> ConfirmUsersAsync...
method SaveUserAsync (line 360) | public async Task SaveUserAsync(ProviderUser user, Guid savingUserId)
method DeleteUsersAsync (line 377) | public async Task<List<Tuple<ProviderUser, string>>> DeleteUsersAsync(...
method AddOrganization (line 439) | public async Task AddOrganization(Guid providerId, Guid organizationId...
method AddOrganizationsToReseller (line 483) | public async Task AddOrganizationsToReseller(Guid providerId, IEnumera...
method ApplyProviderPriceRateAsync (line 504) | private async Task ApplyProviderPriceRateAsync(Organization organizati...
method GetSubscriptionItemAsync (line 532) | private async Task<SubscriptionItem> GetSubscriptionItemAsync(string s...
method UpdateSubscriptionAsync (line 538) | private async Task UpdateSubscriptionAsync(SubscriptionItem subscripti...
method PlanTypeMappings (line 566) | private static PlanType PlanTypeMappings(Organization organization)
method GetEnumDisplayName (line 589) | private static string GetEnumDisplayName(Enum value)
method CreateOrganizationAsync (line 598) | public async Task<ProviderOrganization> CreateOrganizationAsync(Guid p...
method ResendProviderSetupInviteEmailAsync (line 650) | public async Task ResendProviderSetupInviteEmailAsync(Guid providerId,...
method SendProviderSetupInviteEmailAsync (line 661) | public async Task SendProviderSetupInviteEmailAsync(Provider provider,...
method LogProviderAccessToOrganizationAsync (line 667) | public async Task LogProviderAccessToOrganizationAsync(Guid organizati...
method InitiateDeleteAsync (line 686) | public async Task InitiateDeleteAsync(Provider provider, string provid...
method DeleteAsync (line 709) | public async Task DeleteAsync(Provider provider, string token)
method DeleteAsync (line 718) | public async Task DeleteAsync(Provider provider)
method SendInviteAsync (line 724) | private async Task SendInviteAsync(ProviderUser providerUser, Provider...
method HasConfirmedProviderAdminExceptAsync (line 732) | private async Task<bool> HasConfirmedProviderAdminExceptAsync(Guid pro...
method ThrowOnInvalidPlanType (line 741) | private void ThrowOnInvalidPlanType(ProviderType providerType, PlanTyp...
method UpdateClientOrganizationsEnabledStatusAsync (line 768) | private async Task UpdateClientOrganizationsEnabledStatusAsync(Guid pr...
FILE: bitwarden_license/src/Commercial.Core/Billing/Providers/Models/ProviderClientInvoiceReportRow.cs
class ProviderClientInvoiceReportRow (line 10) | public class ProviderClientInvoiceReportRow
method From (line 21) | public static ProviderClientInvoiceReportRow From(ProviderInvoiceItem ...
FILE: bitwarden_license/src/Commercial.Core/Billing/Providers/Queries/GetProviderWarningsQuery.cs
class GetProviderWarningsQuery (line 17) | public class GetProviderWarningsQuery(
method Run (line 22) | public async Task<ProviderWarnings?> Run(Provider provider)
method GetSuspensionWarning (line 42) | private SuspensionWarning? GetSuspensionWarning(
method GetTaxIdWarningAsync (line 60) | private async Task<TaxIdWarning?> GetTaxIdWarningAsync(
FILE: bitwarden_license/src/Commercial.Core/Billing/Providers/Services/BusinessUnitConverter.cs
class BusinessUnitConverter (line 29) | public class BusinessUnitConverter(
method FinalizeConversion (line 48) | public async Task<Guid> FinalizeConversion(
method InitiateConversion (line 182) | public async Task<OneOf<Guid, List<string>>> InitiateConversion(
method ResendConversionInvite (line 241) | public Task ResendConversionInvite(
method ResetConversion (line 253) | public Task ResetConversion(
method IfConversionInProgressAsync (line 279) | private async Task IfConversionInProgressAsync(
method SendInviteAsync (line 315) | private async Task SendInviteAsync(
method ValidateFinalizationAsync (line 325) | private async Task<(Subscription, Provider, ProviderOrganization, Prov...
method ValidateInitiationAsync (line 410) | private async Task<List<string>?> ValidateInitiationAsync(
FILE: bitwarden_license/src/Commercial.Core/Billing/Providers/Services/ProviderBillingService.cs
class ProviderBillingService (line 39) | public class ProviderBillingService(
method AddExistingOrganization (line 54) | public async Task AddExistingOrganization(
method ChangePlan (line 151) | public async Task ChangePlan(ChangeProviderPlanCommand command)
method CreateCustomerForClientOrganization (line 210) | public async Task CreateCustomerForClientOrganization(
method GenerateClientInvoiceReport (line 284) | public async Task<byte[]> GenerateClientInvoiceReport(
method GetAddableOrganizations (line 315) | public async Task<IEnumerable<AddableOrganization>> GetAddableOrganiza...
method ScaleSeats (line 388) | public async Task ScaleSeats(
method SeatAdjustmentResultsInPurchase (line 446) | public async Task<bool> SeatAdjustmentResultsInPurchase(
method SetupCustomer (line 467) | public async Task<Customer> SetupCustomer(
method SetupSubscription (line 604) | public async Task<Subscription> SetupSubscription(
method UpdateSeatMinimums (line 710) | public async Task UpdateSeatMinimums(UpdateProviderSeatMinimumsCommand...
method UpdateProviderNameAndEmail (line 794) | public async Task UpdateProviderNameAndEmail(Provider provider)
method CurrySeatScalingUpdate (line 832) | private Func<int, Task> CurrySeatScalingUpdate(
method GetAssignedSeatTotalAsync (line 862) | private async Task<int> GetAssignedSeatTotalAsync(Provider provider, P...
method GetProviderPlanAsync (line 876) | private async Task<ProviderPlan> GetProviderPlanAsync(Provider provide...
method GetManagedPlanTypeAsync (line 890) | private async Task<PlanType> GetManagedPlanTypeAsync(
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ProjectPeopleAccessPoliciesAuthorizationHandler.cs
class ProjectPeopleAccessPoliciesAuthorizationHandler (line 12) | public class
method ProjectPeopleAccessPoliciesAuthorizationHandler (line 22) | public ProjectPeopleAccessPoliciesAuthorizationHandler(ICurrentContext...
method HandleRequirementAsync (line 33) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanReplaceProjectPeopleAsync (line 61) | private async Task CanReplaceProjectPeopleAsync(AuthorizationHandlerCo...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ProjectServiceAccountsAccessPoliciesAuthorizationHandler.cs
class ProjectServiceAccountsAccessPoliciesAuthorizationHandler (line 13) | public class ProjectServiceAccountsAccessPoliciesAuthorizationHandler : ...
method ProjectServiceAccountsAccessPoliciesAuthorizationHandler (line 22) | public ProjectServiceAccountsAccessPoliciesAuthorizationHandler(ICurre...
method HandleRequirementAsync (line 33) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanUpdateAsync (line 62) | private async Task CanUpdateAsync(AuthorizationHandlerContext context,
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/SecretAccessPoliciesUpdatesAuthorizationHandler.cs
class SecretAccessPoliciesUpdatesAuthorizationHandler (line 14) | public class SecretAccessPoliciesUpdatesAuthorizationHandler : Authoriza...
method SecretAccessPoliciesUpdatesAuthorizationHandler (line 24) | public SecretAccessPoliciesUpdatesAuthorizationHandler(ICurrentContext...
method HandleRequirementAsync (line 37) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanUpdateAsync (line 70) | private async Task CanUpdateAsync(AuthorizationHandlerContext context,
method CanCreateAsync (line 95) | private async Task CanCreateAsync(AuthorizationHandlerContext context,
method GranteesInTheSameOrganizationAsync (line 119) | private async Task<bool> GranteesInTheSameOrganizationAsync(SecretAcce...
method HasAccessToTargetServiceAccountsAsync (line 143) | private async Task<bool> HasAccessToTargetServiceAccountsAsync(SecretA...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ServiceAccountGrantedPoliciesAuthorizationHandler.cs
class ServiceAccountGrantedPoliciesAuthorizationHandler (line 12) | public class ServiceAccountGrantedPoliciesAuthorizationHandler : Authori...
method ServiceAccountGrantedPoliciesAuthorizationHandler (line 21) | public ServiceAccountGrantedPoliciesAuthorizationHandler(ICurrentConte...
method HandleRequirementAsync (line 32) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanUpdateAsync (line 61) | private async Task CanUpdateAsync(AuthorizationHandlerContext context,
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ServiceAccountPeopleAccessPoliciesAuthorizationHandler.cs
class ServiceAccountPeopleAccessPoliciesAuthorizationHandler (line 12) | public class
method ServiceAccountPeopleAccessPoliciesAuthorizationHandler (line 22) | public ServiceAccountPeopleAccessPoliciesAuthorizationHandler(ICurrent...
method HandleRequirementAsync (line 33) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanReplaceServiceAccountPeopleAsync (line 61) | private async Task CanReplaceServiceAccountPeopleAsync(AuthorizationHa...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/Projects/ProjectAuthorizationHandler.cs
class ProjectAuthorizationHandler (line 11) | public class ProjectAuthorizationHandler : AuthorizationHandler<ProjectO...
method ProjectAuthorizationHandler (line 17) | public ProjectAuthorizationHandler(ICurrentContext currentContext, IAc...
method HandleRequirementAsync (line 25) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanCreateProjectAsync (line 50) | private async Task CanCreateProjectAsync(AuthorizationHandlerContext c...
method CanUpdateProjectAsync (line 68) | private async Task CanUpdateProjectAsync(AuthorizationHandlerContext c...
method CanDeleteProjectAsync (line 82) | private async Task CanDeleteProjectAsync(AuthorizationHandlerContext c...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/Secrets/BulkSecretAuthorizationHandler.cs
class BulkSecretAuthorizationHandler (line 11) | public class
method BulkSecretAuthorizationHandler (line 18) | public BulkSecretAuthorizationHandler(ICurrentContext currentContext, ...
method HandleRequirementAsync (line 27) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanReadAllAsync (line 49) | private async Task CanReadAllAsync(AuthorizationHandlerContext context,
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/Secrets/SecretAuthorizationHandler.cs
class SecretAuthorizationHandler (line 11) | public class SecretAuthorizationHandler : AuthorizationHandler<SecretOpe...
method SecretAuthorizationHandler (line 18) | public SecretAuthorizationHandler(ICurrentContext currentContext, IAcc...
method HandleRequirementAsync (line 27) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanCreateSecretAsync (line 58) | private async Task CanCreateSecretAsync(AuthorizationHandlerContext co...
method CanReadSecretAsync (line 94) | private async Task CanReadSecretAsync(AuthorizationHandlerContext cont...
method CanUpdateSecretAsync (line 107) | private async Task CanUpdateSecretAsync(AuthorizationHandlerContext co...
method CanDeleteSecretAsync (line 145) | private async Task CanDeleteSecretAsync(AuthorizationHandlerContext co...
method CanReadAccessPoliciesAsync (line 158) | private async Task CanReadAccessPoliciesAsync(AuthorizationHandlerCont...
method GetAccessToUpdateSecretAsync (line 177) | private async Task<bool> GetAccessToUpdateSecretAsync(Secret resource,...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/ServiceAccounts/ServiceAccountAuthorizationHandler.cs
class ServiceAccountAuthorizationHandler (line 11) | public class
method ServiceAccountAuthorizationHandler (line 18) | public ServiceAccountAuthorizationHandler(ICurrentContext currentContext,
method HandleRequirementAsync (line 27) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method CanCreateServiceAccountAsync (line 68) | private async Task CanCreateServiceAccountAsync(AuthorizationHandlerCo...
method CanReadServiceAccountAsync (line 86) | private async Task CanReadServiceAccountAsync(AuthorizationHandlerCont...
method CanUpdateServiceAccountAsync (line 101) | private async Task CanUpdateServiceAccountAsync(AuthorizationHandlerCo...
method CanDeleteServiceAccountAsync (line 116) | private async Task CanDeleteServiceAccountAsync(AuthorizationHandlerCo...
method CanCreateAccessTokenAsync (line 131) | private async Task CanCreateAccessTokenAsync(AuthorizationHandlerConte...
method CanReadAccessTokensAsync (line 146) | private async Task CanReadAccessTokensAsync(AuthorizationHandlerContex...
method CanRevokeAccessTokensAsync (line 161) | private async Task CanRevokeAccessTokensAsync(AuthorizationHandlerCont...
method CanReadEventsAsync (line 176) | private async Task CanReadEventsAsync(AuthorizationHandlerContext cont...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/AccessPolicies/UpdateProjectServiceAccountsAccessPoliciesCommand.cs
class UpdateProjectServiceAccountsAccessPoliciesCommand (line 8) | public class UpdateProjectServiceAccountsAccessPoliciesCommand : IUpdate...
method UpdateProjectServiceAccountsAccessPoliciesCommand (line 12) | public UpdateProjectServiceAccountsAccessPoliciesCommand(IAccessPolicy...
method UpdateAsync (line 17) | public async Task UpdateAsync(ProjectServiceAccountsAccessPoliciesUpda...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/AccessPolicies/UpdateServiceAccountGrantedPoliciesCommand.cs
class UpdateServiceAccountGrantedPoliciesCommand (line 8) | public class UpdateServiceAccountGrantedPoliciesCommand : IUpdateService...
method UpdateServiceAccountGrantedPoliciesCommand (line 12) | public UpdateServiceAccountGrantedPoliciesCommand(IAccessPolicyReposit...
method UpdateAsync (line 17) | public async Task UpdateAsync(ServiceAccountGrantedPoliciesUpdates gra...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/AccessTokens/CreateAccessTokenCommand.cs
class CreateAccessTokenCommand (line 12) | public class CreateAccessTokenCommand : ICreateAccessTokenCommand
method CreateAccessTokenCommand (line 17) | public CreateAccessTokenCommand(IApiKeyRepository apiKeyRepository)
method CreateAsync (line 22) | public async Task<ApiKeyClientSecretDetails> CreateAsync(ApiKey apiKey)
method GetHash (line 35) | private static string GetHash(string input)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Porting/ImportCommand.cs
class ImportCommand (line 11) | public class ImportCommand : IImportCommand
method ImportCommand (line 16) | public ImportCommand(IProjectRepository projectRepository, ISecretRepo...
method ImportAsync (line 22) | public async Task ImportAsync(Guid organizationId, SMImport import)
method AssignNewIds (line 70) | public SMImport AssignNewIds(SMImport import)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Projects/CreateProjectCommand.cs
class CreateProjectCommand (line 14) | public class CreateProjectCommand : ICreateProjectCommand
method CreateProjectCommand (line 22) | public CreateProjectCommand(
method CreateAsync (line 34) | public async Task<Project> CreateAsync(Project project, Guid id, Ident...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Projects/DeleteProjectCommand.cs
class DeleteProjectCommand (line 7) | public class DeleteProjectCommand : IDeleteProjectCommand
method DeleteProjectCommand (line 11) | public DeleteProjectCommand(IProjectRepository projectRepository)
method DeleteProjects (line 16) | public async Task DeleteProjects(IEnumerable<Project> projects)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Projects/UpdateProjectCommand.cs
class UpdateProjectCommand (line 8) | public class UpdateProjectCommand : IUpdateProjectCommand
method UpdateProjectCommand (line 12) | public UpdateProjectCommand(IProjectRepository projectRepository)
method UpdateAsync (line 17) | public async Task<Project> UpdateAsync(Project updatedProject)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Requests/RequestSMAccessCommand.cs
class RequestSMAccessCommand (line 11) | public class RequestSMAccessCommand : IRequestSMAccessCommand
method RequestSMAccessCommand (line 15) | public RequestSMAccessCommand(
method SendRequestAccessToSM (line 21) | public async Task SendRequestAccessToSM(Organization organization, ICo...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Secrets/CreateSecretCommand.cs
class CreateSecretCommand (line 9) | public class CreateSecretCommand : ICreateSecretCommand
method CreateSecretCommand (line 13) | public CreateSecretCommand(ISecretRepository secretRepository)
method CreateAsync (line 18) | public async Task<Secret> CreateAsync(Secret secret, SecretAccessPolic...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Secrets/DeleteSecretCommand.cs
class DeleteSecretCommand (line 7) | public class DeleteSecretCommand : IDeleteSecretCommand
method DeleteSecretCommand (line 11) | public DeleteSecretCommand(ISecretRepository secretRepository)
method DeleteSecrets (line 16) | public async Task DeleteSecrets(IEnumerable<Secret> secrets)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Secrets/UpdateSecretCommand.cs
class UpdateSecretCommand (line 9) | public class UpdateSecretCommand : IUpdateSecretCommand
method UpdateSecretCommand (line 13) | public UpdateSecretCommand(ISecretRepository secretRepository)
method UpdateAsync (line 18) | public async Task<Secret> UpdateAsync(Secret secret, SecretAccessPolic...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/CreateServiceAccountCommand.cs
class CreateServiceAccountCommand (line 14) | public class CreateServiceAccountCommand : ICreateServiceAccountCommand
method CreateServiceAccountCommand (line 22) | public CreateServiceAccountCommand(
method CreateAsync (line 36) | public async Task<ServiceAccount> CreateAsync(ServiceAccount serviceAc...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/DeleteServiceAccountsCommand.cs
class DeleteServiceAccountsCommand (line 7) | public class DeleteServiceAccountsCommand : IDeleteServiceAccountsCommand
method DeleteServiceAccountsCommand (line 11) | public DeleteServiceAccountsCommand(
method DeleteServiceAccounts (line 17) | public async Task DeleteServiceAccounts(IEnumerable<ServiceAccount> se...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/RevokeAccessTokensCommand.cs
class RevokeAccessTokensCommand (line 7) | public class RevokeAccessTokensCommand : IRevokeAccessTokensCommand
method RevokeAccessTokensCommand (line 11) | public RevokeAccessTokensCommand(IApiKeyRepository apiKeyRepository)
method RevokeAsync (line 16) | public async Task RevokeAsync(ServiceAccount serviceAccount, IEnumerab...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/UpdateServiceAccountCommand.cs
class UpdateServiceAccountCommand (line 9) | public class UpdateServiceAccountCommand : IUpdateServiceAccountCommand
method UpdateServiceAccountCommand (line 14) | public UpdateServiceAccountCommand(IServiceAccountRepository serviceAc...
method UpdateAsync (line 20) | public async Task<ServiceAccount> UpdateAsync(ServiceAccount updatedSe...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Trash/EmptyTrashCommand.cs
class EmptyTrashCommand (line 7) | public class EmptyTrashCommand : IEmptyTrashCommand
method EmptyTrashCommand (line 11) | public EmptyTrashCommand(ISecretRepository secretRepository)
method EmptyTrash (line 16) | public async Task EmptyTrash(Guid organizationId, List<Guid> ids)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Trash/RestoreTrashCommand.cs
class RestoreTrashCommand (line 7) | public class RestoreTrashCommand : IRestoreTrashCommand
method RestoreTrashCommand (line 11) | public RestoreTrashCommand(ISecretRepository secretRepository)
method RestoreTrash (line 16) | public async Task RestoreTrash(Guid organizationId, List<Guid> ids)
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessClientQuery.cs
class AccessClientQuery (line 12) | public class AccessClientQuery : IAccessClientQuery
method AccessClientQuery (line 17) | public AccessClientQuery(ICurrentContext currentContext, IUserService ...
method GetAccessClientAsync (line 23) | public async Task<(AccessClientType AccessClientType, Guid UserId)> Ge...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/ProjectServiceAccountsAccessPoliciesUpdatesQuery.cs
class ProjectServiceAccountsAccessPoliciesUpdatesQuery (line 10) | public class ProjectServiceAccountsAccessPoliciesUpdatesQuery : IProject...
method ProjectServiceAccountsAccessPoliciesUpdatesQuery (line 14) | public ProjectServiceAccountsAccessPoliciesUpdatesQuery(IAccessPolicyR...
method GetAsync (line 19) | public async Task<ProjectServiceAccountsAccessPoliciesUpdates> GetAsync(
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/SameOrganizationQuery.cs
class SameOrganizationQuery (line 7) | public class SameOrganizationQuery : ISameOrganizationQuery
method SameOrganizationQuery (line 12) | public SameOrganizationQuery(IOrganizationUserRepository organizationU...
method OrgUsersInTheSameOrgAsync (line 19) | public async Task<bool> OrgUsersInTheSameOrgAsync(List<Guid> organizat...
method GroupsInTheSameOrgAsync (line 26) | public async Task<bool> GroupsInTheSameOrgAsync(List<Guid> groupIds, G...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/SecretAccessPoliciesUpdatesQuery.cs
class SecretAccessPoliciesUpdatesQuery (line 9) | public class SecretAccessPoliciesUpdatesQuery : ISecretAccessPoliciesUpd...
method SecretAccessPoliciesUpdatesQuery (line 13) | public SecretAccessPoliciesUpdatesQuery(IAccessPolicyRepository access...
method GetAsync (line 18) | public async Task<SecretAccessPoliciesUpdates> GetAsync(SecretAccessPo...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/ServiceAccountGrantedPolicyUpdatesQuery.cs
class ServiceAccountGrantedPolicyUpdatesQuery (line 10) | public class ServiceAccountGrantedPolicyUpdatesQuery : IServiceAccountGr...
method ServiceAccountGrantedPolicyUpdatesQuery (line 14) | public ServiceAccountGrantedPolicyUpdatesQuery(IAccessPolicyRepository...
method GetAsync (line 19) | public async Task<ServiceAccountGrantedPoliciesUpdates> GetAsync(
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/Projects/MaxProjectsQuery.cs
class MaxProjectsQuery (line 11) | public class MaxProjectsQuery : IMaxProjectsQuery
method MaxProjectsQuery (line 18) | public MaxProjectsQuery(
method GetByOrgIdAsync (line 30) | public async Task<(short? max, bool? overMax)> GetByOrgIdAsync(Guid or...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/Secrets/SecretsSyncQuery.cs
class SecretsSyncQuery (line 10) | public class SecretsSyncQuery : ISecretsSyncQuery
method SecretsSyncQuery (line 15) | public SecretsSyncQuery(
method GetAsync (line 23) | public async Task<(bool HasChanges, IEnumerable<Secret>? Secrets)> Get...
method GetSecretsAsync (line 44) | private async Task<(bool HasChanges, IEnumerable<Secret>? Secrets)> Ge...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/ServiceAccounts/CountNewServiceAccountSlotsRequiredQuery.cs
class CountNewServiceAccountSlotsRequiredQuery (line 8) | public class CountNewServiceAccountSlotsRequiredQuery : ICountNewService...
method CountNewServiceAccountSlotsRequiredQuery (line 13) | public CountNewServiceAccountSlotsRequiredQuery(
method CountNewServiceAccountSlotsRequiredAsync (line 21) | public async Task<int> CountNewServiceAccountSlotsRequiredAsync(Guid o...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/Queries/ServiceAccounts/ServiceAccountSecretsDetailsQuery.cs
class ServiceAccountSecretsDetailsQuery (line 8) | public class ServiceAccountSecretsDetailsQuery : IServiceAccountSecretsD...
method ServiceAccountSecretsDetailsQuery (line 12) | public ServiceAccountSecretsDetailsQuery(IServiceAccountRepository ser...
method GetManyByOrganizationIdAsync (line 17) | public async Task<IEnumerable<ServiceAccountSecretsDetails>> GetManyBy...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/SecretsManagerCollectionExtensions.cs
class SecretsManagerCollectionExtensions (line 36) | public static class SecretsManagerCollectionExtensions
method AddSecretsManagerServices (line 38) | public static void AddSecretsManagerServices(this IServiceCollection s...
FILE: bitwarden_license/src/Commercial.Core/SecretsManager/SecretsManagerServiceCollectionExtensions.cs
class SecretsManagerServiceCollectionExtensions (line 5) | public static class SecretsManagerServiceCollectionExtensions
method AddCommercialSecretsManagerServices (line 7) | public static void AddCommercialSecretsManagerServices(this IServiceCo...
FILE: bitwarden_license/src/Commercial.Core/Utilities/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 13) | public static class ServiceCollectionExtensions
method AddCommercialCoreServices (line 15) | public static void AddCommercialCoreServices(this IServiceCollection s...
FILE: bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/AccessPolicyRepository.cs
class AccessPolicyRepository (line 16) | public class AccessPolicyRepository : BaseEntityFrameworkRepository, IAc...
method AccessPolicyRepository (line 18) | public AccessPolicyRepository(IServiceScopeFactory serviceScopeFactory...
method CreateManyAsync (line 23) | public async Task<List<Core.SecretsManager.Entities.BaseAccessPolicy>>...
method GetPeopleGranteesAsync (line 105) | public async Task<PeopleGrantees> GetPeopleGranteesAsync(Guid organiza...
method GetPeoplePoliciesByGrantedProjectIdAsync (line 139) | public async Task<IEnumerable<Core.SecretsManager.Entities.BaseAccessP...
method ReplaceProjectPeopleAsync (line 163) | public async Task<IEnumerable<Core.SecretsManager.Entities.BaseAccessP...
method GetPeoplePoliciesByGrantedServiceAccountIdAsync (line 217) | public async Task<IEnumerable<Core.SecretsManager.Entities.BaseAccessP...
method ReplaceServiceAccountPeopleAsync (line 240) | public async Task<IEnumerable<Core.SecretsManager.Entities.BaseAccessP...
method GetServiceAccountGrantedPoliciesAsync (line 292) | public async Task<ServiceAccountGrantedPolicies?> GetServiceAccountGra...
method GetServiceAccountGrantedPoliciesPermissionDetailsAsync (line 309) | public async Task<ServiceAccountGrantedPoliciesPermissionDetails?>
method UpdateServiceAccountGrantedPoliciesAsync (line 335) | public async Task UpdateServiceAccountGrantedPoliciesAsync(ServiceAcco...
method GetProjectServiceAccountsAccessPoliciesAsync (line 363) | public async Task<ProjectServiceAccountsAccessPolicies?> GetProjectSer...
method UpdateProjectServiceAccountsAccessPoliciesAsync (line 381) | public async Task UpdateProjectServiceAccountsAccessPoliciesAsync(
method GetSecretAccessPoliciesAsync (line 419) | public async Task<SecretAccessPolicies?> GetSecretAccessPoliciesAsync(
method UpsertPeoplePoliciesAsync (line 455) | private static async Task UpsertPeoplePoliciesAsync(DatabaseContext db...
method UpsertServiceAccountProjectPoliciesAsync (line 490) | private async Task UpsertServiceAccountProjectPoliciesAsync(DatabaseCo...
method MapToCore (line 521) | private Core.SecretsManager.Entities.BaseAccessPolicy MapToCore(
method MapToEntity (line 540) | private BaseAccessPolicy MapToEntity(Core.SecretsManager.Entities.Base...
method MapToCore (line 564) | private Core.SecretsManager.Entities.BaseAccessPolicy MapToCore(
method ToPermissionDetails (line 592) | private IQueryable<ServiceAccountProjectAccessPolicyPermissionDetails>...
method UpdateServiceAccountRevisionAsync (line 621) | private static async Task UpdateServiceAccountRevisionAsync(DatabaseCo...
method UpdateServiceAccountsRevisionAsync (line 630) | private static async Task UpdateServiceAccountsRevisionAsync(DatabaseC...
FILE: bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ProjectRepository.cs
class ProjectRepository (line 13) | public class ProjectRepository : Repository<Core.SecretsManager.Entities...
method ProjectRepository (line 15) | public ProjectRepository(IServiceScopeFactory serviceScopeFactory, IMa...
method GetByIdAsync (line 19) | public override async Task<Core.SecretsManager.Entities.Project?> GetB...
method GetManyByOrganizationIdAsync (line 32) | public async Task<IEnumerable<ProjectPermissionDetails>> GetManyByOrga...
method GetProjectCountByOrganizationIdAsync (line 47) | public async Task<int> GetProjectCountByOrganizationIdAsync(Guid organ...
method GetManyByOrganizationIdWriteAccessAsync (line 57) | public async Task<IEnumerable<Core.SecretsManager.Entities.Project>> G...
method DeleteManyByIdAsync (line 75) | public async Task DeleteManyByIdAsync(IEnumerable<Guid> ids)
method GetManyWithSecretsByIds (line 116) | public async Task<IEnumerable<Core.SecretsManager.Entities.Project>> G...
method ImportAsync (line 130) | public async Task<IEnumerable<Core.SecretsManager.Entities.Project>> I...
method AccessToProjectAsync (line 140) | public async Task<(bool Read, bool Write)> AccessToProjectAsync(Guid i...
method ProjectsAreInOrganization (line 155) | public async Task<bool> ProjectsAreInOrganization(List<Guid> projectId...
method AccessToProjectsAsync (line 164) | public async Task<Dictionary<Guid, (bool Read, bool Write)>> AccessToP...
method GetProjectCountByOrganizationIdAsync (line 178) | public async Task<int> GetProjectCountByOrganizationIdAsync(Guid organ...
method GetProjectCountsByIdAsync (line 195) | public async Task<ProjectCounts> GetProjectCountsByIdAsync(Guid projec...
type ProjectAccess (line 230) | private record ProjectAccess(Guid Id, bool Read, bool Write);
method BuildProjectAccessQuery (line 232) | private static IQueryable<ProjectAccess> BuildProjectAccessQuery(IQuer...
method ProjectToPermissionDetails (line 256) | private IQueryable<ProjectPermissionDetails> ProjectToPermissionDetail...
method ProjectToPermissionsUser (line 273) | private Expression<Func<Project, ProjectPermissionDetails>> ProjectToP...
method ProjectToPermissionsServiceAccount (line 283) | private Expression<Func<Project, ProjectPermissionDetails>> ProjectToP...
method UserHasReadAccessToProject (line 291) | private static Expression<Func<Project, bool>> UserHasReadAccessToProj...
method UserHasWriteAccessToProject (line 295) | private static Expression<Func<Project, bool>> UserHasWriteAccessToPro...
method ServiceAccountHasReadAccessToProject (line 299) | private static Expression<Func<Project, bool>> ServiceAccountHasReadAc...
FILE: bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/SecretRepository.cs
class SecretRepository (line 16) | public class SecretRepository : Repository<Core.SecretsManager.Entities....
method SecretRepository (line 18) | public SecretRepository(IServiceScopeFactory serviceScopeFactory, IMap...
method GetByIdAsync (line 22) | public override async Task<Core.SecretsManager.Entities.Secret?> GetBy...
method GetManyByIds (line 36) | public async Task<IEnumerable<Core.SecretsManager.Entities.Secret>> Ge...
method GetManyTrashedSecretsByIds (line 50) | public async Task<IEnumerable<Core.SecretsManager.Entities.Secret>> Ge...
method GetManyByOrganizationIdAsync (line 64) | public async Task<IEnumerable<Core.SecretsManager.Entities.Secret>> Ge...
method GetManyDetailsByOrganizationIdAsync (line 86) | public async Task<IEnumerable<SecretPermissionDetails>> GetManyDetails...
method GetSecretsCountByOrganizationIdAsync (line 104) | public async Task<int> GetSecretsCountByOrganizationIdAsync(Guid organ...
method GetManyByOrganizationIdInTrashByIdsAsync (line 114) | public async Task<IEnumerable<Core.SecretsManager.Entities.Secret>> Ge...
method GetManyDetailsByOrganizationIdInTrashAsync (line 129) | public async Task<IEnumerable<SecretPermissionDetails>> GetManyDetails...
method GetManyDetailsByProjectIdAsync (line 151) | public async Task<IEnumerable<SecretPermissionDetails>> GetManyDetails...
method CreateAsync (line 162) | public async Task<Core.SecretsManager.Entities.Secret> CreateAsync(
method UpdateAsync (line 190) | public async Task<Core.SecretsManager.Entities.Secret> UpdateAsync(Cor...
method SoftDeleteManyByIdAsync (line 224) | public async Task SoftDeleteManyByIdAsync(IEnumerable<Guid> ids)
method HardDeleteManyByIdAsync (line 243) | public async Task HardDeleteManyByIdAsync(IEnumerable<Guid> ids)
method RestoreManyByIdAsync (line 258) | public async Task RestoreManyByIdAsync(IEnumerable<Guid> ids)
method ImportAsync (line 277) | public async Task<IEnumerable<Core.SecretsManager.Entities.Secret>> Im...
method AccessToSecretAsync (line 308) | public async Task<(bool Read, bool Write)> AccessToSecretAsync(Guid id...
method AccessToSecretsAsync (line 323) | public async Task<Dictionary<Guid, (bool Read, bool Write)>> AccessToS...
method EmptyTrash (line 340) | public async Task EmptyTrash(DateTime currentDate, uint deleteAfterThi...
method GetSecretsCountByOrganizationIdAsync (line 350) | public async Task<int> GetSecretsCountByOrganizationIdAsync(Guid organ...
method SecretToPermissionDetails (line 367) | private IQueryable<SecretPermissionDetails> SecretToPermissionDetails(...
method SecretToPermissionsUser (line 391) | private Expression<Func<Secret, SecretPermissionDetails>> SecretToPerm...
method ServiceAccountHasReadAccessToSecret (line 406) | private static Expression<Func<Secret, bool>> ServiceAccountHasReadAcc...
method UserHasReadAccessToSecret (line 411) | private static Expression<Func<Secret, bool>> UserHasReadAccessToSecre...
method UpdateServiceAccountRevisionsByProjectIdsAsync (line 420) | private static async Task UpdateServiceAccountRevisionsByProjectIdsAsy...
method UpdateServiceAccountRevisionsBySecretIdsAsync (line 437) | private static async Task UpdateServiceAccountRevisionsBySecretIdsAsyn...
method UpdateServiceAccountRevisionsAsync (line 464) | private static async Task UpdateServiceAccountRevisionsAsync(DatabaseC...
method BuildSecretAccessQuery (line 476) | private static IQueryable<SecretAccess> BuildSecretAccessQuery(IQuerya...
method UpdateProjectMappingAsync (line 510) | private static async Task<Secret> UpdateProjectMappingAsync(DatabaseCo...
method DeleteSecretAccessPoliciesAsync (line 535) | private static async Task DeleteSecretAccessPoliciesAsync(DatabaseCont...
method UpsertSecretAccessPolicyAsync (line 568) | private static async Task UpsertSecretAccessPolicyAsync(DatabaseContex...
method UpsertSecretAccessPoliciesAsync (line 589) | private async Task UpsertSecretAccessPoliciesAsync(DatabaseContext dbC...
method UpdateSecretAccessPoliciesAsync (line 632) | private async Task UpdateSecretAccessPoliciesAsync(DatabaseContext dbC...
method MapToEntity (line 655) | private BaseAccessPolicy MapToEntity(Core.SecretsManager.Entities.Base...
type SecretAccess (line 667) | private record SecretAccess(Guid Id, bool Read, bool Write);
FILE: bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/SecretVersionRepository.cs
class SecretVersionRepository (line 10) | public class SecretVersionRepository : Repository<Core.SecretsManager.En...
method SecretVersionRepository (line 12) | public SecretVersionRepository(IServiceScopeFactory serviceScopeFactor...
method GetByIdAsync (line 16) | public override async Task<Core.SecretsManager.Entities.SecretVersion?...
method GetManyBySecretIdAsync (line 26) | public async Task<IEnumerable<Core.SecretsManager.Entities.SecretVersi...
method GetManyByIdsAsync (line 37) | public async Task<IEnumerable<Core.SecretsManager.Entities.SecretVersi...
method CreateAsync (line 49) | public override async Task<Core.SecretsManager.Entities.SecretVersion>...
method DeleteManyByIdAsync (line 84) | public async Task DeleteManyByIdAsync(IEnumerable<Guid> ids)
FILE: bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ServiceAccountRepository.cs
class ServiceAccountRepository (line 13) | public class ServiceAccountRepository : Repository<Core.SecretsManager.E...
method ServiceAccountRepository (line 15) | public ServiceAccountRepository(IServiceScopeFactory serviceScopeFacto...
method GetManyByOrganizationIdAsync (line 19) | public async Task<IEnumerable<Core.SecretsManager.Entities.ServiceAcco...
method GetManyByIds (line 36) | public async Task<IEnumerable<Core.SecretsManager.Entities.ServiceAcco...
method GetManyByOrganizationIdWriteAccessAsync (line 46) | public async Task<IEnumerable<Core.SecretsManager.Entities.ServiceAcco...
method DeleteManyByIdAsync (line 63) | public async Task DeleteManyByIdAsync(IEnumerable<Guid> ids)
method AccessToServiceAccountAsync (line 90) | public async Task<(bool Read, bool Write)> AccessToServiceAccountAsync...
method AccessToServiceAccountsAsync (line 104) | public async Task<Dictionary<Guid, (bool Read, bool Write)>> AccessToS...
method GetServiceAccountCountByOrganizationIdAsync (line 118) | public async Task<int> GetServiceAccountCountByOrganizationIdAsync(Gui...
method GetServiceAccountCountByOrganizationIdAsync (line 128) | public async Task<int> GetServiceAccountCountByOrganizationIdAsync(Gui...
method GetServiceAccountCountsByIdAsync (line 145) | public async Task<ServiceAccountCounts> GetServiceAccountCountsByIdAsy...
method ServiceAccountsAreInOrganizationAsync (line 170) | public async Task<bool> ServiceAccountsAreInOrganizationAsync(List<Gui...
method GetManyByOrganizationIdWithSecretsDetailsAsync (line 179) | public async Task<IEnumerable<ServiceAccountSecretsDetails>> GetManyBy...
type ServiceAccountAccess (line 216) | private record ServiceAccountAccess(Guid Id, bool Read, bool Write);
method BuildServiceAccountAccessQuery (line 218) | private static IQueryable<ServiceAccountAccess> BuildServiceAccountAcc...
method UserHasReadAccessToServiceAccount (line 237) | private static Expression<Func<ServiceAccount, bool>> UserHasReadAcces...
method UserHasWriteAccessToServiceAccount (line 241) | private static Expression<Func<ServiceAccount, bool>> UserHasWriteAcce...
method BuildProjectSecretsAccessQuery (line 245) | private static IQueryable<ServiceAccountSecretsAccess> BuildProjectSec...
method BuildDirectSecretAccessQuery (line 256) | private static IQueryable<ServiceAccountSecretsAccess> BuildDirectSecr...
method FilterDirectSecretAccessResults (line 268) | private static List<ServiceAccountSecretsAccess> FilterDirectSecretAcc...
type ServiceAccountSecretsAccess (line 285) | private record ServiceAccountSecretsAccess(ServiceAccount ServiceAccou...
FILE: bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/SecretsManagerEFServiceCollectionExtensions.cs
class SecretsManagerEfServiceCollectionExtensions (line 7) | public static class SecretsManagerEfServiceCollectionExtensions
method AddSecretsManagerEfRepositories (line 9) | public static void AddSecretsManagerEfRepositories(this IServiceCollec...
FILE: bitwarden_license/src/Scim/Context/IScimContext.cs
type IScimContext (line 9) | public interface IScimContext
method BuildAsync (line 15) | Task BuildAsync(
FILE: bitwarden_license/src/Scim/Context/ScimContext.cs
class ScimContext (line 14) | public class ScimContext : IScimContext
method BuildAsync (line 49) | public async virtual Task BuildAsync(
FILE: bitwarden_license/src/Scim/Controllers/InfoController.cs
class InfoController (line 7) | [AllowAnonymous]
method GetAlive (line 10) | [HttpGet("~/alive")]
method GetVersion (line 17) | [HttpGet("~/version")]
FILE: bitwarden_license/src/Scim/Controllers/v2/GroupsController.cs
class GroupsController (line 17) | [Authorize("Scim")]
method GroupsController (line 31) | public GroupsController(
method Get (line 50) | [HttpGet("{id}")]
method Get (line 61) | [HttpGet("")]
method Post (line 77) | [HttpPost("")]
method Put (line 86) | [HttpPut("{id}")]
method Patch (line 96) | [HttpPatch("{id}")]
method Delete (line 109) | [HttpDelete("{id}")]
FILE: bitwarden_license/src/Scim/Controllers/v2/UsersController.cs
class UsersController (line 23) | [Authorize("Scim")]
method UsersController (line 39) | public UsersController(IOrganizationUserRepository organizationUserRep...
method Get (line 60) | [HttpGet("{id}")]
method Get (line 71) | [HttpGet("")]
method Post (line 87) | [HttpPost("")]
method Put (line 95) | [HttpPut("{id}")]
method Patch (line 148) | [HttpPatch("{id}")]
method Delete (line 155) | [HttpDelete("{id}")]
FILE: bitwarden_license/src/Scim/Groups/GetGroupsListQuery.cs
class GetGroupsListQuery (line 11) | public class GetGroupsListQuery : IGetGroupsListQuery
method GetGroupsListQuery (line 15) | public GetGroupsListQuery(IGroupRepository groupRepository)
method GetGroupsListAsync (line 20) | public async Task<(IEnumerable<Group> groupList, int totalResults)> Ge...
FILE: bitwarden_license/src/Scim/Groups/Interfaces/IGetGroupsListQuery.cs
type IGetGroupsListQuery (line 6) | public interface IGetGroupsListQuery
method GetGroupsListAsync (line 8) | Task<(IEnumerable<Group> groupList, int totalResults)> GetGroupsListAs...
FILE: bitwarden_license/src/Scim/Groups/Interfaces/IPatchGroupCommand.cs
type IPatchGroupCommand (line 6) | public interface IPatchGroupCommand
method PatchGroupAsync (line 8) | Task PatchGroupAsync(Group group, ScimPatchModel model);
FILE: bitwarden_license/src/Scim/Groups/Interfaces/IPostGroupCommand.cs
type IPostGroupCommand (line 6) | public interface IPostGroupCommand
method PostGroupAsync (line 8) | Task<Group> PostGroupAsync(Organization organization, ScimGroupRequest...
FILE: bitwarden_license/src/Scim/Groups/Interfaces/IPutGroupCommand.cs
type IPutGroupCommand (line 6) | public interface IPutGroupCommand
method PutGroupAsync (line 8) | Task<Group> PutGroupAsync(Organization organization, Guid id, ScimGrou...
FILE: bitwarden_license/src/Scim/Groups/PatchGroupCommand.cs
class PatchGroupCommand (line 18) | public class PatchGroupCommand : IPatchGroupCommand
method PatchGroupCommand (line 26) | public PatchGroupCommand(
method PatchGroupAsync (line 40) | public async Task PatchGroupAsync(Group group, ScimPatchModel model)
method HandleOperationAsync (line 48) | private async Task HandleOperationAsync(Group group, ScimPatchModel.Op...
method AddMembersAsync (line 137) | private async Task AddMembersAsync(Group group, HashSet<Guid> usersToAdd)
method GetOperationValueIds (line 152) | private static HashSet<Guid> GetOperationValueIds(JsonElement objArray)
method TryGetOperationPathId (line 168) | private static bool TryGetOperationPathId(string path, out Guid pathId)
FILE: bitwarden_license/src/Scim/Groups/PostGroupCommand.cs
class PostGroupCommand (line 11) | public class PostGroupCommand : IPostGroupCommand
method PostGroupCommand (line 16) | public PostGroupCommand(
method PostGroupAsync (line 24) | public async Task<Group> PostGroupAsync(Organization organization, Sci...
method UpdateGroupMembersAsync (line 44) | private async Task UpdateGroupMembersAsync(Group group, ScimGroupReque...
FILE: bitwarden_license/src/Scim/Groups/PutGroupCommand.cs
class PutGroupCommand (line 11) | public class PutGroupCommand : IPutGroupCommand
method PutGroupCommand (line 16) | public PutGroupCommand(
method PutGroupAsync (line 24) | public async Task<Group> PutGroupAsync(Organization organization, Guid...
method UpdateGroupMembersAsync (line 39) | private async Task UpdateGroupMembersAsync(Group group, ScimGroupReque...
FILE: bitwarden_license/src/Scim/Models/BaseScimGroupModel.cs
class BaseScimGroupModel (line 8) | public abstract class BaseScimGroupModel : BaseScimModel
method BaseScimGroupModel (line 10) | public BaseScimGroupModel(bool initSchema = false)
FILE: bitwarden_license/src/Scim/Models/BaseScimModel.cs
class BaseScimModel (line 6) | public abstract class BaseScimModel
method BaseScimModel (line 8) | public BaseScimModel()
method BaseScimModel (line 11) | public BaseScimModel(string schema)
FILE: bitwarden_license/src/Scim/Models/BaseScimUserModel.cs
class BaseScimUserModel (line 8) | public abstract class BaseScimUserModel : BaseScimModel
method BaseScimUserModel (line 10) | public BaseScimUserModel(bool initSchema = false)
class NameModel (line 28) | public class NameModel
method NameModel (line 30) | public NameModel() { }
method NameModel (line 32) | public NameModel(string name)
class EmailModel (line 43) | public class EmailModel
method EmailModel (line 45) | public EmailModel() { }
method EmailModel (line 47) | public EmailModel(string email)
FILE: bitwarden_license/src/Scim/Models/GetGroupsQueryParamModel.cs
class GetGroupsQueryParamModel (line 5) | public class GetGroupsQueryParamModel
FILE: bitwarden_license/src/Scim/Models/GetUsersQueryParamModel.cs
class GetUsersQueryParamModel (line 5) | public class GetUsersQueryParamModel
FILE: bitwarden_license/src/Scim/Models/ScimErrorResponseModel.cs
class ScimErrorResponseModel (line 8) | public class ScimErrorResponseModel : BaseScimModel
method ScimErrorResponseModel (line 10) | public ScimErrorResponseModel()
FILE: bitwarden_license/src/Scim/Models/ScimGroupRequestModel.cs
class ScimGroupRequestModel (line 9) | public class ScimGroupRequestModel : BaseScimGroupModel
method ScimGroupRequestModel (line 11) | public ScimGroupRequestModel()
method ToGroup (line 15) | public Group ToGroup(Guid organizationId)
class GroupMembersModel (line 28) | public class GroupMembersModel
FILE: bitwarden_license/src/Scim/Models/ScimGroupResponseModel.cs
class ScimGroupResponseModel (line 8) | public class ScimGroupResponseModel : BaseScimGroupModel
method ScimGroupResponseModel (line 10) | public ScimGroupResponseModel()
method ScimGroupResponseModel (line 16) | public ScimGroupResponseModel(Group group)
FILE: bitwarden_license/src/Scim/Models/ScimListResponseModel.cs
class ScimListResponseModel (line 8) | public class ScimListResponseModel<T> : BaseScimModel
method ScimListResponseModel (line 10) | public ScimListResponseModel()
FILE: bitwarden_license/src/Scim/Models/ScimMetaModel.cs
class ScimMetaModel (line 3) | public class ScimMetaModel
method ScimMetaModel (line 5) | public ScimMetaModel(string resourceType)
FILE: bitwarden_license/src/Scim/Models/ScimPatchModel.cs
class ScimPatchModel (line 8) | public class ScimPatchModel : BaseScimModel
method ScimPatchModel (line 10) | public ScimPatchModel()
class OperationModel (line 15) | public class OperationModel
FILE: bitwarden_license/src/Scim/Models/ScimUserRequestModel.cs
class ScimUserRequestModel (line 15) | public class ScimUserRequestModel : BaseScimUserModel
method ScimUserRequestModel (line 17) | public ScimUserRequestModel()
method ToOrganizationUserInvite (line 22) | public OrganizationUserInvite ToOrganizationUserInvite(ScimProviderTyp...
method ToRequest (line 35) | public InviteOrganizationUsersRequest ToRequest(
method EmailForInvite (line 60) | private string EmailForInvite(ScimProviderType scimProvider)
method ExternalIdForInvite (line 84) | public string ExternalIdForInvite()
FILE: bitwarden_license/src/Scim/Models/ScimUserResponseModel.cs
class ScimUserResponseModel (line 5) | public class ScimUserResponseModel : BaseScimUserModel
method ScimUserResponseModel (line 7) | public ScimUserResponseModel()
method ScimUserResponseModel (line 14) | public ScimUserResponseModel(OrganizationUserUserDetails orgUser)
FILE: bitwarden_license/src/Scim/Program.cs
class Program (line 5) | public class Program
method Main (line 7) | public static void Main(string[] args)
FILE: bitwarden_license/src/Scim/ScimSettings.cs
class ScimSettings (line 3) | public class ScimSettings
FILE: bitwarden_license/src/Scim/Startup.cs
class Startup (line 17) | public class Startup
method Startup (line 19) | public Startup(IWebHostEnvironment env, IConfiguration configuration)
method ConfigureServices (line 29) | public void ConfigureServices(IServiceCollection services)
method Configure (line 95) | public void Configure(
FILE: bitwarden_license/src/Scim/Users/GetUsersListQuery.cs
class GetUsersListQuery (line 11) | public class GetUsersListQuery : IGetUsersListQuery
method GetUsersListQuery (line 15) | public GetUsersListQuery(IOrganizationUserRepository organizationUserR...
method GetUsersListAsync (line 20) | public async Task<(IEnumerable<OrganizationUserUserDetails> userList, ...
FILE: bitwarden_license/src/Scim/Users/Interfaces/IGetUsersListQuery.cs
type IGetUsersListQuery (line 6) | public interface IGetUsersListQuery
method GetUsersListAsync (line 8) | Task<(IEnumerable<OrganizationUserUserDetails> userList, int totalResu...
FILE: bitwarden_license/src/Scim/Users/Interfaces/IPatchUserCommand.cs
type IPatchUserCommand (line 5) | public interface IPatchUserCommand
method PatchUserAsync (line 7) | Task PatchUserAsync(Guid organizationId, Guid id, ScimPatchModel model);
FILE: bitwarden_license/src/Scim/Users/Interfaces/IPostUserCommand.cs
type IPostUserCommand (line 9) | public interface IPostUserCommand
method PostUserAsync (line 11) | Task<OrganizationUserUserDetails> PostUserAsync(Guid organizationId, S...
FILE: bitwarden_license/src/Scim/Users/PatchUserCommand.cs
class PatchUserCommand (line 12) | public class PatchUserCommand : IPatchUserCommand
method PatchUserCommand (line 19) | public PatchUserCommand(IOrganizationUserRepository organizationUserRe...
method PatchUserAsync (line 30) | public async Task PatchUserAsync(Guid organizationId, Guid id, ScimPat...
method HandleActiveOperationAsync (line 101) | private async Task<bool> HandleActiveOperationAsync(Core.Entities.Orga...
method HandleExternalIdOperationAsync (line 116) | private async Task HandleExternalIdOperationAsync(Core.Entities.Organi...
FILE: bitwarden_license/src/Scim/Users/PostUserCommand.cs
class PostUserCommand (line 24) | public class PostUserCommand(
method PostUserAsync (line 36) | public async Task<OrganizationUserUserDetails?> PostUserAsync(Guid org...
method InviteScimOrganizationUserAsync_vNext (line 46) | private async Task<OrganizationUserUserDetails?> InviteScimOrganizatio...
method InviteScimOrganizationUserAsync (line 92) | private async Task<OrganizationUserUserDetails?> InviteScimOrganizatio...
FILE: bitwarden_license/src/Scim/Utilities/ApiKeyAuthenticationHandler.cs
class ApiKeyAuthenticationHandler (line 13) | public class ApiKeyAuthenticationHandler : AuthenticationHandler<ApiKeyA...
method ApiKeyAuthenticationHandler (line 19) | public ApiKeyAuthenticationHandler(
method HandleAuthenticateAsync (line 34) | protected override async Task<AuthenticateResult> HandleAuthenticateAs...
FILE: bitwarden_license/src/Scim/Utilities/ApiKeyAuthenticationOptions.cs
class ApiKeyAuthenticationOptions (line 5) | public class ApiKeyAuthenticationOptions : AuthenticationSchemeOptions
FILE: bitwarden_license/src/Scim/Utilities/ExceptionHandlerFilterAttribute.cs
class ExceptionHandlerFilterAttribute (line 8) | public class ExceptionHandlerFilterAttribute : ExceptionFilterAttribute
method OnException (line 10) | public override void OnException(ExceptionContext context)
FILE: bitwarden_license/src/Scim/Utilities/ScimConstants.cs
class ScimConstants (line 3) | public static class ScimConstants
class PatchOps (line 11) | public static class PatchOps
class PatchPaths (line 18) | public static class PatchPaths
FILE: bitwarden_license/src/Scim/Utilities/ScimContextMiddleware.cs
class ScimContextMiddleware (line 7) | public class ScimContextMiddleware
method ScimContextMiddleware (line 11) | public ScimContextMiddleware(RequestDelegate next)
method Invoke (line 16) | public async Task Invoke(HttpContext httpContext, IScimContext scimCon...
FILE: bitwarden_license/src/Scim/Utilities/ScimServiceCollectionExtensions.cs
class ScimServiceCollectionExtensions (line 8) | public static class ScimServiceCollectionExtensions
method AddScimGroupCommands (line 10) | public static void AddScimGroupCommands(this IServiceCollection services)
method AddScimGroupQueries (line 17) | public static void AddScimGroupQueries(this IServiceCollection services)
method AddScimUserCommands (line 22) | public static void AddScimUserCommands(this IServiceCollection services)
method AddScimUserQueries (line 28) | public static void AddScimUserQueries(this IServiceCollection services)
FILE: bitwarden_license/src/Sso/Controllers/AccountController.cs
class AccountController (line 35) | public class AccountController : Controller
method AccountController (line 58) | public AccountController(
method PreValidateAsync (line 100) | [HttpGet]
method LoginAsync (line 159) | [HttpGet]
method ExternalChallenge (line 205) | [HttpGet]
method ValidateSchemeAgainstSsoToken (line 244) | private void ValidateSchemeAgainstSsoToken(string scheme, string ssoTo...
method ExternalCallback (line 263) | [HttpGet]
method LogoutAsync (line 361) | [HttpGet]
method FindUserFromExternalProviderAsync (line 401) | private async Task<(
method CreateUserAndOrgUserConditionallyAsync (line 487) | private async Task<(User resolvedUser, Organization foundOrganization,...
method PreventOrgUserLoginIfStatusInvalidAsync (line 695) | private async Task PreventOrgUserLoginIfStatusInvalidAsync(
method GetUserFromManualLinkingDataAsync (line 728) | private async Task<User?> GetUserFromManualLinkingDataAsync(string use...
method GetOrganizationByProviderAsync (line 766) | private async Task<Organization> GetOrganizationByProviderAsync(string...
method GetOrganizationUserByUserAndOrgIdOrEmailAsync (line 793) | private async Task<OrganizationUser?> GetOrganizationUserByUserAndOrgI...
method EnforceAllowedOrgUserStatus (line 818) | private void EnforceAllowedOrgUserStatus(
method InvalidJson (line 843) | private IActionResult InvalidJson(string errorMessageKey, Exception? e...
method TryGetEmailAddressFromClaims (line 854) | private string? TryGetEmailAddressFromClaims(IEnumerable<Claim> claims...
method GetName (line 878) | private string GetName(IEnumerable<Claim> claims, IEnumerable<string> ...
method CreateSsoUserRecordAsync (line 903) | private async Task CreateSsoUserRecordAsync(string providerUserId, Gui...
method ProcessLoginCallback (line 925) | private void ProcessLoginCallback(AuthenticateResult externalResult,
method GetLoggedOutDataAsync (line 945) | private async Task<(string, string, string)> GetLoggedOutDataAsync(str...
method TryGetEmailAddress (line 981) | private string? TryGetEmailAddress(
method IsNativeClient (line 997) | public bool IsNativeClient(DIM.AuthorizationRequest context)
FILE: bitwarden_license/src/Sso/Controllers/HomeController.cs
class HomeController (line 13) | public class HomeController : Controller
method HomeController (line 17) | public HomeController(IIdentityServerInteractionService interaction)
method Error (line 22) | [Route("~/Error")]
FILE: bitwarden_license/src/Sso/Controllers/InfoController.cs
class InfoController (line 6) | public class InfoController : Controller
method GetAlive (line 8) | [HttpGet("~/alive")]
method GetVersion (line 15) | [HttpGet("~/version")]
FILE: bitwarden_license/src/Sso/Controllers/MetadataController.cs
class MetadataController (line 10) | public class MetadataController : Controller
method MetadataController (line 14) | public MetadataController(
method ViewAsync (line 20) | [HttpGet("saml2/{scheme}")]
FILE: bitwarden_license/src/Sso/IdentityServer/DistributedCachePersistedGrantStore.cs
class DistributedCachePersistedGrantStore (line 22) | public class DistributedCachePersistedGrantStore : IPersistedGrantStore
method DistributedCachePersistedGrantStore (line 26) | public DistributedCachePersistedGrantStore(
method GetAsync (line 32) | public async Task<PersistedGrant?> GetAsync(string key)
method GetAllAsync (line 53) | public Task<IEnumerable<PersistedGrant>> GetAllAsync(PersistedGrantFil...
method RemoveAllAsync (line 62) | public Task RemoveAllAsync(PersistedGrantFilter filter)
method RemoveAsync (line 77) | public async Task RemoveAsync(string key)
method StoreAsync (line 82) | public async Task StoreAsync(PersistedGrant grant)
FILE: bitwarden_license/src/Sso/IdentityServer/OidcIdentityClient.cs
class OidcIdentityClient (line 7) | public class OidcIdentityClient : Client
method OidcIdentityClient (line 9) | public OidcIdentityClient(GlobalSettings globalSettings)
FILE: bitwarden_license/src/Sso/Models/ErrorViewModel.cs
class ErrorViewModel (line 8) | public class ErrorViewModel
FILE: bitwarden_license/src/Sso/Models/RedirectViewModel.cs
class RedirectViewModel (line 6) | public class RedirectViewModel
FILE: bitwarden_license/src/Sso/Models/SamlEnvironment.cs
class SamlEnvironment (line 8) | public class SamlEnvironment
FILE: bitwarden_license/src/Sso/Models/SsoPreValidateResponseModel.cs
class SsoPreValidateResponseModel (line 5) | public class SsoPreValidateResponseModel : JsonResult
method SsoPreValidateResponseModel (line 7) | public SsoPreValidateResponseModel(string token) : base(new
FILE: bitwarden_license/src/Sso/Program.cs
class Program (line 5) | public class Program
method Main (line 7) | public static void Main(string[] args)
FILE: bitwarden_license/src/Sso/Startup.cs
class Startup (line 15) | public class Startup
method Startup (line 17) | public Startup(IWebHostEnvironment env, IConfiguration configuration)
method ConfigureServices (line 26) | public void ConfigureServices(IServiceCollection services)
method Configure (line 91) | public void Configure(
FILE: bitwarden_license/src/Sso/Utilities/ClaimsExtensions.cs
class ClaimsExtensions (line 9) | public static class ClaimsExtensions
method GetFirstMatch (line 14) | public static string GetFirstMatch(this IEnumerable<Claim> claims, par...
method Equals (line 33) | private static bool Equals(string text, string compare)
method Normalize (line 40) | private static string Normalize(string text)
FILE: bitwarden_license/src/Sso/Utilities/DiscoveryResponseGenerator.cs
class DiscoveryResponseGenerator (line 11) | public class DiscoveryResponseGenerator : DIR.DiscoveryResponseGenerator
method DiscoveryResponseGenerator (line 15) | public DiscoveryResponseGenerator(
method CreateDiscoveryDocumentAsync (line 29) | public override async Task<Dictionary<string, object>> CreateDiscovery...
FILE: bitwarden_license/src/Sso/Utilities/DynamicAuthenticationScheme.cs
class DynamicAuthenticationScheme (line 8) | public class DynamicAuthenticationScheme : AuthenticationScheme, IDynami...
method DynamicAuthenticationScheme (line 10) | public DynamicAuthenticationScheme(string name, string displayName, Ty...
method DynamicAuthenticationScheme (line 16) | public DynamicAuthenticationScheme(string name, string displayName, Ty...
method Validate (line 26) | public async Task Validate()
method ValidateSaml (line 41) | private void ValidateSaml()
method ValidateOpenIdConnectAsync (line 54) | private async Task ValidateOpenIdConnectAsync()
FILE: bitwarden_license/src/Sso/Utilities/DynamicAuthenticationSchemeProvider.cs
class DynamicAuthenticationSchemeProvider (line 27) | public class DynamicAuthenticationSchemeProvider : AuthenticationSchemeP...
method DynamicAuthenticationSchemeProvider (line 47) | public DynamicAuthenticationSchemeProvider(
method GetSchemeAsync (line 93) | public override async Task<AuthenticationScheme> GetSchemeAsync(string...
method GetAllSchemesAsync (line 114) | public override async Task<IEnumerable<AuthenticationScheme>> GetAllSc...
method GetRequestHandlerSchemesAsync (line 126) | public override async Task<IEnumerable<AuthenticationScheme>> GetReque...
method LoadAllDynamicSchemesIntoCacheAsync (line 138) | private async Task LoadAllDynamicSchemesIntoCacheAsync()
method SetSchemeInCache (line 191) | private DynamicAuthenticationScheme SetSchemeInCache(DynamicAuthentica...
method GetDynamicSchemeAsync (line 205) | private async Task<DynamicAuthenticationScheme> GetDynamicSchemeAsync(...
method PostConfigureDynamicScheme (line 242) | private bool PostConfigureDynamicScheme(DynamicAuthenticationScheme sc...
method GetSchemeFromSsoConfig (line 266) | private DynamicAuthenticationScheme GetSchemeFromSsoConfig(SsoConfig c...
method GetSchemeFromSsoConfigAsync (line 277) | private async Task<DynamicAuthenticationScheme> GetSchemeFromSsoConfig...
method GetOidcAuthenticationScheme (line 294) | private DynamicAuthenticationScheme GetOidcAuthenticationScheme(string...
method GetSaml2AuthenticationScheme (line 348) | private DynamicAuthenticationScheme GetSaml2AuthenticationScheme(strin...
method GetNameIdFormat (line 427) | private NameIdFormat GetNameIdFormat(Saml2NameIdFormat format)
method GetSigningBehavior (line 443) | private SigningBehavior GetSigningBehavior(Saml2SigningBehavior behavior)
method GetBindingType (line 454) | private Sustainsys.Saml2.WebSso.Saml2BindingType GetBindingType(Saml2B...
FILE: bitwarden_license/src/Sso/Utilities/ExtendedOptionsMonitorCache.cs
class ExtendedOptionsMonitorCache (line 9) | public class ExtendedOptionsMonitorCache<TOptions> : IExtendedOptionsMon...
method AddOrUpdate (line 14) | public void AddOrUpdate(string name, TOptions options)
method Clear (line 20) | public void Clear()
method GetOrAdd (line 25) | public TOptions GetOrAdd(string name, Func<TOptions> createOptions)
method TryAdd (line 30) | public bool TryAdd(string name, TOptions options)
method TryRemove (line 35) | public bool TryRemove(string name)
FILE: bitwarden_license/src/Sso/Utilities/IDynamicAuthenticationScheme.cs
type IDynamicAuthenticationScheme (line 6) | public interface IDynamicAuthenticationScheme
method Validate (line 11) | Task Validate();
FILE: bitwarden_license/src/Sso/Utilities/IExtendedOptionsMonitorCache.cs
type IExtendedOptionsMonitorCache (line 5) | public interface IExtendedOptionsMonitorCache<TOptions> : IOptionsMonito...
method AddOrUpdate (line 7) | void AddOrUpdate(string name, TOptions options);
FILE: bitwarden_license/src/Sso/Utilities/OpenIdConnectOptionsExtensions.cs
class OpenIdConnectOptionsExtensions (line 9) | public static class OpenIdConnectOptionsExtensions
method CouldHandleAsync (line 11) | public static async Task<bool> CouldHandleAsync(this OpenIdConnectOpti...
FILE: bitwarden_license/src/Sso/Utilities/OpenIdConnectScopes.cs
class OpenIdConnectScopes (line 11) | public static class OpenIdConnectScopes
FILE: bitwarden_license/src/Sso/Utilities/PersistedGrantsDistributedCacheConstants.cs
class PersistedGrantsDistributedCacheConstants (line 3) | public static class PersistedGrantsDistributedCacheConstants
FILE: bitwarden_license/src/Sso/Utilities/Saml2OptionsExtensions.cs
class Saml2OptionsExtensions (line 12) | public static class Saml2OptionsExtensions
method CouldHandleAsync (line 14) | public static async Task<bool> CouldHandleAsync(this Saml2Options opti...
FILE: bitwarden_license/src/Sso/Utilities/SamlClaimTypes.cs
class SamlClaimTypes (line 3) | public static class SamlClaimTypes
FILE: bitwarden_license/src/Sso/Utilities/SamlNameIdFormats.cs
class SamlNameIdFormats (line 3) | public static class SamlNameIdFormats
FILE: bitwarden_license/src/Sso/Utilities/SamlPropertyKeys.cs
class SamlPropertyKeys (line 3) | public static class SamlPropertyKeys
FILE: bitwarden_license/src/Sso/Utilities/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 18) | public static class ServiceCollectionExtensions
method AddSsoServices (line 20) | public static IServiceCollection AddSsoServices(this IServiceCollectio...
method AddSsoIdentityServerServices (line 46) | public static IIdentityServerBuilder AddSsoIdentityServerServices(this...
FILE: bitwarden_license/src/Sso/Utilities/SsoAuthenticationMiddleware.cs
class SsoAuthenticationMiddleware (line 8) | public class SsoAuthenticationMiddleware
method SsoAuthenticationMiddleware (line 12) | public SsoAuthenticationMiddleware(RequestDelegate next, IAuthenticati...
method Invoke (line 20) | public async Task Invoke(HttpContext context)
FILE: bitwarden_license/test/Commercial.Core.Test/AdminConsole/AutoFixture/ProviderUserFixtures.cs
class ProviderUser (line 8) | internal class ProviderUser : ICustomization
method ProviderUser (line 13) | public ProviderUser(ProviderUserStatusType status, ProviderUserType type)
method Customize (line 19) | public void Customize(IFixture fixture)
class ProviderUserAttribute (line 27) | public class ProviderUserAttribute : CustomizeAttribute
method ProviderUserAttribute (line 32) | public ProviderUserAttribute(
method GetCustomization (line 40) | public override ICustomization GetCustomization(ParameterInfo parameter)
FILE: bitwarden_license/test/Commercial.Core.Test/AdminConsole/ProviderFeatures/CreateProviderCommandTests.cs
class CreateProviderCommandTests (line 17) | [SutProviderCustomize]
method CreateMspAsync_UserIdIsInvalid_Throws (line 20) | [Theory, BitAutoData]
method CreateMspAsync_Success (line 34) | [Theory, BitAutoData]
method CreateResellerAsync_Success (line 51) | [Theory, BitAutoData]
method CreateBusinessUnitAsync_Success (line 65) | [Theory, BitAutoData]
method CreateBusinessUnitAsync_UserIdIsInvalid_Throws (line 87) | [Theory, BitAutoData]
FILE: bitwarden_license/test/Commercial.Core.Test/AdminConsole/ProviderFeatures/RemoveOrganizationFromProviderCommandTests.cs
class RemoveOrganizationFromProviderCommandTests (line 25) | [SutProviderCustomize]
method RemoveOrganizationFromProvider_NoProvider_BadRequest (line 28) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_NoProviderOrganization_BadRequest (line 37) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_NoOrganization_BadRequest (line 47) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_MismatchedProviderOrganization_BadRequest (line 59) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_NoConfirmedOwners_BadRequest (line 71) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_OrganizationNotStripeEnabled_MakesCorrectInvocations (line 91) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_OrganizationStripeEnabled_NonConsolidatedBilling_MakesCorrectInvocations (line 137) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_OrganizationStripeEnabled_ConsolidatedBilling_MakesCorrectInvocations (line 197) | [Theory, BitAutoData]
method RemoveOrganizationFromProvider_OrganizationStripeEnabled_ConsolidatedBilling_ReverseCharge_MakesCorrectInvocations (line 286) | [Theory, BitAutoData]
method GetSubscription (line 375) | private static Subscription GetSubscription(string subscriptionId, str...
method RemoveOrganizationFromProvider_DisabledOrganization_ConsolidatedBilling_EnablesOrganization (line 407) | [Theory, BitAutoData]
FILE: bitwarden_license/test/Commercial.Core.Test/AdminConsole/Services/ProviderServiceTests.cs
class ProviderServiceTests (line 44) | [SutProviderCustomize]
method CompleteSetupAsync_UserIdIsInvalid_Throws (line 47) | [Theory, BitAutoData]
method CompleteSetupAsync_TokenIsInvalid_Throws (line 55) | [Theory, BitAutoData]
method CompleteSetupAsync_Success (line 67) | [Theory, BitAutoData]
method CompleteSetupAsync_WithAutoConfirmEnabled_ThrowsUserCannotJoinProviderError (line 109) | [Theory, BitAutoData]
method UpdateAsync_ProviderIdIsInvalid_Throws (line 160) | [Theory, BitAutoData]
method UpdateAsync_Success (line 170) | [Theory, BitAutoData]
method UpdateAsync_ExistingProviderIsNull_DoesNotCallUpdateClientOrganizationsEnabledStatus (line 176) | [Theory, BitAutoData]
method UpdateAsync_EnabledStatusNotChanged_DoesNotCallUpdateClientOrganizationsEnabledStatus (line 194) | [Theory, BitAutoData]
method UpdateAsync_EnabledStatusChangedButProviderTypeIsReseller_DoesNotCallUpdateClientOrganizationsEnabledStatus (line 216) | [Theory, BitAutoData]
method UpdateAsync_EnabledStatusChangedAndProviderTypeIsMsp_CallsUpdateClientOrganizationsEnabledStatus (line 238) | [Theory, BitAutoData]
method UpdateAsync_EnabledStatusChangedAndProviderTypeIsBusinessUnit_CallsUpdateClientOrganizationsEnabledStatus (line 290) | [Theory, BitAutoData]
method UpdateAsync_OrganizationEnabledStatusAlreadyMatches_DoesNotUpdateOrganization (line 342) | [Theory, BitAutoData]
method UpdateAsync_OrganizationIsNull_SkipsNullOrganization (line 393) | [Theory, BitAutoData]
method InviteUserAsync_ProviderIdIsInvalid_Throws (line 432) | [Theory, BitAutoData]
method InviteUserAsync_InvalidPermissions_Throws (line 440) | [Theory, BitAutoData]
method InviteUserAsync_EmailsInvalid_Throws (line 447) | [Theory, BitAutoData]
method InviteUserAsync_AlreadyInvited (line 460) | [Theory, BitAutoData]
method InviteUserAsync_Success (line 474) | [Theory, BitAutoData]
method ResendInviteUserAsync_InvalidPermissions_Throws (line 490) | [Theory, BitAutoData]
method ResendInvitesAsync_Errors (line 497) | [Theory, BitAutoData]
method ResendInvitesAsync_Success (line 527) | [Theory, BitAutoData]
method SendProviderSetupInviteEmailAsync_Success (line 553) | [Theory, BitAutoData]
method AcceptUserAsync_UserIsInvalid_Throws (line 561) | [Theory, BitAutoData]
method AcceptUserAsync_AlreadyAccepted_Throws (line 569) | [Theory, BitAutoData]
method AcceptUserAsync_TokenIsInvalid_Throws (line 582) | [Theory, BitAutoData]
method AcceptUserAsync_WrongEmail_Throws (line 595) | [Theory, BitAutoData]
method AcceptUserAsync_Success (line 616) | [Theory, BitAutoData]
method AcceptUserAsync_WithAutoConfirmEnabledAndPolicyExists_Throws (line 639) | [Theory, BitAutoData]
method AcceptUserAsync_WithAutoConfirmEnabledButNoPolicyExists_Success (line 683) | [Theory, BitAutoData]
method AcceptUserAsync_WithAutoConfirmDisabled_Success (line 724) | [Theory, BitAutoData]
method ConfirmUsersAsync_NoValid (line 765) | [Theory, BitAutoData]
method ConfirmUsersAsync_Success (line 783) | [Theory, BitAutoData]
method ConfirmUsersAsync_WithAutoConfirmEnabledAndPolicyExists_ReturnsError (line 811) | [Theory, BitAutoData]
method ConfirmUsersAsync_WithAutoConfirmEnabledButNoPolicyExists_Success (line 852) | [Theory, BitAutoData]
method ConfirmUsersAsync_WithAutoConfirmDisabled_Success (line 890) | [Theory, BitAutoData]
method SaveUserAsync_UserIdIsInvalid_Throws (line 929) | [Theory, BitAutoData]
method SaveUserAsync_Success (line 939) | [Theory, BitAutoData]
method DeleteUsersAsync_NoRemainingOwner_Throws (line 953) | [Theory, BitAutoData]
method DeleteUsersAsync_Success (line 976) | [Theory, BitAutoData]
method AddOrganization_OrganizationAlreadyBelongsToAProvider_Throws (line 1003) | [Theory, BitAutoData]
method AddOrganization_OrganizationHasSecretsManager_Throws (line 1018) | [Theory, BitAutoData]
method AddOrganization_Success (line 1035) | [Theory, BitAutoData]
method AddOrganization_CreateAfterNov62023_PlanTypeDoesNotUpdated (line 1073) | [Theory, BitAutoData]
method AddOrganization_CreateBeforeNov62023_PlanTypeUpdated (line 1104) | [Theory, BitAutoData]
method AddOrganizationsToReseller_WithResellerProvider_Success (line 1155) | [Theory, BitAutoData]
method AddOrganizationsToReseller_WithMspProvider_Throws (line 1177) | [Theory, BitAutoData]
method CreateOrganizationAsync_Success (line 1198) | [Theory, OrganizationCustomize, BitAutoData]
method CreateOrganizationAsync_InvalidPlanType_ThrowsBadRequestException (line 1226) | [Theory, OrganizationCustomize, BitAutoData]
method CreateOrganizationAsync_InvokeSignupClientAsync (line 1253) | [Theory, OrganizationCustomize, BitAutoData]
method CreateOrganizationAsync_SetsAccessAllToFalse (line 1301) | [Theory, OrganizationCustomize, BitAutoData]
method Delete_Success (line 1333) | [Theory, BitAutoData]
method InitiateDeleteAsync_ThrowsBadRequestException_WhenProviderNameIsEmpty (line 1345) | [Theory, BitAutoData]
method InitiateDeleteAsync_ThrowsBadRequestException_WhenProviderAdminNotFound (line 1352) | [Theory, BitAutoData]
method InitiateDeleteAsync_ThrowsBadRequestException_WhenProviderAdminStatusIsNotConfirmed (line 1362) | [Theory, BitAutoData]
method InitiateDeleteAsync_SendsInitiateDeleteProviderEmail (line 1383) | [Theory, BitAutoData]
method DeleteAsync_ThrowsBadRequestException_WhenInvalidToken (line 1401) | [Theory, BitAutoData]
method DeleteAsync_ThrowsBadRequestException_WhenInvalidTokenData (line 1411) | [Theory, BitAutoData]
method SubscriptionUpdateRequest (line 1422) | private static SubscriptionUpdateOptions SubscriptionUpdateRequest(str...
method GetSubscription (line 1431) | private static Subscription GetSubscription(string subscriptionId) =>
method BackdateProviderCreationDate (line 1451) | private static void BackdateProviderCreationDate(Provider provider, Da...
FILE: bitwarden_license/test/Commercial.Core.Test/Billing/Providers/Queries/GetProviderWarningsQueryTests.cs
class GetProviderWarningsQueryTests (line 18) | [SutProviderCustomize]
method Run_NoSubscription_NoWarnings (line 23) | [Theory, BitAutoData]
method Run_ProviderEnabled_NoSuspensionWarning (line 43) | [Theory, BitAutoData]
method Run_Has_SuspensionWarning_AddPaymentMethod (line 73) | [Theory, BitAutoData]
method Run_Has_SuspensionWarning_ContactAdministrator (line 109) | [Theory, BitAutoData]
method Run_Has_SuspensionWarning_ContactSupport (line 143) | [Theory, BitAutoData]
method Run_NotProviderAdmin_NoTaxIdWarning (line 176) | [Theory, BitAutoData]
method Run_NoTaxRegistrationForCountry_NoTaxIdWarning (line 204) | [Theory, BitAutoData]
method Run_Has_TaxIdMissingWarning (line 237) | [Theory, BitAutoData]
method Run_TaxIdVerificationIsNull_NoTaxIdWarning (line 273) | [Theory, BitAutoData]
method Run_Has_TaxIdPendingVerificationWarning (line 309) | [Theory, BitAutoData]
method Run_Has_TaxIdFailedVerificationWarning (line 354) | [Theory, BitAutoData]
method Run_TaxIdVerified_NoTaxIdWarning (line 399) | [Theory, BitAutoData]
method Run_MultipleRegistrations_MatchesCorrectCountry (line 441) | [Theory, BitAutoData]
method Run_CombinesBothWarningTypes (line 483) | [Theory, BitAutoData]
method Run_SwissCustomer_NoTaxIdWarning (line 523) | [Theory, BitAutoData]
method Run_USCustomer_NoTaxIdWarning (line 556) | [Theory, BitAutoData]
FILE: bitwarden_license/test/Commercial.Core.Test/Billing/Providers/Services/BusinessUnitConverterTests.cs
class BusinessUnitConverterTests (line 32) | public class BusinessUnitConverterTests
method BuildConverter (line 49) | private BusinessUnitConverter BuildConverter() => new(
method FinalizeConversion_Succeeds_ReturnsProviderId (line 67) | [Theory, BitAutoData]
method FinalizeConversion_ValidationFails_ThrowsBillingException (line 183) | [Theory, BitAutoData]
method InitiateConversion_Succeeds_ReturnsProviderId (line 213) | [Theory, BitAutoData]
method InitiateConversion_ValidationFails_ReturnsErrors (line 289) | [Theory, BitAutoData]
method ResendConversionInvite_ConversionInProgress_Succeeds (line 338) | [Theory, BitAutoData]
method ResendConversionInvite_NoConversionInProgress_DoesNothing (line 357) | [Theory, BitAutoData]
method ResetConversion_ConversionInProgress_Succeeds (line 378) | [Theory, BitAutoData]
method ResetConversion_NoConversionInProgress_DoesNothing (line 402) | [Theory, BitAutoData]
method SetupDataProtection (line 428) | private string SetupDataProtection(
method SetupConversionInProgress (line 437) | private (Provider, ProviderOrganization, ProviderUser, ProviderPlan) S...
class MockDataProtector (line 492) | public class MockDataProtector(
method CreateProtector (line 498) | public IDataProtector CreateProtector(string purpose) => this;
method Protect (line 500) | public byte[] Protect(byte[] plaintext) => Encoding.UTF8.GetBytes(Token);
method Unprotect (line 502) | public byte[] Unprotect(byte[] protectedData) => Encoding.UTF8.GetByte...
FILE: bitwarden_license/test/Commercial.Core.Test/Billing/Providers/Services/ProviderBillingServiceTests.cs
class ProviderBillingServiceTests (line 40) | [SutProviderCustomize]
method ChangePlan_NullProviderPlan_ThrowsBadRequestException (line 45) | [Theory, BitAutoData]
method ChangePlan_ProviderNotFound_DoesNothing (line 61) | [Theory, BitAutoData]
method ChangePlan_SameProviderPlan_DoesNothing (line 89) | [Theory, BitAutoData]
method ChangePlan_UpdatesSubscriptionCorrectly (line 117) | [Theory, BitAutoData]
method CreateCustomerForClientOrganization_ProviderNull_ThrowsArgumentNullException (line 201) | [Theory, BitAutoData]
method CreateCustomerForClientOrganization_OrganizationNull_ThrowsArgumentNullException (line 208) | [Theory, BitAutoData]
method CreateCustomerForClientOrganization_HasGatewayCustomerId_NoOp (line 215) | [Theory, BitAutoData]
method CreateCustomer_ForClientOrg_Succeeds (line 229) | [Theory, BitAutoData]
method CreateCustomer_ForClientOrg_ReverseCharge_Succeeds (line 310) | [Theory, BitAutoData]
method CreateCustomer_ForClientOrg_USCustomer_SetsTaxExemptToNone (line 392) | [Theory, BitAutoData]
method GenerateClientInvoiceReport_NullInvoiceId_ThrowsArgumentNullException (line 445) | [Theory, BitAutoData]
method GenerateClientInvoiceReport_NoInvoiceItems_ReturnsNull (line 450) | [Theory, BitAutoData]
method GenerateClientInvoiceReport_Succeeds (line 462) | [Theory, BitAutoData]
method ScaleSeats_BelowToBelow_Succeeds (line 511) | [Theory, BitAutoData]
method ScaleSeats_BelowToAbove_Succeeds (line 593) | [Theory, BitAutoData]
method ScaleSeats_AboveToAbove_Succeeds (line 681) | [Theory, BitAutoData]
method ScaleSeats_AboveToBelow_Succeeds (line 769) | [Theory, BitAutoData]
method SeatAdjustmentResultsInPurchase_BelowToAbove_True (line 861) | [Theory, BitAutoData]
method SeatAdjustmentResultsInPurchase_AboveToFurtherAbove_True (line 899) | [Theory, BitAutoData]
method SetupCustomer_NullPaymentMethod_ThrowsNullReferenceException (line 941) | [Theory, BitAutoData]
method SetupCustomer_WithBankAccount_Error_Reverts (line 951) | [Theory, BitAutoData]
method SetupCustomer_WithPayPal_Error_Reverts (line 992) | [Theory, BitAutoData]
method SetupCustomer_WithBankAccount_Success (line 1031) | [Theory, BitAutoData]
method SetupCustomer_WithPayPal_Success (line 1080) | [Theory, BitAutoData]
method SetupCustomer_WithCard_Success (line 1125) | [Theory, BitAutoData]
method SetupCustomer_WithCard_ReverseCharge_Success (line 1167) | [Theory, BitAutoData]
method SetupCustomer_WithInvalidTaxId_ThrowsBadRequestException (line 1210) | [Theory, BitAutoData]
method SetupSubscription_NullProvider_ThrowsArgumentNullException (line 1236) | [Theory, BitAutoData]
method SetupSubscription_NoProviderPlans_ContactSupport (line 1241) | [Theory, BitAutoData]
method SetupSubscription_NoProviderTeamsPlan_ContactSupport (line 1264) | [Theory, BitAutoData]
method SetupSubscription_NoProviderEnterprisePlan_ContactSupport (line 1292) | [Theory, BitAutoData]
method SetupSubscription_SubscriptionIncomplete_ThrowsBillingException (line 1320) | [Theory, BitAutoData]
method SetupSubscription_SendInvoice_Succeeds (line 1375) | [Theory, BitAutoData]
method SetupSubscription_ChargeAutomatically_HasCard_Succeeds (line 1446) | [Theory, BitAutoData]
method SetupSubscription_ChargeAutomatically_HasBankAccount_Succeeds (line 1524) | [Theory, BitAutoData]
method SetupSubscription_ChargeAutomatically_HasPayPal_Succeeds (line 1617) | [Theory, BitAutoData]
method SetupSubscription_ReverseCharge_Succeeds (line 1699) | [Theory, BitAutoData]
method UpdateSeatMinimums_NegativeSeatMinimum_ThrowsBadRequestException (line 1781) | [Theory, BitAutoData]
method UpdateSeatMinimums_NoPurchasedSeats_AllocatedHigherThanIncomingMinimum_UpdatesPurchasedSeats_SyncsStripeWithNewSeatMinimum (line 1801) | [Theory, BitAutoData]
method UpdateSeatMinimums_NoPurchasedSeats_AllocatedLowerThanIncomingMinimum_SyncsStripeWithNewSeatMinimum (line 1881) | [Theory, BitAutoData]
method UpdateSeatMinimums_PurchasedSeats_NewMinimumLessThanTotal_UpdatesPurchasedSeats (line 1961) | [Theory, BitAutoData]
method UpdateSeatMinimums_PurchasedSeats_NewMinimumGreaterThanTotal_ClearsPurchasedSeats_SyncsStripeWithNewSeatMinimum (line 2035) | [Theory, BitAutoData]
method UpdateSeatMinimums_SinglePlanTypeUpdate_Succeeds (line 2115) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_NullGatewayCustomerId_LogsWarningAndReturns (line 2197) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_EmptyGatewayCustomerId_LogsWarningAndReturns (line 2215) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_NullProviderName_LogsWarningAndReturns (line 2233) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_EmptyProviderName_LogsWarningAndReturns (line 2252) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_ValidProvider_CallsStripeWithCorrectParameters (line 2271) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_LongProviderName_UsesFullName (line 2296) | [Theory, BitAutoData]
method UpdateProviderNameAndEmail_NullBillingEmail_UpdatesWithNull (line 2318) | [Theory, BitAutoData]
FILE: bitwarden_license/test/Commercial.Core.Test/Billing/Providers/Services/ProviderPriceAdapterTests.cs
class ProviderPriceAdapterTests (line 10) | public class ProviderPriceAdapterTests
method GetPriceId_MSP_Legacy_Succeeds (line 12) | [Theory]
method GetPriceId_MSP_Active_Succeeds (line 39) | [Theory]
method GetPriceId_BusinessUnit_Legacy_Succeeds (line 66) | [Theory]
method GetPriceId_BusinessUnit_Active_Succeeds (line 93) | [Theory]
method GetActivePriceId_MSP_Succeeds (line 120) | [Theory]
method GetActivePriceId_BusinessUnit_Succeeds (line 136) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/Billing/Tax/TaxServiceTests.cs
class TaxServiceTests (line 8) | [SutProviderCustomize]
method GetStripeTaxCode_WithValidCountryAndTaxId_ReturnsExpectedTaxIdType (line 11) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/AccessPolicies/ProjectPeopleAccessPoliciesAuthorizationHandlerTests.cs
class ProjectPeopleAccessPoliciesAuthorizationHandlerTests (line 20) | [SutProviderCustomize]
method SetupUserPermission (line 24) | private static void SetupUserPermission(SutProvider<ProjectPeopleAcces...
method SetupOrganizationUsers (line 37) | private static void SetupOrganizationUsers(SutProvider<ProjectPeopleAc...
method SetupGroups (line 43) | private static void SetupGroups(SutProvider<ProjectPeopleAccessPolicie...
method PeopleAccessPoliciesOperations_OnlyPublicStatic (line 49) | [Fact]
method Handler_UnsupportedProjectPeopleAccessPoliciesOperationRequirement_Throws (line 58) | [Theory]
method Handler_AccessSecretsManagerFalse_DoesNotSucceed (line 76) | [Theory]
method Handler_UnsupportedClientTypes_DoesNotSucceed (line 93) | [Theory]
method ReplaceProjectPeople_UserNotInOrg_DoesNotSucceed (line 110) | [Theory]
method ReplaceProjectPeople_GroupNotInOrg_DoesNotSucceed (line 131) | [Theory]
method ReplaceProjectPeople_AccessCheck (line 153) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/AccessPolicies/ProjectServiceAccountsAccessPoliciesAuthorizationHandlerTests.cs
class ProjectServiceAccountsAccessPoliciesAuthorizationHandlerTests (line 22) | [SutProviderCustomize]
method ServiceAccountGrantedPoliciesOperations_OnlyPublicStatic (line 26) | [Fact]
method Handler_AccessSecretsManagerFalse_DoesNotSucceed (line 35) | [Theory]
method Handler_UnsupportedClientTypes_DoesNotSucceed (line 53) | [Theory]
method Handler_UnsupportedProjectServiceAccountsPoliciesOperationRequirement_Throws (line 72) | [Theory]
method Handler_UserHasNoWriteAccessToProject_DoesNotSucceed (line 87) | [Theory]
method Handler_ServiceAccountsInDifferentOrganization_DoesNotSucceed (line 114) | [Theory]
method Handler_UserHasAccessToProject_NoCreatesRequested_Success (line 138) | [Theory]
method Handler_UserHasNoAccessToCreateServiceAccounts_DoesNotSucceed (line 160) | [Theory]
method Handler_AccessResultsPartial_DoesNotSucceed (line 191) | [Theory]
method Handler_UserHasAccessToSomeCreateServiceAccounts_DoesNotSucceed (line 225) | [Theory]
method Handler_UserHasAccessToAllCreateServiceAccounts_Success (line 258) | [Theory]
method SetupUserSubstitutes (line 290) | private static void SetupUserSubstitutes(
method SetupServiceAccountsAccessTest (line 302) | private static void SetupServiceAccountsAccessTest(
method AddServiceAccountCreateUpdate (line 318) | private static ProjectServiceAccountsAccessPoliciesUpdates AddServiceA...
method RemoveAllCreates (line 335) | private static ProjectServiceAccountsAccessPoliciesUpdates RemoveAllCr...
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/AccessPolicies/SecretAccessPoliciesUpdatesAuthorizationHandlerTests.cs
class SecretAccessPoliciesUpdatesAuthorizationHandlerTests (line 22) | [SutProviderCustomize]
method SecretAccessPoliciesOperations_OnlyPublicStatic (line 26) | [Fact]
method Handler_AccessSecretsManagerFalse_DoesNotSucceed (line 35) | [Theory]
method Handler_UnsupportedClientTypes_DoesNotSucceed (line 53) | [Theory]
method Handler_UnsupportedServiceAccountGrantedPoliciesOperationRequirement_Throws (line 72) | [Theory]
method Handler_CanUpdateAsync_UserHasNoWriteAccessToSecret_DoesNotSucceed (line 87) | [Theory]
method Handler_CanUpdateAsync_TargetGranteesNotInSameOrganization_DoesNotSucceed (line 114) | [Theory]
method Handler_CanUpdateAsync_TargetGranteesNotInSameOrganizationHasZeroRequests_DoesNotSucceed (line 142) | [Theory]
method Handler_CanUpdateAsync_NoServiceAccountCreatesRequested_Success (line 172) | [Theory]
method Handler_CanUpdateAsync_NoAccessToTargetServiceAccounts_DoesNotSucceed (line 195) | [Theory]
method Handler_CanUpdateAsync_ServiceAccountAccessResultsPartial_DoesNotSucceed (line 218) | [Theory]
method Handler_CanUpdateAsync_UserHasAccessToSomeServiceAccounts_DoesNotSucceed (line 241) | [Theory]
method Handler_CanUpdateAsync_UserHasAccessToAllServiceAccounts_Success (line 264) | [Theory]
method Handler_CanCreateAsync_NotCreationOperations_DoesNotSucceed (line 287) | [Theory]
method Handler_CanCreateAsync_TargetGranteesNotInSameOrganization_DoesNotSucceed (line 307) | [Theory]
method Handler_CanCreateAsync_TargetGranteesNotInSameOrganizationHasZeroRequests_DoesNotSucceed (line 336) | [Theory]
method Handler_CanCreateAsync_NoServiceAccountCreatesRequested_Success (line 367) | [Theory]
method Handler_CanCreateAsync_NoAccessToTargetServiceAccounts_DoesNotSucceed (line 390) | [Theory]
method Handler_CanCreateAsync_ServiceAccountAccessResultsPartial_DoesNotSucceed (line 413) | [Theory]
method Handler_CanCreateAsync_UserHasAccessToSomeServiceAccounts_DoesNotSucceed (line 437) | [Theory]
method Handler_CanCreateAsync_UserHasAccessToAllServiceAccounts_Success (line 461) | [Theory]
method SetupNoServiceAccountAccess (line 485) | private static void SetupNoServiceAccountAccess(
method SetupPartialServiceAccountAccess (line 500) | private static void SetupPartialServiceAccountAccess(
method SetupSomeServiceAccountAccess (line 517) | private static void SetupSomeServiceAccountAccess(
method SetupAllServiceAccountAccess (line 534) | private static void SetupAllServiceAccountAccess(
method SetupUserSubstitutes (line 549) | private static void SetupUserSubstitutes(
method SetupSameOrganizationRequest (line 561) | private static void SetupSameOrganizationRequest(
method RemoveAllServiceAccountCreates (line 587) | private static SecretAccessPoliciesUpdates RemoveAllServiceAccountCrea...
method SetAllToCreates (line 595) | private static SecretAccessPoliciesUpdates SetAllToCreates(
method AddServiceAccountCreateUpdate (line 617) | private static SecretAccessPoliciesUpdates AddServiceAccountCreateUpdate(
method ClearAccessPolicyUpdate (line 634) | private static SecretAccessPoliciesUpdates ClearAccessPolicyUpdate(Sec...
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/AccessPolicies/ServiceAccountGrantedPoliciesAuthorizationHandlerTests.cs
class ServiceAccountGrantedPoliciesAuthorizationHandlerTests (line 20) | [SutProviderCustomize]
method ServiceAccountGrantedPoliciesOperations_OnlyPublicStatic (line 24) | [Fact]
method Handler_AccessSecretsManagerFalse_DoesNotSucceed (line 33) | [Theory]
method Handler_UnsupportedClientTypes_DoesNotSucceed (line 51) | [Theory]
method Handler_UnsupportedServiceAccountGrantedPoliciesOperationRequirement_Throws (line 70) | [Theory]
method Handler_UserHasNoWriteAccessToServiceAccount_DoesNotSucceed (line 85) | [Theory]
method Handler_GrantedProjectsInDifferentOrganization_DoesNotSucceed (line 112) | [Theory]
method Handler_UserHasNoAccessToGrantedProjects_DoesNotSucceed (line 136) | [Theory]
method Handler_UserHasAccessToSomeGrantedProjects_DoesNotSucceed (line 162) | [Theory]
method Handler_AccessResultsPartial_DoesNotSucceed (line 190) | [Theory]
method Handler_UserHasAccessToAllGrantedProjects_Success (line 217) | [Theory]
method SetupUserSubstitutes (line 242) | private static void SetupUserSubstitutes(
method SetupProjectAccessTest (line 254) | private static List<Guid> SetupProjectAccessTest(
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/AccessPolicies/ServiceAccountPeopleAccessPoliciesAuthorizationHandlerTests.cs
class ServiceAccountPeopleAccessPoliciesAuthorizationHandlerTests (line 19) | [SutProviderCustomize]
method SetupUserPermission (line 22) | private static void SetupUserPermission(
method SetupOrganizationUsers (line 38) | private static void SetupOrganizationUsers(
method SetupGroups (line 45) | private static void SetupGroups(SutProvider<ServiceAccountPeopleAccess...
method ServiceAccountPeopleAccessPoliciesOperations_OnlyPublicStatic (line 51) | [Fact]
method Handler_UnsupportedServiceAccountPeopleAccessPoliciesOperationRequirement_Throws (line 60) | [Theory]
method Handler_AccessSecretsManagerFalse_DoesNotSucceed (line 79) | [Theory]
method Handler_UnsupportedClientTypes_DoesNotSucceed (line 97) | [Theory]
method ReplaceServiceAccountPeople_UserNotInOrg_DoesNotSucceed (line 115) | [Theory]
method ReplaceServiceAccountPeople_GroupNotInOrg_DoesNotSucceed (line 136) | [Theory]
method ReplaceServiceAccountPeople_AccessCheck (line 159) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/Projects/ProjectAuthorizationHandlerTests.cs
class ProjectAuthorizationHandlerTests (line 20) | [SutProviderCustomize]
method SetupPermission (line 24) | private static void SetupPermission(SutProvider<ProjectAuthorizationHa...
method ProjectOperations_OnlyPublicStatic (line 52) | [Fact]
method Handler_UnsupportedProjectOperationRequirement_Throws (line 60) | [Theory]
method Handler_SupportedProjectOperationRequirement_DoesNotThrow (line 74) | [Theory]
method CanCreateProject_AccessToSecretsManagerFalse_DoesNotSucceed (line 94) | [Theory]
method CanCreateProject_NotSupportedClientTypes_DoesNotSucceed (line 110) | [Theory]
method CanCreateProject_Success (line 129) | [Theory]
method CanUpdateProject_AccessToSecretsManagerFalse_DoesNotSucceed (line 147) | [Theory]
method CanUpdateProject_NullResource_DoesNotSucceed (line 163) | [Theory]
method CanUpdateProject_NotSupportedClientType_DoesNotSucceed (line 184) | [Theory]
method CanUpdateProject_AccessCheck (line 204) | [Theory]
method CanDeleteProject_AccessToSecretsManagerFalse_DoesNotSucceed (line 233) | [Theory]
method CanDeleteProject_NullResource_DoesNotSucceed (line 250) | [Theory]
method CanDeleteProject_NotSupportedClientType_DoesNotSucceed (line 267) | [Theory]
method CanDeleteProject_AccessCheck (line 287) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/Secrets/BulkSecretAuthorizationHandlerTests.cs
class BulkSecretAuthorizationHandlerTests (line 20) | [SutProviderCustomize]
method BulkSecretOperations_OnlyPublicStatic (line 24) | [Fact]
method Handler_MisMatchedOrganizations_DoesNotSucceed (line 32) | [Theory]
method Handler_NoAccessToSecretsManager_DoesNotSucceed (line 50) | [Theory]
method Handler_UnsupportedSecretOperationRequirement_Throws (line 68) | [Theory]
method Handler_NoAccessToSecrets_DoesNotSucceed (line 83) | [Theory]
method Handler_HasAccessToSomeSecrets_DoesNotSucceed (line 108) | [Theory]
method Handler_PartialAccessReturn_DoesNotSucceed (line 136) | [Theory]
method Handler_HasAccessToAllSecrets_Success (line 164) | [Theory]
method SetSameOrganization (line 191) | private static List<Secret> SetSameOrganization(List<Secret> secrets)
method SetupUserSubstitutes (line 202) | private static void SetupUserSubstitutes(
method SetupSecretAccessRequest (line 214) | private static List<Guid> SetupSecretAccessRequest(
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/Secrets/SecretAuthorizationHandlerTests.cs
class SecretAuthorizationHandlerTests (line 20) | [SutProviderCustomize]
method SetupPermission (line 24) | private static void SetupPermission(SutProvider<SecretAuthorizationHan...
method SecretOperations_OnlyPublicStatic (line 53) | [Fact]
method Handler_UnsupportedSecretOperationRequirement_Throws (line 61) | [Theory]
method Handler_SupportedSecretOperationRequirement_Throws (line 75) | [Theory]
method CanCreateSecret_AccessToSecretsManagerFalse_DoesNotSucceed (line 94) | [Theory]
method CanCreateSecret_NotSupportedClientTypes_DoesNotSucceed (line 111) | [Theory]
method CanCreateSecret_ProjectsNotInOrg_DoesNotSucceed (line 130) | [Theory]
method CanCreateSecret_WithoutProjectUser_DoesNotSucceed (line 149) | [Theory]
method CanCreateSecret_WithoutProjectAdmin_Success (line 167) | [Theory]
method CanCreateSecret_DoesNotSucceed (line 185) | [Theory]
method CanCreateSecret_Success (line 208) | [Theory]
method CanReadSecret_AccessToSecretsManagerFalse_DoesNotSucceed (line 235) | [Theory]
method CanReadSecret_NullResource_DoesNotSucceed (line 252) | [Theory]
method CanReadSecret_AccessCheck (line 269) | [Theory]
method CanUpdateSecret_AccessToSecretsManagerFalse_DoesNotSucceed (line 298) | [Theory]
method CanUpdateSecret_NotSupportedClientTypes_DoesNotSucceed (line 315) | [Theory]
method CanUpdateSecret_ProjectsNotInOrg_DoesNotSucceed (line 334) | [Theory]
method CanUpdateSecret_ClearProjectsUser_DoesNotSucceed (line 353) | [Theory]
method CanUpdateSecret_ClearProjectsAdmin_Success (line 373) | [Theory]
method CanUpdateSecret_NoProjectChanges_ReturnsExpected (line 391) | [Theory]
method CanUpdateSecret_DoesNotSucceed (line 420) | [Theory]
method CanUpdateSecret_Success (line 460) | [Theory]
method CanDeleteSecret_AccessToSecretsManagerFalse_DoesNotSucceed (line 489) | [Theory]
method CanDeleteSecret_NullResource_DoesNotSucceed (line 506) | [Theory]
method CanDeleteSecret_AccessCheck (line 523) | [Theory]
method CanReadAccessPolicies_AccessToSecretsManagerFalse_DoesNotSucceed (line 552) | [Theory]
method CanReadAccessPolicies_NullResource_DoesNotSucceed (line 569) | [Theory]
method CanReadAccessPolicies_UnsupportedClient_DoesNotSucceed (line 586) | [Theory]
method CanReadAccessPolicies_AccessCheck (line 608) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/AuthorizationHandlers/ServiceAccounts/ServiceAccountAuthorizationHandlerTests.cs
class ServiceAccountAuthorizationHandlerTests (line 19) | [SutProviderCustomize]
method SetupPermission (line 22) | private static void SetupPermission(SutProvider<ServiceAccountAuthoriz...
method ServiceAccountOperations_OnlyPublicStatic (line 45) | [Fact]
method Handler_UnsupportedServiceAccountOperationRequirement_Throws (line 53) | [Theory]
method Handler_SupportedServiceAccountOperationRequirement_DoesNotThrow (line 68) | [Theory]
method CanCreateServiceAccount_AccessToSecretsManagerFalse_DoesNotSucceed (line 89) | [Theory]
method CanCreateServiceAccount_NotSupportedClientTypes_DoesNotSucceed (line 106) | [Theory]
method CanCreateServiceAccount_Success (line 129) | [Theory]
method CanUpdateServiceAccount_AccessToSecretsManagerFalse_DoesNotSucceed (line 146) | [Theory]
method CanUpdateServiceAccount_NullResource_DoesNotSucceed (line 163) | [Theory]
method CanUpdateServiceAccount_AccessCheck (line 180) | [Theory]
method CanReadServiceAccount_AccessToSecretsManagerFalse_DoesNotSucceed (line 206) | [Theory]
method CanReadServiceAccount_NullResource_DoesNotSucceed (line 223) | [Theory]
method CanReadServiceAccount_AccessCheck (line 240) | [Theory]
method CanCreateAccessToken_AccessToSecretsManagerFalse_DoesNotSucceed (line 265) | [Theory]
method CanCreateAccessToken_NullResource_DoesNotSucceed (line 282) | [Theory]
method CanCreateAccessToken_AccessCheck (line 299) | [Theory]
method CanReadAccessTokens_AccessToSecretsManagerFalse_DoesNotSucceed (line 324) | [Theory]
method CanReadAccessTokens_NullResource_DoesNotSucceed (line 341) | [Theory]
method CanReadAccessTokens_AccessCheck (line 358) | [Theory]
method CanRevokeAccessTokens_AccessToSecretsManagerFalse_DoesNotSucceed (line 383) | [Theory]
method CanRevokeAccessTokens_NullResource_DoesNotSucceed (line 400) | [Theory]
method CanRevokeAccessTokens_AccessCheck (line 417) | [Theory]
method CanDeleteServiceAccount_AccessToSecretsManagerFalse_DoesNotSucceed (line 442) | [Theory]
method CanDeleteServiceAccount_NullResource_DoesNotSucceed (line 459) | [Theory]
method CanDeleteProject_AccessCheck (line 476) | [Theory]
method CanReadEvents_AccessToSecretsManagerFalse_DoesNotSucceed (line 501) | [Theory]
method CanReadEvents_NullResource_DoesNotSucceed (line 518) | [Theory]
method CanReadEvents_AccessCheck (line 535) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/AccessPolicies/UpdateProjectServiceAccountsAccessPoliciesCommandTests.cs
class UpdateProjectServiceAccountsAccessPoliciesCommandTests (line 12) | [SutProviderCustomize]
method UpdateAsync_NoUpdates_DoesNotCallRepository (line 16) | [Theory]
method UpdateAsync_HasUpdates_CallsRepository (line 30) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/AccessPolicies/UpdateServiceAccountGrantedPoliciesCommandTests.cs
class UpdateServiceAccountGrantedPoliciesCommandTests (line 13) | [SutProviderCustomize]
method UpdateAsync_NoUpdates_DoesNotCallRepository (line 17) | [Theory]
method UpdateAsync_HasUpdates_CallsRepository (line 31) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/AccessTokens/CreateAccessTokenCommandTests.cs
class CreateServiceAccountCommandTests (line 13) | [SutProviderCustomize]
method CreateAsync_NoServiceAccountId_ThrowsBadRequestException (line 16) | [Theory]
method CreateAsync_Success (line 28) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Projects/CreateProjectCommandTests.cs
class CreateProjectCommandTests (line 15) | [SutProviderCustomize]
method CreateAsync_CallsCreate (line 19) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Projects/DeleteProjectCommandTests.cs
class DeleteProjectCommandTests (line 13) | [SutProviderCustomize]
method DeleteProjects_Success (line 17) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Projects/UpdateProjectCommandTests.cs
class UpdateProjectCommandTests (line 14) | [SutProviderCustomize]
method UpdateAsync_Throws_NotFoundException (line 18) | [Theory]
method UpdateAsync_Success (line 29) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Requests/RequestSMAccessCommandTests.cs
class RequestSMAccessCommandTests (line 16) | [SutProviderCustomize]
method SendRequestAccessToSM_Success (line 19) | [Theory]
method SendRequestAccessToSM_NoAdmins_ThrowsBadRequestException (line 48) | [Theory]
method SendRequestAccessToSM_SomeAdmins_EmailListIsAsExpected (line 67) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Secrets/CreateSecretCommandTests.cs
class CreateSecretCommandTests (line 12) | [SutProviderCustomize]
method CreateAsync_Success (line 16) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Secrets/DeleteSecretCommandTests.cs
class DeleteSecretCommandTests (line 13) | [SutProviderCustomize]
method DeleteSecrets_Success (line 17) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Secrets/UpdateSecretCommandTests.cs
class UpdateSecretCommandTests (line 14) | [SutProviderCustomize]
method UpdateAsync_Success (line 19) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/ServiceAccounts/CreateServiceAccountCommandTests.cs
class CreateServiceAccountCommandTests (line 14) | [SutProviderCustomize]
method CreateAsync_CallsCreate (line 17) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/ServiceAccounts/DeleteServiceAccountsCommandTests.cs
class DeleteServiceAccountsCommandTests (line 12) | [SutProviderCustomize]
method DeleteServiceAccounts_Success (line 15) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/ServiceAccounts/RevokeAccessTokenCommandTests.cs
class RevokeAccessTokenCommandTests (line 11) | [SutProviderCustomize]
method RevokeAsyncAsync_Success (line 14) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/ServiceAccounts/UpdateServiceAccountCommandTests.cs
class UpdateServiceAccountCommandTests (line 13) | [SutProviderCustomize]
method UpdateAsync_ServiceAccountDoesNotExist_ThrowsNotFound (line 16) | [Theory]
method UpdateAsync_Success (line 25) | [Theory]
method UpdateAsync_DoesNotModifyOrganizationId (line 37) | [Theory]
method UpdateAsync_DoesNotModifyCreationDate (line 57) | [Theory]
method UpdateAsync_RevisionDateIsUpdatedToUtcNow (line 77) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Trash/EmptyTrashCommandTests.cs
class EmptyTrashCommandTests (line 13) | [SutProviderCustomize]
method EmptyTrash_Throws_NotFoundException (line 17) | [Theory]
method EmptyTrash_Success (line 33) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Trash/RestoreTrashCommandTests.cs
class RestoreTrashCommandTests (line 13) | [SutProviderCustomize]
method RestoreTrash_Throws_NotFoundException (line 17) | [Theory]
method RestoreTrash_Success (line 33) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Enums/AccessPolicyType.cs
type AccessPolicyType (line 3) | public enum AccessPolicyType
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Enums/PermissionType.cs
type PermissionType (line 3) | public enum PermissionType
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/AccessPolicies/ProjectServiceAccountsAccessPoliciesUpdatesQueryTests.cs
class ProjectServiceAccountsAccessPoliciesUpdatesQueryTests (line 16) | [SutProviderCustomize]
method GetAsync_NoCurrentAccessPolicies_ReturnsAllCreates (line 20) | [Theory]
method GetAsync_CurrentAccessPolicies_ReturnsChanges (line 42) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/AccessPolicies/SameOrganizationQueryTests.cs
class SameOrganizationQueryTests (line 13) | [SutProviderCustomize]
method OrgUsersInTheSameOrg_NoOrgUsers_ReturnsFalse (line 16) | [Theory]
method OrgUsersInTheSameOrg_OrgMismatch_ReturnsFalse (line 30) | [Theory]
method OrgUsersInTheSameOrg_CountMismatch_ReturnsFalse (line 44) | [Theory]
method OrgUsersInTheSameOrg_Success_ReturnsTrue (line 64) | [Theory]
method GroupsInTheSameOrg_NoGroups_ReturnsFalse (line 83) | [Theory]
method GroupsInTheSameOrg_OrgMismatch_ReturnsFalse (line 97) | [Theory]
method GroupsInTheSameOrg_CountMismatch_ReturnsFalse (line 111) | [Theory]
method GroupsInTheSameOrg_Success_ReturnsTrue (line 132) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/AccessPolicies/SecretAccessPoliciesUpdatesQueryTests.cs
class SecretAccessPoliciesUpdatesQueryTests (line 16) | [SutProviderCustomize]
method GetAsync_NoCurrentAccessPolicies_ReturnsAllCreates (line 20) | [Theory]
method GetAsync_CurrentAccessPolicies_ReturnsChanges (line 58) | [Theory]
method SetupUserAccessPolicies (line 116) | private static (UserSecretAccessPolicy Update, UserSecretAccessPolicy ...
method SetupGroupAccessPolicies (line 132) | private static (GroupSecretAccessPolicy Update, GroupSecretAccessPolic...
method SetupServiceAccountAccessPolicies (line 148) | private static (ServiceAccountSecretAccessPolicy Update, ServiceAccoun...
method SetupSecretAccessPolicies (line 165) | private static SecretAccessPolicies SetupSecretAccessPolicies(SecretAc...
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/AccessPolicies/ServiceAccountGrantedPolicyUpdatesQueryTests.cs
class ServiceAccountGrantedPolicyUpdatesQueryTests (line 16) | [SutProviderCustomize]
method GetAsync_NoCurrentGrantedPolicies_ReturnsAllCreates (line 20) | [Theory]
method GetAsync_CurrentGrantedPolicies_ReturnsChanges (line 42) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/Projects/MaxProjectsQueryTests.cs
class MaxProjectsQueryTests (line 18) | [SutProviderCustomize]
method GetByOrgIdAsync_SelfHosted_ReturnsNulls (line 21) | [Theory]
method GetByOrgIdAsync_OrganizationIsNull_ThrowsNotFound (line 34) | [Theory]
method GetByOrgIdAsync_SmNoneFreePlans_ReturnsNull (line 49) | [Theory]
method GetByOrgIdAsync_SmFreePlan__Success (line 83) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/Secrets/SecretsSyncQueryTests.cs
class SecretsSyncQueryTests (line 15) | [SutProviderCustomize]
method GetAsync_NullLastSyncedDate_ReturnsHasChanges (line 18) | [Theory, BitAutoData]
method GetAsync_HasLastSyncedDateServiceAccountNotFound_Throws (line 34) | [Theory, BitAutoData]
method GetAsync_HasLastSyncedDateServiceAccountWithLaterOrEqualRevisionDate_ReturnsChanges (line 50) | [Theory]
method GetAsync_HasLastSyncedDateServiceAccountWithEarlierRevisionDate_ReturnsNoChanges (line 75) | [Theory, BitAutoData]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/ServiceAccounts/CountNewServiceAccountSlotsRequiredQueryTests.cs
class CountNewServiceAccountSlotsRequiredQueryTests (line 13) | [SutProviderCustomize]
method CountNewServiceAccountSlotsRequiredAsync_ReturnsCorrectCount (line 16) | [Theory]
method CountNewServiceAccountSlotsRequiredAsync_WithNullSmServiceAccounts_ReturnsZero (line 51) | [Theory]
method CountNewServiceAccountSlotsRequiredAsync_WithNonExistentOrganizationId_ThrowsNotFound (line 81) | [Theory, BitAutoData]
method CountNewServiceAccountSlotsRequiredAsync_WithOrganizationUseSecretsManagerFalse_ThrowsNotFound (line 89) | [Theory, BitAutoData]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Queries/ServiceAccounts/ServiceAccountSecretsDetailsQueryTests.cs
class ServiceAccountSecretsDetailsQueryTests (line 14) | [SutProviderCustomize]
method GetManyByOrganizationId_CallsDifferentRepoMethods (line 17) | [Theory]
FILE: bitwarden_license/test/Commercial.Core.Test/SecretsManager/Repositories/SecretVersionRepositoryTests.cs
class SecretVersionRepositoryTests (line 7) | public class SecretVersionRepositoryTests
method SecretVersion_EntityCreation_Success (line 9) | [Theory]
method SecretVersion_WithServiceAccountEditor_Success (line 23) | [Theory]
method SecretVersion_WithOrganizationUserEditor_Success (line 36) | [Theory]
method SecretVersion_NullableEditors_Success (line 49) | [Theory]
method SecretVersion_VersionDateSet_Success (line 62) | [Theory]
method SecretVersion_ValueEncrypted_Success (line 76) | [Theory]
method SecretVersion_MultipleVersions_DifferentIds (line 88) | [Theory]
method SecretVersion_VersionDateOrdering_Success (line 105) | [Theory]
FILE: bitwarden_license/test/SSO.Test/Controllers/AccountControllerTest.cs
class AccountControllerTest (line 31) | [ControllerCustomize(typeof(AccountController)), SutProviderCustomize]
method AccountControllerTest (line 36) | public AccountControllerTest(ITestOutputHelper output)
method SetupHttpContextWithAuth (line 41) | private static IAuthenticationService SetupHttpContextWithAuth(
method BuildSuccessfulExternalAuth (line 79) | private static AuthenticateResult BuildSuccessfulExternalAuth(Guid org...
method ConfigureSsoAndUser (line 101) | private static void ConfigureSsoAndUser(
method ExternalCallback_ExistingUser_NoOrgUser_ThrowsCouldNotFindOrganizationUser (line 132) | [Theory, BitAutoData]
method ExternalCallback_ExistingUser_OrgUserInvited_AllowsLogin (line 170) | [Theory, BitAutoData]
method ExternalCallback_ExistingUser_OrgUserRevoked_ThrowsAccessRevoked (line 224) | [Theory, BitAutoData]
method ExternalCallback_ExistingUser_OrgUserUnknown_ThrowsUnknown (line 264) | [Theory, BitAutoData]
method ExternalCallback_WithExistingUserAndAcceptedMembership_RedirectsToReturnUrl (line 305) | [Theory, BitAutoData]
method ExternalCallback_ExistingSsoLinkedAccepted_MeasureLookups (line 355) | [Theory, BitAutoData]
method ExternalCallback_JitProvision_MeasureLookups (line 422) | [Theory, BitAutoData]
method ExternalCallback_ExistingUser_NoOrgUser_MeasureLookups (line 485) | [Theory, BitAutoData]
method CreateUserAndOrgUserConditionallyAsync_WithExistingAcceptedUser_CreatesSsoLinkAndReturnsUser (line 549) | [Theory, BitAutoData]
method CreateUserAndOrgUserConditionallyAsync_WithExistingInvitedUser_ThrowsAcceptInviteBeforeUsingSSO (line 612) | [Theory, BitAutoData]
method ExternalChallenge_WithMatchingOrgId_Succeeds (line 667) | [Theory, BitAutoData]
method ExternalChallenge_WithMismatchedOrgId_ThrowsSsoOrganizationIdMismatch (line 707) | [Theory, BitAutoData]
method ExternalChallenge_WithInvalidSchemeFormat_ThrowsSsoOrganizationIdMismatch (line 737) | [Theory, BitAutoData]
method ExternalChallenge_WithInvalidSsoToken_ThrowsInvalidSsoToken (line 765) | [Theory, BitAutoData]
FILE: bitwarden_license/test/SSO.Test/IdentityServer/DistributedCachePersistedGrantStoreTests.cs
class DistributedCachePersistedGrantStoreTests (line 9) | public class DistributedCachePersistedGrantStoreTests
method DistributedCachePersistedGrantStoreTests (line 14) | public DistributedCachePersistedGrantStoreTests()
method StoreAsync_StoresGrantWithCalculatedTTL (line 20) | [Fact]
method StoreAsync_WithNoExpiration_UsesDefaultFiveMinuteTTL (line 38) | [Fact]
method StoreAsync_WithAlreadyExpiredGrant_DoesNotStore (line 54) | [Fact]
method StoreAsync_EnablesDistributedCache (line 70) | [Fact]
method GetAsync_WithValidGrant_ReturnsGrant (line 88) | [Fact]
method GetAsync_WithNonExistentKey_ReturnsNull (line 107) | [Fact]
method GetAsync_WithExpiredGrant_RemovesAndReturnsNull (line 122) | [Fact]
method GetAsync_WithNoExpiration_ReturnsGrant (line 138) | [Fact]
method RemoveAsync_RemovesGrantFromCache (line 156) | [Fact]
method GetAllAsync_ReturnsEmptyCollection (line 166) | [Fact]
method RemoveAllAsync_CompletesWithoutError (line 186) | [Fact]
method StoreAsync_PreservesAllGrantProperties (line 203) | [Fact]
method CreateTestGrant (line 244) | private static PersistedGrant CreateTestGrant(string key, DateTime? ex...
FILE: bitwarden_license/test/Scim.IntegrationTest/Controllers/v2/GroupsControllerPatchTests.cs
class GroupsControllerPatchTests (line 10) | public class GroupsControllerPatchTests : IClassFixture<ScimApplicationF...
method GroupsControllerPatchTests (line 14) | public GroupsControllerPatchTests(ScimApplicationFactory factory)
method InitializeAsync (line 19) | public Task InitializeAsync()
method DisposeAsync (line 27) | Task IAsyncLifetime.DisposeAsync() => Task.CompletedTask;
method Patch_ReplaceDisplayName_Success (line 29) | [Fact]
method Patch_ReplaceMembers_Success (line 61) | [Fact]
method Patch_AddSingleMember_Success (line 92) | [Fact]
method Patch_AddListMembers_Success (line 122) | [Fact]
method Patch_RemoveSingleMember_ReplaceDisplayName_Success (line 150) | [Fact]
method Patch_RemoveListMembers_Success (line 187) | [Fact]
method Patch_NotFound (line 214) | [Fact]
FILE: bitwarden_license/test/Scim.IntegrationTest/Controllers/v2/GroupsControllerTests.cs
class GroupsControllerTests (line 10) | public class GroupsControllerTests : IClassFixture<ScimApplicationFactor...
method GroupsControllerTests (line 14) | public GroupsControllerTests(ScimApplicationFactory factory)
method InitializeAsync (line 19) | public Task InitializeAsync()
method DisposeAsync (line 26) | Task IAsyncLifetime.DisposeAsync() => Task.CompletedTask;
method Get_Success (line 28) | [Fact]
method Get_NotFound (line 51) | [Fact]
method GetList_Success (line 71) | [Fact]
method GetList_SearchDisplayName_Success (line 111) | [Fact]
method GetList_SearchExternalId_Success (line 144) | [Fact]
method GetList_EmptyResult_Success (line 178) | [Fact]
method GetList_SearchDisplayNameWithoutOptionalParameters_Success (line 203) | [Fact]
method Post_Success (line 235) | [Fact]
method Post_InvalidDisplayName_BadRequest (line 276) | [Theory]
method Post_ExistingExternalId_Conflict (line 296) | [Fact]
method Put_ChangeNameAndMembers_Success (line 317) | [Fact]
method Put_NotFound (line 358) | [Fact]
method Delete_Success (line 386) | [Fact]
method Delete_NotFound (line 401) | [Fact]
FILE: bitwarden_license/test/Scim.IntegrationTest/Controllers/v2/UsersControllerTests.cs
class UsersControllerTests (line 14) | public class UsersControllerTests : IClassFixture<ScimApplicationFactory...
method UsersControllerTests (line 20) | public UsersControllerTests(ScimApplicationFactory factory)
method InitializeAsync (line 25) | public Task InitializeAsync()
method DisposeAsync (line 32) | Task IAsyncLifetime.DisposeAsync() => Task.CompletedTask;
method Get_Success (line 34) | [Fact]
method Get_NotFound (line 64) | [Fact]
method GetList_Success (line 83) | [Fact]
method GetList_SearchUserName_Success (line 139) | [Fact]
method GetList_SearchExternalId_Success (line 179) | [Fact]
method GetList_EmptyResult_Success (line 219) | [Fact]
method GetList_SearchUserNameWithoutOptionalParameters_Success (line 242) | [Fact]
method Post_Success (line 282) | [Theory]
method Post_InvalidEmail_BadRequest (line 335) | [Theory]
method Post_Inactive_BadRequest (line 358) | [Fact]
method Post_ExistingData_Conflict (line 375) | [Theory]
method Put_RevokeUser_Success (line 397) | [Theory]
method Put_RestoreUser_Success (line 441) | [Fact]
method Put_NotFound (line 476) | [Fact]
method Patch_ReplaceRevoke_Success (line 501) | [Fact]
method Patch_ReplaceRestore_Success (line 524) | [Fact]
method Patch_NotFound (line 547) | [Fact]
method Patch_ExternalIdFromPath_Success (line 571) | [Fact]
method Patch_ExternalIdFromValue_Success (line 599) | [Fact]
method Patch_ExternalIdDuplicate_ThrowsConflict (line 626) | [Fact]
method Patch_UnsupportedOperation_LogsWarningAndSucceeds (line 659) | [Fact]
method Delete_Success (line 683) | [Fact]
method Delete_NotFound (line 698) | [Fact]
FILE: bitwarden_license/test/Scim.IntegrationTest/Factories/ScimApplicationFactory.cs
class ScimApplicationFactory (line 17) | public class ScimApplicationFactory : WebApplicationFactoryBase<Startup>
method ConfigureWebHost (line 35) | protected override void ConfigureWebHost(IWebHostBuilder builder)
method GroupsGetAsync (line 60) | public async Task<HttpContext> GroupsGetAsync(Guid organizationId, Gui...
method GroupsGetListAsync (line 65) | public async Task<HttpContext> GroupsGetListAsync(Guid organizationId,...
method GroupsPostAsync (line 87) | public async Task<HttpContext> GroupsPostAsync(Guid organizationId, Sc...
method GroupsPutAsync (line 92) | public async Task<HttpContext> GroupsPutAsync(Guid organizationId, Gui...
method GroupsPatchAsync (line 97) | public async Task<HttpContext> GroupsPatchAsync(Guid organizationId, G...
method GroupsDeleteAsync (line 102) | public async Task<HttpContext> GroupsDeleteAsync(Guid organizationId, ...
method UsersGetAsync (line 107) | public async Task<HttpContext> UsersGetAsync(Guid organizationId, Guid...
method UsersGetListAsync (line 112) | public async Task<HttpContext> UsersGetListAsync(Guid organizationId, ...
method UsersPostAsync (line 134) | public async Task<HttpContext> UsersPostAsync(Guid organizationId, Sci...
method UsersPutAsync (line 139) | public async Task<HttpContext> UsersPutAsync(Guid organizationId, Guid...
method UsersPatchAsync (line 144) | public async Task<HttpContext> UsersPatchAsync(Guid organizationId, Gu...
method UsersDeleteAsync (line 149) | public async Task<HttpContext> UsersDeleteAsync(Guid organizationId, G...
method InitializeDbForTests (line 154) | public void InitializeDbForTests(DatabaseContext databaseContext)
method ReinitializeDbForTests (line 164) | public void ReinitializeDbForTests(DatabaseContext databaseContext)
method GetSeedingUsers (line 175) | private List<Infrastructure.EntityFramework.Models.User> GetSeedingUse...
method GetSeedingGroups (line 186) | private List<Infrastructure.EntityFramework.Models.Group> GetSeedingGr...
method GetSeedingOrganizations (line 196) | private List<Organization> GetSeedingOrganizations()
method GetSeedingOrganizationUsers (line 211) | private List<Infrastructure.EntityFramework.Models.OrganizationUser> G...
method GetSeedingGroupUsers (line 222) | private List<Infrastructure.EntityFramework.Models.GroupUser> GetSeedi...
method GetStringContent (line 231) | private static StringContent GetStringContent(object obj) => new(JsonS...
class TestAuthHandler (line 233) | public class TestAuthHandler : AuthenticationHandler<AuthenticationSch...
method TestAuthHandler (line 235) | public TestAuthHandler(IOptionsMonitor<AuthenticationSchemeOptions> ...
method HandleAuthenticateAsync (line 241) | protected override Task<AuthenticateResult> HandleAuthenticateAsync()
FILE: bitwarden_license/test/Scim.Test/Groups/GetGroupsListQueryTests.cs
class GetGroupsListCommandTests (line 13) | [SutProviderCustomize]
method GetGroupsList_Success (line 16) | [Theory]
method GetGroupsList_FilterDisplayName_Success (line 34) | [Theory]
method GetGroupsList_FilterDisplayName_Empty (line 57) | [Theory]
method GetGroupsList_FilterExternalId_Success (line 77) | [Theory]
method GetGroupsList_FilterExternalId_Empty (line 100) | [Theory]
method SetGroupsOrganizationId (line 122) | private IList<Group> SetGroupsOrganizationId(IList<Group> groups, Guid...
FILE: bitwarden_license/test/Scim.Test/Groups/PatchGroupCommandTests.cs
class PatchGroupCommandTests (line 21) | [SutProviderCustomize]
method PatchGroup_ReplaceListMembers_Success (line 24) | [Theory]
method PatchGroup_ReplaceDisplayNameFromPath_Success (line 54) | [Theory]
method PatchGroup_ReplaceDisplayNameFromPath_MissingOrganization_Throws (line 85) | [Theory]
method PatchGroup_ReplaceDisplayNameFromValueObject_Success (line 113) | [Theory]
method PatchGroup_ReplaceDisplayNameFromValueObject_MissingOrganization_Throws (line 142) | [Theory]
method PatchGroup_AddSingleMember_Success (line 169) | [Theory]
method PatchGroup_AddSingleMember_ReturnsEarlyIfAlreadyInGroup (line 199) | [Theory]
method PatchGroup_AddListMembers_Success (line 235) | [Theory]
method PatchGroup_AddListMembers_IgnoresDuplicatesInRequest (line 268) | [Theory]
method PatchGroup_AddListMembers_SuccessIfOnlySomeUsersAreInGroup (line 314) | [Theory]
method PatchGroup_RemoveSingleMember_Success (line 356) | [Theory]
method PatchGroup_RemoveListMembers_Success (line 380) | [Theory]
method PatchGroup_InvalidOperation_Success (line 418) | [Theory]
method PatchGroup_NoOperation_Success (line 442) | [Theory]
FILE: bitwarden_license/test/Scim.Test/Groups/PostGroupCommandTests.cs
class PostGroupCommandTests (line 17) | [SutProviderCustomize]
method PostGroup_Success (line 20) | [Theory]
method PostGroup_WithMembers_Success (line 51) | [Theory]
method PostGroup_NullDisplayName_Throws (line 82) | [Theory]
method PostGroup_ExistingExternalId_Throws (line 99) | [Theory]
FILE: bitwarden_license/test/Scim.Test/Groups/PutGroupCommandTests.cs
class PutGroupCommandTests (line 17) | [SutProviderCustomize]
method PutGroup_Success (line 20) | [Theory]
method PutGroup_ChangeMembers_Success (line 53) | [Theory]
method PutGroup_NotFound_Throws (line 87) | [Theory]
method PutGroup_MismatchingOrganizationId_Throws (line 100) | [Theory]
FILE: bitwarden_license/test/Scim.Test/Users/GetUsersListQueryTests.cs
class GetUsersListQueryTests (line 13) | [SutProviderCustomize]
method GetUsersList_Success (line 16) | [Theory]
method GetUsersList_FilterUserName_Success (line 36) | [Theory]
method GetUsersList_FilterUserName_Empty (line 61) | [Theory]
method GetUsersList_FilterExternalId_Success (line 83) | [Theory]
method GetUsersList_FilterExternalId_Empty (line 108) | [Theory]
method SetUsersOrganizationId (line 132) | private IList<OrganizationUserUserDetails> SetUsersOrganizationId(ILis...
FILE: bitwarden_license/test/Scim.Test/Users/PatchUserCommandTests.cs
class PatchUserCommandTests (line 19) | [SutProviderCustomize]
method PatchUser_RestorePath_Success (line 22) | [Theory]
method PatchUser_RestoreValue_Success (line 51) | [Theory]
method PatchUser_RevokePath_Success (line 79) | [Theory]
method PatchUser_RevokeValue_Success (line 108) | [Theory]
method PatchUser_NoAction_Success (line 136) | [Theory]
method PatchUser_NotFound_Throws (line 156) | [Theory]
method PatchUser_MismatchingOrganizationId_Throws (line 169) | [Theory]
method PatchUser_ExternalIdFromPath_Success (line 190) | [Theory]
method PatchUser_ExternalIdFromValue_Success (line 225) | [Theory]
method PatchUser_ExternalIdDuplicate_ThrowsConflict (line 259) | [Theory]
method PatchUser_ExternalIdTooLong_ThrowsBadRequest (line 294) | [Theory]
method PatchUser_ExternalIdNull_Success (line 322) | [Theory]
method PatchUser_UnsupportedOperation_LogsWarningAndSucceeds (line 356) | [Theory]
method PatchUser_ActiveAndExternalIdFromValue_Success (line 386) | [Theory]
method PatchUser_RestoreAndExternalIdFromValue_DoesNotRevertRestore (line 423) | [Theory]
FILE: bitwarden_license/test/Scim.Test/Users/PostUserCommandTests.cs
class PostUserCommandTests (line 19) | [SutProviderCustomize]
method PostUser_Success (line 22) | [Theory]
method PostUser_NullEmail_Throws (line 68) | [Theory]
method PostUser_Inactive_Throws (line 82) | [Theory]
method PostUser_DuplicateExternalId_Throws (line 96) | [Theory]
method PostUser_DuplicateUserName_Throws (line 115) | [Theory]
FILE: bitwarden_license/test/Sso.IntegrationTest/Controllers/AccountControllerTests.cs
class AccountControllerTests (line 22) | public class AccountControllerTests(SsoApplicationFactory factory) : ICl...
method ExternalCallback_EndpointExists_ReturnsExpectedStatusCode (line 29) | [Fact]
method ExternalCallback_WithNoAuthenticationCookie_ReturnsError (line 46) | [Fact]
method ExternalCallback_WithMockedAuthenticationService_FailedAuth_ReturnsError (line 64) | [Fact]
method ExternalCallback_WithDisabledSsoConfig_ReturnsError (line 84) | [Fact]
method ExternalCallback_FindUserFromExternalProviderAsync_OrganizationOrSsoConfigNotFound_ReturnsError (line 103) | [Fact]
method ExternalCallback_WithExpectedAcrValue_AndInvalidAcr_ReturnsError (line 125) | [Fact]
method ExternalCallback_WithNoUserIdClaim_ReturnsError (line 152) | [Fact]
method ExternalCallback_WithNoEmailClaim_ReturnsError (line 176) | [Fact]
method ExternalCallback_WithExistingKeyConnectorUser_AndNoOrgUser_ReturnsError (line 200) | [Fact]
method ExternalCallback_WithExistingKeyConnectorUser_AndInvitedOrgUser_ReturnsError (line 227) | [Fact]
method ExternalCallback_WithExistingUser_AndNoOrgUser_ReturnsError (line 258) | [Fact]
method ExternalCallback_WithExistingUser_AndInvitedOrgUserStatus_ReturnsError (line 282) | [Fact]
method ExternalCallback_WithNoAvailableSeats_OnSelfHosted_ReturnsError (line 310) | [Fact]
method ExternalCallback_WithNoAvailableSeats_AndAutoAddSeatsFails_ReturnsError (line 337) | [Fact]
method ExternalCallback_WithUserIdentifier_AndNoEmail_ReturnsError (line 365) | [Fact]
method ExternalCallback_WithUnknownOrgUserStatus_ReturnsError (line 391) | [Fact]
method ExternalCallback_WithInvalidUserIdentifierFormat_ReturnsError (line 425) | [Theory]
method ExternalCallback_WithUserIdentifier_AndInvalidToken_ReturnsError (line 460) | [Fact]
method ExternalCallback_WithRevokedOrgUser_ReturnsError (line 552) | [Fact]
method ExternalCallback_WithSsoUser_AndNoOrgUser_ReturnsError (line 582) | [Fact]
method ExternalCallback_WithInvalidProviderGuid_ReturnsError (line 613) | [Fact(Skip = "This test cannot be executed because the organization ID...
method ExternalCallback_WithNonExistentOrganization_ReturnsError (line 651) | [Fact(Skip = "This code path is unreachable because the SsoConfig must...
method ExternalCallback_WithExistingSsoUser_ReturnsSuccess (line 675) | [Fact]
method ExternalCallback_WithJitProvisioning_ReturnsSuccess (line 706) | [Fact]
method ExternalCallback_WithExistingUserAndConfirmedOrgUser_ReturnsSuccess (line 734) | [Fact]
method ExternalCallback_WithExistingUserAndAcceptedOrgUser_ReturnsSuccess (line 767) | [Fact]
method ExternalCallback_WithNativeClient_ReturnsViewWith200Status (line 802) | [Fact]
FILE: bitwarden_license/test/Sso.IntegrationTest/Utilities/SsoApplicationFactory.cs
class SsoApplicationFactory (line 5) | public class SsoApplicationFactory : WebApplicationFactoryBase<Startup>
method ConfigureWebHost (line 7) | protected override void ConfigureWebHost(IWebHostBuilder builder)
FILE: bitwarden_license/test/Sso.IntegrationTest/Utilities/SsoTestDataBuilder.cs
type SsoTestData (line 21) | public record SsoTestData(
class SsoTestDataBuilder (line 32) | public class SsoTestDataBuilder
method WithOrganization (line 56) | public SsoTestDataBuilder WithOrganization(Action<Organization> config...
method WithUser (line 62) | public SsoTestDataBuilder WithUser(Action<User>? configure = null)
method WithOrganizationUser (line 69) | public SsoTestDataBuilder WithOrganizationUser(Action<OrganizationUser...
method WithSsoConfig (line 76) | public SsoTestDataBuilder WithSsoConfig(Action<SsoConfig>? configure =...
method WithSsoUser (line 83) | public SsoTestDataBuilder WithSsoUser(Action<SsoUser>? configure = null)
method WithFeatureFlags (line 90) | public SsoTestDataBuilder WithFeatureFlags(Action<SsoApplicationFactor...
method WithFailedAuthentication (line 96) | public SsoTestDataBuilder WithFailedAuthentication()
method WithNullEmail (line 102) | public SsoTestDataBuilder WithNullEmail()
method WithUserIdentifier (line 108) | public SsoTestDataBuilder WithUserIdentifier(string userIdentifier)
method OmitProviderUserId (line 114) | public SsoTestDataBuilder OmitProviderUserId()
method AsSelfHosted (line 120) | public SsoTestDataBuilder AsSelfHosted()
method WithNonExistentOrganizationInAuth (line 130) | public SsoTestDataBuilder WithNonExistentOrganizationInAuth()
method AsNativeClient (line 141) | public SsoTestDataBuilder AsNativeClient()
method BuildAsync (line 147) | public async Task<SsoTestData> BuildAsync()
FILE: bitwarden_license/test/Sso.IntegrationTest/Utilities/SuccessfulAuthResult.cs
class MockSuccessfulAuthResult (line 11) | internal static class MockSuccessfulAuthResult
method Build (line 24) | public static AuthenticateResult Build(
method Build (line 39) | public static AuthenticateResult Build(
FILE: perf/MicroBenchmarks/Core/EncryptedStringAttributeTests.cs
class EncryptedStringAttributeTests (line 6) | [MemoryDiagnoser]
method EncryptedStringAttributeTests (line 10) | public EncryptedStringAttributeTests()
method IsValid (line 21) | [Benchmark]
FILE: perf/MicroBenchmarks/Identity/IdentityServer/PersistedGrantStoreTests.cs
class PersistedGrantStoreTests (line 9) | [MemoryDiagnoser]
method PersistedGrantStoreTests (line 38) | public PersistedGrantStoreTests()
method Setup (line 74) | [GlobalSetup]
method StoreAsync (line 91) | [Benchmark]
FILE: perf/MicroBenchmarks/Identity/IdentityServer/StaticClientStoreTests.cs
class StaticClientStoreTests (line 8) | public class StaticClientStoreTests
method StaticClientStoreTests (line 12) | public StaticClientStoreTests()
method TryGetValue (line 20) | [Benchmark]
FILE: perf/load/config.js
constant IDENTITY_URL (line 5) | const IDENTITY_URL = __ENV.IDENTITY_URL;
constant API_URL (line 6) | const API_URL = __ENV.API_URL;
constant CLIENT_ID (line 7) | const CLIENT_ID = __ENV.CLIENT_ID;
constant AUTH_USERNAME (line 8) | const AUTH_USERNAME = __ENV.AUTH_USER_EMAIL;
constant AUTH_PASSWORD (line 9) | const AUTH_PASSWORD = __ENV.AUTH_USER_PASSWORD_HASH;
function setup (line 44) | function setup() {
FILE: perf/load/groups.js
constant IDENTITY_URL (line 6) | const IDENTITY_URL = __ENV.IDENTITY_URL;
constant API_URL (line 7) | const API_URL = __ENV.API_URL;
constant CLIENT_ID (line 8) | const CLIENT_ID = __ENV.CLIENT_ID;
constant AUTH_CLIENT_ID (line 9) | const AUTH_CLIENT_ID = __ENV.AUTH_CLIENT_ID;
constant AUTH_CLIENT_SECRET (line 10) | const AUTH_CLIENT_SECRET = __ENV.AUTH_CLIENT_SECRET;
function setup (line 45) | function setup() {
FILE: perf/load/helpers/auth.js
function authenticate (line 15) | function authenticate(
FILE: perf/load/login.js
constant IDENTITY_URL (line 3) | const IDENTITY_URL = __ENV.IDENTITY_URL;
constant CLIENT_ID (line 4) | const CLIENT_ID = __ENV.CLIENT_ID;
constant AUTH_USERNAME (line 5) | const AUTH_USERNAME = __ENV.AUTH_USER_EMAIL;
constant AUTH_PASSWORD (line 6) | const AUTH_PASSWORD = __ENV.AUTH_USER_PASSWORD_HASH;
FILE: perf/load/sync.js
constant IDENTITY_URL (line 5) | const IDENTITY_URL = __ENV.IDENTITY_URL;
constant API_URL (line 6) | const API_URL = __ENV.API_URL;
constant CLIENT_ID (line 7) | const CLIENT_ID = __ENV.CLIENT_ID;
constant AUTH_USERNAME (line 8) | const AUTH_USERNAME = __ENV.AUTH_USER_EMAIL;
constant AUTH_PASSWORD (line 9) | const AUTH_PASSWORD = __ENV.AUTH_USER_PASSWORD_HASH;
function setup (line 44) | function setup() {
FILE: src/Admin/AdminConsole/Controllers/OrganizationsController.cs
class OrganizationsController (line 38) | [Authorize]
method OrganizationsController (line 69) | public OrganizationsController(
method Index (line 127) | [RequirePermission(Permission.Org_List_View)]
method View (line 157) | public async Task<IActionResult> View(Guid id)
method Edit (line 190) | [SelfHosted(NotSelfHostedOnly = true)]
method Edit (line 245) | [HttpPost]
method CheckOrganizationPolicyComplianceAsync (line 374) | private async Task<Error> CheckOrganizationPolicyComplianceAsync(Organ...
method Delete (line 387) | [HttpPost]
method DeleteInitiation (line 418) | [HttpPost]
method TriggerBillingSync (line 447) | public async Task<IActionResult> TriggerBillingSync(Guid id)
method ResendOwnerInvite (line 482) | [HttpPost]
method UnlinkOrganizationFromProviderAsync (line 500) | [HttpPost]
method UpdateOrganization (line 530) | private void UpdateOrganization(Organization organization, Organizatio...
method HandlePotentialProviderSeatScalingAsync (line 597) | private async Task HandlePotentialProviderSeatScalingAsync(
FILE: src/Admin/AdminConsole/Controllers/ProviderOrganizationsController.cs
class ProviderOrganizationsController (line 13) | [Authorize]
method ProviderOrganizationsController (line 22) | public ProviderOrganizationsController(IProviderRepository providerRep...
method DeleteAsync (line 33) | [HttpPost]
FILE: src/Admin/AdminConsole/Controllers/ProvidersController.cs
class ProvidersController (line 37) | [Authorize]
method ProvidersController (line 61) | public ProvidersController(IOrganizationRepository organizationReposit...
method Index (line 100) | [RequirePermission(Permission.Provider_List_View)]
method Create (line 127) | public IActionResult Create()
method CreateMsp (line 132) | [HttpGet("providers/create/msp")]
method CreateReseller (line 143) | [HttpGet("providers/create/reseller")]
method CreateBusinessUnit (line 149) | [HttpGet("providers/create/business-unit")]
method Create (line 159) | [HttpPost]
method CreateMsp (line 178) | [HttpPost("providers/create/msp")]
method CreateReseller (line 199) | [HttpPost("providers/create/reseller")]
method CreateBusinessUnit (line 214) | [HttpPost("providers/create/business-unit")]
method View (line 234) | [RequirePermission(Permission.Provider_View)]
method Edit (line 249) | [SelfHosted(NotSelfHostedOnly = true)]
method Cancel (line 261) | [SelfHosted(NotSelfHostedOnly = true)]
method Edit (line 273) | [HttpPost]
method GetEditModel (line 402) | private async Task<ProviderEditModel> GetEditModel(Guid id)
method ResendInvite (line 426) | [RequirePermission(Permission.Provider_ResendEmailInvite)]
method AddExistingOrganization (line 434) | [HttpGet]
method AddExistingOrganization (line 467) | [HttpPost]
method CreateOrganization (line 479) | [HttpGet]
method CreateOrganization (line 493) | [HttpPost]
method Delete (line 509) | [HttpPost]
method DeleteInitiation (line 548) | [HttpPost]
method GetGatewayCustomerUrl (line 575) | private string GetGatewayCustomerUrl(Provider provider)
method GetGatewaySubscriptionUrl (line 590) | private string GetGatewaySubscriptionUrl(Provider provider)
FILE: src/Admin/AdminConsole/Models/CreateBusinessUnitProviderModel.cs
class CreateBusinessUnitProviderModel (line 12) | public class CreateBusinessUnitProviderModel : IValidatableObject
method ToProvider (line 24) | public virtual Provider ToProvider()
method Validate (line 32) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/AdminConsole/Models/CreateMspProviderModel.cs
class CreateMspProviderModel (line 11) | public class CreateMspProviderModel : IValidatableObject
method ToProvider (line 25) | public virtual Provider ToProvider()
method Validate (line 34) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/AdminConsole/Models/CreateProviderModel.cs
class CreateProviderModel (line 5) | public class CreateProviderModel
FILE: src/Admin/AdminConsole/Models/CreateResellerProviderModel.cs
class CreateResellerProviderModel (line 11) | public class CreateResellerProviderModel : IValidatableObject
method ToProvider (line 22) | public virtual Provider ToProvider()
method Validate (line 33) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/AdminConsole/Models/OrganizationEditModel.cs
class OrganizationEditModel (line 22) | public class OrganizationEditModel : OrganizationViewModel, IValidatable...
method OrganizationEditModel (line 26) | public OrganizationEditModel() { }
method OrganizationEditModel (line 28) | public OrganizationEditModel(Provider provider, List<Plan> plans)
method OrganizationEditModel (line 38) | public OrganizationEditModel(
method GetPlansHelper (line 213) | public object GetPlansHelper() =>
method CreateOrganization (line 296) | public Organization CreateOrganization(Provider provider)
method ToOrganization (line 302) | public Organization ToOrganization(Organization existingOrganization)
method Validate (line 346) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/AdminConsole/Models/OrganizationInitiateDeleteModel.cs
class OrganizationInitiateDeleteModel (line 8) | public class OrganizationInitiateDeleteModel
FILE: src/Admin/AdminConsole/Models/OrganizationSelectableViewModel.cs
class OrganizationSelectableViewModel (line 5) | public class OrganizationSelectableViewModel : Organization
FILE: src/Admin/AdminConsole/Models/OrganizationUnassignedToProviderSearchViewModel.cs
class OrganizationUnassignedToProviderSearchViewModel (line 9) | public class OrganizationUnassignedToProviderSearchViewModel : PagedMode...
FILE: src/Admin/AdminConsole/Models/OrganizationViewModel.cs
class OrganizationViewModel (line 13) | public class OrganizationViewModel
method OrganizationViewModel (line 15) | public OrganizationViewModel()
method OrganizationViewModel (line 19) | public OrganizationViewModel(Organization org, Provider provider, IEnu...
FILE: src/Admin/AdminConsole/Models/OrganizationsModel.cs
class OrganizationsModel (line 9) | public class OrganizationsModel : PagedModel<Organization>
method StorageGB (line 17) | public double StorageGB(Organization org) => org.Storage.HasValue ? Ma...
FILE: src/Admin/AdminConsole/Models/ProviderEditModel.cs
class ProviderEditModel (line 16) | public class ProviderEditModel : ProviderViewModel, IValidatableObject
method ProviderEditModel (line 18) | public ProviderEditModel() { }
method ProviderEditModel (line 20) | public ProviderEditModel(
method ToProvider (line 86) | public virtual Provider ToProvider(Provider existingProvider)
method GetSeatMinimum (line 101) | private static int GetSeatMinimum(IEnumerable<ProviderPlan> providerPl...
method Validate (line 104) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/AdminConsole/Models/ProviderViewModel.cs
class ProviderViewModel (line 13) | public class ProviderViewModel
method ProviderViewModel (line 15) | public ProviderViewModel() { }
method ProviderViewModel (line 17) | public ProviderViewModel(
FILE: src/Admin/AdminConsole/Models/ProvidersModel.cs
class ProvidersModel (line 9) | public class ProvidersModel : PagedModel<Provider>
FILE: src/Admin/AdminSettings.cs
class AdminSettings (line 6) | public class AdminSettings
FILE: src/Admin/Auth/Controllers/LoginController.cs
class LoginController (line 11) | public class LoginController : Controller
method LoginController (line 15) | public LoginController(
method Index (line 21) | public IActionResult Index(string returnUrl = null, int? error = null,...
method Index (line 37) | [HttpPost]
method Confirm (line 53) | public async Task<IActionResult> Confirm(string email, string token, s...
method Logout (line 72) | [HttpPost]
method GetMessage (line 83) | private string GetMessage(int? messageCode)
FILE: src/Admin/Auth/IdentityServer/PasswordlessSignInManager.cs
class PasswordlessSignInManager (line 8) | public class PasswordlessSignInManager<TUser> : SignInManager<TUser> whe...
method PasswordlessSignInManager (line 14) | public PasswordlessSignInManager(UserManager<TUser> userManager,
method PasswordlessSignInAsync (line 27) | public async Task<SignInResult> PasswordlessSignInAsync(string email, ...
method PasswordlessSignInAsync (line 41) | public async Task<SignInResult> PasswordlessSignInAsync(TUser user, st...
method PasswordlessSignInAsync (line 53) | public async Task<SignInResult> PasswordlessSignInAsync(string email, ...
method CheckPasswordlessSignInAsync (line 64) | public virtual async Task<SignInResult> CheckPasswordlessSignInAsync(T...
FILE: src/Admin/Auth/Jobs/DatabaseExpiredGrantsJob.cs
class DatabaseExpiredGrantsJob (line 8) | public class DatabaseExpiredGrantsJob : BaseJob
method DatabaseExpiredGrantsJob (line 12) | public DatabaseExpiredGrantsJob(
method ExecuteJobAsync (line 20) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Auth/Jobs/DeleteAuthRequestsJob.cs
class DeleteAuthRequestsJob (line 9) | public class DeleteAuthRequestsJob : BaseJob
method DeleteAuthRequestsJob (line 14) | public DeleteAuthRequestsJob(
method ExecuteJobAsync (line 24) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Auth/Models/LoginModel.cs
class LoginModel (line 8) | public class LoginModel
FILE: src/Admin/Billing/Controllers/BusinessUnitConversionController.cs
class BusinessUnitConversionController (line 18) | [Authorize]
method IndexAsync (line 26) | [HttpGet]
method InitiateAsync (line 65) | [HttpPost]
method ResetAsync (line 92) | [HttpPost("reset")]
method ResendInviteAsync (line 113) | [HttpPost("resend-invite")]
method GetInvitedProviderAdminAsync (line 134) | private async Task<ProviderUser?> GetInvitedProviderAdminAsync(
method PersistSuccessMessage (line 169) | private void PersistSuccessMessage(string message) => TempData[_succes...
method PersistErrorMessages (line 170) | private void PersistErrorMessages(List<string> errors)
method ReadSuccessMessage (line 175) | private string? ReadSuccessMessage() => ReadTempData<string>(_success);
method ReadErrorMessages (line 176) | private List<string>? ReadErrorMessages()
method ReadTempData (line 182) | private T? ReadTempData<T>(string key) => TempData.TryGetValue(key, ou...
FILE: src/Admin/Billing/Controllers/ProcessStripeEventsController.cs
class ProcessStripeEventsController (line 13) | [Authorize]
method Index (line 20) | [HttpGet]
method ProcessAsync (line 26) | [HttpPost]
method PostAsync (line 51) | private async Task<(EventsResponseBody, HttpResponseMessage)> PostAsync(
FILE: src/Admin/Billing/Controllers/SubscriptionDiscountsController.cs
class SubscriptionDiscountsController (line 14) | [Authorize]
method Index (line 24) | [HttpGet]
method Create (line 67) | [HttpGet("create")]
method ImportCoupon (line 74) | [HttpPost("import-coupon")]
method Create (line 151) | [HttpPost("create")]
method Edit (line 209) | [HttpGet("{id}")]
method Edit (line 241) | [HttpPost("{id}")]
method Delete (line 277) | [HttpPost("{id}/delete")]
method PersistSuccessMessage (line 303) | private void PersistSuccessMessage(string message) => TempData[Success...
method PersistErrorMessage (line 304) | private void PersistErrorMessage(string message) => TempData[ErrorKey]...
FILE: src/Admin/Billing/Models/BusinessUnitConversionModel.cs
class BusinessUnitConversionModel (line 8) | public class BusinessUnitConversionModel
FILE: src/Admin/Billing/Models/ProcessStripeEvents/EventsFormModel.cs
class EventsFormModel (line 9) | public class EventsFormModel : IValidatableObject
method GetEventIds (line 18) | public List<string> GetEventIds() =>
method Validate (line 23) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/Billing/Models/ProcessStripeEvents/EventsRequestBody.cs
class EventsRequestBody (line 8) | public class EventsRequestBody
FILE: src/Admin/Billing/Models/ProcessStripeEvents/EventsResponseBody.cs
class EventsResponseBody (line 8) | public class EventsResponseBody
class EventResponseBody (line 17) | public class EventResponseBody
type EventActionType (line 38) | public enum EventActionType
FILE: src/Admin/Billing/Models/ProviderPlanViewModel.cs
class ProviderPlanViewModel (line 5) | public class ProviderPlanViewModel
method ProviderPlanViewModel (line 13) | public ProviderPlanViewModel(
FILE: src/Admin/Billing/Models/SubscriptionDiscount/CreateSubscriptionDiscountModel.cs
class CreateSubscriptionDiscountModel (line 6) | public class CreateSubscriptionDiscountModel : IValidatableObject
method Validate (line 38) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/Billing/Models/SubscriptionDiscount/EditSubscriptionDiscountModel.cs
class EditSubscriptionDiscountModel (line 7) | public class EditSubscriptionDiscountModel : IValidatableObject
method EditSubscriptionDiscountModel (line 36) | public EditSubscriptionDiscountModel() { }
method EditSubscriptionDiscountModel (line 38) | public EditSubscriptionDiscountModel(SubscriptionDiscount discount)
method Validate (line 54) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/Billing/Models/SubscriptionDiscount/SubscriptionDiscountPagedModel.cs
class SubscriptionDiscountPagedModel (line 5) | public class SubscriptionDiscountPagedModel : PagedModel<SubscriptionDis...
FILE: src/Admin/Billing/Models/SubscriptionDiscount/SubscriptionDiscountViewModel.cs
class SubscriptionDiscountViewModel (line 5) | public class SubscriptionDiscountViewModel
FILE: src/Admin/Controllers/ErrorController.cs
class ErrorController (line 6) | public class ErrorController : Controller
method Error (line 8) | [Route("/error")]
FILE: src/Admin/Controllers/HomeController.cs
class HomeController (line 14) | public class HomeController : Controller
method HomeController (line 20) | public HomeController(GlobalSettings globalSettings, ILogger<HomeContr...
method Index (line 26) | [Authorize]
method Error (line 36) | public IActionResult Error()
method GetLatestVersion (line 45) | public async Task<IActionResult> GetLatestVersion(ProjectType project,...
method GetInstalledWebVersion (line 71) | public async Task<IActionResult> GetInstalledWebVersion(CancellationTo...
class LatestVersions (line 93) | private class LatestVersions
class Versions (line 99) | private class Versions
type ProjectType (line 112) | public enum ProjectType
FILE: src/Admin/Controllers/InfoController.cs
class InfoController (line 6) | public class InfoController : Controller
method GetAlive (line 8) | [HttpGet("~/alive")]
method GetVersion (line 15) | [HttpGet("~/version")]
FILE: src/Admin/Controllers/ToolsController.cs
class ToolsController (line 23) | [Authorize]
method ToolsController (line 38) | public ToolsController(
method ChargeBraintree (line 62) | [RequirePermission(Permission.Tools_ChargeBrainTreeCustomer)]
method ChargeBraintree (line 68) | [HttpPost]
method CreateTransaction (line 123) | [RequirePermission(Permission.Tools_CreateEditTransaction)]
method CreateTransaction (line 133) | [HttpPost]
method EditTransaction (line 154) | [RequirePermission(Permission.Tools_CreateEditTransaction)]
method EditTransaction (line 165) | [HttpPost]
method PromoteAdmin (line 185) | [RequirePermission(Permission.Tools_PromoteAdmin)]
method PromoteAdmin (line 191) | [HttpPost]
method PromoteProviderServiceUser (line 223) | [RequirePermission(Permission.Tools_PromoteProviderServiceUser)]
method PromoteProviderServiceUser (line 229) | [HttpPost]
method GenerateLicense (line 261) | [RequirePermission(Permission.Tools_GenerateLicenseFile)]
method GenerateLicense (line 267) | [HttpPost]
FILE: src/Admin/Controllers/UsersController.cs
class UsersController (line 19) | [Authorize]
method UsersController (line 31) | public UsersController(
method Index (line 51) | [RequirePermission(Permission.User_List_View)]
method View (line 80) | public async Task<IActionResult> View(Guid id)
method Edit (line 96) | [SelfHosted(NotSelfHostedOnly = true)]
method Edit (line 115) | [HttpPost]
method Delete (line 153) | [HttpPost]
method ToggleNewDeviceVerification (line 167) | [HttpPost]
FILE: src/Admin/Enums/HtmlHelperExtensions.cs
class HtmlHelper (line 7) | public static class HtmlHelper
method GetEnumSelectList (line 9) | public static IEnumerable<SelectListItem> GetEnumSelectList<T>(this IH...
FILE: src/Admin/Enums/Permissions.cs
type Permission (line 3) | public enum Permission
FILE: src/Admin/HostedServices/AzureQueueMailHostedService.cs
class AzureQueueMailHostedService (line 14) | public class AzureQueueMailHostedService : IHostedService
method AzureQueueMailHostedService (line 24) | public AzureQueueMailHostedService(
method StartAsync (line 34) | public Task StartAsync(CancellationToken cancellationToken)
method StopAsync (line 41) | public async Task StopAsync(CancellationToken cancellationToken)
method ExecuteAsync (line 52) | private async Task ExecuteAsync(CancellationToken cancellationToken)
method RetrieveMessagesAsync (line 100) | private async Task<QueueMessage[]> RetrieveMessagesAsync()
FILE: src/Admin/HostedServices/DatabaseMigrationHostedService.cs
class DatabaseMigrationHostedService (line 6) | public class DatabaseMigrationHostedService : IHostedService, IDisposable
method DatabaseMigrationHostedService (line 11) | public DatabaseMigrationHostedService(
method StartAsync (line 19) | public virtual async Task StartAsync(CancellationToken cancellationToken)
method StopAsync (line 50) | public virtual Task StopAsync(CancellationToken cancellationToken)
method Dispose (line 55) | public virtual void Dispose()
FILE: src/Admin/IdentityServer/CustomClaimsPrincipalFactory.cs
class CustomClaimsPrincipalFactory (line 7) | public class CustomClaimsPrincipalFactory : UserClaimsPrincipalFactory<I...
method CustomClaimsPrincipalFactory (line 12) | public CustomClaimsPrincipalFactory(
method CreateAsync (line 23) | public async override Task<ClaimsPrincipal> CreateAsync(IdentityUser u...
FILE: src/Admin/IdentityServer/ReadOnlyEnvIdentityUserStore.cs
class ReadOnlyEnvIdentityUserStore (line 9) | public class ReadOnlyEnvIdentityUserStore : ReadOnlyIdentityUserStore
method ReadOnlyEnvIdentityUserStore (line 13) | public ReadOnlyEnvIdentityUserStore(IConfiguration configuration)
method FindByEmailAsync (line 18) | public override Task<IdentityUser> FindByEmailAsync(string normalizedE...
method FindByIdAsync (line 63) | public override Task<IdentityUser> FindByIdAsync(string userId,
FILE: src/Admin/IdentityServer/ReadOnlyIdentityUserStore.cs
class ReadOnlyIdentityUserStore (line 8) | public abstract class ReadOnlyIdentityUserStore :
method Dispose (line 12) | public void Dispose() { }
method CreateAsync (line 14) | public Task<IdentityResult> CreateAsync(IdentityUser user,
method DeleteAsync (line 20) | public Task<IdentityResult> DeleteAsync(IdentityUser user,
method FindByEmailAsync (line 26) | public abstract Task<IdentityUser> FindByEmailAsync(string normalizedE...
method FindByIdAsync (line 29) | public abstract Task<IdentityUser> FindByIdAsync(string userId,
method FindByNameAsync (line 32) | public async Task<IdentityUser> FindByNameAsync(string normalizedUserN...
method GetEmailAsync (line 38) | public Task<string> GetEmailAsync(IdentityUser user,
method GetEmailConfirmedAsync (line 44) | public Task<bool> GetEmailConfirmedAsync(IdentityUser user,
method GetNormalizedEmailAsync (line 50) | public Task<string> GetNormalizedEmailAsync(IdentityUser user,
method GetNormalizedUserNameAsync (line 56) | public Task<string> GetNormalizedUserNameAsync(IdentityUser user,
method GetUserIdAsync (line 62) | public Task<string> GetUserIdAsync(IdentityUser user,
method GetUserNameAsync (line 68) | public Task<string> GetUserNameAsync(IdentityUser user,
method SetEmailAsync (line 74) | public Task SetEmailAsync(IdentityUser user, string email,
method SetEmailConfirmedAsync (line 80) | public Task SetEmailConfirmedAsync(IdentityUser user, bool confirmed,
method SetNormalizedEmailAsync (line 86) | public Task SetNormalizedEmailAsync(IdentityUser user, string normaliz...
method SetNormalizedUserNameAsync (line 93) | public Task SetNormalizedUserNameAsync(IdentityUser user, string norma...
method SetUserNameAsync (line 100) | public Task SetUserNameAsync(IdentityUser user, string userName,
method UpdateAsync (line 106) | public Task<IdentityResult> UpdateAsync(IdentityUser user,
method SetSecurityStampAsync (line 112) | public Task SetSecurityStampAsync(IdentityUser user, string stamp, Can...
method GetSecurityStampAsync (line 117) | public Task<string> GetSecurityStampAsync(IdentityUser user, Cancellat...
FILE: src/Admin/IdentityServer/ServiceCollectionExtensions.cs
class ServiceCollectionExtensions (line 10) | public static class ServiceCollectionExtensions
method AddPasswordlessIdentityServices (line 12) | public static Tuple<IdentityBuilder, IdentityBuilder> AddPasswordlessI...
FILE: src/Admin/Jobs/AliveJob.cs
class AliveJob (line 8) | public class AliveJob : BaseJob
method AliveJob (line 13) | public AliveJob(
method ExecuteJobAsync (line 21) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Jobs/DatabaseExpiredSponsorshipsJob.cs
class DatabaseExpiredSponsorshipsJob (line 9) | public class DatabaseExpiredSponsorshipsJob : BaseJob
method DatabaseExpiredSponsorshipsJob (line 14) | public DatabaseExpiredSponsorshipsJob(
method ExecuteJobAsync (line 24) | protected override async Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Jobs/DatabaseRebuildlIndexesJob.cs
class DatabaseRebuildlIndexesJob (line 8) | public class DatabaseRebuildlIndexesJob : BaseJob
method DatabaseRebuildlIndexesJob (line 12) | public DatabaseRebuildlIndexesJob(
method ExecuteJobAsync (line 20) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Jobs/DatabaseUpdateStatisticsJob.cs
class DatabaseUpdateStatisticsJob (line 8) | public class DatabaseUpdateStatisticsJob : BaseJob
method DatabaseUpdateStatisticsJob (line 12) | public DatabaseUpdateStatisticsJob(
method ExecuteJobAsync (line 20) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Jobs/DeleteCiphersJob.cs
class DeleteCiphersJob (line 12) | public class DeleteCiphersJob : BaseJob
method DeleteCiphersJob (line 17) | public DeleteCiphersJob(
method ExecuteJobAsync (line 27) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Jobs/DeleteUnverifiedOrganizationDomainsJob.cs
class DeleteUnverifiedOrganizationDomainsJob (line 8) | public class DeleteUnverifiedOrganizationDomainsJob : BaseJob
method DeleteUnverifiedOrganizationDomainsJob (line 12) | public DeleteUnverifiedOrganizationDomainsJob(
method ExecuteJobAsync (line 20) | protected override async Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Jobs/JobsHostedService.cs
class JobsHostedService (line 10) | public class JobsHostedService : BaseJobsHostedService
method JobsHostedService (line 12) | public JobsHostedService(
method StartAsync (line 19) | public override async Task StartAsync(CancellationToken cancellationTo...
method AddJobsServices (line 100) | public static void AddJobsServices(IServiceCollection services, bool s...
FILE: src/Admin/Models/BillingInformationModel.cs
class BillingInformationModel (line 8) | public class BillingInformationModel
FILE: src/Admin/Models/ChargeBraintreeModel.cs
class ChargeBraintreeModel (line 8) | public class ChargeBraintreeModel : IValidatableObject
method Validate (line 19) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/Models/CreateUpdateTransactionModel.cs
class CreateUpdateTransactionModel (line 10) | public class CreateUpdateTransactionModel : IValidatableObject
method CreateUpdateTransactionModel (line 12) | public CreateUpdateTransactionModel() { }
method CreateUpdateTransactionModel (line 14) | public CreateUpdateTransactionModel(Transaction transaction)
method Validate (line 54) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
method ToTransaction (line 62) | public Transaction ToTransaction(Guid? id = null)
FILE: src/Admin/Models/CursorPagedModel.cs
class CursorPagedModel (line 6) | public class CursorPagedModel<T>
FILE: src/Admin/Models/ErrorViewModel.cs
class ErrorViewModel (line 6) | public class ErrorViewModel
FILE: src/Admin/Models/HomeModel.cs
class HomeModel (line 8) | public class HomeModel
FILE: src/Admin/Models/LicenseModel.cs
class LicenseModel (line 5) | public class LicenseModel : IValidatableObject
method Validate (line 17) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Admin/Models/PagedModel.cs
class PagedModel (line 6) | public abstract class PagedModel<T>
FILE: src/Admin/Models/PromoteAdminModel.cs
class PromoteAdminModel (line 5) | public class PromoteAdminModel
FILE: src/Admin/Models/PromoteProviderServiceUserModel.cs
class PromoteProviderServiceUserModel (line 5) | public class PromoteProviderServiceUserModel
FILE: src/Admin/Models/UserEditModel.cs
class UserEditModel (line 13) | public class UserEditModel
method UserEditModel (line 15) | public UserEditModel() { }
method UserEditModel (line 17) | public UserEditModel(
FILE: src/Admin/Models/UserViewModel.cs
class UserViewModel (line 10) | public class UserViewModel
method UserViewModel (line 34) | public UserViewModel(Guid id,
method MapViewModels (line 79) | public static IEnumerable<UserViewModel> MapViewModels(
method MapViewModel (line 84) | public static UserViewModel MapViewModel(User user,
method MapViewModel (line 109) | public static UserViewModel MapViewModel(User user, bool isTwoFactorEn...
method MapViewModel (line 112) | public static UserViewModel MapViewModel(User user, bool isTwoFactorEn...
method IsTwoFactorEnabled (line 136) | public static bool IsTwoFactorEnabled(User user,
FILE: src/Admin/Models/UsersModel.cs
class UsersModel (line 6) | public class UsersModel : PagedModel<UserViewModel>
FILE: src/Admin/Program.cs
class Program (line 5) | public class Program
method Main (line 7) | public static void Main(string[] args)
FILE: src/Admin/Services/AccessControlService.cs
class AccessControlService (line 11) | public class AccessControlService : IAccessControlService
method AccessControlService (line 17) | public AccessControlService(
method UserHasPermission (line 27) | public bool UserHasPermission(Permission permission)
method GetUserRole (line 43) | public string GetUserRole(string userEmail)
method GetUserRoleFromClaim (line 64) | private string GetUserRoleFromClaim()
FILE: src/Admin/Services/IAccessControlService.cs
type IAccessControlService (line 5) | public interface IAccessControlService
method UserHasPermission (line 7) | public bool UserHasPermission(Permission permission);
method GetUserRole (line 8) | public string GetUserRole(string userEmail);
FILE: src/Admin/Startup.cs
class Startup (line 21) | public class Startup
method Startup (line 23) | public Startup(IWebHostEnvironment env, IConfiguration configuration)
method ConfigureServices (line 33) | public void ConfigureServices(IServiceCollection services)
method Configure (line 133) | public void Configure(
FILE: src/Admin/TagHelpers/ActivePageTagHelper.cs
class ActivePageTagHelper (line 11) | [HtmlTargetElement("li", Attributes = ActiveControllerName)]
method ActivePageTagHelper (line 20) | public ActivePageTagHelper(IHtmlGenerator generator)
method Process (line 33) | public override void Process(TagHelperContext context, TagHelperOutput...
method ActiveMatch (line 71) | private bool ActiveMatch(string route, string descriptor)
FILE: src/Admin/TagHelpers/OptionSelectedTagHelper.cs
class OptionSelectedTagHelper (line 6) | [HtmlTargetElement("option", Attributes = SelectedName)]
method OptionSelectedTagHelper (line 13) | public OptionSelectedTagHelper(IHtmlGenerator generator)
method Process (line 21) | public override void Process(TagHelperContext context, TagHelperOutput...
FILE: src/Admin/Tools/Jobs/DeleteSendsJob.cs
class DeleteSendsJob (line 10) | public class DeleteSendsJob : BaseJob
method DeleteSendsJob (line 15) | public DeleteSendsJob(
method ExecuteJobAsync (line 25) | protected async override Task ExecuteJobAsync(IJobExecutionContext con...
FILE: src/Admin/Utilities/RequirePermissionAttribute.cs
class RequirePermissionAttribute (line 7) | public class RequirePermissionAttribute : ActionFilterAttribute
method RequirePermissionAttribute (line 11) | public RequirePermissionAttribute(Permission permission)
method OnActionExecuting (line 16) | public override void OnActionExecuting(ActionExecutingContext context)
FILE: src/Admin/Utilities/RolePermissionMapping.cs
class RolePermissionMapping (line 5) | public static class RolePermissionMapping
FILE: src/Admin/Utilities/WebHostEnvironmentExtensions.cs
class WebHostEnvironmentExtensions (line 3) | public static class WebHostEnvironmentExtensions
method GetStripeUrl (line 5) | public static string GetStripeUrl(this IWebHostEnvironment hostingEnvi...
method GetBraintreeMerchantUrl (line 15) | public static string GetBraintreeMerchantUrl(this IWebHostEnvironment ...
FILE: src/Api/AdminConsole/Authorization/AuthorizationHandlerCollectionExtensions.cs
class AuthorizationHandlerCollectionExtensions (line 8) | public static class AuthorizationHandlerCollectionExtensions
method AddAdminConsoleAuthorizationHandlers (line 10) | public static void AddAdminConsoleAuthorizationHandlers(this IServiceC...
FILE: src/Api/AdminConsole/Authorization/AuthorizeAttribute.cs
class AuthorizeAttribute (line 12) | public class AuthorizeAttribute<T>
method GetRequirements (line 16) | public IEnumerable<IAuthorizationRequirement> GetRequirements()
FILE: src/Api/AdminConsole/Authorization/HttpContextExtensions.cs
class HttpContextExtensions (line 7) | public static class HttpContextExtensions
method WithFeaturesCacheAsync (line 17) | public static async Task<T> WithFeaturesCacheAsync<T>(this HttpContext...
method IsProviderUserForOrgAsync (line 37) | public static async Task<bool> IsProviderUserForOrgAsync(
method GetProviderUserOrganizationsAsync (line 53) | private static async Task<IEnumerable<ProviderUserOrganizationDetails>...
method GetOrganizationId (line 67) | public static Guid GetOrganizationId(this HttpContext httpContext)
FILE: src/Api/AdminConsole/Authorization/IOrganizationRequirement.cs
type IOrganizationRequirement (line 14) | public interface IOrganizationRequirement : IAuthorizationRequirement
method AuthorizeAsync (line 28) | public Task<bool> AuthorizeAsync(
FILE: src/Api/AdminConsole/Authorization/OrganizationClaimsExtensions.cs
class OrganizationClaimsExtensions (line 9) | public static class OrganizationClaimsExtensions
method GetCurrentContextOrganization (line 20) | public static CurrentContextOrganization? GetCurrentContextOrganizatio...
method GetClaimsParser (line 46) | private static Func<string, bool> GetClaimsParser(ClaimsPrincipal user...
method ParseGuids (line 65) | private static IEnumerable<Guid> ParseGuids(this IEnumerable<Claim> cl...
method GetRoleFromClaims (line 76) | private static OrganizationUserType? GetRoleFromClaims(Func<string, bo...
method GetPermissionsFromClaims (line 101) | private static Permissions GetPermissionsFromClaims(Func<string, bool>...
FILE: src/Api/AdminConsole/Authorization/OrganizationContext.cs
type IOrganizationContext (line 19) | public interface IOrganizationContext
method GetOrganizationClaims (line 31) | public CurrentContextOrganization? GetOrganizationClaims(ClaimsPrincip...
method IsProviderUserForOrganization (line 43) | public Task<bool> IsProviderUserForOrganization(ClaimsPrincipal user, ...
class OrganizationContext (line 46) | public class OrganizationContext(
method GetOrganizationClaims (line 60) | public CurrentContextOrganization? GetOrganizationClaims(ClaimsPrincip...
method IsProviderUserForOrganization (line 65) | public async Task<bool> IsProviderUserForOrganization(ClaimsPrincipal ...
FILE: src/Api/AdminConsole/Authorization/OrganizationRequirementHandler.cs
class OrganizationRequirementHandler (line 14) | public class OrganizationRequirementHandler(
method HandleRequirementAsync (line 23) | protected override async Task HandleRequirementAsync(AuthorizationHand...
FILE: src/Api/AdminConsole/Authorization/RecoverAccountAuthorizationHandler.cs
class RecoverAccountAuthorizationHandler (line 26) | public class RecoverAccountAuthorizationHandler(
method HandleRequirementAsync (line 35) | protected override async Task HandleRequirementAsync(AuthorizationHand...
method AuthorizeProviderAsync (line 63) | private async Task<bool> AuthorizeProviderAsync(ClaimsPrincipal curren...
method AuthorizeMember (line 68) | private bool AuthorizeMember(ClaimsPrincipal currentUser, Organization...
method CanRecoverProviderAsync (line 89) | private async Task<bool> CanRecoverProviderAsync(OrganizationUser targ...
FILE: src/Api/AdminConsole/Authorization/Requirements/BasePermissionRequirement.cs
class BasePermissionRequirement (line 13) | public abstract class BasePermissionRequirement(Func<Permissions, bool> ...
method AuthorizeAsync (line 15) | public async Task<bool> AuthorizeAsync(CurrentContextOrganization? org...
FILE: src/Api/AdminConsole/Authorization/Requirements/ManageGroupsOrUsersRequirement.cs
class ManageGroupsOrUsersRequirement (line 6) | public class ManageGroupsOrUsersRequirement : IOrganizationRequirement
method AuthorizeAsync (line 8) | public async Task<bool> AuthorizeAsync(CurrentContextOrganization? org...
FILE: src/Api/AdminConsole/Authorization/Requirements/MemberOrProviderRequirement.cs
class MemberOrProviderRequirement (line 10) | public class MemberOrProviderRequirement : IOrganizationRequirement
method AuthorizeAsync (line 12) | public async Task<bool> AuthorizeAsync(
FILE: src/Api/AdminConsole/Authorization/Requirements/MemberRequirement.cs
class MemberRequirement (line 8) | public class MemberRequirement : IOrganizationRequirement
method AuthorizeAsync (line 10) | public Task<bool> AuthorizeAsync(
FILE: src/Api/AdminConsole/Controllers/BaseAdminConsoleController.cs
class BaseAdminConsoleController (line 8) | public abstract class BaseAdminConsoleController : Controller
method Handle (line 10) | protected static IResult Handle(CommandResult commandResult) =>
FILE: src/Api/AdminConsole/Controllers/GroupsController.cs
class GroupsController (line 22) | [Route("organizations/{orgId}/groups")]
method GroupsController (line 40) | public GroupsController(
method Get (line 70) | [HttpGet("{id}")]
method GetDetails (line 82) | [HttpGet("{id}/details")]
method GetOrganizationGroups (line 94) | [HttpGet("")]
method GetOrganizationGroupDetails (line 108) | [HttpGet("details")]
method GetUsers (line 123) | [HttpGet("{id}/users")]
method Post (line 137) | [HttpPost("")]
method Put (line 165) | [HttpPut("{id}")]
method PostPut (line 239) | [HttpPost("{id}")]
method Delete (line 246) | [HttpDelete("{id}")]
method PostDelete (line 258) | [HttpPost("{id}/delete")]
method BulkDelete (line 265) | [HttpDelete("")]
method PostBulkDelete (line 281) | [HttpPost("delete")]
method DeleteUser (line 288) | [HttpDelete("{id}/user/{orgUserId}")]
method PostDeleteUser (line 300) | [HttpPost("{id}/delete-user/{orgUserId}")]
FILE: src/Api/AdminConsole/Controllers/OrganizationAuthRequestsController.cs
class OrganizationAuthRequestsController (line 15) | [Route("organizations/{orgId}/auth-requests")]
method OrganizationAuthRequestsController (line 24) | public OrganizationAuthRequestsController(IAuthRequestRepository authR...
method GetPendingRequests (line 34) | [HttpGet("")]
method UpdateAuthRequest (line 46) | [HttpPost("{requestId}")]
method BulkDenyRequests (line 62) | [HttpPost("deny")]
method UpdateManyAuthRequests (line 76) | [HttpPost("")]
method ValidateAdminRequest (line 83) | [NonAction]
FILE: src/Api/AdminConsole/Controllers/OrganizationConnectionsController.cs
class OrganizationConnectionsController (line 21) | [Authorize("Application")]
method OrganizationConnectionsController (line 33) | public OrganizationConnectionsController(
method ConnectionsEnabled (line 51) | [HttpGet("enabled")]
method CreateConnection (line 57) | [HttpPost]
method UpdateConnection (line 81) | [HttpPut("{organizationConnectionId}")]
method GetConnection (line 116) | [HttpGet("{organizationId}/{type}")]
method DeleteConnection (line 142) | [HttpDelete("{organizationConnectionId}")]
method PostDeleteConnection (line 160) | [HttpPost("{organizationConnectionId}/delete")]
method GetConnectionsAsync (line 167) | private async Task<ICollection<OrganizationConnection>> GetConnections...
method HasConnectionTypeAsync (line 170) | private async Task<bool> HasConnectionTypeAsync(OrganizationConnection...
method HasPermissionAsync (line 178) | private async Task<bool> HasPermissionAsync(Guid? organizationId, Orga...
method ValidateBillingSyncConfig (line 191) | private async Task ValidateBillingSyncConfig(OrganizationConnectionReq...
method CreateOrUpdateOrganizationConnectionAsync (line 205) | private async Task<OrganizationConnectionResponseModel> CreateOrUpdate...
FILE: src/Api/AdminConsole/Controllers/OrganizationDomainController.cs
class OrganizationDomainController (line 15) | [Route("organizations")]
method OrganizationDomainController (line 28) | public OrganizationDomainController(
method GetAll (line 48) | [HttpGet("{orgId}/domain")]
method Get (line 59) | [HttpGet("{orgId}/domain/{id}")]
method Post (line 74) | [HttpPost("{orgId}/domain")]
method Verify (line 91) | [HttpPost("{orgId}/domain/{id}/verify")]
method RemoveDomain (line 107) | [HttpDelete("{orgId}/domain/{id}")]
method PostRemoveDomain (line 121) | [HttpPost("{orgId}/domain/{id}/remove")]
method GetOrgDomainSsoDetails (line 128) | [AllowAnonymous]
method GetVerifiedOrgDomainSsoDetailsAsync (line 142) | [AllowAnonymous]
method ValidateOrganizationAccessAsync (line 155) | private async Task ValidateOrganizationAccessAsync(Guid orgIdGuid)
FILE: src/Api/AdminConsole/Controllers/OrganizationUsersController.cs
class OrganizationUsersController (line 52) | [Route("organizations/{orgId}/users")]
method OrganizationUsersController (line 89) | public OrganizationUsersController(IOrganizationRepository organizatio...
method Get (line 156) | [HttpGet("{id}")]
method GetMiniDetails (line 187) | [HttpGet("mini-details")]
method GetAll (line 196) | [HttpGet("")]
method GetResultListResponseModel (line 219) | private ListResponseModel<OrganizationUserUserDetailsResponseModel> Ge...
method GetResetPasswordDetails (line 227) | [HttpGet("{id}/reset-password-details")]
method GetAccountRecoveryDetails (line 255) | [HttpPost("account-recovery-details")]
method Invite (line 263) | [HttpPost("invite")]
method BulkReinvite (line 285) | [HttpPost("reinvite")]
method Reinvite (line 298) | [HttpPost("{id}/reinvite")]
method AcceptInit (line 306) | [HttpPost("{organizationUserId}/accept-init")]
method Accept (line 340) | [HttpPost("{organizationUserId}/accept")]
method ShouldHandleResetPasswordAsync (line 372) | private async Task<bool> ShouldHandleResetPasswordAsync(Guid orgId)
method Confirm (line 388) | [HttpPost("{id}/confirm")]
method BulkConfirm (line 396) | [HttpPost("confirm")]
method UserPublicKeys (line 408) | [HttpPost("public-keys")]
method Put (line 417) | [HttpPut("{id}")]
method PostPut (line 493) | [HttpPost("{id}")]
method PutResetPasswordEnrollment (line 501) | [HttpPut("{userId}/reset-password-enrollment")]
method PutResetPassword (line 529) | [HttpPut("{id}/reset-password")]
method Remove (line 565) | [HttpDelete("{id}")]
method PostRemove (line 573) | [HttpPost("{id}/remove")]
method BulkRemove (line 581) | [HttpDelete("")]
method PostBulkRemove (line 591) | [HttpPost("remove")]
method DeleteAccount (line 599) | [HttpDelete("{id}/delete-account")]
method PostDeleteAccount (line 619) | [HttpPost("{id}/delete-account")]
method BulkDeleteAccount (line 627) | [HttpDelete("delete-account")]
method PostBulkDeleteAccount (line 647) | [HttpPost("delete-account")]
method RevokeAsync (line 655) | [HttpPut("{id}/revoke")]
method RevokeSelfAsync (line 662) | [HttpPut("revoke-self")]
method PatchRevokeAsync (line 676) | [HttpPatch("{id}/revoke")]
method BulkRevokeAsync (line 684) | [HttpPut("revoke")]
method PatchBulkRevokeAsync (line 708) | [HttpPatch("revoke")]
method RestoreAsync (line 716) | [HttpPut("{id}/restore")]
method RestoreAsync_vNext (line 725) | [HttpPut("{id}/restore/vnext")]
method PatchRestoreAsync (line 732) | [HttpPatch("{id}/restore")]
method BulkRestoreAsync (line 740) | [HttpPut("restore")]
method PatchBulkRestoreAsync (line 749) | [HttpPatch("restore")]
method BulkEnableSecretsManagerAsync (line 757) | [HttpPut("enable-secrets-manager")]
method PatchBulkEnableSecretsManagerAsync (line 789) | [HttpPatch("enable-secrets-manager")]
method AutomaticallyConfirmOrganizationUserAsync (line 798) | [HttpPost("{id}/auto-confirm")]
method RestoreOrRevokeUserAsync (line 823) | private async Task RestoreOrRevokeUserAsync(
method RestoreOrRevokeUsersAsync (line 838) | private async Task<ListResponseModel<OrganizationUserBulkResponseModel...
method GetClaimedByOrganizationStatusAsync (line 849) | private async Task<IDictionary<Guid, bool>> GetClaimedByOrganizationSt...
FILE: src/Api/AdminConsole/Controllers/OrganizationsController.cs
class OrganizationsController (line 45) | [Route("organizations")]
method OrganizationsController (line 74) | public OrganizationsController(
method Get (line 126) | [HttpGet("{id}")]
method GetUser (line 145) | [HttpGet("")]
method GetAutoEnrollStatus (line 159) | [HttpGet("{identifier}/auto-enroll-status")]
method Post (line 196) | [HttpPost("")]
method CreateWithoutPaymentAsync (line 212) | [HttpPost("create-without-payment")]
method Put (line 228) | [HttpPut("{organizationId:guid}")]
method PostPut (line 250) | [HttpPost("{id}")]
method PostStorage (line 257) | [HttpPost("{id}/storage")]
method Leave (line 271) | [HttpPost("{id}/leave")]
method Delete (line 295) | [HttpDelete("{id}")]
method PostDelete (line 338) | [HttpPost("{id}/delete")]
method PostDeleteRecoverToken (line 345) | [HttpPost("{id}/delete-recover-token")]
method ApiKey (line 375) | [HttpPost("{id}/api-key")]
method ApiKeyInformation (line 423) | [HttpGet("{id}/api-key-information/{type?}")]
method RotateApiKey (line 438) | [HttpPost("{id}/rotate-api-key")]
method HasApiKeyAccessAsync (line 477) | private async Task<bool> HasApiKeyAccessAsync(Guid orgId, Organization...
method GetPublicKey (line 486) | [HttpGet("{id}/public-key")]
method GetKeys (line 498) | [Obsolete("TDL-136 Renamed to public-key (2023.8), left for backwards ...
method PostKeys (line 505) | [HttpPost("{id}/keys")]
method GetSso (line 519) | [HttpGet("{id:guid}/sso")]
method PostSso (line 538) | [HttpPost("{id:guid}/sso")]
method PutCollectionManagement (line 562) | [HttpPut("{id}/collection-management")]
FILE: src/Api/AdminConsole/Controllers/PoliciesController.cs
class PoliciesController (line 27) | [Route("organizations/{orgId}/policies")]
method PoliciesController (line 42) | public PoliciesController(IPolicyRepository policyRepository,
method Get (line 65) | [HttpGet("{type}")]
method GetAll (line 82) | [HttpGet("")]
method GetByToken (line 96) | [AllowAnonymous]
method GetByInvitedUser (line 128) | [Obsolete("Deprecated API", false)]
method GetMasterPasswordPolicy (line 154) | [HttpGet("master-password")]
method Put (line 183) | [HttpPut("{type}")]
method PutVNext (line 190) | [HttpPut("{type}/vnext")]
FILE: src/Api/AdminConsole/Controllers/ProviderClientsController.cs
class ProviderClientsController (line 19) | [Route("providers/{providerId:guid}/clients")]
method CreateAsync (line 32) | [HttpPost]
method UpdateAsync (line 89) | [HttpPut("{providerOrganizationId:guid}")]
method GetAddableOrganizationsAsync (line 144) | [HttpGet("addable")]
method AddExistingOrganizationAsync (line 168) | [HttpPost("existing")]
FILE: src/Api/AdminConsole/Controllers/ProviderOrganizationsController.cs
class ProviderOrganizationsController (line 20) | [Route("providers/{providerId:guid}/organizations")]
method ProviderOrganizationsController (line 32) | public ProviderOrganizationsController(
method Get (line 50) | [HttpGet("")]
method Add (line 63) | [HttpPost("add")]
method Post (line 74) | [HttpPost("")]
method Delete (line 95) | [HttpDelete("{id:guid}")]
method PostDelete (line 115) | [HttpPost("{id:guid}/delete")]
FILE: src/Api/AdminConsole/Controllers/ProviderUsersController.cs
class ProviderUsersController (line 18) | [Route("providers/{providerId:guid}/users")]
method ProviderUsersController (line 27) | public ProviderUsersController(
method Get (line 39) | [HttpGet("{id:guid}")]
method GetAll (line 51) | [HttpGet("")]
method Invite (line 64) | [HttpPost("invite")]
method BulkReinvite (line 77) | [HttpPost("reinvite")]
method Reinvite (line 91) | [HttpPost("{id:guid}/reinvite")]
method Accept (line 104) | [HttpPost("{id:guid}/accept")]
method Confirm (line 116) | [HttpPost("{id:guid}/confirm")]
method BulkConfirm (line 128) | [HttpPost("confirm")]
method UserPublicKeys (line 144) | [HttpPost("public-keys")]
method Put (line 157) | [HttpPut("{id:guid}")]
method PostPut (line 175) | [HttpPost("{id:guid}")]
method Delete (line 182) | [HttpDelete("{id:guid}")]
method PostDelete (line 194) | [HttpPost("{id:guid}/delete")]
method BulkDelete (line 201) | [HttpDelete("")]
method PostBulkDelete (line 215) | [HttpPost("delete")]
FILE: src/Api/AdminConsole/Controllers/ProvidersController.cs
class ProvidersController (line 18) | [Route("providers")]
method ProvidersController (line 30) | public ProvidersController(IUserService userService, IProviderReposito...
method Get (line 43) | [HttpGet("{id:guid}")]
method Put (line 60) | [HttpPut("{id:guid}")]
method PostPut (line 98) | [HttpPost("{id:guid}")]
method Setup (line 105) | [HttpPost("{id:guid}/setup")]
method PostDeleteRecoverToken (line 131) | [HttpPost("{id}/delete-recover-token")]
method Delete (line 143) | [HttpDelete("{id}")]
method PostDelete (line 166) | [HttpPost("{id}/delete")]
FILE: src/Api/AdminConsole/Jobs/OrganizationSubscriptionUpdateJob.cs
class OrganizationSubscriptionUpdateJob (line 10) | public class OrganizationSubscriptionUpdateJob(ILogger<OrganizationSubsc...
method ExecuteJobAsync (line 15) | protected override async Task ExecuteJobAsync(IJobExecutionContext _)
FILE: src/Api/AdminConsole/Models/Request/AdminAuthRequestUpdateRequestModel.cs
class AdminAuthRequestUpdateRequestModel (line 9) | public class AdminAuthRequestUpdateRequestModel
FILE: src/Api/AdminConsole/Models/Request/BulkDenyAdminAuthRequestRequestModel.cs
class BulkDenyAdminAuthRequestRequestModel (line 6) | public class BulkDenyAdminAuthRequestRequestModel
FILE: src/Api/AdminConsole/Models/Request/GroupRequestModel.cs
class GroupRequestModel (line 10) | public class GroupRequestModel
method ToGroup (line 18) | public Group ToGroup(Guid orgId)
method ToGroup (line 26) | public Group ToGroup(Group existingGroup)
class GroupBulkRequestModel (line 33) | public class GroupBulkRequestModel
FILE: src/Api/AdminConsole/Models/Request/OrganizationAuthRequestUpdateManyRequestModel.cs
class OrganizationAuthRequestUpdateManyRequestModel (line 9) | public class OrganizationAuthRequestUpdateManyRequestModel
method ToOrganizationAuthRequestUpdate (line 18) | public OrganizationAuthRequestUpdate ToOrganizationAuthRequestUpdate()
FILE: src/Api/AdminConsole/Models/Request/OrganizationDomainRequestModel.cs
class OrganizationDomainRequestModel (line 9) | public class OrganizationDomainRequestModel
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationApiKeyRequestModel.cs
class OrganizationApiKeyRequestModel (line 6) | public class OrganizationApiKeyRequestModel : SecretVerificationRequestM...
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationConnectionRequestModel.cs
class OrganizationConnectionRequestModel (line 13) | public class OrganizationConnectionRequestModel
method OrganizationConnectionRequestModel (line 20) | public OrganizationConnectionRequestModel() { }
method OrganizationConnectionRequestModel (line 28) | public OrganizationConnectionRequestModel(OrganizationConnectionReques...
method ToData (line 45) | public OrganizationConnectionData<T> ToData(Guid? id = null) =>
class OrganizationConnectionRequestModel (line 24) | public class OrganizationConnectionRequestModel<T> : OrganizationConnect...
method OrganizationConnectionRequestModel (line 20) | public OrganizationConnectionRequestModel() { }
method OrganizationConnectionRequestModel (line 28) | public OrganizationConnectionRequestModel(OrganizationConnectionReques...
method ToData (line 45) | public OrganizationConnectionData<T> ToData(Guid? id = null) =>
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationCreateRequestModel.cs
class OrganizationCreateRequestModel (line 15) | public class OrganizationCreateRequestModel : IValidatableObject
method ToOrganizationSignup (line 86) | public virtual OrganizationSignup ToOrganizationSignup(User user)
method Validate (line 126) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationDomainSsoDetailsRequestModel.cs
class OrganizationDomainSsoDetailsRequestModel (line 8) | public class OrganizationDomainSsoDetailsRequestModel
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationKeysRequestModel.cs
class OrganizationKeysRequestModel (line 9) | public class OrganizationKeysRequestModel
method ToPublicKeyEncryptionKeyPairData (line 16) | public PublicKeyEncryptionKeyPairData ToPublicKeyEncryptionKeyPairData()
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationNoPaymentCreateRequest.cs
class OrganizationNoPaymentCreateRequest (line 14) | public class OrganizationNoPaymentCreateRequest
method ToOrganizationSignup (line 81) | public virtual OrganizationSignup ToOrganizationSignup(User user)
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationSeatRequestModel.cs
class OrganizationSeatRequestModel (line 5) | public class OrganizationSeatRequestModel : IValidatableObject
method Validate (line 10) | public IEnumerable<ValidationResult> Validate(ValidationContext valida...
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationUpdateRequestModel.cs
class OrganizationUpdateRequestModel (line 8) | public class OrganizationUpdateRequestModel
method ToCommandRequest (line 20) | public OrganizationUpdateRequest ToCommandRequest(Guid organizationId)...
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationUpgradeRequestModel.cs
class OrganizationUpgradeRequestModel (line 10) | public class OrganizationUpgradeRequestModel
method ToOrganizationUpgrade (line 30) | public OrganizationUpgrade ToOrganizationUpgrade()
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationUserRequestModels.cs
class OrganizationUserInviteRequestModel (line 14) | public class OrganizationUserInviteRequestModel
method ToData (line 27) | public OrganizationUserInviteData ToData()
class OrganizationUserAcceptInitRequestModel (line 41) | public class OrganizationUserAcceptInitRequestModel
class OrganizationUserAcceptRequestModel (line 54) | public class OrganizationUserAcceptRequestModel
class OrganizationUserConfirmRequestModel (line 62) | public class OrganizationUserConfirmRequestModel
class OrganizationUserBulkConfirmRequestModelEntry (line 72) | public class OrganizationUserBulkConfirmRequestModelEntry
class OrganizationUserBulkConfirmRequestModel (line 80) | public class OrganizationUserBulkConfirmRequestModel
method ToDictionary (line 89) | public Dictionary<Guid, string> ToDictionary()
class OrganizationUserUpdateRequestModel (line 95) | public class OrganizationUserUpdateRequestModel
method ToOrganizationUser (line 105) | public OrganizationUser ToOrganizationUser(OrganizationUser existingUser)
class OrganizationUserResetPasswordEnrollmentRequestModel (line 114) | public class OrganizationUserResetPasswordEnrollmentRequestModel
class OrganizationUserBulkRequestModel (line 120) | public class OrganizationUserBulkRequestModel
class ResetPasswordWithOrgIdRequestModel (line 131) | public class ResetPasswordWithOrgIdRequestModel : OrganizationUserResetP...
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationUserRestoreRequest.cs
class OrganizationUserRestoreRequest (line 5) | public class OrganizationUserRestoreRequest
FILE: src/Api/AdminConsole/Models/Request/Organizations/OrganizationVerifyDeleteRecoverRequestModel.cs
class OrganizationVerifyDeleteRecoverRequestModel (line 8) | public class OrganizationVerifyDeleteRecoverRequestModel
FILE: src/Api/AdminConsole/Models/Request/PolicyRequestModel.cs
class PolicyRequestModel (line 10) | public class PolicyRequestModel
method ToPolicyUpdateAsync (line 16) | public async Task<PolicyUpdate> ToPolicyUpdateAsync(Guid organizationI...
FILE: src/Api/AdminConsole/Models/Request/Providers/ProviderOrganizationAddRequestModel.cs
class ProviderOrganizationAddRequestModel (line 8) | public class ProviderOrganizationAddRequestModel
FILE: src/Api/AdminConsole/Models/Request/Providers/ProviderOrganizationCreateRequestModel.cs
class ProviderOrganizationCreateRequestModel (line 10) | public class ProviderOrganizationCreateRequestModel
FILE: src/Api/AdminConsole/Models/Request/Providers/ProviderSetupRequestModel.cs
class ProviderSetupRequestModel (line 12) | public class ProviderSetupRequestModel
method ToProvider (line 34) | public virtual Provider ToProvider(Provider provider)
FILE: src/Api/AdminConsole/Models/Request/Providers/ProviderUpdateRequestModel.cs
class ProviderUpdateRequestModel (line 12) | public class ProviderUpdateRequestModel
method ToProvider (line 26) | public virtual Provider ToProvider(Provider existingProvider, GlobalSe...
FILE: src/Api/AdminConsole/Models/Request/Providers/ProviderUserRequestModels.cs
class ProviderUserInviteRequestModel (line 11) | public class ProviderUserInviteRequestModel
class ProviderUserAcceptRequestModel (line 20) | public class ProviderUserAcceptRequestModel
class ProviderUserConfirmRequestModel (line 26) | public class ProviderUserConfirmRequestModel
class ProviderUserBulkConfirmRequestModelEntry (line 32) | public class ProviderUserBulkConfirmRequestModelEntry
class ProviderUserBulkConfirmRequestModel (line 40) | public class ProviderUserBulkConfirmRequestModel
method ToDictionary (line 45) | public Dictionary<Guid, string> ToDictionary()
class ProviderUserUpdateRequestModel (line 51) | public class ProviderUserUpdateRequestModel
method ToProviderUser (line 56) | public ProviderUser ToProviderUser(ProviderUser existingUser)
class ProviderUserBulkRequestModel (line 63) | public class ProviderUserBulkRequestModel
FILE: src/Api/AdminConsole/Models/Request/Providers/ProviderVerifyDeleteRecoverRequestModel.cs
class ProviderVerifyDeleteRecoverRequestModel (line 8) | public class ProviderVerifyDeleteRecoverRequestModel
FILE: src/Api/AdminConsole/Models/Request/SavePolicyRequest.cs
class SavePolicyRequest (line 10) | public class SavePolicyRequest
method ToSavePolicyModelAsync (line 17) | public async Task<SavePolicyModel> ToSavePolicyModelAsync(Guid organiz...
FILE: src/Api/AdminConsole/Models/Response/BaseProfileOrganizationResponseModel.cs
class BaseProfileOrganizationResponseModel (line 21) | public abstract class BaseProfileOrganizationResponseModel : ResponseModel
method BaseProfileOrganizationResponseModel (line 23) | protected BaseProfileOrganizationResponseModel(
FILE: src/Api/AdminConsole/Models/Response/GroupResponseModel.cs
class GroupResponseModel (line 11) | public class GroupResponseModel : ResponseModel
method GroupResponseModel (line 13) | public GroupResponseModel(Group group, string obj = "group")
class GroupDetailsResponseModel (line 33) | public class GroupDetailsResponseModel : GroupResponseModel
method GroupDetailsResponseModel (line 35) | public GroupDetailsResponseModel(Group group, IEnumerable<CollectionAc...
FILE: src/Api/AdminConsole/Models/Response/Helpers/PolicyStatusResponses.cs
class PolicyStatusResponses (line 8) | public static class PolicyStatusResponses
method GetSingleOrgPolicyStatusResponseAsync (line 10) | public static async Task<PolicyStatusResponseModel> GetSingleOrgPolicy...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationApiKeyInformationResponseModel.cs
class OrganizationApiKeyInformation (line 7) | public class OrganizationApiKeyInformation : ResponseModel
method OrganizationApiKeyInformation (line 9) | public OrganizationApiKeyInformation(OrganizationApiKey key) : base("k...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationAutoEnrollStatusResponseModel.cs
class OrganizationAutoEnrollStatusResponseModel (line 5) | public class OrganizationAutoEnrollStatusResponseModel : ResponseModel
method OrganizationAutoEnrollStatusResponseModel (line 7) | public OrganizationAutoEnrollStatusResponseModel(Guid orgId, bool rese...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationConnectionResponseModel.cs
class OrganizationConnectionResponseModel (line 10) | public class OrganizationConnectionResponseModel
method OrganizationConnectionResponseModel (line 18) | public OrganizationConnectionResponseModel(OrganizationConnection conn...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationDomainResponseModel.cs
class OrganizationDomainResponseModel (line 6) | public class OrganizationDomainResponseModel : ResponseModel
method OrganizationDomainResponseModel (line 8) | public OrganizationDomainResponseModel(OrganizationDomain organization...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationDomainSsoDetailsResponseModel.cs
class OrganizationDomainSsoDetailsResponseModel (line 6) | public class OrganizationDomainSsoDetailsResponseModel : ResponseModel
method OrganizationDomainSsoDetailsResponseModel (line 8) | public OrganizationDomainSsoDetailsResponseModel(OrganizationDomainSso...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationKeysResponseModel.cs
class OrganizationKeysResponseModel (line 9) | public class OrganizationKeysResponseModel : ResponseModel
method OrganizationKeysResponseModel (line 11) | public OrganizationKeysResponseModel(Organization org) : base("organiz...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationPublicKeyResponseModel.cs
class OrganizationPublicKeyResponseModel (line 9) | public class OrganizationPublicKeyResponseModel : ResponseModel
method OrganizationPublicKeyResponseModel (line 11) | public OrganizationPublicKeyResponseModel(Organization org) : base("or...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationResponseModel.cs
class OrganizationResponseModel (line 20) | public class OrganizationResponseModel : ResponseModel
method OrganizationResponseModel (line 22) | public OrganizationResponseModel(
class OrganizationSubscriptionResponseModel (line 134) | public class OrganizationSubscriptionResponseModel : OrganizationRespons...
method OrganizationSubscriptionResponseModel (line 136) | public OrganizationSubscriptionResponseModel(
method OrganizationSubscriptionResponseModel (line 147) | public OrganizationSubscriptionResponseModel(
method OrganizationSubscriptionResponseModel (line 172) | public OrganizationSubscriptionResponseModel(Organization organization...
method OrganizationSubscriptionResponseModel (line 187) | public OrganizationSubscriptionResponseModel(Organization organization...
FILE: src/Api/AdminConsole/Models/Response/Organizations/OrganizationUserResponseModel.cs
class OrganizationUserResponseModel (line 15) | public class OrganizationUserResponseModel : ResponseModel
method OrganizationUserResponseModel (line 17) | public OrganizationUserResponseModel(OrganizationUser organizationUser...
method OrganizationUserResponseModel (line 35) | public OrganizationUserResponseModel(OrganizationUserUserDetails organ...
class OrganizationUserDetailsResponseModel (line 68) | public class OrganizationUserDetailsResponseModel : OrganizationUserResp...
method OrganizationUserDetailsResponseModel (line 70) | public OrganizationUserDetailsResponseModel(
method OrganizationUserDetailsResponseModel (line 82) | public OrganizationUserDetailsResponseModel(OrganizationUserUserDetail...
class OrganizationUserUserMiniDetailsResponseModel (line 108) | public class OrganizationUserUserMiniDetailsResponseModel : ResponseModel
me
Copy disabled (too large)
Download .json
Condensed preview — 6056 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,648K chars).
[
{
"path": ".checkmarx/config.yml",
"chars": 412,
"preview": "version: 1\n\n# Checkmarx configuration file\n#\n# https://checkmarx.com/resource/documents/en/34965-68549-configuring-proje"
},
{
"path": ".claude/CLAUDE.md",
"chars": 3049,
"preview": "# Bitwarden Server - Claude Code Configuration\n\n## Project Context Files\n\n**Read these files before reviewing to ensure "
},
{
"path": ".claude/commands/bump-rust-sdk.md",
"chars": 2501,
"preview": "---\ndescription: Bump sdk-internal Rust crate dependencies in util/RustSdk to align with a Bitwarden clients release\narg"
},
{
"path": ".claude/hooks/README.md",
"chars": 2300,
"preview": "# Claude Code Hooks\n\nAll hooks are Stop hooks — they fire when Claude finishes responding and check\nwhether documentatio"
},
{
"path": ".claude/hooks/rust-sdk-surface-check.sh",
"chars": 1675,
"preview": "#!/bin/bash\n# rust-sdk-surface-check.sh\n# Stop hook: reminds developers to update the RustSdk API surface reference\n# wh"
},
{
"path": ".claude/hooks/seeder-docs-check.sh",
"chars": 2147,
"preview": "#!/bin/bash\n# seeder-docs-check.sh\n# Stop hook: reminds developers to update Seeder documentation when\n# Seeder code was"
},
{
"path": ".claude/settings.json",
"chars": 223,
"preview": "{\n \"attribution\": {\n \"commit\": \"\",\n \"pr\": \"\"\n },\n \"extraKnownMarketplaces\": {\n \"bitwarden-marketplace\": {\n "
},
{
"path": ".claude/skills/bump-rust-sdk/SKILL.md",
"chars": 6079,
"preview": "---\nname: bump-rust-sdk\ndescription: This skill should be used when the user asks to \"bump the Rust SDK\", \"update sdk-in"
},
{
"path": ".claude/skills/bump-rust-sdk/references/api-surface.md",
"chars": 5546,
"preview": "# RustSdk API Surface Inventory\n\n> **Auto-generated from actual source files.** Last updated: 2026-02-25\n> Pinned rev: `"
},
{
"path": ".claude/skills/bump-rust-sdk/references/methodology.md",
"chars": 6627,
"preview": "# Bump sdk-internal: Detailed Methodology\n\n## Step-by-Step Process\n\n### 1. Identify the Current Server Pin\n\n```bash\ngrep"
},
{
"path": ".config/dotnet-tools.json",
"chars": 238,
"preview": "{\n \"version\": 1,\n \"isRoot\": true,\n \"tools\": {\n \"swashbuckle.aspnetcore.cli\": {\n \"version\": \"10.1.0\",\n \"c"
},
{
"path": ".devcontainer/bitwarden_common/docker-compose.yml",
"chars": 948,
"preview": "services:\n bitwarden_server:\n image: mcr.microsoft.com/devcontainers/dotnet:8.0\n volumes:\n - ../../:/workspa"
},
{
"path": ".devcontainer/community_dev/devcontainer.json",
"chars": 1240,
"preview": "{\n \"name\": \"Bitwarden Community Dev\",\n \"dockerComposeFile\": \"../../.devcontainer/bitwarden_common/docker-compose.yml\","
},
{
"path": ".devcontainer/community_dev/postCreateCommand.sh",
"chars": 3534,
"preview": "#!/usr/bin/env bash\nexport DEV_DIR=/workspace/dev\nexport CONTAINER_CONFIG=/workspace/.devcontainer/community_dev\ngit con"
},
{
"path": ".devcontainer/internal_dev/devcontainer.json",
"chars": 3201,
"preview": "{\n \"name\": \"Bitwarden Dev\",\n \"dockerComposeFile\": [\n \"../../.devcontainer/bitwarden_common/docker-compose.yml\",\n "
},
{
"path": ".devcontainer/internal_dev/docker-compose.override.yml",
"chars": 211,
"preview": "services:\n bitwarden_storage:\n image: mcr.microsoft.com/azure-storage/azurite:latest\n restart: unless-stopped\n "
},
{
"path": ".devcontainer/internal_dev/onCreateCommand.sh",
"chars": 306,
"preview": "#!/usr/bin/env bash\nexport REPO_ROOT=\"$(git rev-parse --show-toplevel)\"\n\nfile=\"$REPO_ROOT/dev/custom-root-ca.crt\"\n\nif [ "
},
{
"path": ".devcontainer/internal_dev/postCreateCommand.sh",
"chars": 5869,
"preview": "#!/usr/bin/env bash\nexport REPO_ROOT=\"$(git rev-parse --show-toplevel)\"\nexport CONTAINER_CONFIG=/workspace/.devcontainer"
},
{
"path": ".dockerignore",
"chars": 30,
"preview": "**/bin\n**/obj\n**/node_modules\n"
},
{
"path": ".editorconfig",
"chars": 5509,
"preview": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Don't use tabs for inden"
},
{
"path": ".git-blame-ignore-revs",
"chars": 484,
"preview": "# Apply .NET format https://github.com/bitwarden/server/pull/1764\n23b0a1f9df25058ab29785ecad9a233113c10889\n\n# Turn on fi"
},
{
"path": ".git-hooks/pre-commit",
"chars": 209,
"preview": "#!/bin/bash\n\nFILES=$(git diff --cached --name-only --diff-filter=ACM \"*.cs\")\nif [ -n \"$FILES\" ]\nthen\n dotnet format ."
},
{
"path": ".gitattributes",
"chars": 62,
"preview": "*.sh eol=lf\n*.cs eol=lf\n.dockerignore eol=lf\ndockerfile eol=lf"
},
{
"path": ".github/CODEOWNERS",
"chars": 5085,
"preview": "# Please sort into logical groups with comment headers. Sort groups in order of specificity.\n# For example, default owne"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.yml",
"chars": 2648,
"preview": "name: Server Bug Report\ndescription: File a bug report\nlabels: [bug]\nbody:\n - type: markdown\n attributes:\n valu"
},
{
"path": ".github/ISSUE_TEMPLATE/bw-lite.yml",
"chars": 2714,
"preview": "name: Bitwarden lite Deployment Bug Report\ndescription: File a bug report\nlabels: [bug, bw-lite-deploy]\nbody:\n - type: "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 740,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Feature Requests\n url: https://community.bitwarden.com/c/feature"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 393,
"preview": "## 🎟️ Tracking\n\n<!-- Paste the link to the Jira or GitHub issue or otherwise describe / point to where this change is co"
},
{
"path": ".github/codecov.yml",
"chars": 58,
"preview": "ignore:\n - \"test\" # Tests\n - \"util\" # Utils (migrators)\n"
},
{
"path": ".github/renovate.json5",
"chars": 7929,
"preview": "{\n $schema: \"https://docs.renovatebot.com/renovate-schema.json\",\n extends: [\"github>bitwarden/renovate-config\"], // Ex"
},
{
"path": ".github/workflows/_move_edd_db_scripts.yml",
"chars": 7360,
"preview": "name: _move_edd_db_scripts\nrun-name: Move EDD database scripts\n\non:\n workflow_call:\n\npermissions:\n pull-requests: writ"
},
{
"path": ".github/workflows/automatic-issue-responses.yml",
"chars": 3966,
"preview": "name: Automatic responses\non:\n issues:\n types:\n - labeled\njobs:\n close-issue:\n name: Close issue with autom"
},
{
"path": ".github/workflows/build.yml",
"chars": 22044,
"preview": "name: Build\n\non:\n workflow_dispatch:\n push:\n branches:\n - \"main\"\n - \"rc\"\n - \"hotfix-rc\"\n pull_reque"
},
{
"path": ".github/workflows/build_target.yml",
"chars": 632,
"preview": "name: Build on PR Target\n\non:\n pull_request_target:\n types: [opened, synchronize, reopened]\n branches:\n - \"m"
},
{
"path": ".github/workflows/cleanup-rc-branch.yml",
"chars": 2032,
"preview": "name: Cleanup RC Branch\n\non:\n push:\n tags:\n - v**\n\njobs:\n delete-rc:\n name: Delete RC Branch\n runs-on: u"
},
{
"path": ".github/workflows/code-references.yml",
"chars": 2470,
"preview": "name: Collect code references\n\non:\n push:\nconcurrency:\n group: ${{ github.workflow }}-${{ github.event.pull_request.nu"
},
{
"path": ".github/workflows/enforce-labels.yml",
"chars": 762,
"preview": "name: Enforce PR labels\n\non:\n workflow_call:\n pull_request:\n types: [labeled, unlabeled, opened, reopened, synchron"
},
{
"path": ".github/workflows/ephemeral-environment.yml",
"chars": 480,
"preview": "name: Ephemeral Environment\n\non:\n pull_request:\n types: [labeled]\n\npermissions:\n contents: read\n id-token: write\n\n"
},
{
"path": ".github/workflows/load-test.yml",
"chars": 4146,
"preview": "name: Load test\n\non:\n schedule:\n - cron: \"0 0 * * 1\" # Run every Monday at 00:00\n workflow_dispatch:\n inputs:\n "
},
{
"path": ".github/workflows/protect-files.yml",
"chars": 1672,
"preview": "# Runs if there are changes to the paths: list.\n# Starts a matrix job to check for modified files, then sets output base"
},
{
"path": ".github/workflows/publish.yml",
"chars": 5516,
"preview": "name: Publish\nrun-name: Publish ${{ inputs.dry_run && '(Dry Run)' || '' }}\n\non:\n workflow_dispatch:\n inputs:\n v"
},
{
"path": ".github/workflows/release.yml",
"chars": 3122,
"preview": "name: Release\nrun-name: Release ${{ inputs.release_type }}\n\non:\n workflow_dispatch:\n inputs:\n release_type:\n "
},
{
"path": ".github/workflows/repository-management.yml",
"chars": 8285,
"preview": "name: Repository management\n\non:\n workflow_dispatch:\n inputs:\n task:\n default: \"Version Bump\"\n de"
},
{
"path": ".github/workflows/respond.yml",
"chars": 630,
"preview": "name: Respond\n\non:\n issue_comment:\n types: [created]\n pull_request_review_comment:\n types: [created]\n issues:\n "
},
{
"path": ".github/workflows/review-code.yml",
"chars": 498,
"preview": "name: Code Review\n\non:\n pull_request:\n types: [opened, synchronize, reopened]\n\npermissions: {}\n\njobs:\n review:\n "
},
{
"path": ".github/workflows/scan.yml",
"chars": 1310,
"preview": "name: Scan\n\non:\n workflow_dispatch:\n push:\n branches:\n - \"main\"\n - \"rc\"\n - \"hotfix-rc\"\n pull_reques"
},
{
"path": ".github/workflows/stale-bot.yml",
"chars": 1630,
"preview": "name: Staleness\non:\n workflow_dispatch:\n schedule: # Run once a day at 5.23am (arbitrary but should avoid peak loads o"
},
{
"path": ".github/workflows/test-database.yml",
"chars": 12057,
"preview": "name: Database testing\n\non:\n workflow_dispatch:\n push:\n branches:\n - \"main\"\n - \"rc\"\n - \"hotfix-rc\"\n "
},
{
"path": ".github/workflows/test.yml",
"chars": 2250,
"preview": "name: Testing\n\non:\n workflow_dispatch:\n push:\n branches:\n - \"main\"\n - \"rc\"\n - \"hotfix-rc\"\n pull_req"
},
{
"path": ".gitignore",
"chars": 3738,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
},
{
"path": ".run/Full Server - Self-hosted.run.xml",
"chars": 611,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Full Server - Self-hosted\" type"
},
{
"path": ".run/Full Server.run.xml",
"chars": 652,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Full Server\" type=\"CompoundRunC"
},
{
"path": ".run/Min Server - Self-hosted.run.xml",
"chars": 336,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Min Server - Self-hosted\" type="
},
{
"path": ".run/Min Server.run.xml",
"chars": 289,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Min Server\" type=\"CompoundRunCo"
},
{
"path": "CONTRIBUTING.md",
"chars": 313,
"preview": "# How to Contribute\n\nOur [Contributing Guidelines](https://contributing.bitwarden.com/contributing/) are located in our "
},
{
"path": "Directory.Build.props",
"chars": 1359,
"preview": "<Project>\n\n <PropertyGroup>\n <TargetFramework>net8.0</TargetFramework>\n\n <Version>2026.3.1</Version>\n\n <RootNa"
},
{
"path": "LICENSE.txt",
"chars": 829,
"preview": "Source code in this repository is covered by one of two licenses: (i) the GNU\nAffero General Public License (AGPL) v3.0 "
},
{
"path": "LICENSE_AGPL.txt",
"chars": 34519,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "LICENSE_BITWARDEN.txt",
"chars": 10724,
"preview": "BITWARDEN LICENSE AGREEMENT\nVersion 1, 4 September 2020\n\nPLEASE CAREFULLY READ THIS BITWARDEN LICENSE AGREEMENT (\"AGREEM"
},
{
"path": "LICENSE_FAQ.md",
"chars": 7881,
"preview": "# Bitwarden and Open Source\n\nThe source code for all Bitwarden software products is hosted on GitHub and we welcome ever"
},
{
"path": "README.md",
"chars": 9141,
"preview": "<p align=\"center\">\n <img src=\"https://github.com/bitwarden/brand/blob/main/screenshots/apps-combo-logo.png\" alt=\"Bitwar"
},
{
"path": "SECURITY.md",
"chars": 1794,
"preview": "Bitwarden believes that working with security researchers across the globe is crucial to keeping our users safe. If you "
},
{
"path": "TRADEMARK_GUIDELINES.md",
"chars": 9990,
"preview": "# TRADEMARK GUIDELINES\n\nThis document outlines the policy for allowable uses of trademarks owned by Bitwarden, Inc.\n(“Bi"
},
{
"path": "bitwarden-server.sln",
"chars": 34984,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.367"
},
{
"path": "bitwarden_license/README.md",
"chars": 186,
"preview": "# Bitwarden Licensed Code\n\nAll source code under this directory is licensed under the [Bitwarden License Agreement](http"
},
{
"path": "bitwarden_license/src/Commercial.Core/AdminConsole/Providers/CreateProviderCommand.cs",
"chars": 3809,
"preview": "using Bit.Core.AdminConsole.Entities.Provider;\nusing Bit.Core.AdminConsole.Enums.Provider;\nusing Bit.Core.AdminConsole."
},
{
"path": "bitwarden_license/src/Commercial.Core/AdminConsole/Providers/RemoveOrganizationFromProviderCommand.cs",
"chars": 7923,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs",
"chars": 32857,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.ComponentMode"
},
{
"path": "bitwarden_license/src/Commercial.Core/Billing/Providers/Models/ProviderClientInvoiceReportRow.cs",
"chars": 1200,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Globalization"
},
{
"path": "bitwarden_license/src/Commercial.Core/Billing/Providers/Queries/GetProviderWarningsQuery.cs",
"chars": 3878,
"preview": "using Bit.Core.AdminConsole.Entities.Provider;\nusing Bit.Core.Billing.Constants;\nusing Bit.Core.Billing.Providers.Model"
},
{
"path": "bitwarden_license/src/Commercial.Core/Billing/Providers/Services/BusinessUnitConverter.cs",
"chars": 16936,
"preview": "#nullable enable\nusing System.Diagnostics.CodeAnalysis;\nusing Bit.Core.AdminConsole.Entities;\nusing Bit.Core.AdminConso"
},
{
"path": "bitwarden_license/src/Commercial.Core/Billing/Providers/Services/ProviderBillingService.cs",
"chars": 34845,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Globalization"
},
{
"path": "bitwarden_license/src/Commercial.Core/Commercial.Core.csproj",
"chars": 233,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <ItemGroup>\n <ProjectReference Include=\"..\\..\\..\\src\\Core\\Core.csproj\" />\n </It"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ProjectPeopleAccessPoliciesAuthorizationHandler.cs",
"chars": 3690,
"preview": "using Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;\nusing Bit.Core.S"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ProjectServiceAccountsAccessPoliciesAuthorizationHandler.cs",
"chars": 4398,
"preview": "#nullable enable\nusing Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/SecretAccessPoliciesUpdatesAuthorizationHandler.cs",
"chars": 6935,
"preview": "#nullable enable\nusing Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ServiceAccountGrantedPoliciesAuthorizationHandler.cs",
"chars": 3601,
"preview": "#nullable enable\nusing Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/AccessPolicies/ServiceAccountPeopleAccessPoliciesAuthorizationHandler.cs",
"chars": 3823,
"preview": "using Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;\nusing Bit.Core.S"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/Projects/ProjectAuthorizationHandler.cs",
"chars": 3531,
"preview": "using Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;\nusing Bit.Core.S"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/Secrets/BulkSecretAuthorizationHandler.cs",
"chars": 2459,
"preview": "#nullable enable\nusing Bit.Core.Context;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;\nusing Bit.Core.Secret"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/Secrets/SecretAuthorizationHandler.cs",
"chars": 7557,
"preview": "using Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;\nusing Bit.Core.S"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/AuthorizationHandlers/ServiceAccounts/ServiceAccountAuthorizationHandler.cs",
"chars": 7522,
"preview": "using Bit.Core.Context;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.AuthorizationRequirements;\nusing Bit.Core.S"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/AccessPolicies/UpdateProjectServiceAccountsAccessPoliciesCommand.cs",
"chars": 974,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Commands.AccessPolicies.Interfaces;\nusing Bit.Core.SecretsManager.Models"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/AccessPolicies/UpdateServiceAccountGrantedPoliciesCommand.cs",
"chars": 916,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Commands.AccessPolicies.Interfaces;\nusing Bit.Core.SecretsManager.Models"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/AccessTokens/CreateAccessTokenCommand.cs",
"chars": 1422,
"preview": "using System.Security.Cryptography;\nusing System.Text;\nusing Bit.Core.Exceptions;\nusing Bit.Core.SecretsManager.Command"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Porting/ImportCommand.cs",
"chars": 3372,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.SecretsMana"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Projects/CreateProjectCommand.cs",
"chars": 2667,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.Auth.Identi"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Projects/DeleteProjectCommand.cs",
"chars": 627,
"preview": "using Bit.Core.SecretsManager.Commands.Projects.Interfaces;\nusing Bit.Core.SecretsManager.Entities;\nusing Bit.Core.Secr"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Projects/UpdateProjectCommand.cs",
"chars": 917,
"preview": "using Bit.Core.Exceptions;\nusing Bit.Core.SecretsManager.Commands.Projects.Interfaces;\nusing Bit.Core.SecretsManager.En"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Requests/RequestSMAccessCommand.cs",
"chars": 1223,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Core.Entities;\nusing Bit.Core.Enums;\nusing Bit.Core.Exceptions;\nusing B"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Secrets/CreateSecretCommand.cs",
"chars": 738,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Commands.Secrets.Interfaces;\nusing Bit.Core.SecretsManager.Entities;\nusi"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Secrets/DeleteSecretCommand.cs",
"chars": 616,
"preview": "using Bit.Core.SecretsManager.Commands.Secrets.Interfaces;\nusing Bit.Core.SecretsManager.Entities;\nusing Bit.Core.Secre"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Secrets/UpdateSecretCommand.cs",
"chars": 734,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Commands.Secrets.Interfaces;\nusing Bit.Core.SecretsManager.Entities;\nusi"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/CreateServiceAccountCommand.cs",
"chars": 2271,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.Context;\nus"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/DeleteServiceAccountsCommand.cs",
"chars": 753,
"preview": "using Bit.Core.SecretsManager.Commands.ServiceAccounts.Interfaces;\nusing Bit.Core.SecretsManager.Entities;\nusing Bit.Co"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/RevokeAccessTokensCommand.cs",
"chars": 833,
"preview": "using Bit.Core.SecretsManager.Commands.ServiceAccounts.Interfaces;\nusing Bit.Core.SecretsManager.Entities;\nusing Bit.Co"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/ServiceAccounts/UpdateServiceAccountCommand.cs",
"chars": 1237,
"preview": "using Bit.Core.Context;\nusing Bit.Core.Exceptions;\nusing Bit.Core.SecretsManager.Commands.ServiceAccounts.Interfaces;\nu"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Trash/EmptyTrashCommand.cs",
"chars": 841,
"preview": "using Bit.Core.Exceptions;\nusing Bit.Core.SecretsManager.Commands.Trash.Interfaces;\nusing Bit.Core.SecretsManager.Repos"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Commands/Trash/RestoreTrashCommand.cs",
"chars": 846,
"preview": "using Bit.Core.Exceptions;\nusing Bit.Core.SecretsManager.Commands.Trash.Interfaces;\nusing Bit.Core.SecretsManager.Repos"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessClientQuery.cs",
"chars": 1107,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Security.Clai"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/ProjectServiceAccountsAccessPoliciesUpdatesQuery.cs",
"chars": 1869,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Enums.AccessPolicies;\nusing Bit.Core.SecretsManager.Models.Data;\nusing B"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/SameOrganizationQuery.cs",
"chars": 1305,
"preview": "using Bit.Core.AdminConsole.Repositories;\nusing Bit.Core.Repositories;\nusing Bit.Core.SecretsManager.Queries.AccessPoli"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/SecretAccessPoliciesUpdatesQuery.cs",
"chars": 1011,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Models.Data;\nusing Bit.Core.SecretsManager.Models.Data.AccessPolicyUpdat"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/AccessPolicies/ServiceAccountGrantedPolicyUpdatesQuery.cs",
"chars": 1639,
"preview": "#nullable enable\nusing Bit.Core.SecretsManager.Enums.AccessPolicies;\nusing Bit.Core.SecretsManager.Models.Data;\nusing B"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/Projects/MaxProjectsQuery.cs",
"chars": 1977,
"preview": "using Bit.Core.Billing.Enums;\nusing Bit.Core.Billing.Pricing;\nusing Bit.Core.Exceptions;\nusing Bit.Core.Repositories;\nu"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/Secrets/SecretsSyncQuery.cs",
"chars": 1745,
"preview": "#nullable enable\nusing Bit.Core.Exceptions;\nusing Bit.Core.SecretsManager.Entities;\nusing Bit.Core.SecretsManager.Model"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/ServiceAccounts/CountNewServiceAccountSlotsRequiredQuery.cs",
"chars": 1669,
"preview": "using Bit.Core.Exceptions;\nusing Bit.Core.Repositories;\nusing Bit.Core.SecretsManager.Queries.ServiceAccounts.Interface"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/Queries/ServiceAccounts/ServiceAccountSecretsDetailsQuery.cs",
"chars": 1326,
"preview": "using Bit.Core.Enums;\nusing Bit.Core.SecretsManager.Models.Data;\nusing Bit.Core.SecretsManager.Queries.ServiceAccounts."
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/SecretsManagerCollectionExtensions.cs",
"chars": 5296,
"preview": "using Bit.Commercial.Core.SecretsManager.AuthorizationHandlers.AccessPolicies;\nusing Bit.Commercial.Core.SecretsManager"
},
{
"path": "bitwarden_license/src/Commercial.Core/SecretsManager/SecretsManagerServiceCollectionExtensions.cs",
"chars": 314,
"preview": "using Microsoft.Extensions.DependencyInjection;\n\nnamespace Bit.Commercial.Core.SecretsManager;\n\npublic static class Sec"
},
{
"path": "bitwarden_license/src/Commercial.Core/Utilities/ServiceCollectionExtensions.cs",
"chars": 1117,
"preview": "using Bit.Commercial.Core.AdminConsole.Providers;\nusing Bit.Commercial.Core.AdminConsole.Services;\nusing Bit.Commercial"
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/Commercial.Infrastructure.EntityFramework.csproj",
"chars": 459,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <Nullable>enable</Nullable>\n </PropertyGroup>\n <ItemGroup>\n "
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/AccessPolicyRepository.cs",
"chars": 30049,
"preview": "using AutoMapper;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.Enums.AccessPolicies;\nusing Bit.Core.SecretsManag"
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ProjectRepository.cs",
"chars": 13842,
"preview": "using System.Linq.Expressions;\nusing AutoMapper;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.Models.Data;\nusing"
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/SecretRepository.cs",
"chars": 29612,
"preview": "using System.Linq.Expressions;\nusing AutoMapper;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.Enums.AccessPolici"
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/SecretVersionRepository.cs",
"chars": 3942,
"preview": "using AutoMapper;\nusing Bit.Core.SecretsManager.Repositories;\nusing Bit.Infrastructure.EntityFramework.Repositories;\nus"
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ServiceAccountRepository.cs",
"chars": 14162,
"preview": "using System.Linq.Expressions;\nusing AutoMapper;\nusing Bit.Core.Enums;\nusing Bit.Core.SecretsManager.Models.Data;\nusing"
},
{
"path": "bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/SecretsManagerEFServiceCollectionExtensions.cs",
"chars": 811,
"preview": "using Bit.Commercial.Infrastructure.EntityFramework.SecretsManager.Repositories;\nusing Bit.Core.SecretsManager.Reposito"
},
{
"path": "bitwarden_license/src/Scim/Context/IScimContext.cs",
"chars": 669,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Core.AdminConsole.Enums;\nusing Bit.Core.AdminConsole.Models.Organizatio"
},
{
"path": "bitwarden_license/src/Scim/Context/ScimContext.cs",
"chars": 3273,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Scim/Controllers/InfoController.cs",
"chars": 446,
"preview": "using Bit.Core.Utilities;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Bit.Scim"
},
{
"path": "bitwarden_license/src/Scim/Controllers/v2/GroupsController.cs",
"chars": 4420,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Scim/Controllers/v2/UsersController.cs",
"chars": 6961,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core;\nusing Bit."
},
{
"path": "bitwarden_license/src/Scim/Dockerfile",
"chars": 1945,
"preview": "###############################################\n# Build stage #\n########################"
},
{
"path": "bitwarden_license/src/Scim/Groups/GetGroupsListQuery.cs",
"chars": 2324,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Scim/Groups/Interfaces/IGetGroupsListQuery.cs",
"chars": 275,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Scim.Models;\n\nnamespace Bit.Scim.Groups.Interfaces;\n\npublic interface I"
},
{
"path": "bitwarden_license/src/Scim/Groups/Interfaces/IPatchGroupCommand.cs",
"chars": 203,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Scim.Models;\n\nnamespace Bit.Scim.Groups.Interfaces;\n\npublic interface I"
},
{
"path": "bitwarden_license/src/Scim/Groups/Interfaces/IPostGroupCommand.cs",
"chars": 229,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Scim.Models;\n\nnamespace Bit.Scim.Groups.Interfaces;\n\npublic interface I"
},
{
"path": "bitwarden_license/src/Scim/Groups/Interfaces/IPutGroupCommand.cs",
"chars": 236,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Scim.Models;\n\nnamespace Bit.Scim.Groups.Interfaces;\n\npublic interface I"
},
{
"path": "bitwarden_license/src/Scim/Groups/PatchGroupCommand.cs",
"chars": 6901,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Text.Json;\nus"
},
{
"path": "bitwarden_license/src/Scim/Groups/PostGroupCommand.cs",
"chars": 1990,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;\nusing Bit.Cor"
},
{
"path": "bitwarden_license/src/Scim/Groups/PutGroupCommand.cs",
"chars": 1716,
"preview": "using Bit.Core.AdminConsole.Entities;\nusing Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces;\nusing Bit.Cor"
},
{
"path": "bitwarden_license/src/Scim/Models/BaseScimGroupModel.cs",
"chars": 484,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Scim.Utilities;\n"
},
{
"path": "bitwarden_license/src/Scim/Models/BaseScimModel.cs",
"chars": 344,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nnamespace Bit.Scim.Models;"
},
{
"path": "bitwarden_license/src/Scim/Models/BaseScimUserModel.cs",
"chars": 1548,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Scim.Utilities;\n"
},
{
"path": "bitwarden_license/src/Scim/Models/GetGroupsQueryParamModel.cs",
"chars": 321,
"preview": "using System.ComponentModel.DataAnnotations;\n\nnamespace Bit.Scim.Models;\n\npublic class GetGroupsQueryParamModel\n{\n p"
},
{
"path": "bitwarden_license/src/Scim/Models/GetUsersQueryParamModel.cs",
"chars": 320,
"preview": "using System.ComponentModel.DataAnnotations;\n\nnamespace Bit.Scim.Models;\n\npublic class GetUsersQueryParamModel\n{\n pu"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimErrorResponseModel.cs",
"chars": 372,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Scim.Utilities;\n"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimGroupRequestModel.cs",
"chars": 830,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimGroupResponseModel.cs",
"chars": 684,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimListResponseModel.cs",
"chars": 472,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Scim.Utilities;\n"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimMetaModel.cs",
"chars": 292,
"preview": "namespace Bit.Scim.Models;\n\npublic class ScimMetaModel\n{\n public ScimMetaModel(string resourceType)\n {\n Re"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimPatchModel.cs",
"chars": 474,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Text.Json;\n\nn"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimUserRequestModel.cs",
"chars": 2753,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.AdminConsol"
},
{
"path": "bitwarden_license/src/Scim/Models/ScimUserResponseModel.cs",
"chars": 817,
"preview": "using Bit.Core.Models.Data.Organizations.OrganizationUsers;\n\nnamespace Bit.Scim.Models;\n\npublic class ScimUserResponseM"
},
{
"path": "bitwarden_license/src/Scim/Program.cs",
"chars": 391,
"preview": "using Bit.Core.Utilities;\n\nnamespace Bit.Scim;\n\npublic class Program\n{\n public static void Main(string[] args)\n {"
},
{
"path": "bitwarden_license/src/Scim/Properties/launchSettings.json",
"chars": 648,
"preview": "{\n \"iisSettings\": {\n \"windowsAuthentication\": false,\n \"anonymousAuthentication\": true,\n \"iisExpress\": {\n "
},
{
"path": "bitwarden_license/src/Scim/Scim.csproj",
"chars": 476,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n <Sdk Name=\"Bitwarden.Server.Sdk\" />\n\n <PropertyGroup>\n <UserSecretsId>bitwa"
},
{
"path": "bitwarden_license/src/Scim/ScimSettings.cs",
"chars": 52,
"preview": "namespace Bit.Scim;\n\npublic class ScimSettings\n{\n}\n"
},
{
"path": "bitwarden_license/src/Scim/Startup.cs",
"chars": 4291,
"preview": "using System.Globalization;\nusing Bit.Core.Billing.Extensions;\nusing Bit.Core.Context;\nusing Bit.Core.SecretsManager.Re"
},
{
"path": "bitwarden_license/src/Scim/Users/GetUsersListQuery.cs",
"chars": 2728,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.Models.Data"
},
{
"path": "bitwarden_license/src/Scim/Users/Interfaces/IGetUsersListQuery.cs",
"chars": 324,
"preview": "using Bit.Core.Models.Data.Organizations.OrganizationUsers;\nusing Bit.Scim.Models;\n\nnamespace Bit.Scim.Users.Interfaces"
},
{
"path": "bitwarden_license/src/Scim/Users/Interfaces/IPatchUserCommand.cs",
"chars": 179,
"preview": "using Bit.Scim.Models;\n\nnamespace Bit.Scim.Users.Interfaces;\n\npublic interface IPatchUserCommand\n{\n Task PatchUserAs"
},
{
"path": "bitwarden_license/src/Scim/Users/Interfaces/IPostUserCommand.cs",
"chars": 356,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Bit.Core.Models.Data"
},
{
"path": "bitwarden_license/src/Scim/Users/PatchUserCommand.cs",
"chars": 6190,
"preview": "using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.RestoreUser.v1;\nusing Bit.Core.AdminConsole.Organiza"
},
{
"path": "bitwarden_license/src/Scim/Users/PostUserCommand.cs",
"chars": 5420,
"preview": "#nullable enable\n\nusing Bit.Core;\nusing Bit.Core.AdminConsole.Enums;\nusing Bit.Core.AdminConsole.Models.Business;\nusing"
},
{
"path": "bitwarden_license/src/Scim/Utilities/ApiKeyAuthenticationHandler.cs",
"chars": 3601,
"preview": "using System.Security.Claims;\nusing System.Text.Encodings.Web;\nusing Bit.Core.Enums;\nusing Bit.Core.Repositories;\nusing"
},
{
"path": "bitwarden_license/src/Scim/Utilities/ApiKeyAuthenticationOptions.cs",
"chars": 205,
"preview": "using Microsoft.AspNetCore.Authentication;\n\nnamespace Bit.Scim.Utilities;\n\npublic class ApiKeyAuthenticationOptions : A"
},
{
"path": "bitwarden_license/src/Scim/Utilities/ExceptionHandlerFilterAttribute.cs",
"chars": 1206,
"preview": "using Bit.Core.Exceptions;\nusing Bit.Scim.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Filter"
},
{
"path": "bitwarden_license/src/Scim/Utilities/ScimConstants.cs",
"chars": 786,
"preview": "namespace Bit.Scim.Utilities;\n\npublic static class ScimConstants\n{\n public const string Scim2SchemaListResponse = \"u"
},
{
"path": "bitwarden_license/src/Scim/Utilities/ScimContextMiddleware.cs",
"chars": 698,
"preview": "using Bit.Core.Repositories;\nusing Bit.Core.Settings;\nusing Bit.Scim.Context;\n\nnamespace Bit.Scim.Utilities;\n\npublic cl"
},
{
"path": "bitwarden_license/src/Scim/Utilities/ScimServiceCollectionExtensions.cs",
"chars": 1033,
"preview": "using Bit.Scim.Groups;\nusing Bit.Scim.Groups.Interfaces;\nusing Bit.Scim.Users;\nusing Bit.Scim.Users.Interfaces;\n\nnamesp"
},
{
"path": "bitwarden_license/src/Scim/appsettings.Development.json",
"chars": 1109,
"preview": "{\n \"globalSettings\": {\n \"baseServiceUri\": {\n \"vault\": \"https://localhost:8080\",\n \"api\": \"http://localhost:"
},
{
"path": "bitwarden_license/src/Scim/appsettings.Production.json",
"chars": 1187,
"preview": "{\n \"globalSettings\": {\n \"baseServiceUri\": {\n \"vault\": \"https://vault.bitwarden.com\",\n \"api\": \"https://api"
},
{
"path": "bitwarden_license/src/Scim/appsettings.QA.json",
"chars": 1255,
"preview": "{\n \"globalSettings\": {\n \"baseServiceUri\": {\n \"vault\": \"https://vault.qa.bitwarden.pw\",\n \"api\": \"https://a"
},
{
"path": "bitwarden_license/src/Scim/appsettings.json",
"chars": 1228,
"preview": "{\n \"globalSettings\": {\n \"selfHosted\": false,\n \"siteName\": \"Bitwarden\",\n \"projectName\": \"Scim\",\n \"stripe\": "
},
{
"path": "bitwarden_license/src/Scim/build.ps1",
"chars": 365,
"preview": "$dir = Split-Path -Parent $MyInvocation.MyCommand.Path\n\necho \"`n## Building Scim\"\n\necho \"`nBuilding app\"\necho \".NET Core"
},
{
"path": "bitwarden_license/src/Scim/build.sh",
"chars": 426,
"preview": "#!/usr/bin/env bash\nset -e\n\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && \"pwd\" )\"\n\necho -e \"\\n## Building SCIM\"\n\nech"
},
{
"path": "bitwarden_license/src/Scim/entrypoint.sh",
"chars": 1603,
"preview": "#!/bin/sh\n\n# Setup\n\nGROUPNAME=\"bitwarden\"\nUSERNAME=\"bitwarden\"\n\nLUID=${LOCAL_UID:-0}\nLGID=${LOCAL_GID:-0}\n\n# Step down f"
},
{
"path": "bitwarden_license/src/Sso/Controllers/AccountController.cs",
"chars": 43503,
"preview": "using System.Security.Claims;\nusing Bit.Core;\nusing Bit.Core.AdminConsole.Entities;\nusing Bit.Core.AdminConsole.Enums;\n"
},
{
"path": "bitwarden_license/src/Sso/Controllers/HomeController.cs",
"chars": 2075,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Diagnostics;\n"
},
{
"path": "bitwarden_license/src/Sso/Controllers/InfoController.cs",
"chars": 386,
"preview": "using Bit.Core.Utilities;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Bit.Sso.Controllers;\n\npublic class InfoController "
},
{
"path": "bitwarden_license/src/Sso/Controllers/MetadataController.cs",
"chars": 1954,
"preview": "using Bit.Core.Auth.Enums;\nusing Bit.Sso.Utilities;\nusing Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCo"
},
{
"path": "bitwarden_license/src/Sso/Dockerfile",
"chars": 1942,
"preview": "###############################################\n# Build stage #\n########################"
},
{
"path": "bitwarden_license/src/Sso/IdentityServer/DistributedCachePersistedGrantStore.cs",
"chars": 4085,
"preview": "using Bit.Sso.Utilities;\nusing Duende.IdentityServer.Models;\nusing Duende.IdentityServer.Stores;\nusing ZiggyCreatures.C"
},
{
"path": "bitwarden_license/src/Sso/IdentityServer/OidcIdentityClient.cs",
"chars": 813,
"preview": "using Bit.Core.Settings;\nusing Duende.IdentityServer;\nusing Duende.IdentityServer.Models;\n\nnamespace Bit.Sso.IdentitySe"
},
{
"path": "bitwarden_license/src/Sso/Models/ErrorViewModel.cs",
"chars": 675,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Duende.IdentityServe"
},
{
"path": "bitwarden_license/src/Sso/Models/RedirectViewModel.cs",
"chars": 200,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nnamespace Bit.Sso.Models;\n"
},
{
"path": "bitwarden_license/src/Sso/Models/SamlEnvironment.cs",
"chars": 271,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Security.Cryp"
},
{
"path": "bitwarden_license/src/Sso/Models/SsoPreValidateResponseModel.cs",
"chars": 218,
"preview": "using Microsoft.AspNetCore.Mvc;\n\nnamespace Bit.Sso.Models;\n\npublic class SsoPreValidateResponseModel : JsonResult\n{\n "
},
{
"path": "bitwarden_license/src/Sso/Program.cs",
"chars": 441,
"preview": "using Bit.Core.Utilities;\n\nnamespace Bit.Sso;\n\npublic class Program\n{\n public static void Main(string[] args)\n {\n"
},
{
"path": "bitwarden_license/src/Sso/Properties/launchSettings.json",
"chars": 792,
"preview": "{\n \"iisSettings\": {\n \"windowsAuthentication\": false,\n \"anonymousAuthentication\": true,\n \"iisExpress\": {\n "
},
{
"path": "bitwarden_license/src/Sso/Sass/site.scss",
"chars": 750,
"preview": "@import \"webfonts.css\";\n\n$primary: #175DDC;\n$primary-accent: #1252A3;\n$success: #00a65a;\n$info: #555555;\n$warning: #bf7"
},
{
"path": "bitwarden_license/src/Sso/Sass/webfonts.css",
"chars": 1940,
"preview": "@font-face {\n\tfont-family: 'Open Sans';\n\tfont-style: italic;\n\tfont-weight: 300;\n\tfont-display: auto;\n\tsrc: url(webfonts/"
},
{
"path": "bitwarden_license/src/Sso/Sso.csproj",
"chars": 751,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n <Sdk Name=\"Bitwarden.Server.Sdk\" />\n\n <PropertyGroup>\n <UserSecretsId>bitwa"
},
{
"path": "bitwarden_license/src/Sso/Startup.cs",
"chars": 4937,
"preview": "using Bit.Core;\nusing Bit.Core.Billing.Extensions;\nusing Bit.Core.Context;\nusing Bit.Core.SecretsManager.Repositories;\n"
},
{
"path": "bitwarden_license/src/Sso/Utilities/ClaimsExtensions.cs",
"chars": 1515,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Security.Clai"
},
{
"path": "bitwarden_license/src/Sso/Utilities/DiscoveryResponseGenerator.cs",
"chars": 1359,
"preview": "using Bit.Core.Settings;\nusing Bit.Core.Utilities;\nusing Duende.IdentityServer.Configuration;\nusing Duende.IdentityServ"
},
{
"path": "bitwarden_license/src/Sso/Utilities/DynamicAuthenticationScheme.cs",
"chars": 2676,
"preview": "using Bit.Core.Auth.Enums;\nusing Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCore.Authentication.OpenIdC"
},
{
"path": "bitwarden_license/src/Sso/Utilities/DynamicAuthenticationSchemeProvider.cs",
"chars": 18562,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Security.Cryp"
},
{
"path": "bitwarden_license/src/Sso/Utilities/ExtendedOptionsMonitorCache.cs",
"chars": 1250,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.Collections.C"
},
{
"path": "bitwarden_license/src/Sso/Utilities/IDynamicAuthenticationScheme.cs",
"chars": 262,
"preview": "using Bit.Core.Auth.Enums;\nusing Microsoft.AspNetCore.Authentication;\n\nnamespace Bit.Sso.Utilities;\n\npublic interface I"
},
{
"path": "bitwarden_license/src/Sso/Utilities/IExtendedOptionsMonitorCache.cs",
"chars": 237,
"preview": "using Microsoft.Extensions.Options;\n\nnamespace Bit.Sso.Utilities;\n\npublic interface IExtendedOptionsMonitorCache<TOptio"
},
{
"path": "bitwarden_license/src/Sso/Utilities/OpenIdConnectOptionsExtensions.cs",
"chars": 2482,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing Microsoft.AspNetCore"
},
{
"path": "bitwarden_license/src/Sso/Utilities/OpenIdConnectScopes.cs",
"chars": 2355,
"preview": "namespace Bit.Sso.Utilities;\n\n/// <summary>\n/// OpenID Connect Clients use scope values as defined in 3.3 of OAuth 2.0\n"
},
{
"path": "bitwarden_license/src/Sso/Utilities/PersistedGrantsDistributedCacheConstants.cs",
"chars": 358,
"preview": "namespace Bit.Sso.Utilities;\n\npublic static class PersistedGrantsDistributedCacheConstants\n{\n /// <summary>\n /// "
},
{
"path": "bitwarden_license/src/Sso/Utilities/Saml2OptionsExtensions.cs",
"chars": 4006,
"preview": "// FIXME: Update this file to be null safe and then delete the line below\n#nullable disable\n\nusing System.IO.Compressio"
},
{
"path": "bitwarden_license/src/Sso/Utilities/SamlClaimTypes.cs",
"chars": 449,
"preview": "namespace Bit.Sso.Utilities;\n\npublic static class SamlClaimTypes\n{\n public const string Email = \"urn:oid:0.9.2342.19"
},
{
"path": "bitwarden_license/src/Sso/Utilities/SamlNameIdFormats.cs",
"chars": 1058,
"preview": "namespace Bit.Sso.Utilities;\n\npublic static class SamlNameIdFormats\n{\n // Common\n public const string Unspecified"
},
{
"path": "bitwarden_license/src/Sso/Utilities/SamlPropertyKeys.cs",
"chars": 183,
"preview": "namespace Bit.Sso.Utilities;\n\npublic static class SamlPropertyKeys\n{\n public const string ClaimFormat = \"http://sche"
}
]
// ... and 5856 more files (download for full content)
About this extraction
This page contains the full source code of the bitwarden/server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6056 files (57.1 MB), approximately 4.3M tokens, and a symbol index with 18171 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.