You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/app/src/main/java/org/tasks/caldav/TasksClient.kt

76 lines
2.7 KiB
Kotlin

package org.tasks.caldav
import at.bitfire.dav4jvm.exception.HttpException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.FormBody
import okhttp3.HttpUrl
import okhttp3.OkHttpClient
import okhttp3.Request
import org.json.JSONObject
class TasksClient(
provider: CaldavClientProvider,
httpClient: OkHttpClient,
private val httpUrl: HttpUrl?
) : CaldavClient(provider, httpClient, httpUrl) {
suspend fun generateNewPassword(description: String?): JSONObject? = withContext(Dispatchers.IO) {
val url = httpUrl?.resolve(ENDPOINT_PASSWORDS) ?: return@withContext null
httpClient
.newCall(Request.Builder()
.post(FormBody.Builder()
.apply {
if (!description.isNullOrBlank()) {
add(FORM_DESCRIPTION, description)
}
}
.build()
)
.url(url)
.build())
.execute()
.use { response ->
if (!response.isSuccessful) {
throw HttpException(response)
}
response.body?.use { body -> JSONObject(body.string()) }
}
}
suspend fun deletePassword(id: Int) = withContext(Dispatchers.IO) {
val url = httpUrl?.resolve(ENDPOINT_PASSWORDS) ?: return@withContext false
httpClient
.newCall(Request.Builder()
.delete(FormBody.Builder().add(FORM_SESSION_ID, id.toString()).build())
.url(url)
.build())
.execute()
.use { response ->
if (!response.isSuccessful) {
throw HttpException(response)
}
}
}
suspend fun getAppPasswords(): JSONObject? = withContext(Dispatchers.IO) {
val url = httpUrl?.resolve(ENDPOINT_PASSWORDS) ?: return@withContext null
httpClient
.newCall(Request.Builder()
.get()
.url(url)
.build())
.execute()
.use { response ->
if (!response.isSuccessful) {
throw HttpException(response)
}
response.body?.use { body -> JSONObject(body.string()) }
}
}
companion object {
private const val ENDPOINT_PASSWORDS = "/app-passwords"
private const val FORM_DESCRIPTION = "description"
private const val FORM_SESSION_ID = "session_id"
}
}