add gigawear auth repository
This commit is contained in:
+4
-8
@@ -6,6 +6,7 @@ import ru.shadowsparky.backend.data.EnvFetcher
|
||||
import ru.shadowsparky.backend.data.JwtPreparer
|
||||
import ru.shadowsparky.backend.data.StringFetcher
|
||||
import ru.shadowsparky.backend.data.StringResource
|
||||
import ru.shadowsparky.backend.data.toTokenHash
|
||||
import ru.shadowsparky.backend.domain.LoginVerifier
|
||||
import ru.shadowsparky.domain.Log
|
||||
import ru.shadowsparky.http.domain.BadRequestException
|
||||
@@ -17,10 +18,8 @@ import ru.shadowsparky.vbox.shared.domain.AuthTokenRepository
|
||||
import ru.shadowsparky.vbox.shared.domain.ChangePasswordRequest
|
||||
import ru.shadowsparky.vbox.shared.domain.TokenRequest
|
||||
import ru.shadowsparky.vbox.shared.domain.model.LoginInfo
|
||||
import java.security.MessageDigest
|
||||
import java.security.SecureRandom
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.io.encoding.Base64
|
||||
|
||||
@Factory
|
||||
class AuthTokenRepositoryFactory(
|
||||
@@ -131,10 +130,10 @@ class BackendAuthTokenRepository(
|
||||
}
|
||||
|
||||
private suspend fun create(login: String): TokenInfo = withContext(dispatcherProvider.io) {
|
||||
loginVerifier.verify(login)
|
||||
val userInfo = userInfoCache.query(login)
|
||||
?: throw BadRequestException(stringFetcher.get(StringResource.UNKNOWN_USER))
|
||||
val rsp = jwtPreparer.prepare(login, userInfo.userId)
|
||||
loginVerifier.verify(userInfo.userId)
|
||||
val rsp = jwtPreparer.prepare(userInfo.userId)
|
||||
val refresh = ByteArray(32)
|
||||
random.nextBytes(refresh)
|
||||
val refreshStr = refresh.toHexString()
|
||||
@@ -164,10 +163,7 @@ class BackendAuthTokenRepository(
|
||||
}
|
||||
|
||||
private fun String.toHash(): String {
|
||||
val md = MessageDigest.getInstance("SHA-256")
|
||||
md.update(SALT.toByteArray())
|
||||
val result = md.digest(this.toByteArray())
|
||||
return Base64.encode(result)
|
||||
return toTokenHash(SALT)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
+2
-2
@@ -12,8 +12,8 @@ class BackendLoginVerifier(
|
||||
private val stringFetcher: StringFetcher,
|
||||
private val userInfoCache: UserInfoCache
|
||||
) : LoginVerifier {
|
||||
override suspend fun verify(login: String) {
|
||||
val user = userInfoCache.query(login)
|
||||
override suspend fun verify(userId: Long) {
|
||||
val user = userInfoCache.query(userId)
|
||||
?: throw VerifyTokenException(stringFetcher.get(StringResource.UNKNOWN_USER))
|
||||
user.flags?.let {
|
||||
if ((it and FLAG_USER_BLOCKED) != 0) {
|
||||
|
||||
@@ -30,4 +30,4 @@ class DbModule {
|
||||
fun provideDb(driver: SqlDriver): AppDatabase {
|
||||
return AppDatabase.Companion.invoke(driver)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import ru.shadowsparky.backend.domain.JwtInfo
|
||||
import ru.shadowsparky.backend.domain.LoginVerifier
|
||||
import ru.shadowsparky.backend.domain.RemoteEventHandler
|
||||
import ru.shadowsparky.chat.backend.domain.ProcessUserMessageUseCase
|
||||
import ru.shadowsparky.vbox.backend.data.BackendUpdateFetcherFactory
|
||||
import ru.shadowsparky.updater.backend.data.BackendUpdateFetcherFactory
|
||||
import ru.shadowsparky.vbox.backend.data.auth.AuthTokenRepositoryFactory
|
||||
import ru.shadowsparky.vbox.backend.data.chat.BackendChatRepositoryFactory
|
||||
import ru.shadowsparky.vbox.backend.data.tags.MovieTagRepositoryFactory
|
||||
|
||||
@@ -6,8 +6,6 @@ import ru.shadowsparky.backend.presentation.configureJwt
|
||||
import ru.shadowsparky.backend.presentation.obtainUserId
|
||||
import ru.shadowsparky.vbox.backend.di.AuthEntryPoint
|
||||
|
||||
const val AUTH_JWT_NAME = "auth-jwt"
|
||||
|
||||
fun Application.configureJwt(authEntryPoint: AuthEntryPoint) = with(authEntryPoint) {
|
||||
configureJwt(jwtInfo, tokenVerifier, loginVerifier)
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,9 +7,9 @@ import io.ktor.server.response.respond
|
||||
import io.ktor.server.routing.Routing
|
||||
import io.ktor.server.routing.get
|
||||
import io.ktor.server.routing.post
|
||||
import ru.shadowsparky.backend.presentation.AUTH_JWT_NAME
|
||||
import ru.shadowsparky.vbox.backend.di.AuthEntryPoint
|
||||
import ru.shadowsparky.vbox.backend.di.RoutingEntryPoint
|
||||
import ru.shadowsparky.vbox.backend.presentation.AUTH_JWT_NAME
|
||||
import ru.shadowsparky.vbox.backend.presentation.obtainUserId
|
||||
import ru.shadowsparky.vbox.shared.domain.AuthTokenRepository
|
||||
import ru.shadowsparky.vbox.shared.domain.HealthCheck
|
||||
|
||||
Reference in New Issue
Block a user