mirror of https://github.com/usbharu/Hideout.git
51 lines
1.7 KiB
Kotlin
51 lines
1.7 KiB
Kotlin
package dev.usbharu.hideout.service.user
|
|
|
|
import dev.usbharu.hideout.config.Config
|
|
import dev.usbharu.hideout.query.UserQueryService
|
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
|
|
import org.springframework.stereotype.Service
|
|
import java.security.*
|
|
import java.util.*
|
|
|
|
@Service
|
|
class UserAuthServiceImpl(
|
|
val userQueryService: UserQueryService
|
|
) : UserAuthService {
|
|
|
|
override fun hash(password: String): String = BCryptPasswordEncoder().encode(password)
|
|
|
|
override suspend fun usernameAlreadyUse(username: String): Boolean {
|
|
userQueryService.findByName(username)
|
|
return true
|
|
}
|
|
|
|
override suspend fun verifyAccount(username: String, password: String): Boolean {
|
|
val userEntity = userQueryService.findByNameAndDomain(username, Config.configData.domain)
|
|
return userEntity.password == hash(password)
|
|
}
|
|
|
|
override suspend fun generateKeyPair(): KeyPair {
|
|
val keyPairGenerator = KeyPairGenerator.getInstance("RSA")
|
|
keyPairGenerator.initialize(keySize)
|
|
return keyPairGenerator.generateKeyPair()
|
|
}
|
|
|
|
companion object {
|
|
val sha256: MessageDigest = MessageDigest.getInstance("SHA-256")
|
|
const val keySize = 2048
|
|
const val pemSize = 64
|
|
}
|
|
}
|
|
|
|
fun PublicKey.toPem(): String {
|
|
return "-----BEGIN PUBLIC KEY-----\n" +
|
|
Base64.getEncoder().encodeToString(encoded).chunked(UserAuthServiceImpl.pemSize).joinToString("\n") +
|
|
"\n-----END PUBLIC KEY-----\n"
|
|
}
|
|
|
|
fun PrivateKey.toPem(): String {
|
|
return "-----BEGIN PRIVATE KEY-----\n" +
|
|
Base64.getEncoder().encodeToString(encoded).chunked(UserAuthServiceImpl.pemSize).joinToString("\n") +
|
|
"\n-----END PRIVATE KEY-----\n"
|
|
}
|