diff --git a/src/clj/commiteth/github/core.clj b/src/clj/commiteth/github/core.clj index 0578c69..0ad0d05 100644 --- a/src/clj/commiteth/github/core.clj +++ b/src/clj/commiteth/github/core.clj @@ -9,7 +9,8 @@ [commiteth.config :refer [env]] [digest :refer [sha-256]] [clojure.tools.logging :as log] - [cheshire.core :as json]) + [cheshire.core :as json] + [clojure.string :as str]) (:import [java.util UUID])) (def ^:dynamic url "https://api.github.com/") @@ -25,7 +26,7 @@ (defn authorize-url [] (let [params (codec/form-encode {:client_id (client-id) :redirect_uri (redirect-uri) - :scope "admin:repo_hook repo" + :scope "admin:repo_hook repo admin:org_hook" :allow_signup true :state (str (UUID/randomUUID))})] (str "https://github.com/login/oauth/authorize" "?" params))) @@ -33,12 +34,12 @@ (defn post-for-token [code state] (http/post "https://github.com/login/oauth/access_token" - {:content-type :json - :form-params {:client_id (client-id) - :client_secret (client-secret) - :code code - :redirect_uri (redirect-uri) - :state state}})) + {:content-type :json + :form-params {:client_id (client-id) + :client_secret (client-secret) + :code code + :redirect_uri (redirect-uri) + :state state}})) (defn- auth-params [token] @@ -69,32 +70,34 @@ "List all repos managed by the given user." [token] (->> - (map #(merge - {:login (get-in % login-field)} - (select-keys % repo-fields)) - (repos/repos (merge (auth-params token) {:type "all" - :all-pages true}))) - (filter #(not (:fork %))) - (filter #(-> % :permissions :admin)))) + (map #(merge + {:login (get-in % login-field)} + (select-keys % repo-fields)) + (repos/repos (merge (auth-params token) {:type "all" + :all-pages true}))) + (filter #(not (:fork %))) + (filter #(-> % :permissions :admin)))) (defn get-user [token] (users/me (auth-params token))) (defn add-webhook - [user repo token] - (log/debug "adding webhook" (str user "/" repo) token) - (repos/create-hook user repo "web" - {:url (str (server-address) "/webhook") - :content_type "json"} - (merge (auth-params token) - {:events ["issues", "issue_comment", "pull_request"] - :active true}))) + [full-repo token] + (log/debug "adding webhook" full-repo token) + (let [[user repo] (str/split full-repo #"/")] + (repos/create-hook user repo "web" + {:url (str (server-address) "/webhook") + :content_type "json"} + (merge (auth-params token) + {:events ["issues", "issue_comment", "pull_request"] + :active true})))) (defn remove-webhook - [user repo hook-id token] - (log/debug "removing webhook" (str user "/" repo) hook-id token) - (repos/delete-hook user repo hook-id (auth-params token))) + [full-repo hook-id token] + (let [[user repo] (str/split full-repo #"/")] + (log/debug "removing webhook" (str user "/" repo) hook-id token) + (repos/delete-hook user repo hook-id (auth-params token)))) (defn github-comment-hash [user repo issue-number] @@ -132,13 +135,18 @@ (let [{:keys [auth oauth-token] :as query} query req (merge-with merge - {:url (tentacles/format-url end-point positional) - :basic-auth auth - :method :patch} - (when oauth-token - {:headers {"Authorization" (str "token " oauth-token)}})) + {:url (tentacles/format-url end-point positional) + :basic-auth auth + :method :patch} + (when oauth-token + {:headers {"Authorization" (str "token " oauth-token)}})) raw-query (:raw query) - proper-query (tentacles/query-map (dissoc query :auth :oauth-token :all-pages :accept :user-agent :otp))] + proper-query (tentacles/query-map (dissoc query :auth + :oauth-token + :all-pages + :accept + :user-agent + :otp))] (assoc req :body (json/generate-string (or raw-query proper-query))))) (defn update-comment @@ -146,7 +154,8 @@ (let [comment (generate-comment user repo issue-number balance)] (log/debug (str "Updating " user "/" repo "/" issue-number " comment #" comment-id " with contents: " comment)) (let [req (make-patch-request "repos/%s/%s/issues/comments/%s" - [user repo comment-id] (assoc (self-auth-params) :body comment))] + [user repo comment-id] + (assoc (self-auth-params) :body comment))] (tentacles/safe-parse (http/request req))))) (defn get-issue @@ -158,6 +167,7 @@ (issues/issue-events user repo issue-id (self-auth-params))) (defn create-label - [user repo token] - (log/debug "creating bounty label" (str user "/" repo) token) - (issues/create-label user repo "bounty" "00ff00" (auth-params token))) + [full-repo token] + (let [[user repo] (str/split full-repo #"/")] + (log/debug "creating bounty label" (str user "/" repo) token) + (issues/create-label user repo "bounty" "00ff00" (auth-params token)))) diff --git a/src/clj/commiteth/routes/services.clj b/src/clj/commiteth/routes/services.clj index 3a494c7..364fbb7 100644 --- a/src/clj/commiteth/routes/services.clj +++ b/src/clj/commiteth/routes/services.clj @@ -77,7 +77,7 @@ :auth-rules authenticated? :current-user user (ok (let [{repo-id :id - repo :name} params + repo :full_name} params {token :token login :login user-id :id} user @@ -86,9 +86,9 @@ (repositories/toggle repo-id))] (if (:enabled result) ;; @todo: do we really want to make this call at this moment? - (let [created-hook (github/add-webhook login repo token)] + (let [created-hook (github/add-webhook repo token)] (log/debug "Created webhook:" created-hook) - (github/create-label login repo token) + (github/create-label repo token) (repositories/update-hook-id repo-id (:id created-hook))) - (github/remove-webhook login repo (:hook_id result) token)) + (github/remove-webhook repo (:hook_id result) token)) result))))) diff --git a/src/cljs/commiteth/handlers.cljs b/src/cljs/commiteth/handlers.cljs index d846fa2..4a98b31 100644 --- a/src/cljs/commiteth/handlers.cljs +++ b/src/cljs/commiteth/handlers.cljs @@ -137,11 +137,12 @@ (reg-event-fx :toggle-repo (fn [{:keys [db]} [_ repo]] + (println "toggle-repo" repo) {:db db :http {:method POST :url "/api/repository/toggle" :on-success #(println %) - :params (select-keys repo [:id :login :name])}})) + :params (select-keys repo [:id :login :full_name :name])}})) (reg-event-fx :save-user-address diff --git a/src/cljs/commiteth/manage.cljs b/src/cljs/commiteth/manage.cljs index c882018..0d9c731 100644 --- a/src/cljs/commiteth/manage.cljs +++ b/src/cljs/commiteth/manage.cljs @@ -8,7 +8,7 @@ (defn repository-row [repo] (let [{repo-id :id url :html_url - name :name + name :full_name description :description} repo] ^{:key repo-id} [:div.d-table.width-full