using Bit.Core.Enums; using Bit.Core.Repositories; namespace Bit.Core.Auth.Sso; /// /// TODO : PM-28846 review data structures as they relate to this query /// Query to retrieve the SSO organization identifier that a user is a confirmed member of. /// public class UserSsoOrganizationIdentifierQuery( IOrganizationUserRepository _organizationUserRepository, IOrganizationRepository _organizationRepository) : IUserSsoOrganizationIdentifierQuery { /// public async Task GetSsoOrganizationIdentifierAsync(Guid userId) { // Get all confirmed organization memberships for the user var organizationUsers = await _organizationUserRepository.GetManyByUserAsync(userId); // we can only confidently return the correct SsoOrganizationIdentifier if there is exactly one Organization. // The user must also be in the Confirmed status. var confirmedOrgUsers = organizationUsers.Where(ou => ou.Status == OrganizationUserStatusType.Confirmed); if (confirmedOrgUsers.Count() != 1) { return null; } var confirmedOrgUser = confirmedOrgUsers.Single(); var organization = await _organizationRepository.GetByIdAsync(confirmedOrgUser.OrganizationId); if (organization == null) { return null; } return organization.Identifier; } }