Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public void resetExpiredToken() {
user.setToken(null);
user.setExpirationDate(null);
});
userService.saveUsers(users.getContent().stream().map(AbstractUser.class::cast).toList());
userService.saveUsers(users.getContent().stream().toList());

pageable = pageable.next();
} while (users.hasNext());
Expand All @@ -86,7 +86,7 @@ public void resetExpiredToken() {
}

@Override
public void changePassword(AbstractUser user, String newPassword) {
public void changePassword(User user, String newPassword) {
user.setPassword(newPassword);
encodeUserPassword(user);
userService.saveUser(user, null);
Expand All @@ -98,7 +98,7 @@ public boolean verifyToken(String token) {
try {
log.info("Verifying token:" + token);
String[] tokenParts = decodeToken(token);
User user = (User) userService.findByEmail(tokenParts[0], null);
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());
Expand All @@ -107,7 +107,7 @@ public boolean verifyToken(String token) {
}

@Override
public void encodeUserPassword(AbstractUser user) {
public void encodeUserPassword(User user) {
String pass = user.getPassword();
if (pass == null) {
throw new IllegalArgumentException("User has no password");
Expand All @@ -116,14 +116,15 @@ public void encodeUserPassword(AbstractUser user) {
}

@Override
public boolean stringMatchesUserPassword(AbstractUser user, String passwordToCompare) {
return passwordEncoder.matches(passwordToCompare, user.getPassword());
public boolean stringMatchesUserPassword(User user, String passwordToCompare) {
String encoded = user.getPassword();
return encoded != null && passwordEncoder.matches(passwordToCompare, encoded);
}

@Override
@Transactional
public AbstractUser createNewUser(NewUserRequest newUser) {
User user = (User) userService.findByEmail(newUser.email, null);
public User createNewUser(NewUserRequest newUser) {
User user = userService.findByEmail(newUser.email, null);
if (user != null) {
if (user.isActive()) {
return null;
Expand Down Expand Up @@ -157,10 +158,10 @@ public AbstractUser createNewUser(NewUserRequest newUser) {
}

@Override
public AbstractUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException {
public User registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException {
String email = decodeToken(registrationRequest.token)[0];
log.info("Registering user " + email);
User user = (User) userService.findByEmail(email, null);
User user = userService.findByEmail(email, null);
if (user == null) {
return null;
}
Expand All @@ -173,11 +174,11 @@ public AbstractUser registerUser(RegistrationRequest registrationRequest) throws
user.setExpirationDate(null);
user.setState(UserState.ACTIVE);

return (AbstractUser) userService.saveUser(user, null);
return userService.saveUser(user, null);
}

@Override
public AbstractUser resetPassword(String email) {
public User resetPassword(String email) {
log.info("Resetting password of " + email);
User user = (User) userService.findByEmail(email, null);
if (user == null || !user.isActive()) {
Expand All @@ -190,13 +191,13 @@ public AbstractUser resetPassword(String email) {
user.setPassword(null);
user.setToken(generateTokenKey());
user.setExpirationDate(generateExpirationDate());
return (AbstractUser) userService.saveUser(user, null);
return userService.saveUser(user, null);
}

@Override
public AbstractUser recover(String email, String newPassword) {
public User recover(String email, String newPassword) {
log.info("Recovering user " + email);
User user = (User) userService.findByEmail(email, null);
User user = userService.findByEmail(email, null);
if (user == null) {
return null;
}
Expand All @@ -206,7 +207,7 @@ public AbstractUser recover(String email, String newPassword) {
user.setToken(null);
user.setExpirationDate(null);

return (AbstractUser) userService.saveUser(user, null);
return userService.saveUser(user, null);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
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 com.netgrif.application.engine.objects.auth.domain.AbstractUser;
import com.netgrif.application.engine.objects.auth.domain.User;

import java.time.LocalDateTime;

Expand All @@ -13,21 +13,21 @@ public interface IRegistrationService {

void resetExpiredToken();

void changePassword(AbstractUser user, String newPassword);
void changePassword(User user, String newPassword);

void encodeUserPassword(AbstractUser user);
void encodeUserPassword(User user);

boolean stringMatchesUserPassword(AbstractUser user, String passwordToCompare);
boolean stringMatchesUserPassword(User user, String passwordToCompare);

boolean verifyToken(String token);

AbstractUser createNewUser(NewUserRequest newUser);
User createNewUser(NewUserRequest newUser);

AbstractUser registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException;
User registerUser(RegistrationRequest registrationRequest) throws InvalidUserTokenException;

AbstractUser resetPassword(String email);
User resetPassword(String email);

AbstractUser recover(String email, String newPassword);
User recover(String email, String newPassword);

String generateTokenKey();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.netgrif.application.engine.objects.auth.domain.AbstractUser;
import com.netgrif.application.engine.configuration.properties.SecurityConfigurationProperties;
import com.netgrif.application.engine.objects.auth.domain.User;
import com.netgrif.application.engine.workflow.web.responsebodies.MessageResource;
import com.netgrif.application.engine.objects.auth.domain.LoggedUser;
import com.netgrif.application.engine.auth.service.InvalidUserTokenException;
Expand Down Expand Up @@ -192,7 +193,7 @@ public MessageResource recoverAccount(@RequestBody RegistrationRequest request)
@PostMapping(value = "/changePassword", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaTypes.HAL_JSON_VALUE)
public MessageResource changePassword(Authentication auth, @RequestBody ChangePasswordRequest request) {
try {
Optional<AbstractUser> user = userService.findUserByUsername(request.login, null);
Optional<User> user = userService.findUserByUsername(request.login, null);
if (user.isEmpty() || request.password == null || request.newPassword == null) {
return MessageResource.errorMessage("Incorrect login!");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public ResponseEntity<User> getLoggedUser(Authentication auth) {
public ResponseEntity<Page<User>> search(@RequestBody UserSearchRequestBody query, Pageable pageable, Authentication auth) {
List<ProcessResourceId> roles = query.getRoles() == null ? null : query.getRoles().stream().map(ProcessResourceId::new).toList();
List<ProcessResourceId> negativeRoles = query.getNegativeRoles() == null ? null : query.getNegativeRoles().stream().map(ProcessResourceId::new).toList();
Page<AbstractUser> users = userService.searchAllCoMembers(query.getFulltext(),
Page<com.netgrif.application.engine.objects.auth.domain.User> users = userService.searchAllCoMembers(query.getFulltext(),
roles,
negativeRoles,
(LoggedUser) auth.getPrincipal(), pageable);
Expand Down Expand Up @@ -127,11 +127,11 @@ public ResponseEntity<String> savePreferences(@RequestBody PreferencesRequest pr
}
}

private Page<User> changeToResponse(Page<AbstractUser> users, Pageable pageable) {
private Page<User> changeToResponse(Page<com.netgrif.application.engine.objects.auth.domain.User> users, Pageable pageable) {
return new PageImpl<>(changeType(users.getContent()), pageable, users.getTotalElements());
}

public List<User> changeType(List<AbstractUser> users) {
public List<User> changeType(List<com.netgrif.application.engine.objects.auth.domain.User> users) {
return users.stream().map(User::createUser).toList();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public ResponseEntity<Page<User>> getAllUsers(@PathVariable String realmId, Page
log.error("Realm with id [{}] not found", realmId);
return ResponseEntity.badRequest().build();
}
Page<AbstractUser> users = userService.findAllUsers(realmId, pageable);
Page<com.netgrif.application.engine.objects.auth.domain.User> users = userService.findAllUsers(realmId, pageable);
return ResponseEntity.ok(changeToResponse(users, pageable, locale));
}

Expand Down Expand Up @@ -138,7 +138,7 @@ public ResponseEntity<User> getLoggedUser(Authentication auth, Locale locale) {
public ResponseEntity<Page<User>> search(@RequestBody UserSearchRequestBody query, Pageable pageable, Authentication auth, Locale locale) {
List<ProcessResourceId> roles = query.getRoles() == null ? null : query.getRoles().stream().map(ProcessResourceId::new).toList();
List<ProcessResourceId> negativeRoles = query.getNegativeRoles() == null ? null : query.getNegativeRoles().stream().map(ProcessResourceId::new).toList();
Page<AbstractUser> users = userService.searchAllCoMembers(query.getFulltext(),
Page<com.netgrif.application.engine.objects.auth.domain.User> users = userService.searchAllCoMembers(query.getFulltext(),
roles,
negativeRoles,
(LoggedUser) auth.getPrincipal(), pageable);
Expand Down Expand Up @@ -218,7 +218,7 @@ public ResponseEntity<User> getUser(@PathVariable("realmId") String realmId, @Pa
})
public ResponseEntity<ResponseMessage> assignRolesToUser(@PathVariable("realmId") String realmId, @PathVariable("id") String userId, @RequestBody Set<String> roleIds, Authentication auth) {
try {
AbstractUser user = userService.findById(userId, realmId);
com.netgrif.application.engine.objects.auth.domain.User 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(ResponseMessage.createSuccessMessage("Selected roles assigned to user " + userId));
Expand Down Expand Up @@ -325,11 +325,11 @@ public ResponseEntity<ResponseMessage> savePreferences(@RequestBody PreferencesR
}
}

private Page<User> changeToResponse(Page<AbstractUser> users, Pageable pageable, Locale locale) {
private Page<User> changeToResponse(Page<com.netgrif.application.engine.objects.auth.domain.User> users, Pageable pageable, Locale locale) {
return new PageImpl<>(changeType(users.getContent(), locale), pageable, users.getTotalElements());
}

public List<User> changeType(List<AbstractUser> users, Locale locale) {
public List<User> changeType(List<com.netgrif.application.engine.objects.auth.domain.User> users, Locale locale) {
return users.stream().map(u -> userFactory.getUser(u, locale)).toList();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.netgrif.application.engine.auth.web.responsebodies;

import com.netgrif.application.engine.auth.service.UserFactory;
import com.netgrif.application.engine.objects.auth.domain.AbstractUser;
import com.netgrif.application.engine.objects.auth.domain.User;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.server.RepresentationModelAssembler;

import java.util.Locale;

public class UserResourceAssembler implements RepresentationModelAssembler<AbstractUser, UserResource> {
public class UserResourceAssembler implements RepresentationModelAssembler<User, UserResource> {

@Autowired
private UserFactory userFactory;
Expand All @@ -29,7 +30,7 @@ public void initialize(Locale locale, boolean small, String selfRel) {
}

@Override
public UserResource toModel(AbstractUser entity) {
public UserResource toModel(@NotNull User entity) {
if (!initialized) {
throw new IllegalStateException("You must initialize the UserResourceAssembler before calling the toResource method! To initialize the assembler call the initialize method.");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package com.netgrif.application.engine.impersonation.service;

import com.netgrif.application.engine.configuration.properties.ImpersonationConfigurationProperties;
import com.netgrif.application.engine.objects.auth.domain.Authority;
import com.netgrif.application.engine.objects.auth.domain.LoggedUser;
import com.netgrif.application.engine.objects.auth.domain.*;
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.UserService;
import com.netgrif.application.engine.elastic.service.interfaces.IElasticCaseService;
import com.netgrif.application.engine.elastic.web.requestbodies.CaseSearchRequest;
import com.netgrif.application.engine.impersonation.service.interfaces.IImpersonationAuthorizationService;
import com.netgrif.application.engine.objects.auth.domain.AbstractUser;
import com.netgrif.application.engine.objects.auth.domain.ActorTransformer;
import com.netgrif.application.engine.objects.petrinet.domain.dataset.UserFieldValue;
import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole;
import com.netgrif.application.engine.objects.workflow.domain.Case;
Expand Down Expand Up @@ -53,13 +50,13 @@ public class ImpersonationAuthorizationService implements IImpersonationAuthoriz
protected ProcessRoleService processRoleService;

@Override
public Page<AbstractUser> getConfiguredImpersonationUsers(String query, LoggedUser impersonator, Pageable pageable) {
public Page<User> getConfiguredImpersonationUsers(String query, LoggedUser impersonator, Pageable pageable) {
if (impersonator.isAdmin()) {
return userService.searchAllCoMembers(query, null, null, impersonator, pageable);

} else {
Page<Case> cases = searchConfigs(impersonator.getStringId(), pageable);
List<AbstractUser> users = cases.getContent().stream()
List<User> users = cases.getContent().stream()
.map(c -> ((UserFieldValue) c.getDataSet().get("impersonated").getValue()).getId())
.distinct()
.map(id -> userService.findById(id, null))
Expand All @@ -76,7 +73,7 @@ public boolean canImpersonate(LoggedUser impersonator, String configId) {

@Override
public boolean canImpersonateUser(LoggedUser impersonator, String userId) {
AbstractUser impersonated = userService.findById(userId, null);
User impersonated = userService.findById(userId, null);
return impersonator.isAdmin() || !searchConfigs(impersonator.getStringId(), impersonated.getStringId()).isEmpty();
}

Expand All @@ -92,7 +89,7 @@ public List<Case> searchConfigs(String impersonatorId, String impersonatedId) {
}

@Override
public List<Authority> getAuthorities(Collection<Case> configs, AbstractUser impersonated) {
public List<Authority> getAuthorities(Collection<Case> configs, User impersonated) {
if (configs.isEmpty()) {
return new ArrayList<>();
}
Expand All @@ -103,7 +100,7 @@ public List<Authority> getAuthorities(Collection<Case> configs, AbstractUser imp
}

@Override
public List<ProcessRole> getRoles(Collection<Case> configs, AbstractUser impersonated) {
public List<ProcessRole> getRoles(Collection<Case> configs, User impersonated) {
List<ProcessRole> impersonatedRoles = new ArrayList<>();
impersonatedRoles.add(processRoleService.getDefaultRole());
if (configs.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.netgrif.application.engine.impersonation.service;

import com.netgrif.application.engine.adapter.spring.auth.domain.AuthorityImpl;
import com.netgrif.application.engine.objects.auth.domain.AbstractUser;
import com.netgrif.application.engine.objects.auth.domain.ActorTransformer;
import com.netgrif.application.engine.objects.auth.domain.Authority;
import com.netgrif.application.engine.objects.auth.domain.LoggedUser;
import com.netgrif.application.engine.objects.auth.domain.*;
import com.netgrif.application.engine.auth.service.UserService;
import com.netgrif.application.engine.configuration.properties.ImpersonationConfigurationProperties;
import com.netgrif.application.engine.objects.event.RunPhase;
Expand Down Expand Up @@ -58,7 +55,7 @@ public LoggedUser impersonateUser(String impersonatedId) throws ImpersonatedUser
throw new IllegalArgumentException("Impersonation is not enabled in app properties");
}
LoggedUser loggedUser = ActorTransformer.toLoggedUser(userService.getLoggedUser());
AbstractUser impersonated = userService.findById(impersonatedId, null);
User impersonated = userService.findById(impersonatedId, null);

List<Case> configs = impersonationAuthorizationService.searchConfigs(loggedUser.getStringId(), impersonated.getStringId());
LoggedUser impersonatedLogged = ActorTransformer.toLoggedUser(applyRolesAndAuthorities(impersonated, loggedUser.getStringId(), configs));
Expand All @@ -73,7 +70,7 @@ public LoggedUser impersonateByConfig(String configId) throws ImpersonatedUserHa
}
Case config = impersonationAuthorizationService.getConfig(configId);
LoggedUser loggedUser = ActorTransformer.toLoggedUser(userService.getLoggedUser());
AbstractUser impersonated = userService.findById(impersonationAuthorizationService.getImpersonatedUserId(config), null);
User impersonated = userService.findById(impersonationAuthorizationService.getImpersonatedUserId(config), null);

LoggedUser impersonatedLogged = ActorTransformer.toLoggedUser(applyRolesAndAuthorities(impersonated, loggedUser.getStringId(), Collections.singletonList(config)));
return doImpersonate(loggedUser, impersonatedLogged, Collections.singletonList(config));
Expand Down Expand Up @@ -143,7 +140,7 @@ public void onSessionDestroy(LoggedUser impersonator) {
}

@Override
public AbstractUser reloadImpersonatedUserRoles(AbstractUser impersonated, String impersonatorId) {
public User reloadImpersonatedUserRoles(User impersonated, String impersonatorId) {
Optional<Impersonator> context = impersonatorRepository.findByImpersonatedId(impersonated.getStringId());
if (context.isPresent()) {
List<Case> configs = context.get().getConfigIds().stream()
Expand All @@ -155,8 +152,8 @@ public AbstractUser reloadImpersonatedUserRoles(AbstractUser impersonated, Strin
}

@Override
public AbstractUser applyRolesAndAuthorities(AbstractUser impersonated, String impersonatorId, List<Case> configs) {
if ((Boolean) userService.findById(impersonatorId, null).getAuthoritySet().contains(new AuthorityImpl(Authority.admin))) {
public User applyRolesAndAuthorities(User impersonated, String impersonatorId, List<Case> configs) {
if (userService.findById(impersonatorId, null).isAdmin()) {
return impersonated;
}
List<Authority> authorities = impersonationAuthorizationService.getAuthorities(configs, impersonated);
Expand Down
Loading