[FEATURE] AssetUploadInfo

This commit is contained in:
Gravita 2023-09-26 13:55:01 +07:00
parent aff254a875
commit 183cfe949f
11 changed files with 110 additions and 17 deletions

View file

@ -43,11 +43,9 @@ public Set<String> getFeatures() {
} }
public static void getFeatures(Class<?> clazz, Set<String> list) { public static void getFeatures(Class<?> clazz, Set<String> list) {
Features features = clazz.getAnnotation(Features.class); Feature[] features = clazz.getAnnotationsByType(Feature.class);
if (features != null) { for (Feature feature : features) {
for (Feature feature : features.value()) { list.add(feature.value());
list.add(feature.value());
}
} }
Class<?> superClass = clazz.getSuperclass(); Class<?> superClass = clazz.getSuperclass();
if (superClass != null && superClass != Object.class) { if (superClass != null && superClass != Object.class) {

View file

@ -1,15 +1,20 @@
package pro.gravit.launchserver.auth.core.interfaces.provider; package pro.gravit.launchserver.auth.core.interfaces.provider;
import pro.gravit.launcher.events.request.AssetUploadInfoRequestEvent;
import pro.gravit.launcher.events.request.AuthRequestEvent; import pro.gravit.launcher.events.request.AuthRequestEvent;
import pro.gravit.launcher.events.request.GetAssetUploadInfoRequestEvent; import pro.gravit.launcher.events.request.GetAssetUploadUrlRequestEvent;
import pro.gravit.launchserver.auth.Feature; import pro.gravit.launchserver.auth.Feature;
import pro.gravit.launchserver.auth.core.User; import pro.gravit.launchserver.auth.core.User;
@Feature(GetAssetUploadInfoRequestEvent.FEATURE_NAME) @Feature(GetAssetUploadUrlRequestEvent.FEATURE_NAME)
public interface AuthSupportAssetUpload { public interface AuthSupportAssetUpload {
String getAssetUploadUrl(String name, User user); String getAssetUploadUrl(String name, User user);
default AuthRequestEvent.OAuthRequestEvent getAssetUploadToken(String name, User user) { default AuthRequestEvent.OAuthRequestEvent getAssetUploadToken(String name, User user) {
return null; return null;
} }
default AssetUploadInfoRequestEvent getAssetUploadInfo(User user) {
return new AssetUploadInfoRequestEvent(true, true, AssetUploadInfoRequestEvent.SlimSupportConf.USER);
}
} }

View file

@ -18,6 +18,7 @@
import pro.gravit.launchserver.socket.response.SimpleResponse; import pro.gravit.launchserver.socket.response.SimpleResponse;
import pro.gravit.launchserver.socket.response.WebSocketServerResponse; import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
import pro.gravit.launchserver.socket.response.auth.*; import pro.gravit.launchserver.socket.response.auth.*;
import pro.gravit.launchserver.socket.response.cabinet.AssetUploadInfoResponse;
import pro.gravit.launchserver.socket.response.cabinet.GetAssetUploadInfoResponse; import pro.gravit.launchserver.socket.response.cabinet.GetAssetUploadInfoResponse;
import pro.gravit.launchserver.socket.response.management.FeaturesResponse; import pro.gravit.launchserver.socket.response.management.FeaturesResponse;
import pro.gravit.launchserver.socket.response.management.GetPublicKeyResponse; import pro.gravit.launchserver.socket.response.management.GetPublicKeyResponse;
@ -83,6 +84,7 @@ public static void registerResponses() {
providers.register("clientProfileKey", FetchClientProfileKeyResponse.class); providers.register("clientProfileKey", FetchClientProfileKeyResponse.class);
providers.register("getPublicKey", GetPublicKeyResponse.class); providers.register("getPublicKey", GetPublicKeyResponse.class);
providers.register("getAssetUploadUrl", GetAssetUploadInfoResponse.class); providers.register("getAssetUploadUrl", GetAssetUploadInfoResponse.class);
providers.register("assetUploadInfo", AssetUploadInfoResponse.class);
} }
public static String getIPFromContext(ChannelHandlerContext ctx) { public static String getIPFromContext(ChannelHandlerContext ctx) {

View file

@ -0,0 +1,27 @@
package pro.gravit.launchserver.socket.response.cabinet;
import io.netty.channel.ChannelHandlerContext;
import pro.gravit.launchserver.auth.core.interfaces.provider.AuthSupportAssetUpload;
import pro.gravit.launchserver.socket.Client;
import pro.gravit.launchserver.socket.response.SimpleResponse;
public class AssetUploadInfoResponse extends SimpleResponse {
@Override
public String getType() {
return "assetUploadInfo";
}
@Override
public void execute(ChannelHandlerContext ctx, Client client) throws Exception {
if(!client.isAuth || client.auth == null || client.getUser() == null) {
sendError("Access denied");
return;
}
var support = client.auth.isSupport(AuthSupportAssetUpload.class);
if(support == null) {
sendError("Not supported");
return;
}
sendResult(support.getAssetUploadInfo(client.getUser()));
}
}

View file

@ -1,7 +1,7 @@
package pro.gravit.launchserver.socket.response.cabinet; package pro.gravit.launchserver.socket.response.cabinet;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import pro.gravit.launcher.events.request.GetAssetUploadInfoRequestEvent; import pro.gravit.launcher.events.request.GetAssetUploadUrlRequestEvent;
import pro.gravit.launchserver.auth.core.interfaces.provider.AuthSupportAssetUpload; import pro.gravit.launchserver.auth.core.interfaces.provider.AuthSupportAssetUpload;
import pro.gravit.launchserver.socket.Client; import pro.gravit.launchserver.socket.Client;
import pro.gravit.launchserver.socket.response.SimpleResponse; import pro.gravit.launchserver.socket.response.SimpleResponse;
@ -24,6 +24,6 @@ public void execute(ChannelHandlerContext ctx, Client client) throws Exception {
sendError("Not supported"); sendError("Not supported");
return; return;
} }
sendResult(new GetAssetUploadInfoRequestEvent(support.getAssetUploadUrl(name, client.getUser()), support.getAssetUploadToken(name, client.getUser()))); sendResult(new GetAssetUploadUrlRequestEvent(support.getAssetUploadUrl(name, client.getUser()), support.getAssetUploadToken(name, client.getUser())));
} }
} }

