Kotlin binding for Todoist REST API using Ktor Http Client and Gson as Json marshaller.
val httpClient = HttpClient(CIO) {
install(ContentNegotiation) {
gson()
}
install(Auth) {
bearer {
sendWithoutRequest { true }
loadTokens {
// see https://developer.todoist.com/rest/v2/#authorization
// see https://app.todoist.com/app/settings/integrations/developer
val apiToken = System.getenv("TODOIST_API_TOKEN")
BearerTokens(apiToken, "")
}
}
}
defaultRequest {
if (url.host.isEmpty()) {
val defaultUrl = URLBuilder().takeFrom("https://api.todoist.com/rest")
url.host = defaultUrl.host
url.protocol = defaultUrl.protocol
if (!url.encodedPath.startsWith('/')) {
val basePath = defaultUrl.encodedPath
url.encodedPath = "$basePath/${url.encodedPath}"
}
}
}
}
val todoService = HttpTodoistService(httpClient)
runBlocking {
withContext(Dispatchers.IO) {
todoService.getTasks().forEach(::println)
}
}