summaryrefslogtreecommitdiffhomepage
path: root/android/lib/model
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-06-13 16:31:40 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-06-14 13:27:05 +0200
commite80e9ee68559fcd32747c28a829e70d2121e9344 (patch)
tree0caefca40bdc425b44a5c1dc719b1f409933fb6f /android/lib/model
parent6fb4623503fda3df77a9c7c3cc152a45506ba1a4 (diff)
downloadmullvadvpn-e80e9ee68559fcd32747c28a829e70d2121e9344.tar.xz
mullvadvpn-e80e9ee68559fcd32747c28a829e70d2121e9344.zip
Add api acccess method functionality
Diffstat (limited to 'android/lib/model')
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/AddApiAccessMethodError.kt5
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethod.kt23
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodId.kt14
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodName.kt19
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ApiAccessMethodSetting.kt8
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Cipher.kt34
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetApiAccessMethodError.kt5
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetCurrentApiAccessMethodError.kt5
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InvalidDataError.kt27
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/NewAccessMethodSetting.kt11
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt3
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RemoveApiAccessMethodError.kt5
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SetApiAccessMethodError.kt5
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt3
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SocksAuth.kt6
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TestApiAccessMethodError.kt9
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UnknownApiAccessMethodError.kt3
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/UpdateApiAccessMethodError.kt3
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