store extra data in user sessions
All checks were successful
Deploy API / deploy (ubuntu-latest, 2.44.0) (push) Successful in 42s
All checks were successful
Deploy API / deploy (ubuntu-latest, 2.44.0) (push) Successful in 42s
This commit is contained in:
parent
dfbc705feb
commit
07dbc1fca8
@ -1,7 +1,7 @@
|
|||||||
package cc.pulseapp.api.config;
|
package cc.pulseapp.api.config;
|
||||||
|
|
||||||
import cc.pulseapp.api.model.IGenericResponse;
|
import cc.pulseapp.api.model.IGenericResponse;
|
||||||
import cc.pulseapp.api.model.user.Session;
|
import cc.pulseapp.api.model.user.session.Session;
|
||||||
import cc.pulseapp.api.repository.SessionRepository;
|
import cc.pulseapp.api.repository.SessionRepository;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
@ -16,8 +16,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This controller is responsible for handling
|
* This controller is responsible for handling
|
||||||
* {@link User} authentication requests.
|
* {@link User} authentication requests.
|
||||||
@ -60,11 +58,6 @@ public final class AuthController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/login") @ResponseBody @NonNull
|
@PostMapping("/login") @ResponseBody @NonNull
|
||||||
public ResponseEntity<UserAuthResponse> login(@NonNull HttpServletRequest request, UserLoginInput input) throws BadRequestException {
|
public ResponseEntity<UserAuthResponse> login(@NonNull HttpServletRequest request, UserLoginInput input) throws BadRequestException {
|
||||||
Iterator<String> iterator = request.getHeaderNames().asIterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
String name = iterator.next();
|
|
||||||
System.out.println("header: " + name + " = " + request.getHeader(name));
|
|
||||||
}
|
|
||||||
return ResponseEntity.ok(authService.loginUser(request, input));
|
return ResponseEntity.ok(authService.loginUser(request, input));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package cc.pulseapp.api.model.user.response;
|
package cc.pulseapp.api.model.user.response;
|
||||||
|
|
||||||
import cc.pulseapp.api.model.user.Session;
|
import cc.pulseapp.api.model.user.session.Session;
|
||||||
import cc.pulseapp.api.model.user.UserDTO;
|
import cc.pulseapp.api.model.user.UserDTO;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cc.pulseapp.api.model.user;
|
package cc.pulseapp.api.model.user.session;
|
||||||
|
|
||||||
|
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.Getter;
|
import lombok.Getter;
|
||||||
@ -37,14 +38,9 @@ public final class Session {
|
|||||||
@Indexed @NonNull private final String refreshToken;
|
@Indexed @NonNull private final String refreshToken;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The IP address of the user that created this session.
|
* The location this session originated from.
|
||||||
*/
|
*/
|
||||||
@NonNull @JsonIgnore private final String ipAddress;
|
@NonNull @JsonIgnore private final SessionLocation location;
|
||||||
|
|
||||||
/**
|
|
||||||
* The user agent of the user that created this session.
|
|
||||||
*/
|
|
||||||
@NonNull @JsonIgnore private final String userAgent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The unix timestamp of when this token expires.
|
* The unix timestamp of when this token expires.
|
@ -0,0 +1,57 @@
|
|||||||
|
package cc.pulseapp.api.model.user.session;
|
||||||
|
|
||||||
|
import cc.pulseapp.api.common.RequestUtils;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The location a {@link Session} originated from.
|
||||||
|
*
|
||||||
|
* @author Braydon
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter @ToString
|
||||||
|
public final class SessionLocation {
|
||||||
|
/**
|
||||||
|
* The IP address that created the session.
|
||||||
|
*/
|
||||||
|
@NonNull private final String ip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The country of the person that
|
||||||
|
* created the session, if known.
|
||||||
|
*/
|
||||||
|
private final String country;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The region of the person that
|
||||||
|
* created the session, if known.
|
||||||
|
*/
|
||||||
|
private final String region;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The city of the person that
|
||||||
|
* created the session, if known.
|
||||||
|
*/
|
||||||
|
private final String city;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The user agent of the person
|
||||||
|
* that created the session.
|
||||||
|
*/
|
||||||
|
@NonNull private final String userAgent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build a location from the given request.
|
||||||
|
*
|
||||||
|
* @param request the request to build from
|
||||||
|
* @return the session location
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static SessionLocation buildFromRequest(@NonNull HttpServletRequest request) {
|
||||||
|
return new SessionLocation(
|
||||||
|
RequestUtils.getRealIp(request), request.getHeader("CF-IPCountry"),
|
||||||
|
request.getHeader("CF-Region"), request.getHeader("CF-IPCity"),
|
||||||
|
RequestUtils.getUserAgent(request)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package cc.pulseapp.api.repository;
|
package cc.pulseapp.api.repository;
|
||||||
|
|
||||||
import cc.pulseapp.api.model.user.Session;
|
import cc.pulseapp.api.model.user.session.Session;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@ import cc.pulseapp.api.model.user.*;
|
|||||||
import cc.pulseapp.api.model.user.input.UserLoginInput;
|
import cc.pulseapp.api.model.user.input.UserLoginInput;
|
||||||
import cc.pulseapp.api.model.user.input.UserRegistrationInput;
|
import cc.pulseapp.api.model.user.input.UserRegistrationInput;
|
||||||
import cc.pulseapp.api.model.user.response.UserAuthResponse;
|
import cc.pulseapp.api.model.user.response.UserAuthResponse;
|
||||||
|
import cc.pulseapp.api.model.user.session.Session;
|
||||||
|
import cc.pulseapp.api.model.user.session.SessionLocation;
|
||||||
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 jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
@ -166,7 +168,7 @@ public final class AuthService {
|
|||||||
snowflakeService.generateSnowflake(), user.getSnowflake(),
|
snowflakeService.generateSnowflake(), user.getSnowflake(),
|
||||||
StringUtils.generateRandom(128, true, true, false),
|
StringUtils.generateRandom(128, true, true, false),
|
||||||
StringUtils.generateRandom(128, true, true, false),
|
StringUtils.generateRandom(128, true, true, false),
|
||||||
RequestUtils.getRealIp(request), RequestUtils.getUserAgent(request),
|
SessionLocation.buildFromRequest(request),
|
||||||
System.currentTimeMillis() + TimeUnit.DAYS.toMillis(30L)
|
System.currentTimeMillis() + TimeUnit.DAYS.toMillis(30L)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user