cloudflare/Cloudflare-Pivotal-Cloud-Foundry
Publicmirrored fromhttps://github.com/cloudflare/Cloudflare-Pivotal-Cloud-Foundry
api/cloudflare.go
80lines · modecode
| 1 | package api |
| 2 | |
| 3 | import ( |
| 4 | "bytes" |
| 5 | "io/ioutil" |
| 6 | "net/http" |
| 7 | ) |
| 8 | |
| 9 | const CLOUDFLARE_CLIENT_API_ENDPOINT = "https://api.cloudflare.com/client/v4/" |
| 10 | const CLOUDFLARE_CLIENT_API_ZONES = CLOUDFLARE_CLIENT_API_ENDPOINT + "zones/" |
| 11 | const X_AUTH_EMAIL_HEADER = "X-Auth-Email" |
| 12 | const X_AUTH_KEY_HEADER = "X-Auth-Key" |
| 13 | |
| 14 | type CloudflareAPIInterface interface { |
| 15 | AddZone(domain string) ([]byte, error) |
| 16 | DeleteZone(zoneId string) error |
| 17 | SetAuthHeaders(authHeaders AuthHeaders) |
| 18 | } |
| 19 | |
| 20 | type CloudflareAPI struct { |
| 21 | Auth AuthHeaders |
| 22 | } |
| 23 | |
| 24 | type AuthHeaders struct { |
| 25 | XAuthEmail string `json:"x-auth-email"` |
| 26 | XAuthKey string `json:"x-auth-key"` |
| 27 | } |
| 28 | |
| 29 | func (api CloudflareAPI) GetAuthHeaders() AuthHeaders { |
| 30 | return api.Auth |
| 31 | } |
| 32 | |
| 33 | func (api *CloudflareAPI) SetAuthHeaders(authHeaders AuthHeaders) { |
| 34 | api.Auth = authHeaders |
| 35 | } |
| 36 | |
| 37 | func (api CloudflareAPI) AddZone(domain string) ([]byte, error) { |
| 38 | var jsonBody = []byte(`{"name" : "` + domain + `"}`) |
| 39 | request, err := http.NewRequest("POST", CLOUDFLARE_CLIENT_API_ZONES, bytes.NewReader(jsonBody)) |
| 40 | if err != nil { |
| 41 | return nil, err |
| 42 | } |
| 43 | |
| 44 | var authHeaders = api.GetAuthHeaders() |
| 45 | request.Header.Add(X_AUTH_EMAIL_HEADER, authHeaders.XAuthEmail) |
| 46 | request.Header.Add(X_AUTH_KEY_HEADER, authHeaders.XAuthKey) |
| 47 | |
| 48 | var client = http.Client{} |
| 49 | response, err := client.Do(request) |
| 50 | if err != nil { |
| 51 | return nil, err |
| 52 | } |
| 53 | defer response.Body.Close() |
| 54 | |
| 55 | data, err := ioutil.ReadAll(response.Body) |
| 56 | if err != nil { |
| 57 | return nil, err |
| 58 | } |
| 59 | |
| 60 | return data, err |
| 61 | } |
| 62 | |
| 63 | func (api CloudflareAPI) DeleteZone(zoneId string) error { |
| 64 | request, err := http.NewRequest("DELETE", CLOUDFLARE_CLIENT_API_ZONES+zoneId, nil) |
| 65 | if err != nil { |
| 66 | return err |
| 67 | } |
| 68 | |
| 69 | var authHeaders = api.GetAuthHeaders() |
| 70 | request.Header.Add(X_AUTH_EMAIL_HEADER, authHeaders.XAuthEmail) |
| 71 | request.Header.Add(X_AUTH_KEY_HEADER, authHeaders.XAuthKey) |
| 72 | |
| 73 | var client = http.Client{} |
| 74 | _, err = client.Do(request) |
| 75 | if err != nil { |
| 76 | return err |
| 77 | } |
| 78 | |
| 79 | return nil |
| 80 | } |