environment page

This commit is contained in:
Kyle Spearrin 2019-05-02 12:20:56 -04:00
parent 9965121011
commit faf690d899
8 changed files with 218 additions and 21 deletions

View file

@ -22,6 +22,9 @@
</ItemGroup>
<ItemGroup>
<Compile Update="Pages\Accounts\EnvironmentPage.xaml.cs">
<DependentUpon>EnvironmentPage.xaml</DependentUpon>
</Compile>
<Compile Update="Pages\Accounts\HintPage.xaml.cs">
<DependentUpon>HintPage.xaml</DependentUpon>
</Compile>

View file

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8" ?>
<pages:BaseContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Bit.App.Pages.EnvironmentPage"
xmlns:pages="clr-namespace:Bit.App.Pages"
xmlns:u="clr-namespace:Bit.App.Utilities"
x:DataType="pages:EnvironmentPageViewModel"
Title="{Binding PageTitle}">
<ContentPage.BindingContext>
<pages:EnvironmentPageViewModel />
</ContentPage.BindingContext>
<ContentPage.ToolbarItems>
<ToolbarItem Text="{u:I18n Save}" Clicked="Submit_Clicked" />
</ContentPage.ToolbarItems>
<ScrollView>
<StackLayout Spacing="20">
<StackLayout StyleClass="box">
<StackLayout StyleClass="box-row-header">
<Label Text="{u:I18n SelfHostedEnvironment}"
StyleClass="box-header, box-header-platform" />
</StackLayout>
<StackLayout StyleClass="box-row">
<Label
Text="{u:I18n ServerUrl}"
StyleClass="box-label" />
<Entry
Text="{Binding BaseUrl}"
Keyboard="Url"
Placeholder="ex. https://bitwarden.company.com"
StyleClass="box-value" />
</StackLayout>
<Label
Text="{u:I18n SelfHostedEnvironmentFooter}"
StyleClass="box-footer-label" />
</StackLayout>
<StackLayout StyleClass="box">
<StackLayout StyleClass="box-row-header">
<Label Text="{u:I18n CustomEnvironment}"
StyleClass="box-header, box-header-platform" />
</StackLayout>
<StackLayout StyleClass="box-row">
<Label
Text="{u:I18n WebVaultUrl}"
StyleClass="box-label" />
<Entry
Text="{Binding WebVaultUrl}"
Keyboard="Url"
StyleClass="box-value" />
</StackLayout>
<StackLayout StyleClass="box-row">
<Label
Text="{u:I18n ApiUrl}"
StyleClass="box-label" />
<Entry
Text="{Binding ApiUrl}"
Keyboard="Url"
StyleClass="box-value" />
</StackLayout>
<StackLayout StyleClass="box-row">
<Label
Text="{u:I18n IdentityUrl}"
StyleClass="box-label" />
<Entry
Text="{Binding IdentityUrl}"
Keyboard="Url"
StyleClass="box-value" />
</StackLayout>
<StackLayout StyleClass="box-row">
<Label
Text="{u:I18n IconsUrl}"
StyleClass="box-label" />
<Entry
Text="{Binding IconsUrl}"
Keyboard="Url"
StyleClass="box-value" />
</StackLayout>
<Label
Text="{u:I18n CustomEnvironmentFooter}"
StyleClass="box-footer-label" />
</StackLayout>
</StackLayout>
</ScrollView>
</pages:BaseContentPage>

View file

@ -0,0 +1,21 @@
using System;
namespace Bit.App.Pages
{
public partial class EnvironmentPage : BaseContentPage
{
private EnvironmentPageViewModel _vm;
public EnvironmentPage()
{
InitializeComponent();
_vm = BindingContext as EnvironmentPageViewModel;
_vm.Page = this;
}
private async void Submit_Clicked(object sender, EventArgs e)
{
await _vm.SubmitAsync();
}
}
}

View file

@ -0,0 +1,58 @@
using Bit.App.Resources;
using Bit.Core.Abstractions;
using Bit.Core.Utilities;
using System.Threading.Tasks;
namespace Bit.App.Pages
{
public class EnvironmentPageViewModel : BaseViewModel
{
private readonly IPlatformUtilsService _platformUtilsService;
private readonly IEnvironmentService _environmentService;
public EnvironmentPageViewModel()
{
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
_environmentService = ServiceContainer.Resolve<IEnvironmentService>("environmentService");
PageTitle = AppResources.Settings;
BaseUrl = _environmentService.BaseUrl;
WebVaultUrl = _environmentService.WebVaultUrl;
ApiUrl = _environmentService.ApiUrl;
IdentityUrl = _environmentService.IdentityUrl;
IconsUrl = _environmentService.IconsUrl;
NotificationsUrls = _environmentService.NotificationsUrl;
}
public string BaseUrl { get; set; }
public string ApiUrl { get; set; }
public string IdentityUrl { get; set; }
public string WebVaultUrl { get; set; }
public string IconsUrl { get; set; }
public string NotificationsUrls { get; set; }
public async Task SubmitAsync()
{
var resUrls = await _environmentService.SetUrlsAsync(new Core.Models.Data.EnvironmentUrlData
{
Base = BaseUrl,
Api = ApiUrl,
Identity = IdentityUrl,
WebVault = WebVaultUrl,
Icons = IconsUrl,
Notifications = NotificationsUrls
});
// re-set urls since service can change them, ex: prefixing https://
BaseUrl = resUrls.Base;
WebVaultUrl = resUrls.WebVault;
ApiUrl = resUrls.Api;
IdentityUrl = resUrls.Identity;
IconsUrl = resUrls.Icons;
NotificationsUrls = resUrls.Notifications;
_platformUtilsService.ShowToast("success", null, AppResources.EnvironmentSaved);
await Page.Navigation.PopModalAsync();
}
}
}

View file

@ -4,23 +4,24 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Bit.App.Pages.HomePage"
xmlns:pages="clr-namespace:Bit.App.Pages"
xmlns:controls="clr-namespace:Bit.App.Controls"
xmlns:u="clr-namespace:Bit.App.Utilities"
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
x:DataType="pages:HomeViewModel"
Title="{Binding PageTitle}">
<ContentPage.BindingContext>
<pages:HomeViewModel />
</ContentPage.BindingContext>
<StackLayout>
<Button Text="&#xf2b9;"
class="fa"
HorizontalOptions="Start"></Button>
<StackLayout VerticalOptions="CenterAndExpand">
<StackLayout Spacing="0" Padding="10, 5">
<controls:FaButton Text="&#xf013;"
StyleClass="btn-muted, btn-icon, btn-icon-platform"
HorizontalOptions="Start"
Clicked="Settings_Clicked" />
<StackLayout VerticalOptions="CenterAndExpand" Spacing="15">
<Image Source="logo.png"
VerticalOptions="Center" />
<Label Text="{u:I18n LoginOrCreateNewAccount}"
class="text-lg"
StyleClass="text-lg"
HorizontalTextAlignment="Center"></Label>
<Button Text="{u:I18n LogIn}"
Clicked="LogIn_Clicked"></Button>

View file

@ -1,10 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Bit.App.Pages
{
@ -24,5 +19,10 @@ namespace Bit.App.Pages
{
Navigation.PushModalAsync(new NavigationPage(new RegisterPage()));
}
private void Settings_Clicked(object sender, EventArgs e)
{
Navigation.PushModalAsync(new NavigationPage(new EnvironmentPage()));
}
}
}

View file

@ -7,7 +7,18 @@
<Setter Property="Margin"
Value="-4, 0" />
</Style>
<!-- Buttons -->
<Style TargetType="Button"
ApplyToDerivedTypes="True"
Class="btn-icon-platform">
<Setter Property="WidthRequest"
Value="37" />
<Setter Property="FontSize"
Value="25" />
</Style>
<!-- List -->
<Style TargetType="ListView"

View file

@ -12,41 +12,56 @@
Value="{StaticResource TextColor}" />
</Style>
<Style TargetType="Label"
x:Key="text-default">
Class="text-default">
<Setter Property="TextColor"
Value="{StaticResource TextColor}" />
</Style>
<Style TargetType="Label"
x:Key="text-muted">
Class="text-muted">
<Setter Property="TextColor"
Value="{StaticResource MutedColor}" />
</Style>
<Style TargetType="Label"
x:Key="text-danger">
Class="text-danger">
<Setter Property="TextColor"
Value="{StaticResource DangerColor}" />
</Style>
<Style TargetType="Label"
x:Key="text-success">
Class="text-success">
<Setter Property="TextColor"
Value="{StaticResource SuccessColor}" />
</Style>
<Style TargetType="Label"
x:Key="text-sm">
Class="text-sm">
<Setter Property="FontSize"
Value="Small" />
</Style>
<Style TargetType="Label"
x:Key="text-lg">
Class="text-lg">
<Setter Property="FontSize"
Value="Large" />
</Style>
<Style TargetType="Label"
x:Key="text-bold">
Class="text-bold">
<Setter Property="FontAttributes"
Value="Bold" />
</Style>
<!-- Buttons -->
<Style TargetType="Button"
ApplyToDerivedTypes="True"
Class="btn-icon">
<Setter Property="BackgroundColor"
Value="Transparent" />
</Style>
<Style TargetType="Button"
Class="btn-muted"
ApplyToDerivedTypes="True">
<Setter Property="TextColor"
Value="{StaticResource MutedColor}" />
</Style>
<!-- List -->
<Style TargetType="ListView"
Class="list">