Skip to content

Commit

Permalink
Created LocalDeviceIPAddressProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
chRyNaN committed Mar 5, 2025
1 parent d13cef7 commit 37b40d8
Show file tree
Hide file tree
Showing 20 changed files with 70 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import android.net.NetworkRequest
import com.mooncloak.kodetools.logpile.core.LogPile
import com.mooncloak.kodetools.logpile.core.warning
import com.mooncloak.vpn.api.shared.VpnServiceApi
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.data.shared.cache.Cache
import com.mooncloak.vpn.data.shared.keyvalue.get
import com.mooncloak.vpn.data.shared.keyvalue.set
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@ import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.wifi.WifiManager
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import java.net.InetAddress

public operator fun LocalNetworkManager.Companion.invoke(context: Context): LocalNetworkManager =
AndroidLocalNetworkManager(context = context)
public operator fun LocalDeviceIPAddressProvider.Companion.invoke(context: Context): LocalDeviceIPAddressProvider =
AndroidLocalDeviceIpAddressProvider(context = context)

internal class AndroidLocalNetworkManager internal constructor(
internal class AndroidLocalDeviceIpAddressProvider internal constructor(
private val context: Context
) : LocalNetworkManager {
) : LocalDeviceIPAddressProvider {

// TODO: Implement AndroidLocalNetworkManager
override suspend fun getInfo(): LocalNetworkInfo = LocalNetworkInfo(
ipAddress = getDeviceIpAddress(context)
)
override suspend fun get(): String? = getDeviceIpAddress(context)

override suspend fun invalidate() {
}

private fun getDeviceIpAddress(context: Context): String? {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mooncloak.vpn.api.shared.network
package com.mooncloak.vpn.api.shared.network.ip

/**
* A component that retrieves the Internet Protocol (IP) Address of the current device running this application.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.mooncloak.vpn.api.shared.network.ip

/**
* A [DeviceIPAddressProvider] that retrieves the local network IP address of the device running this application.
*/
public interface LocalDeviceIPAddressProvider : DeviceIPAddressProvider {

public companion object
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.mooncloak.vpn.api.shared.network
import com.mooncloak.kodetools.logpile.core.LogPile
import com.mooncloak.kodetools.logpile.core.warning
import com.mooncloak.vpn.api.shared.MooncloakVpnServiceHttpApi
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.data.shared.cache.Cache
import com.mooncloak.vpn.data.shared.keyvalue.get
import com.mooncloak.vpn.data.shared.keyvalue.set
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.mooncloak.vpn.api.shared.network

import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider

public operator fun LocalDeviceIPAddressProvider.Companion.invoke(): LocalDeviceIPAddressProvider =
JvmLocalDeviceIPAddressProvider()

internal class JvmLocalDeviceIPAddressProvider internal constructor() : LocalDeviceIPAddressProvider {

override suspend fun get(): String? = null

override suspend fun invalidate() {
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import com.mooncloak.kodetools.logpile.core.error
import com.mooncloak.kodetools.logpile.core.info
import com.mooncloak.kodetools.statex.persistence.ExperimentalPersistentStateAPI
import com.mooncloak.vpn.api.shared.VpnServiceApi
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.app.shared.api.key.WireGuardConnectionKeyPairResolver
import com.mooncloak.vpn.api.shared.server.Server
import com.mooncloak.vpn.app.shared.api.server.usecase.RegisterClientUseCase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.mooncloak.kodetools.konstruct.annotations.Provides
import com.mooncloak.kodetools.konstruct.annotations.Singleton
import com.mooncloak.vpn.app.android.api.wireguard.WireGuardBackend
import com.mooncloak.vpn.api.shared.MooncloakVpnServiceHttpApi
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.invoke
import com.mooncloak.vpn.app.shared.di.ApplicationComponent
import com.mooncloak.vpn.app.shared.util.ApplicationContext
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import com.mooncloak.vpn.app.android.api.wireguard.WireGuardBackend
import com.mooncloak.vpn.app.android.api.wireguard.AndroidWireGuardTunnelManager
import com.mooncloak.vpn.app.android.util.WireGuardVpnContextWrapper
import com.mooncloak.vpn.api.shared.key.WireGuardConnectionKeyManager
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.invoke
import com.mooncloak.vpn.api.shared.tunnel.TunnelManager
import com.mooncloak.vpn.app.shared.di.ApplicationComponent
Expand Down Expand Up @@ -40,8 +40,8 @@ internal abstract class AndroidGooglePlayApplicationComponent internal construct

@Provides
@Singleton
internal fun provideLocalNetworkManager(context: ApplicationContext): LocalNetworkManager =
LocalNetworkManager(context = context)
internal fun provideLocalNetworkManager(context: ApplicationContext): LocalDeviceIPAddressProvider =
LocalDeviceIPAddressProvider(context = context)

@Provides
@Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import com.mooncloak.vpn.app.desktop.api.wireguard.JvmWireGuardTunnelManager
import com.mooncloak.vpn.app.desktop.info.JvmAppClientInfo
import com.mooncloak.vpn.api.shared.MooncloakVpnServiceHttpApi
import com.mooncloak.vpn.api.shared.key.WireGuardConnectionKeyManager
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.invoke
import com.mooncloak.vpn.api.shared.tunnel.TunnelManager
import com.mooncloak.vpn.app.shared.di.ApplicationComponent
Expand Down Expand Up @@ -52,7 +52,7 @@ internal abstract class JvmApplicationComponent internal constructor(

@Provides
@Singleton
internal fun provideLocalNetworkManager(): LocalNetworkManager = LocalNetworkManager()
internal fun provideLocalNetworkManager(): LocalDeviceIPAddressProvider = LocalDeviceIPAddressProvider()

@Provides
@Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package com.mooncloak.vpn.app.shared.di
import coil3.SingletonImageLoader
import com.mooncloak.kodetools.logpile.core.Logger
import com.mooncloak.vpn.api.shared.key.WireGuardConnectionKeyManager
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.tunnel.TunnelManager
import com.mooncloak.vpn.app.shared.api.server.usecase.GetDefaultServerUseCase
import com.mooncloak.vpn.app.shared.info.AppClientInfo
Expand Down Expand Up @@ -32,7 +32,7 @@ public actual interface ApplicationDependencies {
public actual val preferenceStorage: UserPreferenceSettings
public actual val imageLoaderFactory: SingletonImageLoader.Factory
public actual val databaseDriverFactory: SqlDriverFactory
public actual val localNetworkManager: LocalNetworkManager
public actual val localDeviceIPAddressProvider: LocalDeviceIPAddressProvider
public actual val deviceIPAddressProvider: DeviceIPAddressProvider
public actual val wireGuardConnectionKeyManager: WireGuardConnectionKeyManager
public actual val tunnelManager: TunnelManager
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package com.mooncloak.vpn.app.shared.di
import coil3.SingletonImageLoader
import com.mooncloak.kodetools.logpile.core.Logger
import com.mooncloak.vpn.api.shared.key.WireGuardConnectionKeyManager
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.tunnel.TunnelManager
import com.mooncloak.vpn.app.shared.api.server.usecase.GetDefaultServerUseCase
import com.mooncloak.vpn.app.shared.info.AppClientInfo
Expand All @@ -31,7 +31,7 @@ public expect interface ApplicationDependencies {
public val preferenceStorage: UserPreferenceSettings
public val imageLoaderFactory: SingletonImageLoader.Factory
public val databaseDriverFactory: SqlDriverFactory
public val localNetworkManager: LocalNetworkManager
public val localDeviceIPAddressProvider: LocalDeviceIPAddressProvider
public val deviceIPAddressProvider: DeviceIPAddressProvider
public val wireGuardConnectionKeyManager: WireGuardConnectionKeyManager
public val tunnelManager: TunnelManager
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.mooncloak.vpn.app.shared.feature.home

import androidx.compose.runtime.Immutable
import com.mooncloak.vpn.api.shared.network.LocalNetworkInfo
import com.mooncloak.vpn.api.shared.server.Server
import com.mooncloak.vpn.api.shared.vpn.VPNConnection
import com.mooncloak.vpn.app.shared.feature.home.model.HomeFeedItem
Expand All @@ -11,8 +10,8 @@ import com.mooncloak.vpn.api.shared.service.ServiceSubscription
@Immutable
public data class HomeStateModel public constructor(
public val subscription: ServiceSubscription? = null,
public val localNetwork: LocalNetworkInfo? = null,
public val deviceIpAddress: String? = null,
public val localIpAddress: String? = null,
public val publicIpAddress: String? = null,
public val servers: List<Server> = emptyList(),
public val connection: VPNConnection = VPNConnection.Disconnected(),
public val items: List<HomeFeedItem> = emptyList(),
Expand All @@ -34,15 +33,11 @@ public val HomeStateModel.isConnecting: Boolean
inline get() = connectionStatus == VPNConnectionStatus.Connecting

public val HomeStateModel.connectedName: String?
inline get() = if (this.isDisconnected) {
localNetwork?.country?.name
} else {
servers.firstOrNull()?.name
}
inline get() = servers.firstOrNull()?.name

public val HomeStateModel.connectedIpAddress: String?
inline get() = if (this.isDisconnected) {
deviceIpAddress ?: localNetwork?.ipAddress
publicIpAddress ?: localIpAddress
} else {
servers.firstOrNull()?.let { it.ipV4Address ?: it.ipV6Address }
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@ import com.mooncloak.kodetools.logpile.core.LogPile
import com.mooncloak.kodetools.logpile.core.error
import com.mooncloak.kodetools.statex.ViewModel
import com.mooncloak.vpn.app.shared.api.service.ServiceSubscriptionFlowProvider
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.LocalNetworkInfo
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.server.Server
import com.mooncloak.vpn.api.shared.server.ServerConnectionRecordRepository
import com.mooncloak.vpn.api.shared.vpn.VPNConnection
Expand Down Expand Up @@ -69,7 +68,7 @@ public class HomeViewModel @Inject public constructor(
private val serviceConnectionRecordRepository: ServerConnectionRecordRepository,
private val subscriptionStorage: SubscriptionSettings,
private val serverConnectionManager: VPNConnectionManager,
private val localNetworkManager: LocalNetworkManager,
private val localDeviceIPAddressProvider: LocalDeviceIPAddressProvider,
private val deviceIPAddressProvider: DeviceIPAddressProvider,
private val getServiceSubscriptionFlow: ServiceSubscriptionFlowProvider,
private val clock: Clock,
Expand Down Expand Up @@ -134,12 +133,12 @@ public class HomeViewModel @Inject public constructor(
emit(value = state.current.value.copy(isLoading = true))

var initialSubscription: ServiceSubscription? = null
var localNetworkInfo: LocalNetworkInfo? = null
var localIpAddress: String? = null
var deviceIpAddress: String? = null

try {
initialSubscription = subscriptionStorage.subscription.get()
localNetworkInfo = localNetworkManager.getInfo()
localIpAddress = localDeviceIPAddressProvider.get()
deviceIpAddress = deviceIPAddressProvider.get()

val items = getFeedItems(
Expand All @@ -150,8 +149,8 @@ public class HomeViewModel @Inject public constructor(
emit { current ->
current.copy(
subscription = initialSubscription,
localNetwork = localNetworkInfo,
deviceIpAddress = deviceIpAddress,
publicIpAddress = deviceIpAddress,
localIpAddress = localIpAddress,
items = items,
isLoading = false,
isCheckingStatus = false
Expand All @@ -163,8 +162,8 @@ public class HomeViewModel @Inject public constructor(
emit { current ->
current.copy(
subscription = initialSubscription,
localNetwork = localNetworkInfo,
deviceIpAddress = deviceIpAddress,
publicIpAddress = deviceIpAddress,
localIpAddress = localIpAddress,
isLoading = false,
isCheckingStatus = false,
errorMessage = getString(Res.string.global_unexpected_error)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.mooncloak.kodetools.konstruct.annotations.Inject
import com.mooncloak.kodetools.logpile.core.LogPile
import com.mooncloak.kodetools.logpile.core.error
import com.mooncloak.kodetools.statex.ViewModel
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.server.Server
import com.mooncloak.vpn.api.shared.vpn.VPNConnectionManager
import com.mooncloak.vpn.api.shared.server.ServerConnectionRecord
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import com.mooncloak.kodetools.statex.ViewModel
import com.mooncloak.kodetools.statex.persistence.ExperimentalPersistentStateAPI
import com.mooncloak.kodetools.statex.update
import com.mooncloak.vpn.app.shared.api.service.ServiceSubscriptionFlowProvider
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.preference.WireGuardPreferences
import com.mooncloak.vpn.api.shared.service.ServiceSubscription
import com.mooncloak.vpn.api.shared.service.isActive
Expand Down Expand Up @@ -45,7 +45,7 @@ public class SettingsViewModel @Inject public constructor(
private val preferencesStorage: UserPreferenceSettings,
private val systemAuthenticationProvider: SystemAuthenticationProvider,
private val clock: Clock,
private val localNetworkManager: LocalNetworkManager,
private val localDeviceIPAddressProvider: LocalDeviceIPAddressProvider,
private val deviceIPAddressProvider: DeviceIPAddressProvider,
private val getServiceSubscriptionFlow: ServiceSubscriptionFlowProvider
) : ViewModel<SettingsStateModel>(initialStateValue = SettingsStateModel()) {
Expand Down Expand Up @@ -219,7 +219,7 @@ public class SettingsViewModel @Inject public constructor(
private suspend fun getDeviceDetails(): SettingsDeviceDetails =
try {
val publicIp = deviceIPAddressProvider.get()
val localIp = localNetworkManager.getInfo()?.ipAddress
val localIp = localDeviceIPAddressProvider.get()

SettingsDeviceDetails(
publicIpAddress = publicIp,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package com.mooncloak.vpn.app.shared.di
import coil3.SingletonImageLoader
import com.mooncloak.kodetools.logpile.core.Logger
import com.mooncloak.vpn.api.shared.key.WireGuardConnectionKeyManager
import com.mooncloak.vpn.api.shared.network.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.LocalNetworkManager
import com.mooncloak.vpn.api.shared.network.ip.DeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.network.ip.LocalDeviceIPAddressProvider
import com.mooncloak.vpn.api.shared.tunnel.TunnelManager
import com.mooncloak.vpn.app.shared.api.server.usecase.GetDefaultServerUseCase
import com.mooncloak.vpn.app.shared.info.AppClientInfo
Expand All @@ -31,7 +31,7 @@ public actual interface ApplicationDependencies {
public actual val preferenceStorage: UserPreferenceSettings
public actual val imageLoaderFactory: SingletonImageLoader.Factory
public actual val databaseDriverFactory: SqlDriverFactory
public actual val localNetworkManager: LocalNetworkManager
public actual val localDeviceIPAddressProvider: LocalDeviceIPAddressProvider
public actual val deviceIPAddressProvider: DeviceIPAddressProvider
public actual val wireGuardConnectionKeyManager: WireGuardConnectionKeyManager
public actual val tunnelManager: TunnelManager
Expand Down

0 comments on commit 37b40d8

Please sign in to comment.