From a3ff08af27aaa5c495896c9aaf598fe4a3f48a77 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 7 May 2022 20:48:17 +0600 Subject: [PATCH] fixes according to updates --- .../auth/client/ClientCookiesConfigurator.kt | 22 ++++----- .../AuthenticationRoutingConfigurator.kt | 14 +++--- .../SessionAuthenticationConfigurator.kt | 4 +- features/common/server/build.gradle | 2 +- .../ApplicationAuthenticationConfigurator.kt | 7 ++- .../files/client/ClientReadFilesStorage.kt | 5 +- .../files/server/FilesRoutingConfigurator.kt | 8 +-- .../server/RolesManagerRolesChecker.kt | 2 +- .../features/roles/server/RolesChecker.kt | 2 +- ...lesStorageWriteServerRoutesConfigurator.kt | 5 +- .../UsersRolesAuthenticationConfigurator.kt | 8 ++- ...olesStorageReadServerRoutesConfigurator.kt | 4 +- .../server/StatusRoutingConfigurator.kt | 8 +-- features/users/server/build.gradle | 2 +- .../UsersStorageServerRoutesConfigurator.kt | 6 +-- gradle/libs.versions.toml | 2 +- mppJavaProject.gradle | 1 - .../SimplePublicatorRoutingConfigurator.kt | 4 +- .../posts/client/ClientWritePostsService.kt | 4 +- .../services/posts/client/TempUpload.kt | 12 ----- .../services/posts/client/ActualTempUpload.kt | 49 ------------------- .../services/posts/client/ActualTempUpload.kt | 38 -------------- .../ServerPostsServiceRoutingConfigurator.kt | 13 +++-- .../server/PublicationTargetTelegram.kt | 7 ++- 24 files changed, 61 insertions(+), 168 deletions(-) delete mode 100644 services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/TempUpload.kt delete mode 100644 services/posts/client/src/jsMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt delete mode 100644 services/posts/client/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt diff --git a/features/auth/client/src/commonMain/kotlin/dev/inmo/postssystem/features/auth/client/ClientCookiesConfigurator.kt b/features/auth/client/src/commonMain/kotlin/dev/inmo/postssystem/features/auth/client/ClientCookiesConfigurator.kt index 08c227ea..a2920273 100644 --- a/features/auth/client/src/commonMain/kotlin/dev/inmo/postssystem/features/auth/client/ClientCookiesConfigurator.kt +++ b/features/auth/client/src/commonMain/kotlin/dev/inmo/postssystem/features/auth/client/ClientCookiesConfigurator.kt @@ -5,11 +5,11 @@ import dev.inmo.postssystem.features.users.common.User import dev.inmo.micro_utils.common.* import dev.inmo.micro_utils.coroutines.launchSafelyWithoutExceptions import io.ktor.client.HttpClientConfig -import io.ktor.client.features.cookies.* -import io.ktor.client.features.expectSuccess +import io.ktor.client.plugins.cookies.AcceptAllCookiesStorage +import io.ktor.client.plugins.cookies.HttpCookies +import io.ktor.client.plugins.expectSuccess import io.ktor.client.request.* -import io.ktor.client.statement.HttpReceivePipeline -import io.ktor.client.statement.HttpResponse +import io.ktor.client.statement.* import io.ktor.http.* import kotlinx.coroutines.* import kotlinx.coroutines.sync.Mutex @@ -25,10 +25,6 @@ fun HttpClientConfig<*>.installClientAuthenticator( onUserRetrieved: suspend (User?) -> Unit, onAuthKeyInvalidated: suspend () -> Unit ) { -// install(Logging) { -// logger = Logger.DEFAULT -// level = LogLevel.HEADERS -// } install(HttpCookies) { // Will keep an in-memory map with all the cookies from previous requests. storage = AcceptAllCookiesStorage() @@ -98,13 +94,13 @@ fun HttpClientConfig<*>.installClientAuthenticator( receivePipeline.intercept(HttpReceivePipeline.Before) { if ( - context.request.url.toString().startsWith(baseUrl) - && context.response.status == HttpStatusCode.Unauthorized + it.request.url.toString().startsWith(baseUrl) + && it.status == HttpStatusCode.Unauthorized ) { authMutex.withLock { refreshToken() } - val newResponse = context.client ?.request{ - takeFrom(context.request) - } ?: return@intercept + val newResponse = it.call.client.request { + takeFrom(it.request) + } proceedWith(newResponse) } } diff --git a/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/AuthenticationRoutingConfigurator.kt b/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/AuthenticationRoutingConfigurator.kt index a4fb4827..d3941409 100644 --- a/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/AuthenticationRoutingConfigurator.kt +++ b/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/AuthenticationRoutingConfigurator.kt @@ -7,12 +7,12 @@ import dev.inmo.postssystem.features.users.common.User import dev.inmo.micro_utils.coroutines.safely import dev.inmo.micro_utils.ktor.server.* import dev.inmo.micro_utils.ktor.server.configurators.* -import io.ktor.application.* -import io.ktor.auth.* import io.ktor.http.HttpStatusCode -import io.ktor.response.respond -import io.ktor.routing.* -import io.ktor.sessions.* +import io.ktor.server.application.call +import io.ktor.server.auth.* +import io.ktor.server.response.respond +import io.ktor.server.routing.* +import io.ktor.server.sessions.sessions import kotlinx.serialization.builtins.nullable data class AuthUserPrincipal( @@ -58,7 +58,7 @@ class AuthenticationRoutingConfigurator( } } } - post(authRefreshPathPart) { + post (authRefreshPathPart) { safely( { // TODO:: add error info @@ -107,7 +107,7 @@ class AuthenticationRoutingConfigurator( } } - override fun Authentication.Configuration.invoke() { + override fun AuthenticationConfig.invoke() { session { validate { val result = authTokensService.getUserPrincipal(it) diff --git a/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/SessionAuthenticationConfigurator.kt b/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/SessionAuthenticationConfigurator.kt index 7e51f895..eff3ad8e 100644 --- a/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/SessionAuthenticationConfigurator.kt +++ b/features/auth/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/auth/server/SessionAuthenticationConfigurator.kt @@ -4,14 +4,14 @@ import dev.inmo.postssystem.features.auth.common.AuthToken import dev.inmo.postssystem.features.common.common.Milliseconds import dev.inmo.postssystem.features.auth.common.tokenSessionKey import dev.inmo.micro_utils.ktor.server.configurators.ApplicationSessionsConfigurator -import io.ktor.sessions.* +import io.ktor.server.sessions.* import java.util.concurrent.TimeUnit class SessionAuthenticationConfigurator( private val maxAge: Milliseconds ) : ApplicationSessionsConfigurator.Element { private val maxAgeInSeconds = TimeUnit.MILLISECONDS.toSeconds(maxAge) - override fun Sessions.Configuration.invoke() { + override fun SessionsConfig.invoke() { cookie(tokenSessionKey) { cookie.maxAgeInSeconds = maxAgeInSeconds serializer = object : SessionSerializer { diff --git a/features/common/server/build.gradle b/features/common/server/build.gradle index 1dbe1f1c..0266871d 100644 --- a/features/common/server/build.gradle +++ b/features/common/server/build.gradle @@ -17,7 +17,7 @@ kotlin { } jvmMain { dependencies { - api libs.ktor.auth + api libs.ktor.server.auth api libs.logback } } diff --git a/features/common/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/common/server/sessions/ApplicationAuthenticationConfigurator.kt b/features/common/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/common/server/sessions/ApplicationAuthenticationConfigurator.kt index c4eaf084..8d61f75a 100644 --- a/features/common/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/common/server/sessions/ApplicationAuthenticationConfigurator.kt +++ b/features/common/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/common/server/sessions/ApplicationAuthenticationConfigurator.kt @@ -1,14 +1,13 @@ package dev.inmo.postssystem.features.common.server.sessions import dev.inmo.micro_utils.ktor.server.configurators.KtorApplicationConfigurator -import io.ktor.application.Application -import io.ktor.auth.Authentication -import io.ktor.auth.authentication +import io.ktor.server.application.Application +import io.ktor.server.auth.* class ApplicationAuthenticationConfigurator( private val elements: List ) : KtorApplicationConfigurator { - fun interface Element { operator fun Authentication.Configuration.invoke() } + fun interface Element { operator fun AuthenticationConfig.invoke() } override fun Application.configure() { authentication { diff --git a/features/files/client/src/commonMain/kotlin/dev/inmo/postssystem/features/files/client/ClientReadFilesStorage.kt b/features/files/client/src/commonMain/kotlin/dev/inmo/postssystem/features/files/client/ClientReadFilesStorage.kt index 50b208a1..603b047b 100644 --- a/features/files/client/src/commonMain/kotlin/dev/inmo/postssystem/features/files/client/ClientReadFilesStorage.kt +++ b/features/files/client/src/commonMain/kotlin/dev/inmo/postssystem/features/files/client/ClientReadFilesStorage.kt @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.repos.ReadCRUDRepo import dev.inmo.micro_utils.repos.ktor.client.crud.KtorReadStandardCrudRepo import io.ktor.client.HttpClient import io.ktor.client.request.post +import io.ktor.client.request.setBody import io.ktor.client.statement.HttpResponse import io.ktor.client.statement.readBytes import kotlinx.serialization.BinaryFormat @@ -31,8 +32,8 @@ class ClientReadFilesStorage( filesGetFilesPathPart ) - override suspend fun getBytes(id: FileId): ByteArray = client.post(fullFilesGetBytesPath) { - body = serialFormat.encodeToByteArray(FileId.serializer(), id) + override suspend fun getBytes(id: FileId): ByteArray = client.post(fullFilesGetBytesPath) { + setBody(serialFormat.encodeToByteArray(FileId.serializer(), id)) }.readBytes() override suspend fun getFullFileInfo( diff --git a/features/files/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/files/server/FilesRoutingConfigurator.kt b/features/files/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/files/server/FilesRoutingConfigurator.kt index cf08a81e..b47e70c2 100644 --- a/features/files/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/files/server/FilesRoutingConfigurator.kt +++ b/features/files/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/files/server/FilesRoutingConfigurator.kt @@ -6,10 +6,10 @@ import dev.inmo.micro_utils.ktor.server.* import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator import dev.inmo.micro_utils.repos.ktor.server.crud.configureReadStandardCrudRepoRoutes import dev.inmo.micro_utils.repos.ktor.server.crud.configureWriteStandardCrudRepoRoutes -import io.ktor.application.call -import io.ktor.auth.authenticate -import io.ktor.response.respondBytes -import io.ktor.routing.* +import io.ktor.server.application.call +import io.ktor.server.auth.authenticate +import io.ktor.server.response.respondBytes +import io.ktor.server.routing.* import kotlinx.serialization.builtins.nullable class FilesRoutingConfigurator( diff --git a/features/roles/manager/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/manager/server/RolesManagerRolesChecker.kt b/features/roles/manager/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/manager/server/RolesManagerRolesChecker.kt index d65211e3..ce241ced 100644 --- a/features/roles/manager/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/manager/server/RolesManagerRolesChecker.kt +++ b/features/roles/manager/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/manager/server/RolesManagerRolesChecker.kt @@ -4,7 +4,7 @@ import dev.inmo.postssystem.features.roles.common.* import dev.inmo.postssystem.features.roles.manager.common.GeneralRolesManagerRole import dev.inmo.postssystem.features.roles.server.RolesChecker import dev.inmo.postssystem.features.users.common.User -import io.ktor.application.ApplicationCall +import io.ktor.server.application.ApplicationCall object RolesManagerRolesChecker : RolesChecker { override val key: String diff --git a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesChecker.kt b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesChecker.kt index b6e118b3..5c4164dc 100644 --- a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesChecker.kt +++ b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesChecker.kt @@ -2,7 +2,7 @@ package dev.inmo.postssystem.features.roles.server import dev.inmo.postssystem.features.roles.common.* import dev.inmo.postssystem.features.users.common.User -import io.ktor.application.ApplicationCall +import io.ktor.server.application.ApplicationCall interface RolesChecker { val key: String diff --git a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesStorageWriteServerRoutesConfigurator.kt b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesStorageWriteServerRoutesConfigurator.kt index 9da02867..a7e302e2 100644 --- a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesStorageWriteServerRoutesConfigurator.kt +++ b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/RolesStorageWriteServerRoutesConfigurator.kt @@ -3,9 +3,8 @@ package dev.inmo.postssystem.features.roles.server import dev.inmo.postssystem.features.roles.common.* import dev.inmo.micro_utils.ktor.server.* import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator -import io.ktor.application.call -import io.ktor.auth.authenticate -import io.ktor.routing.* +import io.ktor.server.auth.authenticate +import io.ktor.server.routing.* import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer diff --git a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesAuthenticationConfigurator.kt b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesAuthenticationConfigurator.kt index 02ce53b8..cb502bd9 100644 --- a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesAuthenticationConfigurator.kt +++ b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesAuthenticationConfigurator.kt @@ -6,18 +6,16 @@ import dev.inmo.postssystem.features.auth.server.tokens.AuthTokensService import dev.inmo.postssystem.features.common.server.sessions.ApplicationAuthenticationConfigurator import dev.inmo.postssystem.features.roles.common.Role import dev.inmo.postssystem.features.roles.common.RolesStorage -import io.ktor.application.call -import io.ktor.auth.Authentication -import io.ktor.auth.session import io.ktor.http.HttpStatusCode -import io.ktor.response.respond +import io.ktor.server.auth.* +import io.ktor.server.response.respond class RolesAuthenticationConfigurator( private val usersRolesStorage: RolesStorage, private val authTokensService: AuthTokensService, private val rolesCheckers: List> ) : ApplicationAuthenticationConfigurator.Element { - override fun Authentication.Configuration.invoke() { + override fun AuthenticationConfig.invoke() { rolesCheckers.forEach { checker -> session(checker.key) { validate { diff --git a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesStorageReadServerRoutesConfigurator.kt b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesStorageReadServerRoutesConfigurator.kt index 24440239..e7284329 100644 --- a/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesStorageReadServerRoutesConfigurator.kt +++ b/features/roles/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/roles/server/UsersRolesStorageReadServerRoutesConfigurator.kt @@ -3,8 +3,8 @@ package dev.inmo.postssystem.features.roles.server import dev.inmo.postssystem.features.roles.common.* import dev.inmo.micro_utils.ktor.server.* import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator -import io.ktor.auth.authenticate -import io.ktor.routing.* +import io.ktor.server.auth.authenticate +import io.ktor.server.routing.* import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.serializer diff --git a/features/status/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/status/server/StatusRoutingConfigurator.kt b/features/status/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/status/server/StatusRoutingConfigurator.kt index 083402cd..673d3669 100644 --- a/features/status/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/status/server/StatusRoutingConfigurator.kt +++ b/features/status/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/status/server/StatusRoutingConfigurator.kt @@ -3,11 +3,11 @@ package dev.inmo.postssystem.features.status.server import dev.inmo.postssystem.features.status.common.statusAuthorisedPathPart import dev.inmo.postssystem.features.status.common.statusRootPart import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator -import io.ktor.application.call -import io.ktor.auth.authenticate import io.ktor.http.HttpStatusCode -import io.ktor.response.respond -import io.ktor.routing.* +import io.ktor.server.application.call +import io.ktor.server.auth.authenticate +import io.ktor.server.response.respond +import io.ktor.server.routing.* object StatusRoutingConfigurator : ApplicationRoutingConfigurator.Element { override fun Route.invoke() { diff --git a/features/users/server/build.gradle b/features/users/server/build.gradle index c5ada731..65bc6f53 100644 --- a/features/users/server/build.gradle +++ b/features/users/server/build.gradle @@ -15,7 +15,7 @@ kotlin { } jvmMain { dependencies { - api libs.ktor.auth + api libs.ktor.server.auth api libs.ktor.server.sessions } } diff --git a/features/users/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/users/server/UsersStorageServerRoutesConfigurator.kt b/features/users/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/users/server/UsersStorageServerRoutesConfigurator.kt index 4335cafb..781a8514 100644 --- a/features/users/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/users/server/UsersStorageServerRoutesConfigurator.kt +++ b/features/users/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/users/server/UsersStorageServerRoutesConfigurator.kt @@ -4,9 +4,9 @@ import dev.inmo.micro_utils.ktor.server.UnifiedRouter import dev.inmo.postssystem.features.users.common.* import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator import dev.inmo.micro_utils.repos.ktor.server.crud.configureReadStandardCrudRepoRoutes -import io.ktor.auth.authenticate -import io.ktor.routing.Route -import io.ktor.routing.route +import io.ktor.server.auth.authenticate +import io.ktor.server.routing.Route +import io.ktor.server.routing.route import kotlinx.serialization.builtins.nullable class UsersStorageServerRoutesConfigurator( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6587156e..de77b1ac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -53,7 +53,7 @@ ktor-client-apache = { module = "io.ktor:ktor-client-apache", version.ref = "kto ktor-client-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor" } ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } ktor-http = { module = "io.ktor:ktor-http", version.ref = "ktor" } -ktor-auth = { module = "io.ktor:ktor-auth", version.ref = "ktor" } +ktor-server-auth = { module = "io.ktor:ktor-server-auth", version.ref = "ktor" } ktor-server-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktor" } ktor-server-sessions = { module = "io.ktor:ktor-server-sessions", version.ref = "ktor" } ktor-websockets = { module = "io.ktor:ktor-websockets", version.ref = "ktor" } diff --git a/mppJavaProject.gradle b/mppJavaProject.gradle index 6920ca91..c10ccc57 100644 --- a/mppJavaProject.gradle +++ b/mppJavaProject.gradle @@ -26,7 +26,6 @@ kotlin { } } - println(this::class) allTargetsConfiguration() } diff --git a/publicators/simple/server/src/jvmMain/kotlin/dev/inmo/postssystem/publicators/simple/server/SimplePublicatorRoutingConfigurator.kt b/publicators/simple/server/src/jvmMain/kotlin/dev/inmo/postssystem/publicators/simple/server/SimplePublicatorRoutingConfigurator.kt index 2d7dd9ca..a55bccdb 100644 --- a/publicators/simple/server/src/jvmMain/kotlin/dev/inmo/postssystem/publicators/simple/server/SimplePublicatorRoutingConfigurator.kt +++ b/publicators/simple/server/src/jvmMain/kotlin/dev/inmo/postssystem/publicators/simple/server/SimplePublicatorRoutingConfigurator.kt @@ -8,8 +8,8 @@ import dev.inmo.postssystem.features.publication.common.publicatorsRootPath import dev.inmo.postssystem.features.publication.server.PublicationManager import dev.inmo.postssystem.publicators.simple.common.simplePublicatorPublishPathPart import dev.inmo.postssystem.publicators.simple.common.simplePublicatorRootPath -import io.ktor.application.call -import io.ktor.routing.* +import io.ktor.server.application.call +import io.ktor.server.routing.* import kotlinx.serialization.builtins.serializer class SimplePublicatorRoutingConfigurator( diff --git a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ClientWritePostsService.kt b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ClientWritePostsService.kt index fe49bdd3..00026fbc 100644 --- a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ClientWritePostsService.kt +++ b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ClientWritePostsService.kt @@ -2,6 +2,7 @@ package dev.inmo.postssystem.services.posts.client import dev.inmo.micro_utils.common.* import dev.inmo.micro_utils.ktor.client.UnifiedRequester +import dev.inmo.micro_utils.ktor.client.tempUpload import dev.inmo.micro_utils.ktor.common.buildStandardUrl import dev.inmo.micro_utils.ktor.common.encodeHex import dev.inmo.micro_utils.repos.ktor.common.crud.createRouting @@ -10,6 +11,7 @@ import dev.inmo.micro_utils.repos.ktor.common.one_to_many.removeRoute import dev.inmo.postssystem.features.common.common.FileBasedInputProvider import dev.inmo.postssystem.features.common.common.SimpleInputProvider import dev.inmo.postssystem.features.content.common.* +import dev.inmo.postssystem.features.files.common.FileId import dev.inmo.postssystem.features.posts.common.PostId import dev.inmo.postssystem.features.posts.common.RegisteredPost import dev.inmo.postssystem.services.posts.common.* @@ -61,7 +63,7 @@ class ClientWritePostsService( provider.file ) println(fileId) - it.copy(inputProvider = TempFileIdentifierInputProvider(fileId)) + it.copy(inputProvider = TempFileIdentifierInputProvider(FileId(fileId.string))) } is TempFileIdentifierInputProvider -> it else -> return@prepareContent null diff --git a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/TempUpload.kt b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/TempUpload.kt deleted file mode 100644 index 0948e3de..00000000 --- a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/TempUpload.kt +++ /dev/null @@ -1,12 +0,0 @@ -package dev.inmo.postssystem.services.posts.client - -import dev.inmo.micro_utils.common.MPPFile -import dev.inmo.micro_utils.ktor.client.UnifiedRequester -import dev.inmo.postssystem.features.files.common.FileId - -internal expect suspend fun UnifiedRequester.tempUpload( - fullTempUploadDraftPath: String, - file: MPPFile, - onUpload: (Long, Long) -> Unit = { _, _ -> } -): FileId - diff --git a/services/posts/client/src/jsMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt b/services/posts/client/src/jsMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt deleted file mode 100644 index efc3e6e5..00000000 --- a/services/posts/client/src/jsMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt +++ /dev/null @@ -1,49 +0,0 @@ -package dev.inmo.postssystem.services.posts.client - -import dev.inmo.micro_utils.common.MPPFile -import dev.inmo.micro_utils.ktor.client.UnifiedRequester -import dev.inmo.postssystem.features.files.common.FileId -import kotlinx.coroutines.* -import kotlinx.coroutines.GlobalScope.coroutineContext -import org.w3c.xhr.* - -internal actual suspend fun UnifiedRequester.tempUpload( - fullTempUploadDraftPath: String, - file: MPPFile, - onUpload: (Long, Long) -> Unit -): FileId { - val formData = FormData() - val answer = CompletableDeferred() - - formData.append( - "data", - file - ) - - val request = XMLHttpRequest() - request.responseType = XMLHttpRequestResponseType.TEXT - request.upload.onprogress = { - onUpload(it.loaded.toLong(), it.total.toLong()) - } - request.onload = { - if (request.status == 200.toShort()) { - answer.complete(FileId(request.responseText)) - } else { - answer.completeExceptionally(Exception("Something went wrong")) - } - } - request.onerror = { - answer.completeExceptionally(Exception("Something went wrong")) - } - request.open("POST", fullTempUploadDraftPath, true) - request.send(formData) - - currentCoroutineContext().job.invokeOnCompletion { - runCatching { - request.abort() - } - } - - return answer.await() -} - diff --git a/services/posts/client/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt b/services/posts/client/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt deleted file mode 100644 index 62743962..00000000 --- a/services/posts/client/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/client/ActualTempUpload.kt +++ /dev/null @@ -1,38 +0,0 @@ -package dev.inmo.postssystem.services.posts.client - -import dev.inmo.micro_utils.common.MPPFile -import dev.inmo.micro_utils.common.filename -import dev.inmo.micro_utils.ktor.client.UnifiedRequester -import dev.inmo.micro_utils.ktor.client.inputProvider -import dev.inmo.postssystem.features.common.common.mimeType -import dev.inmo.postssystem.features.files.common.FileId -import io.ktor.client.features.onUpload -import io.ktor.client.request.forms.formData -import io.ktor.client.request.forms.submitFormWithBinaryData -import io.ktor.http.Headers -import io.ktor.http.HttpHeaders - -internal actual suspend fun UnifiedRequester.tempUpload( - fullTempUploadDraftPath: String, - file: MPPFile, - onUpload: (Long, Long) -> Unit -): FileId { - val inputProvider = file.inputProvider() - val fileId = client.submitFormWithBinaryData( - fullTempUploadDraftPath, - formData = formData { - append( - "data", - inputProvider, - Headers.build { - append(HttpHeaders.ContentType, file.mimeType.raw) - append(HttpHeaders.ContentDisposition, "filename=\"${file.filename.string}\"") - } - ) - } - ) { - onUpload(onUpload) - } - return FileId(fileId) -} - diff --git a/services/posts/server/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/server/ServerPostsServiceRoutingConfigurator.kt b/services/posts/server/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/server/ServerPostsServiceRoutingConfigurator.kt index dfa3b024..ace41c12 100644 --- a/services/posts/server/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/server/ServerPostsServiceRoutingConfigurator.kt +++ b/services/posts/server/src/jvmMain/kotlin/dev/inmo/postssystem/services/posts/server/ServerPostsServiceRoutingConfigurator.kt @@ -16,16 +16,15 @@ import dev.inmo.postssystem.features.content.common.* import dev.inmo.postssystem.features.files.common.FileId import dev.inmo.postssystem.features.posts.common.* import dev.inmo.postssystem.services.posts.common.* -import io.ktor.application.ApplicationCall -import io.ktor.application.call -import io.ktor.auth.authenticate import io.ktor.http.HttpStatusCode import io.ktor.http.content.PartData import io.ktor.http.content.streamProvider -import io.ktor.request.isMultipart -import io.ktor.request.receiveMultipart -import io.ktor.response.respond -import io.ktor.routing.* +import io.ktor.server.application.ApplicationCall +import io.ktor.server.application.call +import io.ktor.server.auth.authenticate +import io.ktor.server.request.receiveMultipart +import io.ktor.server.response.respond +import io.ktor.server.routing.* import io.ktor.util.asStream import io.ktor.util.pipeline.PipelineContext import io.ktor.utils.io.core.use diff --git a/targets/telegram/publication/server/src/jvmMain/kotlin/dev/inmo/postssystem/targets/telegram/publication/server/PublicationTargetTelegram.kt b/targets/telegram/publication/server/src/jvmMain/kotlin/dev/inmo/postssystem/targets/telegram/publication/server/PublicationTargetTelegram.kt index 61eac580..ae5902da 100644 --- a/targets/telegram/publication/server/src/jvmMain/kotlin/dev/inmo/postssystem/targets/telegram/publication/server/PublicationTargetTelegram.kt +++ b/targets/telegram/publication/server/src/jvmMain/kotlin/dev/inmo/postssystem/targets/telegram/publication/server/PublicationTargetTelegram.kt @@ -7,12 +7,11 @@ import dev.inmo.postssystem.features.publication.server.PublicationPost import dev.inmo.postssystem.features.publication.server.PublicationTarget import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.extensions.utils.shortcuts.executeUnsafe +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile import dev.inmo.tgbotapi.requests.abstracts.asMultipartFile import dev.inmo.tgbotapi.requests.send.SendTextMessage import dev.inmo.tgbotapi.requests.send.media.* import dev.inmo.tgbotapi.types.ChatId -import dev.inmo.tgbotapi.utils.StorageFile -import dev.inmo.tgbotapi.utils.StorageFileInfo import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.core.readBytes import kotlinx.coroutines.delay @@ -26,9 +25,9 @@ class PublicationTargetTelegram( when (val content = it.content) { is BinaryContent -> { val storageFile by lazy { - StorageFile(StorageFileInfo(content.filename.name)) { + MultipartFile(content.filename.name) { content.inputProvider() - }.asMultipartFile() + } } when (content.mimeType) { is KnownMimeTypes.Image.Jpeg,