Added Conscrypt as SSL library, Fixed issues with kapt for build+test. Fixed unit test (wrapped in try block)

This commit is contained in:
nathan 2020-01-06 14:36:39 +01:00
parent 3c9f36911e
commit b9a2910a49
3 changed files with 51 additions and 38 deletions

View File

@ -11,20 +11,21 @@ plugins {
// publish on sonatype // publish on sonatype
id("de.marcphilipp.nexus-publish") version "0.4.0" id("de.marcphilipp.nexus-publish") version "0.4.0"
// close and release on sonatype // close and release on sonatype
id("io.codearte.nexus-staging") version "0.21.1" id("io.codearte.nexus-staging") version "0.21.2"
id("com.dorkbox.Licensing") version "1.4.2" id("com.dorkbox.Licensing") version "1.4.2"
id("com.dorkbox.VersionUpdate") version "1.6.1" id("com.dorkbox.VersionUpdate") version "1.6.1"
id("com.dorkbox.GradleUtils") version "1.2.8" id("com.dorkbox.GradleUtils") version "1.2.8"
kotlin("jvm") version "1.3.61" kotlin("jvm") version "1.3.61"
kotlin("kapt") version "1.3.61"
} }
object Extras { object Extras {
// set for the project // set for the project
const val description = "Cloudflare API v4 for Kotlin" const val description = "Cloudflare API v4 for Kotlin"
const val group = "com.dorkbox" const val group = "com.dorkbox"
const val version = "1.0" const val version = "1.1"
// set as project.ext // set as project.ext
const val name = "KloudflareAPI" const val name = "KloudflareAPI"
@ -146,11 +147,10 @@ dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-stdlib") implementation("org.jetbrains.kotlin:kotlin-stdlib")
implementation("org.jetbrains.kotlin:kotlin-stdlib-common") implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
implementation("org.jetbrains.kotlin:kotlin-reflect")
val moshiVer = "1.9.2" val moshiVer = "1.9.2"
val okHttpVer = "4.2.2" val okHttpVer = "4.3.0"
val retroVer = "2.7.0" val retroVer = "2.7.1"
implementation("com.squareup.okhttp3:okhttp:$okHttpVer") implementation("com.squareup.okhttp3:okhttp:$okHttpVer")
implementation("com.squareup.okhttp3:logging-interceptor:$okHttpVer") // Log Network Calls implementation("com.squareup.okhttp3:logging-interceptor:$okHttpVer") // Log Network Calls
@ -161,8 +161,13 @@ dependencies {
// For serialization. THESE ARE NOT TRANSITIVE because it screws up the kotlin version // For serialization. THESE ARE NOT TRANSITIVE because it screws up the kotlin version
implementation("com.squareup.retrofit2:retrofit:$retroVer") implementation("com.squareup.retrofit2:retrofit:$retroVer")
implementation("com.squareup.retrofit2:converter-moshi:$retroVer") implementation("com.squareup.retrofit2:converter-moshi:$retroVer")
implementation ("com.squareup.moshi:moshi:$moshiVer") implementation ("com.squareup.moshi:moshi:$moshiVer")
implementation ("com.squareup.moshi:moshi-kotlin:$moshiVer") implementation ("com.squareup.moshi:moshi-kotlin:$moshiVer")
// for AUTOMATIC kotlin reflective serialization of json classes
kapt ("com.squareup.moshi:moshi-kotlin-codegen:$moshiVer")
kaptTest ("com.squareup.moshi:moshi-kotlin-codegen:$moshiVer")
} }
/////////////////////////////// ///////////////////////////////

View File

@ -16,6 +16,8 @@
package dorkbox.kloudflareApi package dorkbox.kloudflareApi
import com.squareup.moshi.Moshi import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import dorkbox.kloudflareApi.api.CloudflareActions import dorkbox.kloudflareApi.api.CloudflareActions
import dorkbox.kloudflareApi.api.core.CfErrorResponse import dorkbox.kloudflareApi.api.core.CfErrorResponse
import dorkbox.kloudflareApi.api.core.CfResponse import dorkbox.kloudflareApi.api.core.CfResponse
@ -37,16 +39,31 @@ import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.ResponseBody import okhttp3.ResponseBody
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import org.conscrypt.Conscrypt
import retrofit2.Call import retrofit2.Call
import retrofit2.Converter import retrofit2.Converter
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory import retrofit2.converter.moshi.MoshiConverterFactory
import java.io.IOException import java.io.IOException
import java.security.Security
import java.time.LocalDateTime
import java.util.Collections.*
import kotlin.reflect.full.defaultType
class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) { class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) {
companion object { companion object {
private const val API_BASE_URL = "https://api.cloudflare.com/client/v4/" private const val API_BASE_URL = "https://api.cloudflare.com/client/v4/"
init {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
}
catch (e: Throwable) {
e.printStackTrace();
}
}
} }
private val errorConverter: Converter<ResponseBody, CfErrorResponse> private val errorConverter: Converter<ResponseBody, CfErrorResponse>
@ -55,8 +72,9 @@ class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) {
init { init {
// JSON mapping to java classes // JSON mapping to java classes
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY // val interceptor = HttpLoggingInterceptor()
// interceptor.level = HttpLoggingInterceptor.Level.BODY
client = OkHttpClient.Builder() client = OkHttpClient.Builder()
// .addInterceptor(interceptor) // this is the raw HTTP interceptor // .addInterceptor(interceptor) // this is the raw HTTP interceptor
@ -67,8 +85,6 @@ class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) {
.add(DnsRecordTypeAdapter()) .add(DnsRecordTypeAdapter())
.build() .build()
// val adapter = moshi.adapter<List<String>>(Types.newParameterizedType(List::class.java, String::class.java))
val retrofit = Retrofit.Builder() val retrofit = Retrofit.Builder()
.baseUrl(API_BASE_URL) .baseUrl(API_BASE_URL)
.addConverterFactory(MoshiConverterFactory.create(moshi)) .addConverterFactory(MoshiConverterFactory.create(moshi))
@ -76,7 +92,6 @@ class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) {
.build() .build()
errorConverter = retrofit.responseBodyConverter(CfErrorResponse::class.java, CfErrorResponse::class.annotations.toTypedArray()) errorConverter = retrofit.responseBodyConverter(CfErrorResponse::class.java, CfErrorResponse::class.annotations.toTypedArray())
cloudflare = retrofit.create(CloudflareActions::class.java) cloudflare = retrofit.create(CloudflareActions::class.java)
} }
@ -92,6 +107,7 @@ class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) {
return response.body?.string()!! return response.body?.string()!!
} }
@Throws(IOException::class)
private fun <T> wrap(call: Call<CfResponse<T>>): T { private fun <T> wrap(call: Call<CfResponse<T>>): T {
val response = call.execute() val response = call.execute()
@ -101,7 +117,7 @@ class Kloudflare(private val xAuthEmail: String, private val xAuthKey: String) {
} }
val errorResponse = errorConverter.convert(response.errorBody()!!) val errorResponse = errorConverter.convert(response.errorBody()!!)
throw IOException("HTTP call failed: " + errorResponse?.errors?.joinToString { error: Error -> "[${error.code} : ${error.message}]" }) throw IOException("Call failed: " + errorResponse?.errors?.joinToString { error: Error -> "[${error.code} : ${error.message}]" })
} }
/** /**

View File

@ -46,37 +46,29 @@ object KloudflareTest {
val kloudflare = Kloudflare(email, token) val kloudflare = Kloudflare(email, token)
try {
println(kloudflare.getUserDetails()) println(kloudflare.getUserDetails())
println(kloudflare.getUserBillingProfile()) // println(kloudflare.getUserBillingProfile())
println(kloudflare.getUserBillingHistory()) // println(kloudflare.getUserBillingHistory())
val zones = kloudflare.listZones() val zones = kloudflare.listZones()
zones.forEach {
println(it)
}
// println(kloudflare.getZoneRatePlans("123")) // println(kloudflare.getZoneRatePlans("123"))
// println(kloudflare.getZoneRatePlans("123")) // println(kloudflare.getZoneRatePlans("123"))
// println(kloudflare.getZoneSettings("123")) // println(kloudflare.getZoneSettings("123"))
// println(kloudflare.listDnsRecords("123")) // println(kloudflare.listDnsRecords("123"))
// println(kloudflare.listAccessRules()) println(kloudflare.listAccessRules())
// val history = cloudflare.getUserBillingHistory(email, token).execute() }
// println("user: ${history.body()?.result}") finally {
//
// val zones = cloudflare.listZones(email, token).execute().body()?.result
// println("user: ${zones.body()?.result}")
// val zoneRatePlans = cloudflare.getZoneRatePlans(email, token, "123").execute()
// println("user: ${zoneRatePlans.body()?.result}")
//
// val zoneSettings = cloudflare.getZoneSettings(email, token, "123").execute()
// println("user: ${zoneSettings.body()?.result}")
//
// val dnsRecords = cloudflare.listDnsRecords(email, token, "123").execute()
// println("user: ${dnsRecords.body()?.result}")
kloudflare.shutdown() kloudflare.shutdown()
} }
} }
}