mirror of
https://github.com/urbit/shrub.git
synced 2024-12-01 22:55:03 +03:00
1eeca16f1a
!! crashes the thread, so dojo prints a stack trace. An explicit failure lets you give a custom error message.
62 lines
1.9 KiB
Plaintext
62 lines
1.9 KiB
Plaintext
/- spider, dns
|
|
/+ strandio, libdns=dns
|
|
=, strand=strand:spider
|
|
^- thread:spider
|
|
|= arg=vase
|
|
|^
|
|
=/ m (strand ,vase)
|
|
^- form:m
|
|
=+ !< [adr=address:dns ~] arg
|
|
::
|
|
;< our=ship bind:m get-our:strandio
|
|
=/ rac (clan:title our)
|
|
?. ?=(?(%king %duke) rac)
|
|
%+ strand-fail:strandio %ship-type-fail
|
|
[>"can only set DNS for planets and stars"< ~]
|
|
::
|
|
?: (reserved:eyre if.adr)
|
|
%+ strand-fail:strandio %reserved-address
|
|
[>"ip address {<if.adr>} is reserved"< ~]
|
|
;< ~ bind:m (request-by-ip if.adr)
|
|
;< ~ bind:m take-fact
|
|
(pure:m *vase)
|
|
::
|
|
++ request-by-ip
|
|
|= if=@if
|
|
=/ m (strand ,~)
|
|
^- form:m
|
|
=/ collector-app `dock`[~zod %dns-collector]
|
|
;< good=? bind:m (self-check-http:libdns |+if 2)
|
|
?. good
|
|
%+ strand-fail:strandio %bail-early-self-check
|
|
[>"couldn't access ship on port 80"< ~]
|
|
;< ~ bind:m (poke:strandio collector-app %dns-address !>([%if if]))
|
|
=/ msg=cord
|
|
(cat 3 'request for DNS sent to ' (scot %p p:collector-app))
|
|
;< ~ bind:m (app-message:strandio %dns msg ~)
|
|
;< our=@p bind:m get-our:strandio
|
|
;< ~ bind:m (watch:strandio /sub collector-app /(scot %p our))
|
|
=/ msg=cord
|
|
(cat 3 'awaiting response from ' (scot %p p:collector-app))
|
|
;< ~ bind:m (app-message:strandio %dns msg ~)
|
|
(pure:m ~)
|
|
::
|
|
++ take-fact
|
|
=/ m (strand ,~)
|
|
^- form:m
|
|
;< our=ship bind:m get-our:strandio
|
|
;< =cage bind:m (take-fact:strandio /(scot %p our))
|
|
?> ?=(%dns-binding p.cage)
|
|
=/ =binding:dns !<(binding:dns q.cage)
|
|
;< good=? bind:m (turf-confirm-install:libdns turf.binding)
|
|
=/ msg=(pair cord tang)
|
|
?: good
|
|
[(cat 3 'confirmed access via ' (en-turf:html turf.binding)) ~]
|
|
:- (cat 3 'unable to access via ' (en-turf:html turf.binding))
|
|
:~ leaf+"XX check via nslookup"
|
|
leaf+"XX confirm port 80"
|
|
==
|
|
;< ~ bind:m (app-message:strandio %dns msg)
|
|
(pure:m ~)
|
|
--
|