diff --git a/app/src/main/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImpl.kt b/app/src/main/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImpl.kt index e963a62..531c0b5 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImpl.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImpl.kt @@ -3,6 +3,7 @@ package gq.kirmanak.mealient.data.auth.impl import gq.kirmanak.mealient.data.auth.AuthDataSource import gq.kirmanak.mealient.data.auth.AuthRepo import gq.kirmanak.mealient.data.auth.AuthStorage +import gq.kirmanak.mealient.datasource.AuthenticationProvider import gq.kirmanak.mealient.datasource.runCatchingExceptCancel import gq.kirmanak.mealient.logging.Logger import kotlinx.coroutines.flow.Flow @@ -15,7 +16,7 @@ class AuthRepoImpl @Inject constructor( private val authStorage: AuthStorage, private val authDataSource: AuthDataSource, private val logger: Logger, -) : AuthRepo { +) : AuthRepo, AuthenticationProvider { override val isAuthorizedFlow: Flow get() = authStorage.authHeaderFlow.map { it != null } diff --git a/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt b/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt index f830766..2af3770 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapper.kt @@ -35,12 +35,12 @@ class MealieDataSourceWrapper @Inject constructor( override suspend fun addRecipe( recipe: AddRecipeInfo, - ): String = makeCall { token, url, version -> + ): String = makeCall { url, version -> when (version) { - ServerVersion.V0 -> v0Source.addRecipe(url, token, recipe.toV0Request()) + ServerVersion.V0 -> v0Source.addRecipe(url, recipe.toV0Request()) ServerVersion.V1 -> { - val slug = v1Source.createRecipe(url, token, recipe.toV1CreateRequest()) - v1Source.updateRecipe(url, token, slug, recipe.toV1UpdateRequest()) + val slug = v1Source.createRecipe(url, recipe.toV1CreateRequest()) + v1Source.updateRecipe(url, slug, recipe.toV1UpdateRequest()) slug } } @@ -49,53 +49,53 @@ class MealieDataSourceWrapper @Inject constructor( override suspend fun requestRecipes( start: Int, limit: Int, - ): List = makeCall { token, url, version -> + ): List = makeCall { url, version -> when (version) { ServerVersion.V0 -> { - v0Source.requestRecipes(url, token, start, limit).map { it.toRecipeSummaryInfo() } + v0Source.requestRecipes(url, start, limit).map { it.toRecipeSummaryInfo() } } ServerVersion.V1 -> { // Imagine start is 30 and limit is 15. It means that we already have page 1 and 2, now we need page 3 val page = start / limit + 1 - v1Source.requestRecipes(url, token, page, limit).map { it.toRecipeSummaryInfo() } + v1Source.requestRecipes(url, page, limit).map { it.toRecipeSummaryInfo() } } } } override suspend fun requestRecipeInfo( slug: String, - ): FullRecipeInfo = makeCall { token, url, version -> + ): FullRecipeInfo = makeCall { url, version -> when (version) { - ServerVersion.V0 -> v0Source.requestRecipeInfo(url, token, slug).toFullRecipeInfo() - ServerVersion.V1 -> v1Source.requestRecipeInfo(url, token, slug).toFullRecipeInfo() + ServerVersion.V0 -> v0Source.requestRecipeInfo(url, slug).toFullRecipeInfo() + ServerVersion.V1 -> v1Source.requestRecipeInfo(url, slug).toFullRecipeInfo() } } override suspend fun parseRecipeFromURL( parseRecipeURLInfo: ParseRecipeURLInfo, - ): String = makeCall { token, url, version -> + ): String = makeCall { url, version -> when (version) { ServerVersion.V0 -> { - v0Source.parseRecipeFromURL(url, token, parseRecipeURLInfo.toV0Request()) + v0Source.parseRecipeFromURL(url, parseRecipeURLInfo.toV0Request()) } ServerVersion.V1 -> { - v1Source.parseRecipeFromURL(url, token, parseRecipeURLInfo.toV1Request()) + v1Source.parseRecipeFromURL(url, parseRecipeURLInfo.toV1Request()) } } } - private suspend inline fun makeCall(block: (String?, String, ServerVersion) -> T): T { + private suspend inline fun makeCall(block: (String, ServerVersion) -> T): T { val authHeader = authRepo.getAuthHeader() val url = serverInfoRepo.requireUrl() val version = serverInfoRepo.getVersion() - return runCatchingExceptCancel { block(authHeader, url, version) }.getOrElse { + return runCatchingExceptCancel { block(url, version) }.getOrElse { if (it is NetworkError.Unauthorized) { logger.e { "Unauthorized, trying to invalidate token" } authRepo.invalidateAuthHeader() // Trying again with new authentication header val newHeader = authRepo.getAuthHeader() logger.e { "New token ${if (newHeader == authHeader) "matches" else "doesn't match"} old token" } - if (newHeader == authHeader) throw it else block(newHeader, url, version) + if (newHeader == authHeader) throw it else block(url, version) } else { throw it } diff --git a/app/src/main/java/gq/kirmanak/mealient/di/AuthModule.kt b/app/src/main/java/gq/kirmanak/mealient/di/AuthModule.kt index 4687932..be8828e 100644 --- a/app/src/main/java/gq/kirmanak/mealient/di/AuthModule.kt +++ b/app/src/main/java/gq/kirmanak/mealient/di/AuthModule.kt @@ -14,6 +14,7 @@ import gq.kirmanak.mealient.data.auth.AuthStorage import gq.kirmanak.mealient.data.auth.impl.AuthDataSourceImpl import gq.kirmanak.mealient.data.auth.impl.AuthRepoImpl import gq.kirmanak.mealient.data.auth.impl.AuthStorageImpl +import gq.kirmanak.mealient.datasource.AuthenticationProvider import javax.inject.Singleton @Module @@ -37,6 +38,10 @@ interface AuthModule { @Singleton fun bindAuthRepo(authRepo: AuthRepoImpl): AuthRepo + @Binds + @Singleton + fun bindAuthProvider(authRepo: AuthRepoImpl): AuthenticationProvider + @Binds @Singleton fun bindAuthStorage(authStorageImpl: AuthStorageImpl): AuthStorage diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/recipes/images/RecipeModelLoader.kt b/app/src/main/java/gq/kirmanak/mealient/ui/recipes/images/RecipeModelLoader.kt index a1651b3..9730bce 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/recipes/images/RecipeModelLoader.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/recipes/images/RecipeModelLoader.kt @@ -1,12 +1,12 @@ package gq.kirmanak.mealient.ui.recipes.images import com.bumptech.glide.load.Options -import com.bumptech.glide.load.model.* +import com.bumptech.glide.load.model.GlideUrl +import com.bumptech.glide.load.model.ModelCache +import com.bumptech.glide.load.model.ModelLoader import com.bumptech.glide.load.model.stream.BaseGlideUrlLoader -import gq.kirmanak.mealient.data.auth.AuthRepo import gq.kirmanak.mealient.data.recipes.impl.RecipeImageUrlProvider import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity -import gq.kirmanak.mealient.datasource.DataSourceModule.Companion.AUTHORIZATION_HEADER_NAME import gq.kirmanak.mealient.logging.Logger import kotlinx.coroutines.runBlocking import java.io.InputStream @@ -16,7 +16,6 @@ import javax.inject.Singleton class RecipeModelLoader private constructor( private val recipeImageUrlProvider: RecipeImageUrlProvider, private val logger: Logger, - private val authRepo: AuthRepo, concreteLoader: ModelLoader, cache: ModelCache, ) : BaseGlideUrlLoader(concreteLoader, cache) { @@ -25,13 +24,12 @@ class RecipeModelLoader private constructor( class Factory @Inject constructor( private val recipeImageUrlProvider: RecipeImageUrlProvider, private val logger: Logger, - private val authRepo: AuthRepo, ) { fun build( concreteLoader: ModelLoader, cache: ModelCache, - ) = RecipeModelLoader(recipeImageUrlProvider, logger, authRepo, concreteLoader, cache) + ) = RecipeModelLoader(recipeImageUrlProvider, logger, concreteLoader, cache) } @@ -46,20 +44,4 @@ class RecipeModelLoader private constructor( logger.v { "getUrl() called with: model = $model, width = $width, height = $height, options = $options" } return runBlocking { recipeImageUrlProvider.generateImageUrl(model?.imageId) } } - - override fun getHeaders( - model: RecipeSummaryEntity?, - width: Int, - height: Int, - options: Options? - ): Headers? { - val authorization = runBlocking { authRepo.getAuthHeader() } - return if (authorization.isNullOrBlank()) { - super.getHeaders(model, width, height, options) - } else { - LazyHeaders.Builder() - .setHeader(AUTHORIZATION_HEADER_NAME, authorization) - .build() - } - } } \ No newline at end of file diff --git a/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt index cc23507..49c02f3 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt @@ -57,11 +57,8 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { fun `when makeCall fails with Unauthorized expect it to invalidate token`() = runTest { val slug = "porridge" coEvery { - v0Source.requestRecipeInfo(any(), isNull(), any()) - } throws NetworkError.Unauthorized(IOException()) - coEvery { - v0Source.requestRecipeInfo(any(), eq(TEST_AUTH_HEADER), any()) - } returns PORRIDGE_RECIPE_RESPONSE_V0 + v0Source.requestRecipeInfo(any(), any()) + } throws NetworkError.Unauthorized(IOException()) andThen PORRIDGE_RECIPE_RESPONSE_V0 coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V0 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL coEvery { authRepo.getAuthHeader() } returns null andThen TEST_AUTH_HEADER @@ -79,7 +76,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { fun `when server version v1 expect requestRecipeInfo to call v1`() = runTest { val slug = "porridge" coEvery { - v1Source.requestRecipeInfo(eq(TEST_BASE_URL), eq(TEST_AUTH_HEADER), eq(slug)) + v1Source.requestRecipeInfo(eq(TEST_BASE_URL), eq(slug)) } returns PORRIDGE_RECIPE_RESPONSE_V1 coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V1 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL @@ -87,7 +84,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { val actual = subject.requestRecipeInfo(slug) - coVerify { v1Source.requestRecipeInfo(eq(TEST_BASE_URL), eq(TEST_AUTH_HEADER), eq(slug)) } + coVerify { v1Source.requestRecipeInfo(eq(TEST_BASE_URL), eq(slug)) } assertThat(actual).isEqualTo(PORRIDGE_FULL_RECIPE_INFO) } @@ -95,7 +92,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { @Test fun `when server version v1 expect requestRecipes to call v1`() = runTest { coEvery { - v1Source.requestRecipes(any(), any(), any(), any()) + v1Source.requestRecipes(any(), any(), any()) } returns listOf(PORRIDGE_RECIPE_SUMMARY_RESPONSE_V1) coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V1 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL @@ -106,7 +103,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { val page = 5 // 0-9 (1), 10-19 (2), 20-29 (3), 30-39 (4), 40-49 (5) val perPage = 10 coVerify { - v1Source.requestRecipes(eq(TEST_BASE_URL), eq(TEST_AUTH_HEADER), eq(page), eq(perPage)) + v1Source.requestRecipes(eq(TEST_BASE_URL), eq(page), eq(perPage)) } assertThat(actual).isEqualTo(listOf(RECIPE_SUMMARY_PORRIDGE_V1)) @@ -115,7 +112,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { @Test fun `when server version v0 expect requestRecipes to call v0`() = runTest { coEvery { - v0Source.requestRecipes(any(), any(), any(), any()) + v0Source.requestRecipes(any(), any(), any()) } returns listOf(PORRIDGE_RECIPE_SUMMARY_RESPONSE_V0) coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V0 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL @@ -126,7 +123,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { val actual = subject.requestRecipes(start, limit) coVerify { - v0Source.requestRecipes(eq(TEST_BASE_URL), eq(TEST_AUTH_HEADER), eq(start), eq(limit)) + v0Source.requestRecipes(eq(TEST_BASE_URL), eq(start), eq(limit)) } assertThat(actual).isEqualTo(listOf(RECIPE_SUMMARY_PORRIDGE_V0)) @@ -134,7 +131,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { @Test(expected = IOException::class) fun `when request fails expect addRecipe to rethrow`() = runTest { - coEvery { v0Source.addRecipe(any(), any(), any()) } throws IOException() + coEvery { v0Source.addRecipe(any(), any()) } throws IOException() coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V0 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL coEvery { authRepo.getAuthHeader() } returns TEST_AUTH_HEADER @@ -145,7 +142,7 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { fun `when server version v0 expect addRecipe to call v0`() = runTest { val slug = "porridge" - coEvery { v0Source.addRecipe(any(), any(), any()) } returns slug + coEvery { v0Source.addRecipe(any(), any()) } returns slug coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V0 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL coEvery { authRepo.getAuthHeader() } returns TEST_AUTH_HEADER @@ -155,7 +152,6 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { coVerify { v0Source.addRecipe( eq(TEST_BASE_URL), - eq(TEST_AUTH_HEADER), eq(PORRIDGE_ADD_RECIPE_REQUEST_V0), ) } @@ -167,9 +163,9 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { fun `when server version v1 expect addRecipe to call v1`() = runTest { val slug = "porridge" - coEvery { v1Source.createRecipe(any(), any(), any()) } returns slug + coEvery { v1Source.createRecipe(any(), any()) } returns slug coEvery { - v1Source.updateRecipe(any(), any(), any(), any()) + v1Source.updateRecipe(any(), any(), any()) } returns PORRIDGE_RECIPE_RESPONSE_V1 coEvery { serverInfoRepo.getVersion() } returns TEST_SERVER_VERSION_V1 coEvery { serverInfoRepo.requireUrl() } returns TEST_BASE_URL @@ -180,13 +176,11 @@ class MealieDataSourceWrapperTest : BaseUnitTest() { coVerifySequence { v1Source.createRecipe( eq(TEST_BASE_URL), - eq(TEST_AUTH_HEADER), eq(PORRIDGE_CREATE_RECIPE_REQUEST_V1), ) v1Source.updateRecipe( eq(TEST_BASE_URL), - eq(TEST_AUTH_HEADER), eq(slug), eq(PORRIDGE_UPDATE_RECIPE_REQUEST_V1), ) diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/AuthenticationProvider.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/AuthenticationProvider.kt new file mode 100644 index 0000000..ba22dbf --- /dev/null +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/AuthenticationProvider.kt @@ -0,0 +1,6 @@ +package gq.kirmanak.mealient.datasource + +interface AuthenticationProvider { + + suspend fun getAuthHeader(): String? +} \ No newline at end of file diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/DataSourceModule.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/DataSourceModule.kt index 1582f0c..73ed120 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/DataSourceModule.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/DataSourceModule.kt @@ -6,6 +6,8 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import dagger.multibindings.IntoSet +import gq.kirmanak.mealient.datasource.impl.AuthInterceptor import gq.kirmanak.mealient.datasource.impl.CacheBuilderImpl import gq.kirmanak.mealient.datasource.impl.NetworkRequestWrapperImpl import gq.kirmanak.mealient.datasource.impl.OkHttpBuilderImpl @@ -18,6 +20,7 @@ import gq.kirmanak.mealient.datasource.v1.MealieDataSourceV1Impl import gq.kirmanak.mealient.datasource.v1.MealieServiceV1 import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json +import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import retrofit2.Converter @@ -31,8 +34,6 @@ interface DataSourceModule { companion object { - const val AUTHORIZATION_HEADER_NAME = "Authorization" - @Provides @Singleton fun provideJson(): Json = Json { @@ -87,4 +88,9 @@ interface DataSourceModule { @Binds @Singleton fun bindNetworkRequestWrapper(networkRequestWrapperImpl: NetworkRequestWrapperImpl): NetworkRequestWrapper + + @Binds + @Singleton + @IntoSet + fun bindAuthInterceptor(authInterceptor: AuthInterceptor): Interceptor } \ No newline at end of file diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/impl/AuthInterceptor.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/impl/AuthInterceptor.kt new file mode 100644 index 0000000..795e773 --- /dev/null +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/impl/AuthInterceptor.kt @@ -0,0 +1,32 @@ +package gq.kirmanak.mealient.datasource.impl + +import gq.kirmanak.mealient.datasource.AuthenticationProvider +import kotlinx.coroutines.runBlocking +import okhttp3.Interceptor +import okhttp3.Response +import javax.inject.Inject +import javax.inject.Provider +import javax.inject.Singleton + +@Singleton +class AuthInterceptor @Inject constructor( + private val authenticationProvider: Provider, +) : Interceptor { + + override fun intercept(chain: Interceptor.Chain): Response { + val token = runBlocking { authenticationProvider.get().getAuthHeader() } + val request = if (token == null) { + chain.request() + } else { + chain.request() + .newBuilder() + .header(HEADER_NAME, token) + .build() + } + return chain.proceed(request) + } + + companion object { + private const val HEADER_NAME = "Authorization" + } +} diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0.kt index 79e3263..6a6abd2 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0.kt @@ -10,7 +10,6 @@ interface MealieDataSourceV0 { suspend fun addRecipe( baseUrl: String, - token: String?, recipe: AddRecipeRequestV0, ): String @@ -29,20 +28,17 @@ interface MealieDataSourceV0 { suspend fun requestRecipes( baseUrl: String, - token: String?, start: Int, limit: Int, ): List suspend fun requestRecipeInfo( baseUrl: String, - token: String?, slug: String, ): GetRecipeResponseV0 suspend fun parseRecipeFromURL( baseUrl: String, - token: String?, request: ParseRecipeURLRequestV0, ): String } \ No newline at end of file diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0Impl.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0Impl.kt index d39485a..f6939d7 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0Impl.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieDataSourceV0Impl.kt @@ -26,12 +26,11 @@ class MealieDataSourceV0Impl @Inject constructor( override suspend fun addRecipe( baseUrl: String, - token: String?, recipe: AddRecipeRequestV0, ): String = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.addRecipe("$baseUrl/api/recipes/create", token, recipe) }, + block = { service.addRecipe("$baseUrl/api/recipes/create", recipe) }, logMethod = { "addRecipe" }, - logParameters = { "baseUrl = $baseUrl, token = $token, recipe = $recipe" } + logParameters = { "baseUrl = $baseUrl, recipe = $recipe" } ) override suspend fun authenticate( @@ -64,33 +63,30 @@ class MealieDataSourceV0Impl @Inject constructor( override suspend fun requestRecipes( baseUrl: String, - token: String?, start: Int, limit: Int, ): List = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.getRecipeSummary("$baseUrl/api/recipes/summary", token, start, limit) }, + block = { service.getRecipeSummary("$baseUrl/api/recipes/summary", start, limit) }, logMethod = { "requestRecipes" }, - logParameters = { "baseUrl = $baseUrl, token = $token, start = $start, limit = $limit" } + logParameters = { "baseUrl = $baseUrl, start = $start, limit = $limit" } ) override suspend fun requestRecipeInfo( baseUrl: String, - token: String?, slug: String, ): GetRecipeResponseV0 = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.getRecipe("$baseUrl/api/recipes/$slug", token) }, + block = { service.getRecipe("$baseUrl/api/recipes/$slug") }, logMethod = { "requestRecipeInfo" }, - logParameters = { "baseUrl = $baseUrl, token = $token, slug = $slug" } + logParameters = { "baseUrl = $baseUrl, slug = $slug" } ) override suspend fun parseRecipeFromURL( baseUrl: String, - token: String?, request: ParseRecipeURLRequestV0 ): String = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.createRecipeFromURL("$baseUrl/api/recipes/create-url", token, request) }, + block = { service.createRecipeFromURL("$baseUrl/api/recipes/create-url", request) }, logMethod = { "parseRecipeFromURL" }, - logParameters = { "baseUrl = $baseUrl, token = $token, request = $request" } + logParameters = { "baseUrl = $baseUrl, request = $request" } ) } diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieServiceV0.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieServiceV0.kt index 55771f3..579dada 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieServiceV0.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v0/MealieServiceV0.kt @@ -1,6 +1,5 @@ package gq.kirmanak.mealient.datasource.v0 -import gq.kirmanak.mealient.datasource.DataSourceModule.Companion.AUTHORIZATION_HEADER_NAME import gq.kirmanak.mealient.datasource.v0.models.* import retrofit2.http.* @@ -17,7 +16,6 @@ interface MealieServiceV0 { @POST suspend fun addRecipe( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Body addRecipeRequestV0: AddRecipeRequestV0, ): String @@ -29,7 +27,6 @@ interface MealieServiceV0 { @GET suspend fun getRecipeSummary( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Query("start") start: Int, @Query("limit") limit: Int, ): List @@ -37,13 +34,11 @@ interface MealieServiceV0 { @GET suspend fun getRecipe( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, ): GetRecipeResponseV0 @POST suspend fun createRecipeFromURL( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Body request: ParseRecipeURLRequestV0, ): String } \ No newline at end of file diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1.kt index a231834..9b6f665 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1.kt @@ -11,13 +11,11 @@ interface MealieDataSourceV1 { suspend fun createRecipe( baseUrl: String, - token: String?, recipe: CreateRecipeRequestV1, ): String suspend fun updateRecipe( baseUrl: String, - token: String?, slug: String, recipe: UpdateRecipeRequestV1, ): GetRecipeResponseV1 @@ -37,20 +35,17 @@ interface MealieDataSourceV1 { suspend fun requestRecipes( baseUrl: String, - token: String?, page: Int, perPage: Int, ): List suspend fun requestRecipeInfo( baseUrl: String, - token: String?, slug: String, ): GetRecipeResponseV1 suspend fun parseRecipeFromURL( baseUrl: String, - token: String?, request: ParseRecipeURLRequestV1, ): String } \ No newline at end of file diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1Impl.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1Impl.kt index f7551b0..7bb2822 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1Impl.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieDataSourceV1Impl.kt @@ -27,23 +27,21 @@ class MealieDataSourceV1Impl @Inject constructor( override suspend fun createRecipe( baseUrl: String, - token: String?, recipe: CreateRecipeRequestV1 ): String = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.createRecipe("$baseUrl/api/recipes", token, recipe) }, + block = { service.createRecipe("$baseUrl/api/recipes", recipe) }, logMethod = { "createRecipe" }, - logParameters = { "baseUrl = $baseUrl, token = $token, recipe = $recipe" } + logParameters = { "baseUrl = $baseUrl, recipe = $recipe" } ) override suspend fun updateRecipe( baseUrl: String, - token: String?, slug: String, recipe: UpdateRecipeRequestV1 ): GetRecipeResponseV1 = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.updateRecipe("$baseUrl/api/recipes/$slug", token, recipe) }, + block = { service.updateRecipe("$baseUrl/api/recipes/$slug", recipe) }, logMethod = { "updateRecipe" }, - logParameters = { "baseUrl = $baseUrl, token = $token, slug = $slug, recipe = $recipe" } + logParameters = { "baseUrl = $baseUrl, slug = $slug, recipe = $recipe" } ) override suspend fun authenticate( @@ -76,33 +74,30 @@ class MealieDataSourceV1Impl @Inject constructor( override suspend fun requestRecipes( baseUrl: String, - token: String?, page: Int, perPage: Int ): List = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.getRecipeSummary("$baseUrl/api/recipes", token, page, perPage) }, + block = { service.getRecipeSummary("$baseUrl/api/recipes", page, perPage) }, logMethod = { "requestRecipes" }, - logParameters = { "baseUrl = $baseUrl, token = $token, page = $page, perPage = $perPage" } + logParameters = { "baseUrl = $baseUrl, page = $page, perPage = $perPage" } ).items override suspend fun requestRecipeInfo( baseUrl: String, - token: String?, slug: String ): GetRecipeResponseV1 = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.getRecipe("$baseUrl/api/recipes/$slug", token) }, + block = { service.getRecipe("$baseUrl/api/recipes/$slug") }, logMethod = { "requestRecipeInfo" }, - logParameters = { "baseUrl = $baseUrl, token = $token, slug = $slug" } + logParameters = { "baseUrl = $baseUrl, slug = $slug" } ) override suspend fun parseRecipeFromURL( baseUrl: String, - token: String?, request: ParseRecipeURLRequestV1 ): String = networkRequestWrapper.makeCallAndHandleUnauthorized( - block = { service.createRecipeFromURL("$baseUrl/api/recipes/create-url", token, request) }, + block = { service.createRecipeFromURL("$baseUrl/api/recipes/create-url", request) }, logMethod = { "parseRecipeFromURL" }, - logParameters = { "baseUrl = $baseUrl, token = $token, request = $request" } + logParameters = { "baseUrl = $baseUrl, request = $request" } ) diff --git a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieServiceV1.kt b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieServiceV1.kt index c5aa05e..004ccf8 100644 --- a/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieServiceV1.kt +++ b/datasource/src/main/kotlin/gq/kirmanak/mealient/datasource/v1/MealieServiceV1.kt @@ -1,6 +1,5 @@ package gq.kirmanak.mealient.datasource.v1 -import gq.kirmanak.mealient.datasource.DataSourceModule.Companion.AUTHORIZATION_HEADER_NAME import gq.kirmanak.mealient.datasource.v1.models.* import retrofit2.http.* @@ -17,14 +16,12 @@ interface MealieServiceV1 { @POST suspend fun createRecipe( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Body addRecipeRequest: CreateRecipeRequestV1, ): String @PATCH suspend fun updateRecipe( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Body addRecipeRequest: UpdateRecipeRequestV1, ): GetRecipeResponseV1 @@ -36,7 +33,6 @@ interface MealieServiceV1 { @GET suspend fun getRecipeSummary( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Query("page") page: Int, @Query("perPage") perPage: Int, ): GetRecipesResponseV1 @@ -44,13 +40,11 @@ interface MealieServiceV1 { @GET suspend fun getRecipe( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, ): GetRecipeResponseV1 @POST suspend fun createRecipeFromURL( @Url url: String, - @Header(AUTHORIZATION_HEADER_NAME) token: String?, @Body request: ParseRecipeURLRequestV1, ): String } \ No newline at end of file