Example #1
0
        public JarsUsersResponse Any(FindJarsUsers request)
        {
            IAuthRepository ssAuthRepo = ServiceStackHost.Instance.GetAuthRepository();

            var _headerRepository = _DataRepositoryFactory.GetDataRepository <IGenericEntityRepositoryBase <JarsUserHeader, IDataContextNhJars> >();
            //get all users in ss
            List <IUserAuth> ssUsers = ssAuthRepo.GetUserAuths();

            //get all users in jars
            List <JarsUserHeader> jUsers = _headerRepository.GetAll().ToList();

            ////create jars user for every missing auth user
            List <JarsUserHeader> newUsers = new List <JarsUserHeader>();

            foreach (var ssUser in ssUsers)
            {
                var jUser = jUsers.Where(j => j.UserName == ssUser.UserName).FirstOrDefault();
                if (jUser == null)
                {
                    jUser          = ssUser.ConvertTo <JarsUserHeader>();
                    jUser.Id       = 0;
                    jUser.IsActive = false;
                    newUsers.Add(jUser);
                }
            }

            if (newUsers.Count > 0)
            {
                _headerRepository.CreateUpdateList(newUsers, CurrentSessionUsername);
            }



            JarsUsersResponse response     = new JarsUsersResponse();
            IList <JarsUser>  dataBaseList = new List <JarsUser>();

            if (request.FetchEagerly)
            {
                IJarsUserRepository repository = _DataRepositoryFactory.GetDataRepository <IJarsUserRepository>();
                var plist = new List <Expression <Func <JarsUser, object> > >
                {
                    //plist.Add(p => p.Roles);
                    p => p.Settings
                };

                if (request.IsActive.HasValue)
                {
                    dataBaseList = repository.Where(a => a.IsActive == request.IsActive.Value, request.FetchEagerly, plist);
                }
                else
                {
                    dataBaseList = repository.Where(g => g.Id != 0, request.FetchEagerly, plist);
                }
            }
            else
            {
                if (request.IsActive.HasValue)
                {
                    dataBaseList = _headerRepository.Where(g => g.IsActive == request.IsActive.Value, false).ConvertAllTo <JarsUser>().ToList();;
                }
                else
                {
                    dataBaseList = _headerRepository.Where(g => g.Id != 0, false).ConvertAllTo <JarsUser>().ToList();;
                }
            }

            ////add the api key if the current user is admin
            //IUserAuth usr = ssAuthRepo.GetUserAuthByUserName(CurrentSessionUsername);
            //if (usr != null && usr.Roles.Intersect(new[] { JarsRoles.Admin }).Any())
            //{
            //    var apiRepo = (IManageApiKeys)HostContext.TryResolve<IAuthRepository>();

            //    foreach (var u in dataBaseList)
            //    {
            //        IUserAuth ua = ssUsers.Find(ssu => ssu.UserName == u.UserName);
            //        if (ua != null && apiRepo != null)
            //        {
            //            var apiKeys = apiRepo.GetUserApiKeys(ua.RefIdStr);
            //            u.ApiKey = apiKeys.Find(k => k.KeyType == "publishable" && k.Environment == "live").Id;
            //        }
            //    }
            //}

            response.UserAccounts = dataBaseList.ConvertAllTo <JarsUserDto>().ToList();
            return(response);
        }
Example #2
0
        //this is the only request that does not require admin role
        public JarsUserResponse Any(GetJarsUser request)
        {
            if (request.EmailOrUserName.IsNullOrEmpty())
            {
                return(null);
            }

            var             sessionUserName  = Request.GetSession().UserName;
            var             sessionUserEmail = Request.GetSession().Email;
            IAuthRepository ssAuthRepo       = ServiceStackHost.Instance.GetAuthRepository();
            IUserAuth       ssUser           = ssAuthRepo.GetUserAuthByUserName(request.EmailOrUserName);

            if (ssUser == null)
            {
                throw HttpError.NotFound("User not found");
            }
            if (ssUser.LockedDate != null)
            {
                throw HttpError.Unauthorized("User account locked");
            }

            if (ssUser.Roles.Count == 0 || ssUser.Permissions.Count == 0)
            {
                IUserAuth newUserA = new UserAuth();
                newUserA.PopulateWith(ssUser);
                if (ssUser.Roles.Count == 0)
                {
                    newUserA.Roles.Add("Guest");
                }
                if (ssUser.Permissions.Count == 0)
                {
                    newUserA.Permissions.Add("ViewOnly");
                }
                ssUser = ssAuthRepo.UpdateUserAuth(ssUser, newUserA);
            }

            IJarsUserRepository repository = _DataRepositoryFactory.GetDataRepository <IJarsUserRepository>();
            JarsUser            acc        = repository.Where(u => u.UserName == ssUser.UserName || u.Email == ssUser.Email, request.FetchEagerly).SingleOrDefault();

            if (acc == null)
            {
                acc    = ssUser.ConvertTo <JarsUser>();
                acc.Id = 0;
                acc    = repository.CreateUpdate(acc, sessionUserName);
            }
            else
            {
                //we have to change the id because the 2 tables differ and id's wont match.
                int accId = acc.Id;
                acc.PopulateWith(ssUser);
                acc.Id = accId;
                acc    = repository.CreateUpdate(acc, sessionUserName);
            }

            JarsUserResponse response = new JarsUserResponse
            {
                UserAccount = acc.ConvertTo <JarsUserDto>()
            };

            //response.jarsUserAccount = FakeDataHelper.FakeUserAccount;
            return(response);
        }