Skip to content

Instantly share code, notes, and snippets.

@asimihsan
Created February 1, 2016 02:23
Show Gist options
  • Select an option

  • Save asimihsan/d8d8f0f10bdc85fc6f8a to your computer and use it in GitHub Desktop.

Select an option

Save asimihsan/d8d8f0f10bdc85fc6f8a to your computer and use it in GitHub Desktop.

Revisions

  1. asimihsan created this gist Feb 1, 2016.
    84 changes: 84 additions & 0 deletions hook.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,84 @@
    #!/usr/bin/env ruby

    require 'aws-sdk'
    require 'pry'
    require 'awesome_print'

    # ------------------------------------------------------------------------------
    # Credentials
    # ------------------------------------------------------------------------------
    # pick up AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY by default from
    # environment
    Aws.config.update({
    region: 'us-west-2',
    })
    # ------------------------------------------------------------------------------

    def setup_dns(domain, txt_challenge)
    route53 = Aws::Route53::Client.new()
    hosted_zone = route53.list_hosted_zones_by_name(
    {dns_name: "#{domain}."}).hosted_zones[0]
    changes = []
    changes << {
    action: "UPSERT",
    resource_record_set: {
    name: "_acme-challenge.#{domain}.",
    type: "TXT",
    ttl: 60,
    resource_records: [
    value: "\"#{txt_challenge}\"",
    ],
    },
    }
    resp = route53.change_resource_record_sets({
    hosted_zone_id: hosted_zone.id,
    change_batch: {
    changes: changes,
    },
    })
    ap resp
    sleep 10
    end

    def delete_dns(domain, txt_challenge)
    route53 = Aws::Route53::Client.new()
    hosted_zone = route53.list_hosted_zones_by_name(
    {dns_name: "#{domain}."}).hosted_zones[0]
    changes = []
    changes << {
    action: "DELETE",
    resource_record_set: {
    name: "_acme-challenge.#{domain}.",
    type: "TXT",
    ttl: 60,
    resource_records: [
    value: "\"#{txt_challenge}\"",
    ],
    },
    }
    resp = route53.change_resource_record_sets({
    hosted_zone_id: hosted_zone.id,
    change_batch: {
    changes: changes,
    },
    })
    ap resp
    sleep 10
    end

    if __FILE__ == $0
    hook_stage = ARGV[0]
    domain = ARGV[1]
    txt_challenge = ARGV[3]

    puts hook_stage
    puts domain
    puts txt_challenge

    if hook_stage == "deploy_challenge"
    setup_dns(domain, txt_challenge)
    elsif hook_stage == "clean_challenge"
    delete_dns(domain, txt_challenge)
    end

    end