From 1a8cfe4ee66d3661c937293d564698a23389936a Mon Sep 17 00:00:00 2001 From: DacongDA Date: Thu, 6 Feb 2025 23:50:39 +0800 Subject: [PATCH] feat: can fetch SAML metadata from URL (#3560) --- web/src/ProviderEditPage.js | 57 +++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js index 7f472e1c..791f6b4a 100644 --- a/web/src/ProviderEditPage.js +++ b/web/src/ProviderEditPage.js @@ -467,6 +467,39 @@ class ProviderEditPage extends React.Component { this.updateProviderField("issuerUrl", issuerUrl); } + fetchSamlMetadata() { + this.setState({ + metadataLoading: true, + }); + fetch(this.state.requestUrl, { + method: "GET", + }).then(res => { + if (!res.ok) { + return Promise.reject("error"); + } + return res.text(); + }).then(text => { + this.updateProviderField("metadata", text); + this.parseSamlMetadata(); + Setting.showMessage("success", i18next.t("general:Successfully added")); + }).catch(err => { + Setting.showMessage("error", err.message); + }).finally(() => { + this.setState({ + metadataLoading: false, + }); + }); + } + + parseSamlMetadata() { + try { + this.loadSamlConfiguration(); + Setting.showMessage("success", i18next.t("provider:Parse metadata successfully")); + } catch (err) { + Setting.showMessage("error", i18next.t("provider:Can not parse metadata")); + } + } + renderProvider() { return ( + + + {Setting.getLabel(i18next.t("provider:Metadata url"), i18next.t("provider:Metadata url - Tooltip"))} : + + + { + this.setState({ + requestUrl: e.target.value, + }); + }} /> + + + + + {Setting.getLabel(i18next.t("provider:Metadata"), i18next.t("provider:Metadata - Tooltip"))} : @@ -1255,14 +1303,7 @@ class ProviderEditPage extends React.Component { -