View file

@ -0,0 +1,25 @@
package pro.gravit.launchserver;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import pro.gravit.launchserver.auth.AuthProviderPair;
import pro.gravit.launchserver.auth.Feature;
import java.util.List;
public class FeatureCollectionTest {
public static class TestClass1 implements TextInterface1 {
}
@Feature("test")
public interface TextInterface1 {
}
@Test
public void simpleTest() {
var set = AuthProviderPair.getFeatures(TestClass1.class);
Assertions.assertTrue(set.contains("test"));
}
}

View file

@ -0,0 +1,24 @@
package pro.gravit.launcher.events.request;
import pro.gravit.launcher.events.RequestEvent;
public class AssetUploadInfoRequestEvent extends RequestEvent {
public boolean uploadSkin;
public boolean uploadCape;
public SlimSupportConf slimSupportConf;
public AssetUploadInfoRequestEvent(boolean uploadSkin, boolean uploadCape, SlimSupportConf slimSupportConf) {
this.uploadSkin = uploadSkin;
this.uploadCape = uploadCape;
this.slimSupportConf = slimSupportConf;
}
@Override
public String getType() {
return "assetUploadInfo";
}
public enum SlimSupportConf {
UNSUPPORTED, USER, SERVER
}
}

View file

@ -2,15 +2,15 @@
import pro.gravit.launcher.events.RequestEvent; import pro.gravit.launcher.events.RequestEvent;
public class GetAssetUploadInfoRequestEvent extends RequestEvent { public class GetAssetUploadUrlRequestEvent extends RequestEvent {
public static final String FEATURE_NAME = "assetupload"; public static final String FEATURE_NAME = "assetupload";
public String url; public String url;
public AuthRequestEvent.OAuthRequestEvent token; public AuthRequestEvent.OAuthRequestEvent token;
public GetAssetUploadInfoRequestEvent() { public GetAssetUploadUrlRequestEvent() {
} }
public GetAssetUploadInfoRequestEvent(String url, AuthRequestEvent.OAuthRequestEvent token) { public GetAssetUploadUrlRequestEvent(String url, AuthRequestEvent.OAuthRequestEvent token) {
this.url = url; this.url = url;
this.token = token; this.token = token;
} }

View file

@ -0,0 +1,11 @@
package pro.gravit.launcher.request.cabinet;
import pro.gravit.launcher.events.request.AssetUploadInfoRequestEvent;
import pro.gravit.launcher.request.Request;
public class AssetUploadInfoRequest extends Request<AssetUploadInfoRequestEvent> {
@Override
public String getType() {
return "assetUploadInfo";
}
}

View file

@ -1,15 +1,15 @@
package pro.gravit.launcher.request.cabinet; package pro.gravit.launcher.request.cabinet;
import pro.gravit.launcher.events.request.GetAssetUploadInfoRequestEvent; import pro.gravit.launcher.events.request.GetAssetUploadUrlRequestEvent;
import pro.gravit.launcher.request.Request; import pro.gravit.launcher.request.Request;
public class GetAssetUploadInfo extends Request<GetAssetUploadInfoRequestEvent> { public class GetAssetUploadUrl extends Request<GetAssetUploadUrlRequestEvent> {
public String name; public String name;
public GetAssetUploadInfo() { public GetAssetUploadUrl() {
} }
public GetAssetUploadInfo(String name) { public GetAssetUploadUrl(String name) {
this.name = name; this.name = name;
} }

View file

@ -111,7 +111,8 @@ public void registerResults() {
results.register("additionalData", AdditionalDataRequestEvent.class); results.register("additionalData", AdditionalDataRequestEvent.class);
results.register("clientProfileKey", FetchClientProfileKeyRequestEvent.class); results.register("clientProfileKey", FetchClientProfileKeyRequestEvent.class);
results.register("getPublicKey", GetPublicKeyRequestEvent.class); results.register("getPublicKey", GetPublicKeyRequestEvent.class);
results.register("getAssetUploadUrl", GetAssetUploadInfoRequestEvent.class); results.register("getAssetUploadUrl", GetAssetUploadUrlRequestEvent.class);
results.register("assetUploadInfo", AssetUploadInfoRequestEvent.class);
resultsRegistered = true; resultsRegistered = true;
} }
} }