示例#1
0
        //Final step. Take this authorization information and use it in the app
        /// <summary>
        /// Part 2 of authorisation.  User has (hopefully) accepted request and fitbit passed authorisation code.
        /// </summary>
        /// <returns></returns>
        public async Task <ActionResult> Callback()
        {
            FitbitAppCredentials appCredentials = FitbitHelper.GetFitbitAppCredentials();
            var    authenticator = new OAuth2Helper(appCredentials, Request.Url.GetLeftPart(UriPartial.Authority) + "/Fitbit/Callback");
            string code          = Request.Params["code"];

            // ask for access token.
            OAuth2AccessToken accessToken = await authenticator.ExchangeAuthCodeForAccessTokenAsync(code);

            // save token (user may have previously authorised in which case update)
            FitbitHelper.AddOrUpdateUser(_unitOfWork, User.Identity.GetUserId(), accessToken);

            return(View("Home", PopulateModel()));
        }
示例#2
0
        public object GetAuthCode(string code)
        {
            var authorization = "Basic Y2xpZW50X2lkOjljZmZlMzg2ZjFiZGQ5NjZjZmZhOTY1OTJhN2NhYzky";
            var contenttype   = "application/x-www-form-urlencoded";
            var redirectURI   = "http://localhost:50195/api/fitbit/callback";
            //var redirectURI = "https://testfit.azurewebsites.net/api/fitbit/callback";
            var queryParams = "client_id=" + OAuthClientID + "&grant_type=authorization_code&redirect_uri=" + redirectURI + "&code=" + code;



            var appCredentials = new FitbitAppCredentials()
            {
                ClientId     = ConfigurationManager.AppSettings["FitbitClientId"],
                ClientSecret = ConfigurationManager.AppSettings["FitbitClientSecret"]
            };
            //make sure you've set these up in Web.Config under <appSettings>:

            //Session["AppCredentials"] = appCredentials;

            //Provide the App Credentials. You get those by registering your app at dev.fitbit.com
            //Configure Fitbit authenticaiton request to perform a callback to this constructor's Callback method
            var authenticator = new OAuth2Helper(appCredentials, redirectURI);

            string[] scopes = new string[] { "profile", "activity", "heartrate", "location", "nutrition", "settings", "sleep", "social", "weight" };

            string authUrl = authenticator.GenerateAuthUrl(scopes, null);

            return(Redirect(authUrl));

            /*
             * HttpClient client = new HttpClient();
             * client.BaseAddress = new Uri(AccessTokenRefreshURI);
             *
             * client.DefaultRequestHeaders.Accept
             *      .Add(new MediaTypeWithQualityHeaderValue(contenttype));//ACCEPT header
             * client.DefaultRequestHeaders.Add("Authorization", authorization);
             *
             * HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, queryParams);
             *
             * client.SendAsync(request)
             *        .ContinueWith(responseTask =>
             *        {
             *                var response = responseTask.Result;
             *                return response;
             *        });
             *
             * return null;
             */
        }
示例#3
0
        public void Most_Basic()
        {
            var credentials = new FitbitAppCredentials()
            {
                ClientId = "SomeID", ClientSecret = "THE Secret ;)"
            };
            var accessToken = new OAuth2AccessToken()
            {
                Token = "", TokenType = "", ExpiresIn = 3600, RefreshToken = ""
            };

            var sut = new FitbitClient(credentials, accessToken);

            Assert.IsNotNull(sut.HttpClient);
        }
示例#4
0
        public void Can_Use_Interceptors_Without_Autorefresh()
        {
            var credentials = new FitbitAppCredentials()
            {
                ClientId = "SomeID", ClientSecret = "THE Secret ;)"
            };
            var accessToken = new OAuth2AccessToken()
            {
                Token = "", TokenType = "", ExpiresIn = 3600, RefreshToken = ""
            };

            //Registere an interceptor, but disable the auto-token-refresh interceptor
            var sut = new FitbitClient(credentials, accessToken, new InterceptorCounter(), false);

            Assert.IsNotNull(sut.HttpClient);
        }
示例#5
0
        public void Can_Instantiate_Without_Any_Interceptors()
        {
            var credentials = new FitbitAppCredentials()
            {
                ClientId = "SomeID", ClientSecret = "THE Secret ;)"
            };
            var accessToken = new OAuth2AccessToken()
            {
                Token = "", TokenType = "", ExpiresIn = 3600, RefreshToken = ""
            };

            //Ensure not even the auto-token-refresh interceptor is active
            var sut = new FitbitClient(credentials, accessToken, false);

            Assert.IsNotNull(sut.HttpClient);
        }
