mirror of
https://github.com/bitwarden/mobile
synced 2025-12-05 23:53:33 +00:00
Compare commits
1 Commits
v2023.12.0
...
beeep/envi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f2f96de9d |
@@ -95,6 +95,14 @@
|
|||||||
<Label
|
<Label
|
||||||
Text="{u:I18n CustomEnvironmentFooter}"
|
Text="{u:I18n CustomEnvironmentFooter}"
|
||||||
StyleClass="box-footer-label" />
|
StyleClass="box-footer-label" />
|
||||||
|
<StackLayout StyleClass="box-row">
|
||||||
|
<Button Text="{u:I18n LoadFromFile}"
|
||||||
|
StyleClass="btn-primary"
|
||||||
|
Command="{Binding LoadFromFileCommand}" />
|
||||||
|
<Button Text="{u:I18n Clear}"
|
||||||
|
StyleClass="btn-secondary"
|
||||||
|
Command="{Binding ClearCommand}" />
|
||||||
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Bit.App.Resources;
|
using Bit.App.Resources;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Models.Data;
|
using Bit.Core.Models.Data;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Xamarin.CommunityToolkit.ObjectModel;
|
using Xamarin.CommunityToolkit.ObjectModel;
|
||||||
|
using Xamarin.Essentials;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@@ -27,9 +31,13 @@ namespace Bit.App.Pages
|
|||||||
IconsUrl = _environmentService.IconsUrl;
|
IconsUrl = _environmentService.IconsUrl;
|
||||||
NotificationsUrls = _environmentService.NotificationsUrl;
|
NotificationsUrls = _environmentService.NotificationsUrl;
|
||||||
SubmitCommand = new AsyncCommand(SubmitAsync, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
SubmitCommand = new AsyncCommand(SubmitAsync, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
||||||
|
LoadFromFileCommand = new AsyncCommand(LoadEnvironmentsFromFile, onException: ex => OnSubmitException(ex), allowsMultipleExecutions: false);
|
||||||
|
ClearCommand = new Command(ClearAllUrls);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICommand SubmitCommand { get; }
|
public ICommand SubmitCommand { get; }
|
||||||
|
public ICommand LoadFromFileCommand { get; }
|
||||||
|
public ICommand ClearCommand { get; }
|
||||||
public string BaseUrl { get; set; }
|
public string BaseUrl { get; set; }
|
||||||
public string ApiUrl { get; set; }
|
public string ApiUrl { get; set; }
|
||||||
public string IdentityUrl { get; set; }
|
public string IdentityUrl { get; set; }
|
||||||
@@ -87,5 +95,75 @@ namespace Bit.App.Pages
|
|||||||
_logger.Value.Exception(ex);
|
_logger.Value.Exception(ex);
|
||||||
Page.DisplayAlert(AppResources.AnErrorHasOccurred, AppResources.GenericErrorMessage, AppResources.Ok);
|
Page.DisplayAlert(AppResources.AnErrorHasOccurred, AppResources.GenericErrorMessage, AppResources.Ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task LoadEnvironmentsFromFile()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string jsonString;
|
||||||
|
var result = await FilePicker.PickAsync(new PickOptions
|
||||||
|
{
|
||||||
|
PickerTitle = "This a test to pick files"
|
||||||
|
});
|
||||||
|
if (result != null)
|
||||||
|
{
|
||||||
|
if (result.FileName.EndsWith("json", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
result.FileName.EndsWith("txt", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
var stream = await result.OpenReadAsync();
|
||||||
|
using (var reader = new System.IO.StreamReader(stream))
|
||||||
|
{
|
||||||
|
jsonString = reader.ReadToEnd();
|
||||||
|
}
|
||||||
|
var envUrls = JsonConvert.DeserializeObject<EnvironmentsData>(jsonString);
|
||||||
|
BaseUrl = envUrls.Base;
|
||||||
|
ApiUrl = envUrls.Api;
|
||||||
|
IdentityUrl = envUrls.Identity;
|
||||||
|
WebVaultUrl = envUrls.Vault;
|
||||||
|
IconsUrl = envUrls.Icons;
|
||||||
|
NotificationsUrls = envUrls.Notifications;
|
||||||
|
NotifyUrlsChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
HandleException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ClearAllUrls()
|
||||||
|
{
|
||||||
|
BaseUrl = string.Empty;
|
||||||
|
ApiUrl = string.Empty;
|
||||||
|
IdentityUrl = string.Empty;
|
||||||
|
WebVaultUrl = string.Empty;
|
||||||
|
IconsUrl = string.Empty;
|
||||||
|
NotificationsUrls = string.Empty;
|
||||||
|
NotifyUrlsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void NotifyUrlsChanged() {
|
||||||
|
TriggerPropertyChanged(nameof(BaseUrl), new[]
|
||||||
|
{
|
||||||
|
nameof(ApiUrl),
|
||||||
|
nameof(IdentityUrl),
|
||||||
|
nameof(WebVaultUrl),
|
||||||
|
nameof(IconsUrl),
|
||||||
|
nameof(NotificationsUrls)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EnvironmentsData
|
||||||
|
{
|
||||||
|
public string Base { get; set; }
|
||||||
|
public string Admin { get; set; }
|
||||||
|
public string Api { get; set; }
|
||||||
|
public string Identity { get; set; }
|
||||||
|
public string Icons { get; set; }
|
||||||
|
public string Notifications { get; set; }
|
||||||
|
public string Sso { get; set; }
|
||||||
|
public string Vault { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
src/App/Resources/AppResources.Designer.cs
generated
9
src/App/Resources/AppResources.Designer.cs
generated
@@ -3541,6 +3541,15 @@ namespace Bit.App.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Load from file.
|
||||||
|
/// </summary>
|
||||||
|
public static string LoadFromFile {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LoadFromFile", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Loading.
|
/// Looks up a localized string similar to Loading.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -2637,4 +2637,7 @@ Do you want to switch to this account?</value>
|
|||||||
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
|
||||||
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve</value>
|
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="LoadFromFile" xml:space="preserve">
|
||||||
|
<value>Load from file</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2,8 +2,19 @@
|
|||||||
{
|
{
|
||||||
public class EnvironmentUrlData
|
public class EnvironmentUrlData
|
||||||
{
|
{
|
||||||
public static EnvironmentUrlData DefaultUS = new EnvironmentUrlData { Base = "https://vault.bitwarden.com" };
|
public static EnvironmentUrlData DefaultUS = new EnvironmentUrlData
|
||||||
public static EnvironmentUrlData DefaultEU = new EnvironmentUrlData { Base = "https://vault.bitwarden.eu" };
|
{
|
||||||
|
Base = "https://vault.bitwarden.com",
|
||||||
|
Notifications = "https://notifications.bitwarden.com",
|
||||||
|
Icons = "https://icons.bitwarden.com",
|
||||||
|
|
||||||
|
};
|
||||||
|
public static EnvironmentUrlData DefaultEU = new EnvironmentUrlData
|
||||||
|
{
|
||||||
|
Base = "https://vault.bitwarden.eu",
|
||||||
|
Notifications = "https://notifications.bitwarden.eu",
|
||||||
|
Icons = "https://icons.bitwarden.eu",
|
||||||
|
};
|
||||||
|
|
||||||
public string Base { get; set; }
|
public string Base { get; set; }
|
||||||
public string Api { get; set; }
|
public string Api { get; set; }
|
||||||
|
|||||||
Reference in New Issue
Block a user