From 8437bf5033d42d311a47c36fff9fc011989bab27 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 12 Feb 2014 19:50:10 -0800 Subject: [PATCH] oauth: Generate the oauth signature base string the way twitter does it. --- extra/oauth/oauth.factor | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/extra/oauth/oauth.factor b/extra/oauth/oauth.factor index b0a358dcf0..07fd29e752 100644 --- a/extra/oauth/oauth.factor +++ b/extra/oauth/oauth.factor @@ -3,7 +3,7 @@ USING: accessors assocs base64 calendar checksums.hmac checksums.sha combinators fry http http.client kernel locals make math namespaces present random sequences sorting strings -urls urls.encoding ; +urls urls.encoding urls.private checksums ; IN: oauth SYMBOL: consumer-token @@ -26,13 +26,20 @@ nonce ; new consumer-token get >>consumer-token now timestamp>unix-time >integer >>timestamp - random-32 >>nonce ; inline + 16 random-bytes hex-string >>nonce ; inline + +: present-base-url ( url -- string ) + [ + [ unparse-protocol ] + [ path>> url-encode % ] bi + ] "" make ; :: signature-base-string ( url request-method params -- string ) [ request-method % "&" % - url present url-encode-full % "&" % + url present-base-url url-encode-full % "&" % params assoc>query url-encode-full % + url query>> [ assoc>query "&" prepend url-encode-full % ] when* ] "" make ; : hmac-key ( consumer-secret token-secret -- key )