public void TestGetAuthorizationCodeRequestUrl_StandardSettings_Passed() { var credential = new TestCredential(); var trSettings = new OAuth2TokenRequestSettings(); trSettings.RedirectUri = credential.RedirectUrls[0]; trSettings.Scopes.Add("test-scope1"); trSettings.Scopes.Add("test-scope2"); trSettings.State = "state999"; var oauth2 = new OAuth2Utility(new DummyNetUtility()); string url = oauth2.GetAuthorizationCodeRequestUrl(credential, trSettings); string expected = "https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=test-client-id&redirect_uri=http%3A%2F%2Flocalhost%3A1234&scope=test-scope1%20test-scope2&state=state999"; Assert.Equal(expected, url); }
public void GetAuthorizationCodeRequestUrl_CheckInvalidParams_Passed() { OAuth2Credential credential = null; OAuth2TokenRequestSettings trSettings = null; var oauth2 = new OAuth2Utility(new DummyNetUtility()); var argNullEx = Assert.Throws <ArgumentNullException>(() => oauth2.GetAuthorizationCodeRequestUrl(credential, trSettings)); Assert.Equal("credential", argNullEx.ParamName); credential = new TestCredential(); argNullEx = Assert.Throws <ArgumentNullException>(() => oauth2.GetAuthorizationCodeRequestUrl(credential, trSettings)); Assert.Equal("requestSettings", argNullEx.ParamName); trSettings = new OAuth2TokenRequestSettings(); var argEx = Assert.Throws <ArgumentException>(() => oauth2.GetAuthorizationCodeRequestUrl(credential, trSettings)); Assert.True(argEx.Message.Contains("RedirectUri must match one of the values in credential.RedirectUrls")); }
async Task RunAsync(INetUtility netUtil, ILoggerFactory loggerFactory) { try { var credential = InstalledAppCredential.ReadFromFile("Path of your json file downloaded from your Google API Console"); var oauth2Util = new OAuth2Utility(netUtil); var tokenInfo = await oauth2Util.GetTokenInfoAsync(credential, "refreshToken"); // assume you have already obtained your refresh token var adWordsApiConfig = new AdWordsApiConfig(); adWordsApiConfig.AccessToken = tokenInfo.AccessToken; adWordsApiConfig.ClientCustomerId = "Your client customer ID"; adWordsApiConfig.DeveloperToken = "Developer token"; adWordsApiConfig.UserAgent = "Testing example"; // this and the rest of the properties are optional // An example of using some AdWords service ICampaignService campaignService = new CampaignService(adWordsApiConfig, netUtil, loggerFactory); // loggerFactory can be null var selector = new Selector <CampaignServiceField>() .AddFields(CampaignServiceField.Id, CampaignServiceField.Name) .AddPredicate(CampaignServiceField.Status, PredicateOperator.Equals, CampaignStatus.Enabled.ToXmlValue()); var campaignPage = await campaignService.GetAsync(selector); // An example of getting AdWords report IReportUtility reportUtil = new ReportUtility(adWordsApiConfig, netUtil, loggerFactory); // loggerFactory can be null var rptDef = new ReportDefinition(); rptDef.DateRangeType = ReportDefinitionDateRangeType.AllTime; rptDef.DownloadFormat = DownloadFormat.GzippedCsv; rptDef.ReportName = "Testing Report"; rptDef.ReportType = ReportDefinitionReportType.CampaignPerformanceReport; rptDef.Selector = new Selector { Fields = new List <string>() }; rptDef.Selector.Fields.AddRange(new string[] { "CampaignId", "CampaignName", "Impressions" }); var reportCsv = await reportUtil.GetContentStringAsync(rptDef); } catch (Exception ex) { _logger.LogError("{0}: {1}{2}{3}", ex.GetType().Name, ex.Message, Environment.NewLine, ex.StackTrace); } }
public async Task TestGetTokenInfoAsync_ByRefreshToken_Passed() { var credential = new TestCredential(); string refreshToken = "refreshToken"; var net = new DummyNetUtility(); var response = new DummyHttpWebResponse(HttpStatusCode.OK, @"{ ""access_token"": ""accessToken"", ""expires_in"": 123 }"); net.AddResponse(response); var oauth2 = new OAuth2Utility(net); DateTime timeBefore = DateTime.UtcNow; var tokenInfo = await oauth2.GetTokenInfoAsync(credential, refreshToken); DateTime timeAfter = DateTime.UtcNow; Assert.Equal("accessToken", tokenInfo.AccessToken); Assert.Equal(123, tokenInfo.ExpiresIn); Assert.True(timeBefore <= tokenInfo.IssuedTime && tokenInfo.IssuedTime <= timeAfter, $"Expect {timeBefore} <= Issued Time {tokenInfo.IssuedTime} <= {timeAfter}"); }
public void TestGetAuthorizationCodeRequestUrl_AllSettingsUsed_Passed() { var credential = new TestCredential(); var trSettings = new OAuth2TokenRequestSettings(); trSettings.IncludeGrantedScopes = true; trSettings.IsOnlineAccess = false; trSettings.LoginHint = "*****@*****.**"; trSettings.Prompts.Add(OAuth2TokenRequestPrompt.Consent); trSettings.Prompts.Add(OAuth2TokenRequestPrompt.SelectAccount); trSettings.RedirectUri = credential.RedirectUrls[0]; trSettings.Scopes.Add("test-scope"); trSettings.State = "state999"; trSettings.IsOnlineAccess = false; trSettings.IncludeGrantedScopes = true; var oauth2 = new OAuth2Utility(new DummyNetUtility()); string url = oauth2.GetAuthorizationCodeRequestUrl(credential, trSettings); string expected = "https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=test-client-id&redirect_uri=http%3A%2F%2Flocalhost%3A1234&scope=test-scope&state=state999&access_type=offline&prompt=consent%20select_account&[email protected]&include_granted_scopes=true"; Assert.Equal(expected, url); }
private void ObtainValidAccessToken(TestConfig testConfig) { lock (_lock) { if (!IsAccessTokenExpired(testConfig)) { return; } var oauth2Util = new OAuth2Utility(GetNetUtility()); string fullPath = testConfig.GetFilePath(testConfig.Oauth2.CredentialJsonPath); OAuth2Credential credential = InstalledAppCredential.ReadFromFile(fullPath); if (credential.ProjectId == null) { credential = WebAppCredential.ReadFromFile(fullPath); } var tokenInfo = oauth2Util.GetTokenInfoAsync(credential, testConfig.Oauth2.RefreshToken).Result; testConfig.Oauth2.AccessToken = tokenInfo.AccessToken; testConfig.Oauth2.ExpiresIn = tokenInfo.ExpiresIn; testConfig.Oauth2.IssuedTime = tokenInfo.IssuedTime.ToUniversalTime().ToString("s", System.Globalization.CultureInfo.InvariantCulture) + "Z"; testConfig.Save(); } }