public static void RevokeAccessToken(string tokenToBeRevoked) { TokenRevoked?.Invoke(); WebClient client = new WebClient(); string accessToken = SecretStorage.GetFitbitClientID() + ":" + SecretStorage.GetFitbitClientSecret(); accessToken = Base64Encode(accessToken); client.Headers.Add("Authorization", "Basic " + accessToken); var values = new NameValueCollection(); values["token"] = tokenToBeRevoked; try { var response = client.UploadValues(REVOKE_URL, values); var responseString = Encoding.Default.GetString(response); SecretStorage.RemoveAccessToken(tokenToBeRevoked); SecretStorage.RemoveRefreshToken(SecretStorage.GetRefreshToken()); } catch (Exception e) { Logger.WriteToLogFile(e); Logger.WriteToConsole(e.ToString()); } finally { if (client != null) { client.Dispose(); } } }
internal static void RefreshAccessToken() { Logger.WriteToConsole("Access token not valid anymore. Try to refresh access token."); WebClient client = new WebClient(); string accessToken = SecretStorage.GetFitbitClientID() + ":" + SecretStorage.GetFitbitClientSecret(); accessToken = Base64Encode(accessToken); client.Headers.Add("Authorization", "Basic " + accessToken); var values = new NameValueCollection(); values["grant_type"] = "refresh_token"; string refreshToken = SecretStorage.GetRefreshToken(); values["refresh_token"] = refreshToken; values["expires_in"] = "" + Settings.TOKEN_LIFETIME; try { var response = client.UploadValues(REFRESH_URL, values); var responseString = Encoding.Default.GetString(response); AccessRefreshResponse accessResponse = JsonConvert.DeserializeObject <AccessRefreshResponse>(responseString); Logger.WriteToConsole("Refreshing token returned the following response: " + responseString); Logger.WriteToConsole("Writing access and refresh token to database."); Database.GetInstance().LogInfo("Retreived new access and refresh token: " + accessResponse.access_token + " / " + accessResponse.refresh_token); SecretStorage.SaveAccessToken(accessResponse.access_token); SecretStorage.SaveRefreshToken(accessResponse.refresh_token); } catch (WebException e) { if ((e.Response is HttpWebResponse) && ((e.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized || (e.Response as HttpWebResponse).StatusCode == HttpStatusCode.BadRequest)) { RefreshTokenFail?.Invoke(); } else if ((e.Response is HttpWebResponse) && (e.Response as HttpWebResponse).StatusCode.ToString().Equals("429")) { Logger.WriteToConsole("Too many requests"); } else { Logger.WriteToLogFile(e); } } catch (Exception e) { Logger.WriteToLogFile(e); Logger.WriteToConsole(e.ToString()); } finally { if (client != null) { client.Dispose(); } } }