public AccountController(SignInManager <IgniteUser> signInManager, UserManager <IgniteUser> userManager, IgniteContext context, IEmailSender emailSender, ILogger <AccountController> logger, RoleManager <IgniteRole> roleManager, IgniteUser igniteUser)
 {
     _signInManager = signInManager;
     _userManager   = userManager;
     _context       = context;
     _emailSender   = emailSender;
     _logger        = logger;
     _roleManager   = roleManager;
     _igniteUser    = igniteUser;
 }
        public IViewComponentResult Invoke()
        {
            var users = _context.IgniteUsers.AsNoTracking();
            var igniteUserApplications = _context.IgniteUserApplications.AsNoTracking();
            var depts = _context.Departments.AsNoTracking();

            // inner join on dept and user
            users.Include(ig => ig.Department);
            List <IgniteUser>     igUsers     = users.ToList();
            List <Department>     departments = depts.ToList();
            IgniteUser            usr         = new IgniteUser();
            IgniteUserApplication app         = new IgniteUserApplication();
            Department            dept        = new Department();

            foreach (var m in igUsers)
            {
                usr  = m;
                dept = m.Department;
                igUsers.Add(usr);
                departments.Add(dept);
            }

            var joinRes = (from i in igUsers
                           join d in departments on i.FKDepartmentId equals d.DepartmentId
                           select new IgniteUserReportView
            {
                AppUserId = i.Id,
                FirstName = i.FirstName,
                LastName = i.LastName,
                DepartmentId = d.DepartmentId,
                DepartmentName = d.DepartmentName
            }).ToList();

            IgniteUserReportView vm = new IgniteUserReportView()
            {
                FirstName      = usr.FirstName,
                LastName       = usr.LastName,
                LinkClicked    = usr.LinkClicked,
                DepartmentId   = dept.DepartmentId,
                DepartmentName = dept.DepartmentName
            };

            //var viewName = isNullOrEmptyViewName ?? DefaultViewName : viewName


            return(View(igUsers));
        }
Example #3
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");

            if (ModelState.IsValid)
            {
                var user = new IgniteUser
                {
                    UserName           = Input.UserName,
                    NormalizedUserName = Input.UserName,
                    Email           = Input.Email,
                    IgniteEmail     = Input.Email,
                    NormalizedEmail = Input.Email,
                    FirstName       = Input.FirstName,
                    LastName        = Input.LastName,
                    IsInternalUser  = true,
                    HiredDate       = DateTime.Now
                };

                if (!Input.IsAdmin)
                {
                    user.EmailConfirmed = true;
                }


                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    if (!await _roleManager.RoleExistsAsync(UserRole.AdminUser))
                    {
                        await _roleManager.CreateAsync(new IgniteRole(UserRole.AdminUser));
                    }
                    if (!await _roleManager.RoleExistsAsync(UserRole.HR))
                    {
                        await _roleManager.CreateAsync(new IgniteRole(UserRole.HR));
                    }
                    if (!await _roleManager.RoleExistsAsync(UserRole.ManagerUser))
                    {
                        await _roleManager.CreateAsync(new IgniteRole(UserRole.ManagerUser));
                    }
                    if (!await _roleManager.RoleExistsAsync(UserRole.RegEmp))
                    {
                        await _roleManager.CreateAsync(new IgniteRole(UserRole.RegEmp));
                    }

                    if (Input.IsAdmin)
                    {
                        await _userManager.AddToRoleAsync(user, UserRole.AdminUser);
                    }
                    else
                    {
                        await _userManager.AddToRoleAsync(user, UserRole.RegEmp);

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

                        return(LocalRedirect(returnUrl));
                    }

                    await _userManager.AddToRoleAsync(user, UserRole.AdminUser);

                    _logger.LogInformation("User created a new account with password");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    var callbackUrl = Url.Page("/Confirm/ConfirmEmail",
                                               pageHandler: null,
                                               values: new { userId = user.Id, code = code },
                                               protocol: Request.Scheme);

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



                    //_context.IgniteUserApplications.Add();

                    await _context.SaveChangesAsync();

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

            return(Page());
        }
        // GET: /<controller>/
        public async Task <IActionResult> Register([FromBody] RegisterViewComponent model)
        {
            try
            {
                DateTime?date = null;

                var user = new IgniteUser
                {
                    UserName           = model.Input.UserName,
                    NormalizedUserName = model.Input.UserName,
                    Email                   = model.Input.Email,
                    NormalizedEmail         = model.Input.Email,
                    IgniteEmail             = model.Input.Email,
                    FirstName               = model.Input.FirstName,
                    MiddleInitial           = model.Input.MiddleInitial,
                    LastName                = model.Input.LastName,
                    FirstNameLastName       = string.Format("{0} {1} {2}", model.Input.FirstName, model.Input.MiddleInitial, model.Input.LastName),
                    HiredDate               = DateTime.Today,
                    TermDate                = date,
                    ApplicationApprovalDate = date
                };

                if (ModelState.IsValid)
                {
                    var nameFormatter = string.Format("{0} {1}", user.FirstName, user.LastName);

                    var claimsIdentity = new ClaimsIdentity(new[]
                    {
                        new Claim(ClaimTypes.NameIdentifier, nameFormatter),
                    });

                    if (!model.Input.IsAdmin)
                    {
                        user.EmailConfirmed = true;
                    }

                    var result = await _userManager.CreateAsync(user, Input.Password);

                    if (result.Succeeded)
                    {
                        if (!await _roleManager.RoleExistsAsync(UserRole.AdminUser))
                        {
                            await _roleManager.CreateAsync(new IgniteRole(UserRole.AdminUser));
                        }
                        if (!await _roleManager.RoleExistsAsync(UserRole.HR))
                        {
                            await _roleManager.CreateAsync(new IgniteRole(UserRole.HR));
                        }
                        if (!await _roleManager.RoleExistsAsync(UserRole.ManagerUser))
                        {
                            await _roleManager.CreateAsync(new IgniteRole(UserRole.ManagerUser));
                        }
                        if (!await _roleManager.RoleExistsAsync(UserRole.RegEmp))
                        {
                            await _roleManager.CreateAsync(new IgniteRole(UserRole.RegEmp));
                        }

                        if (Input.IsAdmin)
                        {
                            var i = await _userManager.AddToRoleAsync(user, UserRole.AdminUser);
                        }


                        await _userManager.AddToRoleAsync(user, UserRole.AdminUser);

                        // _logger.LogInformation("User created a new");

                        #region Update Ignite User Types

                        //var claims = new List<Claim>();
                        //{
                        //    claims.Add(new Claim(ClaimTypes.Name, nameFormatter));
                        //    claims.Add(new Claim(ClaimTypes.Role, ""));
                        //};

                        var claims = new List <Claim>();

                        if (await _userManager.IsInRoleAsync(user, UserRole.AdminUser) == true)
                        {
                            user.FkIgniteUserTypeId = 1;
                            claims.Add(new Claim(ClaimTypes.Name, nameFormatter));
                            claims.Add(new Claim(ClaimTypes.Role, UserRole.AdminUser));
                            await _userManager.AddClaimsAsync(user, claims);
                        }
                        if (await _userManager.IsInRoleAsync(user, UserRole.HR) == true)
                        {
                            claims.Add(new Claim(ClaimTypes.Name, nameFormatter));
                            claims.Add(new Claim(ClaimTypes.Role, UserRole.AdminUser));
                            user.FkIgniteUserTypeId = 2;
                        }
                        if (await _userManager.IsInRoleAsync(user, UserRole.ManagerUser) == true)
                        {
                            claims.Add(new Claim(ClaimTypes.Name, nameFormatter));
                            claims.Add(new Claim(ClaimTypes.Role, UserRole.AdminUser));
                            user.FkIgniteUserTypeId = 3;
                        }
                        if (await _userManager.IsInRoleAsync(user, UserRole.RegEmp) == true)
                        {
                            claims.Add(new Claim(ClaimTypes.Name, nameFormatter));
                            claims.Add(new Claim(ClaimTypes.Role, UserRole.AdminUser));
                            user.FkIgniteUserTypeId = 4;
                        }

                        #endregion

                        _logger.LogInformation("User createed a new account with password");

                        var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                        var callbackUrl = Url.Page("/Confirm/ConfirmEmail",
                                                   pageHandler: null,
                                                   values: new { userId = user.Id, code = code },
                                                   protocol: Request.Scheme);

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

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

                        await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

                        await HttpContext.SignOutAsync(IdentityConstants.ApplicationScheme);

                        //_context.IgniteUserApplications.Add();

                        await _context.SaveChangesAsync();

                        return(View("Login"));
                    }
                }
                else
                {
                    return(View(model.Input));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return(View());
        }