Beispiel #1
0
        // retrieves the current user and creates it if it is not yet found
        public async Task<ScampUser> GetOrCreateCurrentUser()
        {
            ScampUser currentUser = await GetCurrentUser();
            if (currentUser == null) // insert if user doesn't exist
            {
                var userId = Context.User.Claims.FirstOrDefault(c => c.Type.Contains("objectidentifier")).Value;
                // build user object
                currentUser = new ScampUser()
                {
                    Id = userId,
                    Name =
                        string.Format("{0} {1}", Context.User.FindFirst(ClaimTypes.GivenName).Value,
                            Context.User.FindFirst(ClaimTypes.Surname).Value).Trim(),
                    IsSystemAdmin = false,
                    // get email address
                    Email = Context.User.Claims.FirstOrDefault(c => c.Type.Contains("email") || c.Type.Contains("upn")).Value
                };

                // insert into database   
                await _userRepository.CreateUser(currentUser);
                // fetch from database so that the returned object will have
                // proper SelfLink property
                currentUser = await _userRepository.GetUserById(userId);
            }

            return currentUser;
        }
        public async Task<IActionResult> grantAdmin([FromBody] UserSummary usrSummary)
        {
            // ensure requestor has system admin permissions
            if (!await _securityHelper.IsSysAdmin())
                return new ObjectResult("Access Denied, requestor is not a system administrator") { StatusCode = 403 };

            ScampUser tmpUser = await _userRepository.GetUserById(usrSummary.Id);

            // if user wasn't found, add them to the scamp DB
            if (tmpUser == null)
            {
                // build new document
                tmpUser = new ScampUser()
                {
                    Id = usrSummary.Id,
                    Name = usrSummary.Name,
                    IsSystemAdmin = true
                };
                // create user 
                await _userRepository.CreateUser(tmpUser);
            }
            else
            {
                tmpUser.IsSystemAdmin = true;
                await _userRepository.UpdateUser(tmpUser); // save updated setting
            }
            return new ObjectResult(null) { StatusCode = 204 };
        }
        public async Task<IActionResult> AddUserToGroup(string groupId, [FromBody] UserSummary newUser)
        {
            if (!await _securityHelper.CurrentUserCanManageGroup(groupId)) {
                return new HttpStatusCodeResult(403); // Forbidden
            }

            string userId = newUser.Id;

            // get group details
            var rscGroup = await _groupRepository.GetGroup(groupId);
            if (rscGroup == null)
            {
                return new ObjectResult("designated group does not exist") { StatusCode = 400 };
            }

            // make sure user isn't already in group
            IEnumerable<ScampUserGroupMbrship> userList = from ur in rscGroup.Members
                                                          where ur.Id == userId
                                                          select ur;
            if (userList.Count() > 0) // user is already in the list
                return new ObjectResult("designated user is already a member of specified group") { StatusCode = 400 };

            // create the user if they don't exist
            //TODO: https://github.com/SimpleCloudManagerProject/SCAMP/issues/247
            if (!(await _userRepository.UserExists(userId)))
            {
                // build user object
                var tmpUser = new ScampUser(newUser);

                // insert into database   
                await _userRepository.CreateUser(tmpUser);
            }

            //TODO: Issue #152
            // check to make sure enough remains in the group allocation to allow add of user

            // create volatile storage budget entry for user
            var newBudget = new UserBudgetState(userId, groupId)
            {
                //TODO: Take into account the budget potentially sent in POST body
                UnitsBudgetted = rscGroup.Budget.DefaultUserAllocation,
                UnitsUsed = 0
            };
            await _volatileStorageController.AddUserBudgetState(newBudget);
            newUser.unitsBudgeted = newBudget.UnitsBudgetted;

            // create document updates
            await _groupRepository.AddUserToGroup(groupId, userId, false);

            //TODO: Issue #152
            // update group budget allocation to reflect addition of new user


            // return list
            return new ObjectResult(newUser) { StatusCode = 200 };
        }
Beispiel #4
0
        private UserSummary map(ScampUser docDbUSer)
		{
			return new UserSummary
			{
				Id = docDbUSer.Id,
				Name = docDbUSer.Name
			};
		}
        public async Task<IActionResult> grantGroupManager([FromBody] GroupAdminSummary groupManagerSummary)
        {
            // ensure requestor has system admin permissions
            if (!await _securityHelper.IsSysAdmin())
                return new ObjectResult("Access Denied, requestor is not a system administrator") { StatusCode = 403 };

            ScampUser tmpUser = await _userRepository.GetUserById(groupManagerSummary.Id);
            bool doingAdd = tmpUser == null;

            // if we're doing add operations
            if (doingAdd)
            {
                // build new document
                tmpUser = new ScampUser()
                {
                    Id = groupManagerSummary.Id,
                    Name = groupManagerSummary.Name
                };
            }

            // do validation
            // https://github.com/SimpleCloudManagerProject/SCAMP/issues/196

            // set budget info
            if (tmpUser.budget == null)
                tmpUser.budget = new ScampUserBudget();
            tmpUser.budget.unitsBudgeted = groupManagerSummary.unitsBudgeted;
            tmpUser.budget.EndDate = groupManagerSummary.endDate.Date.AddMinutes(1);

            // save changes
            if (doingAdd) // create user 
                    await _userRepository.CreateUser(tmpUser);
            else // else must be update
                await _userRepository.UpdateUser(tmpUser);

            return new ObjectResult(null) { StatusCode = 204 };
        }