Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

OAuth Consumer support for Clojure

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 src
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.markdown
Octocat-spinner-32 build.xml
Octocat-spinner-32 project.clj
Octocat-spinner-32 todo.txt
README.markdown

OAuth support for Clojure

clj-oauth provides OAuth Client and Server support for Clojure programs.

The client part of the library depends on Richard Newman's clj-apache-http which includes Apache's HTTP components.

The server support makes it simple to add oauth support to any ring based web applications such as Compojure.

Building

lein jar

Client Example

(require ['oauth.client :as 'oauth])

;; Create a Consumer, in this case one to access Twitter.
;; Register an application at Twitter (http://twitter.com/oauth_clients/new)
;; to obtain a Consumer token and token secret.
(def consumer (oauth/make-consumer <consumer-token>
                                   <consumer-token-secret>
                                   "http://twitter.com/oauth/request_token"
                                   "http://twitter.com/oauth/access_token"
                                   "http://twitter.com/oauth/authorize"
                                   :hmac-sha1))

;; Fetch a request token that a OAuth User may authorize
(def request-token (:oauth_token (oauth/request-token consumer)))

;; 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.
;; 
;; If you are using OAuth with a desktop application, a callback URI
;; is not required. 
(oauth/user-approval-uri consumer 
                         request-token
                         <callback-uri>)

;; 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 
                                               request-token
                                               <verifier>))

;; 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 credentials (oauth/credentials consumer
                                    (:oauth_token access-token-response)
                                    (:oauth_token_secret access-token-response)
                                    :POST
                                    "http://twitter.com/statuses/update.json"
                                    {:status "posting from #clojure with #oauth")))

;; Post with clj-apache-http...
(http/post "http://twitter.com/statuses/update.json" 
           :query (merge credentials 
                         {:status "posting from #clojure with #oauth"})
           :parameters (http/map->params {:use-expect-continue false})))

;; ...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"))

Server support

The server support is implemented as ring middleware. It depends on params middleware already having been run upstream.

Authors

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

Designed and developed by Matt Revelle of Lightpost Software.

Contributions from Richard Newman.

Server implementation by Pelle Braendgaard of Stake Ventures

Something went wrong with that request. Please try again.