do not purge user object to block username
This commit is contained in:
parent
f3a309c597
commit
e3a437bd76
@ -97,19 +97,23 @@ public class UserManager implements UserDataProvider {
|
|||||||
* @return the password hash
|
* @return the password hash
|
||||||
*/
|
*/
|
||||||
public String getPasswordHash(Long id) {
|
public String getPasswordHash(Long id) {
|
||||||
Assert.isTrue(userRepository.existsById(id), "User with id '" + id + "' not exists!");
|
Assert.isTrue(userRepository.existsById(id), "User with id '"
|
||||||
|
+ id
|
||||||
|
+ "' not exists!");
|
||||||
return userRepository.findById(id).get().getPasswordHash();
|
return userRepository.findById(id).get().getPasswordHash();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the password.
|
* Sets the password.
|
||||||
*
|
*
|
||||||
* @param id the id
|
* @param id the id
|
||||||
* @param password the password
|
* @param password the password
|
||||||
* @return the user
|
* @return the user
|
||||||
*/
|
*/
|
||||||
public User setPassword(Long id, String password) {
|
public User setPassword(Long id, String password) {
|
||||||
Assert.isTrue(userRepository.existsById(id), "User with id '" + id + "' not exists!");
|
Assert.isTrue(userRepository.existsById(id), "User with id '"
|
||||||
|
+ id
|
||||||
|
+ "' not exists!");
|
||||||
User user = userRepository.findById(id).get();
|
User user = userRepository.findById(id).get();
|
||||||
user.setPasswordHash(passwordEncoder.encode(password));
|
user.setPasswordHash(passwordEncoder.encode(password));
|
||||||
return userRepository.save(user);
|
return userRepository.save(user);
|
||||||
@ -120,12 +124,14 @@ public class UserManager implements UserDataProvider {
|
|||||||
*
|
*
|
||||||
* @param username the username
|
* @param username the username
|
||||||
* @param password the password
|
* @param password the password
|
||||||
* @param status the status
|
* @param status the status
|
||||||
* @return the user
|
* @return the user
|
||||||
*/
|
*/
|
||||||
public User create(String username, String password, UserStatus status) {
|
public User create(String username, String password, UserStatus status) {
|
||||||
Assert.isTrue(!userRepository.exists(qUser.username.equalsIgnoreCase(username)),
|
Assert.isTrue(!userRepository.exists(qUser.username.equalsIgnoreCase(username)),
|
||||||
"Username '" + username + "' already exists!");
|
"Username '"
|
||||||
|
+ username
|
||||||
|
+ "' already exists!");
|
||||||
User user = new User();
|
User user = new User();
|
||||||
user.setUsername(username);
|
user.setUsername(username);
|
||||||
if (StringUtils.hasText(password)) {
|
if (StringUtils.hasText(password)) {
|
||||||
@ -142,9 +148,9 @@ public class UserManager implements UserDataProvider {
|
|||||||
/**
|
/**
|
||||||
* Gets the.
|
* Gets the.
|
||||||
*
|
*
|
||||||
* @param page the page
|
* @param page the page
|
||||||
* @param size the size
|
* @param size the size
|
||||||
* @param sortBy the sort by
|
* @param sortBy the sort by
|
||||||
* @param descending the descending
|
* @param descending the descending
|
||||||
* @return the page
|
* @return the page
|
||||||
*/
|
*/
|
||||||
@ -160,8 +166,9 @@ public class UserManager implements UserDataProvider {
|
|||||||
* @return the user
|
* @return the user
|
||||||
*/
|
*/
|
||||||
public User update(User user) {
|
public User update(User user) {
|
||||||
Assert.isTrue(userRepository.existsById(user.getId()),
|
Assert.isTrue(userRepository.existsById(user.getId()), "User with id '"
|
||||||
"User with id '" + user.getId() + "' not exists!");
|
+ user.getId()
|
||||||
|
+ "' not exists!");
|
||||||
|
|
||||||
User merge = get(user.getId());
|
User merge = get(user.getId());
|
||||||
merge.setUsername(user.getUsername());
|
merge.setUsername(user.getUsername());
|
||||||
@ -182,8 +189,9 @@ public class UserManager implements UserDataProvider {
|
|||||||
* @param user the user
|
* @param user the user
|
||||||
*/
|
*/
|
||||||
public void delete(User user) {
|
public void delete(User user) {
|
||||||
Assert.isTrue(userRepository.existsById(user.getId()),
|
Assert.isTrue(userRepository.existsById(user.getId()), "User with id '"
|
||||||
"User with id '" + user.getId() + "' not exists!");
|
+ user.getId()
|
||||||
|
+ "' not exists!");
|
||||||
|
|
||||||
File publicKey = new File(getPublicKeyPath(user.getUsername()));
|
File publicKey = new File(getPublicKeyPath(user.getUsername()));
|
||||||
if (publicKey.exists()) {
|
if (publicKey.exists()) {
|
||||||
@ -202,13 +210,15 @@ public class UserManager implements UserDataProvider {
|
|||||||
* @return the bstly email
|
* @return the bstly email
|
||||||
*/
|
*/
|
||||||
public String getBstlyEmail(String username) {
|
public String getBstlyEmail(String username) {
|
||||||
return username + "@" + userEmailDomain;
|
return username
|
||||||
|
+ "@"
|
||||||
|
+ userEmailDomain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write public key.
|
* Write public key.
|
||||||
*
|
*
|
||||||
* @param username the username
|
* @param username the username
|
||||||
* @param publicKey the public key
|
* @param publicKey the public key
|
||||||
*/
|
*/
|
||||||
public void writePublicKey(String username, String publicKey) {
|
public void writePublicKey(String username, String publicKey) {
|
||||||
@ -228,7 +238,8 @@ public class UserManager implements UserDataProvider {
|
|||||||
FileWriter myWriter = new FileWriter(publicKeyPath);
|
FileWriter myWriter = new FileWriter(publicKeyPath);
|
||||||
myWriter.write(publicKey);
|
myWriter.write(publicKey);
|
||||||
myWriter.close();
|
myWriter.close();
|
||||||
String command = "gpg --import " + publicKeyPath;
|
String command = "gpg --import "
|
||||||
|
+ publicKeyPath;
|
||||||
Runtime.getRuntime().exec(command);
|
Runtime.getRuntime().exec(command);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -243,19 +254,25 @@ public class UserManager implements UserDataProvider {
|
|||||||
* @return the public key path
|
* @return the public key path
|
||||||
*/
|
*/
|
||||||
public String getPublicKeyPath(String username) {
|
public String getPublicKeyPath(String username) {
|
||||||
return userDataDirectory + username + File.separator + "public.key";
|
return userDataDirectory
|
||||||
|
+ username
|
||||||
|
+ File.separator
|
||||||
|
+ "public.key";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Password reset.
|
* Password reset.
|
||||||
*
|
*
|
||||||
* @param user the user
|
* @param user the user
|
||||||
* @param outputStream the output stream
|
* @param outputStream the output stream
|
||||||
*/
|
*/
|
||||||
public void passwordReset(User user, ServletOutputStream outputStream) {
|
public void passwordReset(User user, ServletOutputStream outputStream) {
|
||||||
String resetToken = RandomStringUtils.random(64, true, true);
|
String resetToken = RandomStringUtils.random(64, true, true);
|
||||||
String command = "echo \"" + resetToken + "\" | gpg -ear "
|
String command = "echo \""
|
||||||
+ getBstlyEmail(user.getUsername()) + " --always-trust";
|
+ resetToken
|
||||||
|
+ "\" | gpg -ear "
|
||||||
|
+ getBstlyEmail(user.getUsername())
|
||||||
|
+ " --always-trust";
|
||||||
|
|
||||||
user.setResetToken(resetToken);
|
user.setResetToken(resetToken);
|
||||||
|
|
||||||
@ -328,7 +345,22 @@ public class UserManager implements UserDataProvider {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void purgeUserData(Long userId) {
|
public void purgeUserData(Long userId) {
|
||||||
userRepository.deleteById(userId);
|
User user = get(userId);
|
||||||
|
if (user != null) {
|
||||||
|
user.setDisabled(true);
|
||||||
|
user.setLocked(true);
|
||||||
|
user = update(user);
|
||||||
|
logger.warn("User '"
|
||||||
|
+ user.getUsername()
|
||||||
|
+ "' ["
|
||||||
|
+ user.getId()
|
||||||
|
+ "] should be purged!");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
logger.error("No user found for ["
|
||||||
|
+ userId
|
||||||
|
+ "]!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import de.bstly.we.businesslogic.PermissionManager;
|
import de.bstly.we.businesslogic.PermissionManager;
|
||||||
import de.bstly.we.businesslogic.UserManager;
|
import de.bstly.we.businesslogic.UserManager;
|
||||||
import de.bstly.we.controller.support.EntityResponseStatusException;
|
import de.bstly.we.controller.support.EntityResponseStatusException;
|
||||||
@ -100,10 +102,30 @@ public class PermissionManagementController extends BaseController {
|
|||||||
return permissionManager.update(permission);
|
return permissionManager.update(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update permission.
|
||||||
|
*
|
||||||
|
* @param permission the permission
|
||||||
|
* @return the permission
|
||||||
|
*/
|
||||||
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||||
|
@PatchMapping("list")
|
||||||
|
public List<Permission> updatePermissions(@RequestBody List<Permission> permissions) {
|
||||||
|
List<Permission> result = Lists.newArrayList();
|
||||||
|
for (Permission permission : permissions) {
|
||||||
|
if (permission.getId() == null) {
|
||||||
|
throw new EntityResponseStatusException(HttpStatus.CONFLICT);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.add(permissionManager.update(permission));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clone.
|
* Clone.
|
||||||
*
|
*
|
||||||
* @param name the name
|
* @param name the name
|
||||||
* @param clone the clone
|
* @param clone the clone
|
||||||
* @return the list
|
* @return the list
|
||||||
*/
|
*/
|
||||||
|
2
pom.xml
2
pom.xml
@ -13,7 +13,7 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<java.version>11</java.version>
|
<java.version>11</java.version>
|
||||||
<log4j2.version>2.17.1</log4j2.version>
|
<log4j2.version>2.17.1</log4j2.version>
|
||||||
<revision>1.5.0-SNAPSHOT</revision>
|
<revision>1.6.0-SNAPSHOT</revision>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
|
Loading…
Reference in New Issue
Block a user