using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core.Commands; using Tango.Core.Cryptography; using Tango.MachineStudio.Common.Authentication; using Tango.MachineStudio.Common.Navigation; using Tango.MachineStudio.Common.Notifications; using Tango.Settings; using Tango.SharedUI; namespace Tango.MachineStudio.UI.ViewModels { /// /// Represents the Machine Studio login view, view model. /// /// public class LoginViewVM : ViewModel { private IAuthenticationProvider _authenticationProvider; private INavigationManager _navigationManager; private INotificationProvider _notificationProvider; private Rfc2898Cryptographer cryptographer; private String _email; /// /// Gets or sets the email. /// [Required(ErrorMessage = "Email is required")] [EmailAddress(ErrorMessage = "Please enter a valid email")] public String Email { get { return _email; } set { _email = value; RaisePropertyChangedAuto(); } } private bool _rememberMe; /// /// Gets or sets a value indicating whether to remember the last user email and password. /// public bool RememberMe { get { return _rememberMe; } set { _rememberMe = value; RaisePropertyChangedAuto(); } } /// /// Gets or sets the login command. /// public RelayCommand LoginCommand { get; set; } /// /// Initializes a new instance of the class. /// /// The authentication provider. /// The navigation manager. /// The notification provider. public LoginViewVM(IAuthenticationProvider authenticationProvider, INavigationManager navigationManager, INotificationProvider notificationProvider) { _notificationProvider = notificationProvider; _navigationManager = navigationManager; _authenticationProvider = authenticationProvider; LoginCommand = new RelayCommand(Login); cryptographer = new Rfc2898Cryptographer(); Email = SettingsManager.Default.MachineStudio.LastLoginEmail; RememberMe = SettingsManager.Default.MachineStudio.RememberMe; } /// /// Logins the requested user. /// /// The password. private void Login(String password) { if (Validate()) { try { _authenticationProvider.Login(Email, password); _navigationManager.NavigateTo(NavigationView.MainView); SettingsManager.Default.MachineStudio.LastLoginEmail = Email; SettingsManager.Default.MachineStudio.RememberMe = RememberMe; SettingsManager.Default.MachineStudio.LastLoginPassword = RememberMe ? cryptographer.Encrypt(password) : null; SettingsManager.SaveDefaultSettings(); } catch { _notificationProvider.ShowError("Invalid credentials. Please try again."); } } } } }