diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-06-13 16:31:40 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-06-14 13:27:05 +0200 |
| commit | e80e9ee68559fcd32747c28a829e70d2121e9344 (patch) | |
| tree | 0caefca40bdc425b44a5c1dc719b1f409933fb6f /android/lib/model | |
| parent | 6fb4623503fda3df77a9c7c3cc152a45506ba1a4 (diff) | |
| download | mullvadvpn-e80e9ee68559fcd32747c28a829e70d2121e9344.tar.xz mullvadvpn-e80e9ee68559fcd32747c28a829e70d2121e9344.zip | |
Add api acccess method functionality
Diffstat (limited to 'android/lib/model')
18 files changed, 187 insertions, 1 deletions
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/AddApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/AddApiAccessMethodError.kt new file mode 100644 index 0000000000..d0c741e53c --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/AddApiAccessMethodError.kt @@ -0,0 +1,5 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface AddApiAccessMethodError { + data class Unknown(val t: Throwable) : AddApiAccessMethodError +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethod.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethod.kt new file mode 100644 index 0000000000..d8762af391 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethod.kt @@ -0,0 +1,23 @@ +package net.mullvad.mullvadvpn.lib.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +sealed interface ApiAccessMethod : Parcelable { + @Parcelize data object Direct : ApiAccessMethod + + @Parcelize data object Bridges : ApiAccessMethod + + sealed interface CustomProxy : ApiAccessMethod { + @Parcelize + data class Socks5Remote(val ip: String, val port: Port, val auth: SocksAuth?) : CustomProxy + + @Parcelize + data class Shadowsocks( + val ip: String, + val port: Port, + val password: String?, + val cipher: Cipher + ) : CustomProxy + } +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodId.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodId.kt new file mode 100644 index 0000000000..a6dc0628df --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodId.kt @@ -0,0 +1,14 @@ +package net.mullvad.mullvadvpn.lib.model + +import android.os.Parcelable +import java.util.UUID +import kotlinx.parcelize.Parcelize + +@JvmInline +@Parcelize +value class ApiAccessMethodId private constructor(val value: UUID) : Parcelable { + + companion object { + fun fromString(id: String) = ApiAccessMethodId(value = UUID.fromString(id)) + } +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodName.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodName.kt new file mode 100644 index 0000000000..b1eada2982 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodName.kt @@ -0,0 +1,19 @@ +package net.mullvad.mullvadvpn.lib.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +@JvmInline +value class ApiAccessMethodName private constructor(val value: String) : Parcelable { + override fun toString() = value + + companion object { + const val MAX_LENGTH = 30 + + fun fromString(name: String): ApiAccessMethodName { + val trimmedName = name.trim().take(MAX_LENGTH) + return ApiAccessMethodName(trimmedName) + } + } +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodSetting.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodSetting.kt new file mode 100644 index 0000000000..07e1c185df --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodSetting.kt @@ -0,0 +1,8 @@ +package net.mullvad.mullvadvpn.lib.model + +data class ApiAccessMethodSetting( + val id: ApiAccessMethodId, + val name: ApiAccessMethodName, + val enabled: Boolean, + val apiAccessMethod: ApiAccessMethod +) diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Cipher.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Cipher.kt new file mode 100644 index 0000000000..4571c824dd --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Cipher.kt @@ -0,0 +1,34 @@ +package net.mullvad.mullvadvpn.lib.model + +// All suppported shadowsocks ciphers +enum class Cipher(val label: String) { + AES_128_CFB("aes-128-cfb"), + AES_128_CFB1("aes-128-cfb1"), + AES_128_CFB8("aes-128-cfb8"), + AES_128_CFB128("aes-128-cfb128"), + AES_256_CFB("aes-256-cfb"), + AES_256_CFB1("aes-256-cfb1"), + AES_256_CFB8("aes-256-cfb8"), + AES_256_CFB128("aes-256-cfb128"), + RC4("rc4"), + RC4_MD5("rc4-md5"), + CHACHA20("chacha20"), + SALSA20("salsa20"), + CHACHA20_IETF("chacha20-ietf"), + AES_128_GCM("aes-128-gcm"), + AES_256_GCM("aes-256-gcm"), + CHACHA20_IETF_POLY1305("chacha20-ietf-poly1305"), + XCHACHA20_IETF_POLY1305("xchacha20-ietf-poly1305"), + AES_128_PMAC_SIV("aes-128-pmac-siv"), + AES_256_PMAC_SIV("aes-256-pmac-siv"); + + override fun toString(): String = label + + companion object { + fun fromString(input: String) = Cipher.entries.first { it.label == input } + + fun listAll() = Cipher.entries.sortedBy { it.label } + + fun first() = listAll().first() + } +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetApiAccessMethodError.kt new file mode 100644 index 0000000000..47f2ad29cc --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetApiAccessMethodError.kt @@ -0,0 +1,5 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface GetApiAccessMethodError : UpdateApiAccessMethodError { + data object NotFound : GetApiAccessMethodError +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetCurrentApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetCurrentApiAccessMethodError.kt new file mode 100644 index 0000000000..54c9791d0b --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetCurrentApiAccessMethodError.kt @@ -0,0 +1,5 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface GetCurrentApiAccessMethodError { + data class Unknown(val t: Throwable) : GetCurrentApiAccessMethodError +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InvalidDataError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InvalidDataError.kt new file mode 100644 index 0000000000..450d94e691 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InvalidDataError.kt @@ -0,0 +1,27 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface InvalidDataError { + sealed interface NameError : InvalidDataError { + data object Required : NameError + } + + sealed interface ServerIpError : InvalidDataError { + data object Required : ServerIpError + + data object Invalid : ServerIpError + } + + sealed interface PortError : InvalidDataError { + data object Required : PortError + + data class Invalid(val portError: ParsePortError) : PortError + } + + sealed interface UserNameError : InvalidDataError { + data object Required : UserNameError + } + + sealed interface PasswordError : InvalidDataError { + data object Required : PasswordError + } +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/NewAccessMethodSetting.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/NewAccessMethodSetting.kt new file mode 100644 index 0000000000..990dc300bc --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/NewAccessMethodSetting.kt @@ -0,0 +1,11 @@ +package net.mullvad.mullvadvpn.lib.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class NewAccessMethodSetting( + val name: ApiAccessMethodName, + val enabled: Boolean, + val apiAccessMethod: ApiAccessMethod.CustomProxy +) : Parcelable diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt index 5ce44d0565..e6ca1e01b9 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt @@ -9,6 +9,9 @@ import kotlinx.parcelize.Parcelize @JvmInline @Parcelize value class Port(val value: Int) : Parcelable { + + override fun toString(): String = value.toString() + companion object { fun fromString(value: String): Either<ParsePortError, Port> = either { val number = value.toIntOrNull() ?: raise(ParsePortError.NotANumber(value)) diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RemoveApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RemoveApiAccessMethodError.kt new file mode 100644 index 0000000000..88516761c4 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RemoveApiAccessMethodError.kt @@ -0,0 +1,5 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface RemoveApiAccessMethodError { + data class Unknown(val t: Throwable) : RemoveApiAccessMethodError +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SetApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SetApiAccessMethodError.kt new file mode 100644 index 0000000000..1fa0544a82 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SetApiAccessMethodError.kt @@ -0,0 +1,5 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface SetApiAccessMethodError { + data class Unknown(val t: Throwable) : SetApiAccessMethodError +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt index c5191531be..e801397b27 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt @@ -12,7 +12,8 @@ data class Settings( val tunnelOptions: TunnelOptions, val relayOverrides: List<RelayOverride>, val showBetaReleases: Boolean, - val splitTunnelSettings: SplitTunnelSettings + val splitTunnelSettings: SplitTunnelSettings, + val apiAccessMethodSettings: List<ApiAccessMethodSetting> ) { companion object } diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SocksAuth.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SocksAuth.kt new file mode 100644 index 0000000000..ff17641d63 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SocksAuth.kt @@ -0,0 +1,6 @@ +package net.mullvad.mullvadvpn.lib.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize data class SocksAuth(val username: String, val password: String) : Parcelable diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TestApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TestApiAccessMethodError.kt new file mode 100644 index 0000000000..ce69919110 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TestApiAccessMethodError.kt @@ -0,0 +1,9 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface TestApiAccessMethodError { + data object CouldNotAccess : TestApiAccessMethodError + + data object Grpc : TestApiAccessMethodError + + data class Unknown(val t: Throwable) : TestApiAccessMethodError +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UnknownApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UnknownApiAccessMethodError.kt new file mode 100644 index 0000000000..06cb81fc5e --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UnknownApiAccessMethodError.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.lib.model + +data class UnknownApiAccessMethodError(val throwable: Throwable) : UpdateApiAccessMethodError diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateApiAccessMethodError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateApiAccessMethodError.kt new file mode 100644 index 0000000000..0597967375 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateApiAccessMethodError.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface UpdateApiAccessMethodError |
