Example #1
0
        public async Task GetUser_UserIsLoggedIn()
        {
            CBAUser objCBAUser = new CBAUser()
            {
                Email     = "*****@*****.**",
                FirstName = "Guest",
                LastName  = "Test",
                UserName  = "******"
            };

            var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, "*****@*****.**"),
                new Claim("UserID", "16ce682d-2bd5-45df-bc08-1f21e12f68b0"),
            }, "mock"));

            _userController.ControllerContext = new ControllerContext()
            {
                HttpContext = new DefaultHttpContext()
                {
                    User = user
                }
            };

            _mockUserManager.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);
            var result = await _userController.GetUser();

            Assert.IsNotNull(((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value);
        }
Example #2
0
        public static CBAUser GetMockObject()
        {
            CBAUser objCBAUser = new CBAUser()
            {
                Email     = "*****@*****.**",
                FirstName = "Guest",
                LastName  = "Test",
                UserName  = "******"
            };

            var claims = new List <Claim>()
            {
                new Claim(ClaimTypes.Name, objCBAUser.UserName),
                new Claim(ClaimTypes.NameIdentifier, objCBAUser.Id),
                new Claim("Email", objCBAUser.UserName),
            };
            var identity        = new ClaimsIdentity(claims, "Test");
            var claimsPrincipal = new ClaimsPrincipal(identity);

            var mockPrincipal = new Mock <IPrincipal>();

            mockPrincipal.Setup(x => x.Identity).Returns(identity);
            mockPrincipal.Setup(x => x.IsInRole(It.IsAny <string>())).Returns(true);

            var mockHttpContext = new Mock <HttpContext>();

            mockHttpContext.Setup(m => m.User).Returns(claimsPrincipal);
            return(objCBAUser);
        }
        public async Task PostChangePassword()
        {
            ResetPasswordDto objPasswordModel = new ResetPasswordDto()
            {
                Id              = "*****@*****.**",
                NewPassword     = "******",
                ConfirmPassword = "******",
                Token           = "CfDJ8I9H5drWaGxHgWTL%2BERlWjzlReKkIFkFAtEfKwyOEM11WgvvjONokXL9sLJPyNf7lzlki8CfutXU7c8dUx8bxRmj4JYbeOFQaY0uacxy6eHN%2B0AOhX%2FPhdliED3P5qaIiVwWyr1W05a%2BOjgPkRXSQj7Ku0kSVgF4PcdJpL1oB3p2vjql1tYqqfIE7I5rJP5GBC%2BvAM5SOfVGOFry%2BBfA5F%2B3zzcL82H1PneaR2IXq64H"
            };

            CBAUser objCBAUser = new CBAUser()
            {
                Email     = "*****@*****.**",
                FirstName = "Guest",
                LastName  = "Test",
                UserName  = "******"
            };

            _mockUserManager.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);
            _mockUserManager.Setup(x => x.ResetPasswordAsync(It.IsAny <CBAUser>(), It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(IdentityResult.Success);

            var result = await _resetPasswordController.PostChangePassword(objPasswordModel);

            Assert.AreEqual(((Microsoft.AspNetCore.Mvc.StatusCodeResult)result).StatusCode, 200);
        }
Example #4
0
        public static async Task SeedSuperUserAsync(UserManager <CBAUser> userManager, RoleManager <CBARole> roleManager)
        {
            var superUser = new CBAUser
            {
                Email          = "*****@*****.**",
                UserName       = "******",
                EmailConfirmed = true,
                IsEnabled      = true
            };

            if (!userManager.Users.Any(user => user.Id == superUser.Id))
            {
                var user = await userManager.FindByEmailAsync(superUser.Email);

                if (user == null)
                {
                    await userManager.CreateAsync(superUser, "Ade981_");

                    await userManager.AddToRolesAsync(superUser, new List <string>()
                    {
                        DefaultRole.SuperUser.ToString()
                    });
                }
                await roleManager.SeedClaimsForSuperAdmin();
            }
        }
Example #5
0
        public async Task PostForgotPassword()
        {
            EmailModel obj = new EmailModel()
            {
                Email = "*****@*****.**"
            };
            CBAUser objCBAUser = new CBAUser()
            {
                Email     = "*****@*****.**",
                FirstName = "Guest",
                LastName  = "Test",
                UserName  = "******"
            };

            string token = "CfDJ8I9H5drWaGxHgWTL%2BERlWjzlReKkIFkFAtEfKwyOEM11WgvvjONokXL9sLJPyNf7lzlki8CfutXU7c8dUx8bxRmj4JYbeOFQaY0uacxy6eHN%2B0AOhX%2FPhdliED3P5qaIiVwWyr1W05a%2BOjgPkRXSQj7Ku0kSVgF4PcdJpL1oB3p2vjql1tYqqfIE7I5rJP5GBC%2BvAM5SOfVGOFry%2BBfA5F%2B3zzcL82H1PneaR2IXq64H";

            _mockUserManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);
            _mockUserManager.Setup(x => x.GeneratePasswordResetTokenAsync(It.IsAny <CBAUser>())).ReturnsAsync(token);

            //Mocking host address.
            _forgetPasswordController.ControllerContext             = new ControllerContext();
            _forgetPasswordController.ControllerContext.HttpContext = new DefaultHttpContext();
            _forgetPasswordController.ControllerContext.HttpContext.Request.Host   = new HostString("localhost:62856");
            _forgetPasswordController.ControllerContext.HttpContext.Request.Scheme = "https";

            var result = await _forgetPasswordController.PostForgotPassword(obj);

            Assert.AreEqual(((ObjectResult)result).Value, "An email has been sent with instruction to reset your password...!!");
        }
Example #6
0
        public async Task AssignTill(int tillId, CBAUser user)
        {
            var till = await _context.InternalAccounts.FindAsync(tillId);

            till.User = user;
            _context.Update(till);
            await _context.SaveChangesAsync();
        }
Example #7
0
        public async Task UpdateUserRoleAsync(CBAUser user, string role)
        {
            user.CBARole = await _roleManager.FindByNameAsync(role);

            _context.Update(user);
            await _context.SaveChangesAsync();

            await _userManager.AddToRoleAsync(user, role);
        }
Example #8
0
        public void SendPasswordResetEmail(string pathToFile, string callbackUrl, CBAUser user)
        {
            var builder = new BodyBuilder();

            using StreamReader SourceReader = File.OpenText(pathToFile);
            builder.HtmlBody = SourceReader.ReadToEnd();
            builder.HtmlBody = string.Format(builder.HtmlBody, callbackUrl, user.FirstName);
            SendEmailFromTemplate(user, "Reset your Password", builder.ToMessageBody());
        }
Example #9
0
        public async Task CheckUserExist_UserIsAvailable()
        {
            CBAUser objCBAUser = ClsCommon.GetMockObject();

            _mockUserManager.Setup(x => x.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);

            var result = await _userController.CheckUserExist("*****@*****.**");

            Assert.IsNotNull(((ObjectResult)result).Value, "Exist");
        }
Example #10
0
        public async Task CheckUserExist_UserIsNotAvaialable()
        {
            CBAUser objCBAUser = ClsCommon.GetMockObject();

            //IdentityError err = new IdentityError();
            //err.Description = "Failed to create the user";
            //_mockUserManager.Setup(x => x.FindByEmailAsync(It.IsAny<string>())).ReturnsAsync(IdentityResult.Failed(err));

            var result = await _userController.CheckUserExist("*****@*****.**");

            Assert.AreEqual(((ObjectResult)result).Value, "NotExist");
        }
Example #11
0
        private async Task LoadAsync(CBAUser user)
        {
            var email = await _userManager.GetEmailAsync(user);

            Email = email;

            Input = new InputModel
            {
                NewEmail = email,
            };

            IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);
        }
