mirror of
https://github.com/bitwarden/android.git
synced 2024-12-24 18:08:26 +03:00
allow setting vault url for environment
This commit is contained in:
parent
32a8676572
commit
910f0083cd
7 changed files with 67 additions and 2 deletions
|
@ -11,6 +11,7 @@ namespace Bit.App.Abstractions
|
||||||
bool AutofillPasswordField { get; set; }
|
bool AutofillPasswordField { get; set; }
|
||||||
string SecurityStamp { get; set; }
|
string SecurityStamp { get; set; }
|
||||||
string BaseUrl { get; set; }
|
string BaseUrl { get; set; }
|
||||||
|
string VaultUrl { get; set; }
|
||||||
string ApiUrl { get; set; }
|
string ApiUrl { get; set; }
|
||||||
string IdentityUrl { get; set; }
|
string IdentityUrl { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
public const string LastSync = "other:lastSync";
|
public const string LastSync = "other:lastSync";
|
||||||
public const string LastBuildKey = "LastBuild";
|
public const string LastBuildKey = "LastBuild";
|
||||||
public const string BaseUrl = "other:baseUrl";
|
public const string BaseUrl = "other:baseUrl";
|
||||||
|
public const string VaultUrl = "other:vaultUrl";
|
||||||
public const string ApiUrl = "other:apiUrl";
|
public const string ApiUrl = "other:apiUrl";
|
||||||
public const string IdentityUrl = "other:identityUrl";
|
public const string IdentityUrl = "other:identityUrl";
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ namespace Bit.App.Pages
|
||||||
}
|
}
|
||||||
|
|
||||||
public FormEntryCell BaseUrlCell { get; set; }
|
public FormEntryCell BaseUrlCell { get; set; }
|
||||||
|
public FormEntryCell VaultUrlCell { get; set; }
|
||||||
public FormEntryCell ApiUrlCell { get; set; }
|
public FormEntryCell ApiUrlCell { get; set; }
|
||||||
public FormEntryCell IdentityUrlCell { get; set; }
|
public FormEntryCell IdentityUrlCell { get; set; }
|
||||||
public StackLayout StackLayout { get; set; }
|
public StackLayout StackLayout { get; set; }
|
||||||
|
@ -40,7 +41,9 @@ namespace Bit.App.Pages
|
||||||
IdentityUrlCell.Entry.Text = _appSettings.IdentityUrl;
|
IdentityUrlCell.Entry.Text = _appSettings.IdentityUrl;
|
||||||
ApiUrlCell = new FormEntryCell(AppResources.ApiUrl, nextElement: IdentityUrlCell.Entry, entryKeyboard: Keyboard.Url);
|
ApiUrlCell = new FormEntryCell(AppResources.ApiUrl, nextElement: IdentityUrlCell.Entry, entryKeyboard: Keyboard.Url);
|
||||||
ApiUrlCell.Entry.Text = _appSettings.ApiUrl;
|
ApiUrlCell.Entry.Text = _appSettings.ApiUrl;
|
||||||
BaseUrlCell = new FormEntryCell(AppResources.ServerUrl, nextElement: ApiUrlCell.Entry, entryKeyboard: Keyboard.Url);
|
VaultUrlCell = new FormEntryCell(AppResources.VaultUrl, nextElement: ApiUrlCell.Entry, entryKeyboard: Keyboard.Url);
|
||||||
|
VaultUrlCell.Entry.Text = _appSettings.VaultUrl;
|
||||||
|
BaseUrlCell = new FormEntryCell(AppResources.ServerUrl, nextElement: VaultUrlCell.Entry, entryKeyboard: Keyboard.Url);
|
||||||
BaseUrlCell.Entry.Text = _appSettings.BaseUrl;
|
BaseUrlCell.Entry.Text = _appSettings.BaseUrl;
|
||||||
|
|
||||||
var table = new FormTableView
|
var table = new FormTableView
|
||||||
|
@ -69,6 +72,7 @@ namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
new TableSection(AppResources.CustomEnvironment)
|
new TableSection(AppResources.CustomEnvironment)
|
||||||
{
|
{
|
||||||
|
VaultUrlCell,
|
||||||
ApiUrlCell,
|
ApiUrlCell,
|
||||||
IdentityUrlCell
|
IdentityUrlCell
|
||||||
}
|
}
|
||||||
|
@ -120,6 +124,7 @@ namespace Bit.App.Pages
|
||||||
BaseUrlCell.InitEvents();
|
BaseUrlCell.InitEvents();
|
||||||
IdentityUrlCell.InitEvents();
|
IdentityUrlCell.InitEvents();
|
||||||
ApiUrlCell.InitEvents();
|
ApiUrlCell.InitEvents();
|
||||||
|
VaultUrlCell.InitEvents();
|
||||||
StackLayout.LayoutChanged += Layout_LayoutChanged;
|
StackLayout.LayoutChanged += Layout_LayoutChanged;
|
||||||
BaseUrlCell.Entry.FocusWithDelay();
|
BaseUrlCell.Entry.FocusWithDelay();
|
||||||
}
|
}
|
||||||
|
@ -129,6 +134,7 @@ namespace Bit.App.Pages
|
||||||
BaseUrlCell.Dispose();
|
BaseUrlCell.Dispose();
|
||||||
IdentityUrlCell.Dispose();
|
IdentityUrlCell.Dispose();
|
||||||
ApiUrlCell.Dispose();
|
ApiUrlCell.Dispose();
|
||||||
|
VaultUrlCell.Dispose();
|
||||||
StackLayout.LayoutChanged -= Layout_LayoutChanged;
|
StackLayout.LayoutChanged -= Layout_LayoutChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,6 +162,20 @@ namespace Bit.App.Pages
|
||||||
BaseUrlCell.Entry.Text = null;
|
BaseUrlCell.Entry.Text = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!string.IsNullOrWhiteSpace(VaultUrlCell.Entry.Text))
|
||||||
|
{
|
||||||
|
VaultUrlCell.Entry.Text = FixUrl(VaultUrlCell.Entry.Text);
|
||||||
|
if(!Uri.TryCreate(VaultUrlCell.Entry.Text, UriKind.Absolute, out result))
|
||||||
|
{
|
||||||
|
_userDialogs.Alert(string.Format(AppResources.FormattedIncorrectly, AppResources.VaultUrl));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VaultUrlCell.Entry.Text = null;
|
||||||
|
}
|
||||||
|
|
||||||
if(!string.IsNullOrWhiteSpace(ApiUrlCell.Entry.Text))
|
if(!string.IsNullOrWhiteSpace(ApiUrlCell.Entry.Text))
|
||||||
{
|
{
|
||||||
ApiUrlCell.Entry.Text = FixUrl(ApiUrlCell.Entry.Text);
|
ApiUrlCell.Entry.Text = FixUrl(ApiUrlCell.Entry.Text);
|
||||||
|
@ -187,6 +207,7 @@ namespace Bit.App.Pages
|
||||||
_appSettings.BaseUrl = BaseUrlCell.Entry.Text;
|
_appSettings.BaseUrl = BaseUrlCell.Entry.Text;
|
||||||
_appSettings.IdentityUrl = IdentityUrlCell.Entry.Text;
|
_appSettings.IdentityUrl = IdentityUrlCell.Entry.Text;
|
||||||
_appSettings.ApiUrl = ApiUrlCell.Entry.Text;
|
_appSettings.ApiUrl = ApiUrlCell.Entry.Text;
|
||||||
|
_appSettings.VaultUrl = VaultUrlCell.Entry.Text;
|
||||||
_userDialogs.Toast(AppResources.EnvironmentSaved);
|
_userDialogs.Toast(AppResources.EnvironmentSaved);
|
||||||
_googleAnalyticsService.TrackAppEvent("SetEnvironmentUrls");
|
_googleAnalyticsService.TrackAppEvent("SetEnvironmentUrls");
|
||||||
await Navigation.PopForDeviceAsync();
|
await Navigation.PopForDeviceAsync();
|
||||||
|
|
|
@ -26,6 +26,7 @@ namespace Bit.App.Pages
|
||||||
private IGoogleAnalyticsService _googleAnalyticsService;
|
private IGoogleAnalyticsService _googleAnalyticsService;
|
||||||
private ITwoFactorApiRepository _twoFactorApiRepository;
|
private ITwoFactorApiRepository _twoFactorApiRepository;
|
||||||
private IPushNotification _pushNotification;
|
private IPushNotification _pushNotification;
|
||||||
|
private IAppSettingsService _appSettingsService;
|
||||||
private readonly string _email;
|
private readonly string _email;
|
||||||
private readonly string _masterPasswordHash;
|
private readonly string _masterPasswordHash;
|
||||||
private readonly SymmetricCryptoKey _key;
|
private readonly SymmetricCryptoKey _key;
|
||||||
|
@ -48,6 +49,7 @@ namespace Bit.App.Pages
|
||||||
_authService = Resolver.Resolve<IAuthService>();
|
_authService = Resolver.Resolve<IAuthService>();
|
||||||
_userDialogs = Resolver.Resolve<IUserDialogs>();
|
_userDialogs = Resolver.Resolve<IUserDialogs>();
|
||||||
_syncService = Resolver.Resolve<ISyncService>();
|
_syncService = Resolver.Resolve<ISyncService>();
|
||||||
|
_appSettingsService = Resolver.Resolve<IAppSettingsService>();
|
||||||
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
|
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
|
||||||
_twoFactorApiRepository = Resolver.Resolve<ITwoFactorApiRepository>();
|
_twoFactorApiRepository = Resolver.Resolve<ITwoFactorApiRepository>();
|
||||||
_pushNotification = Resolver.Resolve<IPushNotification>();
|
_pushNotification = Resolver.Resolve<IPushNotification>();
|
||||||
|
@ -185,9 +187,19 @@ namespace Bit.App.Pages
|
||||||
var host = WebUtility.UrlEncode(duoParams["Host"].ToString());
|
var host = WebUtility.UrlEncode(duoParams["Host"].ToString());
|
||||||
var req = WebUtility.UrlEncode(duoParams["Signature"].ToString());
|
var req = WebUtility.UrlEncode(duoParams["Signature"].ToString());
|
||||||
|
|
||||||
|
var vaultUrl = "https://vault.bitwarden.com";
|
||||||
|
if(!string.IsNullOrWhiteSpace(_appSettingsService.BaseUrl))
|
||||||
|
{
|
||||||
|
vaultUrl = _appSettingsService.BaseUrl;
|
||||||
|
}
|
||||||
|
else if(!string.IsNullOrWhiteSpace(_appSettingsService.VaultUrl))
|
||||||
|
{
|
||||||
|
vaultUrl = _appSettingsService.VaultUrl;
|
||||||
|
}
|
||||||
|
|
||||||
var webView = new HybridWebView
|
var webView = new HybridWebView
|
||||||
{
|
{
|
||||||
Uri = $"https://vault.bitwarden.com/duo-connector.html?host={host}&request={req}",
|
Uri = $"{vaultUrl}/duo-connector.html?host={host}&request={req}",
|
||||||
HorizontalOptions = LayoutOptions.FillAndExpand,
|
HorizontalOptions = LayoutOptions.FillAndExpand,
|
||||||
VerticalOptions = LayoutOptions.FillAndExpand,
|
VerticalOptions = LayoutOptions.FillAndExpand,
|
||||||
MinimumHeightRequest = 400
|
MinimumHeightRequest = 400
|
||||||
|
|
9
src/App/Resources/AppResources.Designer.cs
generated
9
src/App/Resources/AppResources.Designer.cs
generated
|
@ -2392,6 +2392,15 @@ namespace Bit.App.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Vault Server URL.
|
||||||
|
/// </summary>
|
||||||
|
public static string VaultUrl {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("VaultUrl", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Verification Code.
|
/// Looks up a localized string similar to Verification Code.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1024,4 +1024,7 @@
|
||||||
<data name="ServerUrl" xml:space="preserve">
|
<data name="ServerUrl" xml:space="preserve">
|
||||||
<value>Server URL</value>
|
<value>Server URL</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="VaultUrl" xml:space="preserve">
|
||||||
|
<value>Vault Server URL</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -104,6 +104,24 @@ namespace Bit.App.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string VaultUrl
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _settings.GetValueOrDefault<string>(Constants.VaultUrl);
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if(value == null)
|
||||||
|
{
|
||||||
|
_settings.Remove(Constants.VaultUrl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_settings.AddOrUpdateValue(Constants.VaultUrl, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string ApiUrl
|
public string ApiUrl
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
Loading…
Reference in a new issue