public async Task <IActionResult> OnPostAsync(string returnUrl = null) { BusinessLayer businessLayer = new BusinessLayer(); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { //returnUrl = returnUrl ?? Url.Content("~/"); returnUrl = returnUrl ?? Url.Content("~/Users/Index?userType=" + Input.UserType); IDTPCryptography cryptography = new IDTPCryptography(); //Getting password salt to encrypt string passSalt = cryptography.GetSecretSalt(); var user = new ApplicationUser(); switch (Input.UserType) { case "Admin": { user = new ApplicationUser { UserName = Input.UserId, Email = Input.Email, SecretSalt = passSalt }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { IDTPUserAdmin newUser = new IDTPUserAdmin { Id = user.Id, FirstName = Input.FirstName, LastName = Input.LastName, ContactNo = Input.ContactNo, Email = Input.Email, LoginId = Input.UserId, NID = Input.NID, CreatedOn = DateTime.Now, ModifiedOn = DateTime.Now, EntityState = EntityState.Added }; businessLayer.AddUser(newUser); await _userManager.AddToRoleAsync(user, "IDTPAdmin"); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } if (!ModelState.IsValid) { TempData["form"] = Input.UserType; return(Page()); } else { //await _signInManager.SignInAsync(user, isPersistent: false); return(LocalRedirect(returnUrl)); } } case "Business": { user = new ApplicationUser { UserName = Input.BusinessId, Email = Input.BusinessEmail, SecretSalt = passSalt }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { Business newUser = new Business { Id = user.Id, FullName = Input.BusinessName, ContactNo = Input.BusinessContactNo, Email = Input.BusinessEmail, LoginId = Input.BusinessId, NID = Input.BusinessNID, TIN = Input.BusinessTIN, BIN = Input.BusinessBIN, BankName = Input.BusinessBankName, BranchName = Input.BusinessBranchName, AccountNumber = Input.BusinessAccountNumber, CreatedOn = DateTime.Now, ModifiedOn = DateTime.Now, EntityState = EntityState.Added }; businessLayer.AddMerchant(newUser); await _userManager.AddToRoleAsync(user, "Business"); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } if (!ModelState.IsValid) { TempData["form"] = Input.UserType; return(Page()); } else { //await _signInManager.SignInAsync(user, isPersistent: false); return(LocalRedirect(returnUrl)); } } case "GovtInstitute": { user = new ApplicationUser { UserName = Input.GovtId, Email = Input.GovtEmail, SecretSalt = passSalt }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { GovernmentInstitution newGovtInstitutionInfo = new GovernmentInstitution { LoginId = Input.GovtId, Name = Input.GovtInstitutionName, BIN = Input.GovtBIN, Email = Input.GovtEmail, ContactNo = Input.GovtContactNo, Address = Input.Address, BankName = Input.GovtBankName, BranchName = Input.GovtBranchName, AccountNumber = Input.GovtAccountNumber, ContactPersonName = Input.ContactPersonName, ContactPersonDesignation = Input.ContactPersonDesignation, ContactPersonEmail = Input.ContactPersonEmail, ContactPersonMobile = Input.ContactPersonMobile, ContactPersonNID = Input.ContactPersonNID, ContactPersonOffice = Input.ContactPersonOffice, CreatedOn = DateTime.Now, ModifiedOn = DateTime.Now, EntityState = EntityState.Added }; businessLayer.AddGovtInstitutionInfo(newGovtInstitutionInfo); await _userManager.AddToRoleAsync(user, "GovernmentInstitute"); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } if (!ModelState.IsValid) { TempData["form"] = Input.UserType; return(Page()); } else { //await _signInManager.SignInAsync(user, isPersistent: false); return(LocalRedirect(returnUrl)); } } case "FinInstitute": { user = new ApplicationUser { UserName = Input.FinancialId, Email = Input.FinancialEmail, SecretSalt = passSalt }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { FinancialInstitution newFinInstitutionInfo = new FinancialInstitution { Id = user.Id, LoginId = Input.FinancialId, InstitutionName = Input.FinancialInstitutionName, TIN = Input.FinancialTIN, BIN = Input.FinancialBIN, Email = Input.FinancialEmail, ContactNo = Input.FinancialContactNo, SwiftCode = Input.FinancialSwiftCode, VatId = Input.FinancialVatId, ContactPersonName = Input.ContactPersonName, ContactPersonDesignation = Input.ContactPersonDesignation, ContactPersonEmail = Input.ContactPersonEmail, ContactPersonMobile = Input.ContactPersonMobile, ContactPersonNID = Input.ContactPersonNID, ContactPersonOffice = Input.ContactPersonOffice, CreatedOn = DateTime.Now, ModifiedOn = DateTime.Now, EntityState = EntityState.Added }; businessLayer.AddFinInstitutionInfo(newFinInstitutionInfo); await _userManager.AddToRoleAsync(user, "FinancialInstitute"); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } if (!ModelState.IsValid) { TempData["form"] = Input.UserType; return(Page()); } else { //await _signInManager.SignInAsync(user, isPersistent: false); return(LocalRedirect(returnUrl)); } } } } // If we got this far, something failed, redisplay form TempData["form"] = Input.UserType; return(Page()); }