mirror of https://github.com/tasks/tasks
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.
76 lines
2.7 KiB
Kotlin
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"
|
|
}
|
|
} |