Boots with %light instead of %eyre. Stubs for system cofiguration events.

This commit is contained in:
Elliot Glaysher 2018-09-28 11:24:41 -07:00
parent 041bd29aab
commit a15220a2e4
6 changed files with 232 additions and 151 deletions

View File

@ -53,6 +53,7 @@
[%g /vane/gall]
[%e /vane/eyre]
[%j /vane/jael]
[%l /vane/light]
==
|- ^+ all
?~ vay all

View File

@ -82,7 +82,7 @@
?: ?=($pawn myr)
[[%base %collections] [%base %hall] [%base %talk] [%base %dojo] ~]
:~ [%home %collections]
[%home %acme]
:: [%home %acme]
[%home %dns]
[%home %dojo]
[%home %hall]

View File

@ -180,6 +180,7 @@
[%e /vane/eyre]
[%f /vane/ford]
[%g /vane/gall]
[%l /vane/light]
[%j /vane/jael]
==
|= {p/@tas q/path}
@ -206,6 +207,7 @@
[%e %eyre]
[%f %ford]
[%g %gall]
[%l %light]
[%j %jael]
==
|= {p/@tas q/@tas}

View File

@ -173,6 +173,7 @@
++ slur-e ~/(%slur-e |=({gat/vase hil/mill} =+(%e (slur gat hil))))
++ slur-f ~/(%slur-f |=({gat/vase hil/mill} =+(%f (slur gat hil))))
++ slur-g ~/(%slur-g |=({gat/vase hil/mill} =+(%g (slur gat hil))))
++ slur-l ~/(%slur-l |=({gat/vase hil/mill} =+(%l (slur gat hil))))
++ slur-j ~/(%slur-j |=({gat/vase hil/mill} =+(%j (slur gat hil))))
++ slur-z ~/(%slur-z |=({gat/vase hil/mill} =+(%z (slur gat hil))))
::
@ -187,6 +188,7 @@
$e (slur-e gat hil)
$f (slur-f gat hil)
$g (slur-g gat hil)
$l (slur-l gat hil)
$j (slur-j gat hil)
==
::
@ -379,7 +381,7 @@
{@ $newt *} %a
{@ $sync *} %c
{@ $term *} %d
{@ $http *} %e
{@ $http *} %l
{@ $behn *} %b
==
::

View File

@ -2,159 +2,11 @@
:: lighter than eyre
::
|= pit=vase
=, light
:: internal data structures
::
=> =~
::
|%
--
:: TODO: this becomes the +eyre interface arm in zuse
::
|%
+| %vane-interface
++ able
|%
++ gift
$% :: http-response: response from urbit to earth
::
[%http-response =raw-http-response]
:: response to a %connect or %serve
::
:: :accepted is whether :binding was valid. Duplicate bindings are not allowed.
::
[%bound accepted=? =binding]
==
::
++ task
$% :: initializes ourselves with an identity
::
:: TODO: Remove this once we single home.
::
[%init our=@p]
:: starts handling an inbound http request
::
[%inbound-request secure=? =address =http-request]
:: connects a binding to an app
::
[%connect =binding app=term]
:: connects a binding to a generator
::
[%serve =binding generator=[=desk path=(list @t)] arguments=*]
:: disconnects a binding
::
:: This must be called with the same duct that made the binding in
:: the first place.
::
[%disconnect =binding]
==
--
::
+| %bindings
:: +binding: A rule to match a path.
::
:: A +binding is a system unique mapping for a path to match. A +binding
:: must be system unique because we don't want two handlers for a path;
:: what happens if there are two different actions for [~ /]?
::
+$ binding
$: :: site: the site to match.
::
:: A ~ will match the Urbit's identity site (your.urbit.org). Any
:: other value will match a domain literal.
::
site=(unit @t)
:: path: matches this prefix path
::
:: /~myapp will match /~myapp or /~myapp/longer/path
::
path=(list @t)
==
::
+| %http
:: +header-list: an ordered list of http headers
::
+$ header-list
(list [key=@t value=@t])
:: +http-method: exhaustive list of http verbs
::
+$ http-method
$? _'CONNECT'
_'DELETE'
_'GET'
_'HEAD'
_'OPTIONS'
_'POST'
_'PUT'
_'TRACE'
==
:: +http-request: a single http-request
::
+$ http-request
$: :: http-method:
::
method=http-method
:: url: the url requested
::
:: The url is not escaped. There is no escape.
::
url=@t
:: header-list: headers to pass with this request
::
=header-list
:: body: optionally, data to send with this request
::
body=(unit octs)
==
:: +raw-http-response: http-response to sent to earth
::
:: Urbit treats Earth's HTTP servers as pipes, where Urbit sends one or
:: more %http-response replies on the wire. The first of these will
:: always be a %start or an %error, and the last will always be %error
:: or will have :complete set to %.y to finish the connection.
::
:: Calculation of control headers such as 'Content-Length' or
:: 'Transfer-Encoding' should be performed at a higher level; this structure
:: is merely for what gets sent to Earth.
::
+$ raw-http-response
$% :: %start: the first packet in a response
::
$: %start
:: status: http status code
::
status-code=@ud
:: headers: http headers
::
headers=header-list
:: data: data to pass to the pipe
::
data=(unit octs)
:: whether this completes the request
::
complete=?
==
:: %continue: every subsequent packet
::
$: %continue
:: data: data to pass to the pipe
::
data=(unit octs)
:: complete: whether this completes the request
::
complete=?
==
:: %cancel: whether the connection should terminate unsuccessfully
::
[%cancel ~]
==
:: +address: client IP address
::
+$ address
$% [%ipv4 @if]
[%ipv6 @is]
:: [%ames @p]
==
--
:: internal data structures that won't go in zuse
::
|%
@ -740,6 +592,7 @@
=/ task=task:able
?. ?=(%soft -.wrapped-task)
wrapped-task
~| [%call p.wrapped-task]
((hard task:able) p.wrapped-task)
::
?- -.task
@ -754,6 +607,22 @@
:~ [[~ /~/login] duct [%login-handler ~]]
==
[~ light-gate]
:: %born: new unix process
::
%born
::
~& [%todo-handle-born p.task]
:: hand back a default configuration for now
::
[[duct %give %form *http-config]~ light-gate]
::
:: %live: no idea what this is for
::
%live
::
~& [%todo-live p.task q.task]
::
[~ light-gate]
::
:: %inbound-request: handles an inbound http request
::
@ -813,4 +682,20 @@
--
::
++ light-gate ..$
:: +load: migrate old state to new state (called on vane reload)
::
++ load
|= old=axle
^+ ..^$
::
~! %loading
..^$(ax old)
:: +stay: produce current state
::
++ stay `axle`ax
:: +scry: request a path in the urbit namespace
::
++ scry
|= *
[~ ~]
--

