Skip to content

Commit

Permalink
Merge pull request #1077 from bprize15/give-role-api-to-trial-account
Browse files Browse the repository at this point in the history
add role api to trial accounts
  • Loading branch information
bprize15 authored Jan 19, 2024
2 parents da65f95 + a513f2e commit a006f68
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 40 deletions.
84 changes: 46 additions & 38 deletions src/main/java/org/mskcc/cbio/oncokb/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -376,51 +376,55 @@ public User createUser(UserDTO userDTO, Optional<Integer> tokenValidDays, Option
return user;
}

private Optional<UserDTO> updateUserFromUserDTO(UserDTO userDTO) {
Optional<UserDTO> updatedUserDTO = Optional.of(userRepository
.findById(userDTO.getId()))
.filter(Optional::isPresent)
.map(Optional::get)
.map(user -> {
this.clearUserCaches(user);
user.setLogin(userDTO.getLogin().toLowerCase());
user.setFirstName(userDTO.getFirstName());
user.setLastName(userDTO.getLastName());
if (userDTO.getEmail() != null) {
user.setEmail(userDTO.getEmail().toLowerCase());
}
user.setImageUrl(userDTO.getImageUrl());
user.setActivationKey(userDTO.getActivationKey());
user.setResetKey(userDTO.getResetKey());
user.setResetDate(userDTO.getResetDate());
if (userDTO.isActivated() != user.getActivated()) {
user.setActivated(userDTO.isActivated());
user.setActivationKey(null);
user.setResetKey(null);
user.setResetDate(null);
}
user.setLangKey(userDTO.getLangKey());
Set<Authority> managedAuthorities = user.getAuthorities();
managedAuthorities.clear();
userDTO.getAuthorities().stream()
.map(authorityRepository::findById)
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(managedAuthorities::add);
this.clearUserCaches(user);
log.debug("Changed Information for User: {}", user);
UserDTO newUserDTO = new UserDTO(user, getUpdatedUserDetails(
user, userDTO.getLicenseType(), userDTO.getJobTitle(), userDTO.getCompanyName(), userDTO.getCompany(), new Gson().toJson(userDTO.getAdditionalInfo()), userDTO.getCity(), userDTO.getCountry()));
newUserDTO.setCompany(userDTO.getCompany());
return newUserDTO;
});
return updatedUserDTO;
}

