1
0
mirror of https://github.com/bitwarden/mobile synced 2026-01-07 19:13:19 +00:00
Files
mobile/src/Core/Services/OrganizationService.cs
2023-02-20 14:49:20 +00:00

82 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Bit.Core.Abstractions;
using Bit.Core.Exceptions;
using Bit.Core.Models.Data;
using Bit.Core.Models.Domain;
using Bit.Core.Models.Request;
using Bit.Core.Models.Response;
using Bit.Core.Utilities;
namespace Bit.Core.Services
{
public class OrganizationService : IOrganizationService
{
private readonly IStateService _stateService;
private readonly IApiService _apiService;
public OrganizationService(IStateService stateService, IApiService apiService)
{
_stateService = stateService;
_apiService = apiService;
}
public async Task<Organization> GetAsync(string id)
{
var organizations = await _stateService.GetOrganizationsAsync();
if (organizations == null || !organizations.ContainsKey(id))
{
return null;
}
return new Organization(organizations[id]);
}
public async Task<Organization> GetByIdentifierAsync(string identifier)
{
var organizations = await GetAllAsync();
if (organizations == null || organizations.Count == 0)
{
return null;
}
return organizations.FirstOrDefault(o => o.Identifier == identifier);
}
public async Task<List<Organization>> GetAllAsync(string userId = null)
{
var organizations = await _stateService.GetOrganizationsAsync(userId);
return organizations?.Select(o => new Organization(o.Value)).ToList() ?? new List<Organization>();
}
public async Task ReplaceAsync(Dictionary<string, OrganizationData> organizations)
{
await _stateService.SetOrganizationsAsync(organizations);
}
public async Task ClearAllAsync(string userId)
{
await _stateService.SetOrganizationsAsync(null, userId);
}
public async Task<OrganizationDomainSsoDetailsResponse> GetClaimedOrganizationDomainAsync(string userEmail)
{
try
{
if (string.IsNullOrEmpty(userEmail))
{
return null;
}
return await _apiService.GetOrgDomainSsoDetailsAsync(userEmail);
}
catch (ApiException ex) when (ex.Error?.StatusCode == HttpStatusCode.NotFound)
{
// this is a valid case so there is no need to show an error
return null;
}
}
}
}