diff --git a/README.md b/README.md index a9b7f04bc78..162032b253a 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,15 @@ NAE provides additional components to make integration to your project/environme * License: [NETGRIF Community License](https://netgrif.com/license) +## Loading nae-user-ce as symlink to modules + +```bash +ln -s nae-user-ce/target/nae-user-ce-*-SNAPSHOT.jar application-engine/modules/. +``` + +Build with DEV profile + + ## Repository Content | Name | Description | Dependencies | diff --git a/application-engine/modules/.gitkeep b/application-engine/modules/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/application-engine/src/main/groovy/com/netgrif/application/engine/petrinet/domain/dataset/logic/action/ActionDelegate.groovy b/application-engine/src/main/groovy/com/netgrif/application/engine/petrinet/domain/dataset/logic/action/ActionDelegate.groovy index 4ae2afbf095..ab8f4a1d56c 100644 --- a/application-engine/src/main/groovy/com/netgrif/application/engine/petrinet/domain/dataset/logic/action/ActionDelegate.groovy +++ b/application-engine/src/main/groovy/com/netgrif/application/engine/petrinet/domain/dataset/logic/action/ActionDelegate.groovy @@ -1,17 +1,13 @@ package com.netgrif.application.engine.petrinet.domain.dataset.logic.action -import com.netgrif.application.engine.auth.service.GroupService -import com.netgrif.application.engine.auth.service.UserService -import com.netgrif.application.engine.integration.modules.ModuleHolder -import com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService import com.netgrif.application.engine.AsyncRunner import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService import com.netgrif.application.engine.adapter.spring.workflow.domain.QCase import com.netgrif.application.engine.adapter.spring.workflow.domain.QTask import com.netgrif.application.engine.auth.service.GroupService import com.netgrif.application.engine.auth.service.UserDetailsServiceImpl +import com.netgrif.application.engine.auth.service.UserRegistrationService import com.netgrif.application.engine.auth.service.UserService -import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest import com.netgrif.application.engine.configuration.ApplicationContextProvider import com.netgrif.application.engine.configuration.PublicViewProperties @@ -24,19 +20,10 @@ import com.netgrif.application.engine.export.domain.ExportDataConfig import com.netgrif.application.engine.export.service.interfaces.IExportService import com.netgrif.application.engine.impersonation.service.interfaces.IImpersonationService import com.netgrif.application.engine.importer.service.FieldFactory +import com.netgrif.application.engine.integration.modules.ModuleHolder import com.netgrif.application.engine.mail.domain.MailDraft import com.netgrif.application.engine.mail.interfaces.IMailAttemptService import com.netgrif.application.engine.mail.interfaces.IMailService -import com.netgrif.application.engine.pdf.generator.config.PdfResource -import com.netgrif.application.engine.pdf.generator.service.interfaces.IPdfGenerator -import com.netgrif.application.engine.petrinet.service.interfaces.IUriService -import com.netgrif.application.engine.startup.ImportHelper -import com.netgrif.application.engine.startup.runner.DefaultFiltersRunner -import com.netgrif.application.engine.startup.runner.FilterRunner -import com.netgrif.application.engine.utils.FullPageRequest -import com.netgrif.application.engine.workflow.service.FileFieldInputStream -import com.netgrif.application.engine.workflow.service.TaskService -import com.netgrif.application.engine.workflow.service.interfaces.* import com.netgrif.application.engine.objects.auth.domain.Author import com.netgrif.application.engine.objects.auth.domain.IUser import com.netgrif.application.engine.objects.auth.domain.LoggedUser @@ -71,7 +58,7 @@ import com.netgrif.application.engine.utils.FullPageRequest import com.netgrif.application.engine.workflow.service.FileFieldInputStream import com.netgrif.application.engine.workflow.service.TaskService import com.netgrif.application.engine.workflow.service.interfaces.* -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource import com.netgrif.application.engine.workflow.web.responsebodies.TaskReference import com.querydsl.core.types.Predicate import groovy.transform.NamedVariant @@ -91,7 +78,6 @@ import org.springframework.data.domain.Pageable import java.text.Normalizer import java.time.ZoneId import java.util.stream.Collectors - /** * ActionDelegate class contains Actions API methods. */ @@ -148,7 +134,7 @@ class ActionDelegate { ProcessRoleService processRoleService @Autowired - IRegistrationService registrationService + UserRegistrationService registrationService @Autowired IMailAttemptService mailAttemptService @@ -162,9 +148,6 @@ class ActionDelegate { @Autowired InitValueExpressionEvaluator initValueExpressionEvaluator -// @Autowired -// RuleRepository ruleRepository - @Autowired Scheduler scheduler @@ -207,7 +190,7 @@ class ActionDelegate { FrontendActionOutcome Frontend ModuleHolder Module - + /** * Reference of case and task in which current action is taking place. */ diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/InvalidUserTokenException.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/InvalidUserTokenException.java index c01c9253b9a..c19074e0bdd 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/InvalidUserTokenException.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/InvalidUserTokenException.java @@ -1,8 +1,8 @@ -package com.netgrif.application.engine.auth.service; - -public class InvalidUserTokenException extends Exception { - - public InvalidUserTokenException(String token) { - super("Token " + token + " has invalid format"); - } -} +//package com.netgrif.application.engine.auth.service; +// +//public class InvalidUserTokenException extends Exception { +// +// public InvalidUserTokenException(String token) { +// super("Token " + token + " has invalid format"); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java index 9d56ca0ce0d..a6b02ffe1d6 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java @@ -1,241 +1,241 @@ -package com.netgrif.application.engine.auth.service; - -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; -import com.netgrif.application.engine.objects.auth.domain.User; -import com.netgrif.application.engine.objects.auth.domain.enums.UserState; -import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService; -import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; -import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; -import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; -import com.netgrif.application.engine.auth.service.GroupService; -import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.math.BigInteger; -import java.security.SecureRandom; -import java.time.LocalDateTime; -import java.util.*; -import java.util.stream.Collectors; - -@Slf4j -@Service -public class RegistrationService implements IRegistrationService { - - @Autowired - protected BCryptPasswordEncoder bCryptPasswordEncoder; - - @Autowired - private UserService userService; - - @Autowired - private GroupService groupService; - - @Autowired - private ProcessRoleService processRole; - - @Autowired - private ServerAuthProperties serverAuthProperties; - @Autowired - private ProcessRoleService processRoleService; - - @Override - @Transactional - @Scheduled(cron = "0 0 1 * * *") - public void removeExpiredUsers() { - log.info("Removing expired unactivated invited users"); - userService.removeAllByStateAndExpirationDateBefore(UserState.INACTIVE, LocalDateTime.now(),null); - } - - @Override - @Transactional - @Scheduled(cron = "0 0 1 * * *") - public void resetExpiredToken() { - log.info("Resetting expired user tokens"); - List users = userService.findAllByStateAndExpirationDateBefore(UserState.BLOCKED, LocalDateTime.now(), null); - if (users == null || users.isEmpty()) { - log.info("There are none expired tokens. Everything is awesome."); - return; - } - - users.forEach(user -> { - user.setToken(null); - user.setExpirationDate(null); - }); - users = userService.saveUsers(users.stream().map(u -> (IUser) u).collect(Collectors.toList())); - log.info("Reset " + users.size() + " expired user tokens"); - } - - @Override - public void changePassword(RegisteredUser user, String newPassword) { - user.setPassword(newPassword); - encodeUserPassword(user); - userService.saveUser(user, null); - log.info("Changed password for user " + user.getEmail() + "."); - } - - @Override - public boolean verifyToken(String token) { - try { - log.info("Verifying token:" + token); - String[] tokenParts = decodeToken(token); - User user = (User) userService.findByEmail(tokenParts[0], null); - return user != null && Objects.equals(user.getToken(), tokenParts[1]) && user.getExpirationDate().isAfter(LocalDateTime.now()); - } catch (InvalidUserTokenException e) { - log.error(e.getMessage()); - return false; - } - } - - @Override - public void encodeUserPassword(RegisteredUser user) { - String pass = user.getPassword(); - if (pass == null) { - throw new IllegalArgumentException("User has no password"); - } - user.setPassword(bCryptPasswordEncoder.encode(pass)); - } - - @Override - public boolean stringMatchesUserPassword(RegisteredUser user, String passwordToCompare) { - return bCryptPasswordEncoder.matches(passwordToCompare, user.getPassword()); - } - - @Override - @Transactional - public User createNewUser(NewUserRequest newUser) { - User user = (User) userService.findByEmail(newUser.email, null); - if (user != null) { - if (user.isActive()) { - return null; - } - log.info("Renewing old user [" + newUser.email + "]"); - } else { - user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); - user.setEmail(newUser.email); - user.setUsername(newUser.email); - log.info("Creating new user [" + newUser.email + "]"); - } - user.setToken(generateTokenKey()); - user.setPassword(""); - user.setExpirationDate(generateExpirationDate()); - user.setState(UserState.INACTIVE); - userService.addDefaultAuthorities(user); - - if (newUser.processRoles != null && !newUser.processRoles.isEmpty()) { - user.setProcessRoles(new HashSet<>(processRole.findByIds(newUser.processRoles))); - } - userService.addRole(user, processRoleService.getDefaultRole().getStringId()); - user = (User) userService.saveUser(user, null); - - if (newUser.groups != null && !newUser.groups.isEmpty()) { - for (String group : newUser.groups) { - groupService.addUser((IUser) user, group); - } - } - - return user; - } - - @Override - public RegisteredUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException { - String email = decodeToken(registrationRequest.token)[0]; - log.info("Registering user " + email); - RegisteredUser user = (RegisteredUser) userService.findByEmail(email, null); - if (user == null) { - return null; - } - - user.setFirstName(registrationRequest.name); - user.setLastName(registrationRequest.surname); - user.setPassword(registrationRequest.password); - - user.setToken(StringUtils.EMPTY); - user.setExpirationDate(null); - user.setState(UserState.ACTIVE); - - return (RegisteredUser) userService.saveUser(user, null); - } - - @Override - public RegisteredUser resetPassword(String email) { - log.info("Resetting password of " + email); - User user = (User) userService.findByEmail(email, null); - if (user == null || !user.isActive()) { - String state = user == null ? "Non-existing" : "Inactive"; - log.info(state + " user [" + email + "] tried to reset his password"); - return null; - } - - user.setState(UserState.BLOCKED); - user.setPassword(null); - user.setToken(generateTokenKey()); - user.setExpirationDate(generateExpirationDate()); - return (RegisteredUser) userService.saveUser(user, null); - } - - @Override - public RegisteredUser recover(String email, String newPassword) { - log.info("Recovering user " + email); - User user = (User) userService.findByEmail(email, null); - if (user == null) { - return null; - } - user.setState(UserState.ACTIVE); - user.setPassword(newPassword); - encodeUserPassword(user); - user.setToken(null); - user.setExpirationDate(null); - - return (RegisteredUser) userService.saveUser(user, null); - } - - @Override - public String generateTokenKey() { - return new BigInteger(256, new SecureRandom()).toString(32); - } - - @Override - public String[] decodeToken(String token) throws InvalidUserTokenException { - if (token == null || token.isEmpty()) { - throw new InvalidUserTokenException(token); - } - byte[] decodedBytes; - - try { - decodedBytes = Base64.getDecoder().decode(token); - } catch (IllegalArgumentException exception) { - throw new InvalidUserTokenException(token); - } - String decodedString = new String(decodedBytes); - String[] parts = decodedString.split(":"); - - if (parts.length != 2 || !parts[0].contains("@")) { - throw new InvalidUserTokenException(token); - } - - return parts; - } - - @Override - public String encodeToken(String email, String tokenKey) { - return Base64.getEncoder().encodeToString((email + ":" + tokenKey).getBytes()); - } - - @Override - public LocalDateTime generateExpirationDate() { - return LocalDateTime.now().plusDays(serverAuthProperties.getTokenValidityPeriod()); - } - - @Override - public boolean isPasswordSufficient(String password) { - return password.length() >= serverAuthProperties.getMinimalPasswordLength(); - } -} +//package com.netgrif.application.engine.auth.service; +// +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; +//import com.netgrif.application.engine.objects.auth.domain.User; +//import com.netgrif.application.engine.objects.auth.domain.enums.UserState; +//import com.netgrif.application.engine.auth.service.RegistrationService; +//import com.netgrif.application.engine.auth.service.UserService; +//import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; +//import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; +//import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; +//import com.netgrif.application.engine.auth.service.GroupService; +//import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; +//import lombok.extern.slf4j.Slf4j; +//import org.apache.commons.lang3.StringUtils; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +// +//import java.math.BigInteger; +//import java.security.SecureRandom; +//import java.time.LocalDateTime; +//import java.util.*; +//import java.util.stream.Collectors; +// +//@Slf4j +//@Service +//public class RegistrationService implements IRegistrationService { +// +// @Autowired +// protected BCryptPasswordEncoder bCryptPasswordEncoder; +// +// @Autowired +// private UserService userService; +// +// @Autowired +// private GroupService groupService; +// +// @Autowired +// private ProcessRoleService processRole; +// +// @Autowired +// private ServerAuthProperties serverAuthProperties; +// @Autowired +// private ProcessRoleService processRoleService; +// +// @Override +// @Transactional +// @Scheduled(cron = "0 0 1 * * *") +// public void removeExpiredUsers() { +// log.info("Removing expired unactivated invited users"); +// userService.removeAllByStateAndExpirationDateBefore(UserState.INACTIVE, LocalDateTime.now(),null); +// } +// +// @Override +// @Transactional +// @Scheduled(cron = "0 0 1 * * *") +// public void resetExpiredToken() { +// log.info("Resetting expired user tokens"); +// List users = userService.findAllByStateAndExpirationDateBefore(UserState.BLOCKED, LocalDateTime.now(), null); +// if (users == null || users.isEmpty()) { +// log.info("There are none expired tokens. Everything is awesome."); +// return; +// } +// +// users.forEach(user -> { +// user.setToken(null); +// user.setExpirationDate(null); +// }); +// users = userService.saveUsers(users.stream().map(u -> (IUser) u).collect(Collectors.toList())); +// log.info("Reset " + users.size() + " expired user tokens"); +// } +// +// @Override +// public void changePassword(RegisteredUser user, String newPassword) { +// user.setPassword(newPassword); +// encodeUserPassword(user); +// userService.saveUser(user, null); +// log.info("Changed password for user " + user.getEmail() + "."); +// } +// +// @Override +// public boolean verifyToken(String token) { +// try { +// log.info("Verifying token:" + token); +// String[] tokenParts = decodeToken(token); +// User user = (User) userService.findByEmail(tokenParts[0], null); +// return user != null && Objects.equals(user.getToken(), tokenParts[1]) && user.getExpirationDate().isAfter(LocalDateTime.now()); +// } catch (InvalidUserTokenException e) { +// log.error(e.getMessage()); +// return false; +// } +// } +// +// @Override +// public void encodeUserPassword(RegisteredUser user) { +// String pass = user.getPassword(); +// if (pass == null) { +// throw new IllegalArgumentException("User has no password"); +// } +// user.setPassword(bCryptPasswordEncoder.encode(pass)); +// } +// +// @Override +// public boolean stringMatchesUserPassword(RegisteredUser user, String passwordToCompare) { +// return bCryptPasswordEncoder.matches(passwordToCompare, user.getPassword()); +// } +// +// @Override +// @Transactional +// public User createNewUser(NewUserRequest newUser) { +// User user = (User) userService.findByEmail(newUser.email, null); +// if (user != null) { +// if (user.isActive()) { +// return null; +// } +// log.info("Renewing old user [" + newUser.email + "]"); +// } else { +// user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); +// user.setEmail(newUser.email); +// user.setUsername(newUser.email); +// log.info("Creating new user [" + newUser.email + "]"); +// } +// user.setToken(generateTokenKey()); +// user.setPassword(""); +// user.setExpirationDate(generateExpirationDate()); +// user.setState(UserState.INACTIVE); +// userService.addDefaultAuthorities(user); +// +// if (newUser.processRoles != null && !newUser.processRoles.isEmpty()) { +// user.setProcessRoles(new HashSet<>(processRole.findByIds(newUser.processRoles))); +// } +// userService.addRole(user, processRoleService.getDefaultRole().getStringId()); +// user = (User) userService.saveUser(user, null); +// +// if (newUser.groups != null && !newUser.groups.isEmpty()) { +// for (String group : newUser.groups) { +// groupService.addUser((IUser) user, group); +// } +// } +// +// return user; +// } +// +// @Override +// public RegisteredUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException { +// String email = decodeToken(registrationRequest.token)[0]; +// log.info("Registering user " + email); +// RegisteredUser user = (RegisteredUser) userService.findByEmail(email, null); +// if (user == null) { +// return null; +// } +// +// user.setFirstName(registrationRequest.name); +// user.setLastName(registrationRequest.surname); +// user.setPassword(registrationRequest.password); +// +// user.setToken(StringUtils.EMPTY); +// user.setExpirationDate(null); +// user.setState(UserState.ACTIVE); +// +// return (RegisteredUser) userService.saveUser(user, null); +// } +// +// @Override +// public RegisteredUser resetPassword(String email) { +// log.info("Resetting password of " + email); +// User user = (User) userService.findByEmail(email, null); +// if (user == null || !user.isActive()) { +// String state = user == null ? "Non-existing" : "Inactive"; +// log.info(state + " user [" + email + "] tried to reset his password"); +// return null; +// } +// +// user.setState(UserState.BLOCKED); +// user.setPassword(null); +// user.setToken(generateTokenKey()); +// user.setExpirationDate(generateExpirationDate()); +// return (RegisteredUser) userService.saveUser(user, null); +// } +// +// @Override +// public RegisteredUser recover(String email, String newPassword) { +// log.info("Recovering user " + email); +// User user = (User) userService.findByEmail(email, null); +// if (user == null) { +// return null; +// } +// user.setState(UserState.ACTIVE); +// user.setPassword(newPassword); +// encodeUserPassword(user); +// user.setToken(null); +// user.setExpirationDate(null); +// +// return (RegisteredUser) userService.saveUser(user, null); +// } +// +// @Override +// public String generateTokenKey() { +// return new BigInteger(256, new SecureRandom()).toString(32); +// } +// +// @Override +// public String[] decodeToken(String token) throws InvalidUserTokenException { +// if (token == null || token.isEmpty()) { +// throw new InvalidUserTokenException(token); +// } +// byte[] decodedBytes; +// +// try { +// decodedBytes = Base64.getDecoder().decode(token); +// } catch (IllegalArgumentException exception) { +// throw new InvalidUserTokenException(token); +// } +// String decodedString = new String(decodedBytes); +// String[] parts = decodedString.split(":"); +// +// if (parts.length != 2 || !parts[0].contains("@")) { +// throw new InvalidUserTokenException(token); +// } +// +// return parts; +// } +// +// @Override +// public String encodeToken(String email, String tokenKey) { +// return Base64.getEncoder().encodeToString((email + ":" + tokenKey).getBytes()); +// } +// +// @Override +// public LocalDateTime generateExpirationDate() { +// return LocalDateTime.now().plusDays(serverAuthProperties.getTokenValidityPeriod()); +// } +// +// @Override +// public boolean isPasswordSufficient(String password) { +// return password.length() >= serverAuthProperties.getMinimalPasswordLength(); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserRegistrationServiceImpl.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserRegistrationServiceImpl.java new file mode 100644 index 00000000000..ad87f9b2387 --- /dev/null +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserRegistrationServiceImpl.java @@ -0,0 +1,242 @@ +package com.netgrif.application.engine.auth.service; + +import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; +import com.netgrif.application.engine.auth.throwable.InvalidUserTokenException; +import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; +import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; +import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; +import com.netgrif.application.engine.objects.auth.domain.IUser; +import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; +import com.netgrif.application.engine.objects.auth.domain.User; +import com.netgrif.application.engine.objects.auth.domain.enums.UserState; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigInteger; +import java.security.SecureRandom; +import java.time.LocalDateTime; +import java.util.Base64; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class UserRegistrationServiceImpl implements UserRegistrationService { + + @Autowired + protected BCryptPasswordEncoder bCryptPasswordEncoder; + + @Autowired + private UserService userService; + + @Autowired + private GroupService groupService; + + @Autowired + private ProcessRoleService processRole; + + @Autowired + private ServerAuthProperties serverAuthProperties; + @Autowired + private ProcessRoleService processRoleService; + + @Override + @Transactional + @Scheduled(cron = "0 0 1 * * *") + public void removeExpiredUsers() { + log.info("Removing expired unactivated invited users"); + userService.removeAllByStateAndExpirationDateBefore(UserState.INACTIVE, LocalDateTime.now(),null); + } + + @Override + @Transactional + @Scheduled(cron = "0 0 1 * * *") + public void resetExpiredToken() { + log.info("Resetting expired user tokens"); + List users = userService.findAllByStateAndExpirationDateBefore(UserState.BLOCKED, LocalDateTime.now(), null); + if (users == null || users.isEmpty()) { + log.info("There are none expired tokens. Everything is awesome."); + return; + } + + users.forEach(user -> { + user.setToken(null); + user.setExpirationDate(null); + }); + users = userService.saveUsers(users.stream().map(u -> (IUser) u).collect(Collectors.toList())); + log.info("Reset " + users.size() + " expired user tokens"); + } + + @Override + public void changePassword(RegisteredUser user, String newPassword) { + user.setPassword(newPassword); + encodeUserPassword(user); + userService.saveUser(user, null); + log.info("Changed password for user " + user.getEmail() + "."); + } + + @Override + public boolean verifyToken(String token) { + try { + log.info("Verifying token:" + token); + String[] tokenParts = decodeToken(token); + User user = (User) userService.findByEmail(tokenParts[0], null); + return user != null && Objects.equals(user.getToken(), tokenParts[1]) && user.getExpirationDate().isAfter(LocalDateTime.now()); + } catch (InvalidUserTokenException e) { + log.error(e.getMessage()); + return false; + } + } + + @Override + public void encodeUserPassword(RegisteredUser user) { + String pass = user.getPassword(); + if (pass == null) { + throw new IllegalArgumentException("User has no password"); + } + user.setPassword(bCryptPasswordEncoder.encode(pass)); + } + + @Override + public boolean stringMatchesUserPassword(RegisteredUser user, String passwordToCompare) { + return bCryptPasswordEncoder.matches(passwordToCompare, user.getPassword()); + } + + @Override + @Transactional + public User createNewUser(NewUserRequest newUser) { + User user = (User) userService.findByEmail(newUser.email, null); + if (user != null) { + if (user.isActive()) { + return null; + } + log.info("Renewing old user [" + newUser.email + "]"); + } else { + user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); + user.setEmail(newUser.email); + user.setUsername(newUser.email); + log.info("Creating new user [" + newUser.email + "]"); + } + user.setToken(generateTokenKey()); + user.setPassword(""); + user.setExpirationDate(generateExpirationDate()); + user.setState(UserState.INACTIVE); + userService.addDefaultAuthorities(user); + + if (newUser.processRoles != null && !newUser.processRoles.isEmpty()) { + user.setProcessRoles(new HashSet<>(processRole.findByIds(newUser.processRoles))); + } + userService.addRole(user, processRoleService.getDefaultRole().getStringId()); + user = (User) userService.saveUser(user, null); + + if (newUser.groups != null && !newUser.groups.isEmpty()) { + for (String group : newUser.groups) { + groupService.addUser((IUser) user, group); + } + } + + return user; + } + + @Override + public RegisteredUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException { + String email = decodeToken(registrationRequest.token)[0]; + log.info("Registering user " + email); + RegisteredUser user = (RegisteredUser) userService.findByEmail(email, null); + if (user == null) { + return null; + } + + user.setFirstName(registrationRequest.name); + user.setLastName(registrationRequest.surname); + user.setPassword(registrationRequest.password); + + user.setToken(StringUtils.EMPTY); + user.setExpirationDate(null); + user.setState(UserState.ACTIVE); + + return (RegisteredUser) userService.saveUser(user, null); + } + + @Override + public RegisteredUser resetPassword(String email) { + log.info("Resetting password of " + email); + User user = (User) userService.findByEmail(email, null); + if (user == null || !user.isActive()) { + String state = user == null ? "Non-existing" : "Inactive"; + log.info(state + " user [" + email + "] tried to reset his password"); + return null; + } + + user.setState(UserState.BLOCKED); + user.setPassword(null); + user.setToken(generateTokenKey()); + user.setExpirationDate(generateExpirationDate()); + return (RegisteredUser) userService.saveUser(user, null); + } + + @Override + public RegisteredUser recover(String email, String newPassword) { + log.info("Recovering user " + email); + User user = (User) userService.findByEmail(email, null); + if (user == null) { + return null; + } + user.setState(UserState.ACTIVE); + user.setPassword(newPassword); + encodeUserPassword(user); + user.setToken(null); + user.setExpirationDate(null); + + return (RegisteredUser) userService.saveUser(user, null); + } + + @Override + public String generateTokenKey() { + return new BigInteger(256, new SecureRandom()).toString(32); + } + + @Override + public String[] decodeToken(String token) throws InvalidUserTokenException { + if (token == null || token.isEmpty()) { + throw new InvalidUserTokenException(token); + } + byte[] decodedBytes; + + try { + decodedBytes = Base64.getDecoder().decode(token); + } catch (IllegalArgumentException exception) { + throw new InvalidUserTokenException(token); + } + String decodedString = new String(decodedBytes); + String[] parts = decodedString.split(":"); + + if (parts.length != 2 || !parts[0].contains("@")) { + throw new InvalidUserTokenException(token); + } + + return parts; + } + + @Override + public String encodeToken(String email, String tokenKey) { + return Base64.getEncoder().encodeToString((email + ":" + tokenKey).getBytes()); + } + + @Override + public LocalDateTime generateExpirationDate() { + return LocalDateTime.now().plusDays(serverAuthProperties.getTokenValidityPeriod()); + } + + @Override + public boolean isPasswordSufficient(String password) { + return password.length() >= serverAuthProperties.getMinimalPasswordLength(); + } +} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserResourceHelperService.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserResourceHelperService.java index 8e70fa32ce3..3ad7254fad9 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserResourceHelperService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserResourceHelperService.java @@ -1,12 +1,10 @@ package com.netgrif.application.engine.auth.service; +import com.netgrif.application.engine.auth.web.responsebodies.User; +import com.netgrif.application.engine.auth.web.responsebodies.UserResource; import com.netgrif.application.engine.objects.auth.domain.IUser; import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import com.netgrif.application.engine.auth.service.interfaces.IUserResourceHelperService; -import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.auth.web.responsebodies.IUserFactory; -import com.netgrif.application.engine.auth.web.responsebodies.User; -import com.netgrif.application.engine.auth.web.responsebodies.UserResource; import com.netgrif.application.engine.impersonation.service.interfaces.IImpersonationService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,7 +22,7 @@ public class UserResourceHelperService implements IUserResourceHelperService { private UserService userService; @Autowired - private IUserFactory userFactory; + private UserFactory userFactory; @Autowired private IImpersonationService impersonationService; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserService.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserService.java index 12aa1c641f5..d60d15295d8 100755 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/UserService.java @@ -3,7 +3,7 @@ //import com.netgrif.application.engine.objects.auth.domain.Authority;.*; //import com.netgrif.application.engine.objects.auth.domain.Authority;.repositories.AuthorityRepository; //import com.netgrif.application.engine.objects.auth.domain.Authority;.repositories.UserRepository; -//import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService; +//import com.netgrif.application.engine.auth.service.RegistrationService; //import com.netgrif.application.engine.auth.web.requestbodies.UpdateUserRequest; //import com.netgrif.application.engine.event.events.user.UserRegistrationEvent; //import com.netgrif.application.engine.orgstructure.groups.config.GroupConfigurationProperties; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IRegistrationService.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IRegistrationService.java index d1e86190c47..35fa63efaa0 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IRegistrationService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IRegistrationService.java @@ -1,41 +1,41 @@ -package com.netgrif.application.engine.auth.service.interfaces; - -import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; -import com.netgrif.application.engine.auth.service.InvalidUserTokenException; -import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; -import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; - -import java.time.LocalDateTime; - -public interface IRegistrationService { - - void removeExpiredUsers(); - - void resetExpiredToken(); - - void changePassword(RegisteredUser user, String newPassword); - - void encodeUserPassword(RegisteredUser user); - - boolean stringMatchesUserPassword(RegisteredUser user, String passwordToCompare); - - boolean verifyToken(String token); - - RegisteredUser createNewUser(NewUserRequest newUser); - - RegisteredUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException; - - RegisteredUser resetPassword(String email); - - RegisteredUser recover(String email, String newPassword); - - String generateTokenKey(); - - String[] decodeToken(String token) throws InvalidUserTokenException; - - String encodeToken(String email, String tokenKey); - - LocalDateTime generateExpirationDate(); - - boolean isPasswordSufficient(String password); -} +//package com.netgrif.application.engine.auth.service.interfaces; +// +//import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; +//import com.netgrif.application.engine.auth.service.InvalidUserTokenException; +//import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; +//import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; +// +//import java.time.LocalDateTime; +// +//public interface IRegistrationService { +// +// void removeExpiredUsers(); +// +// void resetExpiredToken(); +// +// void changePassword(RegisteredUser user, String newPassword); +// +// void encodeUserPassword(RegisteredUser user); +// +// boolean stringMatchesUserPassword(RegisteredUser user, String passwordToCompare); +// +// boolean verifyToken(String token); +// +// RegisteredUser createNewUser(NewUserRequest newUser); +// +// RegisteredUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException; +// +// RegisteredUser resetPassword(String email); +// +// RegisteredUser recover(String email, String newPassword); +// +// String generateTokenKey(); +// +// String[] decodeToken(String token) throws InvalidUserTokenException; +// +// String encodeToken(String email, String tokenKey); +// +// LocalDateTime generateExpirationDate(); +// +// boolean isPasswordSufficient(String password); +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IUserResourceHelperService.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IUserResourceHelperService.java index 3ff460de86d..e116d62b4c3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IUserResourceHelperService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/interfaces/IUserResourceHelperService.java @@ -1,9 +1,9 @@ package com.netgrif.application.engine.auth.service.interfaces; -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import com.netgrif.application.engine.auth.web.responsebodies.User; import com.netgrif.application.engine.auth.web.responsebodies.UserResource; +import com.netgrif.application.engine.objects.auth.domain.IUser; +import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import java.util.Locale; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthController.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthController.java new file mode 100644 index 00000000000..3ba7801a193 --- /dev/null +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthController.java @@ -0,0 +1,281 @@ +package com.netgrif.application.engine.auth.web; + +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; +import com.netgrif.application.engine.auth.service.UserFactory; +import com.netgrif.application.engine.auth.service.UserRegistrationService; +import com.netgrif.application.engine.auth.service.UserService; +import com.netgrif.application.engine.auth.throwable.InvalidUserTokenException; +import com.netgrif.application.engine.auth.web.requestbodies.ChangePasswordRequest; +import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; +import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; +import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; +import com.netgrif.application.engine.mail.MailAttemptService; +import com.netgrif.application.engine.mail.MailService; +import com.netgrif.application.engine.objects.auth.domain.IUser; +import com.netgrif.application.engine.objects.auth.domain.LoggedUser; +import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; +import com.netgrif.application.engine.security.service.ISecurityContextService; +import freemarker.template.TemplateException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.mail.MessagingException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.hateoas.MediaTypes; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Locale; +import java.util.Optional; + +@Slf4j +@RestController +@RequiredArgsConstructor +@Tag(name = "AuthController") +@RequestMapping("/api/auth") +@ConditionalOnProperty( + value = "nae.auth.web.enabled", + havingValue = "true", + matchIfMissing = true +) +public class AuthController { + + private UserRegistrationService registrationService; + private ServerAuthProperties serverAuthProperties; + private MailAttemptService mailAttemptService; + private MailService mailService; + private UserFactory userFactory; + private UserService userService; + private ISecurityContextService securityContextService; + + @Autowired + public void setRegistrationService(UserRegistrationService userRegistrationService) { + this.registrationService = userRegistrationService; + } + + @Autowired + public void setServerAuthProperties(ServerAuthProperties serverAuthProperties) { + this.serverAuthProperties = serverAuthProperties; + } + + @Autowired + public void setMailAttemptService(MailAttemptService mailAttemptService) { + this.mailAttemptService = mailAttemptService; + } + + @Autowired + public void setMailService(MailService mailService) { + this.mailService = mailService; + } + + @Autowired + public void setUserFactory(UserFactory userFactory) { + this.userFactory = userFactory; + } + + @Autowired + public void setUserService(UserService userService) { + this.userService = userService; + } + + @Autowired + public void setSecurityContextService(ISecurityContextService securityContextService) { + this.securityContextService = securityContextService; + } + + @Operation( + summary = "User login", + description = "Authenticates a user with the system." + ) + @ApiResponse(responseCode = "200", description = "User logged in successfully") + @ApiResponse(responseCode = "401", description = "Unauthorized – Authentication is required and has failed or has not yet been provided") + @ApiResponse(responseCode = "500", description = "Internal server error") + @GetMapping(value = "/login", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity login( + @Parameter(description = "Spring Security authentication object") + Authentication auth, + @Parameter(description = "Locale information") + Locale locale + ) { + log.info("login"); + log.debug("locale: {}", locale); + log.debug("auth: {}", auth); + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + LoggedUser loggedUser = (LoggedUser) authentication.getPrincipal(); + return ResponseEntity.ok(userFactory.getUser(userService.findById(loggedUser.getId(), null), locale)); + } + + @Operation( + summary = "User login", + description = "Authenticates a user with the system and optionally checks for MFA requirements." + ) + @ApiResponse(responseCode = "200", description = "User logged in successfully") + @ApiResponse(responseCode = "401", description = "Unauthorized – Authentication is required and has failed or has not yet been provided") + @ApiResponse(responseCode = "412", description = "MFA token is required for login") + @ApiResponse(responseCode = "500", description = "Internal server error") + @GetMapping(value = "/valid", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity validToken( + @Parameter(description = "Locale information") + Locale locale) { + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + return ResponseEntity.ok(authentication); + } + + @Operation(summary = "New user registration") + @PostMapping(value = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public MessageResource signup(@RequestBody RegistrationRequest regRequest) { + try { + String email = registrationService.decodeToken(regRequest.token)[0]; + if (!registrationService.verifyToken(regRequest.token)) + return MessageResource.errorMessage("Registration of " + email + " has failed! Invalid token!"); + + regRequest.password = new String(Base64.getDecoder().decode(regRequest.password)); + RegisteredUser user = registrationService.registerUser(regRequest); + if (user == null) + return MessageResource.errorMessage("Registration of " + email + " has failed! No user with this email was found."); + + return MessageResource.successMessage("Registration complete"); + } catch (InvalidUserTokenException e) { + log.error(e.getMessage()); + return MessageResource.errorMessage("Invalid token!"); + } + } + + @Operation(summary = "Send invitation to a new user", security = {@SecurityRequirement(name = "BasicAuth")}) + @PostMapping(value = "/invite", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public MessageResource invite(@RequestBody NewUserRequest newUserRequest, Authentication auth) { + try { + if (!serverAuthProperties.isOpenRegistration() && (auth == null || !((LoggedUser) auth.getPrincipal()).getSelfOrImpersonated().isAdmin())) { + return MessageResource.errorMessage("Only admin can invite new users!"); + } + + newUserRequest.email = URLDecoder.decode(newUserRequest.email, StandardCharsets.UTF_8.name()); + if (mailAttemptService.isBlocked(newUserRequest.email)) { + return MessageResource.successMessage("Done"); + } + + RegisteredUser user = registrationService.createNewUser(newUserRequest); + if (user == null) + return MessageResource.successMessage("Done"); + mailService.sendRegistrationEmail(user); + + mailAttemptService.mailAttempt(newUserRequest.email); + return MessageResource.successMessage("Done"); + } catch (IOException | TemplateException | MessagingException e) { + log.error(e.toString()); + return MessageResource.errorMessage("Failed"); + } + } + + @Operation(summary = "Verify validity of a registration token", security = {@SecurityRequirement(name = "BasicAuth")}) + @PostMapping(value = "/token/verify", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public MessageResource verifyToken(@RequestBody String token) { + try { + if (registrationService.verifyToken(token)) + return MessageResource.successMessage(registrationService.decodeToken(token)[0]); + else + return MessageResource.errorMessage("Invalid token!"); + } catch (InvalidUserTokenException e) { + log.error(e.getMessage()); + return MessageResource.errorMessage("Invalid token!"); + } + } + + @Operation(summary = "Verify validity of an authentication token") + @GetMapping(value = "/verify", produces = MediaTypes.HAL_JSON_VALUE) + public MessageResource verifyAuthToken(Authentication auth) { + LoggedUser loggedUser = (LoggedUser) auth.getPrincipal(); + return MessageResource.successMessage("Auth Token successfully verified, for user [" + loggedUser.getId() + "] " + loggedUser.getFullName()); + } + + + @Operation(summary = "Reset password") + @PostMapping(value = "/reset", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaTypes.HAL_JSON_VALUE) + public MessageResource resetPassword(@RequestBody String recoveryEmail) { + if (mailAttemptService.isBlocked(recoveryEmail)) { + return MessageResource.successMessage("Done"); + } + try { + RegisteredUser user = registrationService.resetPassword(recoveryEmail); + if (user != null) { + mailService.sendPasswordResetEmail(user); + mailAttemptService.mailAttempt(user.getEmail()); + return MessageResource.successMessage("Done"); + } else { + return MessageResource.successMessage("Done"); + } + } catch (MessagingException | IOException | TemplateException e) { + log.error(e.toString()); + return MessageResource.errorMessage("Failed"); + } + } + + @Operation(summary = "Account recovery") + @PostMapping(value = "/recover", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) + public MessageResource recoverAccount(@RequestBody RegistrationRequest request) { + try { + if (!registrationService.verifyToken(request.token)) + return MessageResource.errorMessage("Invalid token!"); + RegisteredUser user = registrationService.recover(registrationService.decodeToken(request.token)[0], new String(Base64.getDecoder().decode(request.password))); + if (user == null) + return MessageResource.errorMessage("Recovery of account has failed!"); + return MessageResource.successMessage("Account is successfully recovered. You can login now."); + } catch (InvalidUserTokenException e) { + log.error(e.getMessage()); + return MessageResource.errorMessage("Invalid token!"); + } + } + + @Operation(summary = "Set a new password", security = {@SecurityRequirement(name = "BasicAuth")}) + @PostMapping(value = "/changePassword", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) + public MessageResource changePassword(Authentication auth, @RequestBody ChangePasswordRequest request) { + try { + Optional user = userService.findUserByUsername(request.login, null); + if (user.isEmpty() || request.password == null || request.newPassword == null) { + return MessageResource.errorMessage("Incorrect login!"); + } + + String newPassword = new String(Base64.getDecoder().decode(request.newPassword)); + if (!registrationService.isPasswordSufficient(newPassword)) { + return MessageResource.errorMessage("Insufficient password!"); + } + + String password = new String(Base64.getDecoder().decode(request.password)); + if (registrationService.stringMatchesUserPassword((RegisteredUser) user.get(), password)) { + registrationService.changePassword(((RegisteredUser) user.get()), newPassword); + securityContextService.saveToken(((LoggedUser) auth.getPrincipal()).getId()); + securityContextService.reloadSecurityContext((LoggedUser) auth.getPrincipal()); + + } else { + return MessageResource.errorMessage("Incorrect password!"); + } + + return MessageResource.successMessage("Password is successfully changed."); + } catch (Exception e) { + log.error(e.getMessage()); + return MessageResource.errorMessage("There has been a problem!"); + } + } + +} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthenticationController.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthenticationController.java index 32223cc0a91..44838352f9b 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthenticationController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/AuthenticationController.java @@ -1,215 +1,213 @@ -package com.netgrif.application.engine.auth.web; - -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.objects.auth.domain.LoggedUser; -import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; -import com.netgrif.application.engine.auth.service.InvalidUserTokenException; -import com.netgrif.application.engine.auth.service.UserDetailsServiceImpl; -import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService; -import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.auth.web.requestbodies.ChangePasswordRequest; -import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; -import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; -import com.netgrif.application.engine.auth.web.responsebodies.IUserFactory; -import com.netgrif.application.engine.auth.web.responsebodies.UserResource; -import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; -import com.netgrif.application.engine.mail.interfaces.IMailAttemptService; -import com.netgrif.application.engine.mail.interfaces.IMailService; -import com.netgrif.application.engine.security.service.ISecurityContextService; -import freemarker.template.TemplateException; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.mail.MessagingException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.hateoas.MediaTypes; -import org.springframework.http.MediaType; -import org.springframework.security.core.Authentication; -import org.springframework.web.bind.annotation.*; - -import java.io.IOException; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.Locale; -import java.util.Optional; - -@Slf4j -@RestController -@RequestMapping("/api/auth") -@ConditionalOnProperty( - value = "nae.auth.web.enabled", - havingValue = "true", - matchIfMissing = true -) -@Tag(name = "Authentication") -public class AuthenticationController { - - @Autowired - private IRegistrationService registrationService; - - @Autowired - private UserDetailsServiceImpl userDetailsService; - - @Autowired - private IMailService mailService; - - @Autowired - private UserService userService; - - @Autowired - private IMailAttemptService mailAttemptService; - - @Autowired - private ServerAuthProperties serverAuthProperties; - - @Autowired - private IUserFactory userResponseFactory; - - @Autowired - private ISecurityContextService securityContextService; - - @Operation(summary = "New user registration") - @PostMapping(value = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource signup(@RequestBody RegistrationRequest regRequest) { - try { - String email = registrationService.decodeToken(regRequest.token)[0]; - if (!registrationService.verifyToken(regRequest.token)) - return MessageResource.errorMessage("Registration of " + email + " has failed! Invalid token!"); - - regRequest.password = new String(Base64.getDecoder().decode(regRequest.password)); - RegisteredUser user = registrationService.registerUser(regRequest); - if (user == null) - return MessageResource.errorMessage("Registration of " + email + " has failed! No user with this email was found."); - - return MessageResource.successMessage("Registration complete"); - } catch (InvalidUserTokenException e) { - log.error(e.getMessage()); - return MessageResource.errorMessage("Invalid token!"); - } - } - - @Operation(summary = "Send invitation to a new user", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/invite", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource invite(@RequestBody NewUserRequest newUserRequest, Authentication auth) { - try { - if (!serverAuthProperties.isOpenRegistration() && (auth == null || !((LoggedUser) auth.getPrincipal()).getSelfOrImpersonated().isAdmin())) { - return MessageResource.errorMessage("Only admin can invite new users!"); - } - - newUserRequest.email = URLDecoder.decode(newUserRequest.email, StandardCharsets.UTF_8.name()); - if (mailAttemptService.isBlocked(newUserRequest.email)) { - return MessageResource.successMessage("Done"); - } - - RegisteredUser user = registrationService.createNewUser(newUserRequest); - if (user == null) - return MessageResource.successMessage("Done"); - mailService.sendRegistrationEmail(user); - - mailAttemptService.mailAttempt(newUserRequest.email); - return MessageResource.successMessage("Done"); - } catch (IOException | TemplateException | MessagingException e) { - log.error(e.toString()); - return MessageResource.errorMessage("Failed"); - } - } - - @Operation(summary = "Verify validity of a registration token", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/token/verify", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource verifyToken(@RequestBody String token) { - try { - if (registrationService.verifyToken(token)) - return MessageResource.successMessage(registrationService.decodeToken(token)[0]); - else - return MessageResource.errorMessage("Invalid token!"); - } catch (InvalidUserTokenException e) { - log.error(e.getMessage()); - return MessageResource.errorMessage("Invalid token!"); - } - } - - @Operation(summary = "Verify validity of an authentication token") - @GetMapping(value = "/verify", produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource verifyAuthToken(Authentication auth) { - LoggedUser loggedUser = (LoggedUser) auth.getPrincipal(); - return MessageResource.successMessage("Auth Token successfully verified, for user [" + loggedUser.getId() + "] " + loggedUser.getFullName()); - } - - @Operation(summary = "Login to the system", security = {@SecurityRequirement(name = "BasicAuth")}) - @GetMapping(value = "/login", produces = MediaTypes.HAL_JSON_VALUE) - public UserResource login(Authentication auth, Locale locale) { - return new UserResource(userResponseFactory.getUser(userService.findByAuth(auth, null), locale), "profile"); - } - - @Operation(summary = "Reset password") - @PostMapping(value = "/reset", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource resetPassword(@RequestBody String recoveryEmail) { - if (mailAttemptService.isBlocked(recoveryEmail)) { - return MessageResource.successMessage("Done"); - } - try { - RegisteredUser user = registrationService.resetPassword(recoveryEmail); - if (user != null) { - mailService.sendPasswordResetEmail(user); - mailAttemptService.mailAttempt(user.getEmail()); - return MessageResource.successMessage("Done"); - } else { - return MessageResource.successMessage("Done"); - } - } catch (MessagingException | IOException | TemplateException e) { - log.error(e.toString()); - return MessageResource.errorMessage("Failed"); - } - } - - @Operation(summary = "Account recovery") - @PostMapping(value = "/recover", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource recoverAccount(@RequestBody RegistrationRequest request) { - try { - if (!registrationService.verifyToken(request.token)) - return MessageResource.errorMessage("Invalid token!"); - RegisteredUser user = registrationService.recover(registrationService.decodeToken(request.token)[0], new String(Base64.getDecoder().decode(request.password))); - if (user == null) - return MessageResource.errorMessage("Recovery of account has failed!"); - return MessageResource.successMessage("Account is successfully recovered. You can login now."); - } catch (InvalidUserTokenException e) { - log.error(e.getMessage()); - return MessageResource.errorMessage("Invalid token!"); - } - } - - @Operation(summary = "Set a new password", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/changePassword", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource changePassword(Authentication auth, @RequestBody ChangePasswordRequest request) { - try { - Optional user = userService.findUserByUsername(request.login, null); - if (user.isEmpty() || request.password == null || request.newPassword == null) { - return MessageResource.errorMessage("Incorrect login!"); - } - - String newPassword = new String(Base64.getDecoder().decode(request.newPassword)); - if (!registrationService.isPasswordSufficient(newPassword)) { - return MessageResource.errorMessage("Insufficient password!"); - } - - String password = new String(Base64.getDecoder().decode(request.password)); - if (registrationService.stringMatchesUserPassword((RegisteredUser) user.get(), password)) { - registrationService.changePassword(((RegisteredUser) user.get()), newPassword); - securityContextService.saveToken(((LoggedUser) auth.getPrincipal()).getId()); - securityContextService.reloadSecurityContext((LoggedUser) auth.getPrincipal()); - - } else { - return MessageResource.errorMessage("Incorrect password!"); - } - - return MessageResource.successMessage("Password is successfully changed."); - } catch (Exception e) { - log.error(e.getMessage()); - return MessageResource.errorMessage("There has been a problem!"); - } - } -} +//package com.netgrif.application.engine.auth.web; +// +//import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import com.netgrif.application.engine.objects.auth.domain.LoggedUser; +//import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; +//import com.netgrif.application.engine.auth.service.InvalidUserTokenException; +//import com.netgrif.application.engine.auth.service.UserDetailsServiceImpl; +//import com.netgrif.application.engine.auth.service.RegistrationService; +//import com.netgrif.application.engine.auth.service.UserService; +//import com.netgrif.application.engine.auth.web.requestbodies.ChangePasswordRequest; +//import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; +//import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; +//import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; +//import com.netgrif.application.engine.mail.interfaces.IMailAttemptService; +//import com.netgrif.application.engine.mail.interfaces.IMailService; +//import com.netgrif.application.engine.security.service.ISecurityContextService; +//import freemarker.template.TemplateException; +//import io.swagger.v3.oas.annotations.Operation; +//import io.swagger.v3.oas.annotations.security.SecurityRequirement; +//import io.swagger.v3.oas.annotations.tags.Tag; +//import jakarta.mail.MessagingException; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +//import org.springframework.hateoas.MediaTypes; +//import org.springframework.http.MediaType; +//import org.springframework.security.core.Authentication; +//import org.springframework.web.bind.annotation.*; +// +//import java.io.IOException; +//import java.net.URLDecoder; +//import java.nio.charset.StandardCharsets; +//import java.util.Base64; +//import java.util.Locale; +//import java.util.Optional; +// +//@Slf4j +//@RestController +//@RequestMapping("/api/auth") +//@ConditionalOnProperty( +// value = "nae.auth.web.enabled", +// havingValue = "true", +// matchIfMissing = true +//) +//@Tag(name = "Authentication") +//public class AuthenticationController { +// +// @Autowired +// private IRegistrationService registrationService; +// +// @Autowired +// private UserDetailsServiceImpl userDetailsService; +// +// @Autowired +// private IMailService mailService; +// +// @Autowired +// private UserService userService; +// +// @Autowired +// private IMailAttemptService mailAttemptService; +// +// @Autowired +// private ServerAuthProperties serverAuthProperties; +// +// @Autowired +// private IUserFactory userResponseFactory; +// +// @Autowired +// private ISecurityContextService securityContextService; +// +// @Operation(summary = "New user registration") +// @PostMapping(value = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource signup(@RequestBody RegistrationRequest regRequest) { +// try { +// String email = registrationService.decodeToken(regRequest.token)[0]; +// if (!registrationService.verifyToken(regRequest.token)) +// return MessageResource.errorMessage("Registration of " + email + " has failed! Invalid token!"); +// +// regRequest.password = new String(Base64.getDecoder().decode(regRequest.password)); +// RegisteredUser user = registrationService.registerUser(regRequest); +// if (user == null) +// return MessageResource.errorMessage("Registration of " + email + " has failed! No user with this email was found."); +// +// return MessageResource.successMessage("Registration complete"); +// } catch (InvalidUserTokenException e) { +// log.error(e.getMessage()); +// return MessageResource.errorMessage("Invalid token!"); +// } +// } +// +// @Operation(summary = "Send invitation to a new user", security = {@SecurityRequirement(name = "BasicAuth")}) +// @PostMapping(value = "/invite", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource invite(@RequestBody NewUserRequest newUserRequest, Authentication auth) { +// try { +// if (!serverAuthProperties.isOpenRegistration() && (auth == null || !((LoggedUser) auth.getPrincipal()).getSelfOrImpersonated().isAdmin())) { +// return MessageResource.errorMessage("Only admin can invite new users!"); +// } +// +// newUserRequest.email = URLDecoder.decode(newUserRequest.email, StandardCharsets.UTF_8.name()); +// if (mailAttemptService.isBlocked(newUserRequest.email)) { +// return MessageResource.successMessage("Done"); +// } +// +// RegisteredUser user = registrationService.createNewUser(newUserRequest); +// if (user == null) +// return MessageResource.successMessage("Done"); +// mailService.sendRegistrationEmail(user); +// +// mailAttemptService.mailAttempt(newUserRequest.email); +// return MessageResource.successMessage("Done"); +// } catch (IOException | TemplateException | MessagingException e) { +// log.error(e.toString()); +// return MessageResource.errorMessage("Failed"); +// } +// } +// +// @Operation(summary = "Verify validity of a registration token", security = {@SecurityRequirement(name = "BasicAuth")}) +// @PostMapping(value = "/token/verify", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource verifyToken(@RequestBody String token) { +// try { +// if (registrationService.verifyToken(token)) +// return MessageResource.successMessage(registrationService.decodeToken(token)[0]); +// else +// return MessageResource.errorMessage("Invalid token!"); +// } catch (InvalidUserTokenException e) { +// log.error(e.getMessage()); +// return MessageResource.errorMessage("Invalid token!"); +// } +// } +// +// @Operation(summary = "Verify validity of an authentication token") +// @GetMapping(value = "/verify", produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource verifyAuthToken(Authentication auth) { +// LoggedUser loggedUser = (LoggedUser) auth.getPrincipal(); +// return MessageResource.successMessage("Auth Token successfully verified, for user [" + loggedUser.getId() + "] " + loggedUser.getFullName()); +// } +// +// @Operation(summary = "Login to the system", security = {@SecurityRequirement(name = "BasicAuth")}) +// @GetMapping(value = "/login", produces = MediaTypes.HAL_JSON_VALUE) +// public UserResource login(Authentication auth, Locale locale) { +// return new UserResource(userResponseFactory.getUser(userService.findByAuth(auth, null), locale), "profile"); +// } +// +// @Operation(summary = "Reset password") +// @PostMapping(value = "/reset", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource resetPassword(@RequestBody String recoveryEmail) { +// if (mailAttemptService.isBlocked(recoveryEmail)) { +// return MessageResource.successMessage("Done"); +// } +// try { +// RegisteredUser user = registrationService.resetPassword(recoveryEmail); +// if (user != null) { +// mailService.sendPasswordResetEmail(user); +// mailAttemptService.mailAttempt(user.getEmail()); +// return MessageResource.successMessage("Done"); +// } else { +// return MessageResource.successMessage("Done"); +// } +// } catch (MessagingException | IOException | TemplateException e) { +// log.error(e.toString()); +// return MessageResource.errorMessage("Failed"); +// } +// } +// +// @Operation(summary = "Account recovery") +// @PostMapping(value = "/recover", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource recoverAccount(@RequestBody RegistrationRequest request) { +// try { +// if (!registrationService.verifyToken(request.token)) +// return MessageResource.errorMessage("Invalid token!"); +// RegisteredUser user = registrationService.recover(registrationService.decodeToken(request.token)[0], new String(Base64.getDecoder().decode(request.password))); +// if (user == null) +// return MessageResource.errorMessage("Recovery of account has failed!"); +// return MessageResource.successMessage("Account is successfully recovered. You can login now."); +// } catch (InvalidUserTokenException e) { +// log.error(e.getMessage()); +// return MessageResource.errorMessage("Invalid token!"); +// } +// } +// +// @Operation(summary = "Set a new password", security = {@SecurityRequirement(name = "BasicAuth")}) +// @PostMapping(value = "/changePassword", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource changePassword(Authentication auth, @RequestBody ChangePasswordRequest request) { +// try { +// Optional user = userService.findUserByUsername(request.login, null); +// if (user.isEmpty() || request.password == null || request.newPassword == null) { +// return MessageResource.errorMessage("Incorrect login!"); +// } +// +// String newPassword = new String(Base64.getDecoder().decode(request.newPassword)); +// if (!registrationService.isPasswordSufficient(newPassword)) { +// return MessageResource.errorMessage("Insufficient password!"); +// } +// +// String password = new String(Base64.getDecoder().decode(request.password)); +// if (registrationService.stringMatchesUserPassword((RegisteredUser) user.get(), password)) { +// registrationService.changePassword(((RegisteredUser) user.get()), newPassword); +// securityContextService.saveToken(((LoggedUser) auth.getPrincipal()).getId()); +// securityContextService.reloadSecurityContext((LoggedUser) auth.getPrincipal()); +// +// } else { +// return MessageResource.errorMessage("Incorrect password!"); +// } +// +// return MessageResource.successMessage("Password is successfully changed."); +// } catch (Exception e) { +// log.error(e.getMessage()); +// return MessageResource.errorMessage("There has been a problem!"); +// } +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/PublicUserController.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/PublicUserController.java index e21f64e4332..6a81bd026ff 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/PublicUserController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/PublicUserController.java @@ -1,115 +1,115 @@ -package com.netgrif.application.engine.auth.web; - -import com.netgrif.application.engine.auth.web.responsebodies.User; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; -import com.netgrif.application.engine.workflow.web.responsebodies.ResourceLinkAssembler; -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.auth.web.requestbodies.UserSearchRequestBody; -import com.netgrif.application.engine.auth.web.responsebodies.IUserFactory; -import com.netgrif.application.engine.auth.web.responsebodies.UserResource; -import com.netgrif.application.engine.auth.web.responsebodies.UserResourceAssembler; -import com.netgrif.application.engine.settings.domain.Preferences; -import com.netgrif.application.engine.settings.service.IPreferencesService; -import com.netgrif.application.engine.settings.web.PreferencesResource; -import com.netgrif.application.engine.objects.workflow.domain.ProcessResourceId; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.ObjectFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.web.PagedResourcesAssembler; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.MediaTypes; -import org.springframework.hateoas.PagedModel; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.util.Locale; -import java.util.stream.Collectors; - -@Slf4j -@RestController -@ConditionalOnProperty( - value = "nae.public.user.web.enabled", - havingValue = "true", - matchIfMissing = true -) -@Tag(name = "Public User Controller") -@RequestMapping("/api/public/user") -public class PublicUserController { - - @Autowired - private IUserFactory userResponseFactory; - - @Autowired - private ObjectFactory userResourceAssemblerFactory; - - @Autowired - private UserService userService; - - @Autowired - private IPreferencesService preferencesService; - - public PublicUserController() { - } - - protected UserResourceAssembler getUserResourceAssembler(Locale locale, boolean small, String selfRel) { - UserResourceAssembler result = userResourceAssemblerFactory.getObject(); - result.initialize(locale, small, selfRel); - return result; - } - - @Operation(summary = "Get logged user") - @GetMapping(value = "/me", produces = MediaTypes.HAL_JSON_VALUE) - public UserResource getLoggedUser(Locale locale) { - return new UserResource(userResponseFactory.getUser(userService.getLoggedUser(), locale), "profile"); - } - - @Operation(summary = "Generic user search") - @PostMapping(value = "/search", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public PagedModel search(@RequestParam(value = "small", required = false) Boolean small, @RequestBody UserSearchRequestBody query, Pageable pageable, PagedResourcesAssembler assembler, Locale locale) { - small = small == null ? false : small; - Page page = userService.searchAllCoMembers(query.getFulltext(), - query.getRoles().stream().map(ProcessResourceId::new).collect(Collectors.toList()), - query.getNegativeRoles().stream().map(ProcessResourceId::new).collect(Collectors.toList()), - userService.transformToLoggedUser(userService.getLoggedUser()), pageable); - - Link selfLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(PublicUserController.class) - .search(small, query, pageable, assembler, locale)).withRel("search"); - PagedModel resources = assembler.toModel(page, getUserResourceAssembler(locale, small, "search"), selfLink); - ResourceLinkAssembler.addLinks(resources, IUser.class, selfLink.getRel().toString()); - return resources; - } - - @Operation(summary = "Get user's preferences") - @GetMapping(value = "/preferences", produces = MediaTypes.HAL_JSON_VALUE) - public PreferencesResource preferences() { - String userId = userService.getLoggedUser().getStringId(); - Preferences preferences = preferencesService.get(userId); - - if (preferences == null) { - preferences = new Preferences(userId); - } - - return new PreferencesResource(preferences); - } - - @Operation(summary = "Set user's preferences") - @PostMapping(value = "/preferences", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource savePreferences(@RequestBody Preferences preferences) { - try { - String userId = userService.getLoggedUser().getStringId(); - preferences.setUserId(userId); - preferencesService.save(preferences); - return MessageResource.successMessage("User preferences saved"); - } catch (Exception e) { - log.error(e.getMessage(), e); - return MessageResource.errorMessage("Saving user preferences failed"); - } - } -} +//package com.netgrif.application.engine.auth.web; +// +//import com.netgrif.application.engine.auth.web.responsebodies.User; +//import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; +//import com.netgrif.application.engine.workflow.web.responsebodies.ResourceLinkAssembler; +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import com.netgrif.application.engine.auth.service.UserService; +//import com.netgrif.application.engine.auth.web.requestbodies.UserSearchRequestBody; +//import com.netgrif.application.engine.auth.web.responsebodies.IUserFactory; +//import com.netgrif.application.engine.auth.web.responsebodies.UserResource; +//import com.netgrif.application.engine.auth.web.responsebodies.UserResourceAssembler; +//import com.netgrif.application.engine.settings.domain.Preferences; +//import com.netgrif.application.engine.settings.service.IPreferencesService; +//import com.netgrif.application.engine.settings.web.PreferencesResource; +//import com.netgrif.application.engine.objects.workflow.domain.ProcessResourceId; +//import io.swagger.v3.oas.annotations.Operation; +//import io.swagger.v3.oas.annotations.tags.Tag; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.ObjectFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +//import org.springframework.data.domain.Page; +//import org.springframework.data.domain.Pageable; +//import org.springframework.data.web.PagedResourcesAssembler; +//import org.springframework.hateoas.Link; +//import org.springframework.hateoas.MediaTypes; +//import org.springframework.hateoas.PagedModel; +//import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; +//import org.springframework.http.MediaType; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.Locale; +//import java.util.stream.Collectors; +// +//@Slf4j +//@RestController +//@ConditionalOnProperty( +// value = "nae.public.user.web.enabled", +// havingValue = "true", +// matchIfMissing = true +//) +//@Tag(name = "Public User Controller") +//@RequestMapping("/api/public/user") +//public class PublicUserController { +// +// @Autowired +// private IUserFactory userResponseFactory; +// +// @Autowired +// private ObjectFactory userResourceAssemblerFactory; +// +// @Autowired +// private UserService userService; +// +// @Autowired +// private IPreferencesService preferencesService; +// +// public PublicUserController() { +// } +// +// protected UserResourceAssembler getUserResourceAssembler(Locale locale, boolean small, String selfRel) { +// UserResourceAssembler result = userResourceAssemblerFactory.getObject(); +// result.initialize(locale, small, selfRel); +// return result; +// } +// +// @Operation(summary = "Get logged user") +// @GetMapping(value = "/me", produces = MediaTypes.HAL_JSON_VALUE) +// public UserResource getLoggedUser(Locale locale) { +// return new UserResource(userResponseFactory.getUser(userService.getLoggedUser(), locale), "profile"); +// } +// +// @Operation(summary = "Generic user search") +// @PostMapping(value = "/search", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public PagedModel search(@RequestParam(value = "small", required = false) Boolean small, @RequestBody UserSearchRequestBody query, Pageable pageable, PagedResourcesAssembler assembler, Locale locale) { +// small = small == null ? false : small; +// Page page = userService.searchAllCoMembers(query.getFulltext(), +// query.getRoles().stream().map(ProcessResourceId::new).collect(Collectors.toList()), +// query.getNegativeRoles().stream().map(ProcessResourceId::new).collect(Collectors.toList()), +// userService.transformToLoggedUser(userService.getLoggedUser()), pageable); +// +// Link selfLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(PublicUserController.class) +// .search(small, query, pageable, assembler, locale)).withRel("search"); +// PagedModel resources = assembler.toModel(page, getUserResourceAssembler(locale, small, "search"), selfLink); +// ResourceLinkAssembler.addLinks(resources, IUser.class, selfLink.getRel().toString()); +// return resources; +// } +// +// @Operation(summary = "Get user's preferences") +// @GetMapping(value = "/preferences", produces = MediaTypes.HAL_JSON_VALUE) +// public PreferencesResource preferences() { +// String userId = userService.getLoggedUser().getStringId(); +// Preferences preferences = preferencesService.get(userId); +// +// if (preferences == null) { +// preferences = new Preferences(userId); +// } +// +// return new PreferencesResource(preferences); +// } +// +// @Operation(summary = "Set user's preferences") +// @PostMapping(value = "/preferences", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) +// public MessageResource savePreferences(@RequestBody Preferences preferences) { +// try { +// String userId = userService.getLoggedUser().getStringId(); +// preferences.setUserId(userId); +// preferencesService.save(preferences); +// return MessageResource.successMessage("User preferences saved"); +// } catch (Exception e) { +// log.error(e.getMessage(), e); +// return MessageResource.errorMessage("Saving user preferences failed"); +// } +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserController.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserController.java index 6a417497e52..3e203c60812 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserController.java @@ -1,249 +1,330 @@ package com.netgrif.application.engine.auth.web; -import com.netgrif.application.engine.auth.web.responsebodies.*; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; -import com.netgrif.application.engine.workflow.web.responsebodies.ResourceLinkAssembler; -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.objects.auth.domain.LoggedUser; -import com.netgrif.application.engine.auth.domain.throwable.UnauthorisedRequestException; +import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; import com.netgrif.application.engine.auth.service.AuthorityService; -import com.netgrif.application.engine.auth.service.interfaces.IUserResourceHelperService; +import com.netgrif.application.engine.auth.service.PreferencesService; +import com.netgrif.application.engine.auth.service.RealmService; import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.auth.web.requestbodies.UpdateUserRequest; +import com.netgrif.application.engine.auth.web.requestbodies.PreferencesRequest; +import com.netgrif.application.engine.auth.web.requestbodies.UserCreateRequest; import com.netgrif.application.engine.auth.web.requestbodies.UserSearchRequestBody; -import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; -import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; -import com.netgrif.application.engine.security.service.ISecurityContextService; -import com.netgrif.application.engine.settings.domain.Preferences; -import com.netgrif.application.engine.settings.service.IPreferencesService; -import com.netgrif.application.engine.settings.web.PreferencesResource; +import com.netgrif.application.engine.auth.web.responsebodies.PreferencesResource; +import com.netgrif.application.engine.auth.web.responsebodies.User; +import com.netgrif.application.engine.objects.auth.domain.*; import com.netgrif.application.engine.objects.workflow.domain.ProcessResourceId; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.ObjectFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; -import org.springframework.data.web.PagedResourcesAssembler; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.MediaTypes; -import org.springframework.hateoas.PagedModel; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; -import java.util.List; -import java.util.Locale; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; + @Slf4j @RestController -@RequestMapping("/api/user") -@ConditionalOnProperty( - value = "nae.user.web.enabled", - havingValue = "true", - matchIfMissing = true -) -@Tag(name = "User") +@RequestMapping("api/users") +@Tag(name = "UserController") +@RequiredArgsConstructor public class UserController { - @Autowired - private UserService userService; - - @Autowired - private IUserResourceHelperService userResourceHelperService; - - @Autowired - private ProcessRoleService processRoleService; - - @Autowired - private AuthorityService authorityService; - - @Autowired - private IPreferencesService preferencesService; - - @Autowired - private ServerAuthProperties serverAuthProperties; + private final UserService userService; + private final ProcessRoleService processRoleService; + private final PreferencesService preferencesService; + private final AuthorityService authorityService; + private final RealmService realmService; - @Autowired - private IUserFactory userResponseFactory; - - @Autowired - private ObjectFactory userResourceAssemblerFactory; - - @Autowired - private ISecurityContextService securityContextService; - - protected UserResourceAssembler getUserResourceAssembler(Locale locale, boolean small, String selfRel) { - UserResourceAssembler result = userResourceAssemblerFactory.getObject(); - result.initialize(locale, small, selfRel); - return result; + @Operation(summary = "Create a new user", description = "Creates a new user in the realm specified by id.") + @ApiResponses(value = { + @ApiResponse(responseCode = "201", description = "User successfully created"), + @ApiResponse(responseCode = "400", description = "Invalid user data"), + @ApiResponse(responseCode = "409", description = "Conflict – user already exists"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @PostMapping("/{realmId}") + public ResponseEntity createUser(@PathVariable String realmId, @RequestBody UserCreateRequest request) { + try { + if (!realmExists(realmId)) { + log.error("Realm with id [{}] not found", realmId); + return ResponseEntity.badRequest().build(); + } + if (userService.findUserByUsername(request.getUsername(), realmId).isPresent()) { + log.error("User with username [{}] already exists in realm [{}]", request.getUsername(), realmId); + return ResponseEntity.status(HttpStatus.CONFLICT).build(); + } + IUser user = userService.createUser( + request.getUsername(), + request.getEmail(), + request.getFirstName(), + request.getLastName(), + request.getPassword(), + realmId + ); + log.info("New user with username [{}] has been created in realm [{}]", request.getUsername(), realmId); + return ResponseEntity.status(HttpStatus.CREATED).body(User.createUser(user)); + } catch (Exception e) { + log.error("Failed to create user", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } } - @Operation(summary = "Get all users", security = {@SecurityRequirement(name = "BasicAuth")}) - @GetMapping(produces = MediaTypes.HAL_JSON_VALUE) - public PagedModel getAll(@RequestParam(value = "small", required = false) Boolean small, Pageable pageable, PagedResourcesAssembler assembler, Authentication auth, Locale locale) { - small = small != null && small; - Page page = userService.findAllCoMembers((LoggedUser) auth.getPrincipal(), pageable); - Link selfLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .getAll(small, pageable, assembler, auth, locale)).withRel("all"); - PagedModel resources = assembler.toModel(page, getUserResourceAssembler(locale, small, "all"), selfLink); - ResourceLinkAssembler.addLinks(resources, IUser.class, selfLink.getRel().toString()); - return resources; + @Operation(summary = "Get page of users from realm", description = "Retrieves page of users from defined realm") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "User retrieved successfully"), + @ApiResponse(responseCode = "400", description = "Invalid user data"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @GetMapping("/{realmId}/all") + public ResponseEntity> getAllUsers(@PathVariable String realmId, Pageable pageable) { + if (!realmExists(realmId)) { + log.error("Realm with id [{}] not found", realmId); + return ResponseEntity.badRequest().build(); + } + Page users = userService.findAllUsers(realmId, pageable); + return ResponseEntity.ok(changeToResponse(users, pageable)); } + @Operation(summary = "Get logged user", description = "Retrieves information of currently logged user") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "User retrieved successfully"), + @ApiResponse(responseCode = "400", description = "Invalid user data"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @GetMapping(value = "/me", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getLoggedUser(Authentication auth) { + LoggedUser loggedUser = (LoggedUser) auth.getPrincipal(); + IUser user; + try { + user = userService.findById(loggedUser.getId(), loggedUser.getRealmId()); + if (user == null) { + return ResponseEntity + .status(HttpStatus.UNAUTHORIZED).build(); + } + } catch (IllegalArgumentException e) { + log.error("Could not find user with id [{}]", loggedUser.getId(), e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); + } + + return ResponseEntity.ok(User.createUser(user)); + } - @Operation(summary = "Generic user search", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/search", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public PagedModel search(@RequestParam(value = "small", required = false) Boolean small, @RequestBody UserSearchRequestBody query, Pageable pageable, PagedResourcesAssembler assembler, Authentication auth, Locale locale) { - small = small == null ? false : small; - List roles = query.getRoles() == null ? null : query.getRoles().stream().map(ProcessResourceId::new).collect(Collectors.toList()); - List negativeRoles = query.getNegativeRoles() == null ? null : query.getNegativeRoles().stream().map(ProcessResourceId::new).collect(Collectors.toList()); - Page page = userService.searchAllCoMembers(query.getFulltext(), + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "User retrieved successfully"), + @ApiResponse(responseCode = "400", description = "Invalid user data"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @Operation(summary = "Generic user search", security = {@SecurityRequirement(name = "X-Auth-Token")}) + @PostMapping(value = "/search", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> search(@RequestBody UserSearchRequestBody query, Pageable pageable, Authentication auth) { + List roles = query.getRoles() == null ? null : query.getRoles().stream().map(ProcessResourceId::new).toList(); + List negativeRoles = query.getNegativeRoles() == null ? null : query.getNegativeRoles().stream().map(ProcessResourceId::new).toList(); + Page users = userService.searchAllCoMembers(query.getFulltext(), roles, negativeRoles, (LoggedUser) auth.getPrincipal(), pageable); - Link selfLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .search(small, query, pageable, assembler, auth, locale)).withRel("search"); - PagedModel resources = assembler.toModel(page, getUserResourceAssembler(locale, small, "search"), selfLink); - ResourceLinkAssembler.addLinks(resources, IUser.class, selfLink.getRel().toString()); - return resources; + return ResponseEntity.ok(changeToResponse(users, pageable)); } - @Operation(summary = "Get user by id", security = {@SecurityRequirement(name = "BasicAuth")}) - @GetMapping(value = "/{id}", produces = MediaTypes.HAL_JSON_VALUE) - public UserResource getUser(@PathVariable("id") String userId, @RequestParam(value = "small", required = false) Boolean small, Locale locale) { - small = small != null && small; + @Operation(summary = "Get user by id", description = "Retrieves information of user defined by given id") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "User retrieved successfully"), + @ApiResponse(responseCode = "400", description = "User with given id does not exist in given realm"), + @ApiResponse(responseCode = "401", description = "User trying to retrieved information is not admin"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @GetMapping(value = "/{realmId}/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getUser(@PathVariable("realmId") String realmId, @PathVariable("id") String userId, Locale locale) { LoggedUser actualUser = userService.getLoggedUserFromContext(); LoggedUser loggedUser = actualUser.getSelfOrImpersonated(); if (!loggedUser.isAdmin() && !Objects.equals(loggedUser.getId(), userId)) { - log.info("User " + actualUser.getUsername() + " trying to get another user with ID " + userId); - throw new IllegalArgumentException("Could not find user with id [" + userId + "]"); + log.info("User [{}] trying to get another user with ID [{}]", actualUser.getUsername(), userId); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } - IUser user = userService.findById(userId, null); - return new UserResource(small ? userResponseFactory.getSmallUser(user) : userResponseFactory.getUser(user, locale), "profile"); + IUser user; + try { + user = userService.findById(userId, realmId); + } catch (IllegalArgumentException e) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); + } + return ResponseEntity.ok(User.createUser(user)); } - @Operation(summary = "Get logged user", security = {@SecurityRequirement(name = "BasicAuth")}) - @GetMapping(value = "/me", produces = MediaTypes.HAL_JSON_VALUE) - public UserResource getLoggedUser(@RequestParam(value = "small", required = false) Boolean small, Authentication auth, Locale locale) { - small = small != null && small; - return userResourceHelperService.getResource((LoggedUser) auth.getPrincipal(), locale, small); - } +// todo step 2, only used in test on frontend +// @Operation(summary = "Update user", security = {@SecurityRequirement(name = "X-Auth-Token")}) +// @PostMapping(value = "/update", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) +// public ResponseEntity updateUser(@RequestBody UpdateUserRequest updates, Authentication auth, Locale locale) { - @Operation(summary = "Update user", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public UserResource updateUser(@PathVariable("id") String userId, @RequestBody UpdateUserRequest updates, Authentication auth, Locale locale) throws UnauthorisedRequestException { - if (!serverAuthProperties.isEnableProfileEdit()) return null; + /// / todo should this be kept? not relevant anymore? +// if (!serverAuthProperties.isEnableProfileEdit()) { +// return null; +// } +// LoggedUser loggedUser = (LoggedUser) auth.getPrincipal(); +// String userId = updates.getStringId(); +// IUser user; +// try { +// user = userService.findById(userId, updatedUser.getRealmId()); +// } catch (IllegalArgumentException e) { +// log.error("Could not find user with id [{}]", userId, e); +// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); +// } +// user = userService.update(user, updates.getUpdatedUser()); +// securityContextService.saveToken(userId); +// if (Objects.equals(loggedUser.getId(), userId)) { +// loggedUser.setFirstName(user.getFirstName()); +// loggedUser.setLastName(user.getLastName()); +// securityContextService.reloadSecurityContext(loggedUser); +// } +// log.info("Updating user " + user.getEmail() + " with data " + updatedUser); +// return ResponseEntity.ok(User.createUser(user)); +// } - LoggedUser loggedUser = (LoggedUser) auth.getPrincipal(); - IUser user = userService.findById(userId, null); - if (user == null || (!loggedUser.isAdmin() && !Objects.equals(loggedUser.getId(), userId))) - throw new UnauthorisedRequestException("User " + loggedUser.getUsername() + " doesn't have permission to modify profile of " + userService.transformToLoggedUser(user).getUsername()); - - user = userService.update(user, updates); - securityContextService.saveToken(userId); - if (Objects.equals(loggedUser.getId(), userId)) { - loggedUser.setFirstName(user.getFirstName()); - loggedUser.setLastName(user.getLastName()); - securityContextService.reloadSecurityContext(loggedUser); +// todo not used on front, is it needed? +// @Operation(summary = "Get all users with specified roles", security = {@SecurityRequirement(name = "X-Auth-Token")}) +// @PostMapping(value = "/role", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) +// public ResponseEntity> getAllWithRole(@RequestBody Set roleIds, Pageable pageable, Locale locale) { +// Set roleResourceIds = roleIds == null ? null : roleIds.stream().map(ProcessResourceId::new).collect(Collectors.toSet()); +// Page page = userService.findAllActiveByProcessRoles(roleResourceIds, pageable); +// return ResponseEntity.ok(); +// } + @PreAuthorize("@authorizationService.hasAuthority('ADMIN')") + @Operation(summary = "Assign roles to the user", description = "Caller must have the ADMIN role", security = {@SecurityRequirement(name = "X-Auth-Token")}) + @PutMapping(value = "/{realmId}/{id}/roles", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Selected roles assigned successfully"), + @ApiResponse(responseCode = "400", description = "Requested roles or user with defined id does not exist"), + @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + public ResponseEntity assignRolesToUser(@PathVariable("realmId") String realmId, @PathVariable("id") String userId, @RequestBody Set roleIds, Authentication auth) { + try { + IUser user = userService.findById(userId, realmId); + processRoleService.assignRolesToUser(user, roleIds.stream().map(ProcessResourceId::new).collect(Collectors.toSet()), (LoggedUser) auth.getPrincipal()); + log.info("Process roles {} assigned to user with id [{}]", roleIds, userId); + return ResponseEntity.ok("Selected roles assigned to user " + userId); + } catch (IllegalArgumentException e) { + String message = "Assigning roles to user [" + userId + "] has failed!"; + log.error(message, e); + return ResponseEntity.badRequest().body(message); } - log.info("Updating user " + user.getEmail() + " with data " + updates.toString()); - return new UserResource(userResponseFactory.getUser(user, locale), "profile"); - } - - @Operation(summary = "Get all users with specified roles", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/role", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public PagedModel getAllWithRole(@RequestBody Set roleIds, @RequestParam(value = "small", required = false) Boolean small, Pageable pageable, PagedResourcesAssembler assembler, Locale locale) { - small = small == null ? false : small; - Set roleResourceIds = roleIds == null ? null : roleIds.stream().map(ProcessResourceId::new).collect(Collectors.toSet()); - Page page = userService.findAllActiveByProcessRoles(roleResourceIds, pageable, null); - Link selfLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .getAllWithRole(roleIds, small, pageable, assembler, locale)).withRel("role"); - PagedModel resources = assembler.toModel(page, getUserResourceAssembler(locale, small, "role"), selfLink); - ResourceLinkAssembler.addLinks(resources, IUser.class, selfLink.getRel().toString()); - return resources; } @PreAuthorize("@authorizationService.hasAuthority('ADMIN')") - @Operation(summary = "Assign role to the user", description = "Caller must have the ADMIN role", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/{id}/role/assign", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) + @Operation(summary = "Assign negative roles to the user", description = "Caller must have the ADMIN role", security = {@SecurityRequirement(name = "X-Auth-Token")}) + @PutMapping(value = "/{realmId}/{id}/negativeRole", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "200", description = "Selected negative roles assigned successfully"), + @ApiResponse(responseCode = "400", description = "Requested roles or user with defined id does not exist"), @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"), + @ApiResponse(responseCode = "500", description = "Internal server error") }) - public MessageResource assignRolesToUser(@PathVariable("id") String userId, @RequestBody Set roleIds, Authentication auth) { + public ResponseEntity assignNegativeRolesToUser(@PathVariable("realmId") String realmId, @PathVariable("id") String userId, @RequestBody Set roleIds, Authentication auth) { try { - IUser user = userService.findById(userId, null); - processRoleService.assignRolesToUser(user, roleIds.stream().map(ProcessResourceId::new).collect(Collectors.toSet()), (LoggedUser) auth.getPrincipal()); - log.info("Process roles " + roleIds + " assigned to user " + userId); - return MessageResource.successMessage("Selected roles assigned to user " + userId); + IUser user = userService.findById(userId, realmId); + processRoleService.assignNegativeRolesToUser(user, roleIds.stream().map(ProcessResourceId::new).collect(Collectors.toSet()), (LoggedUser) auth.getPrincipal()); + log.info("Negative process roles {} assigned to user [{}]", roleIds, userId); + return ResponseEntity.ok("Selected negative roles assigned to user " + userId); } catch (IllegalArgumentException e) { - log.error(e.getMessage()); - return MessageResource.errorMessage("Assigning roles to user " + userId + " has failed!"); + log.error("Assigning negative roles to user with id [{}] has failed!", userId, e); + return ResponseEntity.badRequest().body("Assigning negative roles to user " + userId + " has failed!"); } } @PreAuthorize("@authorizationService.hasAuthority('ADMIN')") @Operation(summary = "Get all authorities of the system", description = "Caller must have the ADMIN role", - security = {@SecurityRequirement(name = "BasicAuth")}) - @GetMapping(value = "/authority", produces = MediaTypes.HAL_JSON_VALUE) + security = {@SecurityRequirement(name = "X-Auth-Token")}) + @GetMapping(value = "/authority", produces = MediaType.APPLICATION_JSON_VALUE) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"), + @ApiResponse(responseCode = "500", description = "Internal server error") }) - public AuthoritiesResources getAllAuthorities(Authentication auth) { - return new AuthoritiesResources(authorityService.findAll()); + public ResponseEntity> getAllAuthorities() { + return ResponseEntity.ok(authorityService.findAll()); } @PreAuthorize("@authorizationService.hasAuthority('ADMIN')") @Operation(summary = "Assign authority to the user", description = "Caller must have the ADMIN role", - security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/{id}/authority/assign", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaTypes.HAL_JSON_VALUE) + security = {@SecurityRequirement(name = "X-Auth-Token")}) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "200", description = "Authority was assigned to user successfully"), + @ApiResponse(responseCode = "400", description = "Authority with given id or user with given id does not exist"), @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"), + @ApiResponse(responseCode = "500", description = "Internal server error") }) - public MessageResource assignAuthorityToUser(@PathVariable("id") String userId, @RequestBody String authorityId) { - userService.assignAuthority(userId, null, authorityId); - return MessageResource.successMessage("Authority " + authorityId + " assigned to user " + userId); + @PostMapping(value = "/{realmId}/{id}/authority", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity assignAuthorityToUser(@PathVariable("realmId") String realmId, @PathVariable("id") String userId, @RequestBody String authorityId) { + try { + userService.assignAuthority(userId, realmId, authorityId); + } catch (IllegalArgumentException e) { + log.error("Assigning authority to user [{}] has failed!", userId, e); + return ResponseEntity.badRequest().body("Assigning authority to user " + userId + " has failed!"); + } + return ResponseEntity.ok("Authority was assigned to user successfully"); } - @Operation(summary = "Get user's preferences", security = {@SecurityRequirement(name = "BasicAuth")}) - @GetMapping(value = "/preferences", produces = MediaTypes.HAL_JSON_VALUE) - public PreferencesResource preferences(Authentication auth) { + @Operation(summary = "Get logged user's preferences", security = {@SecurityRequirement(name = "X-Auth-Token")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Returns preferences of logged user"), + @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @GetMapping(value = "/preferences", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity preferences(Authentication auth) { String userId = ((LoggedUser) auth.getPrincipal()).getId(); Preferences preferences = preferencesService.get(userId); if (preferences == null) { - preferences = new Preferences(userId); + preferences = new com.netgrif.application.engine.adapter.spring.auth.domain.Preferences(userId); } + PreferencesResource preferencesResource = PreferencesResource.withPreferences(preferences); - return new PreferencesResource(preferences); + return ResponseEntity.ok(preferencesResource); } - @Operation(summary = "Set user's preferences", security = {@SecurityRequirement(name = "BasicAuth")}) - @PostMapping(value = "/preferences", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE) - public MessageResource savePreferences(@RequestBody Preferences preferences, Authentication auth) { + @Operation(summary = "Set preferences of logged user", security = {@SecurityRequirement(name = "X-Auth-Token")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Saves preferences of logged user"), + @ApiResponse(responseCode = "400", description = "Preferences data are invalid"), + @ApiResponse(responseCode = "403", description = "Caller doesn't fulfill the authorisation requirements"), + @ApiResponse(responseCode = "500", description = "Internal server error") + }) + @PostMapping(value = "/preferences", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity savePreferences(@RequestBody PreferencesRequest preferences, Authentication auth) { try { String userId = ((LoggedUser) auth.getPrincipal()).getId(); preferences.setUserId(userId); - preferencesService.save(preferences); - return MessageResource.successMessage("User preferences saved"); + preferencesService.save(preferences.toPreferences()); + return ResponseEntity.ok("User preferences saved"); } catch (Exception e) { - log.error(e.getMessage(), e); - return MessageResource.errorMessage("Saving user preferences failed"); + log.error("Saving user preferences failed", e); + return ResponseEntity.badRequest().body("Saving user preferences failed"); } } -} + + private Page changeToResponse(Page users, Pageable pageable) { + return new PageImpl<>(changeType(users.getContent()), pageable, users.getTotalElements()); + } + + public List changeType(List users) { + return users.stream().map(User::createUser).toList(); + } + + private boolean realmExists(String realmId) { + Optional realm = realmService.getRealmById(realmId); + return realm.isPresent(); + } +} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserControllerAdvice.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserControllerAdvice.java index 020df490d97..8c4608396d3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserControllerAdvice.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/UserControllerAdvice.java @@ -1,6 +1,6 @@ package com.netgrif.application.engine.auth.web; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/ChangePasswordRequest.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/ChangePasswordRequest.java index 70209845b0b..ccda6e776cd 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/ChangePasswordRequest.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/ChangePasswordRequest.java @@ -1,19 +1,19 @@ -package com.netgrif.application.engine.auth.web.requestbodies; - -public class ChangePasswordRequest { - - public String login; - - public String password; - - public String newPassword; - - public ChangePasswordRequest() { - } - - public ChangePasswordRequest(String login, String password, String newPassword) { - this.login = login; - this.password = password; - this.newPassword = newPassword; - } -} +//package com.netgrif.application.engine.auth.web.requestbodies; +// +//public class ChangePasswordRequest { +// +// public String login; +// +// public String password; +// +// public String newPassword; +// +// public ChangePasswordRequest() { +// } +// +// public ChangePasswordRequest(String login, String password, String newPassword) { +// this.login = login; +// this.password = password; +// this.newPassword = newPassword; +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/NewUserRequest.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/NewUserRequest.java index 31692e5f206..b0c66d98b71 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/NewUserRequest.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/NewUserRequest.java @@ -1,16 +1,16 @@ -package com.netgrif.application.engine.auth.web.requestbodies; - -import lombok.Data; - -import java.util.Set; - -@Data -public class NewUserRequest { - - public String email; - public Set groups; - public Set processRoles; - - public NewUserRequest() { - } -} +//package com.netgrif.application.engine.auth.web.requestbodies; +// +//import lombok.Data; +// +//import java.util.Set; +// +//@Data +//public class NewUserRequest { +// +// public String email; +// public Set groups; +// public Set processRoles; +// +// public NewUserRequest() { +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/RegistrationRequest.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/RegistrationRequest.java index a2594c6609f..f1738cfd2e6 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/RegistrationRequest.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/RegistrationRequest.java @@ -1,13 +1,13 @@ -package com.netgrif.application.engine.auth.web.requestbodies; - - -public class RegistrationRequest { - - public String token; - public String name; - public String surname; - public String password; - - public RegistrationRequest() { - } -} +//package com.netgrif.application.engine.auth.web.requestbodies; +// +// +//public class RegistrationRequest { +// +// public String token; +// public String name; +// public String surname; +// public String password; +// +// public RegistrationRequest() { +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UpdateUserRequest.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UpdateUserRequest.java index e2f12db51a7..9ef4adeaea6 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UpdateUserRequest.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UpdateUserRequest.java @@ -1,352 +1,310 @@ -package com.netgrif.application.engine.auth.web.requestbodies; - -import com.netgrif.application.engine.objects.auth.domain.*; -import com.netgrif.application.engine.objects.auth.domain.enums.UserState; -import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; -import lombok.Getter; -import lombok.Setter; - -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Map; -import java.util.Set; - -@Setter -@Getter -public class UpdateUserRequest implements IUser, Serializable { - - @Serial - private static final long serialVersionUID = 3681503301565489613L; - - public String telNumber; - - public String avatar; - - public String name; - - public String surname; - - public UpdateUserRequest() { - } - - @Override - public String getEmail() { - return ""; - } - - @Override - public void setEmail(String s) { - - } - - @Override - public String getRealmId() { - return ""; - } - - @Override - public void setRealmId(String s) { - - } - - @Override - public String getUsername() { - return ""; - } - - @Override - public void setUsername(String s) { - - } - - @Override - public String getFirstName() { - return ""; - } - - @Override - public void setFirstName(String s) { - - } - - @Override - public String getLastName() { - return ""; - } - - @Override - public void setLastName(String s) { - - } - - @Override - public String getFullName() { - return ""; - } - - @Override - public UserState getState() { - return null; - } - - @Override - public void setState(UserState userState) { - - } - - @Override - public LoggedUser transformToLoggedUser() { - return null; - } - - @Override - public Author transformToAuthor() { - return null; - } - - @Override - public boolean isActive() { - return false; - } - - @Override - public boolean isImpersonating() { - return false; - } - - @Override - public LocalDateTime getCreatedAt() { - return null; - } - - @Override - public Map> getAttributes() { - return Map.of(); - } - - @Override - public boolean isEnabled() { - return false; - } - - @Override - public boolean isEmailVerified() { - return false; - } - - @Override - public IUser getSelfOrImpersonated() { - return null; - } - - @Override - public IUser getImpersonated() { - return null; - } - - @Override - public void setImpersonated(IUser iUser) { - - } - - @Override - public void enableMFA(String s, String s1, int i) { - - } - - @Override - public void disableMFA(String s) { - - } - - @Override - public Set getEnabledMFAMethods() { - return Set.of(); - } - - @Override - public boolean isMFAEnabled(String s) { - return false; - } - - @Override - public void activateMFA(String s, String s1) { - - } - - @Override - public void activateMFA(String s, String s1, boolean b) { - - } - - @Override - public boolean validateRequiredAttributes() { - return false; - } - - @Override - public Credential getCredential(String s) { - return null; - } - - @Override - public Object getCredentialValue(String s) { - return null; - } - - @Override - public void setCredential(String s, String s1, int i, boolean b) { - - } - - @Override - public void addCredential(Credential credential) { - - } - - @Override - public void setCredentialProperty(String s, String s1, Object o) { - - } - - @Override - public Object getCredentialProperty(String s, String s1) { - return null; - } - - @Override - public void removeCredential(String s) { - - } - - @Override - public boolean hasCredential(String s) { - return false; - } - - @Override - public String getStringId() { - return ""; - } - - @Override - public Set getAuthorities() { - return Set.of(); - } - - @Override - public void setAuthorities(Set set) { - - } - - @Override - public Set getProcessRoles() { - return Set.of(); - } - - @Override - public Set getNegativeProcessRoles() { - return Set.of(); - } - - @Override - public void setNegativeProcessRoles(Set processRoles) { - - } - - @Override - public void setProcessRoles(Set set) { - - } - - @Override - public Set getGroupIds() { - return Set.of(); - } - - @Override - public Set getGroups() { - return Set.of(); - } - - @Override - public void setGroupIds(Set set) { - - } - - @Override - public void addGroupId(String s) { - - } - - @Override - public void removeGroupId(String s) { - - } - - @Override - public void addAuthority(Authority authority) { - - } - - @Override - public void removeAuthority(Authority authority) { - - } - - @Override - public void addProcessRole(ProcessRole processRole) { - - } - - @Override - public void removeProcessRole(ProcessRole processRole) { - - } - - @Override - public void addNegativeProcessRole(ProcessRole role) { - - } - - @Override - public void removeNegativeProcessRole(ProcessRole role) { - - } - - @Override - public void setAttribute(String s, Object o, boolean b) { - - } - - @Override - public Object getAttributeValue(String s) { - return null; - } - - @Override - public void removeAttribute(String s) { - - } - - @Override - public boolean isAttributeSet(String s) { - return false; - } - - @Override - public Attribute getAttribute(String s) { - return null; - } - - @Override - public String toString() { - return "UpdateUserRequest{" + - "telNumber='" + telNumber + '\'' + - ", avatar='" + avatar + '\'' + - ", name='" + name + '\'' + - ", surname='" + surname + '\'' + - '}'; - } -} +//package com.netgrif.application.engine.auth.web.requestbodies; +// +//import com.netgrif.application.engine.objects.auth.domain.*; +//import com.netgrif.application.engine.objects.auth.domain.enums.UserState; +//import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; +//import lombok.Getter; +//import lombok.Setter; +// +//import java.io.Serial; +//import java.io.Serializable; +//import java.util.Set; +// +//@Setter +//@Getter +//public class UpdateUserRequest implements IUser, Serializable { +// +// @Serial +// private static final long serialVersionUID = 3681503301565489613L; +// +// public String telNumber; +// +// public String avatar; +// +// public String name; +// +// public String surname; +// +// public UpdateUserRequest() { +// } +// +// @Override +// public String getEmail() { +// return ""; +// } +// +// @Override +// public void setEmail(String s) { +// +// } +// +// @Override +// public String getRealmId() { +// return ""; +// } +// +// @Override +// public void setRealmId(String s) { +// +// } +// +// @Override +// public String getUsername() { +// return ""; +// } +// +// @Override +// public void setUsername(String s) { +// +// } +// +// @Override +// public String getFirstName() { +// return ""; +// } +// +// @Override +// public void setFirstName(String s) { +// +// } +// +// @Override +// public String getLastName() { +// return ""; +// } +// +// @Override +// public void setLastName(String s) { +// +// } +// +// @Override +// public String getFullName() { +// return ""; +// } +// +// @Override +// public UserState getState() { +// return null; +// } +// +// @Override +// public void setState(UserState userState) { +// +// } +// +// @Override +// public LoggedUser transformToLoggedUser() { +// return null; +// } +// +// @Override +// public Author transformToAuthor() { +// return null; +// } +// +// @Override +// public boolean isActive() { +// return false; +// } +// +// @Override +// public boolean isImpersonating() { +// return false; +// } +// +// @Override +// public IUser getSelfOrImpersonated() { +// return null; +// } +// +// @Override +// public IUser getImpersonated() { +// return null; +// } +// +// @Override +// public void setImpersonated(IUser iUser) { +// +// } +// +// @Override +// public void enableMFA(String s, String s1, int i) { +// +// } +// +// @Override +// public void disableMFA(String s) { +// +// } +// +// @Override +// public Set getEnabledMFAMethods() { +// return Set.of(); +// } +// +// @Override +// public boolean isMFAEnabled(String s) { +// return false; +// } +// +// @Override +// public void activateMFA(String s, String s1) { +// +// } +// +// @Override +// public void activateMFA(String s, String s1, boolean b) { +// +// } +// +// @Override +// public boolean validateRequiredAttributes() { +// return false; +// } +// +// @Override +// public Credential getCredential(String s) { +// return null; +// } +// +// @Override +// public Object getCredentialValue(String s) { +// return null; +// } +// +// @Override +// public void setCredential(String s, String s1, int i, boolean b) { +// +// } +// +// @Override +// public void addCredential(Credential credential) { +// +// } +// +// @Override +// public void setCredentialProperty(String s, String s1, Object o) { +// +// } +// +// @Override +// public Object getCredentialProperty(String s, String s1) { +// return null; +// } +// +// @Override +// public void removeCredential(String s) { +// +// } +// +// @Override +// public boolean hasCredential(String s) { +// return false; +// } +// +// @Override +// public String getStringId() { +// return ""; +// } +// +// @Override +// public Set getAuthorities() { +// return Set.of(); +// } +// +// @Override +// public void setAuthorities(Set set) { +// +// } +// +// @Override +// public Set getProcessRoles() { +// return Set.of(); +// } +// +// @Override +// public void setProcessRoles(Set set) { +// +// } +// +// @Override +// public Set getGroupIds() { +// return Set.of(); +// } +// +// @Override +// public Set getGroups() { +// return Set.of(); +// } +// +// @Override +// public void setGroupIds(Set set) { +// +// } +// +// @Override +// public void addGroupId(String s) { +// +// } +// +// @Override +// public void removeGroupId(String s) { +// +// } +// +// @Override +// public void addAuthority(Authority authority) { +// +// } +// +// @Override +// public void removeAuthority(Authority authority) { +// +// } +// +// @Override +// public void addProcessRole(ProcessRole processRole) { +// +// } +// +// @Override +// public void removeProcessRole(ProcessRole processRole) { +// +// } +// +// @Override +// public void setAttribute(String s, Object o, boolean b) { +// +// } +// +// @Override +// public Object getAttributeValue(String s) { +// return null; +// } +// +// @Override +// public void removeAttribute(String s) { +// +// } +// +// @Override +// public boolean isAttributeSet(String s) { +// return false; +// } +// +// @Override +// public Attribute getAttribute(String s) { +// return null; +// } +// +// @Override +// public String toString() { +// return "UpdateUserRequest{" + +// "telNumber='" + telNumber + '\'' + +// ", avatar='" + avatar + '\'' + +// ", name='" + name + '\'' + +// ", surname='" + surname + '\'' + +// '}'; +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UserSearchRequestBody.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UserSearchRequestBody.java index 1716dfdac2a..8317cb49181 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UserSearchRequestBody.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/requestbodies/UserSearchRequestBody.java @@ -1,15 +1,15 @@ -package com.netgrif.application.engine.auth.web.requestbodies; - -import lombok.Data; - -import java.util.List; - -@Data -public class UserSearchRequestBody { - - private String fulltext; - - private List roles; - - private List negativeRoles; -} \ No newline at end of file +//package com.netgrif.application.engine.auth.web.requestbodies; +// +//import lombok.Data; +// +//import java.util.List; +// +//@Data +//public class UserSearchRequestBody { +// +// private String fulltext; +// +// private List roles; +// +// private List negativeRoles; +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/AuthoritiesResources.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/AuthoritiesResources.java index 05fb81ce429..b3cba61e099 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/AuthoritiesResources.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/AuthoritiesResources.java @@ -1,22 +1,22 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - - -import com.netgrif.application.engine.objects.auth.domain.Authority; -import com.netgrif.application.engine.auth.web.UserController; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; - -public class AuthoritiesResources extends CollectionModel { - public AuthoritiesResources(Iterable content) { - super(content); - buildLinks(); - } - - public AuthoritiesResources() { - } - - public void buildLinks() { - add(WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .getAllAuthorities(null)).withSelfRel()); - } -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +// +//import com.netgrif.application.engine.objects.auth.domain.Authority; +//import com.netgrif.application.engine.auth.web.UserController; +//import org.springframework.hateoas.CollectionModel; +//import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; +// +//public class AuthoritiesResources extends CollectionModel { +// public AuthoritiesResources(Iterable content) { +// super(content); +// buildLinks(); +// } +// +// public AuthoritiesResources() { +// } +// +// public void buildLinks() { +// add(WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) +// .getAllAuthorities(null)).withSelfRel()); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IProcessRoleFactory.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IProcessRoleFactory.java index cd7eca9031d..3302cc2b4fc 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IProcessRoleFactory.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IProcessRoleFactory.java @@ -1,7 +1,7 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import java.util.Locale; - -public interface IProcessRoleFactory { - ProcessRole getProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale); -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import java.util.Locale; +// +//public interface IProcessRoleFactory { +// ProcessRole getProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale); +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IUserFactory.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IUserFactory.java index 5f3f2331a64..94c0bec77f9 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IUserFactory.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/IUserFactory.java @@ -1,20 +1,20 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import com.netgrif.application.engine.objects.auth.domain.IUser; - -import java.util.Locale; - -public interface IUserFactory { - /** - * @param user the domain User object we want to send to frontend - * @param locale the locale for translations - * @return a full version of the user response object, that has all of its attributes set - */ - User getUser(IUser user, Locale locale); - - /** - * @param user the domain User object we want to send to frontend - * @return a small version of the user response object, that has its large attributes (roles, groups, authorities...) cleared - */ - User getSmallUser(IUser user); -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import com.netgrif.application.engine.objects.auth.domain.IUser; +// +//import java.util.Locale; +// +//public interface IUserFactory { +// /** +// * @param user the domain User object we want to send to frontend +// * @param locale the locale for translations +// * @return a full version of the user response object, that has all of its attributes set +// */ +// User getUser(IUser user, Locale locale); +// +// /** +// * @param user the domain User object we want to send to frontend +// * @return a small version of the user response object, that has its large attributes (roles, groups, authorities...) cleared +// */ +// User getSmallUser(IUser user); +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRole.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRole.java index ef217768886..46cf1061692 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRole.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRole.java @@ -1,36 +1,36 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import lombok.Data; - -import java.util.Locale; - -@Data -public class ProcessRole { - - private String stringId; - - private String name; - - private String description; - - private String importId; - - // net attributes are set in the Factory service - private String netImportId; - - private String netVersion; - - private String netStringId; - - /** - * The constructor doesn't set attributes regarding the Petri net. - * - * Use the ProcessRoleFactory to create instances that have these attributes set. - */ - public ProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale) { - stringId = role.getStringId(); - name = role.getLocalisedName(locale); - description = role.getDescription(); - importId = role.getImportId(); - } -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import lombok.Data; +// +//import java.util.Locale; +// +//@Data +//public class ProcessRole { +// +// private String stringId; +// +// private String name; +// +// private String description; +// +// private String importId; +// +// // net attributes are set in the Factory service +// private String netImportId; +// +// private String netVersion; +// +// private String netStringId; +// +// /** +// * The constructor doesn't set attributes regarding the Petri net. +// * +// * Use the ProcessRoleFactory to create instances that have these attributes set. +// */ +// public ProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale) { +// stringId = role.getStringId(); +// name = role.getLocalisedName(locale); +// description = role.getDescription(); +// importId = role.getImportId(); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRoleFactory.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRoleFactory.java index eeb57536d46..6bee84fb3b2 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRoleFactory.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/ProcessRoleFactory.java @@ -1,33 +1,33 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; -import com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService; -import org.bson.types.ObjectId; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Locale; - -@Service -public class ProcessRoleFactory implements IProcessRoleFactory { - - @Autowired - private IPetriNetService petriNetService; - - @Override - public ProcessRole getProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale) { - /*if (!role.getStringId().equals(userProcessRole.getRoleId())) { - throw new IllegalArgumentException(String.format("ProcessRole StringId (%s) and UserProcessRole roleId (%s) must match!", role.getStringId(), userProcessRole.getRoleId())); - }*/ - if (!role.isGlobal()) { - ProcessRole result = new ProcessRole(role, locale); - PetriNet net = petriNetService.get(new ObjectId(role.getProcessId())); - result.setNetStringId(net.getStringId()); - result.setNetImportId(net.getImportId()); - result.setNetVersion(net.getVersion().toString()); - return result; - } - return new ProcessRole(role, locale); - } - -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; +//import com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService; +//import org.bson.types.ObjectId; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +// +//import java.util.Locale; +// +//@Service +//public class ProcessRoleFactory implements IProcessRoleFactory { +// +// @Autowired +// private IPetriNetService petriNetService; +// +// @Override +// public ProcessRole getProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale) { +// /*if (!role.getStringId().equals(userProcessRole.getRoleId())) { +// throw new IllegalArgumentException(String.format("ProcessRole StringId (%s) and UserProcessRole roleId (%s) must match!", role.getStringId(), userProcessRole.getRoleId())); +// }*/ +// if (!role.isGlobal()) { +// ProcessRole result = new ProcessRole(role, locale); +// PetriNet net = petriNetService.get(new ObjectId(role.getProcessId())); +// result.setNetStringId(net.getStringId()); +// result.setNetImportId(net.getImportId()); +// result.setNetVersion(net.getVersion().toString()); +// return result; +// } +// return new ProcessRole(role, locale); +// } +// +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/User.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/User.java index a9b68234c9b..70b9da12fc9 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/User.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/User.java @@ -1,67 +1,67 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import com.netgrif.application.engine.objects.auth.domain.Authority; -import com.netgrif.application.engine.objects.auth.domain.Group; -import com.netgrif.application.engine.objects.auth.domain.IUser; -import lombok.Data; - -import java.util.Set; -import java.util.stream.Collectors; - -@Data -public class User { - - private String id; - - private String email; - - private String telNumber; - - private String avatar; - - private String name; - - private String surname; - - private String fullName; - - private Set authorities; - - // process roles are set with the factory - private Set processRoles; - - private Set nextGroups; - - private User impersonated; - - protected User(IUser user) { - id = user.getStringId(); - email = user.getEmail(); - avatar = user.getAvatar(); - name = user.getFirstName(); - surname = user.getLastName(); - fullName = user.getFullName(); - } - - /** - * This static method doesn't set attributes regarding the ProcessRoles - * - * Use the IUserFactory service to create instances that have these attributes set. - */ - public static User createSmallUser(IUser user) { - return new User(user); - } - - /** - * This static method doesn't set attributes regarding the ProcessRoles - * - * Use the IUserFactory service to create instances that have these attributes set. - */ - public static User createUser(IUser user) { - User result = new User(user); - result.setTelNumber(user.getTelNumber()); - result.setAuthorities(user.getAuthorities()); - result.setNextGroups(user.getGroups().stream().map(Group::getStringId).collect(Collectors.toSet())); - return result; - } -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import com.netgrif.application.engine.objects.auth.domain.Authority; +//import com.netgrif.application.engine.objects.auth.domain.Group; +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import lombok.Data; +// +//import java.util.Set; +//import java.util.stream.Collectors; +// +//@Data +//public class User { +// +// private String id; +// +// private String email; +// +// private String telNumber; +// +// private String avatar; +// +// private String name; +// +// private String surname; +// +// private String fullName; +// +// private Set authorities; +// +// // process roles are set with the factory +// private Set processRoles; +// +// private Set nextGroups; +// +// private User impersonated; +// +// protected User(IUser user) { +// id = user.getStringId(); +// email = user.getEmail(); +// avatar = user.getAvatar(); +// name = user.getFirstName(); +// surname = user.getLastName(); +// fullName = user.getFullName(); +// } +// +// /** +// * This static method doesn't set attributes regarding the ProcessRoles +// * +// * Use the IUserFactory service to create instances that have these attributes set. +// */ +// public static User createSmallUser(IUser user) { +// return new User(user); +// } +// +// /** +// * This static method doesn't set attributes regarding the ProcessRoles +// * +// * Use the IUserFactory service to create instances that have these attributes set. +// */ +// public static User createUser(IUser user) { +// User result = new User(user); +// result.setTelNumber(user.getTelNumber()); +// result.setAuthorities(user.getAuthorities()); +// result.setNextGroups(user.getGroups().stream().map(Group::getStringId).collect(Collectors.toSet())); +// return result; +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserFactory.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserFactory.java index 0acc50f9e10..7d944641fe5 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserFactory.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserFactory.java @@ -1,45 +1,45 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.Locale; -import java.util.stream.Collectors; - -public class UserFactory implements IUserFactory { - - @Autowired - private ProcessRoleService processRoleService; - - @Autowired - private IProcessRoleFactory processRoleFactory; - - @Override - public User getUser(IUser user, Locale locale) { - User result = getUser(user); - - String defaultRoleId = processRoleService.defaultRole().getStringId(); - String anonymousRoleId = processRoleService.anonymousRole().getStringId(); - result.setProcessRoles(user.getProcessRoles().stream().map(processRole -> { - if (processRole.getStringId().equals(defaultRoleId)) { - return new ProcessRole(processRole, locale); - } - if (processRole.getStringId().equals(anonymousRoleId)) { - return new ProcessRole(processRole, locale); - } - return processRoleFactory.getProcessRole(processRole, locale); - }).collect(Collectors.toSet())); - - return result; - } - - @Override - public User getSmallUser(IUser user) { - return User.createSmallUser(user); - } - - protected User getUser(IUser user) { - return User.createUser(user); - } -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; +//import org.springframework.beans.factory.annotation.Autowired; +// +//import java.util.Locale; +//import java.util.stream.Collectors; +// +//public class UserFactory implements IUserFactory { +// +// @Autowired +// private ProcessRoleService processRoleService; +// +// @Autowired +// private IProcessRoleFactory processRoleFactory; +// +// @Override +// public User getUser(IUser user, Locale locale) { +// User result = getUser(user); +// +// String defaultRoleId = processRoleService.defaultRole().getStringId(); +// String anonymousRoleId = processRoleService.anonymousRole().getStringId(); +// result.setProcessRoles(user.getProcessRoles().stream().map(processRole -> { +// if (processRole.getStringId().equals(defaultRoleId)) { +// return new ProcessRole(processRole, locale); +// } +// if (processRole.getStringId().equals(anonymousRoleId)) { +// return new ProcessRole(processRole, locale); +// } +// return processRoleFactory.getProcessRole(processRole, locale); +// }).collect(Collectors.toSet())); +// +// return result; +// } +// +// @Override +// public User getSmallUser(IUser user) { +// return User.createSmallUser(user); +// } +// +// protected User getUser(IUser user) { +// return User.createUser(user); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResource.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResource.java index e7e07e9b3a4..6454f9efdf3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResource.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResource.java @@ -1,30 +1,12 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - - -import com.netgrif.application.engine.auth.web.UserController; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; - -import java.util.ArrayList; - -public class UserResource extends EntityModel { - - public UserResource(User content, String selfRel) { - super(content, new ArrayList<>()); - buildLinks(selfRel); - } - - private void buildLinks(String selfRel) { - WebMvcLinkBuilder getLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .getUser(getContent().getId(), false, null)); - add(selfRel.equalsIgnoreCase("profile") ? getLink.withSelfRel() : getLink.withRel("profile")); - - WebMvcLinkBuilder roleLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .assignRolesToUser(getContent().getId(), null, null)); - add(selfRel.equalsIgnoreCase("assignProcessRole") ? roleLink.withSelfRel() : roleLink.withRel("assignProcessRole")); - - WebMvcLinkBuilder authorityLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(UserController.class) - .assignAuthorityToUser(getContent().getId(), null)); - add(selfRel.equalsIgnoreCase("assignRole") ? authorityLink.withSelfRel() : authorityLink.withRel("assignRole")); - } -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import org.springframework.hateoas.EntityModel; +//import java.util.ArrayList; +// +//public class UserResource extends EntityModel { +// +// public UserResource(User content, String selfRel) { +// super(content, new ArrayList<>()); +// } +// +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResourceAssembler.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResourceAssembler.java index 34200f26732..4aa4c4bab9d 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResourceAssembler.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UserResourceAssembler.java @@ -1,38 +1,38 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - -import com.netgrif.application.engine.objects.auth.domain.IUser; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.server.RepresentationModelAssembler; - -import java.util.Locale; - -public class UserResourceAssembler implements RepresentationModelAssembler { - - @Autowired - private IUserFactory userFactory; - - private Locale locale; - private String selfRel; - private boolean small; - - private boolean initialized = false; - - public UserResourceAssembler() { - } - - public void initialize(Locale locale, boolean small, String selfRel) { - this.locale = locale; - this.selfRel = selfRel; - this.small = small; - this.initialized = true; - } - - @Override - public UserResource toModel(IUser entity) { - if (!initialized) { - throw new IllegalStateException("You must initialize the UserResourceAssembler before calling the toResource method! To initialize the assembler call the initialize method."); - } - - return new UserResource(small ? userFactory.getSmallUser(entity) : userFactory.getUser(entity, locale), selfRel); - } -} +//package com.netgrif.application.engine.auth.web.responsebodies; +// +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.hateoas.server.RepresentationModelAssembler; +// +//import java.util.Locale; +// +//public class UserResourceAssembler implements RepresentationModelAssembler { +// +// @Autowired +// private IUserFactory userFactory; +// +// private Locale locale; +// private String selfRel; +// private boolean small; +// +// private boolean initialized = false; +// +// public UserResourceAssembler() { +// } +// +// public void initialize(Locale locale, boolean small, String selfRel) { +// this.locale = locale; +// this.selfRel = selfRel; +// this.small = small; +// this.initialized = true; +// } +// +// @Override +// public UserResource toModel(IUser entity) { +// if (!initialized) { +// throw new IllegalStateException("You must initialize the UserResourceAssembler before calling the toResource method! To initialize the assembler call the initialize method."); +// } +// +// return new UserResource(small ? userFactory.getSmallUser(entity) : userFactory.getUser(entity, locale), selfRel); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UsersResource.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UsersResource.java index 414096b619d..51f92df1a20 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UsersResource.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/web/responsebodies/UsersResource.java @@ -1,32 +1,32 @@ -package com.netgrif.application.engine.auth.web.responsebodies; - - -import com.netgrif.application.engine.auth.web.UserController; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.stream.Collectors; - -public class UsersResource extends CollectionModel { - - public static final String SELF_REL_SMALL = "small"; - public static final String SELF_REL_PROFILE = "profile"; - - public UsersResource(Collection content, String selfRel) { - super(content, new ArrayList<>(), null); - buildLinks(selfRel); - } - - public UsersResource(Collection content, String selfRel, boolean small) { - this(content.stream().map(user -> new UserResource(user, small ? SELF_REL_SMALL : SELF_REL_PROFILE)) - .collect(Collectors.toList()), selfRel); - } - - private void buildLinks(String selfRel) { - WebMvcLinkBuilder allLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder - .methodOn(UserController.class).getAll(false, null, null, null, null)); - add(selfRel.equalsIgnoreCase("all") ? allLink.withSelfRel() : allLink.withRel("all")); - } -} \ No newline at end of file +//package com.netgrif.application.engine.auth.web.responsebodies; +// +// +//import com.netgrif.application.engine.auth.web.UserController; +//import org.springframework.hateoas.CollectionModel; +//import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; +// +//import java.util.ArrayList; +//import java.util.Collection; +//import java.util.stream.Collectors; +// +//public class UsersResource extends CollectionModel { +// +// public static final String SELF_REL_SMALL = "small"; +// public static final String SELF_REL_PROFILE = "profile"; +// +// public UsersResource(Collection content, String selfRel) { +// super(content, new ArrayList<>(), null); +// buildLinks(selfRel); +// } +// +// public UsersResource(Collection content, String selfRel, boolean small) { +// this(content.stream().map(user -> new UserResource(user, small ? SELF_REL_SMALL : SELF_REL_PROFILE)) +// .collect(Collectors.toList()), selfRel); +// } +// +// private void buildLinks(String selfRel) { +// WebMvcLinkBuilder allLink = WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder +// .methodOn(UserController.class).getAll(false, null, null, null, null)); +// add(selfRel.equalsIgnoreCase("all") ? allLink.withSelfRel() : allLink.withRel("all")); +// } +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/PrototypesConfiguration.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/PrototypesConfiguration.java index 929cb6a3e3b..47423dd3a8b 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/PrototypesConfiguration.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/PrototypesConfiguration.java @@ -14,7 +14,6 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Scope; @Configuration diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/UserServiceConfiguration.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/UserServiceConfiguration.java index 45e922c23db..3990154fddf 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/UserServiceConfiguration.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/UserServiceConfiguration.java @@ -1,9 +1,7 @@ package com.netgrif.application.engine.configuration; -import com.netgrif.application.engine.auth.web.responsebodies.IUserFactory; -import com.netgrif.application.engine.auth.web.responsebodies.UserFactory; +import com.netgrif.application.engine.auth.service.UserFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -28,10 +26,10 @@ public class UserServiceConfiguration { // return new RegistrationService(); // } - @Bean - public IUserFactory userFactory() { - return new UserFactory(); - } +// @Bean +// public UserFactory userFactory() { +// return new UserFactoryImpl(); +// } // @Bean // @ConditionalOnMissingBean diff --git a/application-engine/src/main/java/com/netgrif/application/engine/elastic/web/ElasticController.java b/application-engine/src/main/java/com/netgrif/application/engine/elastic/web/ElasticController.java index 52419ab8cb7..6d6071b0eaa 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/elastic/web/ElasticController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/elastic/web/ElasticController.java @@ -4,7 +4,7 @@ import com.netgrif.application.engine.elastic.service.ReindexingTask; import com.netgrif.application.engine.workflow.service.CaseSearchService; import com.netgrif.application.engine.workflow.service.interfaces.IWorkflowService; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; import com.querydsl.core.types.Predicate; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/impersonation/web/ImpersonationController.java b/application-engine/src/main/java/com/netgrif/application/engine/impersonation/web/ImpersonationController.java index 49b670e36de..881588a4835 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/impersonation/web/ImpersonationController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/impersonation/web/ImpersonationController.java @@ -1,13 +1,12 @@ package com.netgrif.application.engine.impersonation.web; -import com.netgrif.application.engine.auth.web.responsebodies.User; +import com.netgrif.application.engine.auth.web.responsebodies.UserResource; import com.netgrif.application.engine.auth.web.responsebodies.UserResourceAssembler; import com.netgrif.application.engine.workflow.web.responsebodies.ResourceLinkAssembler; import com.netgrif.application.engine.objects.auth.domain.IUser; import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import com.netgrif.application.engine.auth.service.interfaces.IUserResourceHelperService; import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.auth.web.responsebodies.UserResource; import com.netgrif.application.engine.impersonation.exceptions.IllegalImpersonationAttemptException; import com.netgrif.application.engine.impersonation.exceptions.ImpersonatedUserHasSessionException; import com.netgrif.application.engine.impersonation.service.interfaces.IImpersonationAuthorizationService; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/mail/MailService.java b/application-engine/src/main/java/com/netgrif/application/engine/mail/MailService.java index 15da4a7855e..771b105949d 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/mail/MailService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/mail/MailService.java @@ -1,7 +1,7 @@ package com.netgrif.application.engine.mail; import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; -import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService; +import com.netgrif.application.engine.auth.service.UserRegistrationService; import com.netgrif.application.engine.configuration.properties.ServerAuthProperties; import com.netgrif.application.engine.mail.domain.MailDraft; import com.netgrif.application.engine.mail.interfaces.IMailService; @@ -62,7 +62,7 @@ public class MailService implements IMailService { protected Configuration configuration; @Autowired - private IRegistrationService registrationService; + private UserRegistrationService userRegistrationService; @Autowired private ServerAuthProperties serverAuthProperties; @@ -73,10 +73,10 @@ public void sendRegistrationEmail(RegisteredUser user) throws IOException, Templ Map model = new HashMap<>(); recipients.add(user.getEmail()); - model.put(TOKEN, registrationService.encodeToken(user.getEmail(), user.getToken())); + model.put(TOKEN, userRegistrationService.encodeToken(user.getEmail(), user.getToken())); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); model.put(VALIDITY, "" + serverAuthProperties.getTokenValidityPeriod()); - model.put(EXPIRATION, registrationService.generateExpirationDate().format(formatter)); + model.put(EXPIRATION, userRegistrationService.generateExpirationDate().format(formatter)); model.put(SERVER, getServerURL()); MailDraft mailDraft = MailDraft.builder(mailFrom, recipients).subject(EmailType.REGISTRATION.getSubject()) @@ -92,9 +92,9 @@ public void sendPasswordResetEmail(RegisteredUser user) throws IOException, Temp Map model = new HashMap<>(); model.put(NAME, user.getFirstName()); - model.put(TOKEN, registrationService.encodeToken(user.getEmail(), user.getToken())); + model.put(TOKEN, userRegistrationService.encodeToken(user.getEmail(), user.getToken())); model.put(VALIDITY, "" + serverAuthProperties.getTokenValidityPeriod()); - model.put(EXPIRATION, registrationService.generateExpirationDate().format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))); + model.put(EXPIRATION, userRegistrationService.generateExpirationDate().format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))); model.put(SERVER, getServerURL()); MailDraft mailDraft = MailDraft.builder(mailFrom, Collections.singletonList(user.getEmail())).subject(EmailType.PASSWORD_RESET.getSubject()) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/orgstructure/web/LdapController.java b/application-engine/src/main/java/com/netgrif/application/engine/orgstructure/web/LdapController.java index ad92fec5316..8e260b2b0a7 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/orgstructure/web/LdapController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/orgstructure/web/LdapController.java @@ -9,7 +9,7 @@ //import com.netgrif.application.engine.orgstructure.web.responsebodies.LdapGroupResponseBody; //import com.netgrif.application.engine.orgstructure.web.responsebodies.LdapGroupsResource; //import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; -//import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +//import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; //import io.swagger.v3.oas.annotations.Operation; //import io.swagger.v3.oas.annotations.responses.ApiResponse; //import io.swagger.v3.oas.annotations.responses.ApiResponses; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleFactoryImpl.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleFactoryImpl.java new file mode 100644 index 00000000000..f6a0e25da62 --- /dev/null +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleFactoryImpl.java @@ -0,0 +1,35 @@ +package com.netgrif.application.engine.petrinet.service; + +import com.netgrif.application.engine.adapter.spring.petrinet.dto.ProcessRole; +import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleFactory; +import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; +import com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService; +import org.bson.types.ObjectId; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Locale; + +@Service +public class ProcessRoleFactoryImpl implements ProcessRoleFactory { + + @Autowired + private IPetriNetService petriNetService; + + @Override + public ProcessRole getProcessRole(com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole role, Locale locale) { + /*if (!role.getStringId().equals(userProcessRole.getRoleId())) { + throw new IllegalArgumentException(String.format("ProcessRole StringId (%s) and UserProcessRole roleId (%s) must match!", role.getStringId(), userProcessRole.getRoleId())); + }*/ + if (!role.isGlobal()) { + ProcessRole result = new ProcessRole(role, locale); + PetriNet net = petriNetService.get(new ObjectId(role.getProcessId())); + result.setNetStringId(net.getStringId()); + result.setNetImportId(net.getImportId()); + result.setNetVersion(net.getVersion().toString()); + return result; + } + return new ProcessRole(role, locale); + } + +} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/interfaces/IProcessRoleService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/interfaces/IProcessRoleService.java index de940cea3b9..d5c1d2fca65 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/interfaces/IProcessRoleService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/interfaces/IProcessRoleService.java @@ -1,40 +1,40 @@ -package com.netgrif.application.engine.petrinet.service.interfaces; - -import com.netgrif.application.engine.objects.auth.domain.LoggedUser; -import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; -import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -public interface IProcessRoleService { - - List saveAll(Iterable entities); - - Set findAllByImportId(String importId); - - Set findAllByDefaultName(String name); - - ProcessRole findById(String id); - - Set findByIds(Set ids); - - ProcessRole findByImportId(String importId); - - void assignRolesToUser(String userId, Set roleIds, LoggedUser user); - - void assignRolesToUser(String userId, Set roleIds, LoggedUser user, Map params); - - List findAll(); - - Set findAllGlobalRoles(); - - List findAll(String netId); - - ProcessRole defaultRole(); - - ProcessRole anonymousRole(); - - void deleteRolesOfNet(PetriNet net, LoggedUser loggedUser); -} +//package com.netgrif.application.engine.petrinet.service.interfaces; +// +//import com.netgrif.application.engine.objects.auth.domain.LoggedUser; +//import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; +//import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; +// +//import java.util.List; +//import java.util.Map; +//import java.util.Set; +// +//public interface IProcessRoleService { +// +// List saveAll(Iterable entities); +// +// Set findAllByImportId(String importId); +// +// Set findAllByDefaultName(String name); +// +// ProcessRole findById(String id); +// +// Set findByIds(Set ids); +// +// ProcessRole findByImportId(String importId); +// +// void assignRolesToUser(String userId, Set roleIds, LoggedUser user); +// +// void assignRolesToUser(String userId, Set roleIds, LoggedUser user, Map params); +// +// List findAll(); +// +// Set findAllGlobalRoles(); +// +// List findAll(String netId); +// +// ProcessRole defaultRole(); +// +// ProcessRole anonymousRole(); +// +// void deleteRolesOfNet(PetriNet net, LoggedUser loggedUser); +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetController.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetController.java index 0fbdd99cd05..0afa77d848c 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetController.java @@ -21,7 +21,7 @@ import com.netgrif.application.engine.objects.workflow.domain.eventoutcomes.petrinetoutcomes.ImportPetriNetEventOutcome; import com.netgrif.application.engine.workflow.domain.eventoutcomes.response.EventOutcomeWithMessage; import com.netgrif.application.engine.workflow.domain.eventoutcomes.response.EventOutcomeWithMessageResource; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetControllerAdvice.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetControllerAdvice.java index 93a394a5210..be53679c105 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetControllerAdvice.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/PetriNetControllerAdvice.java @@ -1,7 +1,7 @@ package com.netgrif.application.engine.petrinet.web; import com.netgrif.application.engine.objects.petrinet.domain.throwable.MissingPetriNetMetaDataException; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/responsebodies/PetriNetReferenceWithMessage.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/responsebodies/PetriNetReferenceWithMessage.java index 298a210f2f9..8731fb663a9 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/responsebodies/PetriNetReferenceWithMessage.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/web/responsebodies/PetriNetReferenceWithMessage.java @@ -1,7 +1,7 @@ package com.netgrif.application.engine.petrinet.web.responsebodies; import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; -import com.netgrif.application.engine.workflow.web.responsebodies.ResponseMessage; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.ResponseMessage; import lombok.Data; import java.util.Locale; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/Preferences.java b/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/Preferences.java index 506ce2da146..27f47d5ff58 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/Preferences.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/Preferences.java @@ -1,57 +1,57 @@ -package com.netgrif.application.engine.settings.domain; - -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.Field; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * User application preferences. Contains: - *
    - *
  • locale
  • - *
  • task filters for each task view
  • - *
  • case filters for each case view
  • - *
  • case view flex fields
  • - *
- */ -@Document -@Data -@NoArgsConstructor -public class Preferences implements Serializable { - - @Id - private String userId; - - private String locale; - - private int drawerWidth; - - /** - * taskViewId: [filterIds] - */ - @Field - private Map> taskFilters = new HashMap<>(); - - /** - * caseViewId: [filterIds] - */ - @Field - private Map> caseFilters = new HashMap<>(); - - /** - * caseViewId: [headersIds] - */ - @Field - private Map> headers = new HashMap<>(); - - public Preferences(String userId) { - this.userId = userId; - this.drawerWidth = 200; - } -} \ No newline at end of file +//package com.netgrif.application.engine.settings.domain; +// +//import lombok.Data; +//import lombok.NoArgsConstructor; +//import org.springframework.data.annotation.Id; +//import org.springframework.data.mongodb.core.mapping.Document; +//import org.springframework.data.mongodb.core.mapping.Field; +// +//import java.io.Serializable; +//import java.util.HashMap; +//import java.util.List; +//import java.util.Map; +// +///** +// * User application preferences. Contains: +// *
    +// *
  • locale
  • +// *
  • task filters for each task view
  • +// *
  • case filters for each case view
  • +// *
  • case view flex fields
  • +// *
+// */ +//@Document +//@Data +//@NoArgsConstructor +//public class Preferences implements Serializable { +// +// @Id +// private String userId; +// +// private String locale; +// +// private int drawerWidth; +// +// /** +// * taskViewId: [filterIds] +// */ +// @Field +// private Map> taskFilters = new HashMap<>(); +// +// /** +// * caseViewId: [filterIds] +// */ +// @Field +// private Map> caseFilters = new HashMap<>(); +// +// /** +// * caseViewId: [headersIds] +// */ +// @Field +// private Map> headers = new HashMap<>(); +// +// public Preferences(String userId) { +// this.userId = userId; +// this.drawerWidth = 200; +// } +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/PreferencesRepository.java b/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/PreferencesRepository.java index af89d3ba265..d43fd7123fd 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/PreferencesRepository.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/settings/domain/PreferencesRepository.java @@ -1,10 +1,10 @@ -package com.netgrif.application.engine.settings.domain; - -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface PreferencesRepository extends MongoRepository { - - Preferences findByUserId(String id); -} \ No newline at end of file +//package com.netgrif.application.engine.settings.domain; +// +//import org.springframework.data.mongodb.repository.MongoRepository; +//import org.springframework.stereotype.Repository; +// +//@Repository +//public interface PreferencesRepository extends MongoRepository { +// +// Preferences findByUserId(String id); +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/settings/service/IPreferencesService.java b/application-engine/src/main/java/com/netgrif/application/engine/settings/service/IPreferencesService.java index 1d90248ddfd..ff3ffa0cf67 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/settings/service/IPreferencesService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/settings/service/IPreferencesService.java @@ -1,10 +1,10 @@ -package com.netgrif.application.engine.settings.service; - -import com.netgrif.application.engine.settings.domain.Preferences; - -public interface IPreferencesService { - - Preferences get(String userId); - - Preferences save(Preferences preferences); -} \ No newline at end of file +//package com.netgrif.application.engine.settings.service; +// +//import com.netgrif.application.engine.settings.domain.Preferences; +// +//public interface IPreferencesService { +// +// Preferences get(String userId); +// +// Preferences save(Preferences preferences); +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/settings/service/PreferencesService.java b/application-engine/src/main/java/com/netgrif/application/engine/settings/service/PreferencesService.java index 3d2f8e7dbc2..fe41cf4b1d2 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/settings/service/PreferencesService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/settings/service/PreferencesService.java @@ -1,23 +1,23 @@ -package com.netgrif.application.engine.settings.service; - -import com.netgrif.application.engine.settings.domain.Preferences; -import com.netgrif.application.engine.settings.domain.PreferencesRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class PreferencesService implements IPreferencesService { - - @Autowired - private PreferencesRepository repository; - - @Override - public Preferences get(String userId) { - return repository.findByUserId(userId); - } - - @Override - public Preferences save(Preferences preferences) { - return repository.save(preferences); - } -} \ No newline at end of file +//package com.netgrif.application.engine.settings.service; +// +//import com.netgrif.application.engine.settings.domain.Preferences; +//import com.netgrif.application.engine.settings.domain.PreferencesRepository; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +// +//@Service +//public class PreferencesService implements IPreferencesService { +// +// @Autowired +// private PreferencesRepository repository; +// +// @Override +// public Preferences get(String userId) { +// return repository.findByUserId(userId); +// } +// +// @Override +// public Preferences save(Preferences preferences) { +// return repository.save(preferences); +// } +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/settings/web/PreferencesResource.java b/application-engine/src/main/java/com/netgrif/application/engine/settings/web/PreferencesResource.java index 02722e8e271..7e5dac40353 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/settings/web/PreferencesResource.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/settings/web/PreferencesResource.java @@ -1,13 +1,13 @@ -package com.netgrif.application.engine.settings.web; - -import com.netgrif.application.engine.settings.domain.Preferences; -import org.springframework.hateoas.EntityModel; - -import java.util.ArrayList; - -public class PreferencesResource extends EntityModel { - - public PreferencesResource(Preferences content) { - super(content, new ArrayList<>()); - } -} \ No newline at end of file +//package com.netgrif.application.engine.settings.web; +// +//import com.netgrif.application.engine.settings.domain.Preferences; +//import org.springframework.hateoas.EntityModel; +// +//import java.util.ArrayList; +// +//public class PreferencesResource extends EntityModel { +// +// public PreferencesResource(Preferences content) { +// super(content, new ArrayList<>()); +// } +//} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/eventoutcomes/response/EventOutcomeWithMessage.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/eventoutcomes/response/EventOutcomeWithMessage.java index 00fbc067b6f..e77e285669b 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/eventoutcomes/response/EventOutcomeWithMessage.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/domain/eventoutcomes/response/EventOutcomeWithMessage.java @@ -1,6 +1,6 @@ package com.netgrif.application.engine.workflow.domain.eventoutcomes.response; -import com.netgrif.application.engine.workflow.web.responsebodies.ResponseMessage; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.ResponseMessage; import com.netgrif.application.engine.workflow.web.responsebodies.eventoutcomes.base.LocalisedEventOutcome; import lombok.Data; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/FilterController.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/FilterController.java index 2a2aeaa6e2b..d7c1be60ff0 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/FilterController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/FilterController.java @@ -8,7 +8,7 @@ //import com.netgrif.application.engine.workflow.web.requestbodies.CreateFilterBody; //import com.netgrif.application.engine.workflow.web.responsebodies.FilterResourceAssembler; //import com.netgrif.application.engine.workflow.web.responsebodies.LocalisedFilterResource; -//import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +//import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; //import io.swagger.v3.oas.annotations.Operation; //import io.swagger.v3.oas.annotations.security.SecurityRequirement; //import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/TaskControllerAdvice.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/TaskControllerAdvice.java index 0b55b8f0d2a..37d99457074 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/TaskControllerAdvice.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/TaskControllerAdvice.java @@ -1,7 +1,7 @@ package com.netgrif.application.engine.workflow.web; import com.netgrif.application.engine.petrinet.domain.throwable.IllegalTaskStateException; -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/WorkflowController.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/WorkflowController.java index 61a9b9c9e40..a2364aa4b1e 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/WorkflowController.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/WorkflowController.java @@ -1,5 +1,6 @@ package com.netgrif.application.engine.workflow.web; +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource; import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import com.netgrif.application.engine.elastic.service.interfaces.IElasticCaseService; import com.netgrif.application.engine.elastic.web.requestbodies.singleaslist.SingleCaseSearchRequestAsList; @@ -54,6 +55,9 @@ import java.util.Locale; import java.util.Map; +import static com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource.errorMessage; +import static com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource.successMessage; + @RestController() @RequestMapping("/api/workflow") @ConditionalOnProperty( @@ -183,10 +187,10 @@ public MessageResource reloadTasks(@PathVariable("id") String caseId) { Case aCase = workflowService.findOne(caseId); taskService.reloadTasks(aCase); - return MessageResource.successMessage("Task reloaded in case [" + caseId + "]"); + return successMessage("Task reloaded in case [" + caseId + "]"); } catch (Exception e) { log.error("Reloading tasks of case [" + caseId + "] failed:", e); - return MessageResource.errorMessage("Reloading tasks in case " + caseId + " has failed!"); + return errorMessage("Reloading tasks in case " + caseId + " has failed!"); } } diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/MessageResource.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/MessageResource.java index 57aff13da03..f8a9a67721b 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/MessageResource.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/MessageResource.java @@ -1,30 +1,30 @@ -package com.netgrif.application.engine.workflow.web.responsebodies; - - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; - -import java.util.ArrayList; - -public class MessageResource extends EntityModel { - - public MessageResource(ResponseMessage content) { - super(content, new ArrayList()); - } - - public static MessageResource successMessage(String msg) { - return new MessageResource(ResponseMessage.createSuccessMessage(msg)); - } - - public static MessageResource successMessage(String msg, String data) { - return new MessageResource(ResponseMessage.createSuccessMessageWithData(msg, data)); - } - - public static MessageResource errorMessage(String msg) { - return new MessageResource(ResponseMessage.createErrorMessage(msg)); - } - - public static MessageResource errorMessage(String msg, String data) { - return new MessageResource(ResponseMessage.createErrorMessageWithData(msg, data)); - } -} +//package com.netgrif.application.engine.workflow.web.responsebodies; +// +// +//import org.springframework.hateoas.EntityModel; +//import org.springframework.hateoas.Link; +// +//import java.util.ArrayList; +// +//public class MessageResource extends EntityModel { +// +// public MessageResource(ResponseMessage content) { +// super(content, new ArrayList()); +// } +// +// public static MessageResource successMessage(String msg) { +// return new MessageResource(ResponseMessage.createSuccessMessage(msg)); +// } +// +// public static MessageResource successMessage(String msg, String data) { +// return new MessageResource(ResponseMessage.createSuccessMessageWithData(msg, data)); +// } +// +// public static MessageResource errorMessage(String msg) { +// return new MessageResource(ResponseMessage.createErrorMessage(msg)); +// } +// +// public static MessageResource errorMessage(String msg, String data) { +// return new MessageResource(ResponseMessage.createErrorMessageWithData(msg, data)); +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/ResponseMessage.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/ResponseMessage.java index fac837972a7..f045ac2d0db 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/ResponseMessage.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/ResponseMessage.java @@ -1,60 +1,60 @@ -package com.netgrif.application.engine.workflow.web.responsebodies; - - -public class ResponseMessage { - - private String success; - private String error; - private String data; - - public static ResponseMessage createSuccessMessage(String msg) { - ResponseMessage resMsg = new ResponseMessage(); - resMsg.setSuccess(msg); - return resMsg; - } - - public static ResponseMessage createSuccessMessageWithData(String msg, String data) { - ResponseMessage resMsg = new ResponseMessage(); - resMsg.setSuccess(msg); - resMsg.setData(data); - return resMsg; - } - - public static ResponseMessage createErrorMessage(String msg) { - ResponseMessage resMsg = new ResponseMessage(); - resMsg.setError(msg); - return resMsg; - } - - - public static ResponseMessage createErrorMessageWithData(String msg, String data) { - ResponseMessage resMsg = new ResponseMessage(); - resMsg.setError(msg); - resMsg.setData(data); - return resMsg; - } - - public String getSuccess() { - return success; - } - - public void setSuccess(String success) { - this.success = success; - } - - public String getError() { - return error; - } - - public void setError(String error) { - this.error = error; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} +//package com.netgrif.application.engine.workflow.web.responsebodies; +// +// +//public class ResponseMessage { +// +// private String success; +// private String error; +// private String data; +// +// public static ResponseMessage createSuccessMessage(String msg) { +// ResponseMessage resMsg = new ResponseMessage(); +// resMsg.setSuccess(msg); +// return resMsg; +// } +// +// public static ResponseMessage createSuccessMessageWithData(String msg, String data) { +// ResponseMessage resMsg = new ResponseMessage(); +// resMsg.setSuccess(msg); +// resMsg.setData(data); +// return resMsg; +// } +// +// public static ResponseMessage createErrorMessage(String msg) { +// ResponseMessage resMsg = new ResponseMessage(); +// resMsg.setError(msg); +// return resMsg; +// } +// +// +// public static ResponseMessage createErrorMessageWithData(String msg, String data) { +// ResponseMessage resMsg = new ResponseMessage(); +// resMsg.setError(msg); +// resMsg.setData(data); +// return resMsg; +// } +// +// public String getSuccess() { +// return success; +// } +// +// public void setSuccess(String success) { +// this.success = success; +// } +// +// public String getError() { +// return error; +// } +// +// public void setError(String error) { +// this.error = error; +// } +// +// public String getData() { +// return data; +// } +// +// public void setData(String data) { +// this.data = data; +// } +//} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java index cf4d877a804..18e29840a83 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/responsebodies/Task.java @@ -8,7 +8,6 @@ import com.netgrif.application.engine.objects.petrinet.domain.layout.TaskLayout; import com.netgrif.application.engine.objects.workflow.domain.ProcessResourceId; import lombok.Data; -import org.bson.types.ObjectId; import java.time.LocalDateTime; import java.util.List; diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/action/ActionDelegateTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/action/ActionDelegateTest.groovy index 43d1906842d..101001871dd 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/action/ActionDelegateTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/action/ActionDelegateTest.groovy @@ -10,7 +10,7 @@ import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest import com.netgrif.application.engine.configuration.PublicViewProperties import com.netgrif.application.engine.petrinet.domain.dataset.logic.action.ActionDelegate import com.netgrif.application.engine.workflow.service.interfaces.IFilterImportExportService -import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource +import com.netgrif.application.engine.adapter.spring.workflow.web.responsebodies.MessageResource import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/AuthenticationControllerTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/AuthenticationControllerTest.groovy index cc437f9fda8..55fdf33b2ba 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/AuthenticationControllerTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/AuthenticationControllerTest.groovy @@ -1,144 +1,144 @@ -package com.netgrif.application.engine.auth - -import com.icegreen.greenmail.configuration.GreenMailConfiguration -import com.icegreen.greenmail.util.GreenMail -import com.icegreen.greenmail.util.ServerSetup -import com.netgrif.application.engine.auth.service.AuthorityService -import com.netgrif.application.engine.auth.service.UserService -import com.netgrif.application.engine.TestHelper -import com.netgrif.application.engine.objects.auth.domain.Authority -import com.netgrif.application.engine.objects.auth.domain.IUser; -import com.netgrif.application.engine.objects.auth.domain.User -import com.netgrif.application.engine.auth.web.AuthenticationController -import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest -import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest -import com.netgrif.application.engine.importer.service.Importer -import com.netgrif.application.engine.mail.EmailType -import com.netgrif.application.engine.objects.petrinet.domain.VersionType -import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole -import com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService -import com.netgrif.application.engine.startup.ImportHelper -import com.netgrif.application.engine.startup.runner.SuperCreatorRunner -import org.jsoup.Jsoup -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Disabled -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.security.test.context.support.WithMockUser -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.junit.jupiter.SpringExtension - -import jakarta.mail.BodyPart -import jakarta.mail.MessagingException -import jakarta.mail.internet.MimeMessage -import jakarta.mail.internet.MimeMultipart - -@ExtendWith(SpringExtension.class) -@ActiveProfiles(["test"]) -@SpringBootTest -@Disabled("ClassCast") -class AuthenticationControllerTest { - - private static final String EMAIL = "tets@test.com" - private static final String NAME = "name" - private static final String SURNAME = "surname" - private static final String PASSWORD = "password" - private static final String CASE_NAME = "Test case" - private static final String CASE_INITIALS = "TC" - public static final String GROUP_NAME = "Insurance Company" - - @Autowired - private AuthenticationController controller - - @Autowired - private Importer importer - - @Autowired - private ImportHelper importHelper - - @Autowired - private UserService userService - - @Autowired - private AuthorityService authorityService - - @Autowired - private IPetriNetService petriNetService - - @Autowired - private TestHelper testHelper - - @Autowired - private SuperCreatorRunner superCreator - - private GreenMail smtpServer - - private Map processRoles - - @BeforeEach - void before() { - testHelper.truncateDbs() - smtpServer = new GreenMail(new ServerSetup(2525, null, "smtp")).withConfiguration(GreenMailConfiguration.aConfig().withDisabledAuthentication()) - smtpServer.start() - - def net = petriNetService.importPetriNet(new FileInputStream("src/test/resources/insurance_portal_demo_test.xml"), VersionType.MAJOR, superCreator.getLoggedSuper()) - assert net.getNet() != null - if (authorityService.findAll().size() == 0) - importHelper.createAuthority(Authority.user) -// group = importHelper.createGroup(GROUP_NAME) -// processRoles = importHelper.getProcessRoles(net.getNet()) - } - - @Test - @WithMockUser(roles = "ADMIN") - void inviteTest() { - controller.invite(new NewUserRequest(email: EMAIL, groups: [], processRoles: []), null) - - MimeMessage[] messages = smtpServer.getReceivedMessages() - assertMessageReceived(messages) - - String content = getTextFromMimeMultipart(messages[0].content as MimeMultipart) - String token = content.substring(content.indexOf("/signup/") + "/signup/".length(), content.lastIndexOf(" This is")) - - controller.signup(new RegistrationRequest(token: token, name: NAME, lastName: SURNAME, password: PASSWORD)) - - IUser user = userService.findByEmail(EMAIL, null) - assert user - } - - @AfterEach - void after() { - smtpServer.stop() - } - - @SuppressWarnings("GrMethodMayBeStatic") - private void assertMessageReceived(MimeMessage[] messages) throws MessagingException { - assert messages.length > 0 - - MimeMessage message = messages[0] - - assert "noreply@netgrif.com".equalsIgnoreCase(message.getFrom()[0].toString()) - assert EmailType.REGISTRATION.getSubject().equalsIgnoreCase(message.getSubject()) - } - - private String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException, IOException { - String result = "" - int count = mimeMultipart.getCount() - for (int i = 0; i < count; i++) { - BodyPart bodyPart = mimeMultipart.getBodyPart(i) - if (bodyPart.isMimeType("text/plain")) { - result = result + "\n" + bodyPart.getContent() - break // without break same text appears twice in my tests - } else if (bodyPart.isMimeType("text/html")) { - String html = (String) bodyPart.getContent() - result = result + "\n" + Jsoup.parse(html).text() - } else if (bodyPart.getContent() instanceof MimeMultipart) { - result = result + getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent()) - } - } - return result - } -} +//package com.netgrif.application.engine.auth +// +//import com.icegreen.greenmail.configuration.GreenMailConfiguration +//import com.icegreen.greenmail.util.GreenMail +//import com.icegreen.greenmail.util.ServerSetup +//import com.netgrif.application.engine.auth.service.AuthorityService +//import com.netgrif.application.engine.auth.service.UserService +//import com.netgrif.application.engine.TestHelper +//import com.netgrif.application.engine.objects.auth.domain.Authority +//import com.netgrif.application.engine.objects.auth.domain.IUser; +//import com.netgrif.application.engine.objects.auth.domain.User +//import com.netgrif.application.engine.auth.web.AuthenticationController +//import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest +//import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest +//import com.netgrif.application.engine.importer.service.Importer +//import com.netgrif.application.engine.mail.EmailType +//import com.netgrif.application.engine.objects.petrinet.domain.VersionType +//import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole +//import com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService +//import com.netgrif.application.engine.startup.ImportHelper +//import com.netgrif.application.engine.startup.runner.SuperCreatorRunner +//import org.jsoup.Jsoup +//import org.junit.jupiter.api.AfterEach +//import org.junit.jupiter.api.BeforeEach +//import org.junit.jupiter.api.Disabled +//import org.junit.jupiter.api.Test +//import org.junit.jupiter.api.extension.ExtendWith +//import org.springframework.beans.factory.annotation.Autowired +//import org.springframework.boot.test.context.SpringBootTest +//import org.springframework.security.test.context.support.WithMockUser +//import org.springframework.test.context.ActiveProfiles +//import org.springframework.test.context.junit.jupiter.SpringExtension +// +//import jakarta.mail.BodyPart +//import jakarta.mail.MessagingException +//import jakarta.mail.internet.MimeMessage +//import jakarta.mail.internet.MimeMultipart +// +//@ExtendWith(SpringExtension.class) +//@ActiveProfiles(["test"]) +//@SpringBootTest +//@Disabled("ClassCast") +//class AuthenticationControllerTest { +// +// private static final String EMAIL = "tets@test.com" +// private static final String NAME = "name" +// private static final String SURNAME = "surname" +// private static final String PASSWORD = "password" +// private static final String CASE_NAME = "Test case" +// private static final String CASE_INITIALS = "TC" +// public static final String GROUP_NAME = "Insurance Company" +// +// @Autowired +// private AuthenticationController controller +// +// @Autowired +// private Importer importer +// +// @Autowired +// private ImportHelper importHelper +// +// @Autowired +// private UserService userService +// +// @Autowired +// private AuthorityService authorityService +// +// @Autowired +// private IPetriNetService petriNetService +// +// @Autowired +// private TestHelper testHelper +// +// @Autowired +// private SuperCreatorRunner superCreator +// +// private GreenMail smtpServer +// +// private Map processRoles +// +// @BeforeEach +// void before() { +// testHelper.truncateDbs() +// smtpServer = new GreenMail(new ServerSetup(2525, null, "smtp")).withConfiguration(GreenMailConfiguration.aConfig().withDisabledAuthentication()) +// smtpServer.start() +// +// def net = petriNetService.importPetriNet(new FileInputStream("src/test/resources/insurance_portal_demo_test.xml"), VersionType.MAJOR, superCreator.getLoggedSuper()) +// assert net.getNet() != null +// if (authorityService.findAll().size() == 0) +// importHelper.createAuthority(Authority.user) +//// group = importHelper.createGroup(GROUP_NAME) +//// processRoles = importHelper.getProcessRoles(net.getNet()) +// } +// +// @Test +// @WithMockUser(roles = "ADMIN") +// void inviteTest() { +// controller.invite(new NewUserRequest(email: EMAIL, groups: [], processRoles: []), null) +// +// MimeMessage[] messages = smtpServer.getReceivedMessages() +// assertMessageReceived(messages) +// +// String content = getTextFromMimeMultipart(messages[0].content as MimeMultipart) +// String token = content.substring(content.indexOf("/signup/") + "/signup/".length(), content.lastIndexOf(" This is")) +// +// controller.signup(new RegistrationRequest(token: token, name: NAME, lastName: SURNAME, password: PASSWORD)) +// +// IUser user = userService.findByEmail(EMAIL, null) +// assert user +// } +// +// @AfterEach +// void after() { +// smtpServer.stop() +// } +// +// @SuppressWarnings("GrMethodMayBeStatic") +// private void assertMessageReceived(MimeMessage[] messages) throws MessagingException { +// assert messages.length > 0 +// +// MimeMessage message = messages[0] +// +// assert "noreply@netgrif.com".equalsIgnoreCase(message.getFrom()[0].toString()) +// assert EmailType.REGISTRATION.getSubject().equalsIgnoreCase(message.getSubject()) +// } +// +// private String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException, IOException { +// String result = "" +// int count = mimeMultipart.getCount() +// for (int i = 0; i < count; i++) { +// BodyPart bodyPart = mimeMultipart.getBodyPart(i) +// if (bodyPart.isMimeType("text/plain")) { +// result = result + "\n" + bodyPart.getContent() +// break // without break same text appears twice in my tests +// } else if (bodyPart.isMimeType("text/html")) { +// String html = (String) bodyPart.getContent() +// result = result + "\n" + Jsoup.parse(html).text() +// } else if (bodyPart.getContent() instanceof MimeMultipart) { +// result = result + getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent()) +// } +// } +// return result +// } +//} diff --git a/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java index f7268677cef..58ecfb8ac6b 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java @@ -1,9 +1,7 @@ package com.netgrif.application.engine.auth.service; -import com.netgrif.application.engine.auth.service.UserService; import com.netgrif.application.engine.objects.auth.domain.User; import com.netgrif.application.engine.objects.auth.domain.enums.UserState; -import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -24,7 +22,7 @@ public class TokenServiceTest { private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); @Autowired - IRegistrationService service; + UserRegistrationService service; @Autowired UserService userService; diff --git a/application-engine/src/test/java/com/netgrif/application/engine/auth/service/RegistrationServiceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/auth/service/UserRegistrationServiceTest.java similarity index 91% rename from application-engine/src/test/java/com/netgrif/application/engine/auth/service/RegistrationServiceTest.java rename to application-engine/src/test/java/com/netgrif/application/engine/auth/service/UserRegistrationServiceTest.java index c63d4e4c8cd..67436801f35 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/auth/service/RegistrationServiceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/auth/service/UserRegistrationServiceTest.java @@ -1,11 +1,10 @@ package com.netgrif.application.engine.auth.service; -import com.netgrif.application.engine.auth.service.UserService; import com.netgrif.application.engine.TestHelper; +import com.netgrif.application.engine.auth.throwable.InvalidUserTokenException; import com.netgrif.application.engine.objects.auth.domain.RegisteredUser; import com.netgrif.application.engine.objects.auth.domain.User; -import com.netgrif.application.engine.auth.service.interfaces.IRegistrationService; import com.netgrif.application.engine.auth.web.requestbodies.NewUserRequest; import com.netgrif.application.engine.auth.web.requestbodies.RegistrationRequest; import org.junit.jupiter.api.AfterEach; @@ -24,10 +23,10 @@ @ExtendWith(SpringExtension.class) @ActiveProfiles({"test"}) @SpringBootTest -public class RegistrationServiceTest { +public class UserRegistrationServiceTest { @Autowired - IRegistrationService service; + UserRegistrationService service; @Autowired UserService userService; diff --git a/docs/javadoc/com/netgrif/application/engine/auth/service/RegistrationService.html b/docs/javadoc/com/netgrif/application/engine/auth/service/RegistrationService.html index bf91f685710..00c14959ae2 100644 --- a/docs/javadoc/com/netgrif/application/engine/auth/service/RegistrationService.html +++ b/docs/javadoc/com/netgrif/application/engine/auth/service/RegistrationService.html @@ -125,7 +125,7 @@

Class RegistrationServicejava.lang.Object
    • -
    • com.netgrif.application.engine.auth.service.RegistrationService
    • +
    • com.netgrif.application.engine.auth.service.UserRegistrationService
  • diff --git a/docs/javadoc/com/netgrif/application/engine/auth/service/UserService.html b/docs/javadoc/com/netgrif/application/engine/auth/service/UserService.html index fa27767c7fd..f91e57d43e6 100644 --- a/docs/javadoc/com/netgrif/application/engine/auth/service/UserService.html +++ b/docs/javadoc/com/netgrif/application/engine/auth/service/UserService.html @@ -190,7 +190,7 @@

    Field Summary

    protected IRegistrationService -registrationService +userRegistrationService   @@ -485,14 +485,14 @@

    groupService

    protected INextGroupService groupService - + diff --git a/docs/javadoc/com/netgrif/application/engine/auth/service/class-use/RegistrationService.html b/docs/javadoc/com/netgrif/application/engine/auth/service/class-use/RegistrationService.html index cc60fb66573..32e81ec9391 100644 --- a/docs/javadoc/com/netgrif/application/engine/auth/service/class-use/RegistrationService.html +++ b/docs/javadoc/com/netgrif/application/engine/auth/service/class-use/RegistrationService.html @@ -3,7 +3,7 @@ -Uses of Class com.netgrif.application.engine.auth.service.RegistrationService (NETGRIF Application Engine 6.4.0 API) +Uses of Class com.netgrif.application.engine.auth.service.UserRegistrationService (NETGRIF Application Engine 6.4.0 API) @@ -22,7 +22,7 @@