/// <summary>
        /// Configuration page for changing the user's Exact configurations
        /// </summary>
        /// <param name="sm">StateMessage</param>
        /// <returns></returns>
        public async Task <IActionResult> Index(StateMessage sm = StateMessage.None)
        {
            // DB Info
            var user   = _dbHelper.GetUser(_context, User.Identity.Name);
            var config = _dbHelper.GetExactConfig(_context, user.ConfigID);

            // Exact data
            ExactOnlineConnect.data.Context     = _context;
            ExactOnlineConnect.data.AccessToken = user.Token;

            var suppliers = await ExactOnlineConnect.data.GetSuppliers(user.DivisionId);

            var divisions = await ExactOnlineConnect.data.GetDivisions(user.DivisionId);

            var itemgroups = await ExactOnlineConnect.data.GetItemGroups(user.DivisionId);

            var paymentConditions = await ExactOnlineConnect.data.GetPaymentConditions(user.DivisionId);

            var vm = new Areas.ExactOnline.Models.Configuration.ConfigVM
            {
                ConfigurationId    = config.Id,
                ItemGroupId        = config.ItemGroupId.ToString(),
                ItemGroups         = _exactHelper.ItemGroupsToSelectList(itemgroups),
                PaymentConditionId = config.PaymentConditionId,
                PaymentConditions  = _exactHelper.PaymentConditionsToSelectList(paymentConditions),
                SupplierId         = config.SupplierId.ToString(),
                Suppliers          = _exactHelper.SuppliersToSelectList(suppliers),
                DivisionId         = user.DivisionId.ToString(),
                Divisions          = _exactHelper.DivisionsToSelectList(divisions),
                UserId             = user.Id,
                StateMessage       = sm,
                ConfigType         = config.ConfigType,
            };

            return(View(vm));
        }
        public async Task <IActionResult> OnGetCallbackAsync(string returnUrl = null, string remoteError = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (remoteError != null)
            {
                ErrorMessage = $"Error from external provider: {remoteError}";
                return(RedirectToPage("./Login", new { ReturnUrl = returnUrl }));
            }
            var info = await _signInManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                ErrorMessage = "Error loading external login information.";
                return(RedirectToPage("./Login", new { ReturnUrl = returnUrl }));
            }

            // Sign in the user with this external login provider if the user already has a login.
            var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent : false, bypassTwoFactor : true);

            if (result.Succeeded)
            {
                // Store new retrieved token

                // Check if already exists
                var user = _context.Users
                           .Include(nameof(VERPS.WebApp.Database.Models.User.ExactToken))
                           .FirstOrDefault(x => x.UserName == info.ProviderKey);

                if (user != null)
                {
                    var token = _context.ExactTokens
                                .FirstOrDefault(x => x.Id == user.ExactToken.Id);
                    token.Token        = info.AuthenticationTokens.FirstOrDefault(x => x.Name == "access_token").Value;
                    token.RefreshToken = info.AuthenticationTokens.FirstOrDefault(x => x.Name == "refresh_token").Value;
                    token.RefreshTime  = DateTime.Parse(info.AuthenticationTokens.FirstOrDefault(x => x.Name == "expires_at").Value);
                    _context.SaveChanges();
                }
                else
                {
                    await _signInManager.SignOutAsync();
                }



                _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
                return(LocalRedirect(returnUrl));
            }
            if (result.IsLockedOut)
            {
                return(RedirectToPage("./Lockout"));
            }
            else
            {
                _logger.LogInformation($"Not existing account, will create new account of user {info.Principal.Identity.Name} on provider {info.LoginProvider} ");
                // If the user does not have an account, then ask the user to create an account.
                ReturnUrl     = returnUrl;
                LoginProvider = info.LoginProvider;

                // Set Exact things
                var exactHelper = new ExactHelper();
                ExactOnlineConnect.data.AccessToken = info.AuthenticationTokens.FirstOrDefault(x => x.Name == "access_token").Value;
                ExactOnlineConnect.data.Context     = _context;
                var me = await ExactOnlineConnect.data.GetMe();

                ExactOnlineConnect.data.CurrentDivision = me.CurrentDivision;

                // Data
                var suppliers = await ExactOnlineConnect.data.GetSuppliers(me.CurrentDivision);

                var divisions = await ExactOnlineConnect.data.GetDivisions(me.CurrentDivision);

                var paymentConditions = await ExactOnlineConnect.data.GetPaymentConditions(me.CurrentDivision);

                // SelectLists
                var sups = exactHelper.SuppliersToSelectList(suppliers);
                var divs = divisions != null?exactHelper.DivisionsToSelectList(divisions) : new List <SelectListItem>();

                var paycs = exactHelper.PaymentConditionsToSelectList(paymentConditions);

                // Model
                Input = new InputModel
                {
                    Suppliers         = sups,
                    Divisions         = divs,
                    DivisionId        = me.CurrentDivision,
                    PaymentConditions = paycs,
                    ProviderName      = info.LoginProvider,
                    UserId            = me.UserID,
                    Username          = me.UserName,
                };

                return(Page());
            }
        }