From c99d8e7e751ba421c1a5d23857fa42db2728415a Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 26 Mar 2024 23:03:40 -0400 Subject: [PATCH] [O] More cleanup, return 400 for bad requests --- src/main/java/ext/Ext.kt | 5 ++++- .../sega/maimai2/Maimai2ServletController.kt | 11 ++++++----- .../sega/maimai2/handler/UserReqHandler.java | 16 ---------------- .../aqua/sega/maimai2/handler/UserReqHandler.kt | 13 +++++++++++++ .../response/data/UserRecommendRateMusic.java | 17 ----------------- .../model/response/data/UserRivalData.java | 13 ------------- .../sega/maimai2/util/IntegerListConverter.java | 2 +- 7 files changed, 24 insertions(+), 53 deletions(-) delete mode 100644 src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.kt delete mode 100644 src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRecommendRateMusic.java delete mode 100644 src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRivalData.java diff --git a/src/main/java/ext/Ext.kt b/src/main/java/ext/Ext.kt index 5eb3ac34..bf24182f 100644 --- a/src/main/java/ext/Ext.kt +++ b/src/main/java/ext/Ext.kt @@ -1,9 +1,9 @@ package ext import icu.samnyan.aqua.net.utils.ApiException +import icu.samnyan.aqua.sega.general.BaseHandler import io.ktor.client.* import io.ktor.client.engine.cio.* -import io.ktor.client.plugins.compression.* import io.ktor.client.plugins.contentnegotiation.* import io.ktor.serialization.kotlinx.json.* import kotlinx.coroutines.Dispatchers @@ -68,6 +68,9 @@ operator fun Int.minus(message: String): Nothing { ApiException.log.info("> Error $this: $message") throw ApiException(this, message) } +fun parsing(block: () -> R) = try { block() } +catch (e: ApiException) { throw e } +catch (e: Exception) { 400 - e.message.toString() } // Email validation // https://www.baeldung.com/java-email-validation-regex diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt index 67d3d956..2e8b82d1 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt @@ -110,7 +110,7 @@ class Maimai2ServletController( } } val getGameEvent = BaseHandler { - val type = (it["type"] as Number).toInt() + val type = parsing { (it["type"] as Number).toInt() } mapOf( "type" to type, "gameEventList" to repos.gameEvent.findByEnable(true) // Maimai only request for type 1 @@ -118,7 +118,7 @@ class Maimai2ServletController( } val getUserRivalData = UserReqHandler { req, userId -> - val rivalId = (req["rivalId"] as Number).toLong() + val rivalId = parsing { (req["rivalId"] as Number).toLong() } mapOf( "userId" to userId, @@ -155,7 +155,7 @@ class Maimai2ServletController( "isLogin" to false, "isExistSellingCard" to false ) - } } + } ?: (404 - "User not found") } val getUserPreview = UserReqHandler { _, userId -> val d = repos.userData.findByCardExtId(userId)() ?: (404 - "User not found") @@ -253,7 +253,7 @@ class Maimai2ServletController( @API("/{api}") fun handle(@PathVariable api: String, @RequestBody request: Map): Any { - logger.info("Mai2 < $api : $request") + logger.info("Mai2 < $api : ${request.toJson()}") // TODO: Optimize logging if (api in noopEndpoint) { logger.info("Mai2 > $api no-op") @@ -266,7 +266,8 @@ class Maimai2ServletController( } return handlers[api]?.handle(request)?.let { if (it is String) it else it.toJson() }?.also { - if (api !in setOf("GetUserItemApi")) logger.info("Mai2 > $api : $it") + if (api !in setOf("GetUserItemApi", "GetGameEventApi")) + logger.info("Mai2 > $api : $it") } ?: { logger.warn("Mai2 > $api not found") """{"returnCode":1,"apiName":"com.sega.maimai2servlet.api.$api"}""" diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.java deleted file mode 100644 index 9209a569..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.java +++ /dev/null @@ -1,16 +0,0 @@ -package icu.samnyan.aqua.sega.maimai2.handler; - -import com.fasterxml.jackson.core.JsonProcessingException; -import icu.samnyan.aqua.sega.general.BaseHandler; - -import java.util.Map; - -public interface UserReqHandler extends BaseHandler { - @Override - default Object handle(Map request) throws JsonProcessingException { - var userId = ((Number) request.get("userId")).longValue(); - return handleThis(request, userId); - } - - Object handleThis(Map request, Long userId) throws JsonProcessingException; -} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.kt new file mode 100644 index 00000000..edd872e9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UserReqHandler.kt @@ -0,0 +1,13 @@ +package icu.samnyan.aqua.sega.maimai2.handler + +import ext.parsing +import icu.samnyan.aqua.sega.general.BaseHandler + +fun interface UserReqHandler : BaseHandler { + override fun handle(request: Map): Any { + val userId = parsing { (request["userId"] as Number).toLong() } + return handleThis(request, userId) + } + + fun handleThis(request: Map, userId: Long): Any +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRecommendRateMusic.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRecommendRateMusic.java deleted file mode 100644 index 85d88056..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRecommendRateMusic.java +++ /dev/null @@ -1,17 +0,0 @@ -package icu.samnyan.aqua.sega.maimai2.model.response.data; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UserRecommendRateMusic { - private int musicId; - private int level; - private int averageAchievement; -} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRivalData.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRivalData.java deleted file mode 100644 index 837a30d0..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRivalData.java +++ /dev/null @@ -1,13 +0,0 @@ -package icu.samnyan.aqua.sega.maimai2.model.response.data; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class UserRivalData { - private long rivalId; - private String rivalName; -} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java index 562a5ec1..729a32ce 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java @@ -35,7 +35,7 @@ public class IntegerListConverter implements AttributeConverter, S @Override public List convertToEntityAttribute(String string) { if (string != null && !string.isEmpty()) { - List iList = new ArrayList(); + List iList = new ArrayList<>(); for (String s : string.split(SPLIT_CHAR)) { iList.add(Integer.parseInt(s)); }