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 ;
|