public ActionResult Registration([Bind(Exclude = "ActivationCode, IsEmailVerified")] RegistrationView registrationView)
        {
            bool   statusRegistration  = false;
            string messageRegistration = string.Empty;

            if (ModelState.IsValid)
            {
                // Checks if Email already Exists
                var IsEmailExist = Membership.GetUserNameByEmail(registrationView.Email);
                if (!string.IsNullOrEmpty(IsEmailExist))
                {
                    ModelState.AddModelError("", "Sorry: Email already Exists");
                    return(View(registrationView));
                }

                // Generate Activation Code
                registrationView.ActivationCode = Guid.NewGuid();

                // Password Hashing
                registrationView.Password        = Crypto.Hash(registrationView.Password);
                registrationView.ConfirmPassword = Crypto.Hash(registrationView.ConfirmPassword);

                registrationView.IsEmailVerfied = false;


                //Save User Data
                using (RecruiterContext dbContext = new RecruiterContext())
                {
                    var user = new User()
                    {
                        Username         = registrationView.Username,
                        FirstName        = registrationView.FirstName,
                        LastName         = registrationView.LastName,
                        Email            = registrationView.Email,
                        Password         = registrationView.Password,
                        CreatedDate      = DateTime.Now,
                        LastModifiedDate = DateTime.Now,
                    };

                    dbContext.Users.Add(user);
                    dbContext.SaveChanges();

                    //Add user to Applicant Role
                    var customRole    = new CustomRole();
                    var currentUserId = dbContext.Users.Where(u => u.Email == user.Email).FirstOrDefault().Id;
                    var applicantRole = new UserRole()
                    {
                        UserId           = currentUserId,
                        RoleId           = (dbContext.Roles.Where(r => r.Name == "Applicant").FirstOrDefault()).Id,
                        CreatedById      = currentUserId,
                        LastModifiedById = currentUserId,
                        CreatedDate      = DateTime.Now,
                        LastModifiedDate = DateTime.Now
                    };
                    customRole.AddUserToRole(applicantRole);
                    var applicant = new Applicant()
                    {
                        //Username = applicantProfileViewModel.Username,
                        ApplicantId      = currentUserId,
                        CreatedById      = currentUserId,
                        LastModifiedById = currentUserId,
                        CreatedDate      = DateTime.Now,
                        LastModifiedDate = DateTime.Now
                    };
                    dbContext.Applicants.Add(applicant);
                    dbContext.SaveChanges();
                }


                //Verification Email
                VerificationEmail(registrationView.Email, registrationView.ActivationCode.ToString());
                messageRegistration = "Registration successfully done. Account activation link" +
                                      " has been sent to your email id " + registrationView.Email;
                statusRegistration = true;
            }
            else
            {
                messageRegistration = "Invalid Request!";
            }
            ViewBag.Message = messageRegistration;
            ViewBag.Status  = statusRegistration;

            return(View(registrationView));
        }
        public void Seed()
        {
            var username = "******";
            var password = Convert.ToBase64String(System.Security.Cryptography.SHA256.Create()
                                                  .ComputeHash(Encoding.UTF8.GetBytes("password")));
            var email     = "*****@*****.**";
            var firstname = "Ebunoluwa";
            var lastname  = "Abiona";

            var membership = new CustomMembership();

            var adminUser = membership.GetUser(email, false);

            if (adminUser == null)
            {
                adminUser = membership.CreateUser(username, password, email, firstname, lastname, true, null, out MembershipCreateStatus status);

                switch (status)
                {
                case MembershipCreateStatus.Success:

                    break;

                case MembershipCreateStatus.InvalidUserName:
                    break;

                case MembershipCreateStatus.InvalidPassword:
                    break;

                case MembershipCreateStatus.InvalidQuestion:
                    break;

                case MembershipCreateStatus.InvalidAnswer:
                    break;

                case MembershipCreateStatus.InvalidEmail:
                    break;

                case MembershipCreateStatus.DuplicateUserName:
                    break;

                case MembershipCreateStatus.DuplicateEmail:
                    break;

                case MembershipCreateStatus.UserRejected:
                    break;

                case MembershipCreateStatus.InvalidProviderUserKey:
                    break;

                case MembershipCreateStatus.DuplicateProviderUserKey:
                    break;

                case MembershipCreateStatus.ProviderError:
                    break;

                default:
                    break;
                }
            }


            var roleProvider = new CustomRole();

            if (roleProvider.GetAllRoles().Length <= 0)
            {
                var roles       = new string[] { "Admin", "Applicant" };
                var createdById = (adminUser as CustomMembershipUser).UserId;

                foreach (string roleName in roles)
                {
                    var role = new Role
                    {
                        Name        = roleName,
                        CreatedById = createdById,
                        CreatedDate = DateTime.Now
                    };

                    roleProvider.CreateRole(role);
                }

                using (RecruiterContext db = new RecruiterContext())
                {
                    var userRole = new UserRole
                    {
                        RoleId           = (db.Roles.Where(r => r.Name == "Admin").FirstOrDefault()).Id,
                        UserId           = createdById,
                        CreatedById      = createdById,
                        LastModifiedById = createdById
                    };

                    roleProvider.AddUserToRole(userRole);
                }
            }
        }