Merge branch 'develop'

This commit is contained in:
Teemu Patja 2017-11-14 17:05:46 +02:00
commit 5d7a56f71c
No known key found for this signature in database
GPG Key ID: F5B7035E6580FD4C
8 changed files with 162 additions and 27 deletions

View File

@ -3,8 +3,10 @@
SOLC=$(which solc)
WEB3J=$(which web3j)
rm -f resources/contracts/*.{abi,bin}
# compile contracts
for f in contracts/*.sol; do
for f in contracts/{TokenReg,MultiSigTokenWallet*}.sol; do
$SOLC $f --overwrite --bin --abi --optimize -o resources/contracts
done

View File

@ -77,7 +77,7 @@
</div>
<div class="header-section header-section--right">
<div class="nav">
<a class="nav__item nav__item-features" href="/app">Activity</a>
<a class="nav__item nav__item-features" href="/app#/activity">Activity</a>
<a class="nav__item nav__item-features" href="/app">Open Bounties</a>
<a href="{{authorize-url}}" id="button-login" class="button">Log in →</a>
</div>

View File

@ -44,7 +44,7 @@
(defn admin-authorize-url []
(if (github-app-enabled?)
(authorize-url "public_repo user:email")
(authorize-url "user:email")
(authorize-url "admin:repo_hook repo user:email admin:org_hook")))
(defn access-settings-url []

View File

@ -68,9 +68,9 @@
:state 0
:hook_id nil}))
;; NOTE(oskarth): This and above two functions about to be deprecated with Github App
(defn handle-toggle-repo [user params can-create?]
(log/debug "handle-toggle-repo" user params)
(log/info "MANUAL ACTION REQUIRED: Possibly add repo:" (pr-str user) (pr-str params))
(log/info "XXX handle-toggle-repo" (pr-str user) (pr-str params))
(let [{user-id :id} user
{repo-id :id
full-repo :full_name

View File

@ -1,20 +1,26 @@
(ns commiteth.routes.webhooks
(:require [cheshire.core :as json]
[clojure.string :as str :refer [join]]
[clojure.tools.logging :as log]
[commiteth.bounties :as bounties]
[commiteth.db
[issues :as issues]
[pull-requests :as pull-requests]
[repositories :as repos]
[users :as users]]
[commiteth.github.core :as github]
[commiteth.util.digest :refer [hex-hmac-sha1]]
[compojure.core :refer [defroutes POST]]
[crypto.equality :as crypto]
[ring.util.http-response :refer [ok forbidden]]
[commiteth.db.bounties :as bounties-db]
[clojure.string :as string])
(:require
[ring.util.http-response :refer [internal-server-error]]
[cheshire.core :as json]
[clojure.string :as str :refer [join]]
[clojure.tools.logging :as log]
[commiteth.bounties :as bounties]
[commiteth.db
[issues :as issues]
[pull-requests :as pull-requests]
[repositories :as repositories]
[users :as users]]
[commiteth.github.core :as github]
[commiteth.util.digest :refer [hex-hmac-sha1]]
;; TODO(oskarth): Bad form, put these in better namespace
[commiteth.routes.services :refer
[user-whitelisted?
add-bounties-for-existing-issues?]]
[compojure.core :refer [defroutes POST]]
[crypto.equality :as crypto]
[ring.util.http-response :refer [ok forbidden]]
[commiteth.db.bounties :as bounties-db]
[clojure.string :as string])
(:import java.lang.Integer))
(defn find-issue-event
@ -218,6 +224,115 @@
(handle-issue-reopened webhook-payload)))
(ok))
(defn enable-repo-2 [repo-id full-repo]
(log/debug "enable-repo-2" repo-id full-repo)
;; TODO(oskarth): Add granular permissions to enable creation of label
#_(github/create-label full-repo)
(repositories/update-repo repo-id {:state 2})
(when (add-bounties-for-existing-issues?)
(bounties/add-bounties-for-existing-issues full-repo)))
(defn disable-repo-2 [repo-id full-repo]
(log/debug "disable-repo-2" repo-id full-repo)
(repositories/update-repo repo-id {:state 0}))
(defn full-repo->owner [full-repo]
(try
(let [[owner _] (str/split full-repo #"/")]
owner)
(catch Exception e
(log/error "exception when parsing repo" e)
nil)))
;; NOTE(oskarth): Together with {enable,disable}-repo-2 above, this replaces
;; handle-toggle-repo for Github App.
(defn handle-add-repo [user-id username owner-avatar-url repo can-create?]
(let [repo-id (:id repo)
repo-name (:name repo)
full-repo (:full_name repo)
_ (log/info "handle-installation add pre repo" (pr-str repo) " " (pr-str full-repo))
owner (full-repo->owner full-repo)
_ (log/info "handle-installation add" full-repo " " owner)
db-user (users/get-user user-id)]
(log/info "handle-add-repo"
(pr-str {:user-id user-id
:name username
:owner-avatar-url owner-avatar-url
:repo-id repo-id
:repo repo-name
:full-repo full-repo
:can-create? can-create?}))
(cond (not can-create?)
(do (log/info "handle-add-repo user not in whitelist: " username)
{:status 400
:body "Please join our Riot - chat.status.im/#/register and request
access in our #openbounty room to have your account whitelisted"})
(empty? (:address db-user))
(do (log/info "handle-add-repo user lacking ethereum address: " (pr-str db-user))
{:status 400
:body "Please add your ethereum address to your profile first"})
:else
(try
(let [_ (log/info "handle-add-repo pre-create")
db-item (repositories/create
{:id repo-id ;; XXX: Being rename twice... silly.
:name repo-name ;; XXX: Is this name of repo?
:owner-avatar-url owner-avatar-url
:user_id user-id
:owner owner})
_ (log/info "handle-add-repo db-item" db-item)
is-enabled (= 2 (:state db-item))]
(if is-enabled
(disable-repo-2 repo-id full-repo)
(enable-repo-2 repo-id full-repo))
(ok {:enabled (not is-enabled)
:id repo-id
:full_name full-repo}))
(catch Exception e
(log/error "exception when enabling repo" e)
(repositories/update-repo repo-id {:state -1})
(internal-server-error))))))
(defn handle-installation [{:keys [action repositories sender]}]
;; TODO(oskarth): Handle other installs, like disable.
(when (= action "created")
(let [user-id (:id sender)
username (:login sender)
owner-avatar-url (:avatar_url sender)
first-repo (first repositories)
can-create? (user-whitelisted? username)]
(log/info "handle-installation created"
(pr-str {:user-id user-id
:name username
:owner-avatar-url owner-avatar-url
:repos repositories}))
(doseq [repo repositories]
(log/info "handle-installation add pre repo" repo)
(handle-add-repo user-id username owner-avatar-url repo can-create?))))
(ok))
(defn handle-installation-repositories [{:keys [action sender] :as payload}]
;; TODO(oskarth): Handle other installs, like disable.
;; TODO(oskarth): Also support remove in :repositories_removed
;; TODO(oskarth): Also support case when :repository_selection is all - does it work differently?
(when (= action "added")
(let [repositories (:repositories_added payload)
user-id (:id sender)
username (:login sender)
owner-avatar-url (:avatar_url sender)
first-repo (first repositories)
can-create? (user-whitelisted? username)]
(log/info "handle-installation-integration created"
(pr-str {:user-id user-id
:name username
:owner-avatar-url owner-avatar-url
:repos repositories}))
(doseq [repo repositories]
(log/info "handle-installation-integration add pre repo" repo)
(handle-add-repo user-id username owner-avatar-url repo can-create?))))
(ok))
(defn handle-pull-request
[pull-request]
@ -232,7 +347,7 @@
(defn validate-secret [webhook-payload raw-payload github-signature]
;; used for oauth app webhooks. secret is repo-specific
(let [full-name (get-in webhook-payload [:repository :full_name])
repo (repos/get-repo full-name)
repo (repositories/get-repo full-name)
secret (:hook_secret repo)]
(and (not (string/blank? secret))
(crypto/eq? github-signature
@ -268,13 +383,24 @@
(log/debug "webhook-app POST, headers" headers)
(let [raw-payload (slurp body)
payload (json/parse-string raw-payload true)]
(log/debug "webhook-app POST, payload" payload)
(log/info "webhook-app POST, payload:" (pr-str payload))
(if (validate-secret-one-hook payload raw-payload (get headers "x-hub-signature"))
(do
(log/debug "Github secret validation OK app")
(log/debug "x-github-event app" (get headers "x-github-event"))
(log/info "x-github-event app" (get headers "x-github-event"))
(case (get headers "x-github-event")
"issues" (handle-issue payload)
"pull_request" (handle-pull-request payload)
"installation" (handle-installation payload)
"installation_repositories" (handle-installation-repositories payload)
;; NOTE(oskarth): These two webhooks are / will be deprecated on
;; November 22, 2017 but they keep being called. According to
;; documentation they should contain same format.
;; https://developer.github.com/webhooks/
"integration_installation" (handle-installation payload)
"integration_installation_repositories" (handle-installation-repositories payload)
(ok)))
(forbidden)))))

View File

@ -79,7 +79,9 @@
(let [tabs (apply conj [[:bounties (str (when-not @user "Open ") "Bounties")]
[:activity "Activity"]]
(when @user
[[:repos "Repositories"]
[
;; NOTE(oskarth) Disabling this as repo management happens through GH app
#_[:repos "Repositories"]
[:manage-payouts (str (when-not mobile? "Manage ") "Payouts")]
(when (:status-team-member? @user)
[:usage-metrics "Usage metrics"])]))]
@ -223,6 +225,10 @@
(secretary/defroute "/" []
(rf/dispatch [:set-active-page :bounties]))
(secretary/defroute "/activity" []
(rf/dispatch [:set-active-page :activity]))
(secretary/defroute "/repos" []
(if js/user
(rf/dispatch [:set-active-page :repos])

View File

@ -77,7 +77,7 @@
</div>
<div class="header-section header-section--right">
<div class="nav">
<a class="nav__item nav__item-features" href="/app">Activity</a>
<a class="nav__item nav__item-features" href="/app#/activity">Activity</a>
<a class="nav__item nav__item-features" href="/app">Open Bounties</a>
<a href="{{authorize-url}}" id="button-login" class="button">Log in →</a>
</div>

View File

@ -106,7 +106,8 @@
(let [active-tab (:active-tab app-state)]
[:div.ui.attached.tabular.menu.tiny
(for [[tab caption] [[:activity "Activity"]
[:manage "Repositories"]
;; NOTE(oskarth) Disabling this as repo management happens through GH app
#_[:manage "Repositories"]
[:bounties "Bounties"]]]
(let [props {:class (str "ui item"
(when (= active-tab tab) " active"))