Beispiel #1
0
        public ActionResult DeletePending(int id = 0)
        {
            if (Authorized(RoleType.SystemManager))
            {
                PendingUser user;
                using (PendingUsersRepository userRep = new PendingUsersRepository())
                {
                    user = userRep.GetEntity(id, "User");
                }

                if (user == null)
                {
                    return(Error(Loc.Dic.error_user_not_found));
                }
                if (user.CompanyId != CurrentUser.CompanyId)
                {
                    return(Error(Loc.Dic.error_no_permission));
                }

                return(View(user));
            }
            else
            {
                return(Error(Loc.Dic.error_no_permission));
            }
        }
Beispiel #2
0
        public ActionResult DeletePendingConfirmed(int id)
        {
            if (Authorized(RoleType.SystemManager))
            {
                PendingUser user;
                using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                {
                    user = pendingUserRep.GetEntity(id);

                    if (user == null)
                    {
                        return(Error(Loc.Dic.error_user_not_found));
                    }
                    if (user.CompanyId != CurrentUser.CompanyId)
                    {
                        return(Error(Loc.Dic.error_no_permission));
                    }

                    pendingUserRep.Delete(user.Id);
                }

                return(RedirectToAction("Index"));
            }
            else
            {
                return(Error(Loc.Dic.error_no_permission));
            }
        }
Beispiel #3
0
        private bool?CompanyCanAddUsers()
        {
            int companyUserCount = 0;
            int companyUserLimit = 0;

            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
                using (PendingUsersRepository pendingUsersRep = new PendingUsersRepository())
                    using (CompaniesRepository companiesRep = new CompaniesRepository())
                    {
                        try
                        {
                            companyUserCount =
                                usersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId && x.IsActive).Count() +
                                pendingUsersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId).Count();

                            companyUserLimit = companiesRep.GetEntity(CurrentUser.CompanyId).UsersLimit;
                        }
                        catch
                        {
                            return(null);
                        }
                    }

            return(companyUserCount < companyUserLimit);
        }
Beispiel #4
0
        public ActionResult EditPending(PendingUser user, string[] roleNames)
        {
            if (Authorized(RoleType.SystemManager))
            {
                if (ModelState.IsValid)
                {
                    PendingUser userFromDatabase;
                    using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                    {
                        userFromDatabase = pendingUserRep.GetEntity(user.Id);

                        if (userFromDatabase != null)
                        {
                            if (userFromDatabase.CompanyId != CurrentUser.CompanyId)
                            {
                                return(Error(Loc.Dic.error_no_permission));
                            }

                            RoleType        combinedRoles  = RoleType.None;
                            List <RoleType> forbiddenRoles = GetForbiddenRoles();

                            foreach (string roleName in roleNames)
                            {
                                RoleType role;
                                if (Enum.TryParse(roleName, out role) && !forbiddenRoles.Contains(role))
                                {
                                    combinedRoles = Roles.CombineRoles(combinedRoles, role);
                                }
                                else
                                {
                                    return(Error(Loc.Dic.error_invalid_form));
                                }
                            }

                            userFromDatabase.Email            = user.Email;
                            userFromDatabase.Roles            = (int)combinedRoles;
                            userFromDatabase.OrdersApproverId = user.OrdersApproverId.HasValue && user.OrdersApproverId.Value == -1 ? null : user.OrdersApproverId;

                            pendingUserRep.Update(userFromDatabase);
                            return(RedirectToAction("Index"));
                        }
                        else
                        {
                            return(Error(Loc.Dic.error_user_not_found));
                        }
                    }
                }
                else
                {
                    return(Error(ModelState));
                }
            }
            else
            {
                return(Error(Loc.Dic.error_no_permission));
            }
        }
