using MediaBrowser.Model.Dto; using MediaBrowser.Model.Net; using MediaBrowser.UI.Controls; using System; using System.Threading.Tasks; namespace MediaBrowser.UI.Pages { /// /// Provides a base page for theme login pages /// public abstract class BaseLoginPage : BasePage { /// /// The _users /// private UserDto[] _users; /// /// Gets or sets the users. /// /// The users. public UserDto[] Users { get { return _users; } set { _users = value; OnPropertyChanged("Users"); } } /// /// Subclasses must provide the list that holds the users /// /// The items list. protected abstract ExtendedListBox ItemsList { get; } /// /// Raises the event. /// /// The instance containing the event data. protected override async void OnInitialized(EventArgs e) { base.OnInitialized(e); ItemsList.ItemInvoked += ItemsList_ItemInvoked; try { Users = await App.Instance.ApiClient.GetAllUsersAsync(); } catch (HttpException) { App.Instance.ShowErrorMessage("There was an error retrieving the list of users from the server."); } } /// /// Called when [loaded]. /// protected override void OnLoaded() { base.OnLoaded(); ClearBackdrops(); } /// /// Logs in a user when one is selected /// /// The sender. /// The e. async void ItemsList_ItemInvoked(object sender, ItemEventArgs e) { var user = (UserDto)e.Argument; try { await LoginUser(user); } catch (HttpException ex) { if (ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.Unauthorized) { App.Instance.ShowErrorMessage("Invalid username or password. Please try again.", caption: "Login Failure"); } else { App.Instance.ShowDefaultErrorMessage(); } } } /// /// Logs in a user and verifies their password /// /// The user. /// The password. /// Task{AuthenticationResult}. protected async Task LoginUser(UserDto user, string password) { await App.Instance.ApiClient.AuthenticateUserAsync(user.Id, password); App.Instance.CurrentUser = user; App.Instance.NavigateToHomePage(); } /// /// Logs in a user who does not have a password /// /// The user. /// Task{AuthenticationResult}. protected Task LoginUser(UserDto user) { return LoginUser(user, null); } } }