示例#6
0
        //Final step. Take this authorization information and use it in the app
        public async Task <ActionResult> Callback()
        {
            FitbitAppCredentials appCredentials = (FitbitAppCredentials)Session["AppCredentials"];

            var authenticator = new OAuth2Helper(appCredentials, Request.Url.GetLeftPart(UriPartial.Authority) + "/Fitbit/Callback");

            string code = Request.Params["code"];

            OAuth2AccessToken accessToken = await authenticator.ExchangeAuthCodeForAccessTokenAsync(code);

            //Store credentials in FitbitClient. The client in its default implementation manages the Refresh process
            var fitbitClient = GetFitbitClient(accessToken);

            ViewBag.AccessToken = accessToken;

            return(View());
        }
示例#7
0
        public async Task <IHttpActionResult> RegistrationResult(string code)
        {
            FitbitAppCredentials appCredentials = (FitbitAppCredentials)session[AppCredentials];

            var authenticator = new OAuth2Helper(appCredentials, $"{Request.RequestUri.GetLeftPart(UriPartial.Authority)}/fitbit/{nameof(RegistrationResult).ToLowerInvariant()}");

            OAuth2AccessToken accessToken = await authenticator.ExchangeAuthCodeForAccessTokenAsync(code);

            // Store credentials in FitbitClient. The client in its default implementation manages the Refresh process
            var fitbitClient = GetFitbitClient(accessToken);

            // register a subscription for the authorized user
            // TODO: Remove hardcoded subscriber id -- should be the equivalent of our user id
            await fitbitClient.AddSubscriptionAsync(APICollectionType.user, "123456789");

            return(Ok());
        }
示例#8
0
        public IHttpActionResult Authorize()
        {
            var appCredentials = new FitbitAppCredentials()
            {
                ClientId     = clientId,
                ClientSecret = clientSecret
            };

            session[AppCredentials] = appCredentials;

            // provide the App Credentials. You get those by registering your app at dev.fitbit.com
            // configure Fitbit authenticaiton request to perform a callback to this controller's result method
            var authenticator = new OAuth2Helper(appCredentials, $"{Request.RequestUri.GetLeftPart(UriPartial.Authority)}/fitbit/{nameof(RegistrationResult).ToLowerInvariant()}");

            string[] scopes = Enum.GetValues(typeof(FitbitAuthScope)).Cast <FitbitAuthScope>().Select(x => x.ToString().ToLowerInvariant()).ToArray();

            string authUrl = authenticator.GenerateAuthUrl(scopes, null);

            return(Redirect(authUrl));
        }
示例#9
0
        /// <inheritdoc/>
        public async Task <JsonResult> GetFitBitActivityHistory(FitBitAuthenticationToken authToken)
        {
            await Task.Delay(0);

            FitbitAppCredentials credentials = new FitbitAppCredentials()
            {
                ClientId     = "22CCZ8",
                ClientSecret = "d73f338b7121d347da36be95000c959b"
            };

            Fitbit.Api.Portable.OAuth2.OAuth2AccessToken accessToken = new Fitbit.Api.Portable.OAuth2.OAuth2AccessToken()
            {
                Token        = authToken.AccessToken,
                ExpiresIn    = authToken.ExpiresIn,
                RefreshToken = authToken.RefreshToken,
                TokenType    = authToken.TokenType,
                UserId       = authToken.UserId,
            };

            var client    = new FitbitClient(credentials, accessToken);
            var lastMonth = DateTime.UtcNow;

            lastMonth.AddMonths(-7);
            var retrievedActivities = await client.GetActivityLogsListAsync(null, lastMonth);

            List <Activities> listOfRuns = new List <Activities>();

            foreach (var activity in retrievedActivities.Activities)
            {
                // 90009 is a run.
                if (activity.ActivityTypeId == 90009)
                {
                    listOfRuns.Add(activity);
                }
            }

            return(new JsonResult(new ActivityLogsList {
                Activities = listOfRuns
            }));
        }
示例#10
0
        //
        // GET: /FitbitAuth/
        // Setup - prepare the user redirect to Fitbit.com to prompt them to authorize this app.
        public ActionResult Authorize()
        {
            var appCredentials = new FitbitAppCredentials()
            {
                ClientId     = ConfigurationManager.AppSettings["FitbitClientId"],
                ClientSecret = ConfigurationManager.AppSettings["FitbitClientSecret"]
            };

            //make sure you've set these up in Web.Config under <appSettings>:

            Session["AppCredentials"] = appCredentials;

            //Provide the App Credentials. You get those by registering your app at dev.fitbit.com
            //Configure Fitbit authenticaiton request to perform a callback to this constructor's Callback method
            var authenticator = new OAuth2Helper(appCredentials, Request.Url.GetLeftPart(UriPartial.Authority) + "/Fitbit/Callback");

            string[] scopes = new string[] { "profile", "weight", "activity", "sleep" };

            string authUrl = authenticator.GenerateAuthUrl(scopes, null);

            return(Redirect(authUrl));
        }
示例#11
0
        //
        // GET: /Authorize/
        // Setup - prepare the user redirect to Fitbit.com to prompt them to authorize this app.
        public async Task <ActionResult> Authorize()
        {
            //make sure you've set these up in Web.Config under <appSettings>:
            var appCredentials = new FitbitAppCredentials()
            {
                ClientId     = ConfigurationManager.AppSettings["FitbitConsumerKey"],
                ClientSecret = ConfigurationManager.AppSettings["FitbitConsumerSecret"]
            };

            //Provide the App Credentials. You get those by registering your app at dev.fitbit.com
            //Configure Fitbit authenticaiton request to perform a callback to this constructor's Callback method
            var authenticator = new OAuth2Helper(appCredentials, Request.Url?.GetLeftPart(UriPartial.Authority) + "/Fitbit/Callback");

            string[] scopes = new string[] { "profile" };

            Session["FitbitAuthenticator"] = authenticator;

            //note: at this point the RequestToken object only has the Token and Secret properties supplied. Verifier happens later.
            string authUrl = authenticator.GenerateAuthUrl(scopes);

            return(Redirect(authUrl));
        }
示例#12
0
 public OAuth2Helper(FitbitAppCredentials credentials, string redirectUri)
 {
     this.ClientId     = credentials.ClientId;
     this.ClientSecret = credentials.ClientSecret;
     this.RedirectUri  = redirectUri;
 }
示例#13
0
        static void Main(string[] args)
        {
            var clientId             = "22CR42";
            var clientSecret         = "072b825966d4ce4a05b58c4ab84154d5";
            var userId               = "*****@*****.**";
            var token                = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzUTU5TTkiLCJhdWQiOiIyMkNSNDIiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTUwNzk3NzU1LCJpYXQiOjE1MTkyNjE3NTV9.WQsgVrO9Gt1KKgFMIyj75CGOuXXnmr_WlTHnDKP0i3M";
            var fitbitAppCredentials = new FitbitAppCredentials
            {
                ClientId     = clientId,
                ClientSecret = clientSecret
            };

            var oAuth2AccessToken = new OAuth2AccessToken
            {
                UserId    = userId,
                Token     = token,
                ExpiresIn = 31536000,
                TokenType = "Bearer",
                //https://dev.fitbit.com/build/reference/web-api/oauth2/#scope All of these items are displayed to the user when requesting access
                Scope = "profile+activity+settings+social+weight+location+heartrate+sleep+nutrition"
            };


            try
            {
                FitbitClient client = new FitbitClient(fitbitAppCredentials, oAuth2AccessToken);
                var          date   = new DateTime(2018, 2, 10, 5, 30, 0); //changed date
                //what is Activity?  not a variable, but what?

                //Calls method to get the data
                Activity dayActivity = GetDayActivityAsync(client, date).GetAwaiter().GetResult();

                Console.WriteLine("steps on " + date.ToShortDateString() + " " + dayActivity.Summary.Steps.ToString());
                Console.WriteLine("Activity Calories" + " " + dayActivity.Summary.ActivityCalories);
                Console.WriteLine("CaloriesBMR" + " " + dayActivity.Summary.CaloriesBMR);
                Console.WriteLine("CaloriesOut" + " " + dayActivity.Summary.CaloriesOut);
                //Distances is a list
                Console.WriteLine("Distances" + " ");
                foreach (var distance in dayActivity.Summary.Distances)
                {
                    Console.Write(distance.Distance + " ");
                    Console.WriteLine(distance.Activity);
                }
                Console.WriteLine("Elevation" + " " + dayActivity.Summary.Elevation);
                Console.WriteLine("Fairly Active Minutes" + " " + dayActivity.Summary.FairlyActiveMinutes);
                Console.WriteLine("Floors" + " " + dayActivity.Summary.Floors);
                Console.WriteLine("HeartRateZones" + " " + dayActivity.Summary.HeartRateZones);
                Console.WriteLine("LightlyActiveMinutes" + " " + dayActivity.Summary.LightlyActiveMinutes);
                Console.WriteLine("MarginalCalories" + " " + dayActivity.Summary.MarginalCalories);
                Console.WriteLine("RestingHeartRate" + " " + dayActivity.Summary.RestingHeartRate);
                Console.WriteLine("SedentaryMinutes" + " " + dayActivity.Summary.SedentaryMinutes);
                Console.WriteLine("Very Active Minutes" + " " + dayActivity.Summary.VeryActiveMinutes);

                //Calls method to get the intradayData
                IntradayData intradayData = GetIntraDayTimeSeriesAsync(client, date).GetAwaiter().GetResult();

                Console.WriteLine("Intraday Data:");
                using (var sw = new StreamWriter(@"IntraDayData.csv"))
                {
                    var writer = new CsvWriter(sw);
                    foreach (var set in intradayData.DataSet.Where(d => d.Value != "0"))
                    {
                        Console.Write(set.Value + " ");
                        Console.WriteLine(set.Time);
                        writer.WriteField(set.Value);
                        writer.WriteField(set.Time);
                        writer.NextRecord();
                        //want to use CsvHelper to write data to a file
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("error:");
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
            finally
            {
                Console.WriteLine("press any key");
                Console.ReadKey();
            }
        }