OAuth Consumer support for Clojure
Switch branches/tags
Nothing to show
Latest commit dd8a05a Dec 19, 2017 @mattrepl mattrepl Merge pull request #53 from eraf2135/master
Update to refresh-token function


OAuth support for Clojure

clj-oauth provides OAuth Client support for Clojure programs.


Add [clj-oauth "1.5.5"] as a Leiningen dependency to get the latest release.


lein jar

Running Tests

Create a file test/oauth/twitter_keys.clj that contains the consumer key and secret.

(def consumer-key "blah")
(def consumer-secret "itsasecret")

lein test

Client Example

    (require ['oauth.client :as 'oauth])
    ;; Create a Consumer, in this case one to access Twitter.
    ;; Register an application at Twitter (https://dev.twitter.com/apps/new)
    ;; to obtain a Consumer token and token secret.
    (def consumer (oauth/make-consumer <consumer-token>

    ;; Fetch a request token that a OAuth User may authorize
    ;; If you are using OAuth with a desktop application, a callback URI
    ;; is not required. 
    (def request-token (oauth/request-token consumer <callback-uri>))

    ;; Send the User to this URI for authorization, they will be able 
    ;; to choose the level of access to grant the application and will
    ;; then be redirected to the callback URI provided with the
    ;; request-token.
    (oauth/user-approval-uri consumer 
                             (:oauth_token request-token))

    ;; Assuming the User has approved the request token, trade it for an access token.
    ;; The access token will then be used when accessing protected resources for the User.
    ;; If the OAuth Service Provider provides a verifier, it should be included in the
    ;; request for the access token.  See [Section 6.2.3](http://oauth.net/core/1.0a#rfc.section.6.2.3) of the OAuth specification
    ;; for more information.
    (def access-token-response (oauth/access-token consumer 

    ;; Each request to a protected resource must be signed individually.  The
    ;; credentials are returned as a map of all OAuth parameters that must be
    ;; included with the request as either query parameters or in an
    ;; Authorization HTTP header.
    (def user-params {:status "posting from #clojure with #oauth"})
    (def credentials (oauth/credentials consumer
                                        (:oauth_token access-token-response)
                                        (:oauth_token_secret access-token-response)

    ;; Post with clj-http...
    (http/post "https://api.twitter.com/1.1/statuses/update.json" 
               {:query-params (merge credentials user-params)}
    ;; ...or with clojure-twitter (http://github.com/mattrepl/clojure-twitter)
    (require 'twitter)
    (twitter/with-oauth consumer 
                        (:oauth_token access-token-response)            
                        (:oauth_token_secret access-token-response)
                        (twitter/update-status "using clj-oauth with clojure-twitter"))


Development funded by LikeStream LLC (Don Jackson and Shirish Andhare), see http://www.likestream.org/opensource.html.

Designed and developed by Matt Revelle.

Contributions from Richard Newman.