Example #12
0
        public async Task EditUserRoleAsync(UserRoleViewModel userRoleViewModel)
        {
            CBAUser user = await _userManager.FindByIdAsync(userRoleViewModel.User.Id);

            CBARole role = await _roleManager.FindByIdAsync(userRoleViewModel.RoleId);

            await _userManager.RemoveFromRolesAsync(user, await _userManager.GetRolesAsync(user));

            await _userManager.AddToRoleAsync(user, role.Name);

            user.CBARole = role;
            _context.Update(user);
            await _context.SaveChangesAsync();
        }
Example #13
0
        public async Task ConfirmMail_InvalidToken()
        {
            CBAUser objCBAUser = ClsCommon.GetMockObject();

            string mockToken = "CfDJ8I9H5drWaGxHgWTL + ERlWjwsoqt2f5ZNoc4xdQXmlFVvLV3crqNf8lyPN2 + 1i7zONZT + OR6gYFJZm6N3cjM2LnsnzobTpGLdznAhTQ3LEE / sW / F9b7AtIT2cvGDVFbsjSJN0GUTdXaJFiZR8yrBI2fggnAB5rDqGBnq3UOyJN0qa68Xwj6bsifkPFy25xRlOnNh83MPVFwzUuGwOpsWMsaUnaTb + XCWGQgBUzSISlKyv + wLS7mU1 + iOKqpWpI / HPSg == ";

            _mockUserManager.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);
            _mockUserManager.Setup(x => x.ConfirmEmailAsync(It.IsAny <CBAUser>(), mockToken + "1234")).ReturnsAsync(IdentityResult.Success);
            _mockUserManager.Setup(x => x.UpdateAsync(It.IsAny <CBAUser>())).ReturnsAsync(IdentityResult.Success);

            var result = await _userController.ConfirmEmail(objCBAUser.Id, mockToken);

            Assert.AreEqual(((ObjectResult)result).StatusCode, 500);
        }
