Skip to content
Snippets Groups Projects
Unverified Commit 8efd5371 authored by Cam Saul's avatar Cam Saul Committed by GitHub
Browse files

Add new Settings (placeholders) for the new 0.41.0+ premium features (#17891)

* Add new Settings (placeholders) for the new 0.41.0+ premium features

* Code cleanup

* Add new features to the `:premium-features` Setting (for FE consumption)

* Fix busted ns declarations
parent 698109ec
No related branches found
No related tags found
No related merge requests found
Showing
with 62 additions and 61 deletions
......@@ -21,6 +21,7 @@
;; (Add more as needed)
(eval . (put 'defendpoint 'clojure-doc-string-elt 3))
(eval . (put 'defendpoint-async 'clojure-doc-string-elt 3))
(eval . (put 'define-premium-feature 'clojure-doc-string-elt 2))
(eval . (put 'api/defendpoint 'clojure-doc-string-elt 3))
(eval . (put 'api/defendpoint-async 'clojure-doc-string-elt 3))
(eval . (put 'defsetting 'clojure-doc-string-elt 2))
......
......@@ -40,7 +40,7 @@
(:require [clojure.data :as data]
[metabase-enterprise.audit.interface :as audit.i]
[metabase.api.common :as api]
[metabase.public-settings.metastore :as metastore]
[metabase.public-settings.premium-features :as premium-features]
[metabase.query-processor.context :as context]
[metabase.query-processor.error-type :as error-type]
[metabase.util.i18n :refer [tru]]
......@@ -114,7 +114,7 @@
(api/check-superuser)
;; Make sure audit app is enabled (currently the only use case for internal queries). We can figure out a way to
;; allow non-audit-app queries if and when we add some
(when-not (metastore/enable-audit-app?)
(when-not (premium-features/enable-audit-app?)
(throw (ex-info (tru "Audit App queries are not enabled on this instance.")
{:type error-type/invalid-query})))
(binding [*additional-query-params* (dissoc query :fn :args)]
......
......@@ -65,7 +65,7 @@
;; For `MyProtocol` methods: invoke `ee-impl` if EE enhancements are enabled, otherwise invoke `oss-impl`
(def impl
(reify-ee-strategy-impl #'settings.metastore/enable-enhancements? ee-impl oss-impl
(reify-ee-strategy-impl #'settings.premium-features/enable-enhancements? ee-impl oss-impl
MyProtocol))
At the time of this writing, this only works with first-class Clojure Protocols (as opposed to plain Java
......
......@@ -6,7 +6,7 @@
[metabase.integrations.ldap.interface :as i]
[metabase.models.setting :as setting :refer [defsetting]]
[metabase.models.user :as user :refer [User]]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.util :as u]
[metabase.util.i18n :refer [deferred-tru trs]]
[metabase.util.schema :as su]
......@@ -113,5 +113,5 @@
forwards method invocations to `impl`; if EE features *are not* enabled, forwards method invocations to the
default OSS impl."
;; TODO -- should we require `:sso` token features for using the LDAP enhancements?
(ee-strategy-impl/reify-ee-strategy-impl #'settings.metastore/enable-enhancements? impl default-impl/impl
(ee-strategy-impl/reify-ee-strategy-impl #'settings.premium-features/enable-enhancements? impl default-impl/impl
LDAPIntegration))
......@@ -4,7 +4,7 @@
[metabase.models.interface :as i]
[metabase.models.native-query-snippet.permissions :as snippet.perms]
[metabase.models.permissions :as perms]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.util.schema :as su]
[pretty.core :refer [PrettyPrintable]]
[schema.core :as s]
......@@ -46,7 +46,7 @@
"EE implementation of NativeQuerySnippet permissions. Uses Collection permissions instead allowing anyone to view or
edit all Snippets. (Only when a valid Enterprise Edition token is present. Otherwise, this forwards method
invocations to the default impl)."
(ee-strategy-impl/reify-ee-strategy-impl #'settings.metastore/enable-enhancements? ee-impl* snippet.perms/default-impl
(ee-strategy-impl/reify-ee-strategy-impl #'settings.premium-features/enable-enhancements? ee-impl* snippet.perms/default-impl
snippet.perms/PermissionsImpl))
(snippet.perms/set-impl! ee-impl)
(ns metabase-enterprise.enhancements.models.permissions.block-permissions
(:require [metabase.api.common :as api]
[metabase.models.permissions :as perms]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.query-processor.error-type :as qp.error-type]
[metabase.util.i18n :refer [tru]]))
......@@ -21,7 +21,7 @@
exists."
[{database-id :database, :as query}]
(cond
(not (settings.metastore/enable-enhancements?))
(not (settings.premium-features/enable-enhancements?))
::enhancements-not-enabled
(not (current-user-has-block-permissions-for-database? database-id))
......
(ns metabase-enterprise.pulse
(:require [metabase-enterprise.enhancements.ee-strategy-impl :as ee-strategy-impl]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.pulse.interface :as i])
(:import metabase.pulse.interface.SubscriptionParameters))
......@@ -20,5 +20,5 @@
(def ee-strategy-parameters-impl
"Enterprise way of getting dashboard filter parameters"
(ee-strategy-impl/reify-ee-strategy-impl #'settings.metastore/enable-enhancements? parameters-impl i/default-parameters-impl
(ee-strategy-impl/reify-ee-strategy-impl #'settings.premium-features/enable-enhancements? parameters-impl i/default-parameters-impl
i/SubscriptionParameters))
......@@ -3,7 +3,7 @@
(:require [compojure.core :refer [DELETE GET POST PUT]]
[metabase-enterprise.sandbox.models.group-table-access-policy :refer [GroupTableAccessPolicy]]
[metabase.api.common :as api]
[metabase.public-settings.metastore :as metastore]
[metabase.public-settings.premium-features :as premium-features]
[metabase.util :as u]
[metabase.util.i18n :refer [tru]]
[metabase.util.schema :as su]
......@@ -67,7 +67,7 @@
"Wrap the Ring handler to make sure sandboxes are enabled before allowing access to the API endpoints."
[handler]
(fn [request respond raise]
(if-not (metastore/enable-sandboxes?)
(if-not (premium-features/enable-sandboxes?)
(raise (ex-info (str (tru "Error: sandboxing is not enabled for this instance.")
" "
(tru "Please check you have set a valid Enterprise token and try again."))
......
......@@ -6,7 +6,7 @@
[metabase.models.field :as field :refer [Field]]
[metabase.models.field-values :as field-values :refer [FieldValues]]
[metabase.models.params.field-values :as params.field-values]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.util :as u]
[pretty.core :as pretty]
[toucan.db :as db]
......@@ -83,5 +83,5 @@
"Enterprise version of the fetch FieldValues for current User logic. Uses our EE strategy pattern adapter: if EE
features *are* enabled, forwards method invocations to `impl`; if EE features *are not* enabled, forwards method
invocations to the default OSS impl."
(ee-strategy-impl/reify-ee-strategy-impl #'settings.metastore/enable-sandboxes? impl params.field-values/default-impl
(ee-strategy-impl/reify-ee-strategy-impl #'settings.premium-features/enable-sandboxes? impl params.field-values/default-impl
params.field-values/FieldValuesForCurrentUser))
......@@ -4,7 +4,7 @@
[metabase-enterprise.sandbox.models.group-table-access-policy :refer [GroupTableAccessPolicy]]
[metabase.models.permissions.delete-sandboxes :as delete-sandboxes]
[metabase.models.table :refer [Table]]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.util :as u]
[metabase.util.i18n :refer [tru]]
[pretty.core :as pretty]
......@@ -132,7 +132,7 @@
(def ee-strategy-impl
"EE impl for Sandbox (GTAP) deletion behavior. Don't use this directly."
(ee-strategy-impl/reify-ee-strategy-impl
#'settings.metastore/enable-sandboxes?
#'settings.premium-features/enable-sandboxes?
impl
delete-sandboxes/oss-default-impl
delete-sandboxes/DeleteSandboxes))
(ns metabase-enterprise.search.scoring
(:require [metabase-enterprise.enhancements.ee-strategy-impl :as ee-strategy-impl]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[metabase.search.scoring :as scoring]))
(defn- official-collection-score
......@@ -31,6 +31,6 @@
(def ee-scoring
"Enterprise scoring of results, falling back to the open source version if enterprise is not enabled."
(ee-strategy-impl/reify-ee-strategy-impl #'settings.metastore/enable-enhancements?
(ee-strategy-impl/reify-ee-strategy-impl #'settings.premium-features/enable-enhancements?
scoring-impl scoring/oss-score-impl
scoring/ResultScore))
......@@ -8,7 +8,7 @@
[metabase-enterprise.sso.integrations.sso-settings :as sso-settings]
[metabase.api.common :as api]
[metabase.plugins.classloader :as classloader]
[metabase.public-settings.metastore :as metastore]
[metabase.public-settings.premium-features :as premium-features]
[metabase.util :as u]
[metabase.util.i18n :refer [trs tru]]
[stencil.core :as stencil]))
......@@ -48,15 +48,15 @@
[_]
(throw-not-configured-error))
(defn- throw-if-no-metastore-token []
(when-not (metastore/enable-sso?)
(defn- throw-if-no-premium-features-token []
(when-not (premium-features/enable-sso?)
(throw (ex-info (str (tru "SSO requires a valid token"))
{:status-code 403}))))
(api/defendpoint GET "/"
"SSO entry-point for an SSO user that has not logged in yet"
{:as req}
(throw-if-no-metastore-token)
(throw-if-no-premium-features-token)
(try
(sso-get req)
(catch Throwable e
......@@ -76,7 +76,7 @@
(api/defendpoint POST "/"
"Route the SSO backends call with successful login details"
{:as req}
(throw-if-no-metastore-token)
(throw-if-no-premium-features-token)
(try
(sso-post req)
(catch Throwable e
......
......@@ -3,7 +3,7 @@
[metabase-enterprise.audit.interface :as audit.i]
[metabase-enterprise.audit.pages.common :as pages.common]
[metabase.db :as mdb]
[metabase.public-settings.metastore-test :as metastore-test]
[metabase.public-settings.premium-features-test :as premium-features-test]
[metabase.query-processor :as qp]
[metabase.test :as mt]
[metabase.util :as u]))
......@@ -11,7 +11,7 @@
(defn- run-query
[query-type & {:as additional-query-params}]
(mt/with-test-user :crowberto
(metastore-test/with-metastore-token-features #{:audit-app}
(premium-features-test/with-premium-features #{:audit-app}
(qp/process-query (merge {:type :internal
:fn (u/qualified-name query-type)}
additional-query-params)))))
......@@ -36,7 +36,7 @@
(deftest transform-results-test
(testing "Make sure query function result are transformed to QP results correctly"
(metastore-test/with-metastore-token-features #{:audit-app}
(premium-features-test/with-premium-features #{:audit-app}
(doseq [[format-name {:keys [query-type expected-rows]}] {"legacy" {:query-type ::legacy-format-query-fn
:expected-rows [[100 2] [3 4]]}
"reducible" {:query-type ::reducible-format-query-fn
......@@ -53,7 +53,7 @@
(deftest query-limit-and-offset-test
(testing "Make sure params passed in as part of the query map are respected"
(metastore-test/with-metastore-token-features #{:audit-app}
(premium-features-test/with-premium-features #{:audit-app}
(doseq [[format-name {:keys [query-type expected-rows]}] {"legacy" {:query-type ::legacy-format-query-fn
:expected-rows [[100 2] [3 4]]}
"reducible" {:query-type ::reducible-format-query-fn
......
......@@ -8,7 +8,7 @@
[metabase-enterprise.audit.interface :as audit.i]
[metabase.models :refer [Card Dashboard DashboardCard Database Table]]
[metabase.plugins.classloader :as classloader]
[metabase.public-settings.metastore-test :as metastore-test]
[metabase.public-settings.premium-features-test :as premium-features-test]
[metabase.query-processor :as qp]
[metabase.query-processor.util :as qp-util]
[metabase.test :as mt]
......@@ -25,7 +25,7 @@
(is (fn? (get-method audit.i/internal-query :metabase-enterprise.audit.pages.dashboards/most-popular-with-avg-speed))))
(testing "test that a query will fail if not ran by an admin"
(metastore-test/with-metastore-token-features #{:audit-app}
(premium-features-test/with-premium-features #{:audit-app}
(is (= {:status "failed", :error "You don't have permissions to do that."}
(-> (mt/user-http-request :lucky :post 202 "dataset"
{:type :internal
......@@ -33,7 +33,7 @@
(select-keys [:status :error]))))))
(testing "ok, now try to run it. Should fail because we don't have audit-app enabled"
(metastore-test/with-metastore-token-features nil
(premium-features-test/with-premium-features nil
(is (= {:status "failed", :error "Audit App queries are not enabled on this instance."}
(-> (mt/user-http-request :crowberto :post 202 "dataset"
{:type :internal
......@@ -159,7 +159,7 @@
(deftest all-queries-test
(mt/with-test-user :crowberto
(with-temp-objects [objects]
(metastore-test/with-metastore-token-features #{:audit-app}
(premium-features-test/with-premium-features #{:audit-app}
(doseq [query-type (all-query-methods)]
(testing query-type
(do-tests-for-query-type query-type objects)))))))
......@@ -2,7 +2,7 @@
"Additional tests for this namespace can be found in `metabase-enterprise.audit.pages-test`."
(:require [clojure.test :refer :all]
[metabase-enterprise.audit.interface :as audit.i]
[metabase.public-settings.metastore-test :as metastore-test]
[metabase.public-settings.premium-features-test :as premium-features-test]
[metabase.query-processor :as qp]
[metabase.test :as mt]
[metabase.util :as u]))
......@@ -10,7 +10,7 @@
(defn- run-query
[query-type & {:as additional-query-params}]
(mt/with-test-user :crowberto
(metastore-test/with-metastore-token-features #{:audit-app}
(premium-features-test/with-premium-features #{:audit-app}
(qp/process-query (merge {:type :internal
:fn (u/qualified-name query-type)}
additional-query-params)))))
......
......@@ -4,7 +4,7 @@
[metabase.models.collection :as collection]
[metabase.models.permissions :as perms]
[metabase.models.permissions-group :as group]
[metabase.public-settings.metastore-test :as metastore-test]
[metabase.public-settings.premium-features-test :as premium-features-test]
[metabase.test :as mt]))
(deftest ee-disabled-snippets-graph-test
......@@ -17,14 +17,14 @@
(= (:id snippet) (:id a-snippet)))
response))))]
(testing "\nIf we have a valid EE token, we should only see Snippets in the Root Collection with valid perms"
(metastore-test/with-metastore-token-features #{:enhancements}
(premium-features-test/with-premium-features #{:enhancements}
(is (= false
(can-see-snippet?)))
(perms/grant-collection-read-permissions! (group/all-users) (assoc collection/root-collection :namespace "snippets"))
(is (= true
(can-see-snippet?)))))
(testing "\nIf we do not have a valid EE token, all Snippets should come back from the graph regardless of our perms"
(metastore-test/with-metastore-token-features #{}
(premium-features-test/with-premium-features #{}
(is (= true
(can-see-snippet?)))
(perms/revoke-collection-permissions! (group/all-users) (assoc collection/root-collection :namespace "snippets"))
......
......@@ -4,7 +4,7 @@
[metabase.models.collection :as collection]
[metabase.models.permissions :as perms]
[metabase.models.permissions-group :as group]
[metabase.public-settings.metastore-test :as metastore-test]
[metabase.public-settings.premium-features-test :as premium-features-test]
[metabase.test :as mt]
[metabase.util :as u]
[toucan.db :as db]))
......@@ -22,12 +22,12 @@
(testing (format "\nSnippet in %s" collection-name)
(mt/with-temp NativeQuerySnippet [snippet {:collection_id (:id collection)}]
(testing "\nShould be allowed regardless if EE features aren't enabled"
(metastore-test/with-metastore-token-features #{}
(premium-features-test/with-premium-features #{}
(is (= true
(has-perms? snippet))
"allowed?")))
(testing "\nWith EE features enabled"
(metastore-test/with-metastore-token-features #{:enhancements}
(premium-features-test/with-premium-features #{:enhancements}
(testing (format "\nShould not be allowed with no perms for %s" collection-name)
(is (= false
(has-perms? snippet))
......@@ -113,10 +113,10 @@
(when-not (= source-collection dest-collection)
(testing (format "\nMove from %s -> %s should need write ('curate') perms for both" (:name source-collection) (:name dest-collection))
(testing "\nShould be allowed if EE perms aren't enabled"
(metastore-test/with-metastore-token-features #{}
(premium-features-test/with-premium-features #{}
(is (= true
(has-perms?)))))
(metastore-test/with-metastore-token-features #{:enhancements}
(premium-features-test/with-premium-features #{:enhancements}
(doseq [c [source-collection dest-collection]]
(testing (format "\nPerms for only %s should fail" (:name c))
(try
......
(ns metabase-enterprise.enhancements.ee-strategy-impl-test
(:require [clojure.test :refer :all]
[metabase-enterprise.enhancements.ee-strategy-impl :as ee-strategy-impl]
[metabase.public-settings.metastore :as settings.metastore]
[metabase.public-settings.premium-features :as settings.premium-features]
[pretty.core :refer [PrettyPrintable]]))
(defprotocol ^:private MyProtocol
......@@ -20,17 +20,17 @@
(deftest generate-method-impl-test
(is (= '((m1 [_]
(metabase-enterprise.enhancements.ee-strategy-impl/invoke-ee-when-enabled
#'metabase.public-settings.metastore/enable-enhancements?
#'metabase.public-settings.premium-features/enable-enhancements?
metabase-enterprise.enhancements.ee-strategy-impl-test/m1
ee oss))
(m1 [_ a]
(metabase-enterprise.enhancements.ee-strategy-impl/invoke-ee-when-enabled
#'metabase.public-settings.metastore/enable-enhancements?
#'metabase.public-settings.premium-features/enable-enhancements?
metabase-enterprise.enhancements.ee-strategy-impl-test/m1
ee oss
a)))
(#'ee-strategy-impl/generate-method-impl
(list 'var 'metabase.public-settings.metastore/enable-enhancements?)
(list 'var 'metabase.public-settings.premium-features/enable-enhancements?)
'ee 'oss
{:var #'MyProtocol}
{:name 'm1
......@@ -45,23 +45,23 @@
(is (= '(metabase_enterprise.enhancements.ee_strategy_impl_test.MyProtocol
(m1 [_]
(metabase-enterprise.enhancements.ee-strategy-impl/invoke-ee-when-enabled
#'metabase.public-settings.metastore/enable-enhancements?
#'metabase.public-settings.premium-features/enable-enhancements?
metabase-enterprise.enhancements.ee-strategy-impl-test/m1
ee oss))
(m1 [_ a]
(metabase-enterprise.enhancements.ee-strategy-impl/invoke-ee-when-enabled
#'metabase.public-settings.metastore/enable-enhancements?
#'metabase.public-settings.premium-features/enable-enhancements?
metabase-enterprise.enhancements.ee-strategy-impl-test/m1
ee oss
a))
(m2 [_ a b]
(metabase-enterprise.enhancements.ee-strategy-impl/invoke-ee-when-enabled
#'metabase.public-settings.metastore/enable-enhancements?
#'metabase.public-settings.premium-features/enable-enhancements?
metabase-enterprise.enhancements.ee-strategy-impl-test/m2
ee oss
a b)))
(#'ee-strategy-impl/generate-protocol-impl
(list 'var 'metabase.public-settings.metastore/enable-enhancements?)
(list 'var 'metabase.public-settings.premium-features/enable-enhancements?)
'ee 'oss protocol-symb)))))))
(deftest e2e-test
......@@ -77,20 +77,20 @@
MyProtocol
(m2 [_ x y]
(- x y)))
impl (ee-strategy-impl/reify-ee-strategy-impl #'settings.metastore/enable-enhancements? ee oss MyProtocol)]
impl (ee-strategy-impl/reify-ee-strategy-impl #'settings.premium-features/enable-enhancements? ee oss MyProtocol)]
(testing "sanity check"
(is (= 3
(m2 ee 1 2)))
(is (= -1
(m2 oss 1 2))))
(with-redefs [settings.metastore/enable-enhancements? (constantly false)]
(with-redefs [settings.premium-features/enable-enhancements? (constantly false)]
(is (= -1
(m2 impl 1 2))))
(with-redefs [settings.metastore/enable-enhancements? (constantly true)]
(with-redefs [settings.premium-features/enable-enhancements? (constantly true)]
(is (= 3
(m2 impl 1 2))))
(testing "Should pretty print"
(is (= (str "(metabase-enterprise.enhancements.ee-strategy-impl/reify-ee-strategy-impl"
" #'metabase.public-settings.metastore/enable-enhancements?"
" #'metabase.public-settings.premium-features/enable-enhancements?"
" (ee) (oss))")
(pr-str impl))))))
......@@ -2,11 +2,11 @@
(:require [clojure.test :refer :all]
[metabase.integrations.google :as google]
[metabase.models.user :as user :refer [User]]
[metabase.public-settings.metastore :as metastore]
[metabase.public-settings.premium-features :as premium-features]
[metabase.test :as mt]))
(deftest google-auth-create-new-user!-test
(with-redefs [metastore/enable-sso? (constantly true)]
(with-redefs [premium-features/enable-sso? (constantly true)]
(testing "should support multiple domains (#5218)"
(mt/with-temporary-setting-values [google-auth-auto-create-accounts-domain "metabase.com,example.com"]
(mt/with-model-cleanup [User]
......
......@@ -3,7 +3,7 @@
[metabase-enterprise.enhancements.integrations.ldap :as ldap-ee]
[metabase.integrations.ldap :as ldap]
[metabase.models.user :as user :refer [User]]
[metabase.public-settings.metastore :as metastore]
[metabase.public-settings.premium-features :as premium-features]
[metabase.test :as mt]
[metabase.test.integrations.ldap :as ldap.test]
[metabase.util.schema :as su]
......@@ -11,7 +11,7 @@
[toucan.db :as db]))
(deftest find-test
(with-redefs [metastore/enable-enhancements? (constantly true)]
(with-redefs [premium-features/enable-enhancements? (constantly true)]
(ldap.test/with-ldap-server
(testing "find by username"
(is (= {:dn "cn=John Smith,ou=People,dc=metabase,dc=com"
......@@ -92,7 +92,7 @@
(ldap/find-user "sally.brown@metabase.com"))))))))
(deftest attribute-sync-test
(with-redefs [metastore/enable-enhancements? (constantly true)]
(with-redefs [premium-features/enable-enhancements? (constantly true)]
(ldap.test/with-ldap-server
(testing "find by email/username should return other attributes as well"
(is (= {:dn "cn=Lucky Pigeon,ou=Birds,dc=metabase,dc=com"
......@@ -165,7 +165,7 @@
(db/delete! User :%lower.email "john.smith@metabase.com"))))))))
(deftest update-attributes-on-login-test
(with-redefs [metastore/enable-enhancements? (constantly true)]
(with-redefs [premium-features/enable-enhancements? (constantly true)]
(ldap.test/with-ldap-server
(testing "Existing user's attributes are updated on fetch"
(try
......@@ -214,7 +214,7 @@
(db/delete! User :%lower.email "john.smith@metabase.com")))))))
(deftest fetch-or-create-user-test
(with-redefs [metastore/enable-enhancements? (constantly true)]
(with-redefs [premium-features/enable-enhancements? (constantly true)]
(ldap.test/with-ldap-server
(testing "a new user is created when they don't already exist"
(try
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment