Add username retrieval functionality to LoginController using RecentNamesMapper query
This commit is contained in:
parent
ae1e972438
commit
bdb38e5011
|
|
@ -1,18 +1,26 @@
|
||||||
package com.alttd.altitudeweb.controllers.login;
|
package com.alttd.altitudeweb.controllers.login;
|
||||||
|
|
||||||
import com.alttd.altitudeweb.api.LoginApi;
|
import com.alttd.altitudeweb.api.LoginApi;
|
||||||
|
import com.alttd.altitudeweb.database.litebans.HistoryRecord;
|
||||||
|
import com.alttd.altitudeweb.database.litebans.RecentNamesMapper;
|
||||||
|
import com.alttd.altitudeweb.database.litebans.UUIDHistoryMapper;
|
||||||
import com.alttd.altitudeweb.model.PermissionClaimDto;
|
import com.alttd.altitudeweb.model.PermissionClaimDto;
|
||||||
import com.alttd.altitudeweb.database.Databases;
|
import com.alttd.altitudeweb.database.Databases;
|
||||||
import com.alttd.altitudeweb.database.web_db.PrivilegedUser;
|
import com.alttd.altitudeweb.database.web_db.PrivilegedUser;
|
||||||
import com.alttd.altitudeweb.database.web_db.PrivilegedUserMapper;
|
import com.alttd.altitudeweb.database.web_db.PrivilegedUserMapper;
|
||||||
|
import com.alttd.altitudeweb.model.UsernameDto;
|
||||||
import com.alttd.altitudeweb.setup.Connection;
|
import com.alttd.altitudeweb.setup.Connection;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.boot.autoconfigure.security.oauth2.resource.OAuth2ResourceServerProperties;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import com.alttd.altitudeweb.services.limits.RateLimit;
|
import com.alttd.altitudeweb.services.limits.RateLimit;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
import org.springframework.security.oauth2.jwt.Jwt;
|
||||||
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
|
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
|
||||||
import org.springframework.security.oauth2.jwt.JwtEncoder;
|
import org.springframework.security.oauth2.jwt.JwtEncoder;
|
||||||
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
|
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
|
||||||
|
|
@ -83,6 +91,47 @@ public class LoginController implements LoginApi {
|
||||||
return ResponseEntity.ok(loginCode);
|
return ResponseEntity.ok(loginCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<UsernameDto> getUsername() {
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
|
||||||
|
if (authentication == null || !(authentication.getPrincipal() instanceof OAuth2ResourceServerProperties.Jwt)) {
|
||||||
|
return ResponseEntity.status(401).build();
|
||||||
|
}
|
||||||
|
Jwt jwt = (Jwt) authentication.getPrincipal();
|
||||||
|
String stringUuid = jwt.getSubject();
|
||||||
|
UUID uuid;
|
||||||
|
try {
|
||||||
|
uuid = UUID.fromString(stringUuid);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
UsernameDto usernameDto = new UsernameDto();
|
||||||
|
usernameDto.setUsername(getUsername(uuid));
|
||||||
|
|
||||||
|
return ResponseEntity.ok(usernameDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getUsername(UUID uuid) {
|
||||||
|
CompletableFuture<String> username = new CompletableFuture<>();
|
||||||
|
|
||||||
|
Connection.getConnection(Databases.LITE_BANS)
|
||||||
|
.runQuery(sqlSession -> {
|
||||||
|
log.debug("Loading all history through logged in uuid");
|
||||||
|
try {
|
||||||
|
String temp = sqlSession
|
||||||
|
.getMapper(RecentNamesMapper.class)
|
||||||
|
.getUsername(uuid.toString());
|
||||||
|
username.complete(temp);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Failed to find username for uuid {}", uuid, e);
|
||||||
|
username.completeExceptionally(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return username.join();
|
||||||
|
}
|
||||||
|
|
||||||
@RateLimit(limit = 5, timeValue = 1, timeUnit = TimeUnit.MINUTES, key = "login")
|
@RateLimit(limit = 5, timeValue = 1, timeUnit = TimeUnit.MINUTES, key = "login")
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<String> login(String code) {
|
public ResponseEntity<String> login(String code) {
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,16 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface RecentNamesMapper {
|
public interface RecentNamesMapper {
|
||||||
|
|
||||||
|
@Select("""
|
||||||
|
SELECT DISTINCT name AS username
|
||||||
|
FROM litebans_history
|
||||||
|
WHERE uuid = #{uuid}
|
||||||
|
ORDER BY date DESC;
|
||||||
|
""")
|
||||||
|
String getUsername(@Param("uuid") String uuid);
|
||||||
|
|
||||||
|
|
||||||
@Select("""
|
@Select("""
|
||||||
SELECT DISTINCT user_lookup.name AS punished_name
|
SELECT DISTINCT user_lookup.name AS punished_name
|
||||||
FROM ${tableName} AS punishment
|
FROM ${tableName} AS punishment
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user