Example #14
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                MailAddress address  = new MailAddress(Input.Email);
                string      UserName = address.User;
                var         user     = new CBAUser {
                    UserName = UserName, Email = Input.Email, FirstName = Input.FirstName, LastName = Input.LastName
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                      $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent : false);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Example #15
0
        public async Task <CBAUser> CreateUserAsync(CBAUser modelUser, string password)
        {
            MailAddress address  = new MailAddress(modelUser.Email);
            string      userName = address.User;
            var         user     = new CBAUser
            {
                UserName  = userName,
                Email     = modelUser.Email,
                FirstName = modelUser.FirstName,
                LastName  = modelUser.LastName
            };
            await _userManager.CreateAsync(user, password);

            return(await _userManager.FindByIdAsync(user.Id));
        }
Example #16
0
        public async Task PostUser_Failed()
        {
            //Mocking host address.
            _userController.ControllerContext             = new ControllerContext();
            _userController.ControllerContext.HttpContext = new DefaultHttpContext();
            _userController.ControllerContext.HttpContext.Request.Host = new HostString("https://*****:*****@guest.com",
                Password        = "******",
                FirstName       = "Guest",
                LastName        = "Test",
                PhoneNumber     = "0225689994",
                OrgName         = "Christchurch",
                OrgCode         = "CHRCH",
                StreetAddrL1    = "1/32 catelina drive",
                StreetAddrL2    = "",
                City            = "Auckland",
                Country         = "Newzealand",
                OrgPhoneNumber  = "0203388485",
                LogoURL         = "",
                CharitiesNumber = "",
                GSTNumber       = ""
            };

            CBAUser objCBAUser = new CBAUser()
            {
                Email     = "*****@*****.**",
                FirstName = "Guest",
                LastName  = "Test",
                UserName  = "******"
            };

            IdentityError err = new IdentityError();

            err.Description = "Failed to create the user";

            //Mocking methods.
            _mockUserManager.Setup(x => x.CreateAsync(It.IsAny <CBAUser>(), It.IsAny <string>())).ReturnsAsync(IdentityResult.Failed(err));
            _mockUserManager.Setup(x => x.GenerateEmailConfirmationTokenAsync(It.IsAny <CBAUser>())).ReturnsAsync("CfDJ8I9H5drWaGxHgWTL+ERlWjwsoqt2f5ZNoc4xdQXmlFVvLV3crqNf8lyPN2+1i7zONZT+OR6gYFJZm6N3cjM2LnsnzobTpGLdznAhTQ3LEE/sW/F9b7AtIT2cvGDVFbsjSJN0GUTdXaJFiZR8yrBI2fggnAB5rDqGBnq3UOyJN0qa68Xwj6bsifkPFy25xRlOnNh83MPVFwzUuGwOpsWMsaUnaTb+XCWGQgBUzSISlKyv+wLS7mU1+iOKqpWpI/HPSg==");

            var result = await _userController.PostUser(cbaUserRegDto);

            Assert.AreEqual(((ObjectResult)result).Value, "Failed to create the user");
        }
Example #17
0
        public async Task Login()
        {
            CBAUser objCBAUser = ClsCommon.GetMockObject();

            _mockUserManager.Setup(x => x.FindByNameAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);
            _mockSignInManager.Setup(x => x.PasswordSignInAsync(It.IsAny <CBAUser>(), It.IsAny <string>(), false, false)).ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Success);

            Login objLogin = new Login()
            {
                Username = "******",
                Password = "******"
            };

            var result = await _accountController.Login(objLogin);

            Assert.IsNotNull(((ObjectResult)result).Value);
        }
Example #18
0
        public void SendEmailFromTemplate(CBAUser user, string subject, MimeEntity content)
        {
            EmailMessage message = new EmailMessage
            {
                Sender   = new MailboxAddress("CBA Admin", _emailMetadata.Sender),
                Reciever = new MailboxAddress($"{user.FirstName} {user.LastName}", user.Email),
                Subject  = subject,
                Content  = content
            };
            var        mimeMessage = EmailMessage.CreateEmailMessage(message);
            SmtpClient smtpClient  = new SmtpClient();

            smtpClient.Connect(_emailMetadata.SmtpServer, _emailMetadata.Port, true);
            smtpClient.Authenticate(_emailMetadata.UserName, _emailMetadata.Password);
            smtpClient.Send(mimeMessage);
            smtpClient.Disconnect(true);
        }
Example #19
0
        private async Task LoadSharedKeyAndQrCodeUriAsync(CBAUser user)
        {
            // Load the authenticator key & QR code URI to display on the form
            var unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);

            if (string.IsNullOrEmpty(unformattedKey))
            {
                await _userManager.ResetAuthenticatorKeyAsync(user);

                unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);
            }

            SharedKey = FormatKey(unformattedKey);

            var email = await _userManager.GetEmailAsync(user);

            AuthenticatorUri = GenerateQrCodeUri(email, unformattedKey);
        }
Example #20
0
        public async Task ConfirmMail_ValidToken()
        {
            CBAUser objCBAUser = ClsCommon.GetMockObject();

            string mockToken = "CfDJ8I9H5drWaGxHgWTL + ERlWjwsoqt2f5ZNoc4xdQXmlFVvLV3crqNf8lyPN2 + 1i7zONZT + OR6gYFJZm6N3cjM2LnsnzobTpGLdznAhTQ3LEE / sW / F9b7AtIT2cvGDVFbsjSJN0GUTdXaJFiZR8yrBI2fggnAB5rDqGBnq3UOyJN0qa68Xwj6bsifkPFy25xRlOnNh83MPVFwzUuGwOpsWMsaUnaTb + XCWGQgBUzSISlKyv + wLS7mU1 + iOKqpWpI / HPSg == ";

            _mockUserManager.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(objCBAUser);
            _mockUserManager.Setup(x => x.ConfirmEmailAsync(It.IsAny <CBAUser>(), mockToken)).ReturnsAsync(IdentityResult.Success);
            _mockUserManager.Setup(x => x.UpdateAsync(It.IsAny <CBAUser>())).ReturnsAsync(IdentityResult.Success);

            //Mocking host address.
            _userController.ControllerContext             = new ControllerContext();
            _userController.ControllerContext.HttpContext = new DefaultHttpContext();
            _userController.ControllerContext.HttpContext.Request.Host = new HostString("https://localhost:62856");

            var result = await _userController.ConfirmEmail(objCBAUser.Id, mockToken);

            //Assert.AreEqual(((ObjectResult)result).Value, "succeed");
        }
