mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
Вернуть коммиты на место (#197)
* [FIX] Фикс отправки json запросов к mojang * [FEATURE] [CRITICAL] AuthProviderPair * [FIX] Фикс автогенерации конфига * [FIX] брана проверка имени в Reload и Reconfigurable менеджерах * [FEATURE] textureProvider внесен в AuthProviderPair * [FIX] Реализация Request части и фикс ServerWrapper * [ANY] Обновление модулей
This commit is contained in:
parent
8def68fa90
commit
c562f48384
31 changed files with 230 additions and 194 deletions
|
@ -8,6 +8,8 @@
|
||||||
import ru.gravit.launcher.managers.GarbageManager;
|
import ru.gravit.launcher.managers.GarbageManager;
|
||||||
import ru.gravit.launcher.profiles.ClientProfile;
|
import ru.gravit.launcher.profiles.ClientProfile;
|
||||||
import ru.gravit.launcher.serialize.signed.SignedObjectHolder;
|
import ru.gravit.launcher.serialize.signed.SignedObjectHolder;
|
||||||
|
import ru.gravit.launchserver.auth.AuthLimiter;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.protect.NoProtectHandler;
|
import ru.gravit.launchserver.auth.protect.NoProtectHandler;
|
||||||
import ru.gravit.launchserver.auth.protect.ProtectHandler;
|
import ru.gravit.launchserver.auth.protect.ProtectHandler;
|
||||||
import ru.gravit.launchserver.components.AuthLimiterComponent;
|
import ru.gravit.launchserver.components.AuthLimiterComponent;
|
||||||
|
@ -64,10 +66,9 @@ public void reload() throws Exception {
|
||||||
}
|
}
|
||||||
config.verify();
|
config.verify();
|
||||||
Launcher.applyLauncherEnv(config.env);
|
Launcher.applyLauncherEnv(config.env);
|
||||||
for (AuthProvider provider : config.authProvider) {
|
for (AuthProviderPair auth : config.auth) {
|
||||||
provider.init();
|
auth.init();
|
||||||
}
|
}
|
||||||
config.authHandler.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Config {
|
public static final class Config {
|
||||||
|
@ -87,15 +88,37 @@ public static final class Config {
|
||||||
|
|
||||||
// Handlers & Providers
|
// Handlers & Providers
|
||||||
|
|
||||||
public AuthProvider[] authProvider;
|
public AuthProviderPair[] auth;
|
||||||
|
|
||||||
public AuthHandler authHandler;
|
private transient AuthProviderPair authDefault;
|
||||||
|
|
||||||
|
public AuthProviderPair getAuthProviderPair(String name)
|
||||||
|
{
|
||||||
|
for(AuthProviderPair pair : auth)
|
||||||
|
{
|
||||||
|
if(pair.name.equals(name)) return pair;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
public ProtectHandler protectHandler;
|
public ProtectHandler protectHandler;
|
||||||
|
|
||||||
public PermissionsHandler permissionsHandler;
|
public PermissionsHandler permissionsHandler;
|
||||||
|
|
||||||
public TextureProvider textureProvider;
|
public AuthProviderPair getAuthProviderPair()
|
||||||
|
{
|
||||||
|
if(authDefault != null) return authDefault;
|
||||||
|
for(AuthProviderPair pair : auth)
|
||||||
|
{
|
||||||
|
if(pair.isDefault)
|
||||||
|
{
|
||||||
|
authDefault = pair;
|
||||||
|
return pair;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionsHandler permissionsHandler;
|
||||||
|
|
||||||
public HWIDHandler hwidHandler;
|
public HWIDHandler hwidHandler;
|
||||||
|
|
||||||
|
@ -161,18 +184,24 @@ public void setAddress(String address) {
|
||||||
|
|
||||||
public void verify() {
|
public void verify() {
|
||||||
VerifyHelper.verify(getAddress(), VerifyHelper.NOT_EMPTY, "LaunchServer address can't be empty");
|
VerifyHelper.verify(getAddress(), VerifyHelper.NOT_EMPTY, "LaunchServer address can't be empty");
|
||||||
if (authHandler == null) {
|
if (auth == null || auth[0] == null) {
|
||||||
throw new NullPointerException("AuthHandler must not be null");
|
throw new NullPointerException("AuthHandler must not be null");
|
||||||
}
|
}
|
||||||
|
boolean isOneDefault = false;
|
||||||
|
for(AuthProviderPair pair : auth)
|
||||||
|
{
|
||||||
|
if(pair.isDefault)
|
||||||
|
{
|
||||||
|
isOneDefault = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if(protectHandler == null)
|
if(protectHandler == null)
|
||||||
{
|
{
|
||||||
throw new NullPointerException("ProtectHandler must not be null");
|
throw new NullPointerException("ProtectHandler must not be null");
|
||||||
}
|
}
|
||||||
if (authProvider == null || authProvider[0] == null) {
|
if(!isOneDefault)
|
||||||
throw new NullPointerException("AuthProvider must not be null");
|
{
|
||||||
}
|
throw new IllegalStateException("No auth pairs declared by default.");
|
||||||
if (textureProvider == null) {
|
|
||||||
throw new NullPointerException("TextureProvider must not be null");
|
|
||||||
}
|
}
|
||||||
if (permissionsHandler == null) {
|
if (permissionsHandler == null) {
|
||||||
throw new NullPointerException("PermissionsHandler must not be null");
|
throw new NullPointerException("PermissionsHandler must not be null");
|
||||||
|
@ -188,17 +217,7 @@ public void verify() {
|
||||||
public void close()
|
public void close()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
authHandler.close();
|
for (AuthProviderPair p : auth) p.close();
|
||||||
} catch (IOException e) {
|
|
||||||
LogHelper.error(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
for (AuthProvider p : authProvider) p.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
LogHelper.error(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
textureProvider.close();
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LogHelper.error(e);
|
LogHelper.error(e);
|
||||||
}
|
}
|
||||||
|
@ -442,7 +461,7 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE
|
||||||
}
|
}
|
||||||
config.verify();
|
config.verify();
|
||||||
Launcher.applyLauncherEnv(config.env);
|
Launcher.applyLauncherEnv(config.env);
|
||||||
for (AuthProvider provider : config.authProvider) {
|
for (AuthProviderPair provider : config.auth) {
|
||||||
provider.init();
|
provider.init();
|
||||||
}
|
}
|
||||||
if(config.protectHandler != null)
|
if(config.protectHandler != null)
|
||||||
|
@ -473,29 +492,29 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE
|
||||||
reloadManager.registerReloadable("launchServer", this);
|
reloadManager.registerReloadable("launchServer", this);
|
||||||
if (config.permissionsHandler instanceof Reloadable)
|
if (config.permissionsHandler instanceof Reloadable)
|
||||||
reloadManager.registerReloadable("permissionsHandler", (Reloadable) config.permissionsHandler);
|
reloadManager.registerReloadable("permissionsHandler", (Reloadable) config.permissionsHandler);
|
||||||
if (config.authHandler instanceof Reloadable)
|
for (int i = 0; i < config.auth.length; ++i) {
|
||||||
reloadManager.registerReloadable("authHandler", (Reloadable) config.authHandler);
|
AuthProviderPair pair = config.auth[i];
|
||||||
for (int i = 0; i < config.authProvider.length; ++i) {
|
if (pair.provider instanceof Reloadable)
|
||||||
AuthProvider provider = config.authProvider[i];
|
reloadManager.registerReloadable("auth.".concat(pair.name).concat(".provider"), (Reloadable) pair.provider);
|
||||||
if (provider instanceof Reloadable)
|
if (pair.handler instanceof Reloadable)
|
||||||
reloadManager.registerReloadable("authHandler".concat(String.valueOf(i)), (Reloadable) provider);
|
reloadManager.registerReloadable("auth.".concat(pair.name).concat(".handler"), (Reloadable) pair.handler);
|
||||||
|
if (pair.textureProvider instanceof Reloadable)
|
||||||
|
reloadManager.registerReloadable("auth.".concat(pair.name).concat(".texture"), (Reloadable) pair.textureProvider);
|
||||||
}
|
}
|
||||||
if (config.textureProvider instanceof Reloadable)
|
|
||||||
reloadManager.registerReloadable("textureProvider", (Reloadable) config.textureProvider);
|
|
||||||
|
|
||||||
Arrays.stream(config.mirrors).forEach(mirrorManager::addMirror);
|
Arrays.stream(config.mirrors).forEach(mirrorManager::addMirror);
|
||||||
|
|
||||||
if (config.permissionsHandler instanceof Reconfigurable)
|
if (config.permissionsHandler instanceof Reconfigurable)
|
||||||
reconfigurableManager.registerReconfigurable("permissionsHandler", (Reconfigurable) config.permissionsHandler);
|
reconfigurableManager.registerReconfigurable("permissionsHandler", (Reconfigurable) config.permissionsHandler);
|
||||||
if (config.authHandler instanceof Reconfigurable)
|
for (int i = 0; i < config.auth.length; ++i) {
|
||||||
reconfigurableManager.registerReconfigurable("authHandler", (Reconfigurable) config.authHandler);
|
AuthProviderPair pair = config.auth[i];
|
||||||
for (int i = 0; i < config.authProvider.length; ++i) {
|
if (pair.provider instanceof Reconfigurable)
|
||||||
AuthProvider provider = config.authProvider[i];
|
reconfigurableManager.registerReconfigurable("auth.".concat(pair.name).concat(".provider"), (Reconfigurable) pair.provider);
|
||||||
if (provider instanceof Reconfigurable)
|
if (pair.handler instanceof Reconfigurable)
|
||||||
reconfigurableManager.registerReconfigurable("authHandler".concat(String.valueOf(i)), (Reconfigurable) provider);
|
reconfigurableManager.registerReconfigurable("auth.".concat(pair.name).concat(".handler"), (Reconfigurable) pair.handler);
|
||||||
|
if (pair.textureProvider instanceof Reconfigurable)
|
||||||
|
reconfigurableManager.registerReconfigurable("auth.".concat(pair.name).concat(".texture"), (Reconfigurable) pair.textureProvider);
|
||||||
}
|
}
|
||||||
if (config.textureProvider instanceof Reconfigurable)
|
|
||||||
reconfigurableManager.registerReconfigurable("textureProvider", (Reconfigurable) config.textureProvider);
|
|
||||||
|
|
||||||
Arrays.stream(config.mirrors).forEach(mirrorManager::addMirror);
|
Arrays.stream(config.mirrors).forEach(mirrorManager::addMirror);
|
||||||
|
|
||||||
|
@ -622,12 +641,12 @@ private void generateConfigIfNotExists() throws IOException {
|
||||||
newConfig.launch4j.productVer = newConfig.launch4j.fileVer;
|
newConfig.launch4j.productVer = newConfig.launch4j.fileVer;
|
||||||
newConfig.env = LauncherConfig.LauncherEnvironment.STD;
|
newConfig.env = LauncherConfig.LauncherEnvironment.STD;
|
||||||
newConfig.startScript = JVMHelper.OS_TYPE.equals(JVMHelper.OS.MUSTDIE) ? "." + File.separator + "start.bat" : "." + File.separator + "start.sh";
|
newConfig.startScript = JVMHelper.OS_TYPE.equals(JVMHelper.OS.MUSTDIE) ? "." + File.separator + "start.bat" : "." + File.separator + "start.sh";
|
||||||
newConfig.authHandler = new MemoryAuthHandler();
|
|
||||||
newConfig.hwidHandler = new AcceptHWIDHandler();
|
newConfig.hwidHandler = new AcceptHWIDHandler();
|
||||||
|
newConfig.auth = new AuthProviderPair[]{ new AuthProviderPair(new RejectAuthProvider("Настройте authProvider"),
|
||||||
|
new MemoryAuthHandler(),
|
||||||
|
new RequestTextureProvider("http://example.com/skins/%username%.png", "http://example.com/cloaks/%username%.png")
|
||||||
|
, "std") };
|
||||||
newConfig.protectHandler = new NoProtectHandler();
|
newConfig.protectHandler = new NoProtectHandler();
|
||||||
|
|
||||||
newConfig.authProvider = new AuthProvider[]{new RejectAuthProvider("Настройте authProvider")};
|
|
||||||
newConfig.textureProvider = new RequestTextureProvider("http://example.com/skins/%username%.png", "http://example.com/cloaks/%username%.png");
|
|
||||||
newConfig.permissionsHandler = new JsonFilePermissionsHandler();
|
newConfig.permissionsHandler = new JsonFilePermissionsHandler();
|
||||||
newConfig.port = 7240;
|
newConfig.port = 7240;
|
||||||
newConfig.bindAddress = "0.0.0.0";
|
newConfig.bindAddress = "0.0.0.0";
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package ru.gravit.launchserver.auth;
|
||||||
|
|
||||||
|
import ru.gravit.launchserver.auth.handler.AuthHandler;
|
||||||
|
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
||||||
|
import ru.gravit.launchserver.texture.TextureProvider;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class AuthProviderPair {
|
||||||
|
public AuthProvider provider;
|
||||||
|
public AuthHandler handler;
|
||||||
|
public TextureProvider textureProvider;
|
||||||
|
public String name;
|
||||||
|
public boolean isDefault = true;
|
||||||
|
|
||||||
|
public AuthProviderPair(AuthProvider provider, AuthHandler handler, TextureProvider textureProvider, String name) {
|
||||||
|
this.provider = provider;
|
||||||
|
this.handler = handler;
|
||||||
|
this.textureProvider = textureProvider;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
provider.init();
|
||||||
|
handler.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() throws IOException {
|
||||||
|
provider.close();
|
||||||
|
handler.close();
|
||||||
|
textureProvider.close();
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,10 +36,6 @@ public static void registerProviders() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AuthHandler getAccociateHandler(int this_position) {
|
|
||||||
return LaunchServer.server.config.authHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public abstract AuthProviderResult auth(String login, String password, String ip) throws Exception;
|
public abstract AuthProviderResult auth(String login, String password, String ip) throws Exception;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.gravit.launchserver.command.auth;
|
package ru.gravit.launchserver.command.auth;
|
||||||
|
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
||||||
import ru.gravit.launchserver.command.Command;
|
import ru.gravit.launchserver.command.Command;
|
||||||
|
@ -15,7 +16,7 @@ public AuthCommand(LaunchServer server) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getArgsDescription() {
|
public String getArgsDescription() {
|
||||||
return "<login> <password>";
|
return "<login> <password> <auth_id>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,15 +27,20 @@ public String getUsageDescription() {
|
||||||
@Override
|
@Override
|
||||||
public void invoke(String... args) throws Exception {
|
public void invoke(String... args) throws Exception {
|
||||||
verifyArgs(args, 2);
|
verifyArgs(args, 2);
|
||||||
|
AuthProviderPair pair;
|
||||||
|
if(args.length > 2) pair = server.config.getAuthProviderPair(args[2]);
|
||||||
|
else pair = server.config.getAuthProviderPair();
|
||||||
|
if(pair == null) throw new IllegalStateException(String.format("Auth %s not found", args[1]));
|
||||||
|
|
||||||
String login = args[0];
|
String login = args[0];
|
||||||
String password = args[1];
|
String password = args[1];
|
||||||
int auth_id = 0;
|
int auth_id = 0;
|
||||||
if (args.length >= 3) auth_id = Integer.valueOf(args[3]);
|
if (args.length >= 3) auth_id = Integer.valueOf(args[3]);
|
||||||
|
|
||||||
// Authenticate
|
// Authenticate
|
||||||
AuthProvider provider = server.config.authProvider[auth_id];
|
AuthProvider provider = pair.provider;
|
||||||
AuthProviderResult result = provider.auth(login, password, "127.0.0.1");
|
AuthProviderResult result = provider.auth(login, password, "127.0.0.1");
|
||||||
UUID uuid = provider.getAccociateHandler(auth_id).auth(result);
|
UUID uuid = pair.handler.auth(result);
|
||||||
|
|
||||||
// Print auth successful message
|
// Print auth successful message
|
||||||
LogHelper.subInfo("UUID: %s, Username: '%s', Access Token: '%s'", uuid, result.username, result.accessToken);
|
LogHelper.subInfo("UUID: %s, Username: '%s', Access Token: '%s'", uuid, result.username, result.accessToken);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.gravit.launchserver.command.auth;
|
package ru.gravit.launchserver.command.auth;
|
||||||
|
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.command.Command;
|
import ru.gravit.launchserver.command.Command;
|
||||||
import ru.gravit.utils.command.CommandException;
|
import ru.gravit.utils.command.CommandException;
|
||||||
import ru.gravit.utils.helper.LogHelper;
|
import ru.gravit.utils.helper.LogHelper;
|
||||||
|
@ -15,7 +16,7 @@ public UUIDToUsernameCommand(LaunchServer server) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getArgsDescription() {
|
public String getArgsDescription() {
|
||||||
return "<uuid>";
|
return "<uuid> <auth_id>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,10 +27,15 @@ public String getUsageDescription() {
|
||||||
@Override
|
@Override
|
||||||
public void invoke(String... args) throws CommandException, IOException {
|
public void invoke(String... args) throws CommandException, IOException {
|
||||||
verifyArgs(args, 1);
|
verifyArgs(args, 1);
|
||||||
|
AuthProviderPair pair;
|
||||||
|
if(args.length > 1) pair = server.config.getAuthProviderPair(args[1]);
|
||||||
|
else pair = server.config.getAuthProviderPair();
|
||||||
|
if(pair == null) throw new IllegalStateException(String.format("Auth %s not found", args[1]));
|
||||||
|
|
||||||
UUID uuid = parseUUID(args[0]);
|
UUID uuid = parseUUID(args[0]);
|
||||||
|
|
||||||
// Get UUID by username
|
// Get UUID by username
|
||||||
String username = server.config.authHandler.uuidToUsername(uuid);
|
String username = pair.handler.uuidToUsername(uuid);
|
||||||
if (username == null)
|
if (username == null)
|
||||||
throw new CommandException("Unknown UUID: " + uuid);
|
throw new CommandException("Unknown UUID: " + uuid);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.gravit.launchserver.command.auth;
|
package ru.gravit.launchserver.command.auth;
|
||||||
|
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.command.Command;
|
import ru.gravit.launchserver.command.Command;
|
||||||
import ru.gravit.utils.command.CommandException;
|
import ru.gravit.utils.command.CommandException;
|
||||||
import ru.gravit.utils.helper.LogHelper;
|
import ru.gravit.utils.helper.LogHelper;
|
||||||
|
@ -15,7 +16,7 @@ public UsernameToUUIDCommand(LaunchServer server) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getArgsDescription() {
|
public String getArgsDescription() {
|
||||||
return "<username>";
|
return "<username> <auth_id>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,10 +27,14 @@ public String getUsageDescription() {
|
||||||
@Override
|
@Override
|
||||||
public void invoke(String... args) throws CommandException, IOException {
|
public void invoke(String... args) throws CommandException, IOException {
|
||||||
verifyArgs(args, 1);
|
verifyArgs(args, 1);
|
||||||
|
AuthProviderPair pair;
|
||||||
|
if(args.length > 1) pair = server.config.getAuthProviderPair(args[1]);
|
||||||
|
else pair = server.config.getAuthProviderPair();
|
||||||
|
if(pair == null) throw new IllegalStateException(String.format("Auth %s not found", args[1]));
|
||||||
String username = parseUsername(args[0]);
|
String username = parseUsername(args[0]);
|
||||||
|
|
||||||
// Get UUID by username
|
// Get UUID by username
|
||||||
UUID uuid = server.config.authHandler.usernameToUUID(username);
|
UUID uuid = pair.handler.usernameToUUID(username);
|
||||||
if (uuid == null)
|
if (uuid == null)
|
||||||
throw new CommandException(String.format("Unknown username: '%s'", username));
|
throw new CommandException(String.format("Unknown username: '%s'", username));
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.gravit.launchserver.command.dump;
|
package ru.gravit.launchserver.command.dump;
|
||||||
|
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.handler.CachedAuthHandler;
|
import ru.gravit.launchserver.auth.handler.CachedAuthHandler;
|
||||||
import ru.gravit.launchserver.command.Command;
|
import ru.gravit.launchserver.command.Command;
|
||||||
import ru.gravit.utils.helper.IOHelper;
|
import ru.gravit.utils.helper.IOHelper;
|
||||||
|
@ -19,7 +20,7 @@ public DumpEntryCacheCommand(LaunchServer server) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getArgsDescription() {
|
public String getArgsDescription() {
|
||||||
return "[load/unload] [filename]";
|
return "[load/unload] [auth_id] [filename]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,12 +30,14 @@ public String getUsageDescription() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invoke(String... args) throws Exception {
|
public void invoke(String... args) throws Exception {
|
||||||
verifyArgs(args, 2);
|
verifyArgs(args, 3);
|
||||||
if (!(server.config.authHandler instanceof CachedAuthHandler))
|
AuthProviderPair pair = server.config.getAuthProviderPair(args[1]);
|
||||||
|
if(pair == null) throw new IllegalStateException(String.format("Auth %s not found", args[1]));
|
||||||
|
if (!(pair.handler instanceof CachedAuthHandler))
|
||||||
throw new UnsupportedOperationException("This command used only CachedAuthHandler");
|
throw new UnsupportedOperationException("This command used only CachedAuthHandler");
|
||||||
CachedAuthHandler authHandler = (CachedAuthHandler) server.config.authHandler;
|
CachedAuthHandler authHandler = (CachedAuthHandler) pair.handler;
|
||||||
if (args[0].equals("unload")) {
|
if (args[0].equals("unload")) {
|
||||||
LogHelper.info("CachedAuthHandler write to %s", args[1]);
|
LogHelper.info("CachedAuthHandler write to %s", args[2]);
|
||||||
Map<UUID, CachedAuthHandler.Entry> entryCache = authHandler.getEntryCache();
|
Map<UUID, CachedAuthHandler.Entry> entryCache = authHandler.getEntryCache();
|
||||||
Map<String, UUID> usernamesCache = authHandler.getUsernamesCache();
|
Map<String, UUID> usernamesCache = authHandler.getUsernamesCache();
|
||||||
EntryAndUsername serializable = new EntryAndUsername();
|
EntryAndUsername serializable = new EntryAndUsername();
|
||||||
|
|
|
@ -72,7 +72,6 @@ public static void registerCommands(ru.gravit.utils.command.CommandHandler handl
|
||||||
handler.registerCommand("config", new ConfigCommand(server));
|
handler.registerCommand("config", new ConfigCommand(server));
|
||||||
handler.registerCommand("configHelp", new ConfigHelpCommand(server));
|
handler.registerCommand("configHelp", new ConfigHelpCommand(server));
|
||||||
handler.registerCommand("configList", new ConfigListCommand(server));
|
handler.registerCommand("configList", new ConfigListCommand(server));
|
||||||
handler.registerCommand("swapAuthProvider", new SwapAuthProviderCommand(server));
|
|
||||||
handler.registerCommand("serverStatus", new ServerStatusCommand(server));
|
handler.registerCommand("serverStatus", new ServerStatusCommand(server));
|
||||||
handler.registerCommand("checkInstall", new CheckInstallCommand(server));
|
handler.registerCommand("checkInstall", new CheckInstallCommand(server));
|
||||||
handler.registerCommand("multi", new MultiCommand(server));
|
handler.registerCommand("multi", new MultiCommand(server));
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.gravit.launchserver.command.service;
|
package ru.gravit.launchserver.command.service;
|
||||||
|
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.handler.CachedAuthHandler;
|
import ru.gravit.launchserver.auth.handler.CachedAuthHandler;
|
||||||
import ru.gravit.launchserver.command.Command;
|
import ru.gravit.launchserver.command.Command;
|
||||||
import ru.gravit.utils.helper.JVMHelper;
|
import ru.gravit.utils.helper.JVMHelper;
|
||||||
|
@ -33,8 +34,12 @@ public void invoke(String... args) {
|
||||||
LogHelper.info("Uptime: %d days %d hours %d minutes %d seconds", days, hour, min, second);
|
LogHelper.info("Uptime: %d days %d hours %d minutes %d seconds", days, hour, min, second);
|
||||||
LogHelper.info("Uptime (double): %f", (double) JVMHelper.RUNTIME_MXBEAN.getUptime() / 1000);
|
LogHelper.info("Uptime (double): %f", (double) JVMHelper.RUNTIME_MXBEAN.getUptime() / 1000);
|
||||||
LogHelper.info("Sessions: %d | Modules: %d | Commands: %d", server.sessionManager.getSessions().size(), server.modulesManager.modules.size(), server.commandHandler.commandsMap().size());
|
LogHelper.info("Sessions: %d | Modules: %d | Commands: %d", server.sessionManager.getSessions().size(), server.modulesManager.modules.size(), server.commandHandler.commandsMap().size());
|
||||||
if (server.config.authHandler instanceof CachedAuthHandler) {
|
for(AuthProviderPair pair : server.config.auth)
|
||||||
LogHelper.info("AuthHandler: EntryCache: %d | usernameCache: %d", ((CachedAuthHandler) server.config.authHandler).getEntryCache().size(), ((CachedAuthHandler) server.config.authHandler).getUsernamesCache().size());
|
{
|
||||||
|
if (pair.handler instanceof CachedAuthHandler) {
|
||||||
|
LogHelper.info("AuthHandler %s: EntryCache: %d | usernameCache: %d", pair.name, ((CachedAuthHandler) pair.handler).getEntryCache().size(), ((CachedAuthHandler) pair.handler).getUsernamesCache().size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
package ru.gravit.launchserver.command.service;
|
|
||||||
|
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
|
||||||
import ru.gravit.launchserver.auth.provider.AcceptAuthProvider;
|
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
|
||||||
import ru.gravit.launchserver.auth.provider.RejectAuthProvider;
|
|
||||||
import ru.gravit.launchserver.command.Command;
|
|
||||||
import ru.gravit.utils.helper.LogHelper;
|
|
||||||
|
|
||||||
public class SwapAuthProviderCommand extends Command {
|
|
||||||
public AuthProvider[] providersCache;
|
|
||||||
|
|
||||||
public SwapAuthProviderCommand(LaunchServer server) {
|
|
||||||
super(server);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getArgsDescription() {
|
|
||||||
return "[index] [accept/reject/undo] [message(for reject)]";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getUsageDescription() {
|
|
||||||
return "Change authProvider";
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("resource")
|
|
||||||
@Override
|
|
||||||
public void invoke(String... args) throws Exception {
|
|
||||||
verifyArgs(args, 2);
|
|
||||||
if (providersCache == null) providersCache = new AuthProvider[server.config.authProvider.length];
|
|
||||||
int index = Integer.valueOf(args[0]);
|
|
||||||
switch (args[1]) {
|
|
||||||
case "accept":
|
|
||||||
if (providersCache[index] == null) {
|
|
||||||
AcceptAuthProvider provider = new AcceptAuthProvider();
|
|
||||||
providersCache[index] = server.config.authProvider[index];
|
|
||||||
server.config.authProvider[index] = provider;
|
|
||||||
LogHelper.info("AuthProvider[%d] is AcceptAuthProvider", index);
|
|
||||||
} else LogHelper.error("Changes detected. Use undo");
|
|
||||||
break;
|
|
||||||
case "reject":
|
|
||||||
if (providersCache[index] == null) {
|
|
||||||
RejectAuthProvider rejectAuthProvider;
|
|
||||||
if (args.length < 3) rejectAuthProvider = new RejectAuthProvider();
|
|
||||||
else rejectAuthProvider = new RejectAuthProvider(args[2]);
|
|
||||||
providersCache[index] = server.config.authProvider[index];
|
|
||||||
server.config.authProvider[index] = rejectAuthProvider;
|
|
||||||
LogHelper.info("AuthProvider[%d] is RejectAuthProvider", index);
|
|
||||||
} else LogHelper.error("Changes detected. Use undo");
|
|
||||||
break;
|
|
||||||
case "undo":
|
|
||||||
if (providersCache[index] == null) LogHelper.error("Cache clean. Undo impossible");
|
|
||||||
else {
|
|
||||||
server.config.authProvider[index].close();
|
|
||||||
server.config.authProvider[index] = providersCache[index];
|
|
||||||
providersCache[index] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -11,7 +11,6 @@ public class ReconfigurableManager {
|
||||||
private final HashMap<String, Reconfigurable> RECONFIGURABLE = new HashMap<>();
|
private final HashMap<String, Reconfigurable> RECONFIGURABLE = new HashMap<>();
|
||||||
|
|
||||||
public void registerReconfigurable(String name, Reconfigurable reconfigurable) {
|
public void registerReconfigurable(String name, Reconfigurable reconfigurable) {
|
||||||
VerifyHelper.verifyIDName(name);
|
|
||||||
VerifyHelper.putIfAbsent(RECONFIGURABLE, name, Objects.requireNonNull(reconfigurable, "adapter"),
|
VerifyHelper.putIfAbsent(RECONFIGURABLE, name, Objects.requireNonNull(reconfigurable, "adapter"),
|
||||||
String.format("Reloadable has been already registered: '%s'", name));
|
String.format("Reloadable has been already registered: '%s'", name));
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@ public class ReloadManager {
|
||||||
private final HashMap<String, Reloadable> RELOADABLES = new HashMap<>();
|
private final HashMap<String, Reloadable> RELOADABLES = new HashMap<>();
|
||||||
|
|
||||||
public void registerReloadable(String name, Reloadable reloadable) {
|
public void registerReloadable(String name, Reloadable reloadable) {
|
||||||
VerifyHelper.verifyIDName(name);
|
|
||||||
VerifyHelper.putIfAbsent(RELOADABLES, name, Objects.requireNonNull(reloadable, "adapter"),
|
VerifyHelper.putIfAbsent(RELOADABLES, name, Objects.requireNonNull(reloadable, "adapter"),
|
||||||
String.format("Reloadable has been already registered: '%s'", name));
|
String.format("Reloadable has been already registered: '%s'", name));
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import ru.gravit.launcher.serialize.SerializeLimits;
|
import ru.gravit.launcher.serialize.SerializeLimits;
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
import ru.gravit.launchserver.auth.AuthException;
|
import ru.gravit.launchserver.auth.AuthException;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.hwid.HWIDException;
|
import ru.gravit.launchserver.auth.hwid.HWIDException;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
||||||
|
@ -64,9 +65,8 @@ public void reply() throws Exception {
|
||||||
String client = null;
|
String client = null;
|
||||||
if (isClient)
|
if (isClient)
|
||||||
client = input.readString(SerializeLimits.MAX_CLIENT);
|
client = input.readString(SerializeLimits.MAX_CLIENT);
|
||||||
int auth_id = input.readInt();
|
String auth_id = input.readString(SerializeLimits.MAX_QUEUE_SIZE);
|
||||||
String hwid_str = input.readString(SerializeLimits.MAX_HWID_STR);
|
String hwid_str = input.readString(SerializeLimits.MAX_HWID_STR);
|
||||||
if (auth_id + 1 > server.config.authProvider.length || auth_id < 0) auth_id = 0;
|
|
||||||
byte[] encryptedPassword = input.readByteArray(SecurityHelper.CRYPTO_MAX_LENGTH);
|
byte[] encryptedPassword = input.readByteArray(SecurityHelper.CRYPTO_MAX_LENGTH);
|
||||||
String customText = input.readString(SerializeLimits.MAX_CUSTOM_TEXT);
|
String customText = input.readString(SerializeLimits.MAX_CUSTOM_TEXT);
|
||||||
// Decrypt password
|
// Decrypt password
|
||||||
|
@ -82,7 +82,11 @@ public void reply() throws Exception {
|
||||||
// Authenticate
|
// Authenticate
|
||||||
debug("Login: '%s', Password: '%s'", login, echo(password.length()));
|
debug("Login: '%s', Password: '%s'", login, echo(password.length()));
|
||||||
AuthProviderResult result;
|
AuthProviderResult result;
|
||||||
AuthProvider provider = server.config.authProvider[auth_id];
|
AuthProviderPair pair;
|
||||||
|
if(auth_id.isEmpty()) pair = server.config.getAuthProviderPair();
|
||||||
|
else pair = server.config.getAuthProviderPair(auth_id);
|
||||||
|
if(pair == null) requestError("Auth type not found");
|
||||||
|
AuthProvider provider = pair.provider;
|
||||||
clientData.type = Client.Type.USER;
|
clientData.type = Client.Type.USER;
|
||||||
AuthContext context = new AuthContext(session, login, password.length(), customText, client, hwid_str, ip, false);
|
AuthContext context = new AuthContext(session, login, password.length(), customText, client, hwid_str, ip, false);
|
||||||
try {
|
try {
|
||||||
|
@ -125,10 +129,12 @@ public void reply() throws Exception {
|
||||||
clientData.isAuth = true;
|
clientData.isAuth = true;
|
||||||
clientData.permissions = result.permissions;
|
clientData.permissions = result.permissions;
|
||||||
clientData.username = result.username;
|
clientData.username = result.username;
|
||||||
|
clientData.auth_id = auth_id;
|
||||||
|
clientData.updateAuth();
|
||||||
// Authenticate on server (and get UUID)
|
// Authenticate on server (and get UUID)
|
||||||
UUID uuid;
|
UUID uuid;
|
||||||
try {
|
try {
|
||||||
uuid = server.config.authHandler.auth(result);
|
uuid = pair.handler.auth(result);
|
||||||
} catch (AuthException e) {
|
} catch (AuthException e) {
|
||||||
requestError(e.getMessage());
|
requestError(e.getMessage());
|
||||||
return;
|
return;
|
||||||
|
@ -140,7 +146,7 @@ public void reply() throws Exception {
|
||||||
String protectToken = server.config.protectHandler.generateSecureToken(context);
|
String protectToken = server.config.protectHandler.generateSecureToken(context);
|
||||||
writeNoError(output);
|
writeNoError(output);
|
||||||
// Write profile and UUID
|
// Write profile and UUID
|
||||||
ProfileByUUIDResponse.getProfile(server, uuid, result.username, client).write(output);
|
ProfileByUUIDResponse.getProfile(server, uuid, result.username, client, clientData.auth.textureProvider).write(output);
|
||||||
output.writeASCII(result.accessToken, -SecurityHelper.TOKEN_STRING_LENGTH);
|
output.writeASCII(result.accessToken, -SecurityHelper.TOKEN_STRING_LENGTH);
|
||||||
clientData.permissions.write(output);
|
clientData.permissions.write(output);
|
||||||
output.writeString(protectToken, SerializeLimits.MAX_CUSTOM_TEXT);
|
output.writeString(protectToken, SerializeLimits.MAX_CUSTOM_TEXT);
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
import ru.gravit.launcher.serialize.SerializeLimits;
|
import ru.gravit.launcher.serialize.SerializeLimits;
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
import ru.gravit.launchserver.auth.AuthException;
|
import ru.gravit.launchserver.auth.AuthException;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.hwid.HWIDException;
|
import ru.gravit.launchserver.auth.hwid.HWIDException;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
||||||
|
@ -36,8 +37,7 @@ public AuthServerResponse(LaunchServer server, long session, HInput input, HOutp
|
||||||
public void reply() throws Exception {
|
public void reply() throws Exception {
|
||||||
String login = input.readString(SerializeLimits.MAX_LOGIN);
|
String login = input.readString(SerializeLimits.MAX_LOGIN);
|
||||||
String client = input.readString(SerializeLimits.MAX_CLIENT);
|
String client = input.readString(SerializeLimits.MAX_CLIENT);
|
||||||
int auth_id = input.readInt();
|
String auth_id = input.readString(SerializeLimits.MAX_QUEUE_SIZE);
|
||||||
if (auth_id + 1 > server.config.authProvider.length || auth_id < 0) auth_id = 0;
|
|
||||||
byte[] encryptedPassword = input.readByteArray(SecurityHelper.CRYPTO_MAX_LENGTH);
|
byte[] encryptedPassword = input.readByteArray(SecurityHelper.CRYPTO_MAX_LENGTH);
|
||||||
// Decrypt password
|
// Decrypt password
|
||||||
String password;
|
String password;
|
||||||
|
@ -51,7 +51,11 @@ public void reply() throws Exception {
|
||||||
// Authenticate
|
// Authenticate
|
||||||
debug("ServerLogin: '%s', Password: '%s'", login, echo(password.length()));
|
debug("ServerLogin: '%s', Password: '%s'", login, echo(password.length()));
|
||||||
AuthProviderResult result;
|
AuthProviderResult result;
|
||||||
AuthProvider provider = server.config.authProvider[auth_id];
|
AuthProviderPair pair;
|
||||||
|
if(auth_id.isEmpty()) pair = server.config.getAuthProviderPair();
|
||||||
|
else pair = server.config.getAuthProviderPair(auth_id);
|
||||||
|
if(pair == null) requestError("Auth type not found");
|
||||||
|
AuthProvider provider = pair.provider;
|
||||||
try {
|
try {
|
||||||
result = provider.auth(login, password, ip);
|
result = provider.auth(login, password, ip);
|
||||||
if (!VerifyHelper.isValidUsername(result.username)) {
|
if (!VerifyHelper.isValidUsername(result.username)) {
|
||||||
|
@ -83,6 +87,8 @@ public void reply() throws Exception {
|
||||||
}
|
}
|
||||||
debug("ServerAuth: '%s' -> '%s', '%s'", login, result.username, result.accessToken);
|
debug("ServerAuth: '%s' -> '%s', '%s'", login, result.username, result.accessToken);
|
||||||
clientData.isAuth = true;
|
clientData.isAuth = true;
|
||||||
|
clientData.auth_id = auth_id;
|
||||||
|
clientData.updateAuth();
|
||||||
writeNoError(output);
|
writeNoError(output);
|
||||||
clientData.permissions.write(output);
|
clientData.permissions.write(output);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public void reply() throws IOException {
|
||||||
UUID uuid;
|
UUID uuid;
|
||||||
try {
|
try {
|
||||||
server.authHookManager.checkServerHook(username, serverID);
|
server.authHookManager.checkServerHook(username, serverID);
|
||||||
uuid = server.config.authHandler.checkServer(username, serverID);
|
uuid = clientData.auth.handler.checkServer(username, serverID);
|
||||||
} catch (AuthException e) {
|
} catch (AuthException e) {
|
||||||
requestError(e.getMessage());
|
requestError(e.getMessage());
|
||||||
return;
|
return;
|
||||||
|
@ -48,6 +48,6 @@ public void reply() throws IOException {
|
||||||
// Write profile and UUID
|
// Write profile and UUID
|
||||||
output.writeBoolean(uuid != null);
|
output.writeBoolean(uuid != null);
|
||||||
if (uuid != null)
|
if (uuid != null)
|
||||||
ProfileByUUIDResponse.getProfile(server, uuid, username, client).write(output);
|
ProfileByUUIDResponse.getProfile(server, uuid, username, client, clientData.auth.textureProvider).write(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ public void reply() throws IOException {
|
||||||
boolean success;
|
boolean success;
|
||||||
try {
|
try {
|
||||||
server.authHookManager.joinServerHook(username, accessToken, serverID);
|
server.authHookManager.joinServerHook(username, accessToken, serverID);
|
||||||
success = server.config.authHandler.joinServer(username, accessToken, serverID);
|
success = clientData.auth.handler.joinServer(username, accessToken, serverID);
|
||||||
} catch (AuthException e) {
|
} catch (AuthException e) {
|
||||||
requestError(e.getMessage());
|
requestError(e.getMessage());
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -30,6 +30,6 @@ public void reply() throws IOException {
|
||||||
|
|
||||||
// Respond with profiles array
|
// Respond with profiles array
|
||||||
for (int i = 0; i < usernames.length; i++)
|
for (int i = 0; i < usernames.length; i++)
|
||||||
ProfileByUsernameResponse.writeProfile(server, output, usernames[i], clients[i]);
|
ProfileByUsernameResponse.writeProfile(server, output, usernames[i], clients[i], clientData.auth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
import ru.gravit.launchserver.response.Response;
|
import ru.gravit.launchserver.response.Response;
|
||||||
import ru.gravit.launchserver.socket.Client;
|
import ru.gravit.launchserver.socket.Client;
|
||||||
|
import ru.gravit.launchserver.texture.TextureProvider;
|
||||||
import ru.gravit.utils.helper.LogHelper;
|
import ru.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -15,11 +16,11 @@
|
||||||
|
|
||||||
public final class ProfileByUUIDResponse extends Response {
|
public final class ProfileByUUIDResponse extends Response {
|
||||||
|
|
||||||
public static PlayerProfile getProfile(LaunchServer server, UUID uuid, String username, String client) {
|
public static PlayerProfile getProfile(LaunchServer server, UUID uuid, String username, String client, TextureProvider textureProvider) {
|
||||||
// Get skin texture
|
// Get skin texture
|
||||||
Texture skin;
|
Texture skin;
|
||||||
try {
|
try {
|
||||||
skin = server.config.textureProvider.getSkinTexture(uuid, username, client);
|
skin = textureProvider.getSkinTexture(uuid, username, client);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LogHelper.error(new IOException(String.format("Can't get skin texture: '%s'", username), e));
|
LogHelper.error(new IOException(String.format("Can't get skin texture: '%s'", username), e));
|
||||||
skin = null;
|
skin = null;
|
||||||
|
@ -28,7 +29,7 @@ public static PlayerProfile getProfile(LaunchServer server, UUID uuid, String us
|
||||||
// Get cloak texture
|
// Get cloak texture
|
||||||
Texture cloak;
|
Texture cloak;
|
||||||
try {
|
try {
|
||||||
cloak = server.config.textureProvider.getCloakTexture(uuid, username, client);
|
cloak = textureProvider.getCloakTexture(uuid, username, client);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LogHelper.error(new IOException(String.format("Can't get cloak texture: '%s'", username), e));
|
LogHelper.error(new IOException(String.format("Can't get cloak texture: '%s'", username), e));
|
||||||
cloak = null;
|
cloak = null;
|
||||||
|
@ -48,7 +49,7 @@ public void reply() throws IOException {
|
||||||
debug("UUID: " + uuid);
|
debug("UUID: " + uuid);
|
||||||
String client = input.readString(SerializeLimits.MAX_CLIENT);
|
String client = input.readString(SerializeLimits.MAX_CLIENT);
|
||||||
// Verify has such profile
|
// Verify has such profile
|
||||||
String username = server.config.authHandler.uuidToUsername(uuid);
|
String username = clientData.auth.handler.uuidToUsername(uuid);
|
||||||
if (username == null) {
|
if (username == null) {
|
||||||
output.writeBoolean(false);
|
output.writeBoolean(false);
|
||||||
return;
|
return;
|
||||||
|
@ -56,6 +57,6 @@ public void reply() throws IOException {
|
||||||
|
|
||||||
// Write profile
|
// Write profile
|
||||||
output.writeBoolean(true);
|
output.writeBoolean(true);
|
||||||
getProfile(server, uuid, username, client).write(output);
|
getProfile(server, uuid, username, client, clientData.auth.textureProvider).write(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
import ru.gravit.launcher.serialize.HOutput;
|
import ru.gravit.launcher.serialize.HOutput;
|
||||||
import ru.gravit.launcher.serialize.SerializeLimits;
|
import ru.gravit.launcher.serialize.SerializeLimits;
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
|
import ru.gravit.launchserver.auth.handler.AuthHandler;
|
||||||
import ru.gravit.launchserver.response.Response;
|
import ru.gravit.launchserver.response.Response;
|
||||||
import ru.gravit.launchserver.socket.Client;
|
import ru.gravit.launchserver.socket.Client;
|
||||||
import ru.gravit.utils.helper.VerifyHelper;
|
import ru.gravit.utils.helper.VerifyHelper;
|
||||||
|
@ -13,8 +15,8 @@
|
||||||
|
|
||||||
public final class ProfileByUsernameResponse extends Response {
|
public final class ProfileByUsernameResponse extends Response {
|
||||||
|
|
||||||
public static void writeProfile(LaunchServer server, HOutput output, String username, String client) throws IOException {
|
public static void writeProfile(LaunchServer server, HOutput output, String username, String client, AuthProviderPair pair) throws IOException {
|
||||||
UUID uuid = server.config.authHandler.usernameToUUID(username);
|
UUID uuid = pair.handler.usernameToUUID(username);
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
output.writeBoolean(false);
|
output.writeBoolean(false);
|
||||||
return;
|
return;
|
||||||
|
@ -22,7 +24,7 @@ public static void writeProfile(LaunchServer server, HOutput output, String user
|
||||||
|
|
||||||
// Write profile
|
// Write profile
|
||||||
output.writeBoolean(true);
|
output.writeBoolean(true);
|
||||||
ProfileByUUIDResponse.getProfile(server, uuid, username, client).write(output);
|
ProfileByUUIDResponse.getProfile(server, uuid, username, client, pair.textureProvider).write(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfileByUsernameResponse(LaunchServer server, long session, HInput input, HOutput output, String ip, Client clientData) {
|
public ProfileByUsernameResponse(LaunchServer server, long session, HInput input, HOutput output, String ip, Client clientData) {
|
||||||
|
@ -35,6 +37,6 @@ public void reply() throws IOException {
|
||||||
debug("Username: " + username);
|
debug("Username: " + username);
|
||||||
String client = input.readString(SerializeLimits.MAX_CLIENT);
|
String client = input.readString(SerializeLimits.MAX_CLIENT);
|
||||||
// Write response
|
// Write response
|
||||||
writeProfile(server, output, username, client);
|
writeProfile(server, output, username, client, clientData.auth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
import ru.gravit.launcher.ClientPermissions;
|
import ru.gravit.launcher.ClientPermissions;
|
||||||
import ru.gravit.launcher.profiles.ClientProfile;
|
import ru.gravit.launcher.profiles.ClientProfile;
|
||||||
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.utils.helper.LogHelper;
|
import ru.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
public class Client {
|
public class Client {
|
||||||
public long session;
|
public long session;
|
||||||
|
public String auth_id;
|
||||||
public long timestamp;
|
public long timestamp;
|
||||||
public Type type;
|
public Type type;
|
||||||
public ClientProfile profile;
|
public ClientProfile profile;
|
||||||
|
@ -16,6 +18,8 @@ public class Client {
|
||||||
public String username;
|
public String username;
|
||||||
public LogHelper.OutputEnity logOutput;
|
public LogHelper.OutputEnity logOutput;
|
||||||
|
|
||||||
|
public transient AuthProviderPair auth;
|
||||||
|
|
||||||
public Client(long session) {
|
public Client(long session) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
timestamp = System.currentTimeMillis();
|
timestamp = System.currentTimeMillis();
|
||||||
|
@ -26,10 +30,16 @@ public Client(long session) {
|
||||||
checkSign = false;
|
checkSign = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Данные ваторизации
|
//Данные авторизации
|
||||||
public void up() {
|
public void up() {
|
||||||
timestamp = System.currentTimeMillis();
|
timestamp = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
public void updateAuth()
|
||||||
|
{
|
||||||
|
if(!isAuth) return;
|
||||||
|
if(auth_id.isEmpty()) auth = LaunchServer.server.config.getAuthProviderPair();
|
||||||
|
else auth = LaunchServer.server.config.getAuthProviderPair(auth_id);
|
||||||
|
}
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
SERVER,
|
SERVER,
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import ru.gravit.launcher.profiles.ClientProfile;
|
import ru.gravit.launcher.profiles.ClientProfile;
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
import ru.gravit.launchserver.auth.AuthException;
|
import ru.gravit.launchserver.auth.AuthException;
|
||||||
|
import ru.gravit.launchserver.auth.AuthProviderPair;
|
||||||
import ru.gravit.launchserver.auth.hwid.HWIDException;
|
import ru.gravit.launchserver.auth.hwid.HWIDException;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
import ru.gravit.launchserver.auth.provider.AuthProvider;
|
||||||
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
|
||||||
|
@ -31,14 +32,14 @@ public class AuthResponse implements JsonResponseInterface {
|
||||||
public String password;
|
public String password;
|
||||||
public byte[] encryptedPassword;
|
public byte[] encryptedPassword;
|
||||||
|
|
||||||
public AuthResponse(String login, String password, int authid, OshiHWID hwid) {
|
public AuthResponse(String login, String password, String auth_id, OshiHWID hwid) {
|
||||||
this.login = login;
|
this.login = login;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.authid = authid;
|
this.auth_id = auth_id;
|
||||||
this.hwid = hwid;
|
this.hwid = hwid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int authid;
|
public String auth_id;
|
||||||
public ConnectTypes authType;
|
public ConnectTypes authType;
|
||||||
public OshiHWID hwid;
|
public OshiHWID hwid;
|
||||||
public enum ConnectTypes
|
public enum ConnectTypes
|
||||||
|
@ -78,8 +79,11 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
|
||||||
{
|
{
|
||||||
AuthProvider.authError("authType: SERVER not allowed for this account");
|
AuthProvider.authError("authType: SERVER not allowed for this account");
|
||||||
}
|
}
|
||||||
|
AuthProviderPair pair;
|
||||||
|
if(auth_id.isEmpty()) pair = LaunchServer.server.config.getAuthProviderPair();
|
||||||
|
else pair = LaunchServer.server.config.getAuthProviderPair(auth_id);
|
||||||
ru.gravit.launchserver.response.auth.AuthResponse.AuthContext context = new ru.gravit.launchserver.response.auth.AuthResponse.AuthContext(0, login, password.length(),customText, client, ip, null, false);
|
ru.gravit.launchserver.response.auth.AuthResponse.AuthContext context = new ru.gravit.launchserver.response.auth.AuthResponse.AuthContext(0, login, password.length(),customText, client, ip, null, false);
|
||||||
AuthProvider provider = LaunchServer.server.config.authProvider[authid];
|
AuthProvider provider = pair.provider;
|
||||||
LaunchServer.server.authHookManager.preHook(context, clientData);
|
LaunchServer.server.authHookManager.preHook(context, clientData);
|
||||||
provider.preAuth(login,password,customText,ip);
|
provider.preAuth(login,password,customText,ip);
|
||||||
AuthProviderResult aresult = provider.auth(login, password, ip);
|
AuthProviderResult aresult = provider.auth(login, password, ip);
|
||||||
|
@ -99,15 +103,17 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
|
||||||
//if (clientData.profile == null) {
|
//if (clientData.profile == null) {
|
||||||
// throw new AuthException("You profile not found");
|
// throw new AuthException("You profile not found");
|
||||||
//}
|
//}
|
||||||
UUID uuid = LaunchServer.server.config.authHandler.auth(aresult);
|
UUID uuid = pair.handler.auth(aresult);
|
||||||
if(authType == ConnectTypes.CLIENT)
|
if(authType == ConnectTypes.CLIENT)
|
||||||
LaunchServer.server.config.hwidHandler.check(hwid, aresult.username);
|
LaunchServer.server.config.hwidHandler.check(hwid, aresult.username);
|
||||||
LaunchServer.server.authHookManager.postHook(context, clientData);
|
LaunchServer.server.authHookManager.postHook(context, clientData);
|
||||||
clientData.isAuth = true;
|
clientData.isAuth = true;
|
||||||
clientData.permissions = aresult.permissions;
|
clientData.permissions = aresult.permissions;
|
||||||
|
clientData.auth_id = auth_id;
|
||||||
|
clientData.updateAuth();
|
||||||
result.accessToken = aresult.accessToken;
|
result.accessToken = aresult.accessToken;
|
||||||
result.permissions = clientData.permissions;
|
result.permissions = clientData.permissions;
|
||||||
result.playerProfile = ProfileByUUIDResponse.getProfile(LaunchServer.server,uuid,aresult.username,client);
|
result.playerProfile = ProfileByUUIDResponse.getProfile(LaunchServer.server,uuid,aresult.username,client, clientData.auth.textureProvider);
|
||||||
service.sendObject(ctx, result);
|
service.sendObject(ctx, result);
|
||||||
} catch (AuthException | HWIDException e) {
|
} catch (AuthException | HWIDException e) {
|
||||||
service.sendObject(ctx, new ErrorRequestEvent(e.getMessage()));
|
service.sendObject(ctx, new ErrorRequestEvent(e.getMessage()));
|
||||||
|
|
|
@ -25,9 +25,9 @@ public String getType() {
|
||||||
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client pClient) {
|
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client pClient) {
|
||||||
CheckServerRequestEvent result = new CheckServerRequestEvent();
|
CheckServerRequestEvent result = new CheckServerRequestEvent();
|
||||||
try {
|
try {
|
||||||
result.uuid = LaunchServer.server.config.authHandler.checkServer(username, serverID);
|
result.uuid = pClient.auth.handler.checkServer(username, serverID);
|
||||||
if(result.uuid != null)
|
if(result.uuid != null)
|
||||||
result.playerProfile = ProfileByUUIDResponse.getProfile(LaunchServer.server,result.uuid,username,client);
|
result.playerProfile = ProfileByUUIDResponse.getProfile(LaunchServer.server,result.uuid,username,client, pClient.auth.textureProvider);
|
||||||
} catch (AuthException e) {
|
} catch (AuthException e) {
|
||||||
service.sendObject(ctx, new ErrorRequestEvent(e.getMessage()));
|
service.sendObject(ctx, new ErrorRequestEvent(e.getMessage()));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -24,7 +24,7 @@ public String getType() {
|
||||||
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) {
|
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) {
|
||||||
boolean success;
|
boolean success;
|
||||||
try {
|
try {
|
||||||
success = LaunchServer.server.config.authHandler.joinServer(username, accessToken, serverID);
|
success = client.auth.handler.joinServer(username, accessToken, serverID);
|
||||||
} catch (AuthException e) {
|
} catch (AuthException e) {
|
||||||
service.sendObject(ctx, new ErrorRequestEvent(e.getMessage()));
|
service.sendObject(ctx, new ErrorRequestEvent(e.getMessage()));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -28,8 +28,8 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
|
||||||
result.playerProfiles = new PlayerProfile[list.length];
|
result.playerProfiles = new PlayerProfile[list.length];
|
||||||
for(int i=0;i<list.length;++i)
|
for(int i=0;i<list.length;++i)
|
||||||
{
|
{
|
||||||
UUID uuid = LaunchServer.server.config.authHandler.usernameToUUID(list[i].username);
|
UUID uuid = client.auth.handler.usernameToUUID(list[i].username);
|
||||||
result.playerProfiles[i] = ProfileByUUIDResponse.getProfile(LaunchServer.server,uuid,list[i].username,list[i].client);
|
result.playerProfiles[i] = ProfileByUUIDResponse.getProfile(LaunchServer.server,uuid,list[i].username,list[i].client, client.auth.textureProvider);
|
||||||
}
|
}
|
||||||
service.sendObject(ctx, result);
|
service.sendObject(ctx, result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import ru.gravit.launchserver.socket.Client;
|
import ru.gravit.launchserver.socket.Client;
|
||||||
import ru.gravit.launchserver.socket.websocket.WebSocketService;
|
import ru.gravit.launchserver.socket.websocket.WebSocketService;
|
||||||
import ru.gravit.launchserver.socket.websocket.json.JsonResponseInterface;
|
import ru.gravit.launchserver.socket.websocket.json.JsonResponseInterface;
|
||||||
|
import ru.gravit.launchserver.texture.TextureProvider;
|
||||||
import ru.gravit.utils.helper.LogHelper;
|
import ru.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -16,11 +17,11 @@
|
||||||
public class ProfileByUUIDResponse implements JsonResponseInterface {
|
public class ProfileByUUIDResponse implements JsonResponseInterface {
|
||||||
public UUID uuid;
|
public UUID uuid;
|
||||||
public String client;
|
public String client;
|
||||||
public static PlayerProfile getProfile(LaunchServer server, UUID uuid, String username, String client) {
|
public static PlayerProfile getProfile(LaunchServer server, UUID uuid, String username, String client, TextureProvider textureProvider) {
|
||||||
// Get skin texture
|
// Get skin texture
|
||||||
Texture skin;
|
Texture skin;
|
||||||
try {
|
try {
|
||||||
skin = server.config.textureProvider.getSkinTexture(uuid, username, client);
|
skin = textureProvider.getSkinTexture(uuid, username, client);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LogHelper.error(new IOException(String.format("Can't get skin texture: '%s'", username), e));
|
LogHelper.error(new IOException(String.format("Can't get skin texture: '%s'", username), e));
|
||||||
skin = null;
|
skin = null;
|
||||||
|
@ -29,7 +30,7 @@ public static PlayerProfile getProfile(LaunchServer server, UUID uuid, String us
|
||||||
// Get cloak texture
|
// Get cloak texture
|
||||||
Texture cloak;
|
Texture cloak;
|
||||||
try {
|
try {
|
||||||
cloak = server.config.textureProvider.getCloakTexture(uuid, username, client);
|
cloak = textureProvider.getCloakTexture(uuid, username, client);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LogHelper.error(new IOException(String.format("Can't get cloak texture: '%s'", username), e));
|
LogHelper.error(new IOException(String.format("Can't get cloak texture: '%s'", username), e));
|
||||||
cloak = null;
|
cloak = null;
|
||||||
|
@ -46,7 +47,7 @@ public String getType() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception {
|
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception {
|
||||||
String username = LaunchServer.server.config.authHandler.uuidToUsername(uuid);
|
String username = client.auth.handler.uuidToUsername(uuid);
|
||||||
service.sendObject(ctx, new ProfileByUUIDRequestEvent(getProfile(LaunchServer.server,uuid,username,this.client)));
|
service.sendObject(ctx, new ProfileByUUIDRequestEvent(getProfile(LaunchServer.server,uuid,username,this.client, client.auth.textureProvider)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public String getType() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception {
|
public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception {
|
||||||
UUID uuid = LaunchServer.server.config.authHandler.usernameToUUID(username);
|
UUID uuid = client.auth.handler.usernameToUUID(username);
|
||||||
service.sendObject(ctx, new ProfileByUsernameRequestEvent(getProfile(LaunchServer.server,uuid,username,this.client)));
|
service.sendObject(ctx, new ProfileByUsernameRequestEvent(getProfile(LaunchServer.server,uuid,username,this.client, client.auth.textureProvider)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ public final class AuthRequest extends Request<AuthRequestEvent> implements Requ
|
||||||
private final String login;
|
private final String login;
|
||||||
|
|
||||||
private final byte[] encryptedPassword;
|
private final byte[] encryptedPassword;
|
||||||
private final int auth_id;
|
private final String auth_id;
|
||||||
private final HWID hwid;
|
private final HWID hwid;
|
||||||
private final String customText;
|
private final String customText;
|
||||||
|
|
||||||
|
@ -31,20 +31,11 @@ public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hw
|
||||||
this.encryptedPassword = password.clone();
|
this.encryptedPassword = password.clone();
|
||||||
this.hwid = hwid;
|
this.hwid = hwid;
|
||||||
customText = "";
|
customText = "";
|
||||||
auth_id = 0;
|
auth_id = "";
|
||||||
}
|
|
||||||
@LauncherAPI
|
|
||||||
public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hwid, String customText) {
|
|
||||||
super(config);
|
|
||||||
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
|
||||||
this.encryptedPassword = password.clone();
|
|
||||||
this.hwid = hwid;
|
|
||||||
this.customText = customText;
|
|
||||||
auth_id = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hwid, int auth_id) {
|
public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hwid, String auth_id) {
|
||||||
super(config);
|
super(config);
|
||||||
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
||||||
this.encryptedPassword = password.clone();
|
this.encryptedPassword = password.clone();
|
||||||
|
@ -53,7 +44,7 @@ public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hw
|
||||||
customText = "";
|
customText = "";
|
||||||
}
|
}
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hwid, String customText, int auth_id) {
|
public AuthRequest(LauncherConfig config, String login, byte[] password, HWID hwid, String customText, String auth_id) {
|
||||||
super(config);
|
super(config);
|
||||||
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
||||||
this.encryptedPassword = password.clone();
|
this.encryptedPassword = password.clone();
|
||||||
|
@ -72,7 +63,7 @@ public AuthRequestEvent requestWebSockets() throws Exception
|
||||||
return (AuthRequestEvent) LegacyRequestBridge.sendRequest(this);
|
return (AuthRequestEvent) LegacyRequestBridge.sendRequest(this);
|
||||||
}
|
}
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
public AuthRequest(String login, byte[] password, HWID hwid, int auth_id) {
|
public AuthRequest(String login, byte[] password, HWID hwid, String auth_id) {
|
||||||
this(null, login, password, hwid, auth_id);
|
this(null, login, password, hwid, auth_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +95,7 @@ protected AuthRequestEvent requestDo(HInput input, HOutput output) throws IOExce
|
||||||
output.writeBoolean(Launcher.profile != null);
|
output.writeBoolean(Launcher.profile != null);
|
||||||
if (Launcher.profile != null)
|
if (Launcher.profile != null)
|
||||||
output.writeString(Launcher.profile.getTitle(), SerializeLimits.MAX_CLIENT);
|
output.writeString(Launcher.profile.getTitle(), SerializeLimits.MAX_CLIENT);
|
||||||
output.writeInt(auth_id);
|
output.writeString(auth_id, SerializeLimits.MAX_QUEUE_SIZE);
|
||||||
output.writeString(hwid.getSerializeString(), 0);
|
output.writeString(hwid.getSerializeString(), 0);
|
||||||
//output.writeLong(0);
|
//output.writeLong(0);
|
||||||
//output.writeLong(0);
|
//output.writeLong(0);
|
||||||
|
|
|
@ -30,7 +30,7 @@ private Result(PlayerProfile pp, String accessToken) {
|
||||||
private final String login;
|
private final String login;
|
||||||
|
|
||||||
private final byte[] encryptedPassword;
|
private final byte[] encryptedPassword;
|
||||||
private final int auth_id;
|
private final String auth_id;
|
||||||
private final String title;
|
private final String title;
|
||||||
|
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
|
@ -38,12 +38,12 @@ public AuthServerRequest(LauncherConfig config, String login, byte[] encryptedPa
|
||||||
super(config);
|
super(config);
|
||||||
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
||||||
this.encryptedPassword = encryptedPassword.clone();
|
this.encryptedPassword = encryptedPassword.clone();
|
||||||
auth_id = 0;
|
auth_id = "";
|
||||||
title = "";
|
title = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
public AuthServerRequest(LauncherConfig config, String login, byte[] encryptedPassword, int auth_id) {
|
public AuthServerRequest(LauncherConfig config, String login, byte[] encryptedPassword, String auth_id) {
|
||||||
super(config);
|
super(config);
|
||||||
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
||||||
this.encryptedPassword = encryptedPassword.clone();
|
this.encryptedPassword = encryptedPassword.clone();
|
||||||
|
@ -52,7 +52,7 @@ public AuthServerRequest(LauncherConfig config, String login, byte[] encryptedPa
|
||||||
}
|
}
|
||||||
|
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
public AuthServerRequest(LauncherConfig config, String login, byte[] encryptedPassword, int auth_id, String title) {
|
public AuthServerRequest(LauncherConfig config, String login, byte[] encryptedPassword, String auth_id, String title) {
|
||||||
super(config);
|
super(config);
|
||||||
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
|
||||||
this.encryptedPassword = encryptedPassword.clone();
|
this.encryptedPassword = encryptedPassword.clone();
|
||||||
|
@ -66,7 +66,7 @@ public AuthServerRequest(String login, byte[] encryptedPassword) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
public AuthServerRequest(String login, byte[] encryptedPassword, int auth_id) {
|
public AuthServerRequest(String login, byte[] encryptedPassword, String auth_id) {
|
||||||
this(null, login, encryptedPassword, auth_id);
|
this(null, login, encryptedPassword, auth_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ public Integer getLegacyType() {
|
||||||
protected ClientPermissions requestDo(HInput input, HOutput output) throws IOException {
|
protected ClientPermissions requestDo(HInput input, HOutput output) throws IOException {
|
||||||
output.writeString(login, SerializeLimits.MAX_LOGIN);
|
output.writeString(login, SerializeLimits.MAX_LOGIN);
|
||||||
output.writeString(title, SerializeLimits.MAX_CLIENT);
|
output.writeString(title, SerializeLimits.MAX_CLIENT);
|
||||||
output.writeInt(auth_id);
|
output.writeString(auth_id, SerializeLimits.MAX_QUEUE_SIZE);
|
||||||
output.writeByteArray(encryptedPassword, SecurityHelper.CRYPTO_MAX_LENGTH);
|
output.writeByteArray(encryptedPassword, SecurityHelper.CRYPTO_MAX_LENGTH);
|
||||||
output.flush();
|
output.flush();
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class ServerWrapper {
|
||||||
public static boolean auth(ServerWrapper wrapper) {
|
public static boolean auth(ServerWrapper wrapper) {
|
||||||
try {
|
try {
|
||||||
LauncherConfig cfg = Launcher.getConfig();
|
LauncherConfig cfg = Launcher.getConfig();
|
||||||
ServerWrapper.permissions = new AuthServerRequest(cfg, config.login, SecurityHelper.newRSAEncryptCipher(cfg.publicKey).doFinal(IOHelper.encode(config.password)), 0, config.title).request();
|
ServerWrapper.permissions = new AuthServerRequest(cfg, config.login, SecurityHelper.newRSAEncryptCipher(cfg.publicKey).doFinal(IOHelper.encode(config.password)), config.auth_id, config.title).request();
|
||||||
ProfilesRequestEvent result = new ProfilesRequest(cfg).request();
|
ProfilesRequestEvent result = new ProfilesRequest(cfg).request();
|
||||||
for (ClientProfile p : result.profiles) {
|
for (ClientProfile p : result.profiles) {
|
||||||
LogHelper.debug("Get profile: %s", p.getTitle());
|
LogHelper.debug("Get profile: %s", p.getTitle());
|
||||||
|
@ -218,6 +218,7 @@ public static final class Config {
|
||||||
public String login;
|
public String login;
|
||||||
public String[] args;
|
public String[] args;
|
||||||
public String password;
|
public String password;
|
||||||
|
public String auth_id = "";
|
||||||
public LauncherConfig.LauncherEnvironment env;
|
public LauncherConfig.LauncherEnvironment env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,8 +58,12 @@ public static JsonElement jsonRequest(JsonElement request, URL url) throws IOExc
|
||||||
reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
|
reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
|
||||||
else
|
else
|
||||||
reader = new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8);
|
reader = new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8);
|
||||||
JsonElement content = parser.parse(reader);
|
try {
|
||||||
return content;
|
return parser.parse(reader);
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private HTTPRequest() {
|
private HTTPRequest() {
|
||||||
|
|
2
modules
2
modules
|
@ -1 +1 @@
|
||||||
Subproject commit b7fbe50c08a3e274aadb93292fed6d05918647b3
|
Subproject commit 073b52f785527e01ca548fc56b71130b41ce648e
|
Loading…
Reference in a new issue