Beispiel #5
0
        public ActionResult EditPending(int id = 0)
        {
            if (Authorized(RoleType.SystemManager))
            {
                PendingUser             user;
                List <SelectListItemDB> usersList = new List <SelectListItemDB> {
                    new SelectListItemDB()
                    {
                        Id = -1, Name = "(ללא) מאשר סופי"
                    }
                };

                using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
                    using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                    {
                        user = pendingUserRep.GetEntity(id);
                        usersList.AddRange(usersRep.GetList().Where(u => u.CompanyId == CurrentUser.CompanyId && ((RoleType)u.Roles & RoleType.OrdersApprover) == RoleType.OrdersApprover).Select(x => new SelectListItemDB()
                        {
                            Id = x.Id, Name = x.FirstName + " " + x.LastName
                        }));
                    }

                if (user.CompanyId != CurrentUser.CompanyId)
                {
                    return(Error(Loc.Dic.error_no_permission));
                }

                if (user != null)
                {
                    ViewBag.OrdersApproverId = new SelectList(usersList, "Id", "Name", user.OrdersApproverId.HasValue ? user.OrdersApproverId.Value : -1);

                    List <string> roleNames = GetRoleNames();
                    ViewBag.RolesList = roleNames;

                    ViewBag.ExistingRoles =
                        Roles.GetAllRoles((RoleType)user.Roles)
                        .Select(x => x.ToString())
                        .ToList();

                    return(View(user));
                }
                else
                {
                    return(Error(Loc.Dic.error_user_not_found));
                }
            }
            else
            {
                return(Error(Loc.Dic.error_no_permission));
            }
        }
Beispiel #6
0
        public ActionResult Index(int page = FIRST_PAGE, string sortby = NO_SORT_BY, string order = DEFAULT_ORDER)
        {
            if (!Authorized(RoleType.UsersManager))
            {
                return(Error(Loc.Dic.error_no_permission));
            }

            AllUsersModel      model = new AllUsersModel();
            IEnumerable <User> activeUsersQuery;

            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
                using (PendingUsersRepository pendingUsersRep = new PendingUsersRepository())
                    using (CompaniesRepository companiesRep = new CompaniesRepository())
                    {
                        activeUsersQuery     = usersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId && x.IsActive).ToList();
                        activeUsersQuery     = Pagination(activeUsersQuery, page, sortby, order).ToList();
                        model.NonActiveUsers = usersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId && !x.IsActive).ToList();
                        Company company = companiesRep.GetEntity(CurrentUser.CompanyId);

                        if (model.NonActiveUsers == null)
                        {
                            return(Error(Loc.Dic.error_users_get_error));
                        }
                        if (activeUsersQuery == null)
                        {
                            return(Error(Loc.Dic.error_users_get_error));
                        }
                        if (company == null)
                        {
                            return(Error(Loc.Dic.error_database_error));
                        }

                        model.ActiveUsers        = activeUsersQuery.ToList();
                        model.ActiveUsersCount   = activeUsersQuery.Count();
                        model.CanceledUsersCount = model.NonActiveUsers.Count();
                        model.UsersLimit         = companiesRep.GetEntity(CurrentUser.CompanyId).UsersLimit;

                        return(View(model));
                    }
        }
Beispiel #7
0
        private LogInResult ResponseIntoUser(IAuthenticationResponse response)
        {
            LogInResult logInResult = new LogInResult();
            logInResult.IsAuthenticated = true;

            var fetchResponse = response.GetExtension<FetchResponse>();
            if (fetchResponse != null)
            {
                logInResult.User = new OpenIdUser(fetchResponse, response.ClaimedIdentifier);

                using (AllUsersRepository userRep = new AllUsersRepository())
                using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                {
                    User user = userRep.GetList().SingleOrDefault(x => x.Email == logInResult.User.Email);
                    if (user != null)
                    {
                        if (user.IsActive)
                        {
                            if (user.FirstName != logInResult.User.FirstName || user.LastName != logInResult.User.LastName)
                            {
                                user.FirstName = logInResult.User.FirstName;
                                user.LastName = logInResult.User.LastName;
                                userRep.Update(user);
                            }

                            logInResult.IsRegistered = true;
                            logInResult.User.UserId = user.Id;
                            return logInResult;
                        }
                        else
                        {
                            logInResult.IsRegistered = false;
                            logInResult.IsCanceled = true;
                            logInResult.User.UserId = user.Id;
                            return logInResult;
                        }
                    }
                    else
                    {
                        PendingUser pendingUser = pendingUserRep.GetList().SingleOrDefault(x => x.Email == logInResult.User.Email);

                        if (pendingUser != null)
                        {
                            User newUser = new User()
                            {
                                CompanyId = pendingUser.CompanyId,
                                Email = logInResult.User.Email,
                                FirstName = logInResult.User.FirstName,
                                LastName = logInResult.User.LastName,
                                CreationTime = DateTime.Now,
                                LastLogInTime = DateTime.Now,
                                Roles = pendingUser.Roles,
                                LanguageId = pendingUser.LanguageId,
                                IsActive = true
                            };

                            if (!userRep.Create(newUser))
                                return logInResult;

                            logInResult.User.UserId = newUser.Id;
                            pendingUserRep.Delete(pendingUser.Id);

                            logInResult.IsNewUser = true;
                            logInResult.IsRegistered = true;
                            return logInResult;
                        }
                        else
                        {
                            return logInResult;
                        }
                    }
                }
            }
            else
            {
                return logInResult;
            }
        }
Beispiel #8
0
        public ActionResult Create(User user, string[] roleNames)
        {
            if (!ModelState.IsValid)
            {
                List <string>           allRoleNames       = GetRoleNames();
                List <SelectListItemDB> ApprovalRoutesList = new List <SelectListItemDB>()
                {
                    new SelectListItemDB()
                    {
                        Id = -1, Name = Loc.Dic.NoApprovalRoute
                    }
                };
                SelectList languagesList;

                using (ApprovalRoutesRepository routesRep = new ApprovalRoutesRepository(CurrentUser.CompanyId))
                    using (LanguagesRepository languagesRep = new LanguagesRepository())
                    {
                        ApprovalRoutesList.AddRange(
                            routesRep.GetList()
                            .Select(x => new SelectListItemDB()
                        {
                            Id = x.Id, Name = x.Name
                        })
                            );

                        languagesList = new SelectList(languagesRep.GetList().ToList(), "Id", "Name");
                    }

                ViewBag.RolesList     = allRoleNames;
                ViewBag.RoutesList    = new SelectList(ApprovalRoutesList, "Id", "Name");
                ViewBag.LanguagesList = languagesList;

                return(View(user));
            }

            if (user.DefaultApprovalRouteId == -1)
            {
                user.DefaultApprovalRouteId = null;
            }

            if (!Authorized(RoleType.SystemManager))
            {
                return(Error(Loc.Dic.error_no_permission));
            }

            int companyUserCount = 0;
            int companyUserLimit = 0;

            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
                using (ApprovalRoutesRepository routesRep = new ApprovalRoutesRepository(CurrentUser.CompanyId))
                    using (PendingUsersRepository pendingUsersRep = new PendingUsersRepository())
                        using (CompaniesRepository companiesRep = new CompaniesRepository())
                        {
                            if (user.DefaultApprovalRouteId.HasValue)
                            {
                                var route = routesRep.GetEntity(user.DefaultApprovalRouteId.Value);
                                if (route == null)
                                {
                                    return(Error(Loc.Dic.error_invalid_form));
                                }
                            }

                            try
                            {
                                companyUserCount =
                                    usersRep.GetList().Where(x => x.IsActive).Count() +
                                    pendingUsersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId).Count();

                                companyUserLimit = companiesRep.GetEntity(CurrentUser.CompanyId).UsersLimit;
                            }
                            catch
                            {
                                return(Error(Loc.Dic.error_database_error));
                            }

                            bool userExists        = usersRep.GetList().Any(x => x.CompanyId == CurrentUser.CompanyId && x.Email == user.Email);
                            bool pendingUserExists = pendingUsersRep.GetList().Any(x => x.CompanyId == CurrentUser.CompanyId && x.Email == user.Email);

                            if (userExists || pendingUserExists)
                            {
                                return(Error(Loc.Dic.error_users_exist_error));
                            }
                        }

            if (companyUserCount >= companyUserLimit)
            {
                return(Error(Loc.Dic.error_users_limit_reached));
            }

            user.CompanyId    = CurrentUser.CompanyId;
            user.CreationTime = DateTime.Now;

            RoleType        combinedRoles  = RoleType.None;
            List <RoleType> forbiddenRoles = GetForbiddenRoles();

            if (roleNames == null || roleNames.Count() == 0)
            {
                return(Error(Loc.Dic.error_invalid_form));
            }

            foreach (string roleName in roleNames)
            {
                RoleType role;
                if (!Enum.TryParse(roleName, out role) || forbiddenRoles.Contains(role))
                {
                    return(Error(Loc.Dic.error_invalid_form));
                }
                combinedRoles = Roles.CombineRoles(combinedRoles, role);
            }

            user.Roles = (int)combinedRoles;
            user.DefaultApprovalRouteId = user.DefaultApprovalRouteId.HasValue && user.DefaultApprovalRouteId.Value == -1 ? null : user.DefaultApprovalRouteId;

            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
            {
                if (!usersRep.Create(user))
                {
                    return(Error(Loc.Dic.error_users_create_error));
                }
            }

            return(RedirectToAction("Index"));
        }
