Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ fun interface StreamService {
suspend fun getAuthData(
@Query("environment") environment: String,
@Query("user_id") userId: String?,
@Query("exp") exp: Int,
): GetAuthDataResponse

companion object {
private const val BASE_URL = "https://pronto.getstream.io/"

public const val TOKEN_EXPIRY_TIME = 40
private val json = Json { ignoreUnknownKeys = true }

private val retrofit = Retrofit.Builder()
Expand All @@ -46,9 +47,9 @@ fun interface StreamService {

private val serviceInstance = retrofit.create<StreamService>()

val instance = StreamService { environment, userId ->
val instance = StreamService { environment, userId, exp ->
User.builtInCredentials[userId]?.toAuthDataResponse()
?: serviceInstance.getAuthData(environment, userId)
?: serviceInstance.getAuthData(environment, userId, exp)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ class LoginViewModel @Inject constructor(
val authData = StreamService.instance.getAuthData(
environment = it.env,
userId = userId,
StreamService.TOKEN_EXPIRY_TIME,
)
val loggedInGoogleUser =
if (autoLogIn) null else googleAccountRepository.getCurrentUser()
Expand Down Expand Up @@ -128,6 +129,7 @@ class LoginViewModel @Inject constructor(
val authData = StreamService.instance.getAuthData(
environment = it.env,
userId = user.id,
StreamService.TOKEN_EXPIRY_TIME,
)
// Store the data in the demo app
dataStore.updateUser(user)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import io.getstream.video.android.util.config.AppConfig
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.runBlocking

public enum class InitializedState {
NOT_STARTED, RUNNING, FINISHED, FAILED
Expand Down Expand Up @@ -121,6 +122,7 @@ object StreamVideoInitHelper {
authData = StreamService.instance.getAuthData(
environment = AppConfig.currentEnvironment.value!!.env,
userId = userId,
StreamService.TOKEN_EXPIRY_TIME,
)

loggedInUser = User(id = authData.userId, role = "admin")
Expand All @@ -137,6 +139,7 @@ object StreamVideoInitHelper {
authData = StreamService.instance.getAuthData(
environment = AppConfig.currentEnvironment.value!!.env,
userId = loggedInUser.id,
StreamService.TOKEN_EXPIRY_TIME,
)
}

Expand Down Expand Up @@ -194,7 +197,24 @@ object StreamVideoInitHelper {

chatClient.connectUser(
user = chatUser,
token = token,
tokenProvider = object : io.getstream.chat.android.client.token.TokenProvider {
override fun loadToken(): String {
return runBlocking {
Log.d("TokenProvider", "[loadToken] Chat token provider START")
val email = user.custom?.get("email")
val authData = StreamService.instance.getAuthData(
environment = AppConfig.currentEnvironment.value!!.env,
userId = email,
StreamService.TOKEN_EXPIRY_TIME,
)
Log.d(
"TokenProvider",
"[loadToken] Chat token provider END, token: ${authData.token}",
)
authData.token
}
}
},
).enqueue()
}

Expand Down Expand Up @@ -286,10 +306,18 @@ object StreamVideoInitHelper {
),
tokenProvider = object : TokenProvider {
override suspend fun loadToken(): String {
val email = user.custom?.get("email")
val userEmail = user.custom?.get("email")
val userId = user.id
val userIdForTokenRenewal = if (userEmail.isNullOrEmpty()) userId else userEmail
Log.d("TokenProvider", "[loadToken] Video token provider START")
val authData = StreamService.instance.getAuthData(
environment = AppConfig.currentEnvironment.value!!.env,
userId = email,
userId = userIdForTokenRenewal,
StreamService.TOKEN_EXPIRY_TIME,
)
Log.d(
"TokenProvider",
"[loadToken] Video token provider END: ${authData.token}",
)
return authData.token
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,15 @@ internal open class CoordinatorSocket(
tokenManager.expireToken()
}

if (error.serverErrorCode == VideoErrorCode.TOKEN_EXPIRED.code) {
logger.d { "[onVideoNetworkError] load sync START" }
tokenManager.expireToken()
val token = tokenManager.loadSync()
if (token.isNotEmpty()) {
logger.d { "[onVideoNetworkError] load sync END: $token" }
}
}

when (error.serverErrorCode) {
VideoErrorCode.UNDEFINED_TOKEN.code,
VideoErrorCode.INVALID_TOKEN.code,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,15 +126,17 @@ public open class CoordinatorSocketConnection(
// Extension opportunity for subclasses
override fun onCreated() {
super.onCreated()
logger.d { "[onCreated] Socket is created" }
logger.d {
"[onCreated] Socket is created, initial token: $token, tokenManager.getToken() = ${tokenManager.getToken()}"
}
scope.launch {
logger.d { "[onConnected] Video socket created, user: $user" }
if (token.isEmpty()) {
logger.e { "[onConnected] Token is empty. Disconnecting." }
disconnect()
} else {
val authRequest = WSAuthMessageRequest(
token = token,
token = tokenManager.getToken().ifEmpty { token },
userDetails = ConnectUserDetailsRequest(
id = user.id,
name = user.name.takeUnless { it.isWhitespaceOnly() },
Expand Down
Loading