mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
[FIX] Change JsonTextureProvider behavior, delete http method
This commit is contained in:
parent
7e16f36ea0
commit
cebeb55c00
3 changed files with 14 additions and 643 deletions
|
@ -45,7 +45,6 @@ public static void registerProviders() {
|
||||||
providers.register("mysql", MySQLCoreProvider.class);
|
providers.register("mysql", MySQLCoreProvider.class);
|
||||||
providers.register("postgresql", PostgresSQLCoreProvider.class);
|
providers.register("postgresql", PostgresSQLCoreProvider.class);
|
||||||
providers.register("memory", MemoryAuthCoreProvider.class);
|
providers.register("memory", MemoryAuthCoreProvider.class);
|
||||||
providers.register("http", HttpAuthCoreProvider.class);
|
|
||||||
providers.register("merge", MergeAuthCoreProvider.class);
|
providers.register("merge", MergeAuthCoreProvider.class);
|
||||||
registredProviders = true;
|
registredProviders = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,639 +0,0 @@
|
||||||
package pro.gravit.launchserver.auth.core;
|
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import pro.gravit.launcher.ClientPermissions;
|
|
||||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.GetAvailabilityAuthRequestEvent;
|
|
||||||
import pro.gravit.launcher.profiles.Texture;
|
|
||||||
import pro.gravit.launcher.request.auth.AuthRequest;
|
|
||||||
import pro.gravit.launcher.request.secure.HardwareReportRequest;
|
|
||||||
import pro.gravit.launchserver.HttpRequester;
|
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
|
||||||
import pro.gravit.launchserver.auth.AuthException;
|
|
||||||
import pro.gravit.launchserver.auth.core.interfaces.UserHardware;
|
|
||||||
import pro.gravit.launchserver.auth.core.interfaces.provider.AuthSupportHardware;
|
|
||||||
import pro.gravit.launchserver.auth.core.interfaces.provider.AuthSupportRemoteClientAccess;
|
|
||||||
import pro.gravit.launchserver.auth.core.interfaces.user.UserSupportHardware;
|
|
||||||
import pro.gravit.launchserver.auth.core.interfaces.user.UserSupportProperties;
|
|
||||||
import pro.gravit.launchserver.auth.core.interfaces.user.UserSupportTextures;
|
|
||||||
import pro.gravit.launchserver.helper.HttpHelper;
|
|
||||||
import pro.gravit.launchserver.manangers.AuthManager;
|
|
||||||
import pro.gravit.launchserver.socket.Client;
|
|
||||||
import pro.gravit.launchserver.socket.response.auth.AuthResponse;
|
|
||||||
import pro.gravit.utils.helper.CommonHelper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class HttpAuthCoreProvider extends AuthCoreProvider implements AuthSupportHardware, AuthSupportRemoteClientAccess {
|
|
||||||
private transient final Logger logger = LogManager.getLogger();
|
|
||||||
public String bearerToken;
|
|
||||||
public String getUserByUsernameUrl;
|
|
||||||
public String getUserByLoginUrl;
|
|
||||||
public String getUserByUUIDUrl;
|
|
||||||
public String getUserByTokenUrl;
|
|
||||||
public String getAuthDetailsUrl;
|
|
||||||
public String refreshTokenUrl;
|
|
||||||
public String authorizeUrl;
|
|
||||||
public String joinServerUrl;
|
|
||||||
public String checkServerUrl;
|
|
||||||
public String updateServerIdUrl;
|
|
||||||
//below fields can be empty if advanced protect handler disabled
|
|
||||||
public String getHardwareInfoByPublicKeyUrl;
|
|
||||||
public String getHardwareInfoByDataUrl;
|
|
||||||
public String getHardwareInfoByIdUrl;
|
|
||||||
public String createHardwareInfoUrl;
|
|
||||||
public String connectUserAndHardwareUrl;
|
|
||||||
public String addPublicKeyToHardwareInfoUrl;
|
|
||||||
public String getUsersByHardwareInfoUrl;
|
|
||||||
public String banHardwareUrl;
|
|
||||||
public String unbanHardwareUrl;
|
|
||||||
public String apiUrl;
|
|
||||||
public List<String> apiFeatures;
|
|
||||||
private transient HttpRequester requester;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public User getUserByUsername(String username) {
|
|
||||||
try {
|
|
||||||
return requester.send(requester.get(CommonHelper.replace(getUserByUsernameUrl, "username", username), null), HttpUser.class).getOrThrow();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public User getUserByLogin(String login) {
|
|
||||||
if (getUserByLoginUrl != null) {
|
|
||||||
try {
|
|
||||||
return requester.send(requester.get(CommonHelper.replace(getUserByLoginUrl, "login", login), null), HttpUser.class).getOrThrow();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.getUserByLogin(login);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public User getUserByUUID(UUID uuid) {
|
|
||||||
try {
|
|
||||||
return requester.send(requester.get(CommonHelper.replace(getUserByUUIDUrl, "uuid", uuid.toString()), null), HttpUser.class).getOrThrow();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<GetAvailabilityAuthRequestEvent.AuthAvailabilityDetails> getDetails(Client client) {
|
|
||||||
if (getAuthDetailsUrl == null) {
|
|
||||||
return super.getDetails(client);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
var result = requester.send(requester.get(getAuthDetailsUrl, bearerToken), GetAuthDetailsResponse.class).getOrThrow();
|
|
||||||
return result.details;
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return super.getDetails(client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UserSession getUserSessionByOAuthAccessToken(String accessToken) throws OAuthAccessTokenExpired {
|
|
||||||
if (getUserByTokenUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
var result = requester.send(requester.get(getUserByTokenUrl, accessToken), HttpUserSession.class);
|
|
||||||
if (!result.isSuccessful()) {
|
|
||||||
var error = result.error().error;
|
|
||||||
if (error.equals(AuthRequestEvent.OAUTH_TOKEN_EXPIRE)) {
|
|
||||||
throw new OAuthAccessTokenExpired();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return result.getOrThrow();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AuthManager.AuthReport refreshAccessToken(String refreshToken, AuthResponse.AuthContext context) {
|
|
||||||
if (refreshTokenUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return requester.send(requester.post(refreshTokenUrl, new RefreshTokenRequest(refreshToken, context),
|
|
||||||
null), HttpAuthReport.class).getOrThrow().toAuthReport();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AuthManager.AuthReport authorize(String login, AuthResponse.AuthContext context, AuthRequest.AuthPasswordInterface password, boolean minecraftAccess) throws IOException {
|
|
||||||
var result = requester.send(requester.post(authorizeUrl, new AuthorizeRequest(login, context, password, minecraftAccess),
|
|
||||||
bearerToken), HttpAuthReport.class);
|
|
||||||
if (!result.isSuccessful()) {
|
|
||||||
var error = result.error().error;
|
|
||||||
if (error != null) {
|
|
||||||
throw new AuthException(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result.getOrThrow().toAuthReport();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UserHardware getHardwareInfoByPublicKey(byte[] publicKey) {
|
|
||||||
if (getHardwareInfoByPublicKeyUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return requester.send(requester.post(getHardwareInfoByPublicKeyUrl, new HardwareRequest(publicKey),
|
|
||||||
bearerToken), HttpUserHardware.class).getOrThrow();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UserHardware getHardwareInfoByData(HardwareReportRequest.HardwareInfo info) {
|
|
||||||
if (getHardwareInfoByDataUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
HardwareRequest request = new HardwareRequest(new HttpUserHardware(info));
|
|
||||||
HttpHelper.HttpOptional<HttpUserHardware, HttpRequester.SimpleError> hardware =
|
|
||||||
requester.send(requester.post(getHardwareInfoByDataUrl, request,
|
|
||||||
bearerToken), HttpUserHardware.class);
|
|
||||||
//should return null if not found
|
|
||||||
return hardware.isSuccessful() ? hardware.getOrThrow() : null;
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UserHardware getHardwareInfoById(String id) {
|
|
||||||
if (getHardwareInfoByIdUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return requester.send(requester.post(getHardwareInfoByIdUrl, new HardwareRequest(new HttpUserHardware(Long.parseLong(id))),
|
|
||||||
bearerToken), HttpUserHardware.class).getOrThrow();
|
|
||||||
} catch (IOException | NumberFormatException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UserHardware createHardwareInfo(HardwareReportRequest.HardwareInfo info, byte[] publicKey) {
|
|
||||||
if (createHardwareInfoUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return requester.send(requester.post(createHardwareInfoUrl, new HardwareRequest(new HttpUserHardware(info,
|
|
||||||
publicKey, false)), bearerToken), HttpUserHardware.class).getOrThrow();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void connectUserAndHardware(UserSession userSession, UserHardware hardware) {
|
|
||||||
if (connectUserAndHardwareUrl == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
requester.send(requester.post(connectUserAndHardwareUrl, new HardwareRequest((HttpUserHardware) hardware, (HttpUserSession) userSession), bearerToken), Void.class);
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPublicKeyToHardwareInfo(UserHardware hardware, byte[] publicKey) {
|
|
||||||
if (addPublicKeyToHardwareInfoUrl == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
requester.send(requester.post(addPublicKeyToHardwareInfoUrl, new HardwareRequest((HttpUserHardware) hardware, publicKey), bearerToken), Void.class);
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
|
||||||
@Override
|
|
||||||
public Iterable<User> getUsersByHardwareInfo(UserHardware hardware) {
|
|
||||||
if (getUsersByHardwareInfoUrl == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return (List<User>) (List) requester.send(requester
|
|
||||||
.post(getUsersByHardwareInfoUrl, new HardwareRequest((HttpUserHardware) hardware), bearerToken), GetHardwareListResponse.class).getOrThrow().list;
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void banHardware(UserHardware hardware) {
|
|
||||||
if (banHardwareUrl == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
requester.send(requester.post(banHardwareUrl, new HardwareRequest((HttpUserHardware) hardware), bearerToken), Void.class);
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unbanHardware(UserHardware hardware) {
|
|
||||||
if (unbanHardwareUrl == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
requester.send(requester.post(unbanHardwareUrl, new HardwareRequest((HttpUserHardware) hardware), bearerToken), Void.class);
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getClientApiUrl() {
|
|
||||||
return apiUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getClientApiFeatures() {
|
|
||||||
return apiFeatures;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public User checkServer(Client client, String username, String serverID) throws IOException {
|
|
||||||
return requester.send(requester.post(checkServerUrl, new CheckServerRequest(username, serverID), bearerToken), HttpUser.class).getOrThrow();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean joinServer(Client client, String username, UUID uuid, String accessToken, String serverID) throws IOException {
|
|
||||||
var result = requester.send(requester.post(joinServerUrl, new JoinServerRequest(username, uuid, accessToken, serverID), bearerToken), Void.class);
|
|
||||||
return result.isSuccessful();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(LaunchServer server) {
|
|
||||||
requester = new HttpRequester();
|
|
||||||
if (getUserByUsernameUrl == null) {
|
|
||||||
throw new IllegalArgumentException("'getUserByUsernameUrl' can't be null");
|
|
||||||
}
|
|
||||||
if (getUserByUUIDUrl == null) {
|
|
||||||
throw new IllegalArgumentException("'getUserByUUIDUrl' can't be null");
|
|
||||||
}
|
|
||||||
if (authorizeUrl == null) {
|
|
||||||
throw new IllegalArgumentException("'authorizeUrl' can't be null");
|
|
||||||
}
|
|
||||||
if (checkServerUrl == null && joinServerUrl == null && updateServerIdUrl == null) {
|
|
||||||
throw new IllegalArgumentException("Please set 'checkServerUrl' and 'joinServerUrl' or 'updateServerIdUrl'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public record HttpAuthReport(String minecraftAccessToken, String oauthAccessToken,
|
|
||||||
String oauthRefreshToken, long oauthExpire,
|
|
||||||
HttpUserSession session) {
|
|
||||||
public AuthManager.AuthReport toAuthReport() {
|
|
||||||
return new AuthManager.AuthReport(minecraftAccessToken, oauthAccessToken, oauthRefreshToken, oauthExpire, session);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class UpdateServerIdRequest {
|
|
||||||
public String username;
|
|
||||||
public UUID uuid;
|
|
||||||
public String serverId;
|
|
||||||
|
|
||||||
public UpdateServerIdRequest(String username, UUID uuid, String serverId) {
|
|
||||||
this.username = username;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.serverId = serverId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CheckServerRequest {
|
|
||||||
public String username;
|
|
||||||
public String serverId;
|
|
||||||
|
|
||||||
public CheckServerRequest(String username, String serverId) {
|
|
||||||
this.username = username;
|
|
||||||
this.serverId = serverId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class GetAuthDetailsResponse {
|
|
||||||
public List<GetAvailabilityAuthRequestEvent.AuthAvailabilityDetails> details;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class GetHardwareListResponse {
|
|
||||||
public List<HttpUser> list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class JoinServerRequest {
|
|
||||||
public String username;
|
|
||||||
public UUID uuid;
|
|
||||||
public String accessToken;
|
|
||||||
public String serverId;
|
|
||||||
|
|
||||||
public JoinServerRequest(String username, UUID uuid, String accessToken, String serverId) {
|
|
||||||
this.username = username;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.serverId = serverId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class AuthorizeRequest {
|
|
||||||
public String login;
|
|
||||||
public AuthResponse.AuthContext context;
|
|
||||||
public AuthRequest.AuthPasswordInterface password;
|
|
||||||
public boolean minecraftAccess;
|
|
||||||
|
|
||||||
public AuthorizeRequest() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public AuthorizeRequest(String login, AuthResponse.AuthContext context, AuthRequest.AuthPasswordInterface password, boolean minecraftAccess) {
|
|
||||||
this.login = login;
|
|
||||||
this.context = context;
|
|
||||||
this.password = password;
|
|
||||||
this.minecraftAccess = minecraftAccess;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class RefreshTokenRequest {
|
|
||||||
public String refreshToken;
|
|
||||||
public AuthResponse.AuthContext context;
|
|
||||||
|
|
||||||
public RefreshTokenRequest(String refreshToken, AuthResponse.AuthContext context) {
|
|
||||||
this.refreshToken = refreshToken;
|
|
||||||
this.context = context;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public record HardwareRequest(HttpUserHardware userHardware, byte[] key, HttpUserSession userSession) {
|
|
||||||
|
|
||||||
public HardwareRequest(HttpUserHardware userHardware) {
|
|
||||||
this(userHardware, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HardwareRequest(HttpUserHardware userHardware, byte[] key) {
|
|
||||||
this(userHardware, key, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HardwareRequest(HttpUserHardware userHardware, HttpUserSession userSession) {
|
|
||||||
this(userHardware, null, userSession);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HardwareRequest(byte[] key) {
|
|
||||||
this(null, key, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class HttpUserSession implements UserSession {
|
|
||||||
private String id;
|
|
||||||
private HttpUser user;
|
|
||||||
private String minecraftAccessToken;
|
|
||||||
private long expireIn;
|
|
||||||
|
|
||||||
public HttpUserSession() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUserSession(String id, HttpUser user, String minecraftAccessToken, long expireIn) {
|
|
||||||
this.id = id;
|
|
||||||
this.user = user;
|
|
||||||
this.minecraftAccessToken = minecraftAccessToken;
|
|
||||||
this.expireIn = expireIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getID() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public User getUser() {
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMinecraftAccessToken() {
|
|
||||||
return minecraftAccessToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getExpireIn() {
|
|
||||||
return expireIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "HttpUserSession{" +
|
|
||||||
"id='" + id + '\'' +
|
|
||||||
", user=" + user +
|
|
||||||
", minecraftAccessToken='" + minecraftAccessToken + '\'' +
|
|
||||||
", expireIn=" + expireIn +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class HttpUserHardware implements UserHardware {
|
|
||||||
private final HardwareReportRequest.HardwareInfo hardwareInfo;
|
|
||||||
private final long id;
|
|
||||||
private byte[] publicKey;
|
|
||||||
private boolean banned;
|
|
||||||
|
|
||||||
public HttpUserHardware(HardwareReportRequest.HardwareInfo hardwareInfo, byte[] publicKey, long id, boolean banned) {
|
|
||||||
this.hardwareInfo = hardwareInfo;
|
|
||||||
this.publicKey = publicKey;
|
|
||||||
this.id = id;
|
|
||||||
this.banned = banned;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUserHardware(HardwareReportRequest.HardwareInfo hardwareInfo) {
|
|
||||||
this.hardwareInfo = hardwareInfo;
|
|
||||||
this.id = Long.MIN_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUserHardware(HardwareReportRequest.HardwareInfo hardwareInfo, byte[] publicKey, boolean banned) {
|
|
||||||
this.hardwareInfo = hardwareInfo;
|
|
||||||
this.publicKey = publicKey;
|
|
||||||
this.banned = banned;
|
|
||||||
this.id = Long.MIN_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUserHardware(long id) {
|
|
||||||
this.id = id;
|
|
||||||
this.hardwareInfo = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HardwareReportRequest.HardwareInfo getHardwareInfo() {
|
|
||||||
return hardwareInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] getPublicKey() {
|
|
||||||
return publicKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId() {
|
|
||||||
return String.valueOf(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isBanned() {
|
|
||||||
return banned;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "HttpUserHardware{" +
|
|
||||||
"hardwareInfo=" + hardwareInfo +
|
|
||||||
", publicKey=" + (publicKey == null ? null : new String(Base64.getEncoder().encode(publicKey))) +
|
|
||||||
", id=" + id +
|
|
||||||
", banned=" + banned +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class HttpUser implements User, UserSupportTextures, UserSupportProperties, UserSupportHardware {
|
|
||||||
private String username;
|
|
||||||
private UUID uuid;
|
|
||||||
private String serverId;
|
|
||||||
private String accessToken;
|
|
||||||
private ClientPermissions permissions;
|
|
||||||
private Map<String, Texture> assets;
|
|
||||||
private Map<String, String> properties;
|
|
||||||
private long hwidId;
|
|
||||||
private transient HttpUserHardware hardware;
|
|
||||||
|
|
||||||
public HttpUser() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUser(String username, UUID uuid, String serverId, String accessToken, ClientPermissions permissions, long hwidId) {
|
|
||||||
this.username = username;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.serverId = serverId;
|
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.permissions = permissions;
|
|
||||||
this.hwidId = hwidId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUser(String username, UUID uuid, String serverId, String accessToken, ClientPermissions permissions, Texture skin, Texture cloak, long hwidId) {
|
|
||||||
this.username = username;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.serverId = serverId;
|
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.permissions = permissions;
|
|
||||||
this.hwidId = hwidId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUser(String username, UUID uuid, String serverId, String accessToken, ClientPermissions permissions, Texture skin, Texture cloak, Map<String, String> properties, long hwidId) {
|
|
||||||
this.username = username;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.serverId = serverId;
|
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.permissions = permissions;
|
|
||||||
this.properties = properties;
|
|
||||||
this.hwidId = hwidId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpUser(String username, UUID uuid, String serverId, String accessToken, ClientPermissions permissions, Map<String, Texture> assets, Map<String, String> properties, long hwidId) {
|
|
||||||
this.username = username;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.serverId = serverId;
|
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.permissions = permissions;
|
|
||||||
this.assets = assets;
|
|
||||||
this.properties = properties;
|
|
||||||
this.hwidId = hwidId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getUsername() {
|
|
||||||
return username;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UUID getUUID() {
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientPermissions getPermissions() {
|
|
||||||
return permissions;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Texture getSkinTexture() {
|
|
||||||
return assets.get("SKIN");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Texture getCloakTexture() {
|
|
||||||
return assets.get("CAPE");
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Texture> getAssets() {
|
|
||||||
if (assets == null) {
|
|
||||||
return new HashMap<>();
|
|
||||||
}
|
|
||||||
return assets;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, String> getProperties() {
|
|
||||||
if (properties == null) {
|
|
||||||
return new HashMap<>();
|
|
||||||
}
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "HttpUser{" +
|
|
||||||
"username='" + username + '\'' +
|
|
||||||
", uuid=" + uuid +
|
|
||||||
", serverId='" + serverId + '\'' +
|
|
||||||
", accessToken='" + accessToken + '\'' +
|
|
||||||
", permissions=" + permissions +
|
|
||||||
", assets=" + getAssets() +
|
|
||||||
", properties=" + properties +
|
|
||||||
", hwidId=" + hwidId +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UserHardware getHardware() {
|
|
||||||
if (hardware != null) return hardware;
|
|
||||||
HttpAuthCoreProvider.HttpUserHardware result = (HttpUserHardware) getHardwareInfoById(String.valueOf(hwidId));
|
|
||||||
hardware = result;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,6 +6,7 @@
|
||||||
import pro.gravit.launcher.HTTPRequest;
|
import pro.gravit.launcher.HTTPRequest;
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
import pro.gravit.launcher.profiles.Texture;
|
import pro.gravit.launcher.profiles.Texture;
|
||||||
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
@ -15,7 +16,7 @@
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class JsonTextureProvider extends TextureProvider {
|
public class JsonTextureProvider extends TextureProvider {
|
||||||
private static final Type MAP_TYPE = new TypeToken<Map<String, Texture>>() {
|
private static final Type MAP_TYPE = new TypeToken<Map<String, JsonTexture>>() {
|
||||||
}.getType();
|
}.getType();
|
||||||
private transient final Logger logger = LogManager.getLogger();
|
private transient final Logger logger = LogManager.getLogger();
|
||||||
public String url;
|
public String url;
|
||||||
|
@ -42,7 +43,7 @@ public Map<String, Texture> getAssets(UUID uuid, String username, String client)
|
||||||
try {
|
try {
|
||||||
var result = HTTPRequest.jsonRequest(null, "GET", new URL(RequestTextureProvider.getTextureURL(url, uuid, username, client)));
|
var result = HTTPRequest.jsonRequest(null, "GET", new URL(RequestTextureProvider.getTextureURL(url, uuid, username, client)));
|
||||||
|
|
||||||
Map<String, Texture> map = Launcher.gsonManager.gson.fromJson(result, MAP_TYPE);
|
Map<String, JsonTexture> map = Launcher.gsonManager.gson.fromJson(result, MAP_TYPE);
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
return new HashMap<>();
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
|
@ -54,10 +55,20 @@ public Map<String, Texture> getAssets(UUID uuid, String username, String client)
|
||||||
map.put("CAPE", map.get("cloak"));
|
map.put("CAPE", map.get("cloak"));
|
||||||
map.remove("cloak");
|
map.remove("cloak");
|
||||||
}
|
}
|
||||||
return map;
|
Map<String, Texture> res = new HashMap<>();
|
||||||
|
for(var e : map.entrySet()) {
|
||||||
|
res.put(e.getKey(), e.getValue().toTexture());
|
||||||
|
}
|
||||||
|
return res;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error("JsonTextureProvider", e);
|
logger.error("JsonTextureProvider", e);
|
||||||
return new HashMap<>();
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record JsonTexture(String url, String hash, Map<String, String> metadata) {
|
||||||
|
public Texture toTexture() {
|
||||||
|
return new Texture(url, hash == null ? null : SecurityHelper.fromHex(hash), metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue