class Cloudflare

methods to create/update/list Cloudflare A records

Public Class Methods

new(cf_token, domain, email) click to toggle source
# File lib/droptoflare/cloudflare.rb, line 7
def initialize(cf_token, domain, email)
  @cf_token = cf_token
  @domain = domain
  @email = email
end

Public Instance Methods

create_record(name, ip) click to toggle source

Create new A record

# File lib/droptoflare/cloudflare.rb, line 14
def create_record(name, ip)
  data = {
    a: 'rec_new',
    tkn: @cf_token,
    email: @email,
    z: @domain,
    name: name,
    content: ip,
    type: 'A',
    ttl: 120
  }
  query(data)
end
records() click to toggle source

Return hash with all A records for domain

# File lib/droptoflare/cloudflare.rb, line 29
def records
  entries = {}
  data = {
    a: 'rec_load_all',
    tkn: @cf_token,
    email: @email,
    z: @domain
  }
  r = query(data)
  r['response']['recs']['objs'].each do |e|
    next if e['type'] != 'A'
    entries[e['name']] = { ip: e['content'], id: e['rec_id'] }
  end
  entries
end
update_record(name, ip, id) click to toggle source

Update existing record

# File lib/droptoflare/cloudflare.rb, line 46
def update_record(name, ip, id)
  data = {
    a: 'rec_edit',
    tkn: @cf_token,
    email: @email,
    z: @domain,
    name: name,
    content: ip,
    id: id,
    type: 'A',
    ttl: 120
  }
  query(data)
end

Private Instance Methods

query(data) click to toggle source
# File lib/droptoflare/cloudflare.rb, line 63
def query(data)
  uri = URI.parse('https://www.cloudflare.com/api_json.html')
  resp = Net::HTTP.post_form(uri, data)
  r = JSON.parse(resp.body)
  fail r['msg'] if r['result'] != 'success'
  r
end