202 lines
5.1 KiB
C#
202 lines
5.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Net.Http.Json;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
|
|
namespace LSFE.MobApp.ViewModels.Authentication
|
|
{
|
|
public class ForgotPasswordVM : INotifyPropertyChanged
|
|
{
|
|
private readonly HttpClient _httpClient;
|
|
private readonly Services.INavigationService _navigationService;
|
|
|
|
private string _username;
|
|
private string _errorMessage;
|
|
private bool _hasError;
|
|
private bool _isLoading;
|
|
private bool _isFormVisible = true;
|
|
private bool _isSuccessVisible = false;
|
|
|
|
public ForgotPasswordVM(Services.INavigationService navigationService)
|
|
{
|
|
_httpClient = new HttpClient
|
|
{
|
|
BaseAddress = new Uri("https://your-api-url.com/api/") // Configure your API URL
|
|
};
|
|
_navigationService = navigationService;
|
|
|
|
SendResetCommand = new Command(async () => await SendResetAsync(), () => CanSendReset());
|
|
BackCommand = new Command(async () => await NavigateBackAsync());
|
|
}
|
|
|
|
#region Properties
|
|
|
|
public string Username
|
|
{
|
|
get => _username;
|
|
set
|
|
{
|
|
_username = value;
|
|
OnPropertyChanged();
|
|
((Command)SendResetCommand).ChangeCanExecute();
|
|
}
|
|
}
|
|
|
|
public string ErrorMessage
|
|
{
|
|
get => _errorMessage;
|
|
set
|
|
{
|
|
_errorMessage = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public bool HasError
|
|
{
|
|
get => _hasError;
|
|
set
|
|
{
|
|
_hasError = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public bool IsLoading
|
|
{
|
|
get => _isLoading;
|
|
set
|
|
{
|
|
_isLoading = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public bool IsFormVisible
|
|
{
|
|
get => _isFormVisible;
|
|
set
|
|
{
|
|
_isFormVisible = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public bool IsSuccessVisible
|
|
{
|
|
get => _isSuccessVisible;
|
|
set
|
|
{
|
|
_isSuccessVisible = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Commands
|
|
|
|
public ICommand SendResetCommand { get; }
|
|
public ICommand BackCommand { get; }
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
private bool CanSendReset()
|
|
{
|
|
return !string.IsNullOrWhiteSpace(Username) && !IsLoading;
|
|
}
|
|
|
|
private async Task SendResetAsync()
|
|
{
|
|
if (IsLoading) return;
|
|
|
|
try
|
|
{
|
|
IsLoading = true;
|
|
HasError = false;
|
|
ErrorMessage = string.Empty;
|
|
|
|
// Create reset request
|
|
var resetRequest = new ForgotPasswordRequest
|
|
{
|
|
Username = Username
|
|
};
|
|
|
|
// Call API
|
|
var response = await _httpClient.PostAsJsonAsync("auth/forgot-password", resetRequest);
|
|
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
// Show success message
|
|
IsFormVisible = false;
|
|
IsSuccessVisible = true;
|
|
}
|
|
else
|
|
{
|
|
// Handle error response
|
|
if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
|
|
{
|
|
ShowError("Username not found");
|
|
}
|
|
else
|
|
{
|
|
ShowError("Failed to send reset instructions. Please try again.");
|
|
}
|
|
}
|
|
}
|
|
catch (HttpRequestException)
|
|
{
|
|
ShowError("Unable to connect to server. Check your internet connection.");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowError($"An error occurred: {ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
IsLoading = false;
|
|
}
|
|
}
|
|
|
|
private async Task NavigateBackAsync()
|
|
{
|
|
await Shell.Current.GoToAsync("..");
|
|
}
|
|
|
|
private void ShowError(string message)
|
|
{
|
|
ErrorMessage = message;
|
|
HasError = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region INotifyPropertyChanged
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
#region Models
|
|
|
|
public class ForgotPasswordRequest
|
|
{
|
|
public string Username { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
}
|