diff --git a/src/main/java/ext/Ext.kt b/src/main/java/ext/Ext.kt index 6df696da..626ec167 100644 --- a/src/main/java/ext/Ext.kt +++ b/src/main/java/ext/Ext.kt @@ -1,14 +1,16 @@ package ext +import io.ktor.client.* +import io.ktor.client.engine.cio.* +import io.ktor.client.plugins.contentnegotiation.* +import io.ktor.serialization.kotlinx.json.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.springframework.http.HttpStatus import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestHeader import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.server.ResponseStatusException -import io.ktor.client.* -import io.ktor.client.engine.cio.* -import io.ktor.client.plugins.contentnegotiation.* -import io.ktor.serialization.kotlinx.json.* typealias RP = RequestParam typealias RB = RequestBody @@ -31,4 +33,6 @@ val HTTP = HttpClient(CIO) { install(ContentNegotiation) { json() } -} \ No newline at end of file +} + +suspend fun async(block: suspend kotlinx.coroutines.CoroutineScope.() -> T): T = withContext(Dispatchers.IO) { block() } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/UserRegistrar.kt b/src/main/java/icu/samnyan/aqua/net/UserRegistrar.kt index 060b34bf..52144b86 100644 --- a/src/main/java/icu/samnyan/aqua/net/UserRegistrar.kt +++ b/src/main/java/icu/samnyan/aqua/net/UserRegistrar.kt @@ -4,8 +4,9 @@ import ext.* import icu.samnyan.aqua.net.db.AquaNetUser import icu.samnyan.aqua.net.db.AquaNetUserRepo import icu.samnyan.aqua.net.utils.TurnstileService -import io.ktor.client.request.* import jakarta.servlet.http.HttpServletRequest +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping @@ -22,23 +23,21 @@ class UserRegistrar( * Register a new user */ @PostMapping("/register") - fun register(@RP email: Str, @RP pass: Str, @RP captcha: Str?, request: HttpServletRequest) { - request.ip - + suspend fun register(@RP email: Str, @RP pass: Str, @RP captcha: Str?, request: HttpServletRequest) { // Check captcha - if (!turnstileService.validate(captcha, + if (!turnstileService.validate(captcha, request)) 400 > "Invalid captcha" // Check if email is valid if (!email.isValidEmail()) 400 > "Invalid email" // Check if user with the same email exists - if (userRepo.existsByEmail(email)) 400 > "User already exists" + if (async { userRepo.existsByEmail(email) }) 400 > "User already exists" // Validate password if (pass.length < 8) 400 > "Password too short" val u = AquaNetUser(email = email, pwHash = hasher.encode(pass), regTime = millis(), lastLogin = millis()) - userRepo.save(u) + async { userRepo.save(u) } 200 > "User created" }