Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading