From d4b264dfd83f81feebf27bd75c8ce40335f89fb1 Mon Sep 17 00:00:00 2001 From: Cam Saul <cammsaul@gmail.com> Date: Fri, 13 Jul 2018 17:49:09 -0700 Subject: [PATCH] Simplified way to keep setup token in sync. --- src/metabase/setup.clj | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/metabase/setup.clj b/src/metabase/setup.clj index bdb1f1be029..da1c2828b1c 100644 --- a/src/metabase/setup.clj +++ b/src/metabase/setup.clj @@ -1,27 +1,33 @@ -(ns metabase.setup) +(ns metabase.setup + (:require [metabase.models.setting :refer [Setting defsetting]] + [toucan.db :as db])) -(defonce ^:private setup-token - (atom nil)) +(defsetting ^:private setup-token + "A token used to signify that an instance has permissions to create the initial User. This is created upon the first + launch of Metabase, by the first instance; once used, it is cleared out, never to be used again." + :internal? true) (defn token-value "Return the value of the setup token, if any." [] - @setup-token) + (setup-token)) (defn token-match? "Function for checking if the supplied string matches our setup token. - Returns boolean `true` if supplied token matches `@setup-token`, `false` otherwise." + Returns boolean `true` if supplied token matches the setup token, `false` otherwise." [token] {:pre [(string? token)]} - (= token @setup-token)) + (= token (setup-token))) (defn create-token! - "Create and set a new `@setup-token`. - Returns the newly created token." + "Create and set a new setup token, if one has not already been created. Returns the newly created token." [] - (reset! setup-token (str (java.util.UUID/randomUUID)))) + ;; fetch the value directly from the DB; *do not* rely on cached value, in case a different instance came along and + ;; already created it + (or (db/select-one-field :value Setting :key "setup-token") + (setup-token (str (java.util.UUID/randomUUID))))) (defn clear-token! - "Clear the `@setup-token` if it exists and reset it to nil." + "Clear the setup token if it exists and reset it to `nil`." [] - (reset! setup-token nil)) + (setup-token nil)) -- GitLab