コード例 #1
0
        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);
        }
コード例 #2
0
        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"));
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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}");
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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();
            }
        }