//Final step. Take this authorization information and use it in the app
        public async Task<ActionResult> Callback()
        {
            RequestToken token = new RequestToken();
            token.Token = Request.Params["oauth_token"];
            token.Secret = Session["FitbitRequestTokenSecret"].ToString();
            token.Verifier = Request.Params["oauth_verifier"];

            string consumerKey = ConfigurationManager.AppSettings["FitbitConsumerKey"];
            string consumerSecret = ConfigurationManager.AppSettings["FitbitConsumerSecret"];

            //this is going to go back to Fitbit one last time (server to server) and get the user's permanent auth credentials

            //create the Authenticator object
            var authenticator = new Authenticator(consumerKey, consumerSecret);

            //execute the Authenticator request to Fitbit
            AuthCredential credential = await authenticator.ProcessApprovedAuthCallbackAsync(token);

            //here, we now have everything we need for the future to go back to Fitbit's API (STORE THESE):
            //  credential.AuthToken;
            //  credential.AuthTokenSecret;
            //  credential.UserId;

            // For demo, put this in the session managed by ASP.NET
            Session["FitbitAuthToken"] = credential.AuthToken;
            Session["FitbitAuthTokenSecret"] = credential.AuthTokenSecret;
            Session["FitbitUserId"] = credential.UserId;

            return RedirectToAction("Index", "Home");
        }
 public void Constructor()
 {
     var authenticator = new Authenticator("key", "secret");
     Assert.IsNotNull(authenticator);
     Assert.AreEqual("key", authenticator.ConsumerKey);
     Assert.AreEqual("secret", authenticator.ConsumerSecret);
 }
        //
        // 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>:
            string consumerKey = ConfigurationManager.AppSettings["FitbitConsumerKey"];
            string consumerSecret = ConfigurationManager.AppSettings["FitbitConsumerSecret"];

            var authenticator = new Authenticator(consumerKey, consumerSecret);
            RequestToken token = await authenticator.GetRequestTokenAsync();
            Session.Add("FitbitRequestTokenSecret", token.Secret); //store this somehow, like in Session as we'll need it after the Callback() action

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

            return Redirect(authUrl);
        }
 public void Generate_Auth_Url_ForceLogout_False()
 {
     var authenticator = new Authenticator("key", "secret");
     var url = authenticator.GenerateAuthUrlFromRequestToken(new RequestToken { Token = "something" }, false);
     Assert.AreEqual("https://api.fitbit.com/oauth/authorize?oauth_token=something", url);
 }