Skip to content

Commit

Permalink
Add sdk headers to all Gravatar REST API requests (#353)
Browse files Browse the repository at this point in the history
* Move interceptors to new package

* Create SdkVersionInterceptor to add sdk headers to the requests

* Use the latest git tag for sdk_version
  • Loading branch information
AdamGrzybkowski authored Oct 7, 2024
1 parent 67538a1 commit 66c11a9
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 6 deletions.
8 changes: 8 additions & 0 deletions gravatar/api/gravatar.api
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ public final class com/gravatar/AvatarUrl {
public final class com/gravatar/AvatarUrl$Companion {
}

public final class com/gravatar/BuildConfig {
public static final field BUILD_TYPE Ljava/lang/String;
public static final field DEBUG Z
public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
public static final field SDK_VERSION Ljava/lang/String;
public fun <init> ()V
}

public abstract class com/gravatar/DefaultAvatarOption {
public final fun queryParam ()Ljava/lang/String;
}
Expand Down
6 changes: 6 additions & 0 deletions gravatar/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,20 @@ plugins {
alias(libs.plugins.openapi.generator)
}

val sdkVersion = providers.exec {
commandLine("git", "describe", "--tags", "--abbrev=0")
}.standardOutput.asText.get().trim()

android {
namespace = "com.gravatar"
compileSdk = 34
buildFeatures.buildConfig = true

defaultConfig {
minSdk = 21
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
buildConfigField("String", "SDK_VERSION", "\"$sdkVersion\"")
}

buildTypes {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package com.gravatar.di.container

import com.gravatar.GravatarConstants.GRAVATAR_API_BASE_URL_V3
import com.gravatar.moshiadapers.URIJsonAdapter
import com.gravatar.services.AuthenticationInterceptor
import com.gravatar.services.AvatarUploadTimeoutInterceptor
import com.gravatar.services.GravatarApi
import com.gravatar.services.interceptors.AuthenticationInterceptor
import com.gravatar.services.interceptors.AvatarUploadTimeoutInterceptor
import com.gravatar.services.interceptors.SdkVersionInterceptor
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import kotlinx.coroutines.CoroutineDispatcher
Expand Down Expand Up @@ -44,5 +45,6 @@ internal class GravatarSdkContainer private constructor() {
.newBuilder()
.addInterceptor(AuthenticationInterceptor(oauthToken))
.addInterceptor(AvatarUploadTimeoutInterceptor())
.addInterceptor(SdkVersionInterceptor())
.build()
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.gravatar.services
package com.gravatar.services.interceptors

import com.gravatar.di.container.GravatarSdkContainer
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response
import com.gravatar.di.container.GravatarSdkContainer.Companion.instance as GravatarSdkDI

internal class AuthenticationInterceptor(private val oauthToken: String? = null) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
Expand All @@ -15,7 +15,7 @@ internal class AuthenticationInterceptor(private val oauthToken: String? = null)
}

private fun Request.Builder.addAuthorizationHeaderIfPresent(): Request.Builder {
return oauthToken?.let { addHeader(it) } ?: GravatarSdkDI.apiKey?.let { addHeader(it) } ?: this
return oauthToken?.let { addHeader(it) } ?: GravatarSdkContainer.instance.apiKey?.let { addHeader(it) } ?: this
}

private fun Request.Builder.addHeader(bearer: String) = addHeader("Authorization", "Bearer $bearer")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.gravatar.services
package com.gravatar.services.interceptors

import okhttp3.Interceptor
import okhttp3.Response
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.gravatar.services.interceptors

import com.gravatar.BuildConfig
import okhttp3.Interceptor
import okhttp3.Response

internal class SdkVersionInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
return chain.proceed(
chain.request().newBuilder()
.addHeader("X-Platform", "Android")
.addHeader("X-SDK-Version", BuildConfig.SDK_VERSION)
.build(),
)
}
}

0 comments on commit 66c11a9

Please sign in to comment.