private async Task <ExpiringAccessToken> RefreshAccessToken(string oauthId) { var installationData = await GetInstallationDataAsync(oauthId); var dataContent = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("grant_type", "client_credentials"), new KeyValuePair <string, string>("scope", "send_notification") }); var credentials = Encoding.ASCII.GetBytes( $"{installationData.oauthId}:{installationData.oauthSecret}"); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials)); var tokenResponse = await _httpClient.PostAsync(new Uri(installationData.tokenUrl), dataContent); var accessToken = JsonConvert.DeserializeObject <AccessToken>(await tokenResponse.Content.ReadAsStringAsync()); var expiringAccessToken = new ExpiringAccessToken { Token = accessToken, ExpirationTimeStamp = DateTime.Now + TimeSpan.FromTicks((accessToken.expires_in - 60) * 1000) }; await _database.StringSetAsync($"{oauthId}:token", JsonConvert.SerializeObject(expiringAccessToken)); return(expiringAccessToken); }
private bool IsExpired(ExpiringAccessToken accessToken) { return(accessToken == null || accessToken.ExpirationTimeStamp < DateTime.Now); }