1
0
mirror of https://github.com/bitwarden/mobile synced 2026-01-11 04:53:52 +00:00
Files
mobile/src/Core/Services/EnvironmentService.cs
Federico Maccaroni 0a0cb7093b Merge branch 'master' into feature/maui-migration
# Conflicts:
#	.github/workflows/build.yml
2023-12-04 09:59:52 -03:00

126 lines
4.2 KiB
C#

using Bit.Core.Abstractions;
using Bit.Core.Models.Data;
using Bit.Core.Utilities;
using BwRegion = Bit.Core.Enums.Region;
namespace Bit.Core.Services
{
public class EnvironmentService : IEnvironmentService
{
private const string DEFAULT_WEB_VAULT_URL = "https://vault.bitwarden.com";
private const string DEFAULT_WEB_SEND_URL = "https://send.bitwarden.com/#";
private readonly IApiService _apiService;
private readonly IStateService _stateService;
private readonly IConditionedAwaiterManager _conditionedAwaiterManager;
public EnvironmentService(
IApiService apiService,
IStateService stateService,
IConditionedAwaiterManager conditionedAwaiterManager)
{
_apiService = apiService;
_stateService = stateService;
_conditionedAwaiterManager = conditionedAwaiterManager;
}
public string BaseUrl { get; set; }
public string WebVaultUrl { get; set; }
public string ApiUrl { get; set; }
public string IdentityUrl { get; set; }
public string IconsUrl { get; set; }
public string NotificationsUrl { get; set; }
public string EventsUrl { get; set; }
public BwRegion SelectedRegion { get; set; }
public string GetWebVaultUrl(bool returnNullIfDefault = false)
{
if (!string.IsNullOrWhiteSpace(WebVaultUrl))
{
return WebVaultUrl;
}
if (!string.IsNullOrWhiteSpace(BaseUrl))
{
return BaseUrl;
}
return returnNullIfDefault ? (string)null : DEFAULT_WEB_VAULT_URL;
}
public string GetWebSendUrl()
{
return GetWebVaultUrl(true) is string webVaultUrl ? $"{webVaultUrl}/#/send/" : DEFAULT_WEB_SEND_URL;
}
public string GetCurrentDomain()
{
return new EnvironmentUrlData
{
WebVault = WebVaultUrl,
Base = BaseUrl,
Api = ApiUrl,
Identity = IdentityUrl
}.GetDomainOrHostname();
}
public async Task SetUrlsFromStorageAsync()
{
try
{
var region = await _stateService.GetActiveUserRegionAsync();
var urls = await _stateService.GetEnvironmentUrlsAsync();
urls ??= await _stateService.GetPreAuthEnvironmentUrlsAsync();
if (urls == null || urls.IsEmpty || region is null)
{
await SetRegionAsync(BwRegion.US);
_conditionedAwaiterManager.SetAsCompleted(AwaiterPrecondition.EnvironmentUrlsInited);
return;
}
await SetRegionAsync(region.Value, urls);
_conditionedAwaiterManager.SetAsCompleted(AwaiterPrecondition.EnvironmentUrlsInited);
}
catch (System.Exception ex)
{
_conditionedAwaiterManager.SetException(AwaiterPrecondition.EnvironmentUrlsInited, ex);
throw;
}
}
public async Task<EnvironmentUrlData> SetRegionAsync(BwRegion region, EnvironmentUrlData selfHostedUrls = null)
{
EnvironmentUrlData urls;
if (region == BwRegion.SelfHosted)
{
// If user saves a self-hosted region with empty fields, default to US
if (selfHostedUrls.IsEmpty)
{
return await SetRegionAsync(BwRegion.US);
}
urls = selfHostedUrls.FormatUrls();
}
else
{
urls = region.GetUrls();
}
SelectedRegion = region;
await _stateService.SetPreAuthRegionAsync(region);
await _stateService.SetPreAuthEnvironmentUrlsAsync(urls);
BaseUrl = urls.Base;
WebVaultUrl = urls.WebVault;
ApiUrl = urls.Api;
IdentityUrl = urls.Identity;
IconsUrl = urls.Icons;
NotificationsUrl = urls.Notifications;
EventsUrl = urls.Events;
_apiService.SetUrls(urls);
return urls;
}
}
}