[FEATURE] textureProvider внесен в AuthProviderPair

This commit is contained in:
Gravit 2019-03-22 11:36:06 +07:00
parent 421fa07317
commit 5f252682f3
12 changed files with 35 additions and 36 deletions

View file

@ -113,8 +113,6 @@ public AuthProviderPair getAuthProviderPair()
public PermissionsHandler permissionsHandler; public PermissionsHandler permissionsHandler;
public TextureProvider textureProvider;
public HWIDHandler hwidHandler; public HWIDHandler hwidHandler;
// Misc options // Misc options
@ -202,9 +200,6 @@ public void verify() {
{ {
throw new IllegalStateException("No auth pairs declared by default."); 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");
} }
@ -223,11 +218,6 @@ public void close()
} catch (IOException e) { } catch (IOException e) {
LogHelper.error(e); LogHelper.error(e);
} }
try {
textureProvider.close();
} catch (IOException e) {
LogHelper.error(e);
}
try { try {
hwidHandler.close(); hwidHandler.close();
} catch (Exception e) { } catch (Exception e) {
@ -494,9 +484,9 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE
reloadManager.registerReloadable("auth.".concat(pair.name).concat(".provider"), (Reloadable) pair.provider); reloadManager.registerReloadable("auth.".concat(pair.name).concat(".provider"), (Reloadable) pair.provider);
if (pair.handler instanceof Reloadable) if (pair.handler instanceof Reloadable)
reloadManager.registerReloadable("auth.".concat(pair.name).concat(".handler"), (Reloadable) pair.handler); 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);
@ -508,9 +498,9 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE
reconfigurableManager.registerReconfigurable("auth.".concat(pair.name).concat(".provider"), (Reconfigurable) pair.provider); reconfigurableManager.registerReconfigurable("auth.".concat(pair.name).concat(".provider"), (Reconfigurable) pair.provider);
if (pair.handler instanceof Reconfigurable) if (pair.handler instanceof Reconfigurable)
reconfigurableManager.registerReconfigurable("auth.".concat(pair.name).concat(".handler"), (Reconfigurable) pair.handler); 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);
@ -617,8 +607,10 @@ private void generateConfigIfNotExists() throws IOException {
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.hwidHandler = new AcceptHWIDHandler(); newConfig.hwidHandler = new AcceptHWIDHandler();
newConfig.auth = new AuthProviderPair[]{ new AuthProviderPair(new RejectAuthProvider("Настройте authProvider"), new MemoryAuthHandler(), "std") }; newConfig.auth = new AuthProviderPair[]{ new AuthProviderPair(new RejectAuthProvider("Настройте authProvider"),
newConfig.textureProvider = new RequestTextureProvider("http://example.com/skins/%username%.png", "http://example.com/cloaks/%username%.png"); new MemoryAuthHandler(),
new RequestTextureProvider("http://example.com/skins/%username%.png", "http://example.com/cloaks/%username%.png")
, "std") };
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";

View file

@ -2,18 +2,21 @@
import ru.gravit.launchserver.auth.handler.AuthHandler; import ru.gravit.launchserver.auth.handler.AuthHandler;
import ru.gravit.launchserver.auth.provider.AuthProvider; import ru.gravit.launchserver.auth.provider.AuthProvider;
import ru.gravit.launchserver.texture.TextureProvider;
import java.io.IOException; import java.io.IOException;
public class AuthProviderPair { public class AuthProviderPair {
public AuthProvider provider; public AuthProvider provider;
public AuthHandler handler; public AuthHandler handler;
public TextureProvider textureProvider;
public String name; public String name;
public boolean isDefault = true; public boolean isDefault = true;
public AuthProviderPair(AuthProvider provider, AuthHandler handler, String name) { public AuthProviderPair(AuthProvider provider, AuthHandler handler, TextureProvider textureProvider, String name) {
this.provider = provider; this.provider = provider;
this.handler = handler; this.handler = handler;
this.textureProvider = textureProvider;
this.name = name; this.name = name;
} }
@ -26,5 +29,6 @@ public void init()
public void close() throws IOException { public void close() throws IOException {
provider.close(); provider.close();
handler.close(); handler.close();
textureProvider.close();
} }
} }

View file

@ -147,7 +147,7 @@ public void reply() throws Exception {
} }
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);
} }

View file

@ -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);
} }
} }

View file

@ -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], clientData.auth.handler); ProfileByUsernameResponse.writeProfile(server, output, usernames[i], clients[i], clientData.auth);
} }
} }

View file

@ -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;
@ -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);
} }
} }

View file

@ -4,6 +4,7 @@
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.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;
@ -14,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, AuthHandler handler) throws IOException { public static void writeProfile(LaunchServer server, HOutput output, String username, String client, AuthProviderPair pair) throws IOException {
UUID uuid = handler.usernameToUUID(username); UUID uuid = pair.handler.usernameToUUID(username);
if (uuid == null) { if (uuid == null) {
output.writeBoolean(false); output.writeBoolean(false);
return; return;
@ -23,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) {
@ -36,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, clientData.auth.handler); writeProfile(server, output, username, client, clientData.auth);
} }
} }

View file

@ -117,7 +117,7 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
clientData.updateAuth(); 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()));

View file

@ -27,7 +27,7 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
try { try {
result.uuid = pClient.auth.handler.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;

View file

@ -29,7 +29,7 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
for(int i=0;i<list.length;++i) for(int i=0;i<list.length;++i)
{ {
UUID uuid = client.auth.handler.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);
} }

View file

@ -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;
@ -47,6 +48,6 @@ 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 = client.auth.handler.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)));
} }
} }

View file

@ -22,6 +22,6 @@ 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 = client.auth.handler.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)));
} }
} }