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));
        }
Example #3
0
        public static void Initialize()
        {
            Console.SetWindowSize((int)(Console.LargestWindowWidth * 0.6), (int)(Console.LargestWindowHeight * 0.8));
            Console.BufferHeight = Int16.MaxValue - 1;

            Console.WriteLine("Hi, welcome to AutoQuestrader.");
            Console.WriteLine("\nLogging in...");

            db = new AutoQuestraderEntities();

            var token = AuthHelper.RefreshToken(db, IS_LIVE);

            client = new RestClient(token.ApiServer);
            client.AddDefaultHeader("Authorization", token.TokenType + " " + token.AccessToken);

            Console.WriteLine("\nGetting User Information...");

            var userResponse = client.Execute <User>(new RestRequest("v1/accounts", Method.GET));

            curUser = userResponse.Data;
        }
        public static Token RefreshToken(AutoQuestraderEntities db, bool live, bool forceRefresh = false)
        {
            var loginServer = live ? liveServer : practiceServer;

            var curToken = db.Tokens.FirstOrDefault(p => p.LoginServer == loginServer);

            if (curToken == null)
            {
                curToken             = new Token();
                curToken.LoginServer = loginServer;
                curToken.ExpiresDate = DateTimeOffset.MinValue;
                db.Tokens.Add(curToken);
            }

            if (curToken.ExpiresDate <= DateTimeOffset.UtcNow || forceRefresh)
            {
                return(RefreshToken(db, curToken));
            }
            else
            {
                return(curToken);
            }
        }