From 0992b052984d537081184641dd5acaaca2262af5 Mon Sep 17 00:00:00 2001
From: "metabase-bot[bot]"
 <109303359+metabase-bot[bot]@users.noreply.github.com>
Date: Sun, 7 Apr 2024 22:53:32 +0000
Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20backported=20"Ignore=20internal?=
 =?UTF-8?q?=20user=20when=20initializing=20from=20config=20file"=20(#41111?=
 =?UTF-8?q?)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
---
 .../advanced_config/file/users.clj                | 15 +++++----------
 .../advanced_config/file/users_test.clj           |  4 ++--
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/enterprise/backend/src/metabase_enterprise/advanced_config/file/users.clj b/enterprise/backend/src/metabase_enterprise/advanced_config/file/users.clj
index ce989d70034..a03ccb53288 100644
--- a/enterprise/backend/src/metabase_enterprise/advanced_config/file/users.clj
+++ b/enterprise/backend/src/metabase_enterprise/advanced_config/file/users.clj
@@ -1,8 +1,10 @@
 (ns metabase-enterprise.advanced-config.file.users
   (:require
    [clojure.spec.alpha :as s]
-   [metabase-enterprise.advanced-config.file.interface :as advanced-config.file.i]
+   [metabase-enterprise.advanced-config.file.interface
+    :as advanced-config.file.i]
    [metabase.models.user :refer [User]]
+   [metabase.setup :as setup]
    [metabase.util :as u]
    [metabase.util.i18n :as i18n :refer [trs]]
    [metabase.util.log :as log]
@@ -30,23 +32,16 @@
   [_section]
   (s/spec (s/* ::config-file-spec)))
 
-(defn- init-from-config-file-is-first-user?
-  "For [[init-from-config-file!]]: `true` if this the first User being created for this instance. If so, we will ALWAYS
-  create that User as a superuser, regardless of what is specified in the config file. (It doesn't make sense to
-  create the first User as anything other than a superuser)."
-  []
-  (zero? (t2/count User)))
 
 (defn- init-from-config-file!
   [user]
-  ;; TODO -- if this is the FIRST user, we should probably make them a superuser, right?
   (if-let [existing-user-id (t2/select-one-pk User :email (:email user))]
     (do
       (log/info (u/colorize :blue (trs "Updating User with email {0}" (pr-str (:email user)))))
       (t2/update! User existing-user-id user))
-    ;; create a new user. If they are the first User, force them to be an admin.
+    ;; create a new user. If they are the first non-internal User, force them to be an admin.
     (let [user (cond-> user
-                 (init-from-config-file-is-first-user?) (assoc :is_superuser true))]
+                 (not (setup/has-user-setup)) (assoc :is_superuser true))]
       (log/info (u/colorize :green (trs "Creating the first User for this instance. The first user is always created as an admin.")))
       (log/info (u/colorize :green (trs "Creating new User {0} with email {1}"
                                         (pr-str (str (:first_name user) \space (:last_name user)))
diff --git a/enterprise/backend/test/metabase_enterprise/advanced_config/file/users_test.clj b/enterprise/backend/test/metabase_enterprise/advanced_config/file/users_test.clj
index cb9a970ad67..97117c32e53 100644
--- a/enterprise/backend/test/metabase_enterprise/advanced_config/file/users_test.clj
+++ b/enterprise/backend/test/metabase_enterprise/advanced_config/file/users_test.clj
@@ -2,8 +2,8 @@
   (:require
    [clojure.test :refer :all]
    [metabase-enterprise.advanced-config.file :as advanced-config.file]
-   [metabase-enterprise.advanced-config.file.users :as advanced-config.file.users]
    [metabase.models :refer [User]]
+   [metabase.setup :as setup]
    [metabase.test :as mt]
    [metabase.util.password :as u.password]
    [toucan2.core :as t2]))
@@ -70,7 +70,7 @@
                                                                     :email        "cam+config-file-admin-test@metabase.com"
                                                                     :password     "2cans"
                                                                     :is_superuser false}]}}]
-          (with-redefs [advanced-config.file.users/init-from-config-file-is-first-user? (constantly true)]
+          (with-redefs [setup/has-user-setup (constantly false)]
             (is (= :ok
                    (advanced-config.file/initialize!)))
             (is (partial= {:first_name   "Cam"
-- 
GitLab