diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index f2a59b6..8f69baa 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,5 +1,5 @@ fun main(args: Array) { - println("Hello World!") + println("Cloudflare DDNS 更新程式已啟動") // Try adding program arguments via Run/Debug configuration. // Learn more about running applications: https://www.jetbrains.com/help/idea/running-applications.html. diff --git a/src/main/kotlin/api/CloudflareApiService.kt b/src/main/kotlin/api/CloudflareApiService.kt new file mode 100644 index 0000000..783dcea --- /dev/null +++ b/src/main/kotlin/api/CloudflareApiService.kt @@ -0,0 +1,35 @@ +package api + +import model.CloudflareResult +import model.verifyToken.VerifyTokenResult +import model.zones.UpdateDnsBody +import model.zones.DnsResult +import model.zones.ZonesResult +import retrofit2.http.* + +interface CloudflareApiService { + + @GET("/client/v4/user/tokens/verify") + suspend fun getVerifyToken( + @Header("Authorization") token: String + ): CloudflareResult + + @GET("/client/v4/zones") + suspend fun getZones( + @Header("Authorization") token: String + ): CloudflareResult + + @GET("/client/v4/zones/{ZONE_ID}/dns_records") + suspend fun getZoneDnsRecords( + @Header("Authorization") token: String, + @Path("ZONE_ID") zoneId: String + ): CloudflareResult> + + @PUT("/client/v4/zones/{ZONE_ID}/dns_records/{RECORD_ID}") + suspend fun updateZoneDnsRecords( + @Header("Authorization") token: String, + @Path("ZONE_ID") zoneId: String, + @Path("RECORD_ID") recordId: String, + @Body body: UpdateDnsBody + ): CloudflareResult +} \ No newline at end of file diff --git a/src/main/kotlin/model/CloudflareResult.kt b/src/main/kotlin/model/CloudflareResult.kt new file mode 100644 index 0000000..6494c3f --- /dev/null +++ b/src/main/kotlin/model/CloudflareResult.kt @@ -0,0 +1,9 @@ +package model + +data class CloudflareResult( + val result: T, + val result_info: ResultInfo?, + val success: Boolean, + val errors: List?, + val messages: List? +) \ No newline at end of file diff --git a/src/main/kotlin/model/Message.kt b/src/main/kotlin/model/Message.kt new file mode 100644 index 0000000..599a6d4 --- /dev/null +++ b/src/main/kotlin/model/Message.kt @@ -0,0 +1,6 @@ +package model + +data class Message( + val code: Int, + val message: String +) \ No newline at end of file diff --git a/src/main/kotlin/model/ResultInfo.kt b/src/main/kotlin/model/ResultInfo.kt new file mode 100644 index 0000000..b7e4675 --- /dev/null +++ b/src/main/kotlin/model/ResultInfo.kt @@ -0,0 +1,9 @@ +package model + +data class ResultInfo( + val count: Int, + val page: Int, + val per_page: Int, + val total_count: Int, + val total_pages: Int +) \ No newline at end of file diff --git a/src/main/kotlin/model/verifyToken/VerifyTokenResult.kt b/src/main/kotlin/model/verifyToken/VerifyTokenResult.kt new file mode 100644 index 0000000..cc2a0c7 --- /dev/null +++ b/src/main/kotlin/model/verifyToken/VerifyTokenResult.kt @@ -0,0 +1,6 @@ +package model.verifyToken + +data class VerifyTokenResult( + val id: String, + val status: String +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/Account.kt b/src/main/kotlin/model/zones/Account.kt new file mode 100644 index 0000000..5b62e2b --- /dev/null +++ b/src/main/kotlin/model/zones/Account.kt @@ -0,0 +1,6 @@ +package model.zones + +data class Account( + val id: String, + val name: String +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/DnsResult.kt b/src/main/kotlin/model/zones/DnsResult.kt new file mode 100644 index 0000000..a9c44ee --- /dev/null +++ b/src/main/kotlin/model/zones/DnsResult.kt @@ -0,0 +1,19 @@ +package model.zones + +data class DnsResult( + val id: String, + val zone_id: String, + val zone_name: String, + val name: String, + val type: String, + val content: String, + val proxiable: Boolean, + val proxied: Boolean, + val ttl: Int, + val locked: Boolean, + val meta: Meta, + val comment: String?, + val tags: List?, + val created_on: String, + val modified_on: String +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/Meta.kt b/src/main/kotlin/model/zones/Meta.kt new file mode 100644 index 0000000..624e537 --- /dev/null +++ b/src/main/kotlin/model/zones/Meta.kt @@ -0,0 +1,13 @@ +package model.zones + +data class Meta( + val step: Int?, + val custom_certificate_quota: Int?, + val page_rule_quota: Int?, + val phishing_detected: Boolean?, + val multiple_railguns_allowed: Boolean?, + val auto_added: Boolean?, + val managed_by_apps: Boolean?, + val managed_by_argo_tunnel: Boolean?, + val source: String? +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/Owner.kt b/src/main/kotlin/model/zones/Owner.kt new file mode 100644 index 0000000..52b3973 --- /dev/null +++ b/src/main/kotlin/model/zones/Owner.kt @@ -0,0 +1,7 @@ +package model.zones + +data class Owner( + val id: String?, + val type: String, + val email: String? +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/Plan.kt b/src/main/kotlin/model/zones/Plan.kt new file mode 100644 index 0000000..2a20112 --- /dev/null +++ b/src/main/kotlin/model/zones/Plan.kt @@ -0,0 +1,14 @@ +package model.zones + +data class Plan( + val id: String, + val name: String, + val price: Int, + val currency: String, + val frequency: String, + val is_subscribed: Boolean, + val can_subscribe: Boolean, + val legacy_id: String, + val legacy_discount: Boolean, + val externally_managed: Boolean +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/Tenant.kt b/src/main/kotlin/model/zones/Tenant.kt new file mode 100644 index 0000000..4d4b785 --- /dev/null +++ b/src/main/kotlin/model/zones/Tenant.kt @@ -0,0 +1,6 @@ +package model.zones + +data class Tenant( + val id: String?, + val name: String? +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/TenantUnit.kt b/src/main/kotlin/model/zones/TenantUnit.kt new file mode 100644 index 0000000..56ba184 --- /dev/null +++ b/src/main/kotlin/model/zones/TenantUnit.kt @@ -0,0 +1,5 @@ +package model.zones + +data class TenantUnit( + val id: String? +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/UpdateDnsBody.kt b/src/main/kotlin/model/zones/UpdateDnsBody.kt new file mode 100644 index 0000000..18e6b9c --- /dev/null +++ b/src/main/kotlin/model/zones/UpdateDnsBody.kt @@ -0,0 +1,9 @@ +package model.zones + +data class UpdateDnsBody( + val content: String, + val name: String, + val proxied: Boolean, + val ttl: Int, + val type: String +) \ No newline at end of file diff --git a/src/main/kotlin/model/zones/ZonesResult.kt b/src/main/kotlin/model/zones/ZonesResult.kt new file mode 100644 index 0000000..1009cc0 --- /dev/null +++ b/src/main/kotlin/model/zones/ZonesResult.kt @@ -0,0 +1,24 @@ +package model.zones + +data class ZonesResult( + val id: String, + val name: String, + val status: String, + val paused: Boolean, + val type: String, + val development_mode: Int, + val name_servers: List, + val original_name_servers: List, + val original_registrar: String, + val original_dnshost: String?, + val modified_on: String, + val created_on: String, + val activated_on: String, + val meta: Meta, + val owner: Owner, + val account: Account, + val tenant: Tenant, + val tenant_unit: TenantUnit, + val permissions: List, + val plan: Plan +) \ No newline at end of file