thischwa 131ee9970a Disable pull stage and refactor build process in CI config.
The pull stage is commented out to streamline the CI pipeline. Refactored the build job to generate artifacts while ensuring test tasks depend on the output of the build job. Added dependencies to relevant stages for smoother execution flow.
2025-04-06 19:02:28 +02:00
2025-03-24 15:49:43 +01:00
2025-03-23 12:12:53 +01:00

CloudflareDNS-java

Build and Test GitHub License

Quality Gate Status Security Rating Coverage Lines of Code Code Smells

Give it a try! GitHub release (latest by date including pre-releases)

Preface

This project provides a java client for minimalistic access to the Cloudflare API, which is mainly used for managing DNS settings such as creating, updating and deleting DNS records.

If you encounter any bugs or find missing features, feel free to report them on the GitHub Issues page.


Disclaimer

This guide comes without any warranty. Use at your own risk. The author is not responsible for potential data loss, hardware damage or keyboard mishaps!


State of the Project

BETA


Get It

The project has its own maven repository. It can be added to the pom.xml:

<repositories>
    <repository>
        <id>github-cloudflaredns</id>
        <name>GitHub Maven Packages</name>
        <url>https://maven.pkg.github.com/th-schwarz/CloudflareDNS-java</url>
    </repository>
</repositories>

The dependency is:

<dependency>
    <groupId>codes.thischwa</groupId>
    <artifactId>cloudflaredns</artifactId>
    <version>0.1.0-beta.1</version>
</dependency>

Methods Overview

The following text focuses on the basic methods. For further information take a look at the javadoc of the CfDnsClient.

Instantiation of CfDnsClient

CfDnsClient cfDnsClient = new CfDnsClient(
     "email@example.com", "yourApiKey", "yourApiToken"
 );

zoneListAll

Retrieve all zones within the Cloudflare account.

  • Returns: A list of ZoneEntity objects.
List<ZoneEntity> zones = cfDnsClient.zoneListAll();
zones.forEach(zone -> System.out.println("Zone: " + zone.getName()));

zoneInfo

Get detailed information about a specific zone by its name.

  • Parameters:
    • String name - The zone name (e.g., "example.com").
  • Returns: A ZoneEntity object.
ZoneEntity zone = cfDnsClient.zoneInfo("example.com");
System.out.println("Zone ID: " + zone.getId());

sldListAll

Retrieve all records for a specific second-level domain (SLD) under a given zone.

  • Parameters:
    • ZoneEntity zone - The zone object.
    • String sld - Second-level domain (e.g., "www" in "www.example.com").
  • Returns: A list of RecordEntity objects.
List<RecordEntity> records = cfDnsClient.sldListAll(zone, "sld");
records.forEach(record -> 
    System.out.println("Record Type: " + record.getType() + ", Value: " + record.getContent())
);

sldInfo

Retrieve DNS record details for a specific SLD, zone, and record type.

  • Parameters:
    • ZoneEntity zone - The zone object.
    • String sld - The second-level domain.
    • RecordType type - Record type (e.g., A, CNAME).
RecordEntity record = cfDnsClient.sldInfo(zone, "www", RecordType.A);
System.out.println("Record IP: " + record.getContent());

recordCreate

Create a new DNS record in a specific zone.

  • Parameters:
    • ZoneEntity zone - DNS zone object.
    • RecordEntity rec - Details of the new record (name, type, content).
RecordEntity newRecord = new RecordEntity("api.example.com", RecordType.A, "192.168.1.1");
RecordEntity created = cfDnsClient.recordCreate(zone, newRecord);
System.out.println("Created Record ID: " + created.getId());

recordUpdate

Update an existing DNS record.

  • Parameters:
    • ZoneEntity zone - The zone that contains the record.
    • RecordEntity rec - Updated record data.
record.setContent("192.168.1.2");
RecordEntity updated = cfDnsClient.recordUpdate(zone, record);
System.out.println("Updated Record: " + updated.getContent());

recordDelete

Delete a DNS record from a zone.

  • Parameters:
    • ZoneEntity zone - The parent zone.
    • RecordEntity rec - Record to delete.
boolean isDeleted = cfDnsClient.recordDelete(zone, record);
System.out.println(isDeleted ? "Deletion successful." : "Deletion failed.");

recordDeleteTypeIfExists

Delete a DNS record of a specific type if it exists.

  • Parameters:
    • ZoneEntity zone - Target zone.
    • String sld - Second-level domain.
    • RecordType type - Record type.
cfDnsClient.recordDeleteTypeIfExists(zone, "api", RecordType.A);
System.out.println("Deletion attempt completed.");

Notes on Error Handling

The CfDnsClient provides internal error-handling mechanisms through exceptions. For example:

  • CloudflareApiException is thrown for errors during API communication or invalid responses.
  • CloudflareNotFoundException is thrown when the requested single resource is not found, if enabled via the emptyResultThrowsException flag during initialization.

Example:

try {
    RecordEntity record = cfDnsClient.sldInfo(zone, "www", RecordType.A);
    System.out.println("Record IP: " + record.getContent());
} catch (CloudflareApiException e) {
  if (e instanceof CloudflareNotFoundException) {
    log.warn("Sld not found: www");
  } else {
    log.error("Error while getting sld info of www", e);
    throw e;
  }  
}

Summary

CfDnsClient offers a simple interface for managing DNS entries via Cloudflare's public API, allowing seamless CRUD operations and automation-friendly workflows.

S
Description
This project focuses on minimalistic Cloudflare API access, enabling DNS management tasks such as creating, updating, and deleting records for types like A, CNAME, MX, TXT, and others.
Readme MIT 1.1 MiB
v0.4.0 Latest
2026-03-11 13:15:40 +01:00
Languages
Java 100%