diff --git a/object/provider.go b/object/provider.go index 5f408295..04d03944 100644 --- a/object/provider.go +++ b/object/provider.go @@ -29,6 +29,7 @@ type Provider struct { DisplayName string `xorm:"varchar(100)" json:"displayName"` Category string `xorm:"varchar(100)" json:"category"` Type string `xorm:"varchar(100)" json:"type"` + SubType string `xorm:"varchar(100)" json:"subType"` Method string `xorm:"varchar(100)" json:"method"` ClientId string `xorm:"varchar(100)" json:"clientId"` ClientSecret string `xorm:"varchar(100)" json:"clientSecret"` diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js index 5b1bd02c..61d3ceed 100644 --- a/web/src/ProviderEditPage.js +++ b/web/src/ProviderEditPage.js @@ -91,18 +91,21 @@ class ProviderEditPage extends React.Component { getAppIdRow() { let text, tooltip; if (this.state.provider.category === "SMS" && this.state.provider.type === "Tencent Cloud SMS") { - text = "provider:App ID"; - tooltip = "provider:App ID - Tooltip"; + text = i18next.t("provider:App ID"); + tooltip = i18next.t("provider:App ID - Tooltip"); + } else if (this.state.provider.type === "WeCom" && this.state.provider.subType === "Internal") { + text = i18next.t("provider:Agent ID"); + tooltip = i18next.t("provider:Agent ID - Tooltip"); } else if (this.state.provider.category === "SMS" && this.state.provider.type === "Volc Engine SMS") { - text = "provider:SMS account"; - tooltip = "provider:SMS account - Tooltip"; + text = i18next.t("provider:SMS account"); + tooltip = i18next.t("provider:SMS account - Tooltip"); } else { return null; } return - {Setting.getLabel(i18next.t(text), i18next.t(tooltip))} : + {Setting.getLabel(text, tooltip)} : { @@ -205,20 +208,36 @@ class ProviderEditPage extends React.Component { { this.state.provider.type !== "WeCom" ? null : ( - - - {Setting.getLabel(i18next.t("provider:Method"), i18next.t("provider:Method - Tooltip"))} : - - - - - + + + + {Setting.getLabel(i18next.t("provider:Sub type"), i18next.t("provider:Sub type - Tooltip"))} : + + + + + + + + {Setting.getLabel(i18next.t("provider:Method"), i18next.t("provider:Method - Tooltip"))} : + + + + + + ) } diff --git a/web/src/Setting.js b/web/src/Setting.js index ca2a1e81..5be63857 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -437,6 +437,19 @@ export function getProviderTypeOptions(category) { } } +export function getProviderSubTypeOptions(type) { + if (type === "WeCom") { + return ( + [ + {id: 'Internal', name: 'Internal'}, + {id: 'Third-party', name: 'Third-party'}, + ] + ); + } else { + return []; + } +} + export function renderLogo(application) { if (application === null) { return null; diff --git a/web/src/auth/Provider.js b/web/src/auth/Provider.js index f5a6f1ee..2c7f16d2 100644 --- a/web/src/auth/Provider.js +++ b/web/src/auth/Provider.js @@ -60,6 +60,7 @@ const authInfo = { scope: "snsapi_userinfo", endpoint: "https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect", silentEndpoint: "https://open.weixin.qq.com/connect/oauth2/authorize", + internalEndpoint: "https://open.work.weixin.qq.com/wwopen/sso/qrConnect", }, Lark: { // scope: "email", @@ -192,7 +193,7 @@ export function getAuthUrl(application, provider, method) { return ""; } - const endpoint = authInfo[provider.type].endpoint; + let endpoint = authInfo[provider.type].endpoint; const redirectUri = `${window.location.origin}/callback`; const scope = authInfo[provider.type].scope; const state = Util.getQueryParamsToState(application.name, provider.name, method); @@ -220,12 +221,27 @@ export function getAuthUrl(application, provider, method) { } else if (provider.type === "LinkedIn") { return `${endpoint}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}`; } else if (provider.type === "WeCom") { - if (provider.method === "Silent") { - return `${authInfo[provider.type].silentEndpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&scope=${scope}&response_type=code#wechat_redirect`; - } else if (provider.method === "Normal") { - return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&usertype=member`; + if (provider.subType === "Internal") { + if (provider.method === "Silent") { + endpoint = authInfo[provider.type].silentEndpoint; + return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&scope=${scope}&response_type=code#wechat_redirect`; + } else if (provider.method === "Normal") { + endpoint = authInfo[provider.type].internalEndpoint; + return `${endpoint}?appid=${provider.clientId}&agentid=${provider.appId}&redirect_uri=${redirectUri}&state=${state}&usertype=member`; + } else { + return `https://error:not-supported-provider-method:${provider.method}`; + } + } else if (provider.subType === "Third-party") { + if (provider.method === "Silent") { + endpoint = authInfo[provider.type].silentEndpoint; + return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&scope=${scope}&response_type=code#wechat_redirect`; + } else if (provider.method === "Normal") { + return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&usertype=member`; + } else { + return `https://error:not-supported-provider-method:${provider.method}`; + } } else { - return `https://error:not-supported-provider-method:${provider.method}`; + return `https://error:not-supported-provider-sub-type:${provider.subType}`; } } else if (provider.type === "Lark") { return `${endpoint}?app_id=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}`; diff --git a/web/src/locales/de/data.json b/web/src/locales/de/data.json index f145f747..07d2ae25 100644 --- a/web/src/locales/de/data.json +++ b/web/src/locales/de/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "Zugangsschlüssel", "Access key - Tooltip": "Zugriffsschlüssel - Tooltip", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "Eimer", "Bucket - Tooltip": "Storage bucket name", "Can not parse Metadata": "Metadaten können nicht analysiert werden", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "Region Endpunkt für Internet", "Region endpoint for Intranet": "Region Endpunkt für Intranet", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "SP-ACS-URL", "SP ACS URL - Tooltip": "SP ACS URL - Tooltip", "SP Entity ID": "SP Entity ID", @@ -308,6 +314,8 @@ "Signup HTML": "HTML registrieren", "Signup HTML - Edit": "HTML registrieren - Bearbeiten", "Signup HTML - Tooltip": "HTML registrieren - Tooltip", + "Sub type": "Sub type", + "Sub type - Tooltip": "Sub type - Tooltip", "Template Code": "Vorlagencode", "Template Code - Tooltip": "Unique string-style identifier", "Terms of Use": "Nutzungsbedingungen", diff --git a/web/src/locales/en/data.json b/web/src/locales/en/data.json index f202a3dd..0bb974a2 100644 --- a/web/src/locales/en/data.json +++ b/web/src/locales/en/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "Access key", "Access key - Tooltip": "Access key - Tooltip", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "Bucket", "Bucket - Tooltip": "Bucket - Tooltip", "Can not parse Metadata": "Can not parse Metadata", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "Region endpoint for Internet", "Region endpoint for Intranet": "Region endpoint for Intranet", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "SP ACS URL", "SP ACS URL - Tooltip": "SP ACS URL - Tooltip", "SP Entity ID": "SP Entity ID", @@ -308,6 +314,8 @@ "Signup HTML": "Signup HTML", "Signup HTML - Edit": "Signup HTML - Edit", "Signup HTML - Tooltip": "Signup HTML - Tooltip", + "Sub type": "Sub type", + "Sub type - Tooltip": "Sub type - Tooltip", "Template Code": "Template Code", "Template Code - Tooltip": "Template Code - Tooltip", "Terms of Use": "Terms of Use", diff --git a/web/src/locales/fr/data.json b/web/src/locales/fr/data.json index 078b4f5a..646e54cd 100644 --- a/web/src/locales/fr/data.json +++ b/web/src/locales/fr/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "Clé d'accès", "Access key - Tooltip": "Touche d'accès - Infobulle", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "Seau", "Bucket - Tooltip": "Storage bucket name", "Can not parse Metadata": "Impossible d'analyser les métadonnées", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "Point de terminaison de la région pour Internet", "Region endpoint for Intranet": "Point de terminaison de la région pour Intranet", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "URL du SP ACS", "SP ACS URL - Tooltip": "URL SP ACS - infobulle", "SP Entity ID": "ID de l'entité SP", @@ -308,6 +314,8 @@ "Signup HTML": "Inscription HTML", "Signup HTML - Edit": "Inscription HTML - Modifier", "Signup HTML - Tooltip": "Inscription HTML - infobulle", + "Sub type": "Sub type", + "Sub type - Tooltip": "Sub type - Tooltip", "Template Code": "Code du modèle", "Template Code - Tooltip": "Unique string-style identifier", "Terms of Use": "Conditions d'utilisation", diff --git a/web/src/locales/ja/data.json b/web/src/locales/ja/data.json index 037b724a..be36da5b 100644 --- a/web/src/locales/ja/data.json +++ b/web/src/locales/ja/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "アクセスキー", "Access key - Tooltip": "アクセスキー → ツールチップ", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "バケツ入りバケツ", "Bucket - Tooltip": "Storage bucket name", "Can not parse Metadata": "メタデータをパースできません", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "インターネットのリージョンエンドポイント", "Region endpoint for Intranet": "イントラネットのリージョンエンドポイント", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "SP ACS URL", "SP ACS URL - Tooltip": "SP ACS URL - ツールチップ", "SP Entity ID": "SP ID", @@ -308,6 +314,8 @@ "Signup HTML": "HTMLの登録", "Signup HTML - Edit": "HTMLの登録 - 編集", "Signup HTML - Tooltip": "サインアップ HTML - ツールチップ", + "Sub type": "Sub type", + "Sub type - Tooltip": "Sub type - Tooltip", "Template Code": "テンプレートコード", "Template Code - Tooltip": "Unique string-style identifier", "Terms of Use": "利用規約", diff --git a/web/src/locales/ko/data.json b/web/src/locales/ko/data.json index d835084b..a106821e 100644 --- a/web/src/locales/ko/data.json +++ b/web/src/locales/ko/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "Access key", "Access key - Tooltip": "Access key - Tooltip", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "Bucket", "Bucket - Tooltip": "Storage bucket name", "Can not parse Metadata": "Can not parse Metadata", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "Region endpoint for Internet", "Region endpoint for Intranet": "Region endpoint for Intranet", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "SP ACS URL", "SP ACS URL - Tooltip": "SP ACS URL - Tooltip", "SP Entity ID": "SP Entity ID", @@ -308,6 +314,8 @@ "Signup HTML": "Signup HTML", "Signup HTML - Edit": "Signup HTML - Edit", "Signup HTML - Tooltip": "Signup HTML - Tooltip", + "Sub type": "Sub type", + "Sub type - Tooltip": "Sub type - Tooltip", "Template Code": "Template Code", "Template Code - Tooltip": "Unique string-style identifier", "Terms of Use": "Terms of Use", diff --git a/web/src/locales/ru/data.json b/web/src/locales/ru/data.json index 1787e9ca..7b74ca2d 100644 --- a/web/src/locales/ru/data.json +++ b/web/src/locales/ru/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "Ключ доступа", "Access key - Tooltip": "Ключ доступа - Подсказка", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "Ведро", "Bucket - Tooltip": "Storage bucket name", "Can not parse Metadata": "Невозможно разобрать метаданные", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "Конечная точка региона для Интернета", "Region endpoint for Intranet": "Конечная точка региона Интранета", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "SP ACS URL", "SP ACS URL - Tooltip": "SP ACS URL - Подсказка", "SP Entity ID": "Идентификатор сущности SP", @@ -308,6 +314,8 @@ "Signup HTML": "Регистрация HTML", "Signup HTML - Edit": "Регистрация HTML - Редактировать", "Signup HTML - Tooltip": "Регистрация HTML - Подсказка", + "Sub type": "Sub type", + "Sub type - Tooltip": "Sub type - Tooltip", "Template Code": "Код шаблона", "Template Code - Tooltip": "Unique string-style identifier", "Terms of Use": "Условия использования", diff --git a/web/src/locales/zh/data.json b/web/src/locales/zh/data.json index a20c0b41..dce0f11b 100644 --- a/web/src/locales/zh/data.json +++ b/web/src/locales/zh/data.json @@ -247,6 +247,10 @@ "provider": { "Access key": "访问密钥", "Access key - Tooltip": "Access key", + "Agent ID": "Agent ID", + "Agent ID - Tooltip": "Agent ID - Tooltip", + "App ID": "App ID", + "App ID - Tooltip": "App ID - Tooltip", "Bucket": "存储桶", "Bucket - Tooltip": "Bucket名称", "Can not parse Metadata": "无法解析元数据", @@ -293,6 +297,8 @@ "Region endpoint for Internet": "地域节点 (外网)", "Region endpoint for Intranet": "地域节点 (内网)", "SAML 2.0 Endpoint (HTTP)": "SAML 2.0 Endpoint (HTTP)", + "SMS account": "SMS account", + "SMS account - Tooltip": "SMS account - Tooltip", "SP ACS URL": "SP ACS URL", "SP ACS URL - Tooltip": "SP ACS URL - 工具提示", "SP Entity ID": "SP 实体 ID", @@ -308,6 +314,8 @@ "Signup HTML": "注册 HTML", "Signup HTML - Edit": "注册 HTML - 编辑", "Signup HTML - Tooltip": "注册 HTML - 工具提示", + "Sub type": "子类型", + "Sub type - Tooltip": "子类型", "Template Code": "模板CODE", "Template Code - Tooltip": "模板CODE", "Terms of Use": "使用条款",