USING: kernel regexp dns hashtables sequences splitting assocs urls arrays http http.client json json.http io.sockets.secure accessors environment ; USING: prettyprint ; IN: bonerbonerboner.dns CONSTANT: bbb-domain "bonerbonerboner.com" CONSTANT: meta R/ ^meta=/ CONSTANT: do-api-base-url URL" https://api.digitalocean.com/v2/" : do-key ( -- key ) "DO_API_KEY" os-env ; ! ensure we have at least a couple dns servers : init-dns-servers ( -- ) "208.67.222.222" "208.67.220.220" [ add-dns-server ] bi@ ; : get-subdomain-metadata ( -- assoc ) init-dns-servers bbb-domain dns-TXT-query TXT-message>strings H{ } [ first dup meta re-contains? [ swap [ meta "" re-replace ":" split [ second ] [ first ] bi ] dip ?set-at ] [ drop ] if ] reduce ; : get-subdomains ( -- seq ) get-subdomain-metadata keys ; : post-domain-records-url ( -- url ) do-api-base-url URL" domains/bonerbonerboner.com/records" derive-url ; : add-authorization ( request -- request' ) "Bearer " do-key append "Authorization" set-header ; : ( data url -- post-request ) [ ] dip "POST" swap >>post-data ; : create-subdomain-meta ( name color -- ) 2array ":" join "meta=" prepend 'H{ { "data" _ } { "name" "@" } { "type" "TXT" } } post-domain-records-url add-authorization http-request 2drop ;