diff --git a/src/metabase/db.clj b/src/metabase/db.clj index 2ae4feaeff635343eac761db7e3cde3bf86cce1e..19051f4d5191c564b959450e496b66de3f42db1b 100644 --- a/src/metabase/db.clj +++ b/src/metabase/db.clj @@ -439,7 +439,8 @@ [entity & {:as kwargs}] `(not (empty? (select (entity->korma ~entity) (fields [:id]) - (where ~kwargs) + ~@(when (seq kwargs) + `[(where ~kwargs)]) (limit 1))))) ;; ## CASADE-DELETE diff --git a/src/metabase/routes.clj b/src/metabase/routes.clj index cae3ffa600b81185260407743d99bb5d963c8b97..c4a831396dad218e0c365aa1e36d96aac5ebff4c 100644 --- a/src/metabase/routes.clj +++ b/src/metabase/routes.clj @@ -5,9 +5,9 @@ [metabase.api.routes :as api] [metabase.setup :as setup])) - -(let [redirect-to-setup? (fn [{:keys [uri]}] ; Redirect naughty users who try to visit a page other than setup - (and (setup/token-exists?) ; if setup is not yet complete +;; Redirect naughty users who try to visit a page other than setup if setup is not yet complete +(let [redirect-to-setup? (fn [{:keys [uri]}] + (and (setup/incomplete?) (not (re-matches #"^/setup/.*$" uri)))) index (fn [request] (if (redirect-to-setup? request) (resp/redirect (format "/setup/init/%s" (setup/token-value))) diff --git a/src/metabase/setup.clj b/src/metabase/setup.clj index 5ddba8bc2dfecbb4aed632776efdf947dec62417..91090004c13969b5b8c54baacf68b0e14cf0fedb 100644 --- a/src/metabase/setup.clj +++ b/src/metabase/setup.clj @@ -1,6 +1,8 @@ -(ns metabase.setup) +(ns metabase.setup + (:require [metabase.db :as db] + [metabase.models.user :refer [User]])) -(def ^:private setup-token +(defonce ^:private setup-token (atom nil)) (defn token-value @@ -8,10 +10,11 @@ [] @setup-token) -(defn token-exists? - "Return `true` if a setup token exists." +(defn incomplete? + "Return `true` if a setup token exists and no `Users` exist in the DB." [] - (boolean @setup-token)) + (and @setup-token + (not (db/exists? User)))) (defn token-match? "Function for checking if the supplied string matches our setup token.