Files
AquaDX/src/main/java/icu/samnyan/aqua/net/Frontier.kt
2025-10-25 05:50:01 +08:00

60 lines
1.9 KiB
Kotlin

package icu.samnyan.aqua.net
import ext.*
import icu.samnyan.aqua.sega.general.service.CardService
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration
import org.springframework.web.bind.annotation.RestController
@Configuration
@ConfigurationProperties(prefix = "aqua-net.frontier")
class FrontierProps {
var enabled: Boolean = false
var ftk: String = ""
}
@RestController
@ConditionalOnProperty("aqua-net.frontier.enabled", havingValue = "true")
@API("/api/v2/frontier")
class Frontier(
val cardService: CardService,
val props: FrontierProps,
val fedy: Fedy
) {
fun Str.checkFtk() {
if (this != props.ftk) 403 - "Invalid FTK"
}
@API("/register-card")
@Doc("Register a new card by access code", "Card information")
suspend fun registerCard(@RP ftk: Str, @RP accessCode: Str): Any {
ftk.checkFtk()
if (accessCode.length != 20) 400 - "Invalid access code"
// if (!accessCode.startsWith("9900")) 400 - "Frontier access code must start with 9900"
if (async { cardService.cardRepo.findByLuid(accessCode) } != null) 400 - "Card already registered"
val card = async { cardService.registerByAccessCode(accessCode) }
fedy.onCardCreated(accessCode, card.extId)
return mapOf(
"card" to card,
"id" to card.extId // Expose hidden ID
)
}
@API("/lookup-card")
@Doc("Lookup a card by access code", "Card information")
suspend fun lookupCard(@RP ftk: Str, @RP accessCode: Str): Any {
ftk.checkFtk()
val card = cardService.tryLookup(accessCode) ?: (404 - "Card not found")
return mapOf(
"card" to card,
"id" to card.extId // Expose hidden ID
)
}
}