View File

@ -1,3 +1,4 @@
!:
:: :: /van/zuse
:: :: %reference/1
:: %zuse: arvo library.
@ -2177,6 +2178,196 @@
++ safe (tree rite) :: rights set
-- :: rights
-- :: jael
::
::::
::
++ light ^?
|%
+| %vane-interface
++ able
|%
++ gift
$% :: form: configures the http server
::
:: TODO: We need to actually return a (map (unit @t) http-config)
:: so we can apply configurations on a per-site basis
::
:: TODO: %form is a terrible name, but it's what vere currently
:: accepts. Rename it.
::
[%form =http-config]
:: http-response: response from urbit to earth
::
[%http-response =raw-http-response]
:: response to a %connect or %serve
::
:: :accepted is whether :binding was valid. Duplicate bindings are
:: not allowed.
::
[%bound accepted=? =binding]
==
::
++ task
$% :: initializes ourselves with an identity
::
:: TODO: Remove this once we single home.
::
[%init our=@p]
:: new unix process (?)
::
[%born p=(list host)]
:: set http ports (?)
::
[%live p=@ud q=(unit @ud)]
:: starts handling an inbound http request
::
[%inbound-request secure=? =address =http-request]
:: connects a binding to an app
::
[%connect =binding app=term]
:: connects a binding to a generator
::
[%serve =binding generator=[=desk path=(list @t)] arguments=*]
:: disconnects a binding
::
:: This must be called with the same duct that made the binding in
:: the first place.
::
[%disconnect =binding]
==
--
::
+| %bindings
:: +binding: A rule to match a path.
::
:: A +binding is a system unique mapping for a path to match. A +binding
:: must be system unique because we don't want two handlers for a path;
:: what happens if there are two different actions for [~ /]?
::
+$ binding
$: :: site: the site to match.
::
:: A ~ will match the Urbit's identity site (your.urbit.org). Any
:: other value will match a domain literal.
::
site=(unit @t)
:: path: matches this prefix path
::
:: /~myapp will match /~myapp or /~myapp/longer/path
::
path=(list @t)
==
:: %config: http configuration
::
+| %config
:: +host: http host
::
+$ host
(each (list @t) @if)
:: +http-config: full http-server configuration
::
+$ http-config
$: :: secure: PEM-encoded RSA private key and cert or cert chain
::
secure=(unit [key=wain cert=wain])
:: proxy: reverse TCP proxy HTTP(s)
::
proxy=?
:: log: keep HTTP(s) access logs
::
log=?
:: redirect: send 301 redirects to upgrade HTTP to HTTPS
::
:: Note: requires certificate.
::
redirect=?
==
::
+| %http
:: +header-list: an ordered list of http headers
::
+$ header-list
(list [key=@t value=@t])
:: +http-method: exhaustive list of http verbs
::
+$ http-method
$? _'CONNECT'
_'DELETE'
_'GET'
_'HEAD'
_'OPTIONS'
_'POST'
_'PUT'
_'TRACE'
==
:: +http-request: a single http-request
::
+$ http-request
$: :: http-method:
::
method=http-method
:: url: the url requested
::
:: The url is not escaped. There is no escape.
::
url=@t
:: header-list: headers to pass with this request
::
=header-list
:: body: optionally, data to send with this request
::
body=(unit octs)
==
:: +raw-http-response: http-response to sent to earth
::
:: Urbit treats Earth's HTTP servers as pipes, where Urbit sends one or
:: more %http-response replies on the wire. The first of these will
:: always be a %start or an %error, and the last will always be %error
:: or will have :complete set to %.y to finish the connection.
::
:: Calculation of control headers such as 'Content-Length' or
:: 'Transfer-Encoding' should be performed at a higher level; this structure
:: is merely for what gets sent to Earth.
::
+$ raw-http-response
$% :: %start: the first packet in a response
::
$: %start
:: status: http status code
::
status-code=@ud
:: headers: http headers
::
headers=header-list
:: data: data to pass to the pipe
::
data=(unit octs)
:: whether this completes the request
::
complete=?
==
:: %continue: every subsequent packet
::
$: %continue
:: data: data to pass to the pipe
::
data=(unit octs)
:: complete: whether this completes the request
::
complete=?
==
:: %cancel: whether the connection should terminate unsuccessfully
::
[%cancel ~]
==
:: +address: client IP address
::
+$ address
$% [%ipv4 @if]
[%ipv6 @is]
:: [%ames @p]
==
--
:: ::::
:::: ++xmas :: (1i) new network
:: ::::