From 2424dbba190cd01dbf7855fdee62efedb4dcf40b Mon Sep 17 00:00:00 2001 From: William Turner <william.turner@aero.bombardier.com> Date: Wed, 29 Mar 2017 12:34:55 -0400 Subject: [PATCH] Adds working admin panel with filter validation --- .../settings/components/SettingsLdapForm.jsx | 17 +++++++++++++++++ .../src/metabase/admin/settings/selectors.js | 3 ++- src/metabase/api/ldap.clj | 16 ++++++++++++++++ src/metabase/api/routes.clj | 2 ++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/metabase/api/ldap.clj diff --git a/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx b/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx index 4791c2010f8..095bedf0159 100644 --- a/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx +++ b/frontend/src/metabase/admin/settings/components/SettingsLdapForm.jsx @@ -56,8 +56,12 @@ export default class SettingsLdapForm extends Component { if (MetabaseUtils.isEmpty(value)) return; switch (validationType) { + case "email": + return !MetabaseUtils.validEmail(value) ? (validationMessage || "That's not a valid email address") : null; case "integer": return isNaN(parseInt(value)) ? (validationMessage || "That's not a valid integer") : null; + case "ldap_filter": + return (value.match(/\(/g) || []).length !== (value.match(/\)/g) || []).length ? (validationMessage || "Check your parentheses") : null; } } @@ -147,6 +151,19 @@ export default class SettingsLdapForm extends Component { let errorMessage = (formErrors && formErrors.elements) ? formErrors.elements[element.key] : validationErrors[element.key]; let value = formData[element.key] == null ? element.defaultValue : formData[element.key]; + if (element.key === "ldap-enabled") { + let configuredEnough = formData["ldap-host"] && formData['ldap-bind-dn'] && formData['ldap-password'] && formData['ldap-base']; + return ( + <SettingsSetting + key={element.key} + setting={{ ...element, value }} + updateSetting={(value) => this.handleChangeEvent(element, value)} + errorMessage={errorMessage} + disabled={!configuredEnough} + /> + ); + } + return ( <SettingsSetting key={element.key} diff --git a/frontend/src/metabase/admin/settings/selectors.js b/frontend/src/metabase/admin/settings/selectors.js index 8f6f5287565..dbd5785b49b 100644 --- a/frontend/src/metabase/admin/settings/selectors.js +++ b/frontend/src/metabase/admin/settings/selectors.js @@ -209,7 +209,8 @@ const SECTIONS = [ { key: "ldap-user-filter", display_name: "User filter", - type: "string" + type: "string", + validations: [["ldap_filter", "Check your parentheses"]] }, { key: "ldap-attribute-email", diff --git a/src/metabase/api/ldap.clj b/src/metabase/api/ldap.clj new file mode 100644 index 00000000000..73e109aa279 --- /dev/null +++ b/src/metabase/api/ldap.clj @@ -0,0 +1,16 @@ +(ns metabase.api.ldap + "/api/ldap endpoints" + (:require [compojure.core :refer [PUT]] + [metabase.api.common :refer :all] + [metabase.models.setting :as setting] + [metabase.util.schema :as su])) + +(defendpoint PUT "/settings" + "Update LDAP related settings. You must be a superuser to do this." + [:as {settings :body}] + {settings su/Map} + (check-superuser) + (setting/set-many! settings) + {:ok true}) + +(define-routes) diff --git a/src/metabase/api/routes.clj b/src/metabase/api/routes.clj index 20ed2d16ff2..5d7d642fa40 100644 --- a/src/metabase/api/routes.clj +++ b/src/metabase/api/routes.clj @@ -13,6 +13,7 @@ [getting-started :as getting-started] [geojson :as geojson] [label :as label] + [ldap :as ldap] [metric :as metric] [notify :as notify] [permissions :as permissions] @@ -61,6 +62,7 @@ (context "/getting_started" [] (+auth getting-started/routes)) (context "/geojson" [] (+auth geojson/routes)) (context "/label" [] (+auth label/routes)) + (context "/ldap" [] (+auth ldap/routes)) (context "/metric" [] (+auth metric/routes)) (context "/notify" [] (+apikey notify/routes)) (context "/permissions" [] (+auth permissions/routes)) -- GitLab