From a60c11ae832cbe60ebc6f4321e01c94ce1a58c19 Mon Sep 17 00:00:00 2001 From: Dmitri Sotnikov Date: Wed, 15 Jun 2016 20:38:28 -0400 Subject: [PATCH 1/5] added Twitter OAuth integration (#54) --- project.clj | 1 + src/clj/kata/routes/home.clj | 32 ++++++++++++++++++++--- src/clj/kata/twitter_oauth.clj | 47 ++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 src/clj/kata/twitter_oauth.clj diff --git a/project.clj b/project.clj index ac3a46a..6624b25 100644 --- a/project.clj +++ b/project.clj @@ -34,6 +34,7 @@ [metosin/compojure-api "1.0.2"] [luminus-log4j "0.1.3"] [clojail "1.0.6"] + [clj-oauth "1.5.4"] ;[re-com "0.8.0"] ] diff --git a/src/clj/kata/routes/home.clj b/src/clj/kata/routes/home.clj index 3eac842..2d80fd8 100644 --- a/src/clj/kata/routes/home.clj +++ b/src/clj/kata/routes/home.clj @@ -1,13 +1,39 @@ (ns kata.routes.home (:require [kata.layout :as layout] [compojure.core :refer [defroutes GET]] - [ring.util.http-response :refer [ok]] - [clojure.java.io :as io])) + [ring.util.http-response :refer [ok found]] + [clojure.java.io :as io] + [kata.twitter-oauth :as tw] + [clojure.tools.logging :as log])) (defn home-page [] (layout/render "home.html")) +(defn twitter-init + "Initiates the Twitter OAuth" + [request] + (-> (tw/fetch-request-token request) + :oauth_token + tw/auth-redirect-uri + found)) + +(defn twitter-callback + "Handles the callback from Twitter." + [request_token {:keys [session]}] + ; oauth request was denied by user + (if (:denied request_token) + (-> (found "/") + (assoc :flash {:denied true})) + ; fetch the request token and do anything else you wanna do if not denied. + (let [{:keys [user_id screen_name]} (tw/fetch-access-token request_token)] + (log/info "successfully authenticated as" user_id screen_name) + (-> (found "/") + (assoc :session + (assoc session :user-id user_id :screen-name screen_name)))))) + (defroutes home-routes (GET "/" [] (home-page)) - (GET "/docs" [] (ok (-> "docs/docs.md" io/resource slurp)))) + (GET "/docs" [] (ok (-> "docs/docs.md" io/resource slurp))) + (GET "/oauth/twitter-init" req (twitter-init req)) + (GET "/oauth/twitter-callback" [& req_token :as req] (twitter-callback req_token req))) diff --git a/src/clj/kata/twitter_oauth.clj b/src/clj/kata/twitter_oauth.clj new file mode 100644 index 0000000..6f2d81b --- /dev/null +++ b/src/clj/kata/twitter_oauth.clj @@ -0,0 +1,47 @@ +(ns kata.twitter-oauth + (:require [oauth.client :as oauth] + [kata.config :refer [env]] + [mount.core :refer [defstate]] + [clojure.tools.logging :as log])) + + +;;have to set Callback URL in Twitter app settings + +(def request-token-uri + "https://api.twitter.com/oauth/request_token") + +(def access-token-uri + "https://api.twitter.com/oauth/access_token") + +(def authorize-uri + "https://api.twitter.com/oauth/authenticate") + +(defstate consumer + :start + (oauth/make-consumer (env :twitter-consumer-key) + (env :twitter-consumer-secret) + request-token-uri + access-token-uri + authorize-uri + :hmac-sha1)) + +(defn oauth-callback-uri + "Generates the twitter oauth request callback URI" + [{:keys [headers]}] + (str (or (headers "x-forwarded-proto") "https") "://" (headers "host") "/oauth/twitter-callback")) + +(defn fetch-request-token + "Fetches a request token." + [request] + (let [callback-uri (oauth-callback-uri request)] + (log/info "Fetching request token from twitter using callback-uri" callback-uri) + (oauth/request-token consumer (oauth-callback-uri request)))) + +(defn fetch-access-token + [request_token] + (oauth/access-token consumer request_token (:oauth_verifier request_token))) + +(defn auth-redirect-uri + "Gets the URI the user should be redirected to when authenticating with twitter." + [request-token] + (str (oauth/user-approval-uri consumer request-token))) From 6bb686b2a39d732843456a2211bcf5863700d4c8 Mon Sep 17 00:00:00 2001 From: nikolap Date: Wed, 15 Jun 2016 20:41:20 -0400 Subject: [PATCH 2/5] Minor fixes --- src/cljs/kata/components/table.cljs | 3 ++- src/cljs/kata/pages/submit_problem.cljs | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/cljs/kata/components/table.cljs b/src/cljs/kata/components/table.cljs index b46f8e1..9f65eb2 100644 --- a/src/cljs/kata/components/table.cljs +++ b/src/cljs/kata/components/table.cljs @@ -1,5 +1,6 @@ (ns kata.components.table - (:require [reagent.core :as r])) + (:require [reagent.core :as r] + [kata.util :as util])) (defn filter-problems [search-text problems] (filter diff --git a/src/cljs/kata/pages/submit_problem.cljs b/src/cljs/kata/pages/submit_problem.cljs index 5dff37e..b1b9aac 100644 --- a/src/cljs/kata/pages/submit_problem.cljs +++ b/src/cljs/kata/pages/submit_problem.cljs @@ -25,7 +25,7 @@ (defn text-field ([form-data field-name] - (text-field form-data field-name (name field-name))) + [text-field form-data field-name (name field-name)]) ([form-data field-name label] [:div.form-group {:class (if (empty? (field-name @form-data)) "has-error")} @@ -37,7 +37,7 @@ (defn textarea ([form-data field-name] - (textarea form-data field-name (name field-name))) + [textarea form-data field-name (name field-name)]) ([form-data field-name label] [:div.form-group {:class (if (empty? (field-name @form-data)) "has-error")} @@ -55,9 +55,9 @@ (fn [] [:div.row>div.col-md-12 [:h2 "Submit a problem"] - (text-field form-data :title) - (text-field form-data :submitter "your name") - (textarea form-data :description) + [text-field form-data :title] + [text-field form-data :submitter "your name"] + [textarea form-data :description] [:div.form-group [:div.row>div.col-md-12 [editor cm form-data #(swap! form-data assoc :code (.getValue %))]]] From 3e0b37f3082fa87b715191477009f60a683b9f6e Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 29 Jun 2016 19:37:14 -0400 Subject: [PATCH 3/5] Twitter (#56) * added Twitter OAuth integration * make twitter callback uri use http in dev --- project.clj | 1 + src/clj/kata/twitter_oauth.clj | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 6624b25..d107fe6 100644 --- a/project.clj +++ b/project.clj @@ -97,6 +97,7 @@ [lein-figwheel "0.5.2"] [lein-doo "0.1.6"] [org.clojure/clojurescript "1.8.40"]] + :env {:protocol "http"} :cljsbuild {:builds diff --git a/src/clj/kata/twitter_oauth.clj b/src/clj/kata/twitter_oauth.clj index 6f2d81b..cb1ec32 100644 --- a/src/clj/kata/twitter_oauth.clj +++ b/src/clj/kata/twitter_oauth.clj @@ -28,7 +28,12 @@ (defn oauth-callback-uri "Generates the twitter oauth request callback URI" [{:keys [headers]}] - (str (or (headers "x-forwarded-proto") "https") "://" (headers "host") "/oauth/twitter-callback")) + (str (or (headers "x-forwarded-proto") + (env :protocol) + "https") + "://" + (headers "host") + "/oauth/twitter-callback")) (defn fetch-request-token "Fetches a request token." From 3e4885ce64b20fc88240c135f3b04fc9901233ad Mon Sep 17 00:00:00 2001 From: Dmitri Sotnikov Date: Wed, 29 Jun 2016 20:49:54 -0400 Subject: [PATCH 4/5] added Postgres (#60) * added Twitter OAuth integration * make twitter callback uri use http in dev * added postgres for heroku --- project.clj | 1 + src/clj/kata/core.clj | 12 +++--------- src/clj/kata/db/core.clj | 15 +++++++++------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/project.clj b/project.clj index d107fe6..9b7d0fe 100644 --- a/project.clj +++ b/project.clj @@ -25,6 +25,7 @@ [luminus-migrations "0.1.0"] [conman "0.4.9"] [com.h2database/h2 "1.4.191"] + [org.postgresql/postgresql "9.4-1206-jdbc4"] [org.clojure/clojurescript "1.8.40" :scope "provided"] [reagent "0.5.1"] [reagent-forms "0.5.22"] diff --git a/src/clj/kata/core.clj b/src/clj/kata/core.clj index ae73cb0..d9985a3 100644 --- a/src/clj/kata/core.clj +++ b/src/clj/kata/core.clj @@ -46,16 +46,10 @@ :started)] (log/info component "started")) (logger/init (:log-config env)) + (migrations/migrate ["migrate"] (env :database-url)) ((:init defaults)) (.addShutdownHook (Runtime/getRuntime) (Thread. stop-app))) (defn -main [& args] - (cond - (some #{"migrate" "rollback"} args) - (do - (mount/start #'kata.config/env) - (migrations/migrate args (env :database-url)) - (System/exit 0)) - :else - (start-app args))) - + (start-app args)) + diff --git a/src/clj/kata/db/core.clj b/src/clj/kata/db/core.clj index 8ab3316..6d52f0a 100644 --- a/src/clj/kata/db/core.clj +++ b/src/clj/kata/db/core.clj @@ -6,12 +6,15 @@ ; Example of profile :database-url jdbc:postgresql://localhost/kata_dev?user=username&password=securepassword (defstate ^:dynamic *db* - :start (conman/connect! - {:datasource - (doto (org.h2.jdbcx.JdbcDataSource.) - (.setURL (env :database-url)) - (.setUser "") - (.setPassword ""))}) + :start (if (env :dev) + (conman/connect! + {:datasource + (doto (org.h2.jdbcx.JdbcDataSource.) + (.setURL (env :database-url)) + (.setUser "") + (.setPassword ""))}) + (conman/connect! + {:jdbc-url (env :database-url)})) :stop (conman/disconnect! *db*)) (conman/bind-connection *db* "sql/queries.sql") From 8e9b281d27473569f59ea81512b27356dd4db6ce Mon Sep 17 00:00:00 2001 From: Dmitri Sotnikov Date: Wed, 13 Jul 2016 20:18:13 -0400 Subject: [PATCH 5/5] added externs from cljsjs --- project.clj | 2 ++ resources/externs.js | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/project.clj b/project.clj index 9b7d0fe..15458bc 100644 --- a/project.clj +++ b/project.clj @@ -36,6 +36,8 @@ [luminus-log4j "0.1.3"] [clojail "1.0.6"] [clj-oauth "1.5.4"] + [cljsjs/highlight "8.4-0"] + [cljsjs/codemirror "5.11.0-2"] ;[re-com "0.8.0"] ] diff --git a/resources/externs.js b/resources/externs.js index 9311362..e69de29 100644 --- a/resources/externs.js +++ b/resources/externs.js @@ -1,3 +0,0 @@ -CodeMirror.fromTextArea = function(dom) { - dom.on(''); -};