/**
* Update all information for a specific user, and return the modified user.
*
* @param userDTO user to update.
* @return updated user.
*/
public Optional<UserDTO> updateUser(UserDTO userDTO) {
Optional<UserDTO> updatedUserDTO = Optional.of(userRepository
.findById(userDTO.getId()))
.filter(Optional::isPresent)
.map(Optional::get)
.map(user -> {
this.clearUserCaches(user);
user.setLogin(userDTO.getLogin().toLowerCase());
user.setFirstName(userDTO.getFirstName());
user.setLastName(userDTO.getLastName());
if (userDTO.getEmail() != null) {
user.setEmail(userDTO.getEmail().toLowerCase());
}
user.setImageUrl(userDTO.getImageUrl());
user.setActivationKey(userDTO.getActivationKey());
user.setResetKey(userDTO.getResetKey());
user.setResetDate(userDTO.getResetDate());
if (userDTO.isActivated() != user.getActivated()) {
user.setActivated(userDTO.isActivated());
user.setActivationKey(null);
user.setResetKey(null);
user.setResetDate(null);
}
user.setLangKey(userDTO.getLangKey());
Set<Authority> managedAuthorities = user.getAuthorities();
managedAuthorities.clear();
userDTO.getAuthorities().stream()
.map(authorityRepository::findById)
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(managedAuthorities::add);
this.clearUserCaches(user);
log.debug("Changed Information for User: {}", user);
UserDTO newUserDTO = new UserDTO(user, getUpdatedUserDetails(
user, userDTO.getLicenseType(), userDTO.getJobTitle(), userDTO.getCompanyName(), userDTO.getCompany(), new Gson().toJson(userDTO.getAdditionalInfo()), userDTO.getCity(), userDTO.getCountry()));
newUserDTO.setCompany(userDTO.getCompany());
return newUserDTO;
});

Optional<UserDTO> updatedUserDTO = updateUserFromUserDTO(userDTO);

if (updatedUserDTO.isPresent()) {
if (updatedUserDTO.get().isActivated()) {
Expand All @@ -438,6 +442,10 @@ public Optional<UserDTO> updateUser(UserDTO userDTO) {
return updatedUserDTO;
}

public Optional<UserDTO> updateUserBeforeTrialAccountActivation(UserDTO userDTO) {
return updateUserFromUserDTO(userDTO);
}

private UserDetails getUpdatedUserDetails(User user, LicenseType licenseType, String jobTitle, String companyName, CompanyDTO companyDTO, String additionalInfo, String city, String country) {
Optional<UserDetails> userDetails = userDetailsRepository.findOneByUser(user);
LicenseType alignedLicenseType = companyDTO != null ? companyDTO.getLicenseType() : licenseType;
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/org/mskcc/cbio/oncokb/web/rest/CompanyResource.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.mskcc.cbio.oncokb.web.rest;

import org.mskcc.cbio.oncokb.domain.Company;
import org.mskcc.cbio.oncokb.domain.enumeration.LicenseType;
import org.mskcc.cbio.oncokb.repository.CompanyRepository;
import org.mskcc.cbio.oncokb.security.AuthoritiesConstants;
import org.mskcc.cbio.oncokb.service.CompanyService;
import org.mskcc.cbio.oncokb.service.UserService;
import org.mskcc.cbio.oncokb.web.rest.errors.BadRequestAlertException;
Expand All @@ -23,6 +25,7 @@
import java.net.URISyntaxException;
import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
* REST controller for managing {@link org.mskcc.cbio.oncokb.domain.Company}.
Expand Down Expand Up @@ -102,6 +105,18 @@ public ResponseEntity<CompanyDTO> updateCompany(@Valid @RequestBody CompanyVM co
}

CompanyDTO result = companyService.updateCompany(companyVM);

if (!result.getLicenseType().equals(LicenseType.ACADEMIC)) {
List<UserDTO> usersInCompany = userService.getCompanyUsers(result.getId());
for (UserDTO user : usersInCompany) {
Set<String> userAuthorities = user.getAuthorities();
if (!userAuthorities.contains(AuthoritiesConstants.API)) {
userAuthorities.add(AuthoritiesConstants.API);
userService.updateUser(user);
}
}
}

return ResponseEntity.ok()
.body(result);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,17 @@ public ResponseEntity<String> approveUser(@RequestParam("payload") String action
mailService.sendApiAccessApprovalEmail(userDTO);
}
break;
case GIVE_TRIAL_ACCESS:
case GIVE_TRIAL_ACCESS:
user = userService.initiateTrialAccountActivation(login);
userDTO = userMapper.userToUserDTO(user.get());

updateUserWithRoleApiIfRequested(userDTO);

Optional<UserDTO> updatedTrialUser = userService.updateUserBeforeTrialAccountActivation(userDTO);
if (updatedTrialUser.isPresent()) {
userDTO = updatedTrialUser.get();
}

mailService.sendActiveTrialMail(userDTO, false);
break;
case CHANGE_LICENSE_TYPE:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.mskcc.cbio.oncokb.config.Constants;
import org.mskcc.cbio.oncokb.domain.Token;
import org.mskcc.cbio.oncokb.domain.User;
import org.mskcc.cbio.oncokb.domain.enumeration.LicenseType;
import org.mskcc.cbio.oncokb.repository.UserRepository;
import org.mskcc.cbio.oncokb.security.AuthoritiesConstants;
import org.mskcc.cbio.oncokb.service.MailService;
Expand Down Expand Up @@ -126,7 +127,12 @@ public ResponseEntity<User> createUser(@Valid @RequestBody ManagedUserVM managed
// Assign ROLE_USER to all new accounts
// All other authorities can be updated in the user management page
if (managedUserVM.getAuthorities() == null || managedUserVM.getAuthorities().isEmpty()) {
managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER));
Set<String> authorities = new LinkedHashSet<>();
authorities.add(AuthoritiesConstants.USER);
if (!managedUserVM.getLicenseType().equals(LicenseType.ACADEMIC)) {
authorities.add(AuthoritiesConstants.API);
}
managedUserVM.setAuthorities(Collections.unmodifiableSet(authorities));
}
User newUser = userService.createUser(managedUserVM, Optional.ofNullable(managedUserVM.getTokenValidDays()), Optional.ofNullable(managedUserVM.getTokenIsRenewable()));
UserDTO newUserDTO = userMapper.userToUserDTO(newUser);
Expand Down

0 comments on commit a006f68

Please sign in to comment.