From f8ce69b6475dc8f14606b0ced7636ab68d7660f7 Mon Sep 17 00:00:00 2001
From: Cam Saul <cam@geotip.com>
Date: Wed, 3 Jun 2015 15:03:45 -0700
Subject: [PATCH] fix annoying redirect to setup when developing

---
 src/metabase/db.clj     |  3 ++-
 src/metabase/routes.clj |  6 +++---
 src/metabase/setup.clj  | 13 ++++++++-----
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/metabase/db.clj b/src/metabase/db.clj
index 2ae4feaeff6..19051f4d519 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 cae3ffa600b..c4a831396da 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 5ddba8bc2df..91090004c13 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.
-- 
GitLab