Don't logout the current session when setting up TFA
All checks were successful
Deploy API / deploy (ubuntu-latest, 2.44.0) (push) Successful in 58s
All checks were successful
Deploy API / deploy (ubuntu-latest, 2.44.0) (push) Successful in 58s
This commit is contained in:
parent
ab81414cf4
commit
57d10bd9c1
@ -3,6 +3,7 @@ package cc.pulseapp.api.model.user.session;
|
|||||||
import cc.pulseapp.api.model.user.User;
|
import cc.pulseapp.api.model.user.User;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Id;
|
||||||
@ -14,13 +15,13 @@ import org.springframework.data.redis.core.index.Indexed;
|
|||||||
*
|
*
|
||||||
* @author Braydon
|
* @author Braydon
|
||||||
*/
|
*/
|
||||||
@AllArgsConstructor @Getter
|
@AllArgsConstructor @Getter @EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
||||||
@RedisHash(value = "sessions", timeToLive = 30 * 24 * 60 * 60) // Expire in 30 days (days, hours, mins, secs)
|
@RedisHash(value = "sessions", timeToLive = 30 * 24 * 60 * 60) // Expire in 30 days (days, hours, mins, secs)
|
||||||
public final class Session {
|
public final class Session {
|
||||||
/**
|
/**
|
||||||
* The snowflake of this session.
|
* The snowflake of this session.
|
||||||
*/
|
*/
|
||||||
@Id @JsonIgnore private final long snowflake;
|
@EqualsAndHashCode.Include @Id @JsonIgnore private final long snowflake;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The snowflake of the user this session is for.
|
* The snowflake of the user this session is for.
|
||||||
|
@ -2,6 +2,7 @@ package cc.pulseapp.api.service;
|
|||||||
|
|
||||||
import cc.pulseapp.api.common.HashUtils;
|
import cc.pulseapp.api.common.HashUtils;
|
||||||
import cc.pulseapp.api.common.StringUtils;
|
import cc.pulseapp.api.common.StringUtils;
|
||||||
|
import cc.pulseapp.api.common.Tuple;
|
||||||
import cc.pulseapp.api.exception.impl.BadRequestException;
|
import cc.pulseapp.api.exception.impl.BadRequestException;
|
||||||
import cc.pulseapp.api.model.IGenericResponse;
|
import cc.pulseapp.api.model.IGenericResponse;
|
||||||
import cc.pulseapp.api.model.org.Organization;
|
import cc.pulseapp.api.model.org.Organization;
|
||||||
@ -13,6 +14,7 @@ import cc.pulseapp.api.model.user.input.CompleteOnboardingInput;
|
|||||||
import cc.pulseapp.api.model.user.input.EnableTFAInput;
|
import cc.pulseapp.api.model.user.input.EnableTFAInput;
|
||||||
import cc.pulseapp.api.model.user.input.UserExistsInput;
|
import cc.pulseapp.api.model.user.input.UserExistsInput;
|
||||||
import cc.pulseapp.api.model.user.response.UserSetupTFAResponse;
|
import cc.pulseapp.api.model.user.response.UserSetupTFAResponse;
|
||||||
|
import cc.pulseapp.api.model.user.session.Session;
|
||||||
import cc.pulseapp.api.repository.SessionRepository;
|
import cc.pulseapp.api.repository.SessionRepository;
|
||||||
import cc.pulseapp.api.repository.UserRepository;
|
import cc.pulseapp.api.repository.UserRepository;
|
||||||
import com.github.benmanes.caffeine.cache.Cache;
|
import com.github.benmanes.caffeine.cache.Cache;
|
||||||
@ -181,7 +183,9 @@ public final class UserService {
|
|||||||
if (input == null || (!input.isValid())) { // Ensure the input was provided
|
if (input == null || (!input.isValid())) { // Ensure the input was provided
|
||||||
throw new BadRequestException(Error.MALFORMED_ENABLE_TFA_INPUT);
|
throw new BadRequestException(Error.MALFORMED_ENABLE_TFA_INPUT);
|
||||||
}
|
}
|
||||||
User user = authService.getAuthenticatedUser();
|
Tuple<Session, User> sessionAndUser = authService.getSessionAndUser();
|
||||||
|
Session session = sessionAndUser.getLeft();
|
||||||
|
User user = sessionAndUser.getRight();
|
||||||
if (user.hasFlag(UserFlag.TFA_ENABLED)) { // Ensure TFA isn't already on
|
if (user.hasFlag(UserFlag.TFA_ENABLED)) { // Ensure TFA isn't already on
|
||||||
throw new BadRequestException(Error.TFA_ALREADY_ENABLED);
|
throw new BadRequestException(Error.TFA_ALREADY_ENABLED);
|
||||||
}
|
}
|
||||||
@ -211,7 +215,9 @@ public final class UserService {
|
|||||||
userRepository.save(user);
|
userRepository.save(user);
|
||||||
|
|
||||||
// And finally invalidate all of the sessions for the user
|
// And finally invalidate all of the sessions for the user
|
||||||
sessionRepository.deleteAll(sessionRepository.findAllByUserSnowflake(user.getSnowflake()));
|
List<Session> sessions = sessionRepository.findAllByUserSnowflake(user.getSnowflake());
|
||||||
|
sessions.removeIf(activeSession -> activeSession.equals(session));
|
||||||
|
sessionRepository.deleteAll(sessions);
|
||||||
|
|
||||||
return originalBackupCodes;
|
return originalBackupCodes;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user