public async Task <IActionResult> Login(SignIn signInRequest)
        {
            string errorMessage = string.Empty;

            try
            {
                if (signInRequest != null)
                {
                    var apiAuth    = new ApiCallerAuthUser(_apiUrl.SSAuth);
                    var userResult = apiAuth.AuthenticateUser(signInRequest);
                    var apiOrg     = new ApiCallerUserOrganization(_apiUrl.SSChurch);

                    // TODO : Get Org ID and Name from Login Id/User ID

                    // Handle Claims
                    var identity = new ClaimsIdentity(new[]
                    {
                        new Claim(ClaimTypes.Role, "Admin"),
                        new Claim(ClaimTypes.NameIdentifier, userResult.LoginId),
                        new Claim(ClaimTypes.Name, string.Concat(userResult.FirstName, userResult.LastName)),
                        new Claim(ClaimTypes.Surname, userResult.LastName),
                        new Claim(ClaimTypes.GivenName, userResult.FirstName),
                        new Claim(ClaimTypes.Email, userResult.EmailId)
                    }, CookieAuthenticationDefaults.AuthenticationScheme);

                    var principal = new ClaimsPrincipal(identity);

                    await HttpContext.SignInAsync(
                        CookieAuthenticationDefaults.AuthenticationScheme,
                        principal);
                }
            }
            catch (Exception ex)
            {
                errorMessage = ex.Message;
            }

            if (string.IsNullOrEmpty(errorMessage))
            {
                return(RedirectToAction("Display", "Dashboard"));
            }
            else
            {
                ViewBag.SignInError = errorMessage;
                return(View("~/Views/Home/Index.cshtml"));
            }
        }
        public async Task <IActionResult> Register(RegisterModel model)
        {
            string errorMessage = string.Empty;

            try
            {
                var apiSecQCall               = new ApiCallerSecurityQuestions(_apiUrl.SSAuth);
                var SecurityQuestionsList     = apiSecQCall.GetAllSecurityQuestions();
                var SecurityQuestionModelList = from secQuestion in SecurityQuestionsList
                                                select new QuestionsModel()
                {
                    Id = secQuestion.SecurityQuestionId.ToString(), Name = secQuestion.Question
                };
                ViewBag.QuestionList = SecurityQuestionModelList.ToList();

                // Get Auth Group by name
                var       apiCall         = new ApiCallerAuthGroup(_apiUrl.SSAuth);
                AuthGroup authGroupResult = apiCall.GetAuthGroupByGroupName("NP");

                // Get Role by name
                var  apiCallRole = new ApiCallerRole(_apiUrl.SSAuth);
                Role roleResult  = apiCallRole.GetRoleByName("Admin");

                var userInfoObject = new AuthUser()
                {
                    AuthGroupId = authGroupResult.AuthGroupId,
                    FirstName   = model.FirstName,
                    LastName    = model.LastName,
                    Email       = model.Email,
                    LoginId     = model.Email,
                    Password    = model.Password,
                    Status      = "A",
                    UserAdded   = "Admin@SS",
                    UserRole    = new List <UserRole>
                    {
                        new UserRole()
                        {
                            RoleId    = roleResult.RoleId,
                            UserAdded = "Admin@SS"
                        }
                    },
                    UserSecurityQuestion = new List <UserSecurityQuestion>
                    {
                        new UserSecurityQuestion()
                        {
                            SecurityQuestionId = model.Question1,
                            Answer             = model.Answer1,
                            UserAdded          = "Admin@SS"
                        },
                        new UserSecurityQuestion()
                        {
                            SecurityQuestionId = model.Question2,
                            Answer             = model.Answer2,
                            UserAdded          = "Admin@SS"
                        },
                        new UserSecurityQuestion()
                        {
                            SecurityQuestionId = model.Question3,
                            Answer             = model.Answer3,
                            UserAdded          = "Admin@SS"
                        }
                    }
                };

                // Register User
                var apiAuth    = new ApiCallerAuthUser(_apiUrl.SSAuth);
                var userResult = apiAuth.RegisterUser(userInfoObject);

                // Add Organization
                var apiOrg    = new ApiCallerOrganization(_apiUrl.SSChurch);
                var orgResult = apiOrg.PostAddOrganization(new Organization
                {
                    Name       = model.OrganizationName,
                    IndustryId = model.IndustryId,
                    Phone      = model.OrgPhone,
                    Email      = model.OrgEmail,
                    UserAdded  = "Admin@SS"
                });

                // Add User Org
                var apiUserOrg    = new ApiCallerUserOrganization(_apiUrl.SSChurch);
                var userOrgResult = apiUserOrg.PostAddUserOrganization(new UserOrganization
                {
                    OrganizationId = orgResult.OrganizationId,
                    AuthUserId     = userResult.AuthUserId,
                    UserAdded      = "Admin@SS"
                });

                // Handle Claims
                var claims = new List <Claim>
                {
                    new Claim(ClaimTypes.NameIdentifier, model.Email),
                    new Claim(ClaimTypes.Name, string.Concat(model.FirstName, model.LastName)),
                    new Claim(ClaimTypes.Surname, model.LastName),
                    new Claim(ClaimTypes.GivenName, model.FirstName),
                    new Claim(ClaimTypes.Email, model.Email),
                    new Claim(ClaimTypes.Role, "Admin"),
                    new Claim("OrganizationName", model.OrganizationName),
                    new Claim("OrganizationId", orgResult.OrganizationId.ToString())
                };

                var identity  = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                var principal = new ClaimsPrincipal(identity);

                await HttpContext.SignInAsync(principal);
            }
            catch (Exception ex)
            {
                errorMessage = ex.Message;
            }

            ViewBag.ErrorMessage = errorMessage;
            if (!string.IsNullOrEmpty(errorMessage))
            {
                return(View("Register"));
            }
            else
            {
                return(RedirectToAction("Display", "Dashboard"));
            }
        }