factor-work/bonerbonerboner/dns/dns.factor

52 lines
1.4 KiB
Factor
Raw Normal View History

2023-09-06 15:04:55 -04:00
USING: kernel regexp dns hashtables sequences splitting assocs urls arrays http http.client json json.http io.sockets.secure accessors environment ;
2023-06-16 21:37:31 -04:00
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/"
2023-09-06 15:04:55 -04:00
: 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@ ;
2023-06-16 21:37:31 -04:00
: get-subdomain-metadata ( -- assoc )
2023-09-06 15:04:55 -04:00
init-dns-servers
2023-06-16 21:37:31 -04:00
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 )
2023-09-06 15:20:26 -04:00
get-subdomain-metadata keys ;
2023-06-16 21:37:31 -04:00
: 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 ;
: <json-post-request> ( data url -- post-request )
[ <json-post-data> ] dip
"POST" <json-request> swap >>post-data ;
: create-subdomain-meta ( name color -- )
2array ":" join "meta=" prepend
'H{
{ "data" _ }
{ "name" "@" }
{ "type" "TXT" }
}
post-domain-records-url
<json-post-request>
add-authorization
http-request 2drop ;