Chnage password
This commit is contained in:
parent
baa2eac499
commit
b85b295cb5
@ -14,7 +14,7 @@
|
|||||||
<Label x:Name="ErrorMessageLabel"
|
<Label x:Name="ErrorMessageLabel"
|
||||||
TextColor="#d22"
|
TextColor="#d22"
|
||||||
Margin="0,10" HorizontalOptions="Center"/>
|
Margin="0,10" HorizontalOptions="Center"/>
|
||||||
<Button Text="AuthorizeAsync" Command="{Binding AuthorizeCommand}"/>
|
<Button Text="Authorize" Command="{Binding AuthorizeCommand}"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ContentPage.Content>
|
</ContentPage.Content>
|
||||||
</ContentPage>
|
</ContentPage>
|
@ -41,7 +41,7 @@ namespace SafeMessageStorage.Pages
|
|||||||
|
|
||||||
private async void _viewModel_AuthorizationSucceeded(object sender, EventArgs e)
|
private async void _viewModel_AuthorizationSucceeded(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
await Navigation.PushAsync(new MessagesListPage(_messageStorage));
|
await Navigation.PushAsync(new MessagesListPage(_messageStorage, _authorizationService));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void _viewModel_AuthorizationFailed(object sender, string e)
|
private async void _viewModel_AuthorizationFailed(object sender, string e)
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:Class="SafeMessageStorage.Pages.ChangePasswordPage"
|
||||||
|
Title="Change password">
|
||||||
|
<ContentPage.Content>
|
||||||
|
<StackLayout VerticalOptions="CenterAndExpand" Padding="40">
|
||||||
|
<Label Text="Current password"/>
|
||||||
|
<Entry IsPassword="True" Text="{Binding CurrentPassword}"/>
|
||||||
|
<Label Text="New password"/>
|
||||||
|
<Entry IsPassword="True" Text="{Binding NewPassword}"/>
|
||||||
|
<Label Text="Repeat password"/>
|
||||||
|
<Entry IsPassword="True" Text="{Binding RepeatPassword}"/>
|
||||||
|
<Label x:Name="ErrorMessageLabel"
|
||||||
|
TextColor="#d22"
|
||||||
|
Margin="0,10" HorizontalOptions="Center"/>
|
||||||
|
<Button Text="Set password" Command="{Binding SetPasswordCommand}"/>
|
||||||
|
</StackLayout>
|
||||||
|
</ContentPage.Content>
|
||||||
|
</ContentPage>
|
@ -0,0 +1,44 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using SafeMessageStorage.Services.AuthorizationService;
|
||||||
|
using SafeMessageStorage.Services.MessageStorageService;
|
||||||
|
using SafeMessageStorage.ViewModels;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Xamarin.Forms.Xaml;
|
||||||
|
|
||||||
|
namespace SafeMessageStorage.Pages
|
||||||
|
{
|
||||||
|
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||||
|
public partial class ChangePasswordPage : ContentPage
|
||||||
|
{
|
||||||
|
private ChangePasswordViewModel _viewModel => this.BindingContext as ChangePasswordViewModel;
|
||||||
|
private IMessageStorageService _messageStorage;
|
||||||
|
public ChangePasswordPage(IAuthorizationService authorizationService, IMessageStorageService messageStorage)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
BindingContext = new ChangePasswordViewModel(authorizationService);
|
||||||
|
_messageStorage = messageStorage;
|
||||||
|
|
||||||
|
_viewModel.PasswordSetFailed += _viewModel_PasswordSetFailed;
|
||||||
|
_viewModel.PasswordSetSucceeded += _viewModel_PasswordSetSucceeded;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void _viewModel_PasswordSetSucceeded(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
await _messageStorage.DeleteAllMessagesAsync();
|
||||||
|
await Navigation.PopAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void _viewModel_PasswordSetFailed(object sender, string e)
|
||||||
|
{
|
||||||
|
ErrorMessageLabel.Text = e;
|
||||||
|
await ErrorMessageLabel.FadeTo(1);
|
||||||
|
await Task.Delay(1000);
|
||||||
|
await ErrorMessageLabel.FadeTo(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -17,24 +17,6 @@
|
|||||||
<TextCell Text="{Binding Title}" />
|
<TextCell Text="{Binding Title}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
|
|
||||||
<!--Custom View Cells-->
|
|
||||||
<!--
|
|
||||||
<ListView.ItemTemplate>
|
|
||||||
<DataTemplate>
|
|
||||||
<ViewCell>
|
|
||||||
<StackLayout>
|
|
||||||
<Label Text="{Binding Text}"
|
|
||||||
d:Text="{Binding .}"
|
|
||||||
Style="{DynamicResource ListItemTextStyle}" />
|
|
||||||
<Label Text="{Binding Detail}"
|
|
||||||
d:Text="Detail"
|
|
||||||
Style="{DynamicResource ListItemDetailTextStyle}"/>
|
|
||||||
</StackLayout>
|
|
||||||
</ViewCell>
|
|
||||||
</DataTemplate>
|
|
||||||
</ListView.ItemTemplate>
|
|
||||||
-->
|
|
||||||
</ListView>
|
</ListView>
|
||||||
<Button Text="AddMessage" Clicked="Button_OnClicked"></Button>
|
<Button Text="AddMessage" Clicked="Button_OnClicked"></Button>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
@ -4,6 +4,7 @@ using System.ComponentModel;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using SafeMessageStorage.Models;
|
using SafeMessageStorage.Models;
|
||||||
|
using SafeMessageStorage.Services.AuthorizationService;
|
||||||
using SafeMessageStorage.Services.MessageStorageService;
|
using SafeMessageStorage.Services.MessageStorageService;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
using Xamarin.Forms.Xaml;
|
using Xamarin.Forms.Xaml;
|
||||||
@ -14,16 +15,25 @@ namespace SafeMessageStorage.Pages
|
|||||||
public partial class MessagesListPage : ContentPage
|
public partial class MessagesListPage : ContentPage
|
||||||
{
|
{
|
||||||
private IMessageStorageService _messageStorage;
|
private IMessageStorageService _messageStorage;
|
||||||
|
private IAuthorizationService _authorizationService;
|
||||||
private bool _initialized;
|
private bool _initialized;
|
||||||
public ObservableCollection<Message> Messages { get; set; }
|
public ObservableCollection<Message> Messages { get; set; }
|
||||||
|
|
||||||
public MessagesListPage(IMessageStorageService messageStorage)
|
public MessagesListPage(IMessageStorageService messageStorage, IAuthorizationService authorizationService)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_messageStorage = messageStorage;
|
_messageStorage = messageStorage;
|
||||||
|
_authorizationService = authorizationService;
|
||||||
Messages = new ObservableCollection<Message>();
|
Messages = new ObservableCollection<Message>();
|
||||||
|
|
||||||
BindingContext = this;
|
BindingContext = this;
|
||||||
|
|
||||||
|
ToolbarItems.Add(new ToolbarItem("Change password", "", () => ChangePassword()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void ChangePassword()
|
||||||
|
{
|
||||||
|
await Navigation.PushAsync(new ChangePasswordPage(_authorizationService, _messageStorage));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async void OnAppearing()
|
protected override async void OnAppearing()
|
||||||
|
@ -22,6 +22,9 @@
|
|||||||
<EmbeddedResource Update="Pages\AuthorizationPage.xaml">
|
<EmbeddedResource Update="Pages\AuthorizationPage.xaml">
|
||||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="Pages\ChangePasswordPage.xaml">
|
||||||
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Update="Pages\MessageDetailPage.xaml">
|
<EmbeddedResource Update="Pages\MessageDetailPage.xaml">
|
||||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
@ -49,7 +49,9 @@ namespace SafeMessageStorage.Services.AuthorizationService
|
|||||||
if (!passwordMatch)
|
if (!passwordMatch)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
await Xamarin.Essentials.SecureStorage.SetAsync(_passwordKey, _hashProvider.GetHashString(newPassword));
|
var passwordHash = _hashProvider.GetHashString(newPassword);
|
||||||
|
AuthorizedUserHash = passwordHash;
|
||||||
|
await Xamarin.Essentials.SecureStorage.SetAsync(_passwordKey, passwordHash);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using SafeMessageStorage.Services.AuthorizationService;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace SafeMessageStorage.ViewModels
|
||||||
|
{
|
||||||
|
public class ChangePasswordViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private IAuthorizationService _authorizationService;
|
||||||
|
|
||||||
|
public ChangePasswordViewModel(IAuthorizationService authorizationService)
|
||||||
|
{
|
||||||
|
_authorizationService = authorizationService;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string _currentPassword;
|
||||||
|
public string CurrentPassword
|
||||||
|
{
|
||||||
|
get { return _currentPassword; }
|
||||||
|
set { _currentPassword = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private string _newPassword;
|
||||||
|
public string NewPassword
|
||||||
|
{
|
||||||
|
get { return _newPassword; }
|
||||||
|
set { _newPassword = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private string _repeatPassword;
|
||||||
|
public string RepeatPassword
|
||||||
|
{
|
||||||
|
get { return _repeatPassword; }
|
||||||
|
set { _repeatPassword = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler<string> PasswordSetFailed;
|
||||||
|
public event EventHandler PasswordSetSucceeded;
|
||||||
|
|
||||||
|
public ICommand SetPasswordCommand => new Command(() => SetPassword(_currentPassword,_newPassword, _repeatPassword));
|
||||||
|
|
||||||
|
private async void SetPassword(string currentPassword, string password, string repeatPassword)
|
||||||
|
{
|
||||||
|
if(!await _authorizationService.AuthorizeAsync(currentPassword))
|
||||||
|
PasswordSetFailed?.Invoke(this, "Current password doesn't match");
|
||||||
|
|
||||||
|
if (!password.Equals(repeatPassword))
|
||||||
|
{
|
||||||
|
PasswordSetFailed?.Invoke(this, "Passwords are not equal");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (await _authorizationService.ChangePasswordAsync(currentPassword, password))
|
||||||
|
PasswordSetSucceeded?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user