Example #21
0
        private async Task LoadAsync(CBAUser user)
        {
            var userName = await _userManager.GetUserNameAsync(user);

            var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

            var firstName = user.FirstName;
            var lastName  = user.LastName;

            Username = userName;

            Input = new InputModel
            {
                PhoneNumber = phoneNumber,
                UserName    = userName,
                FirstName   = firstName,
                LastName    = lastName
            };
        }
        public async Task PostVerifyToken_InvalidUser()
        {
            VerifyTokenDto obj = new VerifyTokenDto()
            {
                Id    = "cee2f64c-fe87-40ca-ac8b-",
                Token = "CfDJ8I9H5drWaGxHgWTL%2BERlWjzlReKkIFkFAtEfKwyOEM11WgvvjONokXL9sLJPyNf7lzlki8CfutXU7c8dUx8bxRmj4JYbeOFQaY0uacxy6eHN%2B0AOhX%2FPhdliED3P5qaIiVwWyr1W05a%2BOjgPkRXSQj7Ku0kSVgF4PcdJpL1oB3p2vjql1tYqqfIE7I5rJP5GBC%2BvAM5SOfVGOFry%2BBfA5F%2B3zzcL82H1PneaR2IXq64H"
            };

            CBAUser objCBAUser = new CBAUser()
            {
                Email     = "*****@*****.**",
                FirstName = "Guest",
                LastName  = "Test",
                UserName  = "******"
            };

            //_mockUserManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).ReturnsAsync();
            _mockUserManager.Setup(x => x.VerifyUserTokenAsync(It.IsAny <CBAUser>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(false);

            var result = await _resetPasswordController.PostVerifyToken(obj);

            Assert.AreEqual(((ObjectResult)result).Value, "Invalid User..!!");
        }
        public async Task <IActionResult> PostUser([FromBody] UserRegDto regUser)
        {
            var cbaUser = new CBAUser()
            {
                Email        = regUser.Email,
                FirstName    = regUser.FirstName,
                LastName     = regUser.LastName,
                PhoneNumber  = regUser.PhoneNumber,
                UserName     = regUser.Email,
                Organisation = new Organisation
                {
                    Name             = regUser.OrgName,
                    Code             = regUser.OrgCode,
                    StreetAddressOne = regUser.StreetAddrL1,
                    StreetAddressTwo = regUser.StreetAddrL2,
                    City             = regUser.City,
                    Country          = regUser.Country,
                    PhoneNumber      = regUser.OrgPhoneNumber,
                    Logo             = regUser.LogoURL,
                    CharitiesNumber  = regUser.CharitiesNumber,
                    GSTNumber        = regUser.GSTNumber,
                    CreatedAt        = DateTime.Now,
                }
            };

            try
            {
                var result = await _userManager.CreateAsync(cbaUser, regUser.Password);

                if (result != null && result.Succeeded)
                {
                    //_logger.LogInformation("User created a new account with password");
                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(cbaUser);

                    var hostAddress = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}";
                    var queryPrarms = new Dictionary <string, string>()
                    {
                        { "userId", cbaUser.Id + "" },
                        { "token", code + "" }
                    };

                    string callbackUrl = QueryHelpers.AddQueryString($"{hostAddress}/api/user/confirmEmail", queryPrarms);
                    var    pathToFile  = Directory.GetCurrentDirectory()
                                         + Path.DirectorySeparatorChar.ToString()
                                         + "EmailTemplates"
                                         + Path.DirectorySeparatorChar.ToString()
                                         + "ConfirmRegEmailTemplate.html";

                    string htmlBody = "";

                    using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
                    {
                        htmlBody = await SourceReader.ReadToEndAsync();
                    };

                    Email emailContent = new Email()
                    {
                        To      = cbaUser.Email,
                        Subject = $"CBA user validation email for {cbaUser.FirstName} {cbaUser.LastName}",
                        Body    = string.Format(htmlBody, cbaUser.FirstName, callbackUrl)
                    };
                    var sentEmailRes = await _emailService.SendEmail(_emailConfig, emailContent);

                    return(sentEmailRes? Ok("succeed") : StatusCode(500, "Failed to send confirmation email, please contact CBA"));
                }
                else
                {
                    foreach (var error in result.Errors)
                    {
                        //_logger.LogError(error.ToString());
                        Console.WriteLine(error.ToString());
                    }
                    return(StatusCode(500, "Failed to create the user"));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            #region Old code
            //if (!ModelState.IsValid)
            //{
            //    return BadRequest(ModelState);
            //}

            //if (LoginExists(user.Email))
            //{
            //    return BadRequest("Login Invalid");
            //}


            //user.Password = _crypto.HashMD5(user.Password);
            //_context.User.Add(user);
            //await _context.SaveChangesAsync();

            //return CreatedAtAction("GetUsers", new { id = user.Id }, user);
            #endregion
        }
Example #24
0
        public void SendAccountConfirmationEmail(string pathToFile, string callbackUrl, CBAUser user, string password)
        {
            var builder = new BodyBuilder();

            using StreamReader SourceReader = File.OpenText(pathToFile);
            builder.HtmlBody = SourceReader.ReadToEnd();
            builder.HtmlBody = string.Format(builder.HtmlBody, callbackUrl, user.UserName, user.Email, password, user.FirstName, user.LastName);
            SendEmailFromTemplate(user, "Confirm your Email", builder.ToMessageBody());
        }
        public async Task EditRoleClaimsAsync(CBARole role, IEnumerable <RoleClaimsViewModel> roleClaims, CBAUser user)
        {
            var claims = await _roleManager.GetClaimsAsync(role);

            foreach (var claim in claims)
            {
                await _roleManager.RemoveClaimAsync(role, claim);
            }
            var selectedClaims = roleClaims.Where(a => a.IsSelected).ToList();

            foreach (var claim in selectedClaims)
            {
                MemberInfo member = typeof(Permission).GetMember(claim.Type)[0];
                var        name   = ((DisplayAttribute)member.GetCustomAttributes(typeof(DisplayAttribute), false)[0]).Name;
                await _roleManager.AddClaimAsync(role, new Claim(claim.Type, name));

                await _signInManager.RefreshSignInAsync(user);
            }
        }
Example #26
0
        public async Task CreateTellerPosting(string userId, TellerPostingViewModel viewModel)
        {
            float creditBalance = 0;
            float debitBalance  = 0;

            CBAUser user = await _context.Users.Include(u => u.Till).FirstOrDefaultAsync(u => u.Id == userId);

            InternalAccount tellerAccount = user.Till;

            if ((viewModel.TransactionSlipNo == null) || (await _context.Postings.AnyAsync(p => p.TransactionSlipNo == viewModel.TransactionSlipNo)))
            {
                throw new Exception("Duplicate Transaction. A transaction with this Slip Number has already been posted.");
            }

            InternalAccount vault = await _context.InternalAccounts.SingleOrDefaultAsync(i => i.AccountCode == "10000000000000");

            AccountConfiguration settings = _context.AccountConfigurations.First();
            CustomerAccount      customerAccount;

            var creditPosting = new Posting
            {
                TransactionDate   = viewModel.TransactionDate,
                TransactionSlipNo = viewModel.TransactionSlipNo,
                Credit            = viewModel.Amount,
                Notes             = viewModel.Notes,
                Balance           = creditBalance,
                PostingDate       = DateTime.Now,
                CBAUserId         = userId,
            };

            var debitPosting = new Posting
            {
                TransactionDate   = viewModel.TransactionDate,
                TransactionSlipNo = viewModel.TransactionSlipNo,
                Debit             = viewModel.Amount,
                Notes             = viewModel.Notes,
                Balance           = debitBalance,
                PostingDate       = DateTime.Now,
                CBAUserId         = userId,
            };

            switch (viewModel.TransactionType)
            {
            case TransactionType.Withdrawal:
                if (tellerAccount == null)
                {
                    throw new Exception("You cannot post  a customer transaction. There is no Till associated with this account.");
                }
                customerAccount = await _context.CustomerAccounts
                                  .Where(i => i.AccountNumber == viewModel.AccountNumber)
                                  .FirstOrDefaultAsync();

                if (!customerAccount.IsActivated)
                {
                    throw new Exception("Unable to post transaction. Customer Account is deactivated.");
                }
                if (tellerAccount.AccountBalance < viewModel.Amount)
                {
                    throw new Exception("Unable to post transaction. Insufficient funds in Till.");
                }
                switch (customerAccount.AccountClass)
                {
                case AccountClass.Savings:
                    if (customerAccount.AccountBalance <= settings.SavingsMinBalance)
                    {
                        throw new Exception("Account has reached Minimum Balance limit. Cannot post withdrawal.");
                    }
                    break;

                case AccountClass.Current:
                    if (customerAccount.AccountBalance <= settings.CurrentMinBalance)
                    {
                        throw new Exception("Account has reached Minimum Balance limit. Cannot post withdrawal.");
                    }
                    break;

                case AccountClass.Loan:
                    break;

                default:
                    break;
                }
                creditBalance = tellerAccount.AccountBalance - viewModel.Amount;
                debitBalance  = customerAccount.AccountBalance - viewModel.Amount;

                creditPosting.AccountCode  = tellerAccount.AccountCode;
                debitPosting.AccountNumber = customerAccount.AccountNumber;

                creditPosting.GLAccount = tellerAccount;
                debitPosting.GLAccount  = customerAccount;

                tellerAccount.AccountBalance   = creditBalance;
                customerAccount.AccountBalance = debitBalance;
                _context.Update(customerAccount);
                break;

            case TransactionType.Deposit:
                if (tellerAccount == null)
                {
                    throw new Exception("You cannot post  a customer transaction. There is no Till associated with this account.");
                }
                customerAccount = await _context.CustomerAccounts
                                  .Where(i => i.AccountNumber == viewModel.AccountNumber)
                                  .FirstOrDefaultAsync();

                if (!customerAccount.IsActivated)
                {
                    throw new Exception("Unable to post transaction. Customer Account is deactivated.");
                }
                creditBalance = customerAccount.AccountBalance + viewModel.Amount;
                debitBalance  = tellerAccount.AccountBalance + viewModel.Amount;

                creditPosting.AccountNumber = customerAccount.AccountNumber;
                debitPosting.AccountCode    = tellerAccount.AccountCode;

                creditPosting.GLAccount = customerAccount;
                debitPosting.GLAccount  = tellerAccount;

                tellerAccount.AccountBalance   = debitBalance;
                customerAccount.AccountBalance = creditBalance;
                _context.Update(customerAccount);
                break;

            case TransactionType.VaultIn:
                tellerAccount = await _context.InternalAccounts.FirstOrDefaultAsync(a => a.AccountCode == viewModel.AccountCode);

                if (tellerAccount.AccountBalance < viewModel.Amount)
                {
                    throw new Exception("Unable to post transaction. Insufficient funds in Till.");
                }
                creditBalance = tellerAccount.AccountBalance - viewModel.Amount;
                debitBalance  = vault.AccountBalance + viewModel.Amount;

                creditPosting.AccountCode = tellerAccount.AccountCode;
                debitPosting.AccountCode  = vault.AccountCode;

                creditPosting.GLAccount = tellerAccount;
                debitPosting.GLAccount  = vault;

                creditPosting.TransactionDate = debitPosting.TransactionDate = DateTime.Now;
                creditPosting.Notes           = debitPosting.Notes = "VaultIn";

                tellerAccount.AccountBalance = creditBalance;
                vault.AccountBalance         = debitBalance;
                _context.Update(vault);
                break;

            case TransactionType.VaultOut:
                tellerAccount = await _context.InternalAccounts.FirstOrDefaultAsync(a => a.AccountCode == viewModel.AccountCode);

                if (vault.AccountBalance < viewModel.Amount)
                {
                    throw new Exception("Unable to post transaction. Insufficient funds in Vault.");
                }
                creditBalance = vault.AccountBalance - viewModel.Amount;
                debitBalance  = tellerAccount.AccountBalance + viewModel.Amount;

                creditPosting.AccountCode = vault.AccountCode;
                debitPosting.AccountCode  = tellerAccount.AccountCode;

                creditPosting.GLAccount = vault;
                debitPosting.GLAccount  = tellerAccount;

                creditPosting.TransactionDate = debitPosting.TransactionDate = DateTime.Now;
                creditPosting.Notes           = debitPosting.Notes = "VaultIn";

                tellerAccount.AccountBalance = debitBalance;
                vault.AccountBalance         = creditBalance;
                _context.Update(vault);
                break;

            default:
                break;
            }

            _context.Update(tellerAccount);
            await _context.SaveChangesAsync();

            creditPosting.TransactionDate = DateTime.Now;
            debitPosting.TransactionDate  = DateTime.Now;

            creditPosting.Balance = creditBalance;
            debitPosting.Balance  = debitBalance;

            _context.Add(creditPosting);
            _context.Add(debitPosting);
            await _context.SaveChangesAsync();
        }
Example #27
0
        public async Task <IActionResult> OnPostConfirmationAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            // Get the information about the user from the external login provider
            var info = await _signInManager.GetExternalLoginInfoAsync();

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

            if (ModelState.IsValid)
            {
                var user = new CBAUser {
                    UserName = Input.Email, Email = Input.Email
                };

                var result = await _userManager.CreateAsync(user);

                if (result.Succeeded)
                {
                    result = await _userManager.AddLoginAsync(user, info);

                    if (result.Succeeded)
                    {
                        _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);

                        var userId = await _userManager.GetUserIdAsync(user);

                        var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                        code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                        var callbackUrl = Url.Page(
                            "/Account/ConfirmEmail",
                            pageHandler: null,
                            values: new { area = "Identity", userId = userId, code = code },
                            protocol: Request.Scheme);

                        await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                          $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                        // If account confirmation is required, we need to show the link if we don't have a real email sender
                        if (_userManager.Options.SignIn.RequireConfirmedAccount)
                        {
                            return(RedirectToPage("./RegisterConfirmation", new { Email = Input.Email }));
                        }

                        await _signInManager.SignInAsync(user, isPersistent : false, info.LoginProvider);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            ProviderDisplayName = info.ProviderDisplayName;
            ReturnUrl           = returnUrl;
            return(Page());
        }