Clojure – integração com caixa de depósito

Obter o token de acesso e o segredo de acesso

(defn user-authorized? []
(loop [_ (println "Have you authorized the app to access your data?")
user
-input (read-line)]
(if (= user-input "yes")
'true
(recur nil read-line))

)

)


(defn open-session [consumer-key consumer-secret]

(WebAuthSession. (AppKeyPair. consumer-key consumer-secret) (Session$AccessType/DROPBOX))

)


(defn get-access-keys [user-name]

(let

[session (open-session consumerkey consumersecret)

auth-info (.getAuthInfo session)

]

(println "access this link and provide permission: " (.url auth-info))

(when (user-authorized?)

(. session (retrieveWebAccessToken (.requestTokenPair auth-info)))

(let [key-pairs (. session (getAccessTokenPair))]

[(.key key-pairs) (.secret key-pairs)]

)

)

)

)


(defn get-access [user-name]

(let [[access-token access-key] (get-access-keys user-name)]

{:id user-name :access-token access-token :access-secret access-key}

)

)

Coletar estatísticas de usuários na caixa de depósito

(require '(com.cloud [oauth :as oauth]))
(defn get-stats [user]

(oauth/http-get "https://api.dropbox.com/1/account/info" (:access-token user) (:access-secret user) {})

)

arquivo oauth

(ns com.cloud.oauth)

(import '(javax.crypto.spec SecretKeySpec))
(import '
(oauth.signpost.commonshttp CommonsHttpOAuthConsumer ))
(import '(oauth.signpost.basic DefaultOAuthConsumer))
(import '
(org.apache.http.client.methods HttpGet HttpPost))
(import '(java.net HttpURLConnection URL))
(import '
(org.apache.http HttpRequest))
(import '(org.apache.http.impl.client DefaultHttpClient BasicResponseHandler))

(import '
(javax.xml.crypto.dsig SignatureMethod))

(defn http-get [url token secret params]
(let [consumer (CommonsHttpOAuthConsumer. consumerkey consumersecret) http-client (new DefaultHttpClient) get-request (new HttpGet url)]
(. consumer setTokenWithSecret token secret)
(. consumer sign get-request)
(. http-client execute get-request (new BasicResponseHandler))
)
)