Beispiel #9
0
        private bool? CompanyCanAddUsers()
        {
            int companyUserCount = 0;
            int companyUserLimit = 0;
            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
            using (PendingUsersRepository pendingUsersRep = new PendingUsersRepository())
            using (CompaniesRepository companiesRep = new CompaniesRepository())
            {
                try
                {
                    companyUserCount =
                        usersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId && x.IsActive).Count() +
                        pendingUsersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId).Count();

                    companyUserLimit = companiesRep.GetEntity(CurrentUser.CompanyId).UsersLimit;
                }
                catch
                {
                    return null;
                }
            }

            return companyUserCount < companyUserLimit;
        }
Beispiel #10
0
        public ActionResult EditPending(PendingUser user, string[] roleNames)
        {
            if (Authorized(RoleType.SystemManager))
            {
                if (ModelState.IsValid)
                {
                    PendingUser userFromDatabase;
                    using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                    {
                        userFromDatabase = pendingUserRep.GetEntity(user.Id);

                        if (userFromDatabase != null)
                        {
                            if (userFromDatabase.CompanyId != CurrentUser.CompanyId)
                                return Error(Loc.Dic.error_no_permission);

                            RoleType combinedRoles = RoleType.None;
                            List<RoleType> forbiddenRoles = GetForbiddenRoles();

                            foreach (string roleName in roleNames)
                            {
                                RoleType role;
                                if (Enum.TryParse(roleName, out role) && !forbiddenRoles.Contains(role))
                                {
                                    combinedRoles = Roles.CombineRoles(combinedRoles, role);
                                }
                                else
                                {
                                    return Error(Loc.Dic.error_invalid_form);
                                }
                            }

                            userFromDatabase.Email = user.Email;
                            userFromDatabase.Roles = (int)combinedRoles;
                            userFromDatabase.OrdersApproverId = user.OrdersApproverId.HasValue && user.OrdersApproverId.Value == -1 ? null : user.OrdersApproverId;

                            pendingUserRep.Update(userFromDatabase);
                            return RedirectToAction("Index");
                        }
                        else
                        {
                            return Error(Loc.Dic.error_user_not_found);
                        }
                    }
                }
                else
                {
                    return Error(ModelState);
                }
            }
            else
            {
                return Error(Loc.Dic.error_no_permission);
            }
        }
Beispiel #11
0
        public ActionResult Index(int page = FIRST_PAGE, string sortby = NO_SORT_BY, string order = DEFAULT_ORDER)
        {
            if (!Authorized(RoleType.UsersManager)) return Error(Loc.Dic.error_no_permission);

            AllUsersModel model = new AllUsersModel();
            IEnumerable<User> activeUsersQuery;
            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
            using (PendingUsersRepository pendingUsersRep = new PendingUsersRepository())
            using (CompaniesRepository companiesRep = new CompaniesRepository())
            {
                activeUsersQuery = usersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId && x.IsActive).ToList();
                activeUsersQuery = Pagination(activeUsersQuery, page, sortby, order).ToList();
                model.NonActiveUsers = usersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId && !x.IsActive).ToList();
                Company company = companiesRep.GetEntity(CurrentUser.CompanyId);

                if (model.NonActiveUsers == null) return Error(Loc.Dic.error_users_get_error);
                if (activeUsersQuery == null) return Error(Loc.Dic.error_users_get_error);
                if (company == null) return Error(Loc.Dic.error_database_error);

                model.ActiveUsers = activeUsersQuery.ToList();
                model.ActiveUsersCount = activeUsersQuery.Count();
                model.CanceledUsersCount = model.NonActiveUsers.Count();
                model.UsersLimit = companiesRep.GetEntity(CurrentUser.CompanyId).UsersLimit;

                return View(model);
            }
        }
