/// <summary> /// Signs-in to Nike+ service. /// </summary> /// <param name="forceRefreshToken">Flag to determine if force to get a new <see cref="Token"/>, even if one valid is available.</param> /// <returns><see langword="true"/> if signed-in successfully, otherwise, <see langword="false"/>.</returns> public async Task<bool> SignIn(bool forceRefreshToken = false) { bool lbSignedIn = false; bool lbValidToken = false; WebRequest loWebRequest = null; StringBuilder loPostData = new StringBuilder(); string lsResponse; // Validate credentials if (string.IsNullOrEmpty(msUser) || string.IsNullOrEmpty(msPassword)) throw new NikePlusException("Invalid credentials, provide Nike+ user and password.", null, null, null); // Validate current Token lbSignedIn = false; lbValidToken = ValidateToken(); // Check if refresh token must be forced if (forceRefreshToken) lbValidToken = false; lbSignedIn = lbValidToken; if (!lbSignedIn) { // Reset values Token = null; IsSignedIn = false; try { // Build query data for user/password provided loPostData.AppendFormat("{0}={1}", USERNAME_PARAM, Uri.EscapeDataString(msUser)); loPostData.AppendFormat("&{0}={1}", PASSWORD_PARAM, Uri.EscapeDataString(msPassword)); // Prepare request loWebRequest = WebRequest.Create(LOGIN_URI_DEV); //byte[] loPostContent = Encoding.Default.GetBytes(loPostData.ToString()); byte[] loPostContent = Encoding.UTF8.GetBytes(loPostData.ToString()); loWebRequest.Method = "POST"; loWebRequest.ContentType = "application/x-www-form-urlencoded"; #if DESKTOP_APP loWebRequest.ContentLength = loPostContent.Length; #endif // Post request using (Stream loRequestStream = await loWebRequest.GetRequestStreamAsync()) { loRequestStream.Write(loPostContent, 0, loPostContent.Length); loRequestStream.Flush(); #if DESKTOP_APP loRequestStream.Close(); #endif } // Read response (Json formatted) using (WebResponse loWebResponse = await loWebRequest.GetResponseAsync()) { using (Stream loResponseStream = loWebResponse.GetResponseStream()) { using (StreamReader loStreamReader = new StreamReader(loResponseStream)) { lsResponse = loStreamReader.ReadToEnd(); // Deserialize Json response Token = JsonConvert.DeserializeObject<NikePlusToken>(lsResponse); IsSignedIn = true; lbSignedIn = true; } } } } catch (WebException loWebException) { Token = null; IsSignedIn = false; lbSignedIn = false; throw new NikePlusException(loWebException.Message, loWebException, LOGIN_URI_DEV, null); } catch (Exception loException) { // (Just for debugging purposes: handle response exception). if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debug.WriteLine(loException.StackTrace); Token = null; IsSignedIn = false; lbSignedIn = false; throw; } } return lbSignedIn; }
/// <summary> /// Signs-out from Nike+ service. /// </summary> /// <returns><see langword="true"/> if signed-out successfully, otherwise, <see langword="false"/>.</returns> public async Task<bool> SignOut() { bool lbSignedOut = false; if (Token != null && !string.IsNullOrEmpty(Token.AccessToken)) { try { await PerformRequest(DISCONNECT_PATH, null, "DELETE"); Token = null; IsSignedIn = false; lbSignedOut = true; } catch (Exception loException) { // (Just for debugging purposes: handle response exception). if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debug.WriteLine(loException.StackTrace); } // (Just for debugging purposes: handle response exception) Token = null; IsSignedIn = false; lbSignedOut = true; } } else { Token = null; IsSignedIn = false; lbSignedOut = true; } return lbSignedOut; }
/// <summary> /// Sets the Nike+ credentials (user and password). /// </summary> /// <param name="user">Nike+ user (e-mail).</param> /// <param name="password">Nike+ password.</param> public void SetCredentials(string user, string password) { Token = null; IsSignedIn = false; msUser = user; msPassword = password; }