Bug#1029802: ITP: cloudflare-go -- Go library for the Cloudflare v4 API
Package: wnpp
Severity: wishlist
Owner: Kalle M. Aagaard <deb@k-moeller.dk>
* Package name : cloudflare-go
Version : 0.59.0-1
Upstream Author : Cloudflare
* URL : https://github.com/cloudflare/cloudflare-go
* License : BSD-3-clause
Programming Lang: Go
Description : Go library for the Cloudflare v4 API
cloudflare-go
.
Go Reference (https://pkg.go.dev/github.com/cloudflare/cloudflare-go)
[Image: Test] (https://github.com/cloudflare/cloudflare-
go/workflows/Test/badge.svg) Go Report Card
(https://goreportcard.com/report/github.com/cloudflare/cloudflare-go)
.
| **Note**: This library is under active development as we expand it to
| cover
| our (expanding!) API. Consider the public API of this package a
little
| unstable as we work towards a v1.0.
.
A Go library for interacting with Cloudflare's API v4
(https://api.cloudflare.com/). This library allows you to:
.
* Manage and automate changes to your DNS records within Cloudflare
* Manage and automate changes to your zones (domains) on Cloudflare,
including
adding new zones to your account
* List and modify the status of WAF (Web Application Firewall) rules
for your
zones
* Fetch Cloudflare's IP ranges for automating your firewall
whitelisting
.
A command-line client, flarectl (/cmd/flarectl), is also available as
part of this project.
.
Features
.
The current feature list includes:
.
[x] Cache purging
[x] Cloudflare IPs
[x] Custom hostnames
[x] DNS Firewall
[x] DNS Records
[x] Firewall (partial)
[x] Gateway Locations
[x] Keyless SSL (https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-
technical-details/)
[x] Load Balancing (https://blog.cloudflare.com/introducing-load-
balancing-intelligent-failover-with-cloudflare/)
[x] Logpush Jobs (https://developers.cloudflare.com/logs/logpush/)
[x] Magic Transit / Magic WAN
[x] mTLS Certificate Store
[x] Notifications
[ ] Organization Administration
[x] Origin CA (https://blog.cloudflare.com/universal-ssl-encryption-all-the-
way-to-the-origin-for-free/)
[x] Railgun (https://www.cloudflare.com/railgun/) administration
[x] Rate Limiting
[x] User Administration (partial)
[x] Web Application Firewall (WAF)
[x] Workers KV
[x] Zone cache settings
[x] Zone Lockdown and User-Agent Block rules
[x] Zones
[x] Managed Headers
.
Pull Requests are welcome, but please open an issue (or comment in an
existing issue) to discuss any non-trivial changes before submitting
code.
.
Installation
.
You need a working Go environment. We officially support only currently
supported Go versions according to Go project's release policy
(https://go.dev/doc/devel/release#policy).
.
go get github.com/cloudflare/cloudflare-go
.
Getting Started
.
package main
.
import (
"context"
"fmt"
"log"
"os"
.
"github.com/cloudflare/cloudflare-go"
)
.
func main() {
// Construct a new API object using a global API key
api, err := cloudflare.New(os.Getenv("CLOUDFLARE_API_KEY"),
os.Getenv("CLOUDFLARE_API_EMAIL"))
// alternatively, you can use a scoped API token
// api, err :=
cloudflare.NewWithAPIToken(os.Getenv("CLOUDFLARE_API_TOKEN"))
if err != nil {
log.Fatal(err)
}
.
// Most API calls require a Context
ctx := context.Background()
.
// Fetch user details on the account
u, err := api.UserDetails(ctx)
if err != nil {
log.Fatal(err)
}
// Print user details
fmt.Println(u)
.
// Fetch the zone ID
id, err := api.ZoneIDByName("example.com") // Assuming example.com
exists in your Cloudflare account already
if err != nil {
log.Fatal(err)
}
.
// Fetch zone details
zone, err := api.ZoneDetails(ctx, id)
if err != nil {
log.Fatal(err)
}
// Print zone details
fmt.Println(zone)
}
.
Also refer to the API documentation
(https://pkg.go.dev/github.com/cloudflare/cloudflare-go) for how to use
this package in-depth.
.
Experimental improvements
.
This library is starting to ship with experimental improvements that are
not yet ready for production but will be introduced before the next
major version. See experimental README (/docs/experimental.md) for full
details.
.
License
.
BSD licensed. See the (/LICENSE) file for details.
Reply to: