public static Token RefreshToken(AutoQuestraderEntities db, Token curToken)
        {
            IRestResponse <AuthTokenResponse> responseToken = null;

            try
            {
                var authClient = new RestClient(curToken.LoginServer);

                var request = new RestRequest("oauth2/token", Method.GET);
                request.AddParameter("grant_type", "refresh_token");
                request.AddParameter("refresh_token", curToken.RefreshToken);

                responseToken = authClient.Execute <AuthTokenResponse>(request);

                curToken.ApiServer    = responseToken.Data.api_server;
                curToken.AccessToken  = responseToken.Data.access_token;
                curToken.ExpiresIn    = responseToken.Data.expires_in;
                curToken.ExpiresDate  = DateTimeOffset.UtcNow.AddSeconds(responseToken.Data.expires_in - 30); // create a 30 second buffer to account for network slowness
                curToken.RefreshToken = responseToken.Data.refresh_token;
                curToken.TokenType    = responseToken.Data.token_type;

                db.SaveChanges();

                return(curToken);
            }
            catch {
                Console.WriteLine("Error logging in: " + responseToken.Content);

                return(RefreshToken(db, PromptForNewRefreshToken(curToken)));
            }
        }
        public static MailAddress GetAccountOwnerEmail()
        {
            AutoQuestraderEntities db = new AutoQuestraderEntities();
            var    ownerEmailSetting  = db.SettingValues.FirstOrDefault(p => p.Name == SETTING_NAME_ACCOUNT_OWNER_EMAIL_ADDRESS);
            string ownerEmail;

            if (ownerEmailSetting == null || string.IsNullOrEmpty(ownerEmailSetting.Value))
            {
                Console.WriteLine("Please enter the email address of the account owner:");
                ownerEmail = Console.ReadLine().Trim();
                db.SettingValues.Add(new SettingValue {
                    Name  = SETTING_NAME_ACCOUNT_OWNER_EMAIL_ADDRESS,
                    Value = ownerEmail
                });
                db.SaveChanges();
            }
            else
            {
                ownerEmail = ownerEmailSetting.Value;
            }

            var    ownerDisplayNameSetting = db.SettingValues.FirstOrDefault(p => p.Name == SETTING_NAME_ACCOUNT_OWNER_EMAIL_DISPLAY_NAME);
            string ownerDisplayName;

            if (ownerDisplayNameSetting == null || string.IsNullOrEmpty(ownerDisplayNameSetting.Value))
            {
                Console.WriteLine("Please enter the display name for email address: " + ownerEmail);
                ownerDisplayName = Console.ReadLine().Trim();
                db.SettingValues.Add(new SettingValue
                {
                    Name  = SETTING_NAME_ACCOUNT_OWNER_EMAIL_DISPLAY_NAME,
                    Value = ownerDisplayName
                });
                db.SaveChanges();
            }
            else
            {
                ownerDisplayName = ownerDisplayNameSetting.Value;
            }

            return(new MailAddress(ownerEmail, ownerDisplayName));
        }