Beispiel #12
0
        public ActionResult Create(User user, string[] roleNames)
        {
            if (!ModelState.IsValid)
            {
                List<string> allRoleNames = GetRoleNames();
                List<SelectListItemDB> ApprovalRoutesList = new List<SelectListItemDB>() { new SelectListItemDB() { Id = -1, Name = Loc.Dic.NoApprovalRoute } };
                SelectList languagesList;

                using (ApprovalRoutesRepository routesRep = new ApprovalRoutesRepository(CurrentUser.CompanyId))
                using (LanguagesRepository languagesRep = new LanguagesRepository())
                {
                    ApprovalRoutesList.AddRange(
                            routesRep.GetList()
                            .Select(x => new SelectListItemDB() { Id = x.Id, Name = x.Name })
                            );

                    languagesList = new SelectList(languagesRep.GetList().ToList(), "Id", "Name");
                }

                ViewBag.RolesList = allRoleNames;
                ViewBag.RoutesList = new SelectList(ApprovalRoutesList, "Id", "Name");
                ViewBag.LanguagesList = languagesList;

                return View(user);
            }

            if (user.DefaultApprovalRouteId == -1) user.DefaultApprovalRouteId = null;

            if (!Authorized(RoleType.SystemManager)) return Error(Loc.Dic.error_no_permission);

            int companyUserCount = 0;
            int companyUserLimit = 0;

            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
            using (ApprovalRoutesRepository routesRep = new ApprovalRoutesRepository(CurrentUser.CompanyId))
            using (PendingUsersRepository pendingUsersRep = new PendingUsersRepository())
            using (CompaniesRepository companiesRep = new CompaniesRepository())
            {
                if (user.DefaultApprovalRouteId.HasValue)
                {
                    var route = routesRep.GetEntity(user.DefaultApprovalRouteId.Value);
                    if (route == null) return Error(Loc.Dic.error_invalid_form);
                }

                try
                {
                    companyUserCount =
                        usersRep.GetList().Where(x => x.IsActive).Count() +
                        pendingUsersRep.GetList().Where(x => x.CompanyId == CurrentUser.CompanyId).Count();

                    companyUserLimit = companiesRep.GetEntity(CurrentUser.CompanyId).UsersLimit;
                }
                catch
                {
                    return Error(Loc.Dic.error_database_error);
                }

                bool userExists = usersRep.GetList().Any(x => x.CompanyId == CurrentUser.CompanyId && x.Email == user.Email);
                bool pendingUserExists = pendingUsersRep.GetList().Any(x => x.CompanyId == CurrentUser.CompanyId && x.Email == user.Email);

                if (userExists || pendingUserExists)
                    return Error(Loc.Dic.error_users_exist_error);
            }

            if (companyUserCount >= companyUserLimit) return Error(Loc.Dic.error_users_limit_reached);

            user.CompanyId = CurrentUser.CompanyId;
            user.CreationTime = DateTime.Now;

            RoleType combinedRoles = RoleType.None;
            List<RoleType> forbiddenRoles = GetForbiddenRoles();

            if (roleNames == null || roleNames.Count() == 0) return Error(Loc.Dic.error_invalid_form);

            foreach (string roleName in roleNames)
            {
                RoleType role;
                if (!Enum.TryParse(roleName, out role) || forbiddenRoles.Contains(role)) return Error(Loc.Dic.error_invalid_form);
                combinedRoles = Roles.CombineRoles(combinedRoles, role);
            }

            user.Roles = (int)combinedRoles;
            user.DefaultApprovalRouteId = user.DefaultApprovalRouteId.HasValue && user.DefaultApprovalRouteId.Value == -1 ? null : user.DefaultApprovalRouteId;

            using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
            {
                if (!usersRep.Create(user)) return Error(Loc.Dic.error_users_create_error);
            }

            return RedirectToAction("Index");
        }
Beispiel #13
0
        public ActionResult EditPending(int id = 0)
        {
            if (Authorized(RoleType.SystemManager))
            {
                PendingUser user;
                List<SelectListItemDB> usersList = new List<SelectListItemDB> { new SelectListItemDB() { Id = -1, Name = "(ללא) מאשר סופי" } };

                using (UsersRepository usersRep = new UsersRepository(CurrentUser.CompanyId))
                using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                {
                    user = pendingUserRep.GetEntity(id);
                    usersList.AddRange(usersRep.GetList().Where(u => u.CompanyId == CurrentUser.CompanyId && ((RoleType)u.Roles & RoleType.OrdersApprover) == RoleType.OrdersApprover).Select(x => new SelectListItemDB() { Id = x.Id, Name = x.FirstName + " " + x.LastName }));
                }

                if (user.CompanyId != CurrentUser.CompanyId)
                    return Error(Loc.Dic.error_no_permission);

                if (user != null)
                {
                    ViewBag.OrdersApproverId = new SelectList(usersList, "Id", "Name", user.OrdersApproverId.HasValue ? user.OrdersApproverId.Value : -1);

                    List<string> roleNames = GetRoleNames();
                    ViewBag.RolesList = roleNames;

                    ViewBag.ExistingRoles =
                        Roles.GetAllRoles((RoleType)user.Roles)
                        .Select(x => x.ToString())
                        .ToList();

                    return View(user);
                }
                else
                {
                    return Error(Loc.Dic.error_user_not_found);
                }
            }
            else
            {
                return Error(Loc.Dic.error_no_permission);
            }
        }
