From 5bf4815fc767ba40097dd85afbfb0ccd4c40948f Mon Sep 17 00:00:00 2001 From: Ted Blackman Date: Fri, 20 Oct 2017 14:13:34 -0700 Subject: [PATCH] fixed asana --- gen/hood/init-oauth2.hoon | 8 ++++---- lib/oauth1.hoon | 5 ++++- lib/oauth2.hoon | 38 +++++++++++++++++++++++--------------- sec/com/asana.hoon | 2 +- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/gen/hood/init-oauth2.hoon b/gen/hood/init-oauth2.hoon index 4ea88f9712..180014ccd9 100644 --- a/gen/hood/init-oauth2.hoon +++ b/gen/hood/init-oauth2.hoon @@ -13,13 +13,13 @@ {arg/$@($~ {dom/path $~})} $~ == -^- (sole-result {$write-sec-atom p/host q/@}) +^- (sole-result {$write-sec-atom p/host:eyre q/@}) =- ?~ arg - (fun.q.q [%& dom.arg]) %+ sole-lo [%& %oauth-hostname "api hostname: https://"] -%+ sole-go thos:urlp -|= hot/host +%+ sole-go thos:de-purl:html +|= hot/host:eyre ?: ?=($| -.hot) ~|(%ips-unsupported !!) %+ sole-lo @@ -31,4 +31,4 @@ %+ sole-go (boss 256 (star prn)) |= cis/@t %+ sole-so %write-sec-atom :: XX typed pair -[hot (of-wain cid cis ~)] +[hot (of-wain:format cid cis ~)] diff --git a/lib/oauth1.hoon b/lib/oauth1.hoon index a57cb30019..6811a0c11a 100644 --- a/lib/oauth1.hoon +++ b/lib/oauth1.hoon @@ -26,7 +26,10 @@ :: ++ joint :: between every pair |= {a/tape b/wall} ^- tape - ?~(b b |-(?~(t.b i.b :(weld i.b a $(b t.b))))) + ?~ b b + |- ^- tape + ?~ t.b i.b + :(weld i.b a $(b t.b))))) :: ++ join-urle |=(a/(list tape) (joint "&" (turn a urle))) :: query string in oauth1 'k1="v1", k2="v2"' form diff --git a/lib/oauth2.hoon b/lib/oauth2.hoon index 8ddeefacaf..0d2503cca7 100644 --- a/lib/oauth2.hoon +++ b/lib/oauth2.hoon @@ -18,7 +18,7 @@ ++ post-quay |= {a/purl b/quay} ^- hiss =. b (quay:hep-to-cab b) - =- [a %post - ?~(b ~ (some (as-octt +:(tail:earn b))))] + =- [a %post - ?~(b ~ (some (as-octt +:(tail:en-purl b))))] (my content-type+['application/x-www-form-urlencoded']~ ~) :: ++ mean-wall !. @@ -28,7 +28,7 @@ :: ++ bad-response |=(a/@u ?:(=(2 (div a 100)) | ~&(bad-httr+a &))) ++ grab-json - |* {a/httr b/fist:jo} + |* {a/httr b/fist:dejs-soft:format} ~| bad-json+r.a ~| (de-json q:(need r.a)) (need (;~(biff de-json b) q:(need r.a))) @@ -61,10 +61,10 @@ :::: :: =+ state-usr=| -|_ {(bale keys) tok/token} +|_ {(bale:eyre keys) tok/token} ++ client-id cid:decode-keys ++ client-secret cis:decode-keys -++ decode-keys :: XX from bale w/ typed %jael +++ decode-keys :: XX from bale:eyre w/ typed %jael ^- {cid/@t cis/@t $~} ?. =(~ `@`key) ~| %oauth-bad-keys @@ -79,7 +79,7 @@ ++ auth-url |= {scopes/(list @t) url/$@(@t purl)} ^- purl ~& [%oauth-warning "Make sure this urbit ". - "is running on {(earn our-host `~ ~)}"] + "is running on {(en-purl our-host `~ ~)}"] %+ add-query:interpolate url %- quay:hep-to-cab :~ state+?.(state-usr '' (pack usr /'')) @@ -88,9 +88,15 @@ scope+(join ' ' scopes) == :: +:: XX duplicated from eyre +++ pack :: light path encoding + |= {a/term b/path} ^- knot + %+ rap 3 :- (wack a) + (turn b |=(c/knot (cat 3 '_' (wack c)))) +:: ++ our-host .^(hart %e /(scot %p our)/host/fake) ++ redirect-uri - %- crip %- earn + %- crip %- en-purl %^ into-url:interpolate 'https://our-host/~/ac/:domain/:user/in' `our-host :~ domain+(join '.' (flop dom)) @@ -114,15 +120,17 @@ :: ++ grab-token |= a/httr ^- axs/@t - (grab-json a (ot 'access_token'^so ~):jo) + (grab-json a (ot 'access_token'^so ~):dejs-soft:format) :: ++ grab-expiring-token |= a/httr ^- {axs/@t exp/@u} - (grab-json a (ot 'access_token'^so 'expires_in'^ni ~):jo) + (grab-json a (ot 'access_token'^so 'expires_in'^ni ~):dejs-soft:format) :: ++ grab-both-tokens |= a/httr ^- {axs/@t exp/@u ref/@t} - (grab-json a (ot 'access_token'^so 'expires_in'^ni 'refresh_token'^so ~):jo) + %+ grab-json a + =, dejs-soft:format + (ot 'access_token'^so 'expires_in'^ni 'refresh_token'^so ~) :: ++ auth ?~ tok ~|(%no-bearer-token !!) @@ -135,14 +143,14 @@ |= request/{url/purl meth hed/math (unit octs)} ^+ request :: =. p.url.request [| `6.000 [%& /localhost]] :: for use with unix nc - ~& add-auth-header+(earn url.request) + ~& add-auth-header+(en-purl url.request) request(hed (~(add ja hed.request) %authorization header:auth)) :: ++ add-auth-query |= {token-name/cord request/{url/purl meth math (unit octs)}} ^+ request :: =. p.url.request [| `6.000 [%& /localhost]] :: for use with unix nc - ~& add-auth-query+(earn url.request) + ~& add-auth-query+(en-purl url.request) request(r.url [[token-name query:auth] r.url.request]) :: ++ re @@ -272,7 +280,7 @@ :: :: :: :::: :: :: -:: |_ {bal/(bale keys:oauth2) tok/token:oauth2} +:: |_ {bal/(bale:eyre keys:oauth2) tok/token:oauth2} :: ++ aut (~(standard oauth2 bal tok) . |=(tok/token:oauth2 +>(tok tok))) :: ++ out :: %+ out-add-header:aut scope=/full @@ -296,7 +304,7 @@ :: :: :: :::: :: :: -:: |_ {bal/(bale keys:oauth2) tok/token:oauth2} +:: |_ {bal/(bale:eyre keys:oauth2) tok/token:oauth2} :: ++ aut ~(. oauth2 bal tok) :: ++ out :: add header :: =+ aut @@ -333,7 +341,7 @@ :: :: :: :::: :: :: -:: |_ {bal/(bale keys:oauth2) tok/token:oauth2 ref/refresh:oauth2} +:: |_ {bal/(bale:eyre keys:oauth2) tok/token:oauth2 ref/refresh:oauth2} :: ++ aut :: %^ ~(standard-refreshing oauth2 bal tok) . ref :: |=({tok/token ref/refresh}:oauth2 +>(tok tok, ref ref)) @@ -360,7 +368,7 @@ :: :: :: :::: :: :: -:: |_ {bal/(bale keys:oauth2) axs/token:oauth2 ref/refresh:oauth2} +:: |_ {bal/(bale:eyre keys:oauth2) axs/token:oauth2 ref/refresh:oauth2} :: ++ aut ~(. oauth2 bal axs) :: ++ exchange-url 'https://my-api.com/access_token' :: ++ out :: refresh or add header diff --git a/sec/com/asana.hoon b/sec/com/asana.hoon index 1eaab9177f..b90135900f 100644 --- a/sec/com/asana.hoon +++ b/sec/com/asana.hoon @@ -13,7 +13,7 @@ :: :::: :: -|_ {bal/(bale keys:oauth2) tok/token:oauth2} +|_ {bal/(bale:eyre keys:oauth2) tok/token:oauth2} :: ++aut is a "standard oauth2" core, which implements the :: most common handling of oauth2 semantics. see lib/oauth2 for more details, :: and examples at the bottom of the file.