* Add HasVerifiedDomainsAsync method to IOrganizationDomainService
* Add GetManagedUserIdsByOrganizationIdAsync method to IOrganizationUserRepository and the corresponding queries
* Fix case on the sproc OrganizationUser_ReadManagedIdsByOrganizationId parameter
* Update the EF query to use the Email from the User table
* dotnet format
* Fix IOrganizationDomainService.HasVerifiedDomainsAsync by checking that domains have been Verified and add unit tests
* Rename IOrganizationUserRepository.GetManagedUserIdsByOrganizationAsync
* Fix domain queries
* Add OrganizationUserRepository integration tests
* Add summary to IOrganizationDomainService.HasVerifiedDomainsAsync
* chore: Rename IOrganizationUserRepository.GetManagedUserIdsByOrganizationAsync to GetManyIdsManagedByOrganizationIdAsync
* Add IsManagedByAnyOrganizationAsync method to IUserRepository
* Add integration tests for UserRepository.IsManagedByAnyOrganizationAsync
* Refactor to IUserService.IsManagedByAnyOrganizationAsync and IOrganizationService.GetUsersOrganizationManagementStatusAsync
* chore: Refactor IsManagedByAnyOrganizationAsync method in UserService
* Refactor IOrganizationService.GetUsersOrganizationManagementStatusAsync to return IDictionary<Guid, bool>
* Extract IOrganizationService.GetUsersOrganizationManagementStatusAsync into a query
* Update comments in OrganizationDomainService to use proper capitalization
* Move OrganizationDomainService to AdminConsole ownership and update namespace
* feat: Add support for organization domains in enterprise plans
* feat: Add HasOrganizationDomains property to OrganizationAbility class
* refactor: Update GetOrganizationUsersManagementStatusQuery to use IApplicationCacheService
* Remove HasOrganizationDomains and use UseSso to check if Organization can have Verified Domains
* Refactor UserService.IsManagedByAnyOrganizationAsync to simply check the UseSso flag
* Add TODO comment for replacing 'UseSso' organization ability on user verified domain checks
* Bump date on migration script
* Add indexes to OrganizationDomain table
* Bump script migration date; Remove WITH ONLINE = ON from data migration.
* Centralize database migration logic
* Clean up unused usings
* Prizatize
* Remove verbose flag from Docker invocation
* Allow certain database operations to be skipped
* Readonly
* Extract Import-Api endpoints into separate controller
Moved ciphers/import and ciphers/import-organization into new ImportController
Paths have been kept intact for now (no changes on clients needed)
Moved request-models used for import into tools-subfolder
* Update CODEOWNERS for team-tools-dev
* Move HibpController (reports) to tools
* Moving files related to Send
* Moving files related to ReferenceEvent
* Removed unneeded newline
* [SG-696] Organization Domain Claiming DB Objects and Migrations (#2394)
* model organization domain claiming
* Added migration scripts and db objects for mssql
* create and implement sql repository abstraction
* Added ef migrations for mysql and postgres. Removed time without timezone in previous migration
* made update on sql migration to use create or alter statement
* removed active column from OrganizationDomain table and decided to go with the hard delete approach
* Ran dotnet restore evaluate
* created DNS service verification using DNSClient (#2401)
* [SG-678] Api Endpoints for Domain Claiming (#2430)
* Added stored procedure to read claimed domains
* Updated Organization Domain Repository to include method to get claimed domains
* Updated domain entity and added request model
* Implemented organization domain respository and regsitered it in the various extensions
* Added create endpoint, request, responses and command
* Added endpoint to get domain by domain entry id
* Ran lint fix
* Added new stored procedure to get domains by organizattion id
* Moved migration scripts to init migration and added new procedure
* Renamed from domainId to Id
* Added and implemented GetDomainByOrganizationId
* Completed GetDomainByOrgId endpoint and started work on verify domain endpoint
* Updated the OrganizationDomain update procedure
* Added delete command and include other endpoints in the controller
* Remove test item from controller
* Remove test item from controller
* Changed access to allow admin, owners and manage sso roles
* changed logic for setting the initial value for the NextRunCount
* Renamed NextRunCount to JobRunCount
* Renamed NextRunCount to JobRunCount on mysql
* Renamed NextRunCount to JobRunCount on postgres
* Removed chaining pattern and added logic to get next run date
* Lint fix
* Added stored procedure to get organization sso details by email address
* Added endpoint to get sso details of an organization with email
* Added organizationDomainRepository to OrganizationController test
* merged with master and fixed conflicts
* [SG-661] Background Domain Verification Service (#2455)
* Added stored procedure to read claimed domains
* Updated Organization Domain Repository to include method to get claimed domains
* Updated domain entity and added request model
* Implemented organization domain respository and regsitered it in the various extensions
* Added create endpoint, request, responses and command
* Added endpoint to get domain by domain entry id
* Ran lint fix
* Added new stored procedure to get domains by organizattion id
* Moved migration scripts to init migration and added new procedure
* Renamed from domainId to Id
* Added and implemented GetDomainByOrganizationId
* Completed GetDomainByOrgId endpoint and started work on verify domain endpoint
* Updated the OrganizationDomain update procedure
* Added delete command and include other endpoints in the controller
* Remove test item from controller
* Remove test item from controller
* Changed access to allow admin, owners and manage sso roles
* Added stored procedure to get unverified domains by nextrundate
* Renamed stored procedure name
* Added domain verification service interface
* Added GetManyByNextRunDate to repository
* Added verification domain service implementation
* changed logic for setting the initial value for the NextRunCount
* This commit should be signed using my SSH key
* Renamed NextRunCount to JobRunCount
* Renamed NextRunCount to JobRunCount on mysql
* Renamed NextRunCount to JobRunCount on postgres
* Removed chaining pattern and added logic to get next run date
* Lint fix
* Implemented EF core version on the repository
* Created background job implementation and logic
* popped stash
* Updated stored procedure and EF script
* Lint fix
* Added logic to set next job count and the next run date when a verification is false
* Added logic to set next job count and the next run date when a verification is false
* Updated stored procedure name on repository
* Removed test trigger
* Lint fix
* Added trigger for job
* Added job count update after successful domain verification
* Lint fix
* Lint fix
* [SG-682] Add Event Log Entries to Organization Domain (#2492)
* Added domain name property to Event related objects
* Added organization domain claiming event types
* Created migration script and updated related event scripts to include domanName
* Added EF Migrations
* Renamed postres script file extension
* Added DomainName property to response model
* Added abstraction to interface
* Added system name to enum
* dotnet formattinfg fix
* Added events to organization domain actions
* Added LastCheckedDate property to domain
* Migrations and stored procedure updates with new column
* Added new stored procedure to get domain by org id and domain name
* Log organization domain event abstract method
* Ef migrattion to add new LastCheckedDate column
* Added duplicate domain exception
* Modified create command to include domain verification and last checked date and renamed methods used
* removed variable
* changed service lifetime
* Renamed trigger
* Initialed property in constructor
* Ensured domain name is stored as lower case
* Fixed suggestions from review
* Fixed suggestions from review
* Return Conflict Status on Organization Domain APIs (#2498)
* Added conflict response to end point to help translate error message on the client better
* Added conflict response to end point to help translate error message on the client better
* Set message with exception message or generic message
* Added last check date to response model (#2499)
* Fix/Check to throw exception when domain is claimed by another organization (#2503)
* Added check to ensure domain claimed by another organization cannot be verified
* Made error message consistent
* [SG-660] Organization Domain Maintenance (#2502)
* Added email template
* Mail service abstraction and implementation
* Mail template model
* Initial delete job commit
* Added SPs to get all unverifed domains after 72 hours and another to delete unverified domains after 7 days
* Moved all organization domain scripts to single file
* Added new scripts implementation for sqlserver and EF core
* Renamed service
* Formatting fix
* Added background service to send warning email and delete expired domains
* Renamed variable
* Added implementation for email warning to organization admins and for deleting expired domains after 7 days
* Added formatting
* Modified read if expired script to limit result to 4 days
* Added send mail abstract method and implementation
* Model used in build mail body
* Completed maintenace service
* Added comment to make logic clear
* Fixed cron expression (#2505)
* Modified procedure and methods to handle flexible verification adn expiration period (#2517)
* Merged with master
* [SG-908] Unit Tests for Organization Domain Claiming Feature (#2522)
* added test controlleer class
* added unit test for create command
* Added query tests
* Added tests for delete and verify command
* Formated code and added some more unit tests
* Fixed lint
* Added log event assertion to create command tests
* Added log event assertion to delete command tests
* Added unit tests for organization domain controller
* Added unit tests for organization domain service
* Modified test after merge
* fixed comment
* fixed comment
* fixed lint
* Defect/SG-977 - Org domain event logs missing details (#2573)
* SG-977 - (1) Refactor EventSystemUser.SSO to be EventSystemUser.DomainVerification to better match SCIM property and for easier display and translation on web client (2) Add new DeviceType of Server to be used on SCIM and Domain Verification logs so event log will show Server as client.
* SG-977 - SCIM bugfix - Restoring / Revoking user access via Jumpcloud activation / suspension did not properly log the events as SCIM events so the client side showed Unknown for both Client and Member.
* Run autoformat to fix lint errors
* SG-977 - Fixed broken test due to new device type logic in event service
* SG-976 - Add admin log and clean up log verbiage for domain verification (#2574)
* SG-976 - Add admin log and clean up log verbiage for domain verification
* SG-976 - (1) Use logInformation extension without exception (2) Clarify verbiage of logs
* SG-955 - On domain verification error or failure, set last checked da… (#2541)
* SG-955 - On domain verification error or failure, set last checked date on the org domain.
* SG-955 - Refactoring VerifyOrganizationDomain event logging to avoid duplication and increase efficiency (based on Gbubemi's PR feedback)
* Org Domain Background Verification service - set last checked date (#2599)
* Refactored OrganizationDomain repository to work with latest changes on code base
* Fixed formatting
* [SG-957] Cannot Delete Organizations due to FK Constraint (#2602)
* Added stored procedure to fix FX contstraint issue when deleting an organization
* Update stored procedures related to organization delete with OrganizationDomain_OrganizationDelete SP
* Fixed formatting
* Updated SP
* SG-990 - Log expired domains that are going to be deleted.
* Fix lint errors with auto format
* /home/runner/work/server/server/src/Core/OrganizationFeatures/OrganizationServiceCollectionExtensions.cs(107,2): error FINALNEWLINE: Fix final newline. Insert '\n'.
* Added missing bracket to fix compile error.
* Added imports for Domain Claiming classes that were lost on merge.
* Fixing broken unit tests + adding proper behavior for newly added SCIM logic changing device type
* Fix lint errors again
* Included domain name set in constructor (#2618)
* [SG-1001] Error Thrown When Verifying Sub Domains (#2621)
* Renamed exception to a more generic name that receives error message from the dns client and also added updates to job count and next run date
* Improved error logs by adding dns client error message
* Fixed formatting
* [SG-1001] Added event logs when a domain is not verified due to thrown exception (#2623)
* Added eevent logs when a domain is not verified due to thrown exception
* Fixed formatting
* Org Domain Verification - Small refactor to improve method/model name… (#2641)
* Org Domain Verification - Small refactor to improve method/model names and method locations - required refactoring of controller routes (I confirmed all behavior still functional)
* Fixed organization test controller issue
* Fixed lint
* Autoformat org domain controller
* Removing whitespace for lint argh, why does Rider not do this.
---------
Co-authored-by: gbubemismith <gsmithwalter@gmail.com>
* Tweak name of Request model to match Response model for ClaimedOrgDomain call
* [SG-1009] Users with Custom Role and "Manage SSO" permission don't receive verification failed email (#2645)
* Modified condition to pick up unverified domains after said period
* Fix to get emails of custom users with manage sso rights
* Formatted code
* Removed return that made background job exit on successful validation (#2648)
* [SG-1014] Unit Tests for Get Organization Sso Details (#2655)
* Added unit tests for GetOrgDomainSsoDetails
* renamed variable
* Adjust OrganizationDomainSsoDetails_ReadByEmail to use outer join so … (#2657)
* Adjust OrganizationDomainSsoDetails_ReadByEmail to use outer join so that claimed domain results will come back if an org has not yet setup a policy
* Removed migration as not needed
* Updated OrganizationDomainSsoDetails_ReadByEmail from original creation migration to use outer join & handle null policy results (and still return results)
* Fixed lint formatting
---------
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
Co-authored-by: Todd Martin <tmartin@bitwarden.com>
* [SG-549] Commit Initial AuthRequest Repository (#2174)
* Model Passwordless
* Scaffold database for Passwordless
* Implement SQL Repository
* [SG-167] Base Passwordless API (#2185)
* Implement Passwordless notifications
* Implement Controller
* Add documentation to BaseRequestValidator
* Register AuthRequestRepo
* Remove ExpirationDate from the AuthRequest table
* [SG-407] Create job to delete expired requests (#2187)
* chore: init
* remove exp date
* fix: log name
* [SG-167] Added fingerprint phrase to response model. (#2233)
* Remove FailedLoginAttempt logic
* Block unknown devices
* Add EF Support for passwordless
* Got SignalR working for responses
* Added delete job method to EF repo
* Implement a GetMany API endpoint for AuthRequests
* Ran dotnet format
* Fix a merge issues
* Redated migration scripts
* tried sorting sqlproj
* Remove FailedLoginAttempts from SQL
* Groom Postgres script
* Remove extra commas from migration script
* Correct isSpent()
* [SG-167] Adde identity validation for passwordless requests. Registered IAuthRepository.
* [SG-167] Added origin of the request to response model
* Use display name for device identifier in response
* Add datetime conversions back to postgres migration script
* [SG-655] Add anonymous endpoint for checking if a device & user combo match
* [review] Consolidate error conditions
Co-authored-by: Brandon Maharaj <107377945+BrandonM-Bitwarden@users.noreply.github.com>
Co-authored-by: André Filipe da Silva Bispo <andrefsbispo@hotmail.com>
Co-authored-by: André Bispo <abispo@bitwarden.com>
* Families for enterprise/split up organization sponsorship service (#1829)
* Split OrganizationSponsorshipService into commands
* Use tokenable for token validation
* Use interfaces to set up for DI
* Use commands over services
* Move service tests to command tests
* Value types can't be null
* Run dotnet format
* Update src/Core/OrganizationFeatures/OrganizationSponsorships/FamiliesForEnterprise/CancelSponsorshipCommand.cs
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Fix controller tests
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Families for enterprise/split up organization sponsorship service (#1875)
* Split OrganizationSponsorshipService into commands
* Use tokenable for token validation
* Use interfaces to set up for DI
* Use commands over services
* Move service tests to command tests
* Value types can't be null
* Run dotnet format
* Update src/Core/OrganizationFeatures/OrganizationSponsorships/FamiliesForEnterprise/CancelSponsorshipCommand.cs
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Fix controller tests
* Split create and send sponsorships
* Split up create sponsorship
* Add self hosted commands to dependency injection
* Add field to store cloud billing sync key on self host instances
* Fix typo
* Fix data protector purpose of sponsorship offers
* Split cloud and selfhosted sponsorship offer tokenable
* Generate offer from self hosted with all necessary auth data
* Add Required properties to constructor
* Split up cancel sponsorship command
* Split revoke sponsorship command between cloud and self hosted
* Fix/f4e multiple sponsorships (#1838)
* Use sponosorship from validate to redeem
* Update tests
* Format
* Remove sponsorship service
* Run dotnet format
* Fix self hosted only controller attribute
* Clean up file structure and fixes
* Remove unneeded tokenables
* Remove obsolete commands
* Do not require file/class prefix if unnecessary
* Update Organizaiton sprocs
* Remove unnecessary models
* Fix tests
* Generalize LicenseService path calculation
Use async file read and deserialization
* Use interfaces for testability
* Remove unused usings
* Correct test direction
* Test license reading
* remove unused usings
* Format
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Improve DataProtectorTokenFactory test coverage (#1884)
* Add encstring to server
* Test factory
Co-authored-by: Carlos Muentes <cmuentes@bitwarden.com>
* Format
* Remove SymmetricKeyProtectedString
Not needed
* Set ForcInvalid
Co-authored-by: Carlos Muentes <cmuentes@bitwarden.com>
* Feature/self f4e/api keys (#1896)
* Add in ApiKey
* Work on API Key table
* Work on apikey table
* Fix response model
* Work on information for UI
* Work on last sync date
* Work on sync status
* Work on auth
* Work on tokenable
* Work on merge
* Add custom requirement
* Add policy
* Run formatting
* Work on EF Migrations
* Work on OrganizationConnection
* Work on database
* Work on additional database table
* Run formatting
* Small fixes
* More cleanup
* Cleanup
* Add RevisionDate
* Add GO
* Finish Sql project
* Add newlines
* Fix stored proc file
* Fix sqlproj
* Add newlines
* Fix table
* Add navigation property
* Delete Connections when organization is deleted
* Add connection validation
* Start adding ID column
* Work on ID column
* Work on SQL migration
* Work on migrations
* Run formatting
* Fix test build
* Fix sprocs
* Work on migrations
* Fix Create table
* Fix sproc
* Add prints to migration
* Add default value
* Update EF migrations
* Formatting
* Add to integration tests
* Minor fixes
* Formatting
* Cleanup
* Address PR feedback
* Address more PR feedback
* Fix formatting
* Fix formatting
* Fix
* Address PR feedback
* Remove accidential change
* Fix SQL build
* Run formatting
* Address PR feedback
* Add sync data to OrganizationUserOrgDetails
* Add comments
* Remove OrganizationConnectionService interface
* Remove unused using
* Address PR feedback
* Formatting
* Minor fix
* Feature/self f4e/update db (#1930)
* Fix migration
* Fix TimesRenewed
* Add comments
* Make two properties non-nullable
* Remove need for SponsoredOrg on SH (#1934)
* Remove need for SponsoredOrg on SH
* Add Family prefix
* Add check for enterprise org on BillingSync key (#1936)
* [PS-10] Feature/sponsorships removed at end of term (#1938)
* Rename commands to min unique names
* Inject revoke command based on self hosting
* WIP: Remove/Revoke marks to delete
* Complete WIP
* Improve remove/revoke tests
* PR review
* Fail validation if sponsorship has failed to sync for 6 months
* Feature/do not accept old self host sponsorships (#1939)
* Do not accept >6mo old self-hosted sponsorships
* Give disabled grace period of 3 months
* Fix issues of Sql.proj differing from migration outcome (#1942)
* Fix issues of Sql.proj differing from migration outcome
* Yoink int tests
* Add missing assert helpers
* Feature/org sponsorship sync (#1922)
* Self-hosted side sync first pass
TODO:
* flush out org sponsorship model
* implement cloud side
* process cloud-side response and update self-hosted records
* sync scaffolding second pass
* remove list of Org User ids from sync and begin work on SelfHostedRevokeSponsorship
* allow authenticated http calls from server to return a result
* update models
* add logic for sync and change offer email template
* add billing sync key and hide CreateSponsorship without user
* fix tests
* add job scheduling
* add authorize attributes to endpoints
* separate models into data/model and request/response
* batch sync more, add EnableCloudCommunication for testing
* send emails in bulk
* make userId and sponsorshipType non nullable
* batch more on self hosted side of sync
* remove TODOs and formatting
* changed logic of cloud sync
* let BaseIdentityClientService handle all logging
* call sync from scheduled job on self host
* create bulk db operations for OrganizationSponsorships
* remove SponsoredOrgId from sync, return default from server http call
* validate BillingSyncKey during sync
revert changes to CreateSponsorshipCommand
* revert changes to ICreateSponsorshipCommand
* add some tests
* add DeleteExpiredSponsorshipsJob
* add cloud sync test
* remove extra method
* formatting
* prevent new sponsorships from disabled orgs
* update packages
* - pulled out send sponsorship command dependency from sync on cloud
- don't throw error when sponsorships are empty
- formatting
* formatting models
* more formatting
* remove licensingService dependency from selfhosted sync
* use installation urls and formatting
* create constructor for RequestModel and formatting
* add date parameter to OrganizationSponsorship_DeleteExpired
* add new migration
* formatting
* rename OrganizationCreateSponsorshipRequestModel to OrganizationSponsorshipCreateRequestModel
* prevent whole sync from failing if one sponsorship type is unsupported
* deserialize config and billingsynckey from org connection
* alter log message when sync disabled
* Add grace period to disabled orgs
* return early on self hosted if there are no sponsorships in database
* rename BillingSyncConfig
* send sponsorship offers from controller
* allow config to be a null object
* better exception handling in sync scheduler
* add ef migrations
* formatting
* fix tests
* fix validate test
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Fix OrganizationApiKey issues (#1941)
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Feature/org sponsorship self hosted tests (#1947)
* Self-hosted side sync first pass
TODO:
* flush out org sponsorship model
* implement cloud side
* process cloud-side response and update self-hosted records
* sync scaffolding second pass
* remove list of Org User ids from sync and begin work on SelfHostedRevokeSponsorship
* allow authenticated http calls from server to return a result
* update models
* add logic for sync and change offer email template
* add billing sync key and hide CreateSponsorship without user
* fix tests
* add job scheduling
* add authorize attributes to endpoints
* separate models into data/model and request/response
* batch sync more, add EnableCloudCommunication for testing
* send emails in bulk
* make userId and sponsorshipType non nullable
* batch more on self hosted side of sync
* remove TODOs and formatting
* changed logic of cloud sync
* let BaseIdentityClientService handle all logging
* call sync from scheduled job on self host
* create bulk db operations for OrganizationSponsorships
* remove SponsoredOrgId from sync, return default from server http call
* validate BillingSyncKey during sync
revert changes to CreateSponsorshipCommand
* revert changes to ICreateSponsorshipCommand
* add some tests
* add DeleteExpiredSponsorshipsJob
* add cloud sync test
* remove extra method
* formatting
* prevent new sponsorships from disabled orgs
* update packages
* - pulled out send sponsorship command dependency from sync on cloud
- don't throw error when sponsorships are empty
- formatting
* formatting models
* more formatting
* remove licensingService dependency from selfhosted sync
* use installation urls and formatting
* create constructor for RequestModel and formatting
* add date parameter to OrganizationSponsorship_DeleteExpired
* add new migration
* formatting
* rename OrganizationCreateSponsorshipRequestModel to OrganizationSponsorshipCreateRequestModel
* prevent whole sync from failing if one sponsorship type is unsupported
* deserialize config and billingsynckey from org connection
* add mockHttp nuget package and use httpclientfactory
* fix current tests
* WIP of creating tests
* WIP of new self hosted tests
* WIP self hosted tests
* finish self hosted tests
* formatting
* format of interface
* remove extra config file
* added newlines
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Fix Organization_DeleteById (#1950)
* Fix Organization_Delete
* Fix L
* [PS-4] block enterprise user from sponsoring itself (#1943)
* [PS-248] Feature/add connections enabled endpoint (#1953)
* Move Organization models to sub namespaces
* Add Organization Connection api endpoints
* Get all connections rather than just enabled ones
* Add missing services to DI
* pluralize private api endpoints
* Add type protection to org connection request/response
* Fix route
* Use nullable Id to signify no connection
* Test Get Connections enabled
* Fix data discoverer
* Also drop this sproc for rerunning
* Id is the OUTPUT of create sprocs
* Fix connection config parsing
* Linter fixes
* update sqlproj file name
* Use param xdocs on methods
* Simplify controller path attribute
* Use JsonDocument to avoid escaped json in our response/request strings
* Fix JsonDoc tests
* Linter fixes
* Fix ApiKey Command and add tests (#1949)
* Fix ApiKey command
* Formatting
* Fix test failures introduced in #1943 (#1957)
* Remove "Did you know?" copy from emails. (#1962)
* Remove "Did you know"
* Remove jsonIf helper
* Feature/fix send single sponsorship offer email (#1956)
* Fix sponsorship offer email
* Do not sanitize org name
* PR feedback
* Feature/f4e sync event [PS-75] (#1963)
* Create sponsorship sync event type
* Add InstallationId to Event model
* Add combinatorics-based test case generators
* Log sponsorships sync event on sync
* Linter and test fixes
* Fix failing test
* Migrate sprocs and view
* Remove unused `using`s
* [PS-190] Add manual sync trigger in self hosted (#1955)
* WIP add button to admin project for billing sync
* add connection table to view page
* minor fixes for self hosted side of sync
* fixes number of bugs for cloud side of sync
* deserialize before returning for some reason
* add json attributes to return models
* list of sponsorships parameter is immutable, add secondary list
* change sproc name
* add error handling
* Fix tests
* modify call to connection
* Update src/Admin/Controllers/OrganizationsController.cs
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* undo change to sproc name
* simplify logic
* Update src/Core/OrganizationFeatures/OrganizationSponsorships/FamiliesForEnterprise/Cloud/CloudSyncSponsorshipsCommand.cs
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* register services despite if self hosted or cloud
* remove json properties
* revert merge conflict
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Update OrganizationSponsorship valid until when updating org expirati… (#1966)
* Update OrganizationSponsorship valid until when updating org expiration date
* Linter fixes
* [PS-7] change revert email copy and add ValidUntil to sponsorship (#1965)
* change revert email copy and add ValidUntil to sponsorship
* add 15 days if no ValidUntil
* Chore/merge/self hosted families for enterprise (#1972)
* Log swallowed HttpRequestExceptions (#1866)
Co-authored-by: Hinton <oscar@oscarhinton.com>
* Allow for utilization of readonly db connection (#1937)
* Bump the pin of the download-artifacts action to bypass the broken GitHub api (#1952)
* Bumped version to 1.48.0 (#1958)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* [EC-160] Give Provider Users access to all org ciphers and collections (#1959)
* Bumped version to 1.48.1 (#1961)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Avoid sending "user need confirmation" emails when there are no org admins (#1960)
* Remove noncompliant users for new policies (#1951)
* [PS-284] Allow installation clients to not need a user. (#1968)
* Allow installation clients to not need a user.
* Run formatting
Co-authored-by: Andrei <30410186+Manolachi@users.noreply.github.com>
Co-authored-by: Hinton <oscar@oscarhinton.com>
Co-authored-by: sneakernuts <671942+sneakernuts@users.noreply.github.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Justin Baur <136baur@gmail.com>
* Fix/license file not found (#1974)
* Handle null license
* Throw hint message if license is not found by the admin project.
* Use CloudOrganizationId from Connection config
* Change test to support change
* Fix test
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Feature/f4e selfhosted rename migration to .sql (#1971)
* rename migration to .sql
* format
* Add unit tests to self host F4E (#1975)
* Work on tests
* Added more tests
* Run linting
* Address PR feedback
* Fix AssertRecent
* Linting
* Fixed empty tests
* Fix/misc self hosted f4e (#1973)
* Allow setting of ApiUri
* Return updates sponsorshipsData objects
* Bind arguments by name
* Greedy load sponsorships to email.
When upsert was called, it creates Ids on _all_ records, which meant
that the lazy-evaluation from this call always returned an empty list.
* add scope for sync command DI in job. simplify error logic
* update the sync job to get CloudOrgId from the BillingSyncKey
Co-authored-by: Jacob Fink <jfink@bitwarden.com>
* Chore/merge/self hosted families for enterprise (#1987)
* Log swallowed HttpRequestExceptions (#1866)
Co-authored-by: Hinton <oscar@oscarhinton.com>
* Allow for utilization of readonly db connection (#1937)
* Bump the pin of the download-artifacts action to bypass the broken GitHub api (#1952)
* Bumped version to 1.48.0 (#1958)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* [EC-160] Give Provider Users access to all org ciphers and collections (#1959)
* Bumped version to 1.48.1 (#1961)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Avoid sending "user need confirmation" emails when there are no org admins (#1960)
* Remove noncompliant users for new policies (#1951)
* [PS-284] Allow installation clients to not need a user. (#1968)
* Allow installation clients to not need a user.
* Run formatting
* Use accept flow for sponsorship offers (#1964)
* PS-82 check send 2FA email for new devices on TwoFactorController send-email-login (#1977)
* [Bug] Skip WebAuthn 2fa event logs during login flow (#1978)
* [Bug] Supress WebAuthn 2fa event logs during login process
* Formatting
* Simplified method call with new paramter input
* Update RealIps Description (#1980)
Describe the syntax of the real_ips configuration key with an example, to prevent type errors in the `setup` container when parsing `config.yml`
* add proper URI validation to duo host (#1984)
* captcha scores (#1967)
* captcha scores
* some api fixes
* check bot on captcha attribute
* Update src/Core/Services/Implementations/HCaptchaValidationService.cs
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
* ensure no path specific in duo host (#1985)
Co-authored-by: Andrei <30410186+Manolachi@users.noreply.github.com>
Co-authored-by: Hinton <oscar@oscarhinton.com>
Co-authored-by: sneakernuts <671942+sneakernuts@users.noreply.github.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Justin Baur <136baur@gmail.com>
Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
Co-authored-by: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com>
Co-authored-by: Jordan Cooks <notnamed@users.noreply.github.com>
Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
* Address feedback (#1990)
Co-authored-by: Justin Baur <admin@justinbaur.com>
Co-authored-by: Carlos Muentes <cmuentes@bitwarden.com>
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Co-authored-by: Justin Baur <136baur@gmail.com>
Co-authored-by: Andrei <30410186+Manolachi@users.noreply.github.com>
Co-authored-by: Hinton <oscar@oscarhinton.com>
Co-authored-by: sneakernuts <671942+sneakernuts@users.noreply.github.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
Co-authored-by: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com>
Co-authored-by: Jordan Cooks <notnamed@users.noreply.github.com>
Co-authored-by: Kyle Spearrin <kspearrin@users.noreply.github.com>
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
* Increase organization max seat size from 30k to 2b (#1274)
* Increase organization max seat size from 30k to 2b
* PR review. Do not modify unless state matches expected
* Organization sync simultaneous event reporting (#1275)
* Split up azure messages according to max size
* Allow simultaneous login of organization user events
* Early resolve small event lists
* Clarify logic
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Improve readability
This comes at the cost of multiple serializations, but the
improvement in wire-time should more than make up for this
on message where serialization time matters
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Queue emails (#1286)
* Extract common Azure queue methods
* Do not use internal entity framework namespace
* Prefer IEnumerable to IList unless needed
All of these implementations were just using `Count == 1`,
which is easily replicated. This will be used when abstracting Azure queues
* Add model for azure queue message
* Abstract Azure queue for reuse
* Creat service to enqueue mail messages for later processing
Azure queue mail service uses Azure queues.
Blocking just blocks until all the work is done -- This is
how emailing works today
* Provide mail queue service to DI
* Queue organization invite emails for later processing
All emails can later be added to this queue
* Create Admin hosted service to process enqueued mail messages
* Prefer constructors to static generators
* Mass delete organization users (#1287)
* Add delete many to Organization Users
* Correct formatting
* Remove erroneous migration
* Clarify parameter name
* Formatting fixes
* Simplify bump account revision sproc
* Formatting fixes
* Match file names to objects
* Indicate if large import is expected
* Early pull all existing users we were planning on inviting (#1290)
* Early pull all existing users we were planning on inviting
* Improve sproc name
* Batch upsert org users (#1289)
* Add UpsertMany sprocs to OrganizationUser
* Add method to create TVPs from any object.
Uses DbOrder attribute to generate.
Sproc will fail unless TVP column order matches that of the db type
* Combine migrations
* Correct formatting
* Include sql objects in sql project
* Keep consisten parameter names
* Batch deletes for performance
* Correct formatting
* consolidate migrations
* Use batch methods in OrganizationImport
* Declare @BatchSize
* Transaction names limited to 32 chars
Drop sproc before creating it if it exists
* Update import tests
* Allow for more users in org upgrades
* Fix formatting
* Improve class hierarchy structure
* Use name tuple types
* Fix formatting
* Front load all reflection
* Format constructor
* Simplify ToTvp as class-specific extension
Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
* Get limited life attachment download URL
This change limits url download to a 1min lifetime.
This requires moving to a new container to allow for non-public blob
access.
Clients will have to call GetAttachmentData api function to receive the download
URL. For backwards compatibility, attachment URLs are still present, but will not
work for attachments stored in non-public access blobs.
* Make GlobalSettings interface for testing
* Test LocalAttachmentStorageService equivalence
* Remove comment
* Add missing globalSettings using
* Simplify default attachment container
* Default to attachments containe for existing methods
A new upload method will be made for uploading to attachments-v2.
For compatibility for clients which don't use these new methods, we need
to still use the old container. The new container will be used only for
new uploads
* Remove Default MetaData fixture.
* Keep attachments container blob-level security for all instances
* Close unclosed FileStream
* Favor default value for noop services
* Add Disable Send policy
* Test DisableSend policy
* PR Review
* Update tests for using CurrentContext
This required making an interface for CurrentContext and mocking out
the members used. The interface can be expanded as needed for tests.
I moved CurrentContext to a folder, which changes the namespace
and causes a lot of file touches, but most are just adding a reference
* Fix failing test
* Update exemption to include all exempt users
* Move all CurrentContext usages to ICurrentContext
* PR review. Match messaging with Web