TP-38663 | HPC | Add GZIP Header in v2/home (#7583)

This commit is contained in:
Abhinav Gupta
2023-08-22 13:56:15 +05:30
committed by GitHub
parent ebc58ac6b8
commit 392d7477b6
7 changed files with 64 additions and 8 deletions

View File

@@ -8,14 +8,16 @@
package com.naviapp.home.respository
import com.navi.base.sharedpref.PreferenceManager
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.model.ModuleName
import com.navi.common.model.common.WidgetResponse
import com.navi.common.network.models.RepoResult
import com.navi.common.utils.Constants.GZIP
import com.navi.common.utils.TemporaryStorageHelper
import com.navi.naviwidgets.models.response.CtaDetails
import com.navi.naviwidgets.utils.APP_UPDATE_ENABLE
import com.naviapp.home.dashboard.models.response.InvestmentsResponse
import com.naviapp.home.model.BottomBarResponse
import com.navi.common.model.common.WidgetResponse
import com.navi.naviwidgets.models.response.CtaDetails
import com.naviapp.network.di.SuperAppRetroFit
import com.naviapp.network.retrofit.ResponseCallback
import com.naviapp.network.retrofit.RetrofitService
@@ -51,7 +53,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
availableAppVersionCode,
isPermissionsGranted,
installedModules,
appVariantAvailable
appVariantAvailable,
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
)
)
else
@@ -63,7 +66,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
availableAppVersionCode,
isPermissionsGranted,
installedModules,
appVariantAvailable
appVariantAvailable,
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
)
)
homeResponse.emit(response)

View File

@@ -7,9 +7,11 @@
package com.naviapp.home.respository
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.network.models.RepoResult
import com.navi.common.utils.log
import com.navi.common.model.common.WidgetResponse
import com.navi.common.utils.Constants.GZIP
import com.naviapp.network.di.SuperAppRetroFit
import com.naviapp.network.retrofit.ResponseCallback
import com.naviapp.network.retrofit.RetrofitService
@@ -34,7 +36,8 @@ class HomeRepository @Inject constructor(@SuperAppRetroFit private val superAppR
availableAppVersionCode,
isPermissionsGranted,
installedModules,
appVariantAvailable
appVariantAvailable,
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
)
)
else
@@ -46,7 +49,8 @@ class HomeRepository @Inject constructor(@SuperAppRetroFit private val superAppR
availableAppVersionCode,
isPermissionsGranted,
installedModules,
appVariantAvailable
appVariantAvailable,
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.HOME_GZIP_ENABLED)) GZIP else null
)
)
}

View File

@@ -7,6 +7,7 @@
package com.naviapp.network.retrofit
import com.google.common.net.HttpHeaders.ACCEPT_ENCODING
import com.navi.amc.fundbuy.models.FundListResponse
import com.navi.amc.utils.Constant
import com.navi.analytics.model.UserLocation
@@ -684,7 +685,8 @@ interface RetrofitService {
@Header(AVAILABLE_APP_VERSION_CODE) availableAppVersionCode: Int?,
@Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
@Header(HEADER_INSTALLED_MODULES) installedModules: String,
@Query("appVariantAvailable") appVariantAvailable: Boolean
@Query("appVariantAvailable") appVariantAvailable: Boolean,
@Header(ACCEPT_ENCODING) acceptEncoding: String? = "*"
): Response<GenericResponse<WidgetResponse>>
@GET("/v2/home")
@@ -692,7 +694,8 @@ interface RetrofitService {
@Header(AVAILABLE_APP_VERSION_CODE) availableAppVersionCode: Int?,
@Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
@Header(HEADER_INSTALLED_MODULES) installedModules: String,
@Query("appVariantAvailable") appVariantAvailable: Boolean
@Query("appVariantAvailable") appVariantAvailable: Boolean,
@Header(ACCEPT_ENCODING) acceptEncoding: String? = "*"
): Response<GenericResponse<WidgetResponse>>
@GET("/v1/cards?groupType=STORY")

View File

@@ -59,6 +59,7 @@ object FirebaseRemoteConfigHelper {
const val SSL_PINNING_ENABLED = "SSL_PINNING_ENABLED"
const val SSL_PINNING_KEY = "SSL_PINNING_KEY"
const val NAVI_UPI_ENABLED = "NAVI_UPI_ENABLED"
const val HOME_GZIP_ENABLED = "HOME_GZIP_ENABLED"
fun init() {
remoteConfig = getFirebaseRemoteConfig()

View File

@@ -20,6 +20,7 @@ import com.navi.base.utils.isDataNeedsToUpdate
import com.navi.common.constants.NETWORK_CRASH
import com.navi.common.model.NetworkInfo
import com.navi.common.network.authenticator.TokenAuthenticator
import com.navi.common.network.interceptor.GzipInterceptor
import com.navi.common.network.models.ErrorMessage
import com.navi.common.utils.TemporaryStorageHelper
import com.navi.common.utils.log
@@ -56,6 +57,7 @@ abstract class BaseHttpClient(
writeTimeout(networkInfo.timeoutInSec, TimeUnit.SECONDS)
readTimeout(networkInfo.timeoutInSec, TimeUnit.SECONDS)
addInterceptor(headerInterceptor)
addInterceptor(GzipInterceptor())
if (shouldAddAuthenticator) {
authenticator(TokenAuthenticator.getInstance())
}

View File

@@ -0,0 +1,41 @@
package com.navi.common.network.interceptor
import com.google.common.net.HttpHeaders.CONTENT_ENCODING
import com.google.common.net.HttpHeaders.CONTENT_LENGTH
import com.navi.common.utils.Constants.GZIP
import okhttp3.Interceptor
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import okio.GzipSource
import okio.buffer
class GzipInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val response = chain.proceed(chain.request())
return if (isGzipped(response)) {
unzip(response)
} else {
response
}
}
private fun unzip(response: Response): Response {
val responseBody = response.body ?: return response
val gzipSource = GzipSource(responseBody.source())
val bodyString = gzipSource.buffer().readUtf8()
val newResponseBody = bodyString.toResponseBody(responseBody.contentType())
val strippedHeaders = response.headers.newBuilder()
.removeAll(CONTENT_ENCODING)
.removeAll(CONTENT_LENGTH)
.build()
return response.newBuilder()
.headers(strippedHeaders)
.body(newResponseBody)
.message(response.message)
.build()
}
private fun isGzipped(response: Response): Boolean {
return response.header(CONTENT_ENCODING) == GZIP
}
}

View File

@@ -200,4 +200,5 @@ object Constants {
const val HIDE = "hide"
const val LOGOUT = "logout"
const val USER_DATA_PAYLOAD_SIZE = 1000
const val GZIP = "gzip"
}