diff --git a/src/main/java/org/mskcc/cbio/oncokb/service/UserService.java b/src/main/java/org/mskcc/cbio/oncokb/service/UserService.java index a718d4197..2969d0d8b 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/service/UserService.java +++ b/src/main/java/org/mskcc/cbio/oncokb/service/UserService.java @@ -376,6 +376,47 @@ public User createUser(UserDTO userDTO, Optional tokenValidDays, Option return user; } + private Optional updateUserFromUserDTO(UserDTO userDTO) { + Optional 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 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. * @@ -383,44 +424,7 @@ public User createUser(UserDTO userDTO, Optional tokenValidDays, Option * @return updated user. */ public Optional updateUser(UserDTO userDTO) { - Optional 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 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 updatedUserDTO = updateUserFromUserDTO(userDTO); if (updatedUserDTO.isPresent()) { if (updatedUserDTO.get().isActivated()) { @@ -438,6 +442,10 @@ public Optional updateUser(UserDTO userDTO) { return updatedUserDTO; } + public Optional 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 = userDetailsRepository.findOneByUser(user); LicenseType alignedLicenseType = companyDTO != null ? companyDTO.getLicenseType() : licenseType; diff --git a/src/main/java/org/mskcc/cbio/oncokb/web/rest/CompanyResource.java b/src/main/java/org/mskcc/cbio/oncokb/web/rest/CompanyResource.java index d363c146a..e12986959 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/web/rest/CompanyResource.java +++ b/src/main/java/org/mskcc/cbio/oncokb/web/rest/CompanyResource.java @@ -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; @@ -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}. @@ -102,6 +105,18 @@ public ResponseEntity updateCompany(@Valid @RequestBody CompanyVM co } CompanyDTO result = companyService.updateCompany(companyVM); + + if (!result.getLicenseType().equals(LicenseType.ACADEMIC)) { + List usersInCompany = userService.getCompanyUsers(result.getId()); + for (UserDTO user : usersInCompany) { + Set userAuthorities = user.getAuthorities(); + if (!userAuthorities.contains(AuthoritiesConstants.API)) { + userAuthorities.add(AuthoritiesConstants.API); + userService.updateUser(user); + } + } + } + return ResponseEntity.ok() .body(result); } diff --git a/src/main/java/org/mskcc/cbio/oncokb/web/rest/SlackController.java b/src/main/java/org/mskcc/cbio/oncokb/web/rest/SlackController.java index 1bd7f2956..be5bda2ff 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/web/rest/SlackController.java +++ b/src/main/java/org/mskcc/cbio/oncokb/web/rest/SlackController.java @@ -125,9 +125,17 @@ public ResponseEntity 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 updatedTrialUser = userService.updateUserBeforeTrialAccountActivation(userDTO); + if (updatedTrialUser.isPresent()) { + userDTO = updatedTrialUser.get(); + } + mailService.sendActiveTrialMail(userDTO, false); break; case CHANGE_LICENSE_TYPE: diff --git a/src/main/java/org/mskcc/cbio/oncokb/web/rest/UserResource.java b/src/main/java/org/mskcc/cbio/oncokb/web/rest/UserResource.java index 1e27e6fdc..653da60f1 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/web/rest/UserResource.java +++ b/src/main/java/org/mskcc/cbio/oncokb/web/rest/UserResource.java @@ -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; @@ -126,7 +127,12 @@ public ResponseEntity 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 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);