// 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 }; }
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 }; }