Beispiel #14
0
        public ActionResult DeletePendingConfirmed(int id)
        {
            if (Authorized(RoleType.SystemManager))
            {
                PendingUser user;
                using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                {
                    user = pendingUserRep.GetEntity(id);

                    if (user == null)
                    {
                        return Error(Loc.Dic.error_user_not_found);
                    }
                    if (user.CompanyId != CurrentUser.CompanyId)
                    {
                        return Error(Loc.Dic.error_no_permission);
                    }

                    pendingUserRep.Delete(user.Id);
                }

                return RedirectToAction("Index");
            }
            else
            {
                return Error(Loc.Dic.error_no_permission);
            }
        }
Beispiel #15
0
        public ActionResult DeletePending(int id = 0)
        {
            if (Authorized(RoleType.SystemManager))
            {
                PendingUser user;
                using (PendingUsersRepository userRep = new PendingUsersRepository())
                {
                    user = userRep.GetEntity(id, "User");
                }

                if (user == null)
                {
                    return Error(Loc.Dic.error_user_not_found);
                }
                if (user.CompanyId != CurrentUser.CompanyId)
                {
                    return Error(Loc.Dic.error_no_permission);
                }

                return View(user);
            }
            else
            {
                return Error(Loc.Dic.error_no_permission);
            }
        }
Beispiel #16
0
        private LogInResult ResponseIntoUser(IAuthenticationResponse response)
        {
            LogInResult logInResult = new LogInResult();

            logInResult.IsAuthenticated = true;

            var fetchResponse = response.GetExtension <FetchResponse>();

            if (fetchResponse != null)
            {
                logInResult.User = new OpenIdUser(fetchResponse, response.ClaimedIdentifier);

                using (AllUsersRepository userRep = new AllUsersRepository())
                    using (PendingUsersRepository pendingUserRep = new PendingUsersRepository())
                    {
                        User user = userRep.GetList().SingleOrDefault(x => x.Email == logInResult.User.Email);
                        if (user != null)
                        {
                            if (user.IsActive)
                            {
                                if (user.FirstName != logInResult.User.FirstName || user.LastName != logInResult.User.LastName)
                                {
                                    user.FirstName = logInResult.User.FirstName;
                                    user.LastName  = logInResult.User.LastName;
                                    userRep.Update(user);
                                }

                                logInResult.IsRegistered = true;
                                logInResult.User.UserId  = user.Id;
                                return(logInResult);
                            }
                            else
                            {
                                logInResult.IsRegistered = false;
                                logInResult.IsCanceled   = true;
                                logInResult.User.UserId  = user.Id;
                                return(logInResult);
                            }
                        }
                        else
                        {
                            PendingUser pendingUser = pendingUserRep.GetList().SingleOrDefault(x => x.Email == logInResult.User.Email);

                            if (pendingUser != null)
                            {
                                User newUser = new User()
                                {
                                    CompanyId     = pendingUser.CompanyId,
                                    Email         = logInResult.User.Email,
                                    FirstName     = logInResult.User.FirstName,
                                    LastName      = logInResult.User.LastName,
                                    CreationTime  = DateTime.Now,
                                    LastLogInTime = DateTime.Now,
                                    Roles         = pendingUser.Roles,
                                    LanguageId    = pendingUser.LanguageId,
                                    IsActive      = true
                                };


                                if (!userRep.Create(newUser))
                                {
                                    return(logInResult);
                                }

                                logInResult.User.UserId = newUser.Id;
                                pendingUserRep.Delete(pendingUser.Id);

                                logInResult.IsNewUser    = true;
                                logInResult.IsRegistered = true;
                                return(logInResult);
                            }
                            else
                            {
                                return(logInResult);
                            }
                        }
                    }
            }
            else
            {
                return(logInResult);
            }
        }