/// <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()); } }