BaseLoginPage.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using MediaBrowser.Model.Dto;
  2. using MediaBrowser.Model.Net;
  3. using MediaBrowser.UI.Controls;
  4. using System;
  5. using System.Threading.Tasks;
  6. namespace MediaBrowser.UI.Pages
  7. {
  8. /// <summary>
  9. /// Provides a base page for theme login pages
  10. /// </summary>
  11. public abstract class BaseLoginPage : BasePage
  12. {
  13. /// <summary>
  14. /// The _users
  15. /// </summary>
  16. private UserDto[] _users;
  17. /// <summary>
  18. /// Gets or sets the users.
  19. /// </summary>
  20. /// <value>The users.</value>
  21. public UserDto[] Users
  22. {
  23. get { return _users; }
  24. set
  25. {
  26. _users = value;
  27. OnPropertyChanged("Users");
  28. }
  29. }
  30. /// <summary>
  31. /// Subclasses must provide the list that holds the users
  32. /// </summary>
  33. /// <value>The items list.</value>
  34. protected abstract ExtendedListBox ItemsList { get; }
  35. /// <summary>
  36. /// Raises the <see cref="E:Initialized" /> event.
  37. /// </summary>
  38. /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
  39. protected override async void OnInitialized(EventArgs e)
  40. {
  41. base.OnInitialized(e);
  42. ItemsList.ItemInvoked += ItemsList_ItemInvoked;
  43. try
  44. {
  45. Users = await App.Instance.ApiClient.GetAllUsersAsync();
  46. }
  47. catch (HttpException)
  48. {
  49. App.Instance.ShowErrorMessage("There was an error retrieving the list of users from the server.");
  50. }
  51. }
  52. /// <summary>
  53. /// Called when [loaded].
  54. /// </summary>
  55. protected override void OnLoaded()
  56. {
  57. base.OnLoaded();
  58. ClearBackdrops();
  59. }
  60. /// <summary>
  61. /// Logs in a user when one is selected
  62. /// </summary>
  63. /// <param name="sender">The sender.</param>
  64. /// <param name="e">The e.</param>
  65. async void ItemsList_ItemInvoked(object sender, ItemEventArgs<object> e)
  66. {
  67. var user = (UserDto)e.Argument;
  68. try
  69. {
  70. await LoginUser(user);
  71. }
  72. catch (HttpException ex)
  73. {
  74. if (ex.StatusCode.HasValue && ex.StatusCode.Value == System.Net.HttpStatusCode.Unauthorized)
  75. {
  76. App.Instance.ShowErrorMessage("Invalid username or password. Please try again.", caption: "Login Failure");
  77. }
  78. else
  79. {
  80. App.Instance.ShowDefaultErrorMessage();
  81. }
  82. }
  83. }
  84. /// <summary>
  85. /// Logs in a user and verifies their password
  86. /// </summary>
  87. /// <param name="user">The user.</param>
  88. /// <param name="password">The password.</param>
  89. /// <returns>Task{AuthenticationResult}.</returns>
  90. protected async Task LoginUser(UserDto user, string password)
  91. {
  92. await App.Instance.ApiClient.AuthenticateUserAsync(user.Id, password);
  93. App.Instance.CurrentUser = user;
  94. App.Instance.NavigateToHomePage();
  95. }
  96. /// <summary>
  97. /// Logs in a user who does not have a password
  98. /// </summary>
  99. /// <param name="user">The user.</param>
  100. /// <returns>Task{AuthenticationResult}.</returns>
  101. protected Task LoginUser(UserDto user)
  102. {
  103. return LoginUser(user, null);
  104. }
  105. }
  106. }