Advertisement
Guest User

Untitled

a guest
Oct 12th, 2016
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.35 KB | None | 0 0
  1. using System;
  2. using System.Net;
  3. using Xamarin.Forms;
  4. using IsalaSportmonitor.Repositories;
  5. using IsalaSportmonitor.Models.LocalModels;
  6. using System.Net.Http;
  7. using IsalaSportmonitor.Interfaces;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using Newtonsoft.Json;
  11. using Newtonsoft.Json.Linq;
  12.  
  13. namespace IsalaSportmonitor
  14. {
  15. public partial class Login : ContentPage
  16. {
  17. public bool debug;
  18.  
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="T:IsalaSportmonitor.Login"/> class.
  21. /// </summary>
  22. public Login()
  23. {
  24. InitializeComponent();
  25. NavigationPage.SetHasNavigationBar(this, false);
  26.  
  27. debug = true;
  28.  
  29. HandleSavedUsername();
  30. }
  31.  
  32.  
  33. //public async void Testlogin(object sender, EventArgs e)
  34. //{
  35. // LoginAPI(null, null);
  36. //}
  37.  
  38. /// <summary>
  39. /// This method handles the login process
  40. /// </summary>
  41. private async void LoginAPI(object sender, EventArgs e)
  42. {
  43. lblmessage.IsVisible = false;
  44. lblmessage.Text = "";
  45.  
  46. // Fill the UserModel
  47. Models.LoginModel login = new Models.LoginModel();
  48.  
  49.  
  50. if (debug)
  51. {
  52. var usrname = "kao7";
  53. var usrpass = "test123";
  54. login.Login = usrname;
  55. login.Wachtwoord = usrpass;
  56.  
  57. HttpResponseMessage result = new HttpResponseMessage();
  58. result = await new ApiRequest().PostAsync("api/login", login);
  59. result.StatusCode = HttpStatusCode.OK;
  60.  
  61. UserRepository.Instance().validateUserOffline(usrname, usrpass);
  62.  
  63. //Set user-specific variables
  64. UserRepository.Instance().login = login;
  65. UserRepository.Instance().lastActivityTime = DateTime.Now;
  66.  
  67. HandleRememberUsername();
  68. fetchSports();
  69. acceptAgreement(true);
  70. return;
  71. }
  72. else
  73. {
  74.  
  75. login.Login = username.Text;
  76. login.Wachtwoord = password.Text;
  77.  
  78. // Send UserModel to the API
  79. HttpResponseMessage result = new HttpResponseMessage();
  80. result.StatusCode = HttpStatusCode.Forbidden;
  81. try
  82. {
  83. result = await new ApiRequest().PostAsync("api/login", login);
  84. }
  85. catch //if login failed, try offline login
  86. {
  87. if (UserRepository.Instance().getLocalUserData(this.username.Text) == null)
  88. {
  89. lblmessage.IsVisible = true;
  90. //Message in English: You have to be logged in once through the internet to be able to log in without.
  91. lblmessage.Text = "U moet één keer met internet zijn ingelogd om zonder internet te kunnen inloggen.";
  92. return;
  93. }
  94.  
  95. //Check if user can be validated offline
  96. if (UserRepository.Instance().validateUserOffline(this.username.Text, this.password.Text))
  97. {
  98. //Set user-specific variables
  99. UserRepository.Instance().login = login;
  100. UserRepository.Instance().lastActivityTime = DateTime.Now;
  101.  
  102. HandleRememberUsername();
  103. acceptAgreement();
  104. return;
  105. }
  106. }
  107.  
  108. //If the login was successful
  109. if (result.StatusCode == HttpStatusCode.OK)
  110. {
  111. //Set user-specific variables
  112. UserRepository.Instance().login = login;
  113. UserRepository.Instance().lastActivityTime = DateTime.Now;
  114.  
  115. //save user credentials locally if not yet done
  116. if (UserRepository.Instance().getLocalUserData(UserRepository.Instance().login.Login) == null)
  117. {
  118. UserRepository.Instance().saveUserDataLocally(new LocalUserModel(UserRepository.Instance().login.Login, this.password.Text, false));
  119. }
  120. else //if local userId exists with other password, then update the password.
  121. {
  122. if (UserRepository.Instance().getLocalUserData(UserRepository.Instance().login.Login).passwordHash != UserRepository.Instance().hashPassword(this.password.Text))
  123. {
  124. UserRepository.Instance().updateLocalPassword(UserRepository.Instance().login.Login, this.password.Text);
  125. }
  126. }
  127.  
  128. HandleRememberUsername();
  129. fetchSports();
  130. acceptAgreement();
  131. }
  132. else if (result.StatusCode == HttpStatusCode.Forbidden)
  133. {
  134. lblmessage.IsVisible = true;
  135. //Message in English: The data given was incorrect
  136. lblmessage.Text = "De ingevulde gegevens zijn onjuist.";
  137. }
  138. else
  139. {
  140. lblmessage.IsVisible = true;
  141. //Message in English: There has been an error
  142. lblmessage.Text = "Er is een fout opgetreden.";
  143. }
  144. }
  145.  
  146. }
  147.  
  148. #region Other Options
  149.  
  150. /// <summary>
  151. /// This method handles the view for the terms and conditions.
  152. /// </summary>
  153. private void ReadTerms(object sender, EventArgs e)
  154. {
  155. App.Current.MainPage = new TermsPage();
  156. }
  157.  
  158. /// <summary>
  159. /// This method handles the agreement that has to be given to the terms and conditions.
  160. /// </summary>
  161. public async void acceptAgreement(bool debug = false)
  162. {
  163. if (debug)
  164. {
  165. UserRepository.Instance().updateAgreementAccept(true);
  166. App.Current.MainPage = new MasterPage();
  167. }
  168. else
  169. {
  170. if (!UserRepository.Instance().getLocalUserData(UserRepository.Instance().login.Login).agreementAccepted)
  171. {
  172. //Dialog for accepting terms and conditions
  173. var answer = await DisplayAlert("Voorwaarden Accepteren?",
  174. "Gaat u akkoord met de algemene voorwaarden voor het gebruik van deze app?",
  175. "Ja ik ga akkoord", "Nee ik ga niet akkoord");
  176. if (answer)
  177. {
  178. UserRepository.Instance().updateAgreementAccept(true);
  179. App.Current.MainPage = new MasterPage();
  180. }
  181. }
  182. else
  183. {
  184. App.Current.MainPage = new MasterPage();
  185. }
  186. }
  187. }
  188.  
  189. protected override void OnAppearing()
  190. {
  191. //var answer = DisplayAlert("Voorwaarden", "Voorwaarden text om mee akkoord te gaan ezno.", "Ja ik ga akkoord.");
  192. }
  193.  
  194. /// <summary>
  195. /// This method handles the "forgotten password?" event
  196. /// </summary>
  197. private void ForgotPassword(object sender, EventArgs e)
  198. {
  199. Uri resetUri;
  200. #if DEBUG
  201. resetUri = new Uri("https://api.sportmonitor.wordt-aan-gewerkt.nl/");
  202. #else
  203. resetUri = new Uri("https://isalasportmonitor.nl/");
  204. #endif
  205. Device.OpenUri(resetUri);
  206. }
  207.  
  208. #endregion
  209.  
  210. #region username handling
  211.  
  212. /// <summary>
  213. /// This method handles the option to remember the username
  214. /// </summary>
  215. private void HandleRememberUsername()
  216. {
  217. //Get the status of the switch to remember username
  218. bool rememberusername = this.switchRememberUsername.IsToggled;
  219.  
  220. if (rememberusername)
  221. {
  222. //Save the username and the switch value for remembering the username
  223. bool outcomeRemember = DependencyService.Get<IRememberUsername>().SaveRemember(true);
  224. bool outcomeName = DependencyService.Get<IRememberUsername>().SaveUsername(this.username.Text);
  225.  
  226. if (!outcomeRemember || !outcomeName || (!outcomeRemember && !outcomeName))
  227. {
  228. lblmessage.IsVisible = true;
  229. //Message in English: Some setting data could not be saved.
  230. lblmessage.Text = "Enkele setting-gegevens konden niet worden opgeslagen.";
  231. return;
  232. }
  233. else
  234. {
  235. Console.WriteLine("Succes! username saved");
  236. }
  237. }
  238. else
  239. {
  240. if (!rememberusername && (DependencyService.Get<IRememberUsername>().GetUsername() == UserRepository.Instance().login.Login))
  241. {
  242. //Clear the username and the switch value for remembering the username
  243. bool outcomeRemember = DependencyService.Get<IRememberUsername>().SaveRemember(false);
  244. bool outcomeName = DependencyService.Get<IRememberUsername>().SaveUsername("");
  245.  
  246. if (!outcomeRemember || !outcomeName || (!outcomeRemember && !outcomeName))
  247. {
  248. lblmessage.IsVisible = true;
  249. //Message in English: Some setting data could not be saved.
  250. lblmessage.Text = "Enkele setting-gegevens konden niet worden opgeslagen.";
  251. return;
  252. }
  253. else
  254. {
  255. Console.WriteLine("Succes! username forgotten");
  256. }
  257. }
  258. }
  259. }
  260.  
  261. /// <summary>
  262. /// This method handles the retreiving of the username, if it has previously been saved (remembered)
  263. /// </summary>
  264. private void HandleSavedUsername()
  265. {
  266.  
  267. try
  268. {
  269. //Get the remember variable
  270. bool remember = DependencyService.Get<IRememberUsername>().GetRemember();
  271.  
  272. //If true, get the username textfield and toggle the switch to true
  273. if (remember)
  274. {
  275. this.switchRememberUsername.IsToggled = true;
  276. this.username.Text = DependencyService.Get<IRememberUsername>().GetUsername();
  277. }
  278. //If false, set the username textfield to an empty string and toggle the switch to false
  279. else
  280. {
  281. this.switchRememberUsername.IsToggled = false;
  282. this.username.Text = "";
  283. }
  284.  
  285. }
  286. catch (Exception e)
  287. {
  288. lblmessage.IsVisible = true;
  289. //Message in English: Something went wrong retreiving the username.
  290. lblmessage.Text = "De gebruikersnaam en de switch-data konden niet gevonden worden.";
  291. }
  292. }
  293.  
  294. #endregion
  295.  
  296. /// <summary>
  297. /// Fetches the sports.
  298. /// </summary>
  299. private async void fetchSports()
  300. {
  301. //Make an API call for getting all the sports
  302. HttpResponseMessage sportResponse = new HttpResponseMessage();
  303. sportResponse.StatusCode = HttpStatusCode.Forbidden;
  304. sportResponse = await new ApiRequest()
  305. .SetLogin(UserRepository.Instance().login)
  306. .Get("api/sport");
  307.  
  308. //If API call was successful, get the result and save the sports locally
  309. if (sportResponse.StatusCode == HttpStatusCode.OK)
  310. {
  311. //getting the sports from a JSON format
  312. var JSON = sportResponse.Content.ReadAsStringAsync();
  313. var jsonarray = JsonConvert.DeserializeObject(JSON.Result);
  314. JArray sports = JArray.FromObject(jsonarray);
  315.  
  316. //Store each sport locally if it is not yet stored locally
  317. foreach (JObject sport in sports)
  318. {
  319. bool sportExists = SportRepository.Instance().sportExistsLocally((int)sport["Id"]);
  320. if (!sportExists)
  321. {
  322. try
  323. {
  324. SportRepository.Instance().storeSportDataLocally(sport);
  325. }
  326. catch (Exception e)
  327. {
  328. Console.Write(e);
  329. }
  330. }
  331. }
  332. }
  333. //Write to console if something is wrong with authentication/authorization
  334. else if (sportResponse.StatusCode == HttpStatusCode.Forbidden)
  335. {
  336. Console.WriteLine("Not the right credentials");
  337. }
  338. //Write to console if something else is wrong.
  339. else
  340. {
  341. Console.WriteLine("Something went wrong fetching the sport");
  342. }
  343.  
  344. }
  345.  